/opt/canhelp/apps/web/.next/cache/webpack/server-production
NameSizeModeActions
0.pack925145390644editdlrm
1.pack12673790644editdlrm
2.pack43735990644editdlrm
3.pack7451990644editdlrm
4.pack65204660644editdlrm
5.pack259717610644editdlrm
6.pack7518430644editdlrm
7.pack46388840644editdlrm
8.pack48452960644editdlrm
9.pack97020644editdlrm
10.pack27038500644editdlrm
11.pack1361530644editdlrm
12.pack24060644editdlrm
13.pack4277340644editdlrm
14.pack6358240644editdlrm
15.pack19769150644editdlrm
16.pack85740644editdlrm
17.pack24591570644editdlrm
18.pack119171890644editdlrm
19.pack768050644editdlrm
20.pack31443360644editdlrm
21.pack60115380644editdlrm
22.pack10241010644editdlrm
index.pack77214480644editdlrm
index.pack.old84399530644editdlrm
Edit: /opt/canhelp/apps/web/.next/cache/webpack/server-production/8.pack (4845296B)
wpcIwebpack/lib/cache/PackFileCacheStrategyPackContentItems ResolverCachePlugin|normal|default|alias=|false|dependencyType=|esm|modules=[|0=|node_modules|]|fallback=|false|exportsFields=[|0=|exports|]|importsFields=[|0=|imports|]|conditionNames=[|0=|node|1=|import|]|descriptionFiles=[|0=|package.json|]|extensions=[|0=|.js|1=|.json|2=|.node|]|enforceExtensions=|false|symlinks=|true|mainFields=[|0=|main|]|mainFiles=[|0=|index|]|roots=[|]|fullySpecified=|true|preferRelative=|false|preferAbsolute=|false|restrictions=[|]|path=|/opt/canhelp/apps/web|request=|/opt/canhelp/apps/web/src/app/layout.tsxKResolverCachePlugin|normal|default|alias=[|server-only$=|next/dist/compiled/server-only/empty|client-only$=|next/dist/compiled/client-only/error|next/dist/compiled/server-only$=|next/dist/compiled/server-only/empty|next/dist/compiled/client-only$=|next/dist/compiled/client-only/error|/opt/canhelp/node_modules/next/head.js=|next/dist/client/components/noop-head|/opt/canhelp/node_modules/next/image.js=|next/dist/api/image|/opt/canhelp/node_modules/next/constants.js=|next/dist/api/constants|/opt/canhelp/node_modules/next/router.js=|next/dist/api/router|/opt/canhelp/node_modules/next/dynamic.js=|next/dist/api/app-dynamic|/opt/canhelp/node_modules/next/script.js=|next/dist/api/script|/opt/canhelp/node_modules/next/link.js=|next/dist/client/app-dir/link|/opt/canhelp/node_modules/next/form.js=|next/dist/client/app-dir/form|/opt/canhelp/node_modules/next/navigation.js=|next/dist/api/navigation.react-server|/opt/canhelp/node_modules/next/headers.js=|next/dist/api/headers|/opt/canhelp/node_modules/next/og.js=|next/dist/api/og|/opt/canhelp/node_modules/next/server.js=|next/dist/api/server|/opt/canhelp/node_modules/next/document.js=|next/dist/api/document|/opt/canhelp/node_modules/next/app.js=|next/dist/api/app|next=|/opt/canhelp/node_modules/next|]|dependencyType=|esm|path=|/opt/canhelp/apps/web|request=|/opt/canhelp/apps/web/src/app/layout.tsxCompilation/modules|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-loader/index.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[4].use[0]!/opt/canhelp/apps/web/src/app/layout.tsx|rsc!FlagDependencyExportsPlugin|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-loader/index.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[4].use[0]!/opt/canhelp/apps/web/src/app/layout.tsx|rsc0Compilation/codeGeneration|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-loader/index.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[4].use[0]!/opt/canhelp/apps/web/src/app/layout.tsx|rsc|webpack-runtimeCompilation/assets|chunk809MinifierWebpackPlugin|809.jswebpack/lib/cache/ResolverCachePlugin`_ResolverCachePluginCacheMisscontextpathrequestqueryfragmentmoduledirectoryfileinternalfullySpecifieddescriptionFilePathdescriptionFileDatadescriptionFileRootrelativePath  /opt/canhelp/apps/web/src/app/layout.tsx0/opt/canhelp/apps/web/package.jsonnameversionprivatescriptsdependenciesdevDependenciesweb0.1.0 devbuildstartlinttypechecknext dev --port 3000NODE_ENV=production next buildnext startnext linttsc --noEmit` @canhelp/shared@marsidev/react-turnstile@types/leafletbetter-authleafletnanostoresnextreactreact-domreact-leafletreact-leaflet-clustersocket.io-clientzod*^1.5.0^1.9.21^1.2.7^1.9.4^1.2.0^15.1.6^19.0.0^5.0.0^4.1.3^4.8.1^3.24.1@types/node@types/react@types/react-domautoprefixerpostcsstailwindcsstypescript^22.10.7^19.0.6^19.0.3^10.4.20^8.5.1^3.4.17^5.7.3/opt/canhelp/apps/web./src/app/layout.tsxwebpack/lib/FileSystemInfoSnapshot@ x2yB/opt/canhelp/apps/web/src/app/package.json/opt/canhelp/apps/web/src/package.json  x2yB /opt/canhelp/apps/web/src/app/opt/canhelp/apps/web/src/opt/canhelp/apps/opt/canhelp/opt/safeTimetimestamphash!`nuyBPnuyBd1168d5d5ce4fcb8!P.yB@.yB1b80f4f5560022f3 issuerissuerLayercompilerrscserver @ 2yB`/opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/package.json/opt/canhelp/apps/web/opt/canhelp/apps/web/src/package.json/opt/canhelp/apps/web/opt/canhelp/apps/web/package.json/opt/canhelp/apps/web/opt/canhelp/apps/package.json/opt/canhelp/apps/web/opt/canhelp/package.json/opt/canhelp/apps/web/opt/package.json׽/opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/layout.tsx/opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/layout.tsx.js/opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/layout.tsx.mjs/opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/layout.tsx.tsx/opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/layout.tsx.ts/opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/layout.tsx.jsx/opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/layout.tsx.json/opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/layout.tsx.wasmwebpack/lib/NormalModulewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSourceimport { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime"; import { cookies, headers } from 'next/headers'; import { cache } from 'react'; import './globals.css'; import { Header } from '@/components/Header'; import { Footer } from '@/components/Footer'; import { LocaleProvider } from '@/context/locale'; import { LocationProvider } from '@/context/location'; import { ScrollToTopButton } from '@/components/ScrollToTopButton'; import { AdminRolePreview } from '@/components/AdminRolePreview'; // React.cache() deduplicates identical calls within the same request render pass const fetchSeoSettings = cache(async ()=>{ try { const apiBase = process.env.INTERNAL_API_URL || 'http://localhost:4000'; const res = await fetch(`${apiBase}/api/admin/seo-public`, { next: { revalidate: 60 } }); if (!res.ok) return {}; return res.json(); } catch { return {}; } }); export async function generateMetadata() { const seo = await fetchSeoSettings(); const cookieStore = await cookies(); const rawLocale = cookieStore.get('canhelp_locale')?.value; const locale = [ 'el', 'en', 'ru', 'uk' ].includes(rawLocale ?? '') ? rawLocale : 'el'; const title = seo[`seo.siteTitle.${locale}`] || seo['seo.siteTitle.el'] || seo['seo.siteTitle'] || 'CanHelp — Βρες ειδικό για κάθε δουλειά'; const description = seo[`seo.siteDescription.${locale}`] || seo['seo.siteDescription.el'] || seo['seo.siteDescription'] || 'Η ελληνική πλατφόρμα για online ανάθεση εργασιών. Βρες επαγγελματίες για καθαρισμό, υδραυλικά, μαθήματα και πολλά άλλα.'; return { title, description, keywords: 'εργασίες, ειδικοί, Ελλάδα, freelance, καθαρισμός, υδραυλικά', robots: seo['seo.indexingEnabled'] === 'false' ? 'noindex, nofollow' : undefined }; } export default async function RootLayout({ children }) { const cookieStore = await cookies(); const headerStore = await headers(); const pathname = headerStore.get('x-pathname') ?? ''; const isStandalone = pathname.startsWith('/site/'); const rawLocale = cookieStore.get('canhelp_locale')?.value; const locales = [ 'el', 'en', 'uk', 'ru' ]; const initialLocale = locales.includes(rawLocale) ? rawLocale : 'el'; const initialLocation = decodeURIComponent(cookieStore.get('canhelp_location')?.value ?? ''); const seo = await fetchSeoSettings(); const headScripts = seo['seo.headScripts'] ?? ''; const parsedScripts = []; if (headScripts.trim()) { const re = /]*)>([\s\S]*?)<\/script>|]*)\/>/gi; let m; while((m = re.exec(headScripts)) !== null){ const attrs = m[1] ?? m[3] ?? ''; const inline = (m[2] ?? '').trim(); const srcMatch = attrs.match(/src=["']([^"']+)["']/); parsedScripts.push({ src: srcMatch?.[1], async: /\basync\b/i.test(attrs), defer: /\bdefer\b/i.test(attrs), inline: inline || undefined }); } } return /*#__PURE__*/ _jsxs("html", { lang: initialLocale, suppressHydrationWarning: true, children: [ /*#__PURE__*/ _jsx("head", { children: parsedScripts.map((s, i)=>{ if (s.src) return /*#__PURE__*/ _jsx("script", { src: s.src, async: s.async, defer: s.defer }, i); if (s.inline) return /*#__PURE__*/ _jsx("script", { dangerouslySetInnerHTML: { __html: s.inline } }, i); return null; }) }), /*#__PURE__*/ _jsx("body", { children: /*#__PURE__*/ _jsx(LocaleProvider, { initialLocale: initialLocale, children: /*#__PURE__*/ _jsx(LocationProvider, { initialSlug: initialLocation, children: !isStandalone ? /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx(Header, {}), /*#__PURE__*/ _jsx("main", { className: "min-h-screen", children: children }), /*#__PURE__*/ _jsx(ScrollToTopButton, {}), /*#__PURE__*/ _jsx(AdminRolePreview, {}), /*#__PURE__*/ _jsx(Footer, {}) ] }) : /*#__PURE__*/ _jsx("main", { className: "min-h-screen", children: children }) }) }) }) ] }); } exportsTypenamespace javascript/autoaliasmainFieldsconditionNames`$server-only$client-only$next/dist/compiled/server-only$next/dist/compiled/client-only$/opt/canhelp/node_modules/next/head.js/opt/canhelp/node_modules/next/image.js/opt/canhelp/node_modules/next/constants.js/opt/canhelp/node_modules/next/router.js/opt/canhelp/node_modules/next/dynamic.js/opt/canhelp/node_modules/next/script.js/opt/canhelp/node_modules/next/link.js/opt/canhelp/node_modules/next/form.js/opt/canhelp/node_modules/next/navigation.js/opt/canhelp/node_modules/next/headers.js/opt/canhelp/node_modules/next/og.js/opt/canhelp/node_modules/next/server.js/opt/canhelp/node_modules/next/document.js/opt/canhelp/node_modules/next/app.jsreact$react/compiler-runtime$react/jsx-dev-runtime$react/jsx-runtime$react-dom$react-dom/client$react-dom/server$react-dom/server.browser$react-dom/server.edge$react-dom/static$react-dom/static.browser$react-dom/static.edge$react-server-dom-webpack/client$react-server-dom-webpack/server$react-server-dom-webpack/server.node$react-server-dom-webpack/static$@vercel/turbopack-ecmascript-runtime/browser/dev/hmr-client/hmr-client.tssnext/dist/compiled/server-only/emptynext/dist/compiled/client-only/errornext/dist/client/components/noop-headnext/dist/api/imagenext/dist/api/constantsnext/dist/api/routernext/dist/api/app-dynamicnext/dist/api/scriptnext/dist/client/app-dir/linknext/dist/client/app-dir/formnext/dist/api/navigation.react-servernext/dist/api/headersnext/dist/api/ognext/dist/api/servernext/dist/api/documentnext/dist/api/appnext/dist/server/route-modules/app-page/vendored/rsc/reactnext/dist/server/route-modules/app-page/vendored/rsc/react-compiler-runtimenext/dist/server/route-modules/app-page/vendored/rsc/react-jsx-dev-runtimenext/dist/server/route-modules/app-page/vendored/rsc/react-jsx-runtimenext/dist/server/route-modules/app-page/vendored/rsc/react-domnext/dist/compiled/react-dom/clientnext/dist/compiled/react-dom/server.nodenext/dist/compiled/react-dom/server.browsernext/dist/build/webpack/alias/react-dom-server.jsnext/dist/compiled/react-dom/static.nodenext/dist/compiled/react-dom/static.browsernext/dist/compiled/react-dom/static.edgenext/dist/compiled/react-server-dom-webpack/client.nodenext/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-webpack-servernext/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-webpack-staticnext/dist/client/dev/noop-turbopack-hmr/opt/canhelp/node_modules/next(mainreact-server...`cacheableparsedfileDependenciescontextDependenciesmissingDependenciesbuildDependenciesvalueDependenciesvassetsassetsInfostrictexportsArgumenttopLevelDeclarationssnapshot webpack/lib/util/LazySet/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-loader/index.js/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js webpack/DefinePlugin_hash4028310f8a7e0e926aa9dd8ftypeactionIdsclientRefsclientEntryTypeisClientRefy  __webpack_exports__fetchSeoSettingsgenerateMetadata*default*RootLayout ;1yB  _` webpack/lib/dependencies/HarmonyCompatibilityDependency dwebpack/lib/dependencies/ConstDependency`V `V`W@ `0A `A `A `-A `-AM `2AN `6A `CA  `Awebpack/lib/dependencies/HarmonyExportHeaderDependency A A c, A A c-y `%webpack/lib/dependencies/HarmonyImportSideEffectDependencyreact/jsx-runtime `Vnext/headers `0 `./globals.css `@/components/Header `-@/components/Footer `-@/context/locale `2@/context/location `6 @/components/ScrollToTopButton `C @/components/AdminRolePreview `Awebpack/lib/dependencies/HarmonyImportSpecifierDependencya cache Av{   c  webpack/lib/dependencies/HarmonyExportSpecifierDependency` c, cookies AOV    c%default c-y  A    c..% headers A    c//% jsxs_jsxs A    cMM jsx_jsx A" &    cQQ  A    cS4S8  Aqu   cX7X;  Auy   c``  A   ca(a, LocaleProvider A 4 ca-a;  A!%   cc,c0 LocationProvider A&6 4 cc1cA  A   ce@eE Fragment_Fragment A 4 ceFeO  A   cg.g2 Header A$ 4 cg3g9  AY]   ch.h2  A04   cl.l2 ScrollToTopButton A5F 4  cl3lD  A{   cm.m2 AdminRolePreview A 4  cm3mC  A   cn.n2 Footer A 4 cn3n9  A#  vv cp+p/ webpack/lib/ModuleGraphRestoreProvidedData  _providedcanMangleProvideterminalBindingexportsInfoI  sourcesruntimeRequirementsdatajavascriptwebpack/lib/util/registerExternalSerializerwebpack-sources/CachedSource  webpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource__webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ RootLayout), /* harmony export */ generateMetadata: () => (/* binding */ generateMetadata) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5939); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var next_headers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(56057); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(11110); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _globals_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(14276); /* harmony import */ var _globals_css__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_globals_css__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _components_Header__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(67674); /* harmony import */ var _components_Footer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(39348); /* harmony import */ var _context_locale__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(20138); /* harmony import */ var _context_location__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(1697); /* harmony import */ var _components_ScrollToTopButton__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(32948); /* harmony import */ var _components_AdminRolePreview__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(28222); webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSourceimport { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime"; import { cookies, headers } from 'next/headers'; import { cache } from 'react'; import './globals.css'; import { Header } from '@/components/Header'; import { Footer } from '@/components/Footer'; import { LocaleProvider } from '@/context/locale'; import { LocationProvider } from '@/context/location'; import { ScrollToTopButton } from '@/components/ScrollToTopButton'; import { AdminRolePreview } from '@/components/AdminRolePreview'; // React.cache() deduplicates identical calls within the same request render pass const fetchSeoSettings = cache(async ()=>{ try { const apiBase = process.env.INTERNAL_API_URL || 'http://localhost:4000'; const res = await fetch(`${apiBase}/api/admin/seo-public`, { next: { revalidate: 60 } }); if (!res.ok) return {}; return res.json(); } catch { return {}; } }); export async function generateMetadata() { const seo = await fetchSeoSettings(); const cookieStore = await cookies(); const rawLocale = cookieStore.get('canhelp_locale')?.value; const locale = [ 'el', 'en', 'ru', 'uk' ].includes(rawLocale ?? '') ? rawLocale : 'el'; const title = seo[`seo.siteTitle.${locale}`] || seo['seo.siteTitle.el'] || seo['seo.siteTitle'] || 'CanHelp — Βρες ειδικό για κάθε δουλειά'; const description = seo[`seo.siteDescription.${locale}`] || seo['seo.siteDescription.el'] || seo['seo.siteDescription'] || 'Η ελληνική πλατφόρμα για online ανάθεση εργασιών. Βρες επαγγελματίες για καθαρισμό, υδραυλικά, μαθήματα και πολλά άλλα.'; return { title, description, keywords: 'εργασίες, ειδικοί, Ελλάδα, freelance, καθαρισμός, υδραυλικά', robots: seo['seo.indexingEnabled'] === 'false' ? 'noindex, nofollow' : undefined }; } export default async function RootLayout({ children }) { const cookieStore = await cookies(); const headerStore = await headers(); const pathname = headerStore.get('x-pathname') ?? ''; const isStandalone = pathname.startsWith('/site/'); const rawLocale = cookieStore.get('canhelp_locale')?.value; const locales = [ 'el', 'en', 'uk', 'ru' ]; const initialLocale = locales.includes(rawLocale) ? rawLocale : 'el'; const initialLocation = decodeURIComponent(cookieStore.get('canhelp_location')?.value ?? ''); const seo = await fetchSeoSettings(); const headScripts = seo['seo.headScripts'] ?? ''; const parsedScripts = []; if (headScripts.trim()) { const re = /]*)>([\s\S]*?)<\/script>|]*)\/>/gi; let m; while((m = re.exec(headScripts)) !== null){ const attrs = m[1] ?? m[3] ?? ''; const inline = (m[2] ?? '').trim(); const srcMatch = attrs.match(/src=["']([^"']+)["']/); parsedScripts.push({ src: srcMatch?.[1], async: /\basync\b/i.test(attrs), defer: /\bdefer\b/i.test(attrs), inline: inline || undefined }); } } return /*#__PURE__*/ _jsxs("html", { lang: initialLocale, suppressHydrationWarning: true, children: [ /*#__PURE__*/ _jsx("head", { children: parsedScripts.map((s, i)=>{ if (s.src) return /*#__PURE__*/ _jsx("script", { src: s.src, async: s.async, defer: s.defer }, i); if (s.inline) return /*#__PURE__*/ _jsx("script", { dangerouslySetInnerHTML: { __html: s.inline } }, i); return null; }) }), /*#__PURE__*/ _jsx("body", { children: /*#__PURE__*/ _jsx(LocaleProvider, { initialLocale: initialLocale, children: /*#__PURE__*/ _jsx(LocationProvider, { initialSlug: initialLocation, children: !isStandalone ? /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx(Header, {}), /*#__PURE__*/ _jsx("main", { className: "min-h-screen", children: children }), /*#__PURE__*/ _jsx(ScrollToTopButton, {}), /*#__PURE__*/ _jsx(AdminRolePreview, {}), /*#__PURE__*/ _jsx(Footer, {}) ] }) : /*#__PURE__*/ _jsx("main", { className: "min-h-screen", children: children }) }) }) }) ] }); } c%UW_LN vzOU  " _% qtux!$&5#Y\035E{~F"(0,react__WEBPACK_IMPORTED_MODULE_2__.cache)(0,next_headers__WEBPACK_IMPORTED_MODULE_1__/* .cookies */ .UL)(0,next_headers__WEBPACK_IMPORTED_MODULE_1__/* .headers */ .b3)(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)_context_locale__WEBPACK_IMPORTED_MODULE_6__.LocaleProvider_context_location__WEBPACK_IMPORTED_MODULE_7__.LocationProviderreact_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment_components_Header__WEBPACK_IMPORTED_MODULE_4__.Header_components_ScrollToTopButton__WEBPACK_IMPORTED_MODULE_8__.ScrollToTopButton_components_AdminRolePreview__WEBPACK_IMPORTED_MODULE_9__.AdminRolePreview_components_Footer__WEBPACK_IMPORTED_MODULE_5__.FooterbuffersourcesizemapsU__webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ RootLayout), /* harmony export */ generateMetadata: () => (/* binding */ generateMetadata) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5939); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var next_headers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(56057); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(11110); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _globals_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(14276); /* harmony import */ var _globals_css__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_globals_css__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _components_Header__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(67674); /* harmony import */ var _components_Footer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(39348); /* harmony import */ var _context_locale__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(20138); /* harmony import */ var _context_location__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(1697); /* harmony import */ var _components_ScrollToTopButton__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(32948); /* harmony import */ var _components_AdminRolePreview__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(28222); // React.cache() deduplicates identical calls within the same request render pass const fetchSeoSettings = (0,react__WEBPACK_IMPORTED_MODULE_2__.cache)(async ()=>{ try { const apiBase = process.env.INTERNAL_API_URL || 'http://localhost:4000'; const res = await fetch(`${apiBase}/api/admin/seo-public`, { next: { revalidate: 60 } }); if (!res.ok) return {}; return res.json(); } catch { return {}; } }); async function generateMetadata() { const seo = await fetchSeoSettings(); const cookieStore = await (0,next_headers__WEBPACK_IMPORTED_MODULE_1__/* .cookies */ .UL)(); const rawLocale = cookieStore.get('canhelp_locale')?.value; const locale = [ 'el', 'en', 'ru', 'uk' ].includes(rawLocale ?? '') ? rawLocale : 'el'; const title = seo[`seo.siteTitle.${locale}`] || seo['seo.siteTitle.el'] || seo['seo.siteTitle'] || 'CanHelp — Βρες ειδικό για κάθε δουλειά'; const description = seo[`seo.siteDescription.${locale}`] || seo['seo.siteDescription.el'] || seo['seo.siteDescription'] || 'Η ελληνική πλατφόρμα για online ανάθεση εργασιών. Βρες επαγγελματίες για καθαρισμό, υδραυλικά, μαθήματα και πολλά άλλα.'; return { title, description, keywords: 'εργασίες, ειδικοί, Ελλάδα, freelance, καθαρισμός, υδραυλικά', robots: seo['seo.indexingEnabled'] === 'false' ? 'noindex, nofollow' : undefined }; } async function RootLayout({ children }) { const cookieStore = await (0,next_headers__WEBPACK_IMPORTED_MODULE_1__/* .cookies */ .UL)(); const headerStore = await (0,next_headers__WEBPACK_IMPORTED_MODULE_1__/* .headers */ .b3)(); const pathname = headerStore.get('x-pathname') ?? ''; const isStandalone = pathname.startsWith('/site/'); const rawLocale = cookieStore.get('canhelp_locale')?.value; const locales = [ 'el', 'en', 'uk', 'ru' ]; const initialLocale = locales.includes(rawLocale) ? rawLocale : 'el'; const initialLocation = decodeURIComponent(cookieStore.get('canhelp_location')?.value ?? ''); const seo = await fetchSeoSettings(); const headScripts = seo['seo.headScripts'] ?? ''; const parsedScripts = []; if (headScripts.trim()) { const re = /]*)>([\s\S]*?)<\/script>|]*)\/>/gi; let m; while((m = re.exec(headScripts)) !== null){ const attrs = m[1] ?? m[3] ?? ''; const inline = (m[2] ?? '').trim(); const srcMatch = attrs.match(/src=["']([^"']+)["']/); parsedScripts.push({ src: srcMatch?.[1], async: /\basync\b/i.test(attrs), defer: /\bdefer\b/i.test(attrs), inline: inline || undefined }); } } return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("html", { lang: initialLocale, suppressHydrationWarning: true, children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("head", { children: parsedScripts.map((s, i)=>{ if (s.src) return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("script", { src: s.src, async: s.async, defer: s.defer }, i); if (s.inline) return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("script", { dangerouslySetInnerHTML: { __html: s.inline } }, i); return null; }) }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("body", { children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_context_locale__WEBPACK_IMPORTED_MODULE_6__.LocaleProvider, { initialLocale: initialLocale, children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_context_location__WEBPACK_IMPORTED_MODULE_7__.LocationProvider, { initialSlug: initialLocation, children: !isStandalone ? /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_Header__WEBPACK_IMPORTED_MODULE_4__.Header, {}), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("main", { className: "min-h-screen", children: children }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ScrollToTopButton__WEBPACK_IMPORTED_MODULE_8__.ScrollToTopButton, {}), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_AdminRolePreview__WEBPACK_IMPORTED_MODULE_9__.AdminRolePreview, {}), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_Footer__WEBPACK_IMPORTED_MODULE_5__.Footer, {}) ] }) : /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("main", { className: "min-h-screen", children: children }) }) }) }) ] }); } {"finalSource":true}mapbufferedMap ConcatSourceRawSource__webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ RootLayout), /* harmony export */ generateMetadata: () => (/* binding */ generateMetadata) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5939); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var next_headers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(56057); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(11110); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _globals_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(14276); /* harmony import */ var _globals_css__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_globals_css__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _components_Header__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(67674); /* harmony import */ var _components_Footer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(39348); /* harmony import */ var _context_locale__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(20138); /* harmony import */ var _context_location__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(1697); /* harmony import */ var _components_ScrollToTopButton__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(32948); /* harmony import */ var _components_AdminRolePreview__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(28222); ReplaceSourceRawSource085undefined87134undefined136165undefined167189undefined191235undefined237281undefined283332undefined334387undefined389455undefined457521undefined630634(0,react__WEBPACK_IMPORTED_MODULE_2__.cache)undefined988994undefined11031109(0,next_headers__WEBPACK_IMPORTED_MODULE_1__/* .cookies */ .UL)undefined19291943undefined20162022(0,next_headers__WEBPACK_IMPORTED_MODULE_1__/* .cookies */ .UL)undefined20572063(0,next_headers__WEBPACK_IMPORTED_MODULE_1__/* .headers */ .b3)undefined32313235(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined33623365(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined34833486(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined36973700(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined39573960(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined40124015(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined40174030_context_locale__WEBPACK_IMPORTED_MODULE_6__.LocaleProviderundefined41294132(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined41344149_context_location__WEBPACK_IMPORTED_MODULE_7__.LocationProviderundefined42724276(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined42784286react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragmentundefined43774380(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined43824387_components_Header__WEBPACK_IMPORTED_MODULE_4__.Headerundefined44414444(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined46564659(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined46614677_components_ScrollToTopButton__WEBPACK_IMPORTED_MODULE_8__.ScrollToTopButtonundefined47314734(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined47364751_components_AdminRolePreview__WEBPACK_IMPORTED_MODULE_9__.AdminRolePreviewundefined48054808(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined48104815_components_Footer__WEBPACK_IMPORTED_MODULE_5__.Footerundefined48954898(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined __webpack_require____webpack_require__.n__webpack_require__.r(__webpack_require__.d i1webpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSource`=webpack/lib/util/registerExternalSerializerwebpack-sources/RawSourceHexports.id = 809; exports.ids = [809]; exports.modules = { /***/ 1241: webpack/lib/util/registerExternalSerializerwebpack-sources/CachedSource webpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource/***/ (() => { /* (ignored) */  /***/ }) buffersourcesizemapshash)/***/ (() => { /* (ignored) */ /***/ }) {"finalSource":true}mapbufferedMap ConcatSourceRawSource/***/ (() => {  RawSource/* (ignored) */ /***/ }), /***/ 1697:  webpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource_/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; webpack/lib/util/registerExternalSerializerwebpack-sources/CachedSource webpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ LocationProvider: () => (/* binding */ LocationProvider) /* harmony export */ }); /* unused harmony export useLocation */ /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25459); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__); webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSource// This file is generated by the Webpack next-flight-loader. import { registerClientReference } from "react-server-dom-webpack/server"; export const LocationProvider = registerClientReference( function() { throw new Error("Attempted to call LocationProvider() from the server but LocationProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/context/location.tsx", "LocationProvider", );export const useLocation = registerClientReference( function() { throw new Error("Attempted to call useLocation() from the server but useLocation is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/context/location.tsx", "useLocation", ); `=H4J(0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)buffersourcesizemapshash/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ LocationProvider: () => (/* binding */ LocationProvider) /* harmony export */ }); /* unused harmony export useLocation */ /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25459); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__); // This file is generated by the Webpack next-flight-loader. const LocationProvider = (0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)( function() { throw new Error("Attempted to call LocationProvider() from the server but LocationProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/context/location.tsx", "LocationProvider", );const useLocation = (0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)( function() { throw new Error("Attempted to call useLocation() from the server but useLocation is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/context/location.tsx", "useLocation", ); {"finalSource":true}mapbufferedMap ConcatSourceRawSource /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ LocationProvider: () => (/* binding */ LocationProvider) /* harmony export */ }); /* unused harmony export useLocation */ /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25459); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__); ReplaceSourceRawSource// This file is generated by the Webpack next-flight-loader. import { registerClientReference } from "react-server-dom-webpack/server"; export const LocationProvider = registerClientReference( function() { throw new Error("Attempted to call LocationProvider() from the server but LocationProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/context/location.tsx", "LocationProvider", );export const useLocation = registerClientReference( function() { throw new Error("Attempted to call useLocation() from the server but useLocation is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/context/location.tsx", "useLocation", );61134undefined136142undefined168190(0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)undefined537543undefined564586(0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)undefined /***/ }) 2/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ LocationProvider: () => (/* binding */ LocationProvider) /* harmony export */ }); /* unused harmony export useLocation */ /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25459); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__); // This file is generated by the Webpack next-flight-loader. const LocationProvider = (0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)( function() { throw new Error("Attempted to call LocationProvider() from the server but LocationProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/context/location.tsx", "LocationProvider", );const useLocation = (0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)( function() { throw new Error("Attempted to call useLocation() from the server but useLocation is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/context/location.tsx", "useLocation", ); /***/ })   _/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict";  /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ LocationProvider: () => (/* binding */ LocationProvider) /* harmony export */ }); /* unused harmony export useLocation */ /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25459); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__); ReplaceSourceRawSource// This file is generated by the Webpack next-flight-loader. import { registerClientReference } from "react-server-dom-webpack/server"; export const LocationProvider = registerClientReference( function() { throw new Error("Attempted to call LocationProvider() from the server but LocationProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/context/location.tsx", "LocationProvider", );export const useLocation = registerClientReference( function() { throw new Error("Attempted to call useLocation() from the server but useLocation is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/context/location.tsx", "useLocation", );61134undefined136142undefined168190(0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)undefined537543undefined564586(0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)undefined, /***/ 2645:  Uwebpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource_/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; webpack/lib/util/registerExternalSerializerwebpack-sources/CachedSource :webpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(43560); /* harmony import */ var next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0__); webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSource\ import { fillMetadataSegment } from 'next/dist/lib/metadata/get-metadata-route' export default async (props) => { const imageData = {"type":"image/png","sizes":"1024x1024"} const imageUrl = fillMetadataSegment(".", await props.params, "icon.png") return [{ ...imageData, url: imageUrl + "?5d298b9734cd2682", }] } dPUcUcB\ u@/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0__.fillMetadataSegment));buffersourcesizemapshash__webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(43560); /* harmony import */ var next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0__); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (async (props) => { const imageData = {"type":"image/png","sizes":"1024x1024"} const imageUrl = (0,next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0__.fillMetadataSegment)(".", await props.params, "icon.png") return [{ ...imageData, url: imageUrl + "?5d298b9734cd2682", }] }); {"finalSource":true}mapbufferedMap ConcatSourceRawSource __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(43560); /* harmony import */ var next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0__); ReplaceSourceRawSource\ import { fillMetadataSegment } from 'next/dist/lib/metadata/get-metadata-route' export default async (props) => { const imageData = {"type":"image/png","sizes":"1024x1024"} const imageUrl = fillMetadataSegment(".", await props.params, "icon.png") return [{ ...imageData, url: imageUrl + "?5d298b9734cd2682", }] }280undefined8599/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (undefined8599undefined203221(0,next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0__.fillMetadataSegment)undefined348347.5);undefined /***/ }) /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(43560); /* harmony import */ var next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0__); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (async (props) => { const imageData = {"type":"image/png","sizes":"1024x1024"} const imageUrl = (0,next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0__.fillMetadataSegment)(".", await props.params, "icon.png") return [{ ...imageData, url: imageUrl + "?5d298b9734cd2682", }] }); /***/ })    __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(43560); /* harmony import */ var next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0__); \ import { fillMetadataSegment } from 'next/dist/lib/metadata/get-metadata-route' export default async (props) => { const imageData = {"type":"image/png","sizes":"1024x1024"} const imageUrl = fillMetadataSegment(".", await props.params, "icon.png") return [{ ...imageData, url: imageUrl + "?5d298b9734cd2682", }] }280undefined8599/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (undefined8599undefined203221(0,next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0__.fillMetadataSegment)undefined348347.5);undefined, /***/ 12696:  (fwebpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource_/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; webpack/lib/util/registerExternalSerializerwebpack-sources/CachedSource  webpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ AdminRolePreview: () => (/* binding */ AdminRolePreview) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(78157); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(13260); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(71159); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(31768); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(91864); webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSource`/* __next_internal_client_entry_do_not_use__ AdminRolePreview auto */ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime"; import { useSession } from '@/lib/auth'; import { useRouter } from 'next/navigation'; import { useEffect, useState, useRef } from 'react'; import { getPlans, updateAdminUser } from '@/lib/api'; const ORIG_PLAN_KEY = 'canhelp_admin_orig_plan'; function getPreviewRole() { return null; } const TIER_COLORS = { free: 'bg-slate-100 text-slate-600', pro: 'bg-green-100 text-green-700', ultimate: 'bg-amber-100 text-amber-700' }; export function AdminRolePreview() { const { data: session } = useSession(); const router = useRouter(); const isAdmin = session?.user?.role === 'admin'; const userId = session?.user?.id; const [mounted, setMounted] = useState(false); const [plans, setPlans] = useState([]); const [activePlanId, setActivePlanId] = useState(null); const [loading, setLoading] = useState(false); const [expanded, setExpanded] = useState(false); const origPlanRef = useRef(null); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>setMounted(true), []); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ if ("undefined" !== 'undefined') { origPlanRef.current = localStorage.getItem(ORIG_PLAN_KEY); } }, []); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ if (!isAdmin) return; getPlans().then(setPlans).catch(()=>{}); }, [ isAdmin ]); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ // Sync active plan from session const currentPlanId = session?.user?.planId ?? null; setActivePlanId(currentPlanId); }, [ session ]); if (!mounted || !isAdmin) return null; const setPlan = async (planId)=>{ if (!userId) return; setLoading(true); try { // Save original plan on first change if (!origPlanRef.current && activePlanId) { localStorage.setItem(ORIG_PLAN_KEY, activePlanId); origPlanRef.current = activePlanId; } await updateAdminUser(userId, { planId }); setActivePlanId(planId); window.dispatchEvent(new CustomEvent('canhelp:plan-changed', { detail: { planId } })); router.refresh(); } catch {} setLoading(false); }; const restorePlan = async ()=>{ const orig = origPlanRef.current; localStorage.removeItem(ORIG_PLAN_KEY); origPlanRef.current = null; await setPlan(orig ?? null); }; const visiblePlans = plans; const hasOrigPlan = !!origPlanRef.current; return /*#__PURE__*/ _jsxs("div", { className: "fixed bottom-20 right-4 z-50 bg-white border border-slate-200 rounded-2xl shadow-lg text-xs font-medium select-none", style: { minWidth: 130 }, children: [ /*#__PURE__*/ _jsxs("button", { onClick: ()=>setExpanded((v)=>!v), className: "flex items-center justify-between gap-2 w-full px-3 py-2 text-slate-500 hover:text-slate-700 transition rounded-2xl", children: [ /*#__PURE__*/ _jsx("span", { children: "\uD83D\uDC41 Preview" }), /*#__PURE__*/ _jsx("span", { className: "text-slate-300", children: expanded ? '▲' : '▼' }) ] }), expanded && /*#__PURE__*/ _jsx("div", { className: "flex flex-col gap-1 px-2 pb-2 border-t border-slate-100 pt-2", children: visiblePlans.length > 0 && /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx("div", { className: "text-slate-400 px-1 mt-2 mb-0.5", children: "Plan" }), visiblePlans.map((plan)=>/*#__PURE__*/ _jsxs("button", { disabled: loading, onClick: ()=>setPlan(plan.id === activePlanId ? null : plan.id), className: `flex items-center justify-between gap-2 px-3 py-1.5 rounded-xl transition text-left ${activePlanId === plan.id ? 'bg-indigo-600 text-white' : 'text-slate-600 hover:bg-slate-100'} ${loading ? 'opacity-50' : ''}`, children: [ /*#__PURE__*/ _jsx("span", { className: "truncate max-w-[90px]", children: plan.name }), /*#__PURE__*/ _jsx("span", { className: `px-1.5 py-0.5 rounded-full text-[10px] font-semibold ${activePlanId === plan.id ? 'bg-white/20 text-white' : TIER_COLORS[plan.tier] ?? TIER_COLORS.free}`, children: plan.tier }) ] }, plan.id)), activePlanId && /*#__PURE__*/ _jsx("button", { disabled: loading, onClick: ()=>setPlan(null), className: "px-3 py-1 rounded-xl text-slate-400 hover:text-red-500 hover:bg-red-50 transition text-left", children: "✕ No plan" }), hasOrigPlan && /*#__PURE__*/ _jsx("button", { disabled: loading, onClick: restorePlan, className: "px-3 py-1 rounded-xl text-green-600 hover:bg-green-50 transition text-left", children: "↩ Restore" }) ] }) }) ] }); } a#F_&(]U[CJry<A_gckL P I M ^ a fjltDWZ(0,_lib_auth__WEBPACK_IMPORTED_MODULE_1__/* .useSession */ .wV)(0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)(0,react__WEBPACK_IMPORTED_MODULE_3__.useState)(0,react__WEBPACK_IMPORTED_MODULE_3__.useRef)(0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)false{}(0,_lib_api__WEBPACK_IMPORTED_MODULE_4__/* .getPlans */ .T9)(0,_lib_api__WEBPACK_IMPORTED_MODULE_4__/* .updateAdminUser */ .wl)(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragmentbuffersourcesizemapshashw/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ AdminRolePreview: () => (/* binding */ AdminRolePreview) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(78157); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(13260); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(71159); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(31768); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(91864); /* __next_internal_client_entry_do_not_use__ AdminRolePreview auto */ const ORIG_PLAN_KEY = 'canhelp_admin_orig_plan'; function getPreviewRole() { return null; } const TIER_COLORS = { free: 'bg-slate-100 text-slate-600', pro: 'bg-green-100 text-green-700', ultimate: 'bg-amber-100 text-amber-700' }; function AdminRolePreview() { const { data: session } = (0,_lib_auth__WEBPACK_IMPORTED_MODULE_1__/* .useSession */ .wV)(); const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)(); const isAdmin = session?.user?.role === 'admin'; const userId = session?.user?.id; const [mounted, setMounted] = (0,react__WEBPACK_IMPORTED_MODULE_3__.useState)(false); const [plans, setPlans] = (0,react__WEBPACK_IMPORTED_MODULE_3__.useState)([]); const [activePlanId, setActivePlanId] = (0,react__WEBPACK_IMPORTED_MODULE_3__.useState)(null); const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_3__.useState)(false); const [expanded, setExpanded] = (0,react__WEBPACK_IMPORTED_MODULE_3__.useState)(false); const origPlanRef = (0,react__WEBPACK_IMPORTED_MODULE_3__.useRef)(null); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)(()=>setMounted(true), []); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)(()=>{ if (false) {} }, []); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)(()=>{ if (!isAdmin) return; (0,_lib_api__WEBPACK_IMPORTED_MODULE_4__/* .getPlans */ .T9)().then(setPlans).catch(()=>{}); }, [ isAdmin ]); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)(()=>{ // Sync active plan from session const currentPlanId = session?.user?.planId ?? null; setActivePlanId(currentPlanId); }, [ session ]); if (!mounted || !isAdmin) return null; const setPlan = async (planId)=>{ if (!userId) return; setLoading(true); try { // Save original plan on first change if (!origPlanRef.current && activePlanId) { localStorage.setItem(ORIG_PLAN_KEY, activePlanId); origPlanRef.current = activePlanId; } await (0,_lib_api__WEBPACK_IMPORTED_MODULE_4__/* .updateAdminUser */ .wl)(userId, { planId }); setActivePlanId(planId); window.dispatchEvent(new CustomEvent('canhelp:plan-changed', { detail: { planId } })); router.refresh(); } catch {} setLoading(false); }; const restorePlan = async ()=>{ const orig = origPlanRef.current; localStorage.removeItem(ORIG_PLAN_KEY); origPlanRef.current = null; await setPlan(orig ?? null); }; const visiblePlans = plans; const hasOrigPlan = !!origPlanRef.current; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "fixed bottom-20 right-4 z-50 bg-white border border-slate-200 rounded-2xl shadow-lg text-xs font-medium select-none", style: { minWidth: 130 }, children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("button", { onClick: ()=>setExpanded((v)=>!v), className: "flex items-center justify-between gap-2 w-full px-3 py-2 text-slate-500 hover:text-slate-700 transition rounded-2xl", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { children: "\uD83D\uDC41 Preview" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "text-slate-300", children: expanded ? '▲' : '▼' }) ] }), expanded && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "flex flex-col gap-1 px-2 pb-2 border-t border-slate-100 pt-2", children: visiblePlans.length > 0 && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "text-slate-400 px-1 mt-2 mb-0.5", children: "Plan" }), visiblePlans.map((plan)=>/*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("button", { disabled: loading, onClick: ()=>setPlan(plan.id === activePlanId ? null : plan.id), className: `flex items-center justify-between gap-2 px-3 py-1.5 rounded-xl transition text-left ${activePlanId === plan.id ? 'bg-indigo-600 text-white' : 'text-slate-600 hover:bg-slate-100'} ${loading ? 'opacity-50' : ''}`, children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "truncate max-w-[90px]", children: plan.name }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: `px-1.5 py-0.5 rounded-full text-[10px] font-semibold ${activePlanId === plan.id ? 'bg-white/20 text-white' : TIER_COLORS[plan.tier] ?? TIER_COLORS.free}`, children: plan.tier }) ] }, plan.id)), activePlanId && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { disabled: loading, onClick: ()=>setPlan(null), className: "px-3 py-1 rounded-xl text-slate-400 hover:text-red-500 hover:bg-red-50 transition text-left", children: "✕ No plan" }), hasOrigPlan && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { disabled: loading, onClick: restorePlan, className: "px-3 py-1 rounded-xl text-green-600 hover:bg-green-50 transition text-left", children: "↩ Restore" }) ] }) }) ] }); } {"finalSource":true}mapbufferedMap ConcatSourceRawSource/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ AdminRolePreview: () => (/* binding */ AdminRolePreview) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(78157); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(13260); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(71159); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(31768); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(91864); ReplaceSourceRawSource`/* __next_internal_client_entry_do_not_use__ AdminRolePreview auto */ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime"; import { useSession } from '@/lib/auth'; import { useRouter } from 'next/navigation'; import { useEffect, useState, useRef } from 'react'; import { getPlans, updateAdminUser } from '@/lib/api'; const ORIG_PLAN_KEY = 'canhelp_admin_orig_plan'; function getPreviewRole() { return null; } const TIER_COLORS = { free: 'bg-slate-100 text-slate-600', pro: 'bg-green-100 text-green-700', ultimate: 'bg-amber-100 text-amber-700' }; export function AdminRolePreview() { const { data: session } = useSession(); const router = useRouter(); const isAdmin = session?.user?.role === 'admin'; const userId = session?.user?.id; const [mounted, setMounted] = useState(false); const [plans, setPlans] = useState([]); const [activePlanId, setActivePlanId] = useState(null); const [loading, setLoading] = useState(false); const [expanded, setExpanded] = useState(false); const origPlanRef = useRef(null); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>setMounted(true), []); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ if ("undefined" !== 'undefined') { origPlanRef.current = localStorage.getItem(ORIG_PLAN_KEY); } }, []); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ if (!isAdmin) return; getPlans().then(setPlans).catch(()=>{}); }, [ isAdmin ]); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ // Sync active plan from session const currentPlanId = session?.user?.planId ?? null; setActivePlanId(currentPlanId); }, [ session ]); if (!mounted || !isAdmin) return null; const setPlan = async (planId)=>{ if (!userId) return; setLoading(true); try { // Save original plan on first change if (!origPlanRef.current && activePlanId) { localStorage.setItem(ORIG_PLAN_KEY, activePlanId); origPlanRef.current = activePlanId; } await updateAdminUser(userId, { planId }); setActivePlanId(planId); window.dispatchEvent(new CustomEvent('canhelp:plan-changed', { detail: { planId } })); router.refresh(); } catch {} setLoading(false); }; const restorePlan = async ()=>{ const orig = origPlanRef.current; localStorage.removeItem(ORIG_PLAN_KEY); origPlanRef.current = null; await setPlan(orig ?? null); }; const visiblePlans = plans; const hasOrigPlan = !!origPlanRef.current; return /*#__PURE__*/ _jsxs("div", { className: "fixed bottom-20 right-4 z-50 bg-white border border-slate-200 rounded-2xl shadow-lg text-xs font-medium select-none", style: { minWidth: 130 }, children: [ /*#__PURE__*/ _jsxs("button", { onClick: ()=>setExpanded((v)=>!v), className: "flex items-center justify-between gap-2 w-full px-3 py-2 text-slate-500 hover:text-slate-700 transition rounded-2xl", children: [ /*#__PURE__*/ _jsx("span", { children: "\uD83D\uDC41 Preview" }), /*#__PURE__*/ _jsx("span", { className: "text-slate-300", children: expanded ? '▲' : '▼' }) ] }), expanded && /*#__PURE__*/ _jsx("div", { className: "flex flex-col gap-1 px-2 pb-2 border-t border-slate-100 pt-2", children: visiblePlans.length > 0 && /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx("div", { className: "text-slate-400 px-1 mt-2 mb-0.5", children: "Plan" }), visiblePlans.map((plan)=>/*#__PURE__*/ _jsxs("button", { disabled: loading, onClick: ()=>setPlan(plan.id === activePlanId ? null : plan.id), className: `flex items-center justify-between gap-2 px-3 py-1.5 rounded-xl transition text-left ${activePlanId === plan.id ? 'bg-indigo-600 text-white' : 'text-slate-600 hover:bg-slate-100'} ${loading ? 'opacity-50' : ''}`, children: [ /*#__PURE__*/ _jsx("span", { className: "truncate max-w-[90px]", children: plan.name }), /*#__PURE__*/ _jsx("span", { className: `px-1.5 py-0.5 rounded-full text-[10px] font-semibold ${activePlanId === plan.id ? 'bg-white/20 text-white' : TIER_COLORS[plan.tier] ?? TIER_COLORS.free}`, children: plan.tier }) ] }, plan.id)), activePlanId && /*#__PURE__*/ _jsx("button", { disabled: loading, onClick: ()=>setPlan(null), className: "px-3 py-1 rounded-xl text-slate-400 hover:text-red-500 hover:bg-red-50 transition text-left", children: "✕ No plan" }), hasOrigPlan && /*#__PURE__*/ _jsx("button", { disabled: loading, onClick: restorePlan, className: "px-3 py-1 rounded-xl text-green-600 hover:bg-green-50 transition text-left", children: "↩ Restore" }) ] }) }) ] }); } 70155undefined157196undefined198241undefined243294undefined296349undefined597603undefined664673(0,_lib_auth__WEBPACK_IMPORTED_MODULE_1__/* .useSession */ .wV)undefined697705(0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)undefined835842(0,react__WEBPACK_IMPORTED_MODULE_3__.useState)undefined882889(0,react__WEBPACK_IMPORTED_MODULE_3__.useState)undefined940947(0,react__WEBPACK_IMPORTED_MODULE_3__.useState)undefined990997(0,react__WEBPACK_IMPORTED_MODULE_3__.useState)undefined10431050(0,react__WEBPACK_IMPORTED_MODULE_3__.useState)undefined10841089(0,react__WEBPACK_IMPORTED_MODULE_3__.useRef)undefined11531161(0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)undefined12451253(0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)undefined12731299falseundefined13021383{}undefined14521460(0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)undefined15061513(0,_lib_api__WEBPACK_IMPORTED_MODULE_4__/* .getPlans */ .T9)undefined16351643(0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)undefined22332247(0,_lib_api__WEBPACK_IMPORTED_MODULE_4__/* .updateAdminUser */ .wl)undefined28922896(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined31453149(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined34223425(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined35523555(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined37703773(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined39423946(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined39483956react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragmentundefined40314034(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined42554259(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined47714774(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined50125015(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined54635466(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined58485851(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined /***/ }) /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ AdminRolePreview: () => (/* binding */ AdminRolePreview) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(78157); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(13260); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(71159); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(31768); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(91864); /* __next_internal_client_entry_do_not_use__ AdminRolePreview auto */ const ORIG_PLAN_KEY = 'canhelp_admin_orig_plan'; function getPreviewRole() { return null; } const TIER_COLORS = { free: 'bg-slate-100 text-slate-600', pro: 'bg-green-100 text-green-700', ultimate: 'bg-amber-100 text-amber-700' }; function AdminRolePreview() { const { data: session } = (0,_lib_auth__WEBPACK_IMPORTED_MODULE_1__/* .useSession */ .wV)(); const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)(); const isAdmin = session?.user?.role === 'admin'; const userId = session?.user?.id; const [mounted, setMounted] = (0,react__WEBPACK_IMPORTED_MODULE_3__.useState)(false); const [plans, setPlans] = (0,react__WEBPACK_IMPORTED_MODULE_3__.useState)([]); const [activePlanId, setActivePlanId] = (0,react__WEBPACK_IMPORTED_MODULE_3__.useState)(null); const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_3__.useState)(false); const [expanded, setExpanded] = (0,react__WEBPACK_IMPORTED_MODULE_3__.useState)(false); const origPlanRef = (0,react__WEBPACK_IMPORTED_MODULE_3__.useRef)(null); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)(()=>setMounted(true), []); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)(()=>{ if (false) {} }, []); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)(()=>{ if (!isAdmin) return; (0,_lib_api__WEBPACK_IMPORTED_MODULE_4__/* .getPlans */ .T9)().then(setPlans).catch(()=>{}); }, [ isAdmin ]); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)(()=>{ // Sync active plan from session const currentPlanId = session?.user?.planId ?? null; setActivePlanId(currentPlanId); }, [ session ]); if (!mounted || !isAdmin) return null; const setPlan = async (planId)=>{ if (!userId) return; setLoading(true); try { // Save original plan on first change if (!origPlanRef.current && activePlanId) { localStorage.setItem(ORIG_PLAN_KEY, activePlanId); origPlanRef.current = activePlanId; } await (0,_lib_api__WEBPACK_IMPORTED_MODULE_4__/* .updateAdminUser */ .wl)(userId, { planId }); setActivePlanId(planId); window.dispatchEvent(new CustomEvent('canhelp:plan-changed', { detail: { planId } })); router.refresh(); } catch {} setLoading(false); }; const restorePlan = async ()=>{ const orig = origPlanRef.current; localStorage.removeItem(ORIG_PLAN_KEY); origPlanRef.current = null; await setPlan(orig ?? null); }; const visiblePlans = plans; const hasOrigPlan = !!origPlanRef.current; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "fixed bottom-20 right-4 z-50 bg-white border border-slate-200 rounded-2xl shadow-lg text-xs font-medium select-none", style: { minWidth: 130 }, children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("button", { onClick: ()=>setExpanded((v)=>!v), className: "flex items-center justify-between gap-2 w-full px-3 py-2 text-slate-500 hover:text-slate-700 transition rounded-2xl", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { children: "\uD83D\uDC41 Preview" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "text-slate-300", children: expanded ? '▲' : '▼' }) ] }), expanded && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "flex flex-col gap-1 px-2 pb-2 border-t border-slate-100 pt-2", children: visiblePlans.length > 0 && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "text-slate-400 px-1 mt-2 mb-0.5", children: "Plan" }), visiblePlans.map((plan)=>/*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("button", { disabled: loading, onClick: ()=>setPlan(plan.id === activePlanId ? null : plan.id), className: `flex items-center justify-between gap-2 px-3 py-1.5 rounded-xl transition text-left ${activePlanId === plan.id ? 'bg-indigo-600 text-white' : 'text-slate-600 hover:bg-slate-100'} ${loading ? 'opacity-50' : ''}`, children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "truncate max-w-[90px]", children: plan.name }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: `px-1.5 py-0.5 rounded-full text-[10px] font-semibold ${activePlanId === plan.id ? 'bg-white/20 text-white' : TIER_COLORS[plan.tier] ?? TIER_COLORS.free}`, children: plan.tier }) ] }, plan.id)), activePlanId && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { disabled: loading, onClick: ()=>setPlan(null), className: "px-3 py-1 rounded-xl text-slate-400 hover:text-red-500 hover:bg-red-50 transition text-left", children: "✕ No plan" }), hasOrigPlan && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { disabled: loading, onClick: restorePlan, className: "px-3 py-1 rounded-xl text-green-600 hover:bg-green-50 transition text-left", children: "↩ Restore" }) ] }) }) ] }); } /***/ })   /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ AdminRolePreview: () => (/* binding */ AdminRolePreview) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(78157); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(13260); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(71159); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(31768); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(91864); `/* __next_internal_client_entry_do_not_use__ AdminRolePreview auto */ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime"; import { useSession } from '@/lib/auth'; import { useRouter } from 'next/navigation'; import { useEffect, useState, useRef } from 'react'; import { getPlans, updateAdminUser } from '@/lib/api'; const ORIG_PLAN_KEY = 'canhelp_admin_orig_plan'; function getPreviewRole() { return null; } const TIER_COLORS = { free: 'bg-slate-100 text-slate-600', pro: 'bg-green-100 text-green-700', ultimate: 'bg-amber-100 text-amber-700' }; export function AdminRolePreview() { const { data: session } = useSession(); const router = useRouter(); const isAdmin = session?.user?.role === 'admin'; const userId = session?.user?.id; const [mounted, setMounted] = useState(false); const [plans, setPlans] = useState([]); const [activePlanId, setActivePlanId] = useState(null); const [loading, setLoading] = useState(false); const [expanded, setExpanded] = useState(false); const origPlanRef = useRef(null); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>setMounted(true), []); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ if ("undefined" !== 'undefined') { origPlanRef.current = localStorage.getItem(ORIG_PLAN_KEY); } }, []); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ if (!isAdmin) return; getPlans().then(setPlans).catch(()=>{}); }, [ isAdmin ]); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ // Sync active plan from session const currentPlanId = session?.user?.planId ?? null; setActivePlanId(currentPlanId); }, [ session ]); if (!mounted || !isAdmin) return null; const setPlan = async (planId)=>{ if (!userId) return; setLoading(true); try { // Save original plan on first change if (!origPlanRef.current && activePlanId) { localStorage.setItem(ORIG_PLAN_KEY, activePlanId); origPlanRef.current = activePlanId; } await updateAdminUser(userId, { planId }); setActivePlanId(planId); window.dispatchEvent(new CustomEvent('canhelp:plan-changed', { detail: { planId } })); router.refresh(); } catch {} setLoading(false); }; const restorePlan = async ()=>{ const orig = origPlanRef.current; localStorage.removeItem(ORIG_PLAN_KEY); origPlanRef.current = null; await setPlan(orig ?? null); }; const visiblePlans = plans; const hasOrigPlan = !!origPlanRef.current; return /*#__PURE__*/ _jsxs("div", { className: "fixed bottom-20 right-4 z-50 bg-white border border-slate-200 rounded-2xl shadow-lg text-xs font-medium select-none", style: { minWidth: 130 }, children: [ /*#__PURE__*/ _jsxs("button", { onClick: ()=>setExpanded((v)=>!v), className: "flex items-center justify-between gap-2 w-full px-3 py-2 text-slate-500 hover:text-slate-700 transition rounded-2xl", children: [ /*#__PURE__*/ _jsx("span", { children: "\uD83D\uDC41 Preview" }), /*#__PURE__*/ _jsx("span", { className: "text-slate-300", children: expanded ? '▲' : '▼' }) ] }), expanded && /*#__PURE__*/ _jsx("div", { className: "flex flex-col gap-1 px-2 pb-2 border-t border-slate-100 pt-2", children: visiblePlans.length > 0 && /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx("div", { className: "text-slate-400 px-1 mt-2 mb-0.5", children: "Plan" }), visiblePlans.map((plan)=>/*#__PURE__*/ _jsxs("button", { disabled: loading, onClick: ()=>setPlan(plan.id === activePlanId ? null : plan.id), className: `flex items-center justify-between gap-2 px-3 py-1.5 rounded-xl transition text-left ${activePlanId === plan.id ? 'bg-indigo-600 text-white' : 'text-slate-600 hover:bg-slate-100'} ${loading ? 'opacity-50' : ''}`, children: [ /*#__PURE__*/ _jsx("span", { className: "truncate max-w-[90px]", children: plan.name }), /*#__PURE__*/ _jsx("span", { className: `px-1.5 py-0.5 rounded-full text-[10px] font-semibold ${activePlanId === plan.id ? 'bg-white/20 text-white' : TIER_COLORS[plan.tier] ?? TIER_COLORS.free}`, children: plan.tier }) ] }, plan.id)), activePlanId && /*#__PURE__*/ _jsx("button", { disabled: loading, onClick: ()=>setPlan(null), className: "px-3 py-1 rounded-xl text-slate-400 hover:text-red-500 hover:bg-red-50 transition text-left", children: "✕ No plan" }), hasOrigPlan && /*#__PURE__*/ _jsx("button", { disabled: loading, onClick: restorePlan, className: "px-3 py-1 rounded-xl text-green-600 hover:bg-green-50 transition text-left", children: "↩ Restore" }) ] }) }) ] }); } 70155undefined157196undefined198241undefined243294undefined296349undefined597603undefined664673(0,_lib_auth__WEBPACK_IMPORTED_MODULE_1__/* .useSession */ .wV)undefined697705(0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)undefined835842(0,react__WEBPACK_IMPORTED_MODULE_3__.useState)undefined882889(0,react__WEBPACK_IMPORTED_MODULE_3__.useState)undefined940947(0,react__WEBPACK_IMPORTED_MODULE_3__.useState)undefined990997(0,react__WEBPACK_IMPORTED_MODULE_3__.useState)undefined10431050(0,react__WEBPACK_IMPORTED_MODULE_3__.useState)undefined10841089(0,react__WEBPACK_IMPORTED_MODULE_3__.useRef)undefined11531161(0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)undefined12451253(0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)undefined12731299falseundefined13021383{}undefined14521460(0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)undefined15061513(0,_lib_api__WEBPACK_IMPORTED_MODULE_4__/* .getPlans */ .T9)undefined16351643(0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)undefined22332247(0,_lib_api__WEBPACK_IMPORTED_MODULE_4__/* .updateAdminUser */ .wl)undefined28922896(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined31453149(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined34223425(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined35523555(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined37703773(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined39423946(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined39483956react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragmentundefined40314034(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined42554259(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined47714774(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined50125015(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined54635466(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined58485851(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined, /***/ 12998:  (webpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource_/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; webpack/lib/util/registerExternalSerializerwebpack-sources/CachedSource `webpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ $: () => (/* binding */ getTranslations), /* harmony export */ YZ: () => (/* binding */ LOCALES) /* harmony export */ }); /* unused harmony export translations */ webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSourceSexport const LOCALES = [ { code: 'el', label: 'Ελληνικά', flag: '🇬🇷' }, { code: 'en', label: 'English', flag: '🇬🇧' }, { code: 'uk', label: 'Українська', flag: '🇺🇦' }, { code: 'ru', label: 'Русский', flag: '🇷🇺' } ]; export const translations = { el: { 'footer.slogan': 'Η εργασία σου — η φροντίδα μας! Λύνουμε κάθε ζήτημα γρήγορα και εύκολα.', 'footer.links': 'Σύνδεσμοι', 'footer.socials': 'Στα κοινωνικά δίκτυα', // Nav 'nav.home': 'Αρχική', 'nav.tasks': 'Εργασίες', 'nav.post': '+ Δημοσίευση', 'nav.dashboard': 'Οι εργασίες μου', 'nav.chat': 'Μηνύματα', 'nav.notifications': 'Ειδοποιήσεις', 'nav.profile': 'Προφίλ', 'nav.admin': 'Διαχείριση', 'nav.specialists': 'Προσφορές', 'nav.new_task': 'Νέα εργασία', 'nav.login': 'Σύνδεση', 'nav.register': 'Εγγραφή', 'nav.logout': 'Έξοδος', // Hero 'hero.title': 'Κάθε άνθρωπος έχει κάτι να προσφέρει', 'hero.subtitle': 'Βρες βοήθεια, πρόσφερε τις δεξιότητές σου ή κέρδισε χρήματα βοηθώντας άλλους', 'hero.cta.post': 'Ζήτησε βοήθεια', 'hero.cta.browse': 'Πρόσφερε βοήθεια', 'hero.cta.specialists': 'Βρες εργασία', 'hero.search.placeholder': 'Τι χρειάζεσαι; π.χ. ηλεκτρολόγος, καθαρισμός...', 'hero.specialist.title': 'Βρες εργασίες κοντά σου', 'hero.specialist.subtitle': 'Ανακάλυψε εργασίες στις κατηγορίες σου και στείλε προσφορά', 'hero.specialist.cta': 'Βρες εργασίες', 'hero.specialist.search.placeholder': 'Αναζήτηση εργασιών... π.χ. ηλεκτρολογία, καθαρισμός', 'section.categories.specialist': 'Βρες εργασίες ανά κατηγορία', 'section.cities.specialist': 'Εργασίες ανά πόλη', 'how.specialist.step1.title': 'Δημιούργησε κάρτα ειδικού', 'how.specialist.step1.desc': 'Δήλωσε κατηγορίες, δεξιότητες και περιοχές — το σύστημα βρίσκει εργασίες αυτόματα', 'how.specialist.step2.title': 'Βρες σχετικές εργασίες', 'how.specialist.step2.desc': 'Ανακάλυψε εργασίες στις κατηγορίες σου και ξεκίνα αμέσως', 'how.specialist.step3.title': 'Στείλε προσφορά & κέρδισε', 'how.specialist.step3.desc': 'Υποβάλε προσφορά με τιμή και χρόνο, επικοινωνήσε και ολοκλήρωσε εργασίες', 'stats.specialists': 'προσφορές', 'stats.tasks': 'εργασίες', 'stats.categories': 'κατηγορίες', 'stats.free': 'δωρεάν εγγραφή', 'promo.title': 'Αποκτήσε Pro δωρεάν — μόνο μέχρι το τέλος του χρόνου', 'promo.subtitle': 'Εγγράψου τώρα και απόλαυσε το πλάνο Pro χωρίς χρέωση. Η προσφορά λήγει στις 31 Δεκεμβρίου.', 'promo.cta': 'Εγγραφή δωρεάν', 'promo.days': 'μέρες', 'promo.hours': 'ώρες', 'promo.minutes': 'λεπτά', 'promo.seconds': 'δευτ.', // Sections 'section.categories': 'Δημιούργησε εργασία σε οποιαδήποτε κατηγορία', 'section.how': 'Πώς λειτουργεί', 'section.recent': 'Πρόσφατες εργασίες', 'section.all': 'Δες όλες →', 'section.more': 'ακόμα', 'section.cities': 'Πόλεις & Περιοχές', 'section.community': 'Ένα κοινοτικό έργο για όλους', 'community.subtitle': 'Το CanHelp δεν είναι απλώς μια αγορά — είναι μια κοινότητα αμοιβαίας βοήθειας. Οποιοσδήποτε έχει γνώση ή δεξιότητα μπορεί να βρει έναν πελάτη. Οποιοσδήποτε έχει ένα πρόβλημα μπορεί να βρει έναν ειδικό.', 'community.point1.title': 'Είσαι ειδικός σε κάτι;', 'community.point1.desc': 'Επισκευές, μαθήματα, σχεδιασμός, μεταφράσεις, φροντίδα — κάθε δεξιότητα αξίζει. Δημιούργησε προφίλ και βρες πελάτες κοντά σου.', 'community.point2.title': 'Χρειάζεσαι βοήθεια;', 'community.point2.desc': 'Δημοσίευσε εργασία σε λιγότερο από ένα λεπτό και λάβε προσφορές από επαληθευμένους ειδικούς στην πόλη σου.', 'community.point3.title': 'Βοήθησε το έργο να αναπτυχθεί', 'community.point3.desc': 'Το CanHelp αναπτύσσεται χάρη στις κοινότητες. Μοιράσου το σύνδεσμο με φίλους και γνωστούς — μαζί χτίζουμε κάτι χρήσιμο για όλους.', 'community.share': 'Μοιράσου με φίλους', 'community.share.copied': 'Σύνδεσμος αντιγράφηκε!', // Referral section on home page 'section.referral': 'Πρόγραμμα παραπομπών', 'referral.home.subtitle': 'Μοιράσου τον σύνδεσμό σου — κάθε νέος χρήστης που εγγράφεται μέσα από αυτόν σου αποφέρει ανταμοιβή.', 'referral.home.step1.title': 'Εγγραφείσε και λάβε σύνδεσμο', 'referral.home.step1.desc': 'Δημιούργησε λογαριασμό και βρες τον μοναδικό σου σύνδεσμο παραπομπής στο προφίλ σου.', 'referral.home.step2.title': 'Μοιράσου με φίλους', 'referral.home.step2.desc': 'Στείλε τον σύνδεσμο σε φίλους, γνωστούς ή δημοσίευσέ τον στα social media.', 'referral.home.step3.title': 'Κέρδισε ανταμοιβές', 'referral.home.step3.desc': 'Μόλις ο φίλος σου επαληθεύσει το email του, λαμβάνεις αυτόματα την ανταμοιβή σου.', 'referral.home.cta': 'Πάρε τον σύνδεσμό σου', 'referral.home.badge': 'Πρόγραμμα παραπομπών', // FAQ section 'section.faq': 'Συχνές Ερωτήσεις', 'faq.q1': 'Πώς λειτουργεί το CanHelp;', 'faq.a1': 'Δημοσίευσε μια εργασία, λάβε προσφορές από ειδικούς, επέλεξε τον καλύτερο και ξεκίνα τη συνεργασία. Είναι γρήγορο, απλό και δωρεάν για πελάτες.', 'faq.q2': 'Πόσο κοστίζει η χρήση της πλατφόρμας;', 'faq.a2': 'Η εγγραφή και η δημοσίευση εργασιών είναι εντελώς δωρεάν για πελάτες. Οι ειδικοί έχουν στη διάθεσή τους δωρεάν πλάνο καθώς και premium επιλογές.', 'faq.q3': 'Πώς μπορώ να γίνω ειδικός;', 'faq.a3': 'Κάνε εγγραφή, πήγαινε στο «Γίνε Ειδικός», συμπλήρωσε το προφίλ σου με δεξιότητες και κατηγορίες και αρχίνισε να λαμβάνεις εργασίες.', 'faq.q4': 'Πώς επιλέγω τον κατάλληλο ειδικό;', 'faq.a4': 'Δες τις αξιολογήσεις, την εμπειρία, τις δεξιότητες και το χαρτοφυλάκιο κάθε ειδικού. Επικοινώνησε μαζί του μέσω chat και συζήτα τις λεπτομέρειες πριν αποφασίσεις.', 'faq.q5': 'Τι γίνεται αν δεν είμαι ικανοποιημένος;', 'faq.a5': 'Μπορείς να αφήσεις αξιολόγηση για τον ειδικό και να τον βαθμολογήσεις από 1 έως 5 αστέρια. Οι αξιολογήσεις βοηθούν άλλους χρήστες να επιλέξουν έμπιστους επαγγελματίες.', 'faq.q6': 'Μπορώ να επικοινωνήσω με τον ειδικό πριν την αποδοχή;', 'faq.a6': 'Ναι. Μόλις λάβεις μια προσφορά, μπορείς να ανοίξεις chat με τον ειδικό, να κάνεις ερωτήσεις και να συντονίσεις τις λεπτομέρειες πριν αποφασίσεις.', 'faq.q7': 'Πόσος χρόνος χρειάζεται για να λάβω προσφορές;', 'faq.a7': 'Συνήθως μέσα σε λίγες ώρες. Οι ειδικοί λαμβάνουν ειδοποίηση για νέες εργασίες και μπορούν να απαντήσουν γρήγορα.', 'faq.q8': 'Μπορώ να δημοσιεύσω εργασία σε οποιαδήποτε πόλη της Ελλάδας;', 'faq.a8': 'Ναι! Το CanHelp καλύπτει όλη την Ελλάδα. Μπορείς να βρεις ειδικούς στην Αθήνα, στη Θεσσαλονίκη, στην Πάτρα και αλλού.', 'faq.q9': 'Τι είδη εργασιών μπορώ να βρω στο CanHelp;', 'faq.a9': 'Επισκευές, καθαρισμό, ηλεκτρολόγους, μαθήματα, σχεδιασμό, IT, μετακομίσεις, ομορφιά και πολλά άλλα. Οι κατηγορίες αυξάνονται συνεχώς.', 'faq.q10': 'Υπάρχει εφαρμογή για κινητό;', 'faq.a10': 'Ναι! Το CanHelp διατίθεται για Android και iOS. Κατέβασε την εφαρμογή και διαχειρίσου τα πάντα από το τηλέφωνό σου.', // How it works 'how.step1.title': 'Δημοσίευσε εργασία', 'how.step1.desc': 'Περίγραψε τι χρειάζεσαι και ορίζε τον προϋπολογισμό σου', 'how.step2.title': 'Λάβε προσφορές', 'how.step2.desc': 'Ειδικοί θα σου στείλουν προσφορές με τιμή και χρόνο', 'how.step3.title': 'Επίλεξε & ξεκίνα', 'how.step3.desc': 'Επέλεξε τον καλύτερο επαγγελματία και ξεκίνα τη συνεργασία', // Tasks page 'tasks.title': 'εργασίες', 'tasks.filters': 'Φίλτρα', 'tasks.search': 'Αναζήτηση', 'tasks.search.placeholder': 'Τίτλος ή λέξη κλειδί...', 'tasks.search.btn': 'Αναζήτηση', 'tasks.publish': 'Δημοσίευση', 'tasks.category.all': 'Όλες', 'tasks.category.all_in': 'Όλα στην', 'tasks.category.label': 'Κατηγορία', 'tasks.location.label': 'Πόλη', 'tasks.location.placeholder': 'π.χ. Αθήνα', 'tasks.empty': 'Δεν βρέθηκαν εργασίες', 'tasks.empty.cta': 'Δημοσίευσε την πρώτη', // Task detail 'task.status.open': 'Ανοιχτή', 'task.status.in_progress': 'Σε εξέλιξη', 'task.status.completed': 'Ολοκληρωμένη', 'task.status.cancelled': 'Ακυρωμένη', 'task.status.draft': 'Πρόχειρο', 'task.budget': 'Προϋπολογισμός', 'task.location': 'Τοποθεσία', 'task.deadline': 'Ημερομηνία έναρξης', 'task.expires_at': 'Ενεργό έως', 'task.created_at': 'Δημιουργήθηκε', 'task.customer': 'Πελάτης', 'task.offer.btn': 'Υποβολή προσφοράς', 'task.invite.banner_title': 'Σας προσκαλούν σε αυτήν την εργασία', 'task.invite.banner_hint': 'Ο πελάτης σας πρόσκαλεσε προσωπικά', 'task.invite.accept': 'Αποστολή προσφοράς', 'task.invite.decline': 'Άρνηση', 'offer.accept': 'Αποδοχή', 'offer.decline': 'Απόρριψη', 'task.complete': 'Ολοκλήρωση εργασίας', 'task.complete.confirm': 'Να ολοκληρωθεί η εργασία;', 'task.edit': 'Επεξεργασία', 'task.status_label': 'Κατάσταση', 'task.yours': 'Η εργασία σου', 'task.offer.yours': 'Η προσφορά σου', 'review.leave': 'Άφησε αξιολόγηση', 'review.rating': 'Βαθμολογία', 'review.comment': 'Σχόλιο', 'review.comment.placeholder': 'Πες μας για την εμπειρία σου...', 'review.submit': 'Υποβολή αξιολόγησης', 'review.submitting': 'Αποστολή...', 'review.done': 'Η αξιολόγηση καταχωρήθηκε!', 'profile.reviews': 'Αξιολογήσεις', 'profile.no_reviews': 'Δεν υπάρχουν αξιολογήσεις ακόμα', 'profile.rating': 'Βαθμολογία', 'profile.skills.label': 'Δεξιότητες', 'profile.member_since': 'Μέλος από', 'task.offers': 'Προσφορές', 'task.offers.none': 'Δεν υπάρχουν ακόμα προσφορές', // Create task 'create.title': 'Δημοσίευση εργασίας', 'create.field.title': 'Τίτλος', 'create.field.description': 'Περιγραφή', 'create.field.category': 'Κατηγορία', 'create.field.category.select': 'Επιλέξτε...', 'create.field.location': 'Τοποθεσία', 'create.field.location.any': 'Οπουδήποτε', 'create.field.location.all': 'Ολόκληρη η πόλη', 'create.field.budget': 'Προϋπολογισμός (€)', 'create.field.deadline': 'Ημερομηνία έναρξης', 'create.field.expires_at': 'Αγγελία ενεργή έως', 'create.field.expires_at.days': '{n} ημέρες', 'create.field.budget_negotiable': 'Η τιμή είναι διαπραγματεύσιμη', 'create.field.time_slot': 'Χρόνος εκτέλεσης', 'create.field.time_slot.any': 'Οποιαδήποτε', 'create.field.time_slot.morning': 'Πρωινό (08:00–13:00)', 'create.field.time_slot.afternoon': 'Μεσημέρι (13:00–18:00)', 'create.field.time_slot.evening': 'Βράδυ (18:00–22:00)', 'create.field.time_slot.weekend': 'Σαββατοκύριακο', 'create.field.address': 'Διεύθυνση (προαιρετικά)', 'create.field.address.district': 'Συνοικία', 'create.field.address.street': 'Οδός', 'create.field.address.house': 'Αριθμός', 'create.field.confidential': 'Εμπιστευτική σημείωση', 'create.field.confidential.placeholder': 'Λεπτομέρειες που θα δει μόνο ο αναδοχόμενος...', 'create.field.confidential.hint': 'Δεν εμφανίζεται δημόσια', 'create.field.photos': 'Φωτογραφίες', 'create.field.photos.add': 'Προσθήκη φωτογραφίας', 'create.field.photos.uploading': 'Ανέβασμα...', 'task.budget_negotiable': 'Τιμή διαπραγματεύσιμη', 'task.time_slot': 'Χρόνος', 'task.confidential': 'Εμπιστευτική σημείωση', 'create.field.title.placeholder': 'π.χ. Καθαρισμός διαμερίσματος 80τμ', 'create.field.description.placeholder': 'Περίγραψε λεπτομερώς τι χρειάζεσαι...', 'create.field.location.placeholder': 'π.χ. Αθήνα, Κολωνάκι', 'create.field.budget.placeholder': 'π.χ. 100', 'create.submit': 'Δημοσίευση εργασίας', 'create.submitting': 'Δημοσίευση...', // Auth 'login.title': 'Καλωσόρισες', 'login.subtitle': 'Σύνδεση στο CanHelp', 'login.email': 'Email', 'login.password': 'Κωδικός', 'login.submit': 'Σύνδεση', 'login.submitting': 'Σύνδεση...', 'login.error': 'Λάθος email ή κωδικός', 'login.unverified.title': 'Επιβεβαιώστε το email σας', 'login.unverified.desc': 'Στείλαμε σύνδεσμο επαλήθευσης στο email σας. Ελέγξτε τα εισερχόμενα (ή spam) και πατήστε το σύνδεσμο.', 'login.unverified.resend': 'Αποστολή νέου email επαλήθευσης', 'login.unverified.sending': 'Αποστολή...', 'login.unverified.sent': '✓ Εστάλη — ελέγξτε τα εισερχόμενα', 'profile.email.verified': 'Email επαληθεύτηκε', 'profile.email.not_verified': 'Email δεν επαληθεύτηκε', 'login.no_account': 'Δεν έχεις λογαριασμό;', 'login.register_link': 'Εγγραφή', 'login.forgot_password': 'Ξέχασα τον κωδικό', 'login.or_continue_with': 'ή συνεχίστε με', 'login.continue_google': 'Σύνδεση με Google', 'forgot.title': 'Ξέχασα τον κωδικό', 'forgot.subtitle': 'Εισάγετε το email σας για να λάβετε σύνδεσμο ανάκτησης', 'forgot.email': 'Email', 'forgot.submit': 'Αποστολή', 'forgot.submitting': 'Αποστολή...', 'forgot.sent.title': 'Ελέγξτε τα εισερχόμενά σας', 'forgot.sent.desc': 'Αν υπάρχει λογαριασμός με αυτό το email, θα σας στείλουμε σύνδεσμο ανάκτησης κωδικού.', 'forgot.back_to_login': 'Επιστροφή στη σύνδεση', 'forgot.error': 'Αποτυχία αποστολής. Ελέγξτε το email σας ή δοκιμάστε ξανά.', 'forgot.error.not_found': 'Δεν βρέθηκε λογαριασμός με αυτό το email.', 'forgot.error.send_failed': 'Αποτυχία αποστολής email. Δοκιμάστε ξανά αργότερα', 'reset.title': 'Νέος κωδικός', 'reset.subtitle': 'Εισάγετε τον νέο σας κωδικό', 'reset.password': 'Νέος κωδικός', 'reset.confirm': 'Επιβεβαίωση κωδικού', 'reset.submit': 'Αλλαγή κωδικού', 'reset.submitting': 'Αποθήκευση...', 'reset.success': 'Ο κωδικός άλλαξε επιτυχώς. Ανακατεύθυνση στη σύνδεση...', 'reset.back_to_login': 'Επιστροφή στη σύνδεση', 'reset.error.mismatch': 'Οι κωδικοί δεν ταιριάζουν', 'reset.error.invalid': 'Μη έγκυρος σύνδεσμος. Παρακαλώ ζητήστε νέο.', 'register.title': 'Εγγραφή', 'register.subtitle': 'Δημιουργία λογαριασμού στο CanHelp', 'register.first_name': 'Όνομα', 'register.last_name': 'Επώνυμο', 'register.email': 'Email', 'register.password': 'Κωδικός (min 8 χαρακτήρες)', 'register.role': 'Ρόλος', 'register.role.customer': 'Χρήστης', 'register.role.customer.desc': 'Δημοσιεύω εργασίες', 'register.role.specialist': 'Ειδικός', 'register.role.specialist.desc': 'Αναλαμβάνω εργασίες', 'register.submit': 'Δημιουργία λογαριασμού', 'register.submitting': 'Εγγραφή...', 'register.has_account': 'Έχεις ήδη λογαριασμό;', 'register.login_link': 'Σύνδεση', 'register.continue_google': 'Εγγραφή με Google', 'register.check_email.title': 'Ελέγξτε το email σας', 'register.check_email.desc': 'Στείλαμε σύνδεσμο επαλήθευσης στη διεύθυνση email σας. Ελέγξτε τα εισερχόμενα (ή spam) και πατήστε τον σύνδεσμο.', 'register.check_email.login': 'Επιστροφή στη σύνδεση', 'register.captcha_failed': 'Η επαλήθευση CAPTCHA απέτυχε. Παρακαλώ δοκιμάστε ξανά.', // Dashboard 'dashboard.title': 'Πίνακας ελέγχου', 'dashboard.new_task': '+ Νέα εργασία', 'dashboard.onboarding.title': 'Καλωσήλθατε στο CanHelp 👋', 'dashboard.onboarding.subtitle': 'Διαλέξτε πώς θέλετε να ξεκινήσετε.', 'dashboard.onboarding.helper.title': 'Πρόσφερε τη βοήθειά σου', 'dashboard.onboarding.helper.desc': 'Συμπλήρωσε το προφίλ σου — δεξιότητες, κατηγορίες και περιοχές. Παίρνει μόνο λίγα λεπτά και αρχίζεις να δέχεσαι παραγγελίες.', 'dashboard.onboarding.helper.cta': 'Συμπλήρωσε το προφίλ', 'dashboard.onboarding.requester.title': 'Χρειάζεσαι βοήθεια;', 'dashboard.onboarding.requester.desc': 'Δημοσίευσε μια εργασία και οι βοηθοί θα σου στείλουν προσφορές.', 'dashboard.onboarding.requester.cta': 'Δημοσίευσε εργασία', 'dashboard.my_tasks': 'Οι εργασίες μου', 'dashboard.my_offers': 'Οι προσφορές μου', 'dashboard.invitations': 'Προσκλήσεις για εργασία', 'dashboard.offers_count': 'προσφορές', 'dashboard.declined_count': 'απορρίφθηκαν', 'dashboard.completed_tasks': 'Ολοκληρωμένες εργασίες', 'dashboard.completed_offers': 'Ολοκληρωμένες προσφορές', 'dashboard.review_pending': 'Η αξιολόγηση δεν έχει υποβληθεί ακόμα', 'tasks.new.top_specialists': 'Κορυφαίοι ειδικοί', 'tasks.new.select_category': 'Επιλέξτε κατηγορία για να δείτε ειδικούς', 'tasks.new.invite': 'Πρόσκληση', 'tasks.new.invited': 'Επιλέχθηκε ✓', 'reviews.count': 'αξιολογήσεις', 'filter.location': 'Τοποθεσία', 'filter.language': 'Γλώσσες', 'filter.language.any': 'Οποιαδήποτε γλώσσα', 'filter.category.all': 'Όλες οι κατηγορίες', 'user.categories': 'Κατηγορίες', 'user.work_area': 'Περιοχή εργασίας', 'user.specialist_cards': 'Κάρτες υπηρεσιών', 'card.skills': 'Δεξιότητες', 'card.categories': 'Κατηγορίες', 'card.geography': 'Περιοχή εργασίας', 'card.portfolio': 'Χαρτοφυλάκιο', 'card.close': 'Κλείσιμο', 'dashboard.tasks.empty': 'Δεν έχεις δημοσιεύσει εργασίες', 'dashboard.tasks.empty.cta': 'Δημοσίευσε την πρώτη σου', 'dashboard.tasks.add_new': 'Πρόσθεσε νέα εργασία', 'dashboard.offers.empty': 'Δεν έχεις υποβάλλει προσφορές', 'dashboard.offers.empty.cta': 'Βρες εργασίες', 'dashboard.customer.specialists_title': 'Ψάχνεις εκτελεστή;', 'dashboard.customer.specialists_hint': 'Δες προφίλ ειδικών, διάβασε αξιολογήσεις και κάλεσέ τους στις εργασίες σου', 'dashboard.customer.specialists_cta': 'Βρες ειδικό', 'dashboard.customer.how_title': 'Πώς λειτουργεί', 'dashboard.customer.step1': 'Δημιούργησε εργασία με περιγραφή και προϋπολογισμό', 'dashboard.customer.step2': 'Οι ειδικοί θα στείλουν προσφορές με τιμή και χρόνο', 'dashboard.customer.step3': 'Επίλεξε τον κατάλληλο και ξεκίνα τη συνεργασία', // Notifications 'notif.title': 'Ειδοποιήσεις', 'notif.mark_all': 'Σήμανση όλων ως αναγνωσμένα', 'notif.empty': 'Δεν υπάρχουν ειδοποιήσεις', 'notif.type.generic': 'Ειδοποίηση', 'notif.type.new_offer': 'Νέα προσφορά', 'notif.type.offer_accepted': 'Η προσφορά σας έγινε δεκτή', 'notif.type.offer_declined': 'Η προσφορά σας απορρίφθηκε', 'notif.type.task_completed': 'Η εργασία ολοκληρώθηκε', 'notif.type.task_cancelled': 'Η εργασία ακυρώθηκε', 'notif.type.new_message': 'Νέο μήνυμα', 'notif.type.new_review': 'Νέα αξιολόγηση', 'notif.type.task_invite': 'Πρόσκληση σε εργασία', 'notif.type.referral_reward': 'Ανταμοιβή παραπομπής', 'notif.type.specialist_card_submitted': 'Η κάρτα στάλθηκε για έλεγχο', 'notif.type.specialist_card_approved': 'Η κάρτα εγκρίθηκε', 'notif.type.specialist_card_rejected': 'Η κάρτα απορρίφθηκε', 'notif.body.new_offer': 'Νέα προσφορά για «{title}»', 'notif.body.offer_accepted': 'Η προσφορά σας για «{title}» έγινε δεκτή', 'notif.body.offer_declined': 'Η προσφορά σας για «{title}» απορρίφθηκε', 'notif.body.task_invite': 'Σας προσκαλούν για «{title}»', 'notif.body.new_review': 'Λάβατε αξιολόγηση {rating}★', 'notif.body.referral_reward': 'Προστέθηκαν {days} ημέρες πρόσβασης στο πλάνο «{plan}» στον λογαριασμό σας!', 'notif.body.specialist_card_submitted': 'Η κάρτα «{title}» στάλθηκε για έλεγχο', 'notif.body.specialist_card_approved': 'Η κάρτα «{title}» εγκρίθηκε και δημοσιεύτηκε', 'notif.body.specialist_card_rejected': 'Η κάρτα «{title}» δεν εγκρίθηκε. Διορθώστε την και στείλτε την ξανά.', // Offer status 'offer.status.pending': 'Εκκρεμεί', 'offer.status.accepted': 'Αποδεκτή', 'offer.status.declined': 'Απορρίφθηκε', 'offer.status.withdrawn': 'Αποσύρθηκε', 'offer.status.other_accepted': 'Επιλέχθηκε άλλος ειδικός', // Common 'common.loading': 'Φόρτωση...', 'common.error': 'Σφάλμα', 'common.save': 'Αποθήκευση', 'common.saving': 'Αποθήκευση...', 'common.cancel': 'Ακύρωση', 'common.add': 'Προσθήκη', 'common.close': 'Κλείσιμο', 'common.edit': 'Επεξεργασία', 'common.delete': 'Διαγραφή', 'common.from': 'από', 'common.currency': '€', 'common.greece': 'Ελλάδα', // Chat 'chat.connected': 'Συνδεδεμένος', 'chat.disconnected': 'Αποσυνδεδεμένος', 'chat.no_rooms': 'Δεν υπάρχουν συνομιλίες ακόμα', 'chat.task_fallback': 'Εργασία', 'chat.select': 'Επίλεξε συνομιλία', 'chat.no_messages': 'Δεν υπάρχουν μηνύματα', 'chat.placeholder': 'Γράψε μήνυμα... (Enter για αποστολή)', 'chat.conversation_fallback': 'Συνομιλία', 'chat.direct_chat': 'Απευθείας συνομιλία', 'chat.linked_task': 'Συνδεδεμένη εργασία', 'chat.write_btn': 'Μήνυμα', 'chat.just_now': 'μόλις τώρα', 'chat.min_ago': 'λ', 'chat.write_specialist': 'Γράψε στον ειδικό', 'chat.write_customer': 'Γράψε στον πελάτη', 'chat.notif_settings': 'Ρυθμίσεις ειδοποιήσεων', 'chat.notif_messages': 'Ειδοποιήσεις για νέα μηνύματα', 'chat.toast_title': 'Νέο μήνυμα', 'chat.toast_open': 'Άνοιγμα συνομιλίας', // Offer form 'offer.price': 'Τιμή', 'offer.price.placeholder': 'π.χ. 80', 'offer.customer_budget': 'Προϋπολογισμός πελάτη', 'offer.message': 'Μήνυμα', 'offer.optional': 'προαιρετικό', 'offer.message.placeholder': 'Παρουσίασε τον εαυτό σου, την εμπειρία σου και γιατί είσαι η καλύτερη επιλογή...', 'offer.submitting': 'Αποστολή...', // Profile 'profile.photo': 'Φωτογραφία προφίλ', 'profile.photo.change': 'Αλλαγή φωτογραφίας', 'profile.photo.hint': 'JPEG, PNG, WebP · έως 5MB', 'profile.basic_info': 'Βασικά στοιχεία', 'profile.phone': 'Τηλέφωνο', 'profile.phone.placeholder': '+30 6901234567', 'profile.bio': 'Σύντομη περιγραφή', 'profile.bio.placeholder': 'Πες μας λίγα λόγια για εσένα...', 'profile.language': 'Γλώσσα', 'profile.language.hint': 'Γλώσσα διεπαφής και email ειδοποιήσεων', 'profile.languages': 'Γλώσσες επικοινωνίας', 'profile.languages.hint': 'Επιλέξτε όλες τις γλώσσες που μιλάτε', 'profile.skills': 'Δεξιότητες', 'profile.skills.subtitle': 'Προσθέσε τις υπηρεσίες που προσφέρεις', 'profile.skills.placeholder': 'π.χ. Καθαρισμός, IT, Μαθήματα...', 'profile.role': 'Ρόλος λογαριασμού', 'profile.role.specialist': '🔧 Βοηθός', 'profile.role.admin': '👑 Admin', 'profile.role.customer': '👤 Χρήστης', 'profile.role.user': '👤 Χρήστης', 'profile.role.change': 'Για αλλαγή ρόλου επικοινωνήστε με την υποστήριξη.', 'profile.become_specialist': 'Πρόσφερε βοήθεια', 'profile.become_specialist.desc': 'Δημιούργησε το προφίλ βοηθού σου, πρόσφερε τις δεξιότητές σου και αρχίνισε να λαμβάνεις εργασίες.', 'become_specialist.hero.title': 'Πρόσφερε τις δεξιότητές σου', 'become_specialist.hero.subtitle': 'Δημιούργησε προφίλ βοηθού και λάβε αιτήματα από ανθρώπους που χρειάζονται βοήθεια', 'become_specialist.how.title': 'Πώς λειτουργεί', 'become_specialist.step1.title': 'Δημιούργησε κάρτα ειδικού', 'become_specialist.step1.desc': 'Δήλωσε κατηγορίες, δεξιότητες και περιοχές κάλυψης — το σύστημα θα βρει τις κατάλληλες εργασίες για σένα αυτόματα', 'become_specialist.step2.title': 'Βρες εργασίες', 'become_specialist.step2.desc': 'Ανακάλυψε εργασίες στις κατηγορίες σου στην ενότητα «Αναζήτηση εργασιών»', 'become_specialist.step3.title': 'Στείλε προσφορά & κέρδισε', 'become_specialist.step3.desc': 'Υποβάλε προσφορές με τιμή και χρόνο, επικοινωνήσε με πελάτες και ολοκλήρωσε εργασίες', 'become_specialist.benefits.title': 'Πλεονεκτήματα προφίλ ειδικού', 'become_specialist.benefit1': 'Αναζήτηση εργασιών ανά κατηγορία και τοποθεσία', 'become_specialist.benefit2': 'Δημόσιο προφίλ με αξιολογήσεις πελατών', 'become_specialist.benefit3': 'Πρόγραμμα διαθεσιμότητας ορατό στους πελάτες', 'become_specialist.benefit4': 'Προσθήκη σε αγαπημένα από πελάτες', 'become_specialist.cta': 'Περισσότερα', 'become_specialist.free_badge': 'Δωρεάν εγγραφή', 'profile.tab.notifications': 'Ειδοποιήσεις', 'profile.tab.reviews': 'Αξιολογήσεις', 'profile.tab.referral': 'Παραπομπές', 'profile.tab.auto_response': 'Αυτόματη απάντηση', 'profile.tab.site': 'Site', 'profile.site.title': 'Προσωπική σελίδα', 'profile.site.url_label': 'Προσωπικό site', 'profile.site.copy': 'Αντιγραφή', 'profile.site.copied': 'Αντιγράφηκε', 'profile.site.visible_title': 'Τι εμφανίζεται στη σελίδα σας', 'profile.site.visible.name': 'Όνομα και φωτογραφία', 'profile.site.visible.bio': 'Βιογραφικό', 'profile.site.visible.rating': 'Αξιολόγηση και κριτικές', 'profile.site.visible.portfolio': 'Χαρτοφυλάκιο / Κάρτες', 'profile.site.visible.contacts': 'Στοιχεία επικοινωνίας', 'profile.site.visible.full_last_name': 'Πλήρες επώνυμο', 'profile.site.visible.services': 'Κάρτες υπηρεσιών', 'profile.site.visible.reviews': 'Ενότητα κριτικών', 'profile.site.visible.status': 'Κατάσταση «Έτοιμος να βοηθήσω»', 'profile.site.theme': 'Θέμα εμφάνισης', 'profile.site.theme.dark': 'Σκοτεινό', 'profile.site.theme.light': 'Φωτεινό', 'profile.site.slug_taken': 'Αυτή η διεύθυνση είναι ήδη κατειλημμένη', 'profile.site.stats.title': 'Στατιστικά επισκεψιμότητας', 'profile.site.stats.days': 'τελευταίες 30 ημέρες', 'profile.site.stats.views': 'Προβολές', 'profile.site.stats.unique': 'Μοναδικοί επισκέπτες', 'profile.site.stats.messages': 'Μηνύματα', 'profile.site.stats.total_views': 'Συνολικές προβολές', 'profile.site.stats.total_unique': 'Μοναδικοί επισκέπτες', 'profile.site.stats.total_messages': 'Μηνύματα', 'profile.site.stats.empty': 'Δεν υπάρχουν δεδομένα ακόμη', 'profile.site.stats.loading': 'Φόρτωση στατιστικών...', 'profile.site.stats.no_slug': 'Ορίστε τη διεύθυνση του site για να δείτε στατιστικά', 'profile.site.edit_bio_hint': 'Το βιογραφικό και η φωτογραφία ρυθμίζονται στην καρτέλα «Βασικά».', 'profile.site.seo.title': 'SEO — μεταδεδομένα σελίδας', 'profile.site.seo.hint': 'Εμφανίζεται στα αποτελέσματα αναζήτησης. Αποθηκεύστε για αυτόματη μετάφραση σε όλες τις γλώσσες.', 'profile.site.seo.site_title': 'Τίτλος σελίδας', 'profile.site.seo.site_title_placeholder': 'Γιάννης Παπαδόπουλος — Υδραυλικός στην Αθήνα', 'profile.site.seo.site_desc': 'Μετα-περιγραφή', 'profile.site.seo.site_desc_placeholder': 'Σύντομη περιγραφή για τις μηχανές αναζήτησης...', 'status.can_help_now_hint': 'Η κάρτα σου εμφανίζεται ψηλότερα', 'status.need_help_hint': 'Οι ειδικοί μπορούν να σε βοηθήσουν', 'profile.referral.title': 'Πρόγραμμα παραπομπών', 'profile.referral.desc': 'Μοιράσου τον σύνδεσμο σου και κέρδισε ανταμοιβές για κάθε νέο χρήστη.', 'profile.referral.link_label': 'Ο σύνδεσμος παραπομπής σου', 'profile.referral.copy': 'Αντιγραφή', 'profile.referral.copied': 'Αντιγράφηκε!', 'profile.referral.invited_count': 'επιτυχείς παραπομπές', 'profile.referral.no_code': 'Ο κωδικός παραπομπής δεν είναι διαθέσιμος.', 'notifications.title': 'Ρυθμίσεις ειδοποιήσεων', 'notifications.email.new_tasks': 'Email για νέες εργασίες', 'notifications.email.new_tasks.desc': 'Λάβε email όταν δημοσιευτεί νέα εργασία στις κατηγορίες σου', 'notifications.messages.desc': 'Λαμβάνεις ειδοποίηση όταν έρθει νέο μήνυμα', 'notifications.saved': 'Ρυθμίσεις αποθηκεύτηκαν', 'notifications.plan_required': 'Συνδρομή απαιτείται για αυτή τη λειτουργία', 'profile.tab.info': 'Βασικά στοιχεία', 'profile.tab.finance': 'Οικονομικά', 'profile.tab.skills': 'Δεξιότητες', 'profile.tab.categories': 'Κατηγορίες', 'profile.tab.geography': 'Γεωγραφία', 'profile.specialist.categories': 'Κατηγορίες εργασιών', 'profile.specialist.categories.desc': 'Επίλεξε τις κατηγορίες στις οποίες εργάζεσαι', 'profile.specialist.geography': 'Περιοχές κάλυψης', 'profile.specialist.geography.desc': 'Επίλεξε τις πόλεις / περιοχές όπου δραστηριοποιείσαι', 'profile.saving': 'Αποθήκευση...', 'profile.upload.error': 'Σφάλμα κατά την αναφόρτωση', 'profile.saved': 'Αποθηκεύτηκε', 'profile.tab.cards': 'Προσφορές', 'profile.cards.count': 'Προσφορές', 'profile.cards.add': 'Νέα προσφορά', 'profile.cards.new_title': 'Τίτλος νέας προσφοράς', 'profile.cards.placeholder': 'π.χ. Υδραυλικά', 'profile.cards.create': 'Δημιουργία', 'profile.cards.cancel': 'Ακύρωση', 'profile.cards.empty': 'Δεν έχετε προσφορές', 'profile.cards.empty_hint': 'Δημιουργήστε την πρώτη σας κάρτα για να προβάλετε τις υπηρεσίες σας στους πελάτες.', 'profile.cards.create_first': 'Δημιουργήστε την πρώτη σας προσφορά', 'profile.cards.delete_confirm': 'Διαγραφή προσφοράς;', 'profile.listing_requirements.published_card': 'Δημοσιεύστε τουλάχιστον μία κάρτα', 'profile.listing_requirements.title': 'Το προφίλ σας δεν εμφανίζεται ακόμη στις προσφορές', 'profile.listing_requirements.hint': 'Για να γίνει ορατή η κάρτα, ολοκληρώστε αυτές τις προϋποθέσεις:', 'profile.listing_requirements.bio': 'Προσθέστε ένα σύντομο βιογραφικό στην ενότητα προφίλ', 'profile.listing_requirements.categories': 'Προσθέστε τουλάχιστον μία κατηγορία στην ενεργή κάρτα', 'profile.listing_requirements.locations': 'Προσθέστε τουλάχιστον μία τοποθεσία στην ενεργή κάρτα', 'profile.listing_requirements.card_inactive': 'Κάντε την κάρτα ενεργή', 'profile.listing_requirements.review_pending': 'Η κάρτα είναι υπό έλεγχο', 'profile.card.visibility_issue': 'Η κάρτα δεν εμφανίζεται στις προσφορές', 'profile.card.tab.main': 'Γενικά', 'profile.card.tab.skills': 'Δεξιότητες', 'profile.card.tab.categories': 'Κατηγορίες', 'profile.card.tab.geography': 'Γεωγραφία', 'profile.card.tab.portfolio': 'Γκαλερί', 'profile.card.tab.pricelist': 'Τιμοκατάλογος', 'profile.card.pricelist.empty': 'Δεν έχουν οριστεί ομάδες τιμοκαταλόγου.', 'profile.card.pricelist.add_group': 'Προσθήκη ομάδας', 'profile.card.pricelist.group_title': 'Τίτλος ομάδας', 'profile.card.pricelist.add_item': 'Προσθήκη στοιχείου', 'profile.card.pricelist.item_name': 'Υπηρεσία / εργασία', 'profile.card.pricelist.item_desc': 'Περιγραφή (προαιρετικό)', 'profile.card.pricelist.item_price': 'Τιμή', 'profile.card.pricelist.item_unit': 'Μονάδα (π.χ. /ώρα)', 'profile.card.pricelist.save_group': 'Αποθήκευση ομάδας', 'profile.card.pricelist.save_item': 'Αποθήκευση', 'profile.card.pricelist.delete_group': 'Διαγραφή ομάδας', 'profile.card.pricelist.delete_item': 'Διαγραφή', 'profile.card.active': 'Ενεργή', 'profile.card.review_pending': 'Σε αναμονή έγκρισης', 'profile.card.review_pending_hint': 'Η κάρτα σας ελέγχεται τώρα από τη διαχείριση.', 'profile.card.review_submitted': 'Η κάρτα στάλθηκε για έλεγχο', 'profile.card.review_approved': 'Η κάρτα εγκρίθηκε', 'profile.card.review_approved_hint': 'Η κάρτα σας εμφανίζεται τώρα στις προσφορές.', 'profile.card.review_rejected': 'Η κάρτα απορρίφθηκε', 'profile.card.review_rejected_hint': 'Η κάρτα σας δεν εγκρίθηκε. Διορθώστε την και στείλτε την ξανά.', 'profile.card.submit_review': 'Αποστολή για έλεγχο', 'profile.card.withdraw_review': 'Ανάκληση αίτησης', 'profile.card.unpublish': 'Αφαίρεση από δημοσίευση', 'profile.card.save': 'Αποθήκευση', 'profile.card.saved': 'Αποθηκεύτηκε', 'profile.card.delete': 'Διαγραφή', 'profile.card.skill.add': 'Προσθήκη δεξιότητας', 'profile.card.photo.add': 'Προσθήκη φωτογραφίας', 'profile.card.photo.uploading': 'Μεταφόρτωση...', 'profile.card.photo.empty': 'Δεν υπάρχουν φωτογραφίες', 'profile.card.item.title': 'Τίτλος', 'profile.card.item.desc': 'Περιγραφή', 'profile.card.item.save': 'Αποθήκευση', 'profile.card.item.cancel': 'Ακύρωση', 'profile.card.item.edit': 'Επεξεργασία', 'profile.card.description': 'Περιγραφή κάρτας', 'profile.card.desc_auto_translate': 'Κατά την αποθήκευση θα μεταφραστεί αυτόματα σε άλλες γλώσσες', 'profile.card.desc_translated': 'Υπάρχουν μεταφράσεις:', 'profile.upgrade.cards_limit': 'Όριο χαρτοφυλακίων εξαντλήθηκε', 'profile.upgrade.plan': 'Τρέχον πλάνο:', 'profile.upgrade.contact': 'Επικοινωνήστε με τον διαχειριστή για αλλαγή πλάνου', 'profile.upgrade.ok': 'Εντάξει', 'profile.plan.title': 'Πλάνο συνδρομής', 'profile.balance': 'Υπόλοιπο', 'profile.balance.topup': 'Αναπλήρωση υπολοίπου', 'profile.balance.topup.title': 'Αναπλήρωση υπολοίπου', 'profile.balance.topup.amount': 'Ποσό (σε EUR)', 'profile.balance.topup.hint': 'Επιλέξτε ποσό ή εισαγάγετε μανούαλα', 'profile.balance.topup.submit': 'Πληρωμή', 'profile.balance.topup.loading': 'Ρεδιρεκτάρισμα...', 'profile.balance.topup.error': 'Σφάλμα μετάβασης στην πληρωμή. Προσπαθήστε ξανά.', 'payment.success.title': 'Πληρωμή επιτυχής!', 'payment.success.desc': 'Το υπόλοιπό σας ενημερώθηκε.', 'payment.cancelled.title': 'Ακύρωση πληρωμής', 'payment.cancelled.desc': 'Η πληρωμή ακυρώθηκε. Κανένα χρήμα δεν χρεώθηκε.', 'payment.pending.title': 'Σε εξέλιξη...', 'payment.pending.desc': 'Επεξεργαζόμαστε την πληρωμή σας.', 'payment.back_to_profile': 'Επιστροφή στο προφίλ', 'profile.plan.basic': 'Βασικό (δωρεάν)', 'profile.plan.contact_upgrade': 'Επικοινωνήστε με τον διαχειριστή για αναβάθμιση', 'profile.plan.cards_up_to': 'Χαρτοφυλάκια: έως', 'profile.plan.cards_unlimited': 'Χαρτοφυλάκια: απεριόριστα', 'profile.plan.tasks_up_to': 'Εργασίες: έως', 'profile.plan.offers_up_to': 'Προσφορές: έως', 'profile.plan.valid_until': 'Ισχύει έως', 'profile.plan.no_expiry': 'Δεν λήγει', // Create task 'create.error': 'Σφάλμα κατά τη δημοσίευση', // Tasks list extras 'tasks.category.general': 'Γενικά', 'tasks.budget.range': 'Εύρος:', 'tasks.budget.from': 'από', 'tasks.budget.to': 'έως', 'tasks.filter.reset': 'Εκκαθάριση φίλτρων', 'tasks.load_more': 'Φόρτωση ακόμα', 'tasks.showing': 'Αποτελέσματα:', 'tasks.field.budget': 'Προϋπολογισμός, €', // Admin 'admin.title': 'Πίνακας Διαχείρισης', 'admin.tab.stats': 'Στατιστικά', 'admin.tab.users': 'Χρήστες', 'admin.tab.tasks': 'Εργασίες', 'admin.tab.reports': 'Αναφορές', 'admin.tab.moderation': 'Μονάδα ελέγχου', 'admin.stats.users': 'Χρήστες', 'admin.stats.tasks': 'Εργασίες', 'admin.stats.offers': 'Προσφορές', 'admin.stats.reviews': 'Αξιολογήσεις', 'admin.tasks.by_status': 'Εργασίες ανά κατάσταση', 'admin.col.user': 'Χρήστης', 'admin.col.email': 'Email', 'admin.col.role': 'Ρόλος', 'admin.col.registered': 'Εγγραφή', 'admin.col.status': 'Κατάσταση', 'admin.col.title': 'Τίτλος', 'admin.col.budget': 'Προϋπολογισμός', 'admin.col.created': 'Δημιουργία', 'admin.users.active': 'Ενεργός', 'admin.users.inactive': 'Ανενεργός', 'admin.users.deactivate': 'Απενεργοποίηση', 'admin.users.activate': 'Ενεργοποίηση', 'admin.tasks.cancel': 'Ακύρωση', 'admin.reports.none': 'Δεν υπάρχουν αναφορές', 'admin.moderation.none': 'Δεν βρέθηκαν προσφορές για έλεγχο', 'admin.moderation.pending': 'Σε αναμονή', 'admin.moderation.active': 'Ενεργό', 'admin.moderation.approve': 'Έγκριση', 'admin.moderation.block': 'Μπλοκάρισμα', 'admin.moderation.pending_title': 'Προσφορές προς έγκριση', 'admin.moderation.active_title': 'Ενεργές προσφορές', 'admin.moderation.pending_count': 'Σε αναμονή', 'admin.moderation.active_count': 'Ενεργές', 'admin.moderation.pending_hint': 'Νέες προσφορές που περιμένουν έγκριση', 'admin.moderation.active_hint': 'Ενεργές προσφορές που μπορείτε να μπλοκάρετε', 'admin.moderation.pending_empty': 'Δεν υπάρχουν νέες προσφορές προς έγκριση', 'admin.moderation.active_empty': 'Δεν βρέθηκαν ενεργές προσφορές', 'admin.reports.reviewed': 'Αναθεωρήθηκε', 'admin.reports.dismiss': 'Απόρριψη', 'admin.pagination.total': 'Σύνολο', 'admin.users.role.change': 'Αλλαγή ρόλου', 'admin.users.search.placeholder': 'Αναζήτηση ονόματος ή email...', 'admin.tasks.delete': 'Διαγραφή', 'admin.tasks.delete.confirm': 'Διαγραφή αυτής της εργασίας μόνιμα;', 'admin.tasks.search.placeholder': 'Αναζήτηση τίτλου...', 'admin.col.customer': 'Πελάτης', 'admin.col.reporter': 'Καταγγέλλων', 'admin.col.target': 'Στόχος', 'admin.filter.all_roles': 'Όλοι οι ρόλοι', 'admin.filter.all_statuses': 'Όλες οι καταστάσεις', 'admin.reports.target.task': 'Εργασία', 'admin.reports.target.user': 'Χρήστης', 'admin.tab.categories': 'Κατηγορίες', 'admin.tab.locations': 'Πόλεις & Περιοχές', 'admin.tab.logs': 'Αρχεία', 'admin.tab.plans': 'Πακέτα', 'admin.tab.settings': 'Ρυθμίσεις', 'admin.logs.subtab.ai': 'AI Logs', 'admin.logs.subtab.activity': 'Δραστηριότητα', 'admin.logs.subtab.mail': 'Mail', 'admin.logs.subtab.notifications': 'Ειδοποιήσεις', 'admin.notif_logs.type': 'Τύπος', 'admin.notif_logs.title': 'Τίτλος', 'admin.notif_logs.read': 'Διαβασμένο', 'admin.notif_logs.empty': 'Δεν υπάρχουν αρχεία ειδοποιήσεων', 'admin.stats.notif_chart_title': 'Ειδοποιήσεις ανά ημέρα', 'admin.stats.notif_label': 'Ειδοποιήσεις', 'admin.stats.mail_chart_title': 'Emails ανά ημέρα', 'admin.stats.mail_label': 'Emails', 'admin.filter.all': 'Όλα', 'admin.stats.specialists': 'Βοηθοί', 'admin.col.plan': 'Πακέτο', 'admin.back_home': 'Αρχική', 'admin.plans.title': 'Πακέτα συνδρομής', 'admin.plans.add': '+ Νέο πακέτο', 'admin.plans.empty': 'Δεν υπάρχουν πακέτα', 'admin.plans.form.new': 'Νέο πακέτο', 'admin.plans.form.edit': 'Επεξεργασία πακέτου', 'admin.plans.form.name': 'Όνομα', 'admin.plans.form.price': 'Τιμή (EUR)', 'admin.plans.form.old_price': 'Παλιά τιμή (EUR, προαιρετικό)', 'admin.plans.form.max_offers': 'Μέγ. προσφορές (κενό = χωρίς όριο)', 'admin.plans.form.max_cards': 'Μέγ. προσφορές (κενό = χωρίς όριο)', 'admin.plans.form.duration_days': 'Διάρκεια (ημέρες, κενό = χωρίς λήξη)', 'admin.plans.form.description': 'Περιγραφή', 'admin.plans.form.features': 'Δυνατότητες (μία ανά γραμμή)', 'admin.plans.form.notify': 'Ειδοποιήσεις νέων εργασιών', 'admin.plans.form.default': 'Προεπιλογή', 'admin.plans.form.active': 'Ενεργό', 'admin.plans.form.order': 'Σειρά', 'admin.plans.form.role': 'Ρόλος', 'admin.plans.form.tier': 'Επίπεδο', 'admin.plans.form.role.customer': 'Πελάτης', 'admin.plans.form.role.specialist': 'Βοηθός', 'admin.plans.form.tier.free': 'Δωρεάν', 'admin.plans.form.tier.pro': 'Pro', 'admin.plans.form.tier.ultimate': 'Ultimate', 'admin.plans.form.section.limits': 'Όρια (κενό = χωρίς όριο)', 'admin.plans.form.max_messages_day': 'Μέγ. μηνύματα/ημέρα', 'admin.plans.form.max_orders_day': 'Μέγ. παραγγελίες/ημέρα', 'admin.plans.form.max_skills': 'Μέγ. δεξιότητες', 'admin.plans.form.max_profiles': 'Μέγ. προφίλ', 'admin.plans.form.max_portfolio': 'Μέγ. στοιχεία χαρτοφυλακίου', 'admin.plans.form.section.boost': 'Πολλαπλασιαστές & Ενίσχυση', 'admin.plans.form.search_boost': 'Ενίσχυση αναζήτησης', 'admin.plans.form.offers_multiplier': 'Πολλαπλασιαστής προσφορών', 'admin.plans.form.section.contact': 'Δικαιώματα επικοινωνίας', 'admin.plans.form.can_contact_free': 'Επικοινωνία με δωρεάν χρήστες', 'admin.plans.form.can_contact_pro': 'Επικοινωνία με Pro χρήστες', 'admin.plans.form.can_contact_all': 'Επικοινωνία με όλους', 'admin.plans.form.can_show_contact': 'Εμφάνιση στοιχείων επικοινωνίας', 'admin.plans.form.can_view_phone': 'Προβολή τηλεφώνου', 'admin.plans.form.section.features': 'Λειτουργίες', 'admin.plans.form.upload_video': 'Μεταφόρτωση βίντεο', 'admin.plans.form.favorites': 'Αγαπημένα', 'admin.plans.form.google_calendar': 'Google Calendar', 'admin.plans.form.verified_badge': 'Σήμα επαλήθευσης', 'admin.plans.form.highlighted_reviews': 'Προβεβλημένες κριτικές', 'admin.plans.form.personal_site': 'Προσωπική σελίδα', 'admin.plans.form.can_help_now': 'Κατάσταση «Μπορώ να βοηθήσω»', 'admin.plans.form.need_help': 'Κατάσταση «Χρειάζομαι βοήθεια»', 'admin.plans.form.auto_response': 'Αυτόματη απάντηση', 'admin.plans.form.auto_match': 'Αυτόματη αντιστοίχιση', 'admin.plans.form.price_list': 'Τιμοκατάλογος', 'admin.plans.form.instant_dispatch_free': 'Άμεση αποστολή (δωρεάν)', 'admin.plans.form.instant_dispatch_pro': 'Άμεση αποστολή (Pro)', 'admin.plans.badge.default': 'Προεπιλογή', 'admin.plans.badge.inactive': 'Ανενεργό', 'admin.plans.make_default': 'Ορισμός ως προεπιλογή', 'admin.plans.tasks': 'Εργασίες', 'admin.plans.offers': 'Προσφορές', 'admin.plans.cards': 'Προσφορές', 'admin.plans.notify_tasks': 'Ειδοποιήσεις εργασιών', 'admin.plans.delete.confirm': 'Διαγραφή πακέτου', 'admin.activity.title': 'Αρχείο δραστηριότητας', 'admin.activity.event': 'Γεγονός', 'admin.activity.all_events': 'Όλα τα γεγονότα', 'admin.activity.from': 'Από', 'admin.activity.to': 'Έως', 'admin.activity.reset': 'Επαναφορά', 'admin.activity.total': 'Σύνολο', 'admin.activity.empty': 'Δεν υπάρχουν εγγραφές', 'admin.mail.event': 'Συμβάν email', 'admin.mail.all_events': 'Όλα τα email συμβάντα', 'admin.mail.from': 'Από', 'admin.mail.to': 'Έως', 'admin.mail.reset': 'Επαναφορά', 'admin.mail.total': 'Σύνολο', 'admin.mail.empty': 'Δεν υπάρχουν email logs', 'admin.mail.recipient': 'Παραλήπτης', 'admin.mail.provider': 'Πάροχος', 'admin.mail.details': 'Λεπτομέρειες', 'admin.mail.status': 'Κατάσταση', 'admin.mail.success': 'Επιτυχία', 'admin.mail.failed': 'Σφάλμα', 'admin.event.email_sent': 'Email sent', 'admin.event.email_failed': 'Email failed', 'admin.event.email_dev': 'Email DEV fallback', 'admin.event.admin_email_test_sent': 'Admin test email sent', 'admin.event.admin_email_test_failed': 'Admin test email failed', 'admin.logs.empty': 'Δεν υπάρχουν εγγραφές', 'admin.logs.date': 'Ημερομηνία', 'admin.logs.provider': 'Πάροχος', 'admin.logs.model': 'Μοντέλο', 'admin.logs.action': 'Ενέργεια', 'admin.logs.langs': 'Γλώσσες', 'admin.logs.in': 'Είσοδος', 'admin.logs.out': 'Έξοδος', 'admin.logs.total': 'Σύνολο', 'admin.logs.ms': 'ms', 'admin.logs.status': 'Κατάσταση', 'admin.stats.activity_30d': 'Δραστηριότητα 30 ημερών', 'admin.stats.tasks_label': 'Εργασίες', 'admin.stats.users_label': 'Χρήστες', 'admin.stats.specialists_label': 'Βοηθοί', 'admin.stats.tokens_title': 'Χρήση tokens (ανά μήνα)', 'admin.stats.tokens_out': 'Εξερχόμενα', 'admin.stats.tokens_in': 'Εισερχόμενα', 'admin.stats.tokens_out_label': 'Εξερχόμενα tokens', 'admin.stats.tokens_in_label': 'Εισερχόμενα tokens', 'admin.stats.cost_label': 'Κόστος (USD)', 'admin.stats.tasks_by_status': 'Εργασίες ανά κατάσταση', 'admin.task_status.open': 'Ανοιχτές', 'admin.task_status.in_progress': 'Σε εξέλιξη', 'admin.task_status.completed': 'Ολοκληρωμένες', 'admin.task_status.cancelled': 'Ακυρωμένες', 'admin.task_status.draft': 'Προσχέδια', 'admin.settings.tab.general': 'Γενικά', 'admin.settings.tab.smtp': 'E-Mail', 'admin.settings.tab.notifications': 'Ειδοποιήσεις', 'admin.settings.tab.payment': 'Πληρωμή', 'admin.settings.tab.referral': 'Παραπομπές', 'admin.settings.tab.seo': 'SEO', 'admin.settings.tab.socials': 'Κοινωνικά δίκτυα', 'admin.settings.tab.telegram': 'Telegram Bot', 'admin.settings.telegram.title': 'Ρυθμίσεις Telegram Bot', 'admin.settings.telegram.help': 'Δημιουργήστε bot μέσω @BotFather. Για chat ID χρησιμοποιήστε @userinfobot.', 'admin.settings.telegram.bot_token': 'Bot Token', 'admin.settings.telegram.admin_chat_id': 'Admin Chat ID', 'admin.settings.telegram.admin_chat_hint': 'Γράψτε /start στο bot σας, μετά στείλτε μήνυμα μέσω @userinfobot για να λάβετε το chat ID', 'admin.settings.telegram.channel_id': 'Channel ID', 'admin.settings.telegram.channels_title': 'Κανάλια ανά γλώσσα', 'admin.settings.telegram.channel_hint': 'Αναγνωριστικό δημόσιου καναλιού ή @όνομα καναλιού', 'admin.settings.telegram.notify_registrations': 'Ειδοποίηση νέων εγγραφών', 'admin.settings.telegram.notify_registrations_hint': 'Αποστολή μηνύματος στον admin κατά την εγγραφή νέου χρήστη', 'admin.settings.telegram.post_new_tasks': 'Δημοσίευση νέων εργασιών', 'admin.settings.telegram.post_new_tasks_hint': 'Αυτόματη δημοσίευση νέων εργασιών στο κανάλι', 'admin.settings.telegram.test': 'Δοκιμή', 'admin.settings.telegram.verify': 'Επαλήθευση', 'admin.settings.telegram.test_ok': 'Η σύνδεση λειτουργεί', 'admin.settings.telegram.test_fail': 'Σφάλμα σύνδεσης', 'admin.settings.socials.title': 'Σύνδεσμοι κοινωνικών δικτύων', 'admin.settings.socials.hint': 'Συμπληρωμένες εγγραφές εμφανίζονται στο υπόγειο', 'admin.settings.seo.maintenance_label': 'Λειτουργία συντήρησης', 'admin.settings.seo.maintenance_hint': 'Εμφάνιση σελίδας συντήρησης σε όλους τους επισκέπτες', 'admin.settings.seo.indexing_label': 'Ευρετηρίαση από μηχανές αναζήτησης', 'admin.settings.seo.indexing_hint': 'Επιτρέπει στις μηχανές αναζήτησης να ευρετηριάσουν τον ιστότοπο', 'admin.settings.seo.head_scripts_label': 'Scripts στο (JS)', 'admin.settings.seo.head_scripts_hint': 'Εκτελείται σε κάθε σελίδα (Google Tag Manager, analytics κ.λπ.)', 'admin.settings.seo.site_title_label': 'Τίτλος ιστότοπου', 'admin.settings.seo.site_description_label': 'Περιγραφή ιστότοπου (meta description)', 'admin.settings.referral.title': 'Πρόγραμμα παραπομπών', 'admin.settings.referral.hint': 'Επιβράβευσε χρήστες που φέρνουν νέους εγγεγραμμένους.', 'admin.settings.referral.enabled_label': 'Ενεργό', 'admin.settings.referral.enabled_hint': 'Ενεργοποίηση / απενεργοποίηση εφαρμογής ανταμοιβών', 'admin.settings.referral.customer_section': 'Για πελάτες', 'admin.settings.referral.specialist_section': 'Για βοηθούς', 'admin.settings.referral.plan_label': 'Πλάνο ανταμοιβής', 'admin.settings.referral.no_plan': '— χωρίς πλάνο —', 'admin.settings.referral.plan_hint': 'Αυτό το πλάνο θα ανατεθεί στον χρήστη που έφερε νέους. Εάν το τρέχον πλάνο του είναι υψηλότερο, θα προστεθούν μόνο οι μέρες.', 'admin.settings.referral.days_label': 'Ημέρες ανταμοιβής', 'admin.settings.referral.days_hint': 'Αριθμός ημερών που θα προστεθούν στη λήξη του πλάνου.', 'admin.settings.general.title': 'Γενικές ρυθμίσεις', 'admin.settings.general.site_name': 'Όνομα ιστότοπου', 'admin.settings.general.site_url': 'URL ιστότοπου', 'admin.settings.general.contact_email': 'Email επικοινωνίας', 'admin.settings.general.support_phone': 'Τηλέφωνο υποστήριξης', 'admin.settings.smtp.title': 'Ρυθμίσεις SMTP', 'admin.settings.smtp.hint': 'Χρησιμοποιείται για αποστολή ειδοποιήσεων email.', 'admin.settings.smtp.host': 'SMTP Host', 'admin.settings.smtp.port': 'Θύρα', 'admin.settings.smtp.encryption': 'Κρυπτογράφηση', 'admin.settings.smtp.enc.none': 'Χωρίς', 'admin.settings.smtp.enc.tls': 'STARTTLS (θύρα 587)', 'admin.settings.smtp.enc.ssl': 'SSL/TLS (θύρα 465)', 'admin.settings.smtp.username': 'Όνομα χρήστη', 'admin.settings.smtp.password': 'Κωδικός / App Password', 'admin.settings.smtp.from_name': 'Όνομα αποστολέα', 'admin.settings.smtp.from_email': 'Email αποστολέα', 'admin.settings.smtp.test': 'Αποστολή δοκιμαστικού email', 'admin.settings.smtp.sending': 'Αποστολή...', 'admin.settings.payment.hint': 'Τα στοιχεία για ePay Piraeus Bank.', 'admin.settings.env.test': 'Δοκιμαστικό (sandbox)', 'admin.settings.env.prod': 'Παραγωγή', 'admin.settings.env.label': 'Περιβάλλον', 'admin.settings.merchant_id': 'Merchant ID', 'admin.settings.api_user': 'API User', 'admin.settings.api_password': 'API Password', 'admin.settings.confirm_url': 'Confirmation URL (webhook)', 'admin.settings.cancel_url': 'Cancel URL', 'admin.settings.active': 'Ενεργό', 'admin.settings.saving': 'Αποθήκευση...', 'admin.settings.saved': '✓ Αποθηκεύτηκε', 'admin.notif.vars_hint': 'Διαθέσιμες μεταβλητές στα πρότυπα', 'admin.notif.tmpl.not_set': 'Πρότυπο δεν έχει οριστεί', 'admin.notif.tmpl.subject_label': 'Θέμα email', 'admin.notif.tmpl.body_label': 'Κείμενο email (HTML)', 'admin.notif.tmpl.save': 'Αποθήκευση', 'admin.notif.tmpl.close': 'Κλείσιμο', 'admin.notif.tmpl.translate': 'Αυτόματη μετάφραση', 'admin.notif.tmpl.translating': 'Μετάφραση...', 'admin.notif.tmpl.saving': 'Αποθήκευση...', 'admin.notif.email_verification': 'Επαλήθευση email', 'admin.notif.registration_success': 'Επιτυχής εγγραφή', 'admin.notif.password_reset': 'Επαναφορά κωδικού', 'admin.notif.new_offer': 'Νέα προσφορά', 'admin.notif.new_task': 'Νέα εργασία', 'admin.notif.offer_accepted': 'Προσφορά αποδεκτή', 'admin.notif.new_message': 'Νέο μήνυμα', 'admin.notif.offer_declined': 'Απόρριψη προσφοράς', 'admin.notif.offer_other_accepted': 'Επιλέχθηκε άλλος ειδικός', 'admin.notif.task_updated': 'Ενημέρωση εργασίας', 'admin.notif.deadline_reminder': 'Υπενθύμιση προθεσμίας', 'admin.notif.task_archived': 'Αυτόματη απόσυρση εργασίας', 'admin.notif.referral_reward': 'Ανταμοιβή παραπομπής', // Plan lifecycle email templates 'admin.email_template.plan_activated': 'Τιμολόγιο — ενεργοποίηση πλάνου', 'admin.email_template.plan_upgraded': 'Τιμολόγιο — αναβάθμιση πλάνου', 'admin.email_template.plan_downgrade_scheduled': 'Τιμολόγιο — προγραμματισμένη υποβάθμιση', 'admin.email_template.plan_downgrade_applied': 'Τιμολόγιο — εφαρμογή υποβάθμισης', 'admin.email_template.plan_renewal_reminder': 'Τιμολόγιο — υπενθύμιση ανανέωσης', 'admin.email_template.plan_insufficient_funds': 'Τιμολόγιο — ανεπαρκές υπόλοιπο', // Pricing confirm modal 'pricing.confirm.title': 'Επιβεβαίωση επιλογής πλάνου', 'pricing.confirm.plan': 'Πλάνο', 'pricing.confirm.prorated': 'Αναλογική έκπτωση', 'pricing.confirm.effective_price': 'Προς πληρωμή', 'pricing.confirm.your_balance': 'Το υπόλοιπό σας', 'pricing.confirm.downgrade_info': 'Η μετάβαση στο νέο πλάνο θα γίνει αυτόματα μετά τη λήξη της τρέχουσας περιόδου.', 'pricing.confirm.insufficient': 'Ανεπαρκές υπόλοιπο.', 'pricing.confirm.top_up': 'Ανανέωση', 'pricing.confirm.schedule_downgrade': 'Προγραμματισμός μετάβασης', 'pricing.confirm.pay': 'Πληρωμή', 'admin.user_edit.title': 'Επεξεργασία χρήστη', 'admin.user_edit.email': 'Email', 'admin.user_edit.email_verified': 'Διευθυνση email επαληθεύτηκε', 'admin.user_edit.email_not_verified': 'Email δεν έχει επαληθευτεί', 'admin.user_edit.verify_email_btn': 'Χειροκίνητη επαλήθευση', 'admin.user_edit.verify_email_done': 'Email επαληθεύτηκε!', 'admin.user_edit.id': 'ID', 'admin.user_edit.registered': 'Εγγραφή', 'admin.user_edit.last_seen': 'Τελευταία σύνδεση', 'admin.user_edit.lang': 'Γλώσσα', 'admin.user_edit.first_name': 'Όνομα', 'admin.user_edit.last_name': 'Επώνυμο', 'admin.user_edit.phone': 'Τηλέφωνο', 'admin.user_edit.bio': 'Βιογραφικό', 'admin.user_edit.role': 'Ρόλος', 'admin.user_edit.plan': 'Πακέτο', 'admin.user_edit.no_plan': '— Χωρίς πακέτο —', 'admin.user_edit.active': 'Ενεργός λογαριασμός', 'admin.user_edit.published': 'Δημοσιευμένη', 'admin.user_edit.balance': 'Υπόλοιπο (EUR)', 'admin.user_edit.skills': 'Δεξιότητες', 'admin.user_edit.tab.profile': 'Προφίλ', 'admin.user_edit.tab.account': 'Λογαριασμός', 'admin.user_edit.tab.balance': 'Υπόλοιπο', 'admin.user_edit.tab.settings': 'Ρυθμίσεις', 'admin.user_edit.tab.specialist': 'Προσφορές', 'admin.user_edit.tab.site': 'Ιστοσελίδα', 'admin.user_edit.plan_expires': 'Λήξη πλάνου', 'admin.user_edit.interface_lang': 'Γλώσσα διεπαφής', 'admin.user_edit.comm_languages': 'Γλώσσες επικοινωνίας', 'admin.user_edit.personal_site_slug': 'Προσωπική σελίδα', 'admin.user_edit.show_contact_info': 'Εμφάνιση στοιχείων επικοινωνίας', 'admin.user_edit.show_contact_info.hint': 'Ορατό στους πελάτες', 'admin.user_edit.notify_new_tasks': 'Ειδοποίηση για νέες εργασίες', 'admin.user_edit.notify_new_tasks.hint': 'Push και email ειδοποιήσεις', 'admin.user_edit.notif_messages': 'Ειδοποιήσεις μηνυμάτων', 'admin.user_edit.notif_messages.hint': 'Νέα μηνύματα στη συνομιλία', 'admin.user_edit.site_settings': 'Ρυθμίσεις προσωπικής σελίδας', 'admin.user_edit.categories': 'Κατηγορίες υπηρεσιών', 'admin.user_edit.locations': 'Περιοχές εξυπηρέτησης', 'admin.user_edit.skill_placeholder': 'Νέα δεξιότητα...', 'admin.user_edit.add_category': '— Επιλέξτε κατηγορία —', 'admin.user_edit.add_location': '— Επιλέξτε περιοχή —', 'admin.user_edit.specialist_cards': 'Προσφορές ειδικού', 'admin.user_edit.no_cards': 'Δεν βρέθηκαν προσφορές', 'admin.user_edit.card_title': 'Τίτλος προσφοράς', 'admin.user_edit.card_description': 'Περιγραφή', 'admin.balance.topup.btn': 'Αναπλήρωση', 'admin.balance.withdraw.btn': 'Αφαίρεση', 'admin.balance.modal_hint': 'Οι αλλαγές ισχύουν άμεσα και καταγράφονται στο ιστορικό', 'admin.balance.topup.title': 'Αναπλήρωση υπολοίπου', 'admin.balance.topup.amount': 'Ποσό', 'admin.balance.topup.description': 'Σχόλιο', 'admin.balance.topup.description.placeholder': 'Για παράδειγμα: bonus ή χειροκίνητη αναπλήρωση', 'admin.balance.topup.submit': 'Αναπλήρωση υπολοίπου', 'admin.balance.withdraw.title': 'Αφαίρεση υπολοίπου', 'admin.balance.withdraw.amount': 'Ποσό', 'admin.balance.withdraw.description': 'Σχόλιο', 'admin.balance.withdraw.description.placeholder': 'Για παράδειγμα: επιστροφή ή χειροκίνητη χρέωση', 'admin.balance.withdraw.submit': 'Αφαίρεση από το υπόλοιπο', 'admin.user_edit.role.customer': 'Πελάτης', 'admin.user_edit.role.user': 'Χρήστης', 'admin.user_edit.role.specialist': 'Βοηθός', 'admin.user_edit.role.admin': 'Διαχειριστής', 'common.refresh': 'Ανανέωση', 'common.back_home': 'Αρχική', 'admin.loc.hint': 'Διαχείριση πόλεων και συνοικιών', 'admin.loc.add_city': 'Νέα πόλη', 'admin.loc.add_district': 'Προσθήκη συνοικίας', 'admin.loc.new': 'Νέα τοποθεσία', 'admin.loc.edit': 'Επεξεργασία τοποθεσίας', 'admin.loc.district': 'συνοικία', 'admin.loc.empty': 'Δεν υπάρχουν τοποθεσίες', 'admin.loc.delete.confirm': 'Διαγραφή τοποθεσίας; Όλες οι συνοικίες θα διαγραφούν επίσης.', 'admin.cat.add_root': 'Νέα κατηγορία', 'admin.cat.add_sub': 'Υποκατηγορία', 'admin.cat.edit': 'Επεξεργασία', 'admin.cat.delete': 'Διαγραφή', 'admin.cat.delete.confirm': 'Διαγραφή κατηγορίας; Όλες οι υποκατηγορίες θα διαγραφούν επίσης.', 'admin.cat.slug': 'Slug', 'admin.cat.icon': 'Εικονίδιο', 'admin.cat.name_el': 'Ελληνικά', 'admin.cat.name_en': 'Αγγλικά', 'admin.cat.name_ru': 'Ρωσικά', 'admin.cat.name_uk': 'Ουκρανικά', 'admin.cat.active': 'Ενεργή', 'admin.cat.parent': 'Γονική κατηγορία', 'admin.cat.no_parent': 'Κορυφαίο επίπεδο', 'admin.cat.save': 'Αποθήκευση', 'admin.cat.cancel': 'Ακύρωση', 'admin.cat.empty': 'Δεν υπάρχουν κατηγορίες', 'admin.cat.hint': 'Διαχείριση κατηγοριών με πολυεπίπεδη ιεραρχία', 'admin.cat.new': 'Νέα κατηγορία', 'admin.cat.subcategory': 'υποκατηγορία', 'admin.cat.add_child': 'Προσθήκη υποκατηγορίας', 'admin.cat.inactive': 'Ανενεργή', 'admin.event.user_login': 'Σύνδεση', 'admin.event.user_register': 'Εγγραφή', 'admin.event.admin_user_deactivate': 'Αποκλεισμός χρήστη', 'admin.event.admin_user_activate': 'Ενεργοποίηση χρήστη', 'admin.event.admin_user_role_changed': 'Αλλαγή ρόλου', 'admin.event.admin_task_cancelled': 'Ακύρωση εργασίας', 'admin.event.admin_task_deleted': 'Διαγραφή εργασίας', 'admin.event.admin_report_reviewed': 'Αναφορά εξετάστηκε', 'admin.event.admin_report_dismissed': 'Αναφορά απορρίφθηκε', 'admin.event.task_created': 'Δημιουργία εργασίας', 'user.online': 'Σε σύνδεση', 'user.seen_minutes': 'ήταν εδώ πριν {n} λεπτά', 'user.seen_hours': 'ήταν εδώ πριν {n} ώρες', 'user.seen_yesterday': 'ήταν εδώ χθες', 'user.seen_days': 'ήταν εδώ πριν {n} μέρες', // Specialists 'specialists.title': 'Προσφορές', 'specialists.search': 'Αναζήτηση ειδικού...', 'specialists.search.btn': 'Αναζήτηση', 'specialists.empty': 'Δεν βρέθηκαν ειδικοί', 'specialists.no_bio': 'Χωρίς περιγραφή', 'specialists.view': 'Προβολή προφίλ', 'specialists.reviews': 'αξιολογήσεις', 'specialist.favorite': 'Προσθήκη στα αγαπημένα', 'specialist.unfavorite': 'Αφαίρεση από αγαπημένα', 'specialist.site_link': 'Προσωπικό site', 'favorites.specialists.title': 'Αγαπημένοι ειδικοί', 'favorites.specialists.empty': 'Δεν έχετε αγαπημένους ειδικούς', 'nav.favorites': 'Αγαπημένα', 'nav.schedule': 'Πρόγραμμα', 'nav.find_tasks': 'Αναζήτηση εργασιών', 'schedule.title': 'Το πρόγραμμά μου', 'schedule.subtitle': 'Σημειώστε τις ημέρες που είστε ελεύθεροι ή απασχολημένοι — οι πελάτες θα δουν τη διαθεσιμότητά σας', 'schedule.available': 'Ελεύθερος', 'schedule.busy': 'Απασχολημένος', 'schedule.unset': 'Μη ορισμένο', 'schedule.click_hint': '← κλικ για εναλλαγή κατάστασης', 'schedule.range_mode': 'Επιλογή εύρους', 'schedule.range_from': 'Από {date} — επιλέξτε τελική ημερομηνία', 'schedule.click_to_set': 'Κλικ για ορισμό', 'schedule.free': 'ελεύθερα', 'schedule.busy_count': 'απασχολημένα', 'schedule.free_days': 'ελεύθερες ημέρες', 'schedule.googleCalendar': 'Google Calendar', 'schedule.connectGoogle': 'Σύνδεση με Google Calendar', 'schedule.disconnectGoogle': 'Αποσύνδεση', 'schedule.connectedAs': 'Συνδεδεμένο ως', 'schedule.importFromGoogle': 'Συγχρονισμός από Google', 'schedule.gcalConnected': '✓ Google Calendar συνδέθηκε', 'schedule.gcalError': 'Σφάλμα σύνδεσης Google Calendar', 'schedule.gcalImportDone': 'Εισήχθησαν {n} ημερ. από Google Calendar', 'schedule.gcalAutoSyncNote': 'Οι αλλαγές αποστέλλονται αυτόματα στο Google Calendar', 'schedule.gcalConnectDesc': 'Συνδέστε το Google Calendar για αυτόματο συγχρονισμό', 'schedule.gcalDisconnectConfirm': 'Αποσύνδεση Google Calendar;', 'find_tasks.title': 'Αναζήτηση εργασιών', 'find_tasks.for_me': 'Για μένα', 'find_tasks.all': 'Όλες οι εργασίες', 'find_tasks.by_category': 'Ανά κατηγορία', 'find_tasks.list': 'Λίστα', 'find_tasks.already_offered': 'Προσφορά υποβλήθηκε', 'find_tasks.offer_now': 'Υποβολή προσφοράς', 'find_tasks.empty_for_me': 'Δεν βρέθηκαν εργασίες στις κατηγορίες σας', 'find_tasks.banner_hint': 'Βρείτε εργασίες που ταιριάζουν με το χαρτοφυλάκιό σας', 'find_tasks.no_cards': 'Δημιουργήστε ένα χαρτοφυλάκιο ειδικού για να δείτε εργασίες για εσάς', 'find_tasks.add_card': 'Δημιουργία χαρτοφυλακίου', 'find_tasks.search': 'Αναζήτηση εργασιών...', 'find_tasks.tasks_count': 'εργασίες', // Footer 'footer.tagline': 'Η πλατφόρμα εργασιών για την Ελλάδα', 'footer.rights': 'Όλα τα δικαιώματα διατηρούνται.', 'nav.privacy': 'Πολιτική απορρήτου', 'nav.delete_account': 'Διαγραφή λογαριασμού', 'delete_account.title': 'Αίτηση διαγραφής λογαριασμού', 'delete_account.subtitle': 'Αφού επαληθεύσουμε την αίτησή σας, θα διαγράψουμε μόνιμα τον λογαριασμό και τα δεδομένα σας εντός 30 ημερών.', 'delete_account.warning': 'Αυτή η ενέργεια δεν μπορεί να αναιρεθεί. Όλα τα δεδομένα σας θα διαγραφούν μόνιμα.', 'delete_account.reason_label': 'Αιτία (προαιρετικό)', 'delete_account.reason_placeholder': 'Πείτε μας γιατί θέλετε να διαγράψετε τον λογαριασμό σας...', 'delete_account.confirm_label': 'Επιβεβαιώνω ότι θέλω να διαγράψω μόνιμα τον λογαριασμό μου', 'delete_account.submit': 'Υποβολή αίτησης', 'delete_account.submitting': 'Αποστολή...', 'delete_account.success_title': 'Η αίτησή σας ελήφθη', 'delete_account.success_body': 'Θα επεξεργαστούμε την αίτησή σας εντός 30 ημερών και θα σας ειδοποιήσουμε μέσω email.', 'delete_account.login_required': 'Πρέπει να συνδεθείτε για να υποβάλετε αίτηση διαγραφής.', 'delete_account.login_btn': 'Σύνδεση', // App download section 'app.download_title': 'Κατεβάστε την εφαρμογή CanHelp', 'app.download_desc': 'Όλο το CanHelp — πάντα μαζί σας. Διαθέσιμο για Android και iOS.', // Nav 'nav.pricing': 'Τιμές', // Pricing page 'pricing.title': 'Τιμολόγηση', 'pricing.subtitle': 'Επιλέξτε το κατάλληλο πρόγραμμα', 'pricing.role.customer': 'Πελάτης', 'pricing.role.specialist': 'Ειδικός', 'pricing.free': 'Δωρεάν', 'pricing.per_month': 'μήνα', 'pricing.duration': 'Διάρκεια', 'pricing.days': 'ημ.', 'pricing.current_plan': 'Το πρόγραμμά σας', 'pricing.popular': 'Δημοφιλές', 'pricing.choose': 'Επιλογή', 'pricing.your_plan': 'Ενεργό πρόγραμμα', 'pricing.free_default': 'Προεπιλογή', 'pricing.compare': 'Σύγκριση λειτουργιών', 'pricing.feature': 'Λειτουργία', 'pricing.faq_note': 'Η πληρωμή γίνεται από το υπόλοιπο CanHelp. Ανατροφοδότηση διαθέσιμη στην Πληρωμή.', 'pricing.feat.messages': 'Μηνύματα / ημέρα', 'pricing.feat.orders': 'Παραγγελίες / ημέρα', 'pricing.feat.contact_all': 'Επικοινωνία με όλους', 'pricing.feat.view_phone': 'Εμφάνιση τηλεφώνου', 'pricing.feat.show_contact': 'Εμφάνιση στοιχείων επαφής', 'pricing.feat.favorites': 'Αγαπημένα', 'pricing.feat.verified_badge': 'Επαληθευμένο badge', 'pricing.feat.google_calendar': 'Google Calendar', 'pricing.feat.personal_site': 'Προσωπικό site', 'pricing.feat.auto_response': 'Αυτόματη απάντηση', 'pricing.feat.auto_match': 'Αυτόματη αντιστοίχιση', 'pricing.feat.highlighted_reviews': 'Επισημασμένες αξιολογήσεις', 'pricing.feat.portfolio': 'Στοιχεία προσφοράς', 'pricing.feat.cards': 'Αριθμός προσφορών', 'pricing.feat.notify_tasks': 'Ειδοποιήσεις νέων εργασιών', 'pricing.feat.video': 'Βίντεο στην προσφορά', // Upgrade prompt 'upgrade.available_in': 'Διαθέσιμο στο', 'upgrade.cta': 'Αναβάθμιση', // Dashboard plan block 'dashboard.plan.title': 'Το πρόγραμμά μου', 'dashboard.plan.expires': 'Λήγει σε {n} ημέρες', 'dashboard.plan.upgrade': 'Αναβάθμιση προγράμματος', 'dashboard.plan.no_plan': 'Δωρεάν πρόγραμμα', 'dashboard.plan.messages': 'Μηνύματα σήμερα', 'dashboard.plan.orders': 'Παραγγελίες σήμερα', 'dashboard.plan.limits': 'Ημερήσια όρια', 'dashboard.plan.features': 'Λειτουργίες', 'dashboard.plan.stats': 'Στατιστικά', 'dashboard.stats.cards': 'Χαρτοφυλάκια', 'dashboard.stats.maxCards': 'Μέγ. χαρτοφυλάκια', 'dashboard.stats.portfolioItems': 'Στοιχεία portfolio', 'dashboard.stats.maxPortfolioItems': 'Μέγ. στοιχεία', 'dashboard.stats.activeOffers': 'Ενεργές προσφορές', 'dashboard.stats.reviewsReceived': 'Αξιολογήσεις', 'dashboard.stats.activeTasks': 'Ενεργές εργασίες', 'dashboard.stats.completedTasks': 'Ολοκληρωμένες', 'status.can_help_now': 'Είμαι διαθέσιμος τώρα', 'status.need_help': 'Χρειάζομαι βοήθεια', 'status.active': 'Ενεργό', 'status.toggle_on': 'Ενεργοποίηση', 'status.toggle_off': 'Απενεργοποίηση', // FOMO 'fomo.missed_orders': 'Χάσατε {n} παραγγελίες', 'fomo.missed_value': 'Αξία €{v}', 'fomo.upgrade_hint': 'Αναβαθμίστε για να λαμβάνετε περισσότερες παραγγελίες', 'fomo.conversion': 'Μετατροπές εργασιών', 'fomo.active': 'Ενεργές', 'fomo.with_offers': 'Με προσφορές', 'fomo.completed': 'Ολοκληρωμένες', 'fomo.already_offered': '{n} ειδικοί έχουν ήδη απαντήσει', 'fomo.specialist_missed': 'Χάσατε {n} παραγγελίες', 'fomo.top_categories': 'Κατηγορίες', 'fomo.offers_received': 'προσφορές ελήφθησαν', 'fomo.avg_offers': 'Μέσο {n}/εργασία', 'fomo.completion_rate': 'ολοκληρωμένες', // Task auto-match 'task.auto_match': 'Αυτόματη αντιστοίχιση', 'task.auto_match_results': 'Κορυφαίοι ειδικοί', 'task.no_offer_yet': 'Δεν έχετε στείλει προσφορά ακόμα', 'task.make_offer': 'Αποστολή προσφοράς', 'auto_response.title': 'Αυτόματη Απάντηση', 'auto_response.enabled': 'Ενεργοποίηση αυτόματης απάντησης', 'auto_response.min_budget': 'Ελάχ. προϋπολογισμός', 'auto_response.max_budget': 'Μέγ. προϋπολογισμός', 'auto_response.default_price': 'Προεπιλεγμένη τιμή', 'auto_response.default_message': 'Προεπιλεγμένο μήνυμα', 'auto_response.max_per_day': 'Μέγ. αυτόματες προσφορές/ημέρα', 'auto_response.save': 'Αποθήκευση', 'auto_response.saved': 'Αποθηκεύτηκε', 'auto_response.categories': 'Κατηγορίες', 'auto_response.locations': 'Τοποθεσίες', // Personal site 'profile.personal_site': 'Προσωπικό Site', 'profile.site_slug': 'Slug URL', 'profile.site_slug_hint': 'Μόνο λατινικοί χαρακτήρες, αριθμοί, - και _', 'profile.site_open': 'Άνοιγμα site', 'profile.site_preview': 'Το site σας', 'profile.show_contact': 'Εμφάνιση στοιχείων επαφής', 'profile.show_contact_hint': 'Πελάτες με Pro/Ultimate πρόγραμμα θα βλέπουν το τηλέφωνό σας', // Google Calendar plan gate 'gcal.upgrade_required': 'Το Google Calendar απαιτεί Pro ή Ultimate πρόγραμμα', // Chat limits 'chat.limit_warning': 'Απομένουν {n} μηνύματα σήμερα', 'chat.limit_reached': 'Εξαντλήθηκαν τα μηνύματα. Αναβαθμίστε το πρόγραμμά σας', 'chat.upgrade': 'Αναβάθμιση', // Site page 'site.member_since': 'Μαζί μας από', 'site.rating': 'Βαθμολογία', 'site.completed_tasks': 'Ολοκληρώθηκαν', 'site.languages': 'Γλώσσες', 'site.photos': 'φωτ.', 'site.contact_form': 'Επικοινωνία', 'site.contact_sent': 'Το μήνυμα στάλθηκε!', 'site.contact_sent_desc': 'Ο ειδικός θα επικοινωνήσει μαζί σας σύντομα', 'site.contact_name': 'Όνομα', 'site.contact_name_ph': 'Το όνομά σας', 'site.contact_email_ph': 'your@email.com', 'site.contact_message': 'Μήνυμα', 'site.contact_message_ph': 'Περιγράψτε την εργασία σας...', 'site.contact_send': 'Αποστολή', 'site.share': 'Κοινοποίηση', 'site.speaks_languages': 'Μιλάει', 'site.message_sent': 'Το μήνυμα εστάλη!', 'site.message_sent_desc': 'Ο ειδικός θα το λάβει στη συνομιλία', 'site.message_placeholder': 'Γράψτε το μήνυμά σας...', 'site.write_to_chat': 'Γράψτε στο chat', 'site.auth_required_title': 'Απαιτείται σύνδεση', 'site.auth_required_desc': 'Για να γράψετε στο chat, χρειάζεται να συνδεθείτε στο λογαριασμό σας.', 'site.auth_login_btn': 'Σύνδεση', 'site.auth_contact_form_btn': 'Επικοινωνία μέσω φόρμας', 'specialist.services': 'Υπηρεσίες', 'portfolio.title': 'Χαρτοφυλάκιο', 'common.not_found': 'Η σελίδα δεν βρέθηκε', 'common.anonymous': 'Ανώνυμα', 'specialist_setup.page_title': 'Ρύθμιση προφίλ ειδικού', 'specialist_setup.step_of': 'Βήμα {current} από {total}', 'specialist_setup.next': 'Επόμενο', 'specialist_setup.back': 'Πίσω', 'specialist_setup.skip': 'Παράλειψη', 'specialist_setup.finish': 'Ολοκλήρωση', 'specialist_setup.go_to_profile': 'Μεταβείτε στο προφίλ', 'specialist_setup.browse_tasks': 'Εξερεύνηση εργασιών', 'specialist_setup.step1.title': 'Καλωσήλθατε!', 'specialist_setup.step1.subtitle': 'Ας ρυθμίσουμε το προφίλ σας', 'specialist_setup.step1.desc': 'Ένα πλήρες προφίλ σας βοηθά να βρείτε περισσότερους πελάτες. Ακολουθήστε τα βήματα για να δημιουργήσετε το τέλειο προφίλ ειδικού.', 'specialist_setup.step1.what_next': 'Τι θα κάνουμε:', 'specialist_setup.step1.item1': 'Συμπλήρωση βασικών πληροφοριών', 'specialist_setup.step1.item2': 'Δημιουργία κάρτας υπηρεσίας', 'specialist_setup.step1.item3': 'Προσθήκη δεξιοτήτων και κατηγοριών', 'specialist_setup.step1.item4': 'Επιλογή γεωγραφικής περιοχής', 'specialist_setup.step1.item5': 'Μεταφόρτωση φωτογραφιών χαρτοφυλακίου', 'specialist_setup.step2.title': 'Βασικό προφίλ', 'specialist_setup.step2.subtitle': 'Πείτε μας για σας', 'specialist_setup.step2.bio_label': 'Σχετικά με εμένα', 'specialist_setup.step2.bio_placeholder': 'Περιγράψτε την εμπειρία σας, τις υπηρεσίες που προσφέρετε...', 'specialist_setup.step2.phone_label': 'Τηλέφωνο', 'specialist_setup.step2.phone_placeholder': '+30 6900000000', 'specialist_setup.step2.photo_label': 'Φωτογραφία προφίλ', 'specialist_setup.step2.photo_btn': 'Μεταφόρτωση φωτογραφίας', 'specialist_setup.step2.photo_uploading': 'Μεταφόρτωση...', 'specialist_setup.step2.photo_hint': 'Εμφανίζεται στο προφίλ σας', 'specialist_setup.step3.title': 'Κάρτα υπηρεσίας', 'specialist_setup.step3.subtitle': 'Δημιουργήστε την πρώτη σας κάρτα υπηρεσίας', 'specialist_setup.step3.title_label': 'Τίτλος κάρτας', 'specialist_setup.step3.title_placeholder': 'Π.χ. Υδραυλικός, Ηλεκτρολόγος, Καθαρισμός...', 'specialist_setup.step3.desc_label': 'Περιγραφή', 'specialist_setup.step3.desc_placeholder': 'Περιγράψτε λεπτομερώς τι προσφέρετε, εμπειρία, πλεονεκτήματα...', 'specialist_setup.step3.title_required': 'Απαιτείται τίτλος', 'specialist_setup.step4.title': 'Δεξιότητες & Κατηγορίες', 'specialist_setup.step4.subtitle': 'Προσθέστε δεξιότητες και επιλέξτε κατηγορίες', 'specialist_setup.step4.skills_label': 'Δεξιότητες', 'specialist_setup.step4.skills_placeholder': 'Π.χ. Εγκατάσταση σωληνώσεων...', 'specialist_setup.step4.skills_add': 'Προσθήκη', 'specialist_setup.step4.categories_label': 'Κατηγορίες', 'specialist_setup.step5.title': 'Γεωγραφική περιοχή', 'specialist_setup.step5.subtitle': 'Πού παρέχετε υπηρεσίες;', 'specialist_setup.step5.hint': 'Επιλέξτε πόλεις ή συγκεκριμένες περιοχές', 'specialist_setup.done.title': 'Το προφίλ σας είναι έτοιμο!', 'specialist_setup.done.subtitle': 'Συγχαρητήρια! Το προφίλ σας έχει ρυθμιστεί', 'specialist_setup.done.desc': 'Τώρα μπορείτε να λαμβάνετε παραγγελίες από πελάτες. Αναζητήστε εργασίες που ταιριάζουν με τις δεξιότητές σας.', // Support 'support.title': 'Υποστήριξη', 'support.type.label': 'Τύπος αιτήματος', 'support.type.bug': 'Σφάλμα', 'support.type.suggestion': 'Πρόταση', 'support.type.other': 'Άλλο', 'support.subject': 'Θέμα', 'support.subject.placeholder': 'Σύντομη περιγραφή...', 'support.body': 'Μήνυμα', 'support.body.placeholder': 'Περιγράψτε λεπτομερώς το πρόβλημα ή την πρότασή σας...', 'support.submit': 'Αποστολή', 'support.cancel': 'Ακύρωση', 'support.error': 'Σφάλμα αποστολής. Παρακαλώ δοκιμάστε ξανά.', 'support.sent.title': 'Λάβαμε το αίτημά σας!', 'support.sent.body': 'Θα σας απαντήσουμε στο email σας το συντομότερο δυνατόν.', 'support.sent.close': 'Κλείσιμο', 'admin.tab.support': 'Υποστήριξη', 'admin.tab.backup': 'Αντίγραφα ασφαλείας', 'admin.tab.translations': 'Μεταφράσεις', 'admin.tab.dbcheck': 'Έλεγχος ΒΔ', 'admin.tab.balances': 'Υπόλοιπα', 'admin.tab.push': 'Push', 'admin.tab.referrals': 'Παραπομπές', 'admin.search': 'Αναζήτηση', 'admin.noData': 'Δεν υπάρχουν δεδομένα', 'admin.cat.order': 'Σειρά', 'admin.cat.skills': 'Δεξιότητες', 'admin.plans.form.max_tasks': 'Μέγιστες εργασίες', 'admin.settings.referral.shared_section': 'Κοινές ρυθμίσεις referral', 'admin.settings.seo.title': 'Ρυθμίσεις SEO', 'admin.backup.title': 'Αντίγραφα ασφαλείας', 'admin.backup.tables': 'Πίνακες', 'admin.backup.exportAll': 'Εξαγωγή όλων', 'admin.backup.importAll': 'Εισαγωγή όλων', 'admin.backup.exportTable': 'Εξαγωγή πίνακα', 'admin.backup.importTable': 'Εισαγωγή πίνακα', 'admin.backup.exporting': 'Εξαγωγή...', 'admin.backup.importing': 'Εισαγωγή...', 'admin.backup.exportSuccess': 'Η εξαγωγή ολοκληρώθηκε', 'admin.backup.importSuccess': 'Η εισαγωγή ολοκληρώθηκε', 'admin.backup.autoBackup': 'Αυτόματο backup', 'admin.backup.autoBackupDesc': 'Καθημερινό αυτόματο backup', 'admin.backup.storedBackups': 'Αποθηκευμένα backups', 'admin.backup.noStoredBackups': 'Δεν υπάρχουν αποθηκευμένα backups', 'admin.backup.restore': 'Επαναφορά', 'admin.backup.restoreConfirm': 'Επαναφορά από backup;', 'admin.backup.restoreSuccess': 'Η επαναφορά ολοκληρώθηκε', 'admin.backup.restoring': 'Επαναφορά...', 'admin.backup.date': 'Ημερομηνία', 'admin.backup.size': 'Μέγεθος', 'admin.backup.today': 'Σήμερα', 'admin.backup.yesterday': 'Χθες', 'admin.balance.col.operation': 'Ενέργεια', 'admin.balance.col.amount': 'Ποσό', 'admin.balance.col.result': 'Υπόλοιπο', 'admin.balance.col.description': 'Περιγραφή', 'admin.balance.col.date': 'Ημερομηνία', 'admin.balance.empty': 'Δεν υπάρχουν εγγραφές', 'admin.balance.filter.all': 'Όλες οι ενέργειες', 'admin.balance.filter.user_id': 'Φίλτρο ανά userId', 'admin.balance.kind.topup': 'Αναπλήρωση', 'admin.balance.kind.plan_purchase': 'Χρέωση πλάνου', 'admin.balance.kind.admin_topup': 'Αναπλήρωση από διαχειριστή', 'admin.balance.kind.admin_adjustment': 'Διόρθωση', 'admin.support.search': 'Αναζήτηση', 'admin.support.all_statuses': 'Όλες οι καταστάσεις', 'admin.support.all_types': 'Όλοι οι τύποι', 'admin.support.none': 'Δεν υπάρχουν αιτήματα', 'admin.support.reply': 'Απάντηση', 'admin.support.reply_placeholder': 'Πληκτρολογήστε απάντηση...', 'admin.support.send_reply': 'Αποστολή απάντησης', 'admin.support.cancel': 'Ακύρωση', 'admin.support.close': 'Κλείσιμο', 'admin.support.status.open': 'Ανοιχτό', 'admin.support.status.in_progress': 'Σε εξέλιξη', 'admin.support.status.resolved': 'Επιλύθηκε', 'admin.support.status.closed': 'Κλειστό', 'admin.support.your_reply': 'Η απάντησή σας', 'admin.user_edit.visibility_requirements.title': 'Το προφίλ δεν εμφανίζεται ακόμη στις Προσφορές', 'admin.user_edit.visibility_requirements.hint': 'Απαιτήσεις ορατότητας:', 'admin.user_edit.visibility_requirements.bio': 'Συμπληρώστε το βιογραφικό', 'admin.user_edit.visibility_requirements.published_card': 'Δημοσιεύστε τουλάχιστον μία κάρτα', 'admin.user_edit.visibility_requirements.categories': 'Προσθέστε κατηγορία σε δημοσιευμένη κάρτα', 'admin.user_edit.visibility_requirements.locations': 'Προσθέστε τοποθεσία σε δημοσιευμένη κάρτα', 'auto_response.desc': 'Αυτόματη απάντηση σε κατάλληλες εργασίες', 'auto_response.budget_range': 'Προϋπολογισμός εργασίας', 'auto_response.message_placeholder': 'Γεια σας! Μπορώ να βοηθήσω με αυτήν την εργασία...', 'profile.background.title': 'Φόντο κεφαλίδας προφίλ', 'profile.background.hint': 'Εμφανίζεται στην κεφαλίδα του δημόσιου προφίλ σε web και mobile.', 'profile.photo.uploading': 'Μεταφόρτωση...', 'profile.balance.history': 'Ιστορικό ενεργειών', 'profile.balance.history.last': 'Τελευταίες ενέργειες', 'profile.balance.history.empty': 'Δεν υπάρχουν ενέργειες', 'profile.balance.history.balance_after': 'Υπόλοιπο μετά', 'profile.balance.history.kind.topup': 'Αναπλήρωση υπολοίπου', 'profile.balance.history.kind.plan_purchase': 'Χρέωση πλάνου', 'profile.balance.history.kind.admin_topup': 'Αναπλήρωση από διαχειριστή', 'profile.balance.history.kind.admin_adjustment': 'Διόρθωση από διαχειριστή', 'profile.plan_history.title': 'Ιστορικό πλάνου', 'profile.plan_history.empty': 'Το ιστορικό πλάνου είναι άδειο', 'profile.plan_history.expires': 'Έως', 'profile.plan_history.days': 'ημέρες', 'profile.plan_history.event.activated': 'Ενεργοποιήθηκε', 'profile.plan_history.event.renewed': 'Ανανεώθηκε', 'profile.plan_history.event.downgraded': 'Υποβαθμίστηκε', 'profile.plan_history.event.referral_reward': 'Ανταμοιβή referral', 'profile.plan_history.event.admin_change': 'Αλλαγή από διαχειριστή', 'profile.plan_history.event.expired': 'Έληξε', 'profile.show_contact_desc': 'Επιτρέπει στους πελάτες να επικοινωνούν απευθείας', 'profile.site.visible.price_list': 'Τιμοκατάλογος', 'site.pricelist': 'Τιμοκατάλογος', 'status.plan_required': 'Η κατάσταση δεν είναι διαθέσιμη στο τρέχον πλάνο', 'status.admin_not_applicable': 'Η κατάσταση χρήστη δεν ισχύει για διαχειριστές' }, en: { 'footer.slogan': 'Your task — our care! We solve any issue quickly and easily.', 'footer.links': 'Links', 'footer.socials': 'Socials', 'nav.home': 'Home', 'nav.tasks': 'Tasks', 'nav.post': '+ Post task', 'nav.dashboard': 'My Tasks', 'nav.chat': 'Messages', 'nav.notifications': 'Notifications', 'nav.profile': 'Profile', 'nav.admin': 'Admin Panel', 'nav.specialists': 'Offers', 'nav.new_task': 'New task', 'nav.login': 'Login', 'nav.register': 'Register', 'nav.logout': 'Logout', 'hero.title': 'Everyone has something valuable to offer', 'hero.subtitle': 'Find help, offer your skills, or earn money helping others', 'hero.cta.post': 'Find help', 'hero.cta.browse': 'Offer your help', 'hero.cta.specialists': 'Find a job', 'hero.search.placeholder': 'What do you need? e.g. electrician, cleaning...', 'hero.specialist.title': 'Find tasks near you', 'hero.specialist.subtitle': 'Discover tasks in your categories and send your offer', 'hero.specialist.cta': 'Browse tasks', 'hero.specialist.search.placeholder': 'Search tasks... e.g. electrical, cleaning', 'section.categories.specialist': 'Find tasks by category', 'section.cities.specialist': 'Tasks by city', 'how.specialist.step1.title': 'Create a specialist card', 'how.specialist.step1.desc': 'Set your categories, skills and areas — the system finds tasks automatically', 'how.specialist.step2.title': 'Find relevant tasks', 'how.specialist.step2.desc': 'Discover tasks in your categories and get started right away', 'how.specialist.step3.title': 'Send an offer & earn', 'how.specialist.step3.desc': 'Submit an offer with price and timeline, communicate with clients and complete tasks', 'stats.specialists': 'offers', 'stats.tasks': 'tasks', 'stats.categories': 'categories', 'stats.free': 'free sign-up', 'promo.title': 'Get Pro for free — until end of year', 'promo.subtitle': 'Sign up now and enjoy the Pro plan at no cost. Offer ends December 31.', 'promo.cta': 'Sign up free', 'promo.days': 'days', 'promo.hours': 'hrs', 'promo.minutes': 'min', 'promo.seconds': 'sec', 'section.categories': 'Create a task in any category', 'section.how': 'How it works', 'section.recent': 'Recent tasks', 'section.all': 'See all →', 'section.more': 'more', 'section.cities': 'Cities & Districts', 'section.community': 'A community project for everyone', 'community.subtitle': 'CanHelp is not just a marketplace — it\'s a community of mutual help. Anyone with knowledge or a skill can find a client. Anyone with a problem can find a specialist.', 'community.point1.title': 'Are you good at something?', 'community.point1.desc': 'Repairs, tutoring, design, translation, care — every skill has value. Create a profile and find clients near you.', 'community.point2.title': 'Need help with something?', 'community.point2.desc': 'Post a task in under a minute and receive offers from verified specialists in your city.', 'community.point3.title': 'Help the project grow', 'community.point3.desc': 'CanHelp grows through communities. Share the link with friends and acquaintances — together we build something useful for everyone.', 'community.share': 'Share with friends', 'community.share.copied': 'Link copied!', // Referral section on home page 'section.referral': 'Referral Program', 'referral.home.subtitle': 'Share your link — every new user who signs up through it earns you a reward.', 'referral.home.step1.title': 'Sign up and get your link', 'referral.home.step1.desc': 'Create an account and find your unique referral link in your profile.', 'referral.home.step2.title': 'Share with friends', 'referral.home.step2.desc': 'Send the link to friends, acquaintances, or post it on social media.', 'referral.home.step3.title': 'Earn rewards', 'referral.home.step3.desc': 'Once your friend verifies their email, you automatically receive your reward.', 'referral.home.cta': 'Get your link', 'referral.home.badge': 'Referral Program', // FAQ section 'section.faq': 'Frequently Asked Questions', 'faq.q1': 'How does CanHelp work?', 'faq.a1': 'Post a task, receive offers from specialists, choose the best one and start working together. It\'s fast, simple and free for customers.', 'faq.q2': 'How much does it cost to use the platform?', 'faq.a2': 'Registration and task posting is completely free for customers. Specialists have access to a free plan as well as premium options.', 'faq.q3': 'How can I become a specialist?', 'faq.a3': 'Register, go to «Become a Specialist», fill in your profile with skills and categories, and start receiving tasks.', 'faq.q4': 'How do I choose the right specialist?', 'faq.a4': 'Check their reviews, experience, skills and portfolio. Chat with them through the platform and discuss the details before deciding.', 'faq.q5': 'What if I am not satisfied?', 'faq.a5': 'You can leave a review about the specialist and rate them from 1 to 5 stars. Reviews help other users find trusted professionals.', 'faq.q6': 'Can I contact a specialist before accepting their offer?', 'faq.a6': 'Yes. Once you receive an offer, you can open a chat with the specialist, ask questions and discuss all the details before making a decision.', 'faq.q7': 'How long does it take to receive offers?', 'faq.a7': 'Usually within a few hours. Specialists get notified about new tasks and can respond quickly.', 'faq.q8': 'Can I post a task in any city in Greece?', 'faq.a8': 'Yes! CanHelp covers all of Greece — Athens, Thessaloniki, Patras and more.', 'faq.q9': 'What types of tasks can I find on CanHelp?', 'faq.a9': 'Repairs, cleaning, electricians, tutoring, design, IT, moving, beauty and much more. Categories are constantly expanding.', 'faq.q10': 'Is there a mobile app?', 'faq.a10': 'Yes! CanHelp is available for Android and iOS. Download the app and manage everything from your phone.', 'how.step1.title': 'Post a task', 'how.step1.desc': 'Describe what you need and set your budget', 'how.step2.title': 'Receive offers', 'how.step2.desc': 'Specialists will send you offers with price and timeline', 'how.step3.title': 'Choose & start', 'how.step3.desc': 'Pick the best professional and start the collaboration', 'tasks.title': 'tasks', 'tasks.filters': 'Filters', 'tasks.search': 'Search', 'tasks.search.placeholder': 'Title or keyword...', 'tasks.search.btn': 'Search', 'tasks.publish': 'Post', 'tasks.category.all': 'All', 'tasks.category.all_in': 'All in', 'tasks.category.label': 'Category', 'tasks.location.label': 'City', 'tasks.location.placeholder': 'e.g. Athens', 'tasks.empty': 'No tasks found', 'tasks.empty.cta': 'Post the first one', 'task.status.open': 'Open', 'task.status.in_progress': 'In progress', 'task.status.completed': 'Completed', 'task.status.cancelled': 'Cancelled', 'task.status.draft': 'Draft', 'task.budget': 'Budget', 'task.location': 'Location', 'task.deadline': 'Start date', 'task.expires_at': 'Active until', 'task.created_at': 'Created', 'task.customer': 'Customer', 'task.offer.btn': 'Submit offer', 'task.invite.banner_title': "You've been invited to this task", 'task.invite.banner_hint': 'The customer personally invited you', 'task.invite.accept': 'Send offer', 'task.invite.decline': 'Decline', 'offer.accept': 'Accept', 'offer.decline': 'Decline', 'task.complete': 'Complete task', 'task.complete.confirm': 'Mark this task as complete?', 'task.edit': 'Edit', 'task.status_label': 'Status', 'task.yours': 'Your task', 'task.offer.yours': 'Your offer', 'review.leave': 'Leave a review', 'review.rating': 'Rating', 'review.comment': 'Comment', 'review.comment.placeholder': 'Tell us about your experience...', 'review.submit': 'Submit review', 'review.submitting': 'Submitting...', 'review.done': 'Review submitted!', 'profile.reviews': 'Reviews', 'profile.no_reviews': 'No reviews yet', 'profile.rating': 'Rating', 'profile.skills.label': 'Skills', 'profile.member_since': 'Member since', 'task.offers': 'Offers', 'task.offers.none': 'No offers yet', 'create.title': 'Post a task', 'create.field.title': 'Title', 'create.field.description': 'Description', 'create.field.category': 'Category', 'create.field.category.select': 'Select...', 'create.field.location': 'Location', 'create.field.location.any': 'Anywhere', 'create.field.location.all': 'Entire city', 'create.field.budget': 'Budget (€)', 'create.field.deadline': 'Start date', 'create.field.expires_at': 'Listing active for', 'create.field.expires_at.days': '{n} days', 'create.field.budget_negotiable': 'Price is negotiable', 'create.field.time_slot': 'Time slot', 'create.field.time_slot.any': 'Anytime', 'create.field.time_slot.morning': 'Morning (08:00–13:00)', 'create.field.time_slot.afternoon': 'Afternoon (13:00–18:00)', 'create.field.time_slot.evening': 'Evening (18:00–22:00)', 'create.field.time_slot.weekend': 'Weekend', 'create.field.address': 'Address (optional)', 'create.field.address.district': 'District', 'create.field.address.street': 'Street', 'create.field.address.house': 'Number', 'create.field.confidential': 'Confidential note', 'create.field.confidential.placeholder': 'Details visible only to the assigned specialist...', 'create.field.confidential.hint': 'Not shown publicly', 'create.field.photos': 'Photos', 'create.field.photos.add': 'Add photo', 'create.field.photos.uploading': 'Uploading...', 'task.budget_negotiable': 'Price negotiable', 'task.time_slot': 'Time slot', 'task.confidential': 'Confidential note', 'create.field.title.placeholder': 'e.g. Clean 80sqm apartment', 'create.field.description.placeholder': 'Describe in detail what you need...', 'create.field.location.placeholder': 'e.g. Athens, Kolonaki', 'create.field.budget.placeholder': 'e.g. 100', 'create.submit': 'Post task', 'create.submitting': 'Posting...', 'login.title': 'Welcome back', 'login.subtitle': 'Sign in to CanHelp', 'login.email': 'Email', 'login.password': 'Password', 'login.submit': 'Sign in', 'login.submitting': 'Signing in...', 'login.error': 'Invalid email or password', 'login.unverified.title': 'Verify your email address', 'login.unverified.desc': 'We sent a verification link to your email. Check your inbox (or spam) and click the link.', 'login.unverified.resend': 'Resend verification email', 'login.unverified.sending': 'Sending...', 'login.unverified.sent': '✓ Sent — check your inbox', 'profile.email.verified': 'Email verified', 'profile.email.not_verified': 'Email not verified', 'login.no_account': "Don't have an account?", 'login.register_link': 'Register', 'login.forgot_password': 'Forgot password?', 'login.or_continue_with': 'or continue with', 'login.continue_google': 'Continue with Google', 'forgot.title': 'Forgot password', 'forgot.subtitle': 'Enter your email to receive a reset link', 'forgot.email': 'Email', 'forgot.submit': 'Send reset link', 'forgot.submitting': 'Sending...', 'forgot.sent.title': 'Check your inbox', 'forgot.sent.desc': 'If an account exists with that email, we\'ll send you a password reset link.', 'forgot.back_to_login': 'Back to sign in', 'forgot.error': 'Could not send reset link. Check the email address and try again.', 'forgot.error.not_found': 'No account found with this email address.', 'forgot.error.send_failed': 'Failed to send email. Please try again later.', 'reset.title': 'New password', 'reset.subtitle': 'Enter your new password', 'reset.password': 'New password', 'reset.confirm': 'Confirm password', 'reset.submit': 'Change password', 'reset.submitting': 'Saving...', 'reset.success': 'Password changed successfully. Redirecting to sign in...', 'reset.back_to_login': 'Back to sign in', 'reset.error.mismatch': 'Passwords do not match', 'reset.error.invalid': 'Invalid or expired link. Please request a new one.', 'register.title': 'Register', 'register.subtitle': 'Create a CanHelp account', 'register.first_name': 'First name', 'register.last_name': 'Last name', 'register.email': 'Email', 'register.password': 'Password (min 8 characters)', 'register.role': 'Role', 'register.role.customer': 'User', 'register.role.customer.desc': 'I post tasks', 'register.role.specialist': 'Specialist', 'register.role.specialist.desc': 'I take on tasks', 'register.submit': 'Create account', 'register.submitting': 'Registering...', 'register.has_account': 'Already have an account?', 'register.login_link': 'Sign in', 'register.continue_google': 'Continue with Google', 'register.check_email.title': 'Check your email', 'register.check_email.desc': 'We sent a verification link to your email address. Check your inbox (or spam) and click the link.', 'register.check_email.login': 'Back to sign in', 'register.captcha_failed': 'CAPTCHA verification failed. Please complete the security check and try again.', 'dashboard.title': 'Dashboard', 'dashboard.new_task': '+ New task', 'dashboard.onboarding.title': 'Welcome to CanHelp 👋', 'dashboard.onboarding.subtitle': 'Choose how you want to get started.', 'dashboard.onboarding.helper.title': 'Offer your help', 'dashboard.onboarding.helper.desc': 'Complete your profile — skills, categories and areas. It takes a couple of minutes and you start receiving orders.', 'dashboard.onboarding.helper.cta': 'Complete your profile', 'dashboard.onboarding.requester.title': 'Need help?', 'dashboard.onboarding.requester.desc': 'Post a task and helpers will send you their offers.', 'dashboard.onboarding.requester.cta': 'Post a task', 'dashboard.my_tasks': 'My tasks', 'dashboard.my_offers': 'My offers', 'dashboard.invitations': 'Job invitations', 'dashboard.offers_count': 'offers', 'dashboard.declined_count': 'declined', 'dashboard.completed_tasks': 'Completed tasks', 'dashboard.completed_offers': 'Completed offers', 'dashboard.review_pending': 'Review not yet submitted', 'tasks.new.top_specialists': 'Top specialists', 'tasks.new.select_category': 'Select a category to see matching specialists', 'tasks.new.invite': 'Offer work', 'tasks.new.invited': 'Selected ✓', 'reviews.count': 'reviews', 'filter.location': 'Location', 'filter.language': 'Languages', 'filter.language.any': 'Any language', 'filter.category.all': 'All categories', 'user.categories': 'Categories', 'user.work_area': 'Work area', 'user.specialist_cards': 'Service cards', 'card.skills': 'Skills', 'card.categories': 'Categories', 'card.geography': 'Work area', 'card.portfolio': 'Portfolio', 'card.close': 'Close', 'dashboard.tasks.empty': "You haven't posted any tasks", 'dashboard.tasks.empty.cta': 'Post your first one', 'dashboard.tasks.add_new': 'Add a new task', 'dashboard.offers.empty': "You haven't submitted any offers", 'dashboard.offers.empty.cta': 'Find tasks', 'dashboard.customer.specialists_title': 'Looking for a specialist?', 'dashboard.customer.specialists_hint': 'Browse specialist profiles, read reviews and invite them to your tasks', 'dashboard.customer.specialists_cta': 'Find a specialist', 'dashboard.customer.how_title': 'How it works', 'dashboard.customer.step1': 'Create a task with a description and budget', 'dashboard.customer.step2': 'Specialists will send offers with price and timeline', 'dashboard.customer.step3': 'Choose the right one and start working', 'notif.title': 'Notifications', 'notif.mark_all': 'Mark all as read', 'notif.empty': 'No notifications', 'notif.type.generic': 'Notification', 'notif.type.new_offer': 'New offer', 'notif.type.offer_accepted': 'Your offer was accepted', 'notif.type.offer_declined': 'Your offer was declined', 'notif.type.task_completed': 'Task completed', 'notif.type.task_cancelled': 'Task cancelled', 'notif.type.new_message': 'New message', 'notif.type.new_review': 'New review', 'notif.type.task_invite': 'Job invitation', 'notif.type.referral_reward': 'Referral reward', 'notif.type.specialist_card_submitted': 'Card submitted for review', 'notif.type.specialist_card_approved': 'Card approved', 'notif.type.specialist_card_rejected': 'Card rejected', 'notif.body.new_offer': 'New offer for «{title}»', 'notif.body.offer_accepted': 'Your offer for «{title}» was accepted', 'notif.body.offer_declined': 'Your offer for «{title}» was declined', 'notif.body.task_invite': 'You\'ve been invited for «{title}»', 'notif.body.new_review': 'You received a {rating}★ review', 'notif.body.referral_reward': '{days} days of «{plan}» plan access have been added to your account!', 'notif.body.specialist_card_submitted': 'The card «{title}» was sent for review', 'notif.body.specialist_card_approved': 'The card «{title}» was approved and published', 'notif.body.specialist_card_rejected': 'The card «{title}» was not approved. You can fix it and submit again.', 'offer.status.pending': 'Pending', 'offer.status.accepted': 'Accepted', 'offer.status.declined': 'Declined', 'offer.status.withdrawn': 'Withdrawn', 'offer.status.other_accepted': 'Another specialist was chosen', 'common.loading': 'Loading...', 'common.error': 'Error', 'common.save': 'Save', 'common.saving': 'Saving...', 'common.cancel': 'Cancel', 'common.add': 'Add', 'common.close': 'Close', 'common.edit': 'Edit', 'common.delete': 'Delete', 'common.from': 'by', 'common.currency': '€', 'common.greece': 'Greece', // Chat 'chat.connected': 'Connected', 'chat.disconnected': 'Disconnected', 'chat.no_rooms': 'No conversations yet', 'chat.task_fallback': 'Task', 'chat.select': 'Select a conversation', 'chat.no_messages': 'No messages yet', 'chat.placeholder': 'Write a message... (Enter to send)', 'chat.conversation_fallback': 'Conversation', 'chat.direct_chat': 'Direct chat', 'chat.linked_task': 'Linked task', 'chat.write_btn': 'Message', 'chat.just_now': 'just now', 'chat.min_ago': 'm', 'chat.write_specialist': 'Write to specialist', 'chat.write_customer': 'Write to customer', 'chat.notif_settings': 'Notification settings', 'chat.notif_messages': 'Notifications for new messages', 'chat.toast_title': 'New message', 'chat.toast_open': 'Open chat', // Offer form 'offer.price': 'Price', 'offer.price.placeholder': 'e.g. 80', 'offer.customer_budget': 'Client budget', 'offer.message': 'Message', 'offer.optional': 'optional', 'offer.message.placeholder': 'Introduce yourself, your experience and why you are the best choice...', 'offer.submitting': 'Sending...', // Profile 'profile.photo': 'Profile photo', 'profile.photo.change': 'Change photo', 'profile.photo.hint': 'JPEG, PNG, WebP · up to 5MB', 'profile.basic_info': 'Basic info', 'profile.phone': 'Phone', 'profile.phone.placeholder': '+30 6901234567', 'profile.bio': 'Short bio', 'profile.bio.placeholder': 'Tell us a bit about yourself...', 'profile.language': 'Language', 'profile.language.hint': 'App interface and email notification language', 'profile.languages': 'Languages spoken', 'profile.languages.hint': 'Select all languages you speak', 'profile.skills': 'Skills', 'profile.skills.subtitle': 'Add the services you offer', 'profile.skills.placeholder': 'e.g. Cleaning, IT, Tutoring...', 'profile.role': 'Account role', 'profile.role.specialist': '🔧 Helper', 'profile.role.admin': '👑 Admin', 'profile.role.customer': '👤 User', 'profile.role.user': '👤 User', 'profile.role.change': 'To change your role please contact support.', 'profile.become_specialist': 'Offer your help', 'profile.become_specialist.desc': 'Create your helper profile, offer your skills and start receiving tasks.', 'become_specialist.hero.title': 'Offer your skills and start earning', 'become_specialist.hero.subtitle': 'Create a helper profile and receive requests from people who need help', 'become_specialist.how.title': 'How it works', 'become_specialist.step1.title': 'Create a specialist portfolio', 'become_specialist.step1.desc': 'Set your categories, skills and coverage areas — the system will automatically match you with relevant tasks', 'become_specialist.step2.title': 'Find tasks', 'become_specialist.step2.desc': 'Discover tasks in your categories in the "Find Orders" section', 'become_specialist.step3.title': 'Send an offer & earn', 'become_specialist.step3.desc': 'Submit offers with price and timeline, chat with clients and complete tasks', 'become_specialist.benefits.title': 'Specialist profile advantages', 'become_specialist.benefit1': 'Task search filtered by your categories and location', 'become_specialist.benefit2': 'Public profile with client reviews', 'become_specialist.benefit3': 'Availability schedule visible to clients', 'become_specialist.benefit4': 'Saved to favourites by clients', 'become_specialist.cta': 'Learn more', 'become_specialist.free_badge': 'Free registration', 'profile.tab.notifications': 'Notifications', 'profile.tab.reviews': 'Reviews', 'profile.tab.referral': 'Referrals', 'profile.tab.auto_response': 'Auto-response', 'profile.tab.site': 'Site', 'profile.site.title': 'Personal page', 'profile.site.url_label': 'Personal site', 'profile.site.copy': 'Copy', 'profile.site.copied': 'Copied', 'profile.site.visible_title': "What's on your page", 'profile.site.visible.name': 'Name and photo', 'profile.site.visible.bio': 'Bio', 'profile.site.visible.rating': 'Rating and reviews', 'profile.site.visible.portfolio': 'Portfolio / Cards', 'profile.site.visible.contacts': 'Contact info', 'profile.site.visible.full_last_name': 'Full last name', 'profile.site.visible.services': 'Service cards', 'profile.site.visible.reviews': 'Reviews section', 'profile.site.visible.status': '"Ready to help" status', 'profile.site.theme': 'Appearance theme', 'profile.site.theme.dark': 'Dark', 'profile.site.theme.light': 'Light', 'profile.site.slug_taken': 'This address is already taken', 'profile.site.stats.title': 'Site analytics', 'profile.site.stats.days': 'last 30 days', 'profile.site.stats.views': 'Views', 'profile.site.stats.unique': 'Unique visitors', 'profile.site.stats.messages': 'Messages', 'profile.site.stats.total_views': 'Total views', 'profile.site.stats.total_unique': 'Unique visitors', 'profile.site.stats.total_messages': 'Messages', 'profile.site.stats.empty': 'No data yet', 'profile.site.stats.loading': 'Loading analytics...', 'profile.site.stats.no_slug': 'Set your site URL to see analytics', 'profile.site.edit_bio_hint': 'Bio and photo are edited in the "Basic info" tab.', 'profile.site.seo.title': 'SEO — Page Metadata', 'profile.site.seo.hint': 'Shown in search results. Saved values are auto-translated into all languages.', 'profile.site.seo.site_title': 'Page title', 'profile.site.seo.site_title_placeholder': 'John Doe — Plumber in Athens', 'profile.site.seo.site_desc': 'Meta description', 'profile.site.seo.site_desc_placeholder': 'Brief description for search engines...', 'status.title': 'Status', 'status.can_help_now_hint': 'Your card is shown higher in search', 'status.need_help_hint': 'Specialists can offer you help', 'profile.referral.title': 'Referral program', 'profile.referral.desc': 'Share your link and earn rewards for every new user you invite.', 'profile.referral.link_label': 'Your referral link', 'profile.referral.copy': 'Copy', 'profile.referral.copied': 'Copied!', 'profile.referral.invited_count': 'successful referrals', 'profile.referral.no_code': 'Referral code is not available.', 'notifications.title': 'Notification settings', 'notifications.email.new_tasks': 'Email for new tasks', 'notifications.email.new_tasks.desc': 'Receive an email when a new task is posted in your categories', 'notifications.messages.desc': 'Receive a notification when a new message arrives', 'notifications.saved': 'Settings saved', 'notifications.plan_required': 'Not available in your plan', 'profile.tab.info': 'Basic info', 'profile.tab.finance': 'Finance', 'profile.tab.skills': 'Skills', 'profile.tab.categories': 'Categories', 'profile.tab.geography': 'Geography', 'profile.specialist.categories': 'Work categories', 'profile.specialist.categories.desc': 'Select the categories you work in', 'profile.specialist.geography': 'Coverage areas', 'profile.specialist.geography.desc': 'Select the cities / districts where you are active', 'profile.saving': 'Saving...', 'profile.upload.error': 'Error uploading photo', 'profile.saved': 'Saved', 'profile.tab.cards': 'Offers', 'profile.cards.count': 'Offers', 'profile.cards.add': 'Add offer', 'profile.cards.new_title': 'New offer title', 'profile.cards.placeholder': 'e.g. Plumbing', 'profile.cards.create': 'Create', 'profile.cards.cancel': 'Cancel', 'profile.cards.empty': 'No offers yet', 'profile.cards.empty_hint': 'Create your first card to show your services to clients.', 'profile.cards.create_first': 'Create your first offer', 'profile.cards.delete_confirm': 'Delete offer?', 'profile.background.change': 'Change background', 'profile.background.remove': 'Remove background', 'profile.listing_requirements.published_card': 'Publish at least one card', 'profile.listing_requirements.title': 'Your profile is not shown yet in offers', 'profile.listing_requirements.hint': 'To make the card visible, complete these conditions:', 'profile.listing_requirements.bio': 'Add a short bio in the main profile section', 'profile.listing_requirements.categories': 'Add at least one category to the active card', 'profile.listing_requirements.locations': 'Add at least one location to the active card', 'profile.listing_requirements.card_inactive': 'Make the card active', 'profile.listing_requirements.review_pending': 'Card is under review', 'profile.card.visibility_issue': 'Card is not shown in offers', 'profile.card.tab.main': 'General', 'profile.card.tab.skills': 'Skills', 'profile.card.tab.categories': 'Categories', 'profile.card.tab.geography': 'Geography', 'profile.card.tab.portfolio': 'Portfolio', 'profile.card.tab.pricelist': 'Price list', 'profile.card.pricelist.empty': 'No price list groups yet.', 'profile.card.pricelist.add_group': 'Add group', 'profile.card.pricelist.group_title': 'Group title', 'profile.card.pricelist.add_item': 'Add item', 'profile.card.pricelist.item_name': 'Service / work', 'profile.card.pricelist.item_desc': 'Description (optional)', 'profile.card.pricelist.item_price': 'Price', 'profile.card.pricelist.item_unit': 'Unit (e.g. /hour)', 'profile.card.pricelist.save_group': 'Save group', 'profile.card.pricelist.save_item': 'Save', 'profile.card.pricelist.delete_group': 'Delete group', 'profile.card.pricelist.delete_item': 'Delete', 'profile.card.active': 'Active', 'profile.card.review_pending': 'Pending approval', 'profile.card.review_pending_hint': 'Your card is being reviewed by the admin team.', 'profile.card.review_submitted': 'Card submitted for review', 'profile.card.review_approved': 'Card approved', 'profile.card.review_approved_hint': 'Your card is now visible in offers.', 'profile.card.review_rejected': 'Card rejected', 'profile.card.review_rejected_hint': 'Your card was not approved. Please update it and submit again.', 'profile.card.submit_review': 'Submit for review', 'profile.card.withdraw_review': 'Withdraw request', 'profile.card.unpublish': 'Unpublish', 'profile.card.save': 'Save', 'profile.card.saved': 'Saved', 'profile.card.delete': 'Delete', 'profile.card.skill.add': 'Add skill', 'profile.card.photo.add': 'Add photo', 'profile.card.photo.uploading': 'Uploading...', 'profile.card.photo.empty': 'No photos yet', 'profile.card.item.title': 'Title', 'profile.card.item.desc': 'Description', 'profile.card.item.save': 'Save', 'profile.card.item.cancel': 'Cancel', 'profile.card.item.edit': 'Edit', 'profile.card.description': 'Card description', 'profile.card.desc_auto_translate': 'Will be automatically translated into other languages on save', 'profile.card.desc_translated': 'Translations available:', 'profile.upgrade.cards_limit': 'Portfolio limit reached', 'profile.upgrade.plan': 'Current plan:', 'profile.upgrade.contact': 'Contact the administrator to change your plan', 'profile.upgrade.ok': 'Got it', 'profile.plan.title': 'Subscription plan', 'profile.balance': 'Balance', 'profile.balance.topup': 'Top Up Balance', 'profile.balance.topup.title': 'Top Up Balance', 'profile.balance.topup.amount': 'Amount (EUR)', 'profile.balance.topup.hint': 'Choose a preset or enter a custom amount', 'profile.balance.topup.submit': 'Proceed to Payment', 'profile.balance.topup.loading': 'Redirecting...', 'profile.balance.topup.error': 'Payment initiation failed. Please try again.', 'payment.success.title': 'Payment Successful!', 'payment.success.desc': 'Your balance has been updated.', 'payment.cancelled.title': 'Payment Cancelled', 'payment.cancelled.desc': 'Payment was cancelled. No charges were made.', 'payment.pending.title': 'Processing...', 'payment.pending.desc': 'Your payment is being processed.', 'payment.back_to_profile': 'Back to Profile', 'profile.plan.basic': 'Basic (free)', 'profile.plan.contact_upgrade': 'Contact admin to upgrade your plan', 'profile.plan.cards_up_to': 'Portfolio: up to', 'profile.plan.cards_unlimited': 'Portfolio: unlimited', 'profile.plan.tasks_up_to': 'Tasks: up to', 'profile.plan.offers_up_to': 'Offers: up to', 'profile.plan.valid_until': 'Valid until', 'profile.plan.no_expiry': 'No expiry', // Create task 'create.error': 'Error posting task', // Tasks list extras 'tasks.category.general': 'General', 'tasks.budget.range': 'Range:', 'tasks.budget.from': 'from', 'tasks.budget.to': 'to', 'tasks.filter.reset': 'Reset filters', 'tasks.load_more': 'Load more', 'tasks.showing': 'Results:', 'tasks.field.budget': 'Budget, €', // Admin 'admin.title': 'Admin Panel', 'admin.tab.stats': 'Statistics', 'admin.tab.users': 'Users', 'admin.tab.tasks': 'Tasks', 'admin.tab.reports': 'Reports', 'admin.tab.moderation': 'Moderation', 'admin.stats.users': 'Users', 'admin.stats.tasks': 'Tasks', 'admin.stats.offers': 'Offers', 'admin.stats.reviews': 'Reviews', 'admin.tasks.by_status': 'Tasks by status', 'admin.col.user': 'User', 'admin.col.email': 'Email', 'admin.col.role': 'Role', 'admin.col.registered': 'Registered', 'admin.col.status': 'Status', 'admin.col.title': 'Title', 'admin.col.budget': 'Budget', 'admin.col.created': 'Created', 'admin.users.active': 'Active', 'admin.users.inactive': 'Inactive', 'admin.users.deactivate': 'Deactivate', 'admin.users.activate': 'Activate', 'admin.tasks.cancel': 'Cancel', 'admin.reports.none': 'No reports', 'admin.moderation.none': 'No offers to review', 'admin.moderation.pending': 'Pending', 'admin.moderation.active': 'Active', 'admin.moderation.approve': 'Approve', 'admin.moderation.block': 'Block', 'admin.moderation.pending_title': 'Offers pending approval', 'admin.moderation.active_title': 'Active offers', 'admin.moderation.pending_count': 'Pending', 'admin.moderation.active_count': 'Active', 'admin.moderation.pending_hint': 'New offers waiting for approval', 'admin.moderation.active_hint': 'Visible offers you can block', 'admin.moderation.pending_empty': 'No new offers to approve', 'admin.moderation.active_empty': 'No active offers found', 'admin.reports.reviewed': 'Reviewed', 'admin.reports.dismiss': 'Dismiss', 'admin.pagination.total': 'Total', 'admin.users.role.change': 'Change role', 'admin.users.search.placeholder': 'Search name or email...', 'admin.tasks.delete': 'Delete', 'admin.tasks.delete.confirm': 'Permanently delete this task?', 'admin.tasks.search.placeholder': 'Search title...', 'admin.col.customer': 'Customer', 'admin.col.reporter': 'Reporter', 'admin.col.target': 'Target', 'admin.filter.all_roles': 'All roles', 'admin.filter.all_statuses': 'All statuses', 'admin.reports.target.task': 'Task', 'admin.reports.target.user': 'User', 'admin.tab.categories': 'Categories', 'admin.tab.locations': 'Cities & Districts', 'admin.tab.logs': 'Logs', 'admin.tab.plans': 'Plans', 'admin.tab.settings': 'Settings', 'admin.logs.subtab.ai': 'AI Logs', 'admin.logs.subtab.activity': 'Activity', 'admin.logs.subtab.mail': 'Mail', 'admin.logs.subtab.notifications': 'Notifications', 'admin.notif_logs.type': 'Type', 'admin.notif_logs.title': 'Title', 'admin.notif_logs.read': 'Read', 'admin.notif_logs.empty': 'No notification logs', 'admin.stats.notif_chart_title': 'Notifications per day', 'admin.stats.notif_label': 'Notifications', 'admin.stats.mail_chart_title': 'Emails per day', 'admin.stats.mail_label': 'Emails', 'admin.filter.all': 'All', 'admin.stats.specialists': 'Helpers', 'admin.col.plan': 'Plan', 'admin.back_home': 'Home', 'admin.plans.title': 'Subscription plans', 'admin.plans.add': '+ New plan', 'admin.plans.empty': 'No plans created', 'admin.plans.form.new': 'New plan', 'admin.plans.form.edit': 'Edit plan', 'admin.plans.form.name': 'Name', 'admin.plans.form.price': 'Price (EUR)', 'admin.plans.form.old_price': 'Old price (EUR, optional)', 'admin.plans.form.max_offers': 'Max offers (empty = no limit)', 'admin.plans.form.max_cards': 'Max offers (empty = no limit)', 'admin.plans.form.duration_days': 'Duration (days, empty = no expiry)', 'admin.plans.form.description': 'Description', 'admin.plans.form.features': 'Features (one per line)', 'admin.plans.form.notify': 'Notify about new tasks', 'admin.plans.form.default': 'Default', 'admin.plans.form.active': 'Active', 'admin.plans.form.order': 'Order', 'admin.plans.form.role': 'Role', 'admin.plans.form.tier': 'Tier', 'admin.plans.form.role.customer': 'Customer', 'admin.plans.form.role.specialist': 'Helper', 'admin.plans.form.tier.free': 'Free', 'admin.plans.form.tier.pro': 'Pro', 'admin.plans.form.tier.ultimate': 'Ultimate', 'admin.plans.form.section.limits': 'Limits (empty = unlimited)', 'admin.plans.form.max_messages_day': 'Max Messages/Day', 'admin.plans.form.max_orders_day': 'Max Orders/Day', 'admin.plans.form.max_skills': 'Max Skills', 'admin.plans.form.max_profiles': 'Max Profiles', 'admin.plans.form.max_portfolio': 'Max Portfolio Items', 'admin.plans.form.section.boost': 'Multipliers & Boost', 'admin.plans.form.search_boost': 'Search Boost', 'admin.plans.form.offers_multiplier': 'Offers Multiplier', 'admin.plans.form.section.contact': 'Contact Permissions', 'admin.plans.form.can_contact_free': 'Contact Free Plan users', 'admin.plans.form.can_contact_pro': 'Contact Pro Plan users', 'admin.plans.form.can_contact_all': 'Contact All users', 'admin.plans.form.can_show_contact': 'Show Contact Info', 'admin.plans.form.can_view_phone': 'View Phone', 'admin.plans.form.section.features': 'Feature Flags', 'admin.plans.form.upload_video': 'Upload Video', 'admin.plans.form.favorites': 'Favorites', 'admin.plans.form.google_calendar': 'Google Calendar', 'admin.plans.form.verified_badge': 'Verified Badge', 'admin.plans.form.highlighted_reviews': 'Highlighted Reviews', 'admin.plans.form.personal_site': 'Personal Site', 'admin.plans.form.can_help_now': 'Can Help Now Status', 'admin.plans.form.need_help': 'Need Help Status', 'admin.plans.form.auto_response': 'Auto Response', 'admin.plans.form.auto_match': 'Auto Match', 'admin.plans.form.price_list': 'Price List', 'admin.plans.form.instant_dispatch_free': 'Instant Dispatch (Free)', 'admin.plans.form.instant_dispatch_pro': 'Instant Dispatch (Pro)', 'admin.plans.badge.default': 'Default', 'admin.plans.badge.inactive': 'Inactive', 'admin.plans.make_default': 'Set as default', 'admin.plans.tasks': 'Tasks', 'admin.plans.offers': 'Offers', 'admin.plans.cards': 'Offers', 'admin.plans.notify_tasks': 'Task notifications', 'admin.plans.delete.confirm': 'Delete plan', 'admin.activity.title': 'Activity log', 'admin.activity.event': 'Event', 'admin.activity.all_events': 'All events', 'admin.activity.from': 'From', 'admin.activity.to': 'To', 'admin.activity.reset': 'Reset', 'admin.activity.total': 'Total', 'admin.activity.empty': 'No records', 'admin.mail.event': 'Email event', 'admin.mail.all_events': 'All email events', 'admin.mail.from': 'From', 'admin.mail.to': 'To', 'admin.mail.reset': 'Reset', 'admin.mail.total': 'Total', 'admin.mail.empty': 'No email logs', 'admin.mail.recipient': 'Recipient', 'admin.mail.provider': 'Provider', 'admin.mail.details': 'Details', 'admin.mail.status': 'Status', 'admin.mail.success': 'Success', 'admin.mail.failed': 'Failed', 'admin.event.email_sent': 'Email sent', 'admin.event.email_failed': 'Email failed', 'admin.event.email_dev': 'Email DEV fallback', 'admin.event.admin_email_test_sent': 'Admin test email sent', 'admin.event.admin_email_test_failed': 'Admin test email failed', 'admin.logs.empty': 'No records', 'admin.logs.date': 'Date', 'admin.logs.provider': 'Provider', 'admin.logs.model': 'Model', 'admin.logs.action': 'Action', 'admin.logs.langs': 'Languages', 'admin.logs.in': 'In', 'admin.logs.out': 'Out', 'admin.logs.total': 'Total', 'admin.logs.ms': 'ms', 'admin.logs.status': 'Status', 'admin.stats.activity_30d': 'Activity over 30 days', 'admin.stats.tasks_label': 'Tasks', 'admin.stats.users_label': 'Users', 'admin.stats.specialists_label': 'Helpers', 'admin.stats.tokens_title': 'Token usage (by month)', 'admin.stats.tokens_out': 'Output', 'admin.stats.tokens_in': 'Input', 'admin.stats.tokens_out_label': 'Output tokens', 'admin.stats.tokens_in_label': 'Input tokens', 'admin.stats.cost_label': 'Cost (USD)', 'admin.stats.tasks_by_status': 'Tasks by status', 'admin.task_status.open': 'Open', 'admin.task_status.in_progress': 'In progress', 'admin.task_status.completed': 'Completed', 'admin.task_status.cancelled': 'Cancelled', 'admin.task_status.draft': 'Drafts', 'admin.settings.tab.general': 'General', 'admin.settings.tab.smtp': 'E-Mail', 'admin.settings.tab.notifications': 'Notifications', 'admin.settings.tab.payment': 'Payment', 'admin.settings.tab.referral': 'Referrals', 'admin.settings.tab.seo': 'SEO', 'admin.settings.tab.socials': 'Socials', 'admin.settings.tab.telegram': 'Telegram Bot', 'admin.settings.telegram.title': 'Telegram Bot Settings', 'admin.settings.telegram.help': 'Create a bot via @BotFather. Use @userinfobot to get chat IDs.', 'admin.settings.telegram.bot_token': 'Bot Token', 'admin.settings.telegram.admin_chat_id': 'Admin Chat ID', 'admin.settings.telegram.admin_chat_hint': 'First send /start to your bot, then use @userinfobot to get your chat ID', 'admin.settings.telegram.channel_id': 'Channel ID', 'admin.settings.telegram.channels_title': 'Language Channels', 'admin.settings.telegram.channel_hint': 'Public channel @username or numeric ID', 'admin.settings.telegram.notify_registrations': 'Notify on new registrations', 'admin.settings.telegram.notify_registrations_hint': 'Send admin a message when a new user registers', 'admin.settings.telegram.post_new_tasks': 'Post new tasks to channel', 'admin.settings.telegram.post_new_tasks_hint': 'Automatically publish new tasks to the Telegram channel', 'admin.settings.telegram.test': 'Test', 'admin.settings.telegram.verify': 'Verify', 'admin.settings.telegram.test_ok': 'Connection successful', 'admin.settings.telegram.test_fail': 'Connection failed', 'admin.settings.socials.title': 'Social Network Links', 'admin.settings.socials.hint': 'Filled links are displayed in the site footer', 'admin.settings.seo.maintenance_label': 'Maintenance Mode', 'admin.settings.seo.maintenance_hint': 'Show a maintenance page to all visitors', 'admin.settings.seo.indexing_label': 'Search Engine Indexing', 'admin.settings.seo.indexing_hint': 'Allow search engines to index the site', 'admin.settings.seo.head_scripts_label': ' Scripts (JS)', 'admin.settings.seo.head_scripts_hint': 'Runs on every page (Google Tag Manager, analytics, etc.)', 'admin.settings.seo.site_title_label': 'Site Title', 'admin.settings.seo.site_description_label': 'Site Description (meta description)', 'admin.settings.referral.title': 'Referral program', 'admin.settings.referral.hint': 'Reward users who bring new registrations.', 'admin.settings.referral.enabled_label': 'Enabled', 'admin.settings.referral.enabled_hint': 'Enable / disable reward application', 'admin.settings.referral.customer_section': 'For customers', 'admin.settings.referral.specialist_section': 'For helpers', 'admin.settings.referral.plan_label': 'Reward plan', 'admin.settings.referral.no_plan': '— no plan —', 'admin.settings.referral.plan_hint': 'This plan will be assigned to the referrer. If their current plan is higher, only days will be added.', 'admin.settings.referral.days_label': 'Reward days', 'admin.settings.referral.days_hint': 'Number of days added to the plan expiry.', 'admin.settings.general.title': 'General settings', 'admin.settings.general.site_name': 'Site name', 'admin.settings.general.site_url': 'Site URL', 'admin.settings.general.contact_email': 'Contact email', 'admin.settings.general.support_phone': 'Support phone', 'admin.settings.smtp.title': 'SMTP settings', 'admin.settings.smtp.hint': 'Used to send email notifications.', 'admin.settings.smtp.host': 'SMTP Host', 'admin.settings.smtp.port': 'Port', 'admin.settings.smtp.encryption': 'Encryption', 'admin.settings.smtp.enc.none': 'None', 'admin.settings.smtp.enc.tls': 'STARTTLS (port 587)', 'admin.settings.smtp.enc.ssl': 'SSL/TLS (port 465)', 'admin.settings.smtp.username': 'Username', 'admin.settings.smtp.password': 'Password / App Password', 'admin.settings.smtp.from_name': 'Sender name', 'admin.settings.smtp.from_email': 'Sender email', 'admin.settings.smtp.test': 'Send test email', 'admin.settings.smtp.sending': 'Sending...', 'admin.settings.payment.hint': 'ePay Piraeus Bank credentials.', 'admin.settings.env.test': 'Test (sandbox)', 'admin.settings.env.prod': 'Production', 'admin.settings.env.label': 'Environment', 'admin.settings.merchant_id': 'Merchant ID', 'admin.settings.api_user': 'API User', 'admin.settings.api_password': 'API Password', 'admin.settings.confirm_url': 'Confirmation URL (webhook)', 'admin.settings.cancel_url': 'Cancel URL', 'admin.settings.active': 'Active', 'admin.settings.saving': 'Saving...', 'admin.settings.saved': 'Saved', 'admin.notif.vars_hint': 'Available variables in templates', 'admin.notif.tmpl.not_set': 'Template not configured', 'admin.notif.tmpl.subject_label': 'Email subject', 'admin.notif.tmpl.body_label': 'Email body (HTML)', 'admin.notif.tmpl.save': 'Save', 'admin.notif.tmpl.close': 'Close', 'admin.notif.tmpl.translate': 'Auto-translate to other languages', 'admin.notif.tmpl.translating': 'Translating...', 'admin.notif.tmpl.saving': 'Saving...', 'admin.notif.email_verification': 'Email verification', 'admin.notif.registration_success': 'Successful registration', 'admin.notif.password_reset': 'Password reset', 'admin.notif.new_offer': 'New offer', 'admin.notif.new_task': 'New task', 'admin.notif.offer_accepted': 'Offer accepted', 'admin.notif.new_message': 'New message', 'admin.notif.offer_declined': 'Offer declined', 'admin.notif.offer_other_accepted': 'Another specialist chosen', 'admin.notif.task_updated': 'Task updated', 'admin.notif.deadline_reminder': 'Deadline reminder', 'admin.notif.task_archived': 'Task unpublished automatically', 'admin.notif.referral_reward': 'Referral reward', // Plan lifecycle email templates 'admin.email_template.plan_activated': 'Plan activated', 'admin.email_template.plan_upgraded': 'Plan upgraded', 'admin.email_template.plan_downgrade_scheduled': 'Downgrade scheduled', 'admin.email_template.plan_downgrade_applied': 'Downgrade applied', 'admin.email_template.plan_renewal_reminder': 'Renewal reminder', 'admin.email_template.plan_insufficient_funds': 'Insufficient funds warning', // Pricing confirm modal 'pricing.confirm.title': 'Confirm plan selection', 'pricing.confirm.plan': 'Plan', 'pricing.confirm.prorated': 'Prorated credit', 'pricing.confirm.effective_price': 'Amount due', 'pricing.confirm.your_balance': 'Your balance', 'pricing.confirm.downgrade_info': 'The switch to the new plan will happen automatically after the current period ends.', 'pricing.confirm.insufficient': 'Insufficient balance.', 'pricing.confirm.top_up': 'Top up', 'pricing.confirm.schedule_downgrade': 'Schedule downgrade', 'pricing.confirm.pay': 'Pay', 'admin.user_edit.title': 'Edit user', 'admin.user_edit.email': 'Email', 'admin.user_edit.email_verified': 'Email verified', 'admin.user_edit.email_not_verified': 'Email not verified', 'admin.user_edit.verify_email_btn': 'Verify manually', 'admin.user_edit.verify_email_done': 'Email verified!', 'admin.user_edit.id': 'ID', 'admin.user_edit.registered': 'Registered', 'admin.user_edit.last_seen': 'Last seen', 'admin.user_edit.lang': 'Language', 'admin.user_edit.first_name': 'First name', 'admin.user_edit.last_name': 'Last name', 'admin.user_edit.phone': 'Phone', 'admin.user_edit.bio': 'Bio', 'admin.user_edit.role': 'Role', 'admin.user_edit.plan': 'Plan', 'admin.user_edit.no_plan': '— No plan —', 'admin.user_edit.active': 'Active account', 'admin.user_edit.published': 'Published', 'admin.user_edit.balance': 'Balance (EUR)', 'admin.user_edit.skills': 'Skills', 'admin.user_edit.tab.profile': 'Profile', 'admin.user_edit.tab.account': 'Account', 'admin.user_edit.tab.balance': 'Balance', 'admin.user_edit.tab.settings': 'Settings', 'admin.user_edit.tab.specialist': 'Offers', 'admin.user_edit.tab.site': 'Website', 'admin.user_edit.plan_expires': 'Plan expires', 'admin.user_edit.interface_lang': 'Interface language', 'admin.user_edit.comm_languages': 'Communication languages', 'admin.user_edit.personal_site_slug': 'Personal page', 'admin.user_edit.show_contact_info': 'Show contact info', 'admin.user_edit.show_contact_info.hint': 'Visible to customers', 'admin.user_edit.notify_new_tasks': 'Notify about new tasks', 'admin.user_edit.notify_new_tasks.hint': 'Push and email notifications', 'admin.user_edit.notif_messages': 'Message notifications', 'admin.user_edit.notif_messages.hint': 'New messages in chat', 'admin.user_edit.site_settings': 'Personal page settings', 'admin.user_edit.categories': 'Service categories', 'admin.user_edit.locations': 'Service areas', 'admin.user_edit.skill_placeholder': 'New skill...', 'admin.user_edit.add_category': '— Select category —', 'admin.user_edit.add_location': '— Select location —', 'admin.user_edit.specialist_cards': 'Offers', 'admin.user_edit.no_cards': 'No offers found', 'admin.user_edit.card_title': 'Offer title', 'admin.user_edit.card_description': 'Description', 'admin.balance.topup.btn': 'Top up', 'admin.balance.withdraw.btn': 'Withdraw', 'admin.balance.modal_hint': 'Changes take effect immediately and are recorded in history', 'admin.balance.topup.title': 'Top up balance', 'admin.balance.topup.amount': 'Amount', 'admin.balance.topup.description': 'Comment', 'admin.balance.topup.description.placeholder': 'For example: bonus or manual top-up', 'admin.balance.topup.submit': 'Top up balance', 'admin.balance.withdraw.title': 'Withdraw balance', 'admin.balance.withdraw.amount': 'Amount', 'admin.balance.withdraw.description': 'Comment', 'admin.balance.withdraw.description.placeholder': 'For example: refund or manual debit', 'admin.balance.withdraw.submit': 'Withdraw from balance', 'admin.user_edit.role.customer': 'Customer', 'admin.user_edit.role.user': 'User', 'admin.user_edit.role.specialist': 'Helper', 'admin.user_edit.role.admin': 'Administrator', 'common.refresh': 'Refresh', 'common.back_home': 'Home', 'admin.loc.hint': 'Manage cities and districts', 'admin.loc.add_city': 'New city', 'admin.loc.add_district': 'Add district', 'admin.loc.new': 'New location', 'admin.loc.edit': 'Edit location', 'admin.loc.district': 'district', 'admin.loc.empty': 'No locations', 'admin.loc.delete.confirm': 'Delete location? All districts will also be deleted.', 'admin.cat.add_root': 'New category', 'admin.cat.add_sub': 'Subcategory', 'admin.cat.edit': 'Edit', 'admin.cat.delete': 'Delete', 'admin.cat.delete.confirm': 'Delete category? All subcategories will also be deleted.', 'admin.cat.slug': 'Slug', 'admin.cat.icon': 'Icon', 'admin.cat.name_el': 'Greek', 'admin.cat.name_en': 'English', 'admin.cat.name_ru': 'Russian', 'admin.cat.name_uk': 'Ukrainian', 'admin.cat.active': 'Active', 'admin.cat.parent': 'Parent category', 'admin.cat.no_parent': 'Top level', 'admin.cat.save': 'Save', 'admin.cat.cancel': 'Cancel', 'admin.cat.empty': 'No categories', 'admin.cat.hint': 'Manage categories with multi-level hierarchy', 'admin.cat.new': 'New category', 'admin.cat.subcategory': 'subcategory', 'admin.cat.add_child': 'Add subcategory', 'admin.cat.inactive': 'Inactive', 'admin.event.user_login': 'Login', 'admin.event.user_register': 'Registration', 'admin.event.admin_user_deactivate': 'User blocked', 'admin.event.admin_user_activate': 'User activated', 'admin.event.admin_user_role_changed': 'Role changed', 'admin.event.admin_task_cancelled': 'Task cancelled', 'admin.event.admin_task_deleted': 'Task deleted', 'admin.event.admin_report_reviewed': 'Report reviewed', 'admin.event.admin_report_dismissed': 'Report dismissed', 'admin.event.task_created': 'Task created', // User status 'user.online': 'Online', 'user.seen_minutes': 'was here {n} min ago', 'user.seen_hours': 'was here {n} hr ago', 'user.seen_yesterday': 'was here yesterday', 'user.seen_days': 'was here {n} days ago', // Specialists 'specialists.title': 'Offers', 'specialists.search': 'Search specialist...', 'specialists.search.btn': 'Search', 'specialists.empty': 'No specialists found', 'specialists.no_bio': 'No description', 'specialists.view': 'View profile', 'specialists.reviews': 'reviews', 'specialist.favorite': 'Add to favorites', 'specialist.unfavorite': 'Remove from favorites', 'specialist.site_link': 'Personal site', 'favorites.specialists.title': 'Favourite specialists', 'favorites.specialists.empty': 'No favourite specialists yet', 'nav.favorites': 'Favourites', 'nav.schedule': 'Schedule', 'nav.find_tasks': 'Find Orders', 'schedule.title': 'My Schedule', 'schedule.subtitle': 'Mark the days when you are free or busy — clients will see your availability', 'schedule.available': 'Available', 'schedule.busy': 'Busy', 'schedule.unset': 'Not set', 'schedule.click_hint': '← click to cycle status', 'schedule.range_mode': 'Select range', 'schedule.range_from': 'From {date} — select end date', 'schedule.click_to_set': 'Click to set', 'schedule.free': 'free', 'schedule.busy_count': 'busy', 'schedule.free_days': 'free days', 'schedule.googleCalendar': 'Google Calendar', 'schedule.connectGoogle': 'Connect Google Calendar', 'schedule.disconnectGoogle': 'Disconnect', 'schedule.connectedAs': 'Connected as', 'schedule.importFromGoogle': 'Sync from Google', 'schedule.gcalConnected': '\u2713 Google Calendar connected', 'schedule.gcalError': 'Google Calendar connection error', 'schedule.gcalImportDone': 'Imported {n} days from Google Calendar', 'schedule.gcalAutoSyncNote': 'Availability changes are automatically synced to Google Calendar', 'schedule.gcalConnectDesc': 'Connect Google Calendar to automatically sync your availability', 'schedule.gcalDisconnectConfirm': 'Disconnect Google Calendar?', 'find_tasks.title': 'Find Orders', 'find_tasks.for_me': 'For me', 'find_tasks.all': 'All orders', 'find_tasks.by_category': 'By category', 'find_tasks.list': 'List', 'find_tasks.already_offered': 'Offer sent', 'find_tasks.offer_now': 'Make an offer', 'find_tasks.empty_for_me': 'No tasks found in your categories', 'find_tasks.banner_hint': 'Find tasks matching your portfolio categories', 'find_tasks.no_cards': 'Create a specialist portfolio to see tasks matched to you', 'find_tasks.add_card': 'Create portfolio', 'find_tasks.search': 'Search tasks...', 'find_tasks.tasks_count': 'tasks', 'footer.tagline': 'The task platform for Greece', 'footer.rights': 'All rights reserved.', 'nav.privacy': 'Privacy Policy', 'nav.delete_account': 'Delete Account', 'delete_account.title': 'Request Account Deletion', 'delete_account.subtitle': 'Once we verify your request, we will permanently delete your account and data within 30 days.', 'delete_account.warning': 'This action cannot be undone. All your data will be permanently deleted.', 'delete_account.reason_label': 'Reason (optional)', 'delete_account.reason_placeholder': 'Tell us why you want to delete your account...', 'delete_account.confirm_label': 'I confirm that I want to permanently delete my account', 'delete_account.submit': 'Submit request', 'delete_account.submitting': 'Submitting...', 'delete_account.success_title': 'Your request has been received', 'delete_account.success_body': 'We will process your request within 30 days and notify you by email.', 'delete_account.login_required': 'You must be logged in to submit a deletion request.', 'delete_account.login_btn': 'Log in', // App download section 'app.download_title': 'Download the CanHelp mobile app', 'app.download_desc': 'All of CanHelp — always at your fingertips. Available for Android and iOS.', // Nav 'nav.pricing': 'Pricing', // Pricing page 'pricing.title': 'Pricing', 'pricing.subtitle': 'Choose the right plan for you', 'pricing.role.customer': 'Customer', 'pricing.role.specialist': 'Specialist', 'pricing.free': 'Free', 'pricing.per_month': 'mo', 'pricing.duration': 'Duration', 'pricing.days': 'days', 'pricing.current_plan': 'Your plan', 'pricing.popular': 'Popular', 'pricing.choose': 'Choose', 'pricing.your_plan': 'Active plan', 'pricing.free_default': 'Default', 'pricing.compare': 'Compare features', 'pricing.feature': 'Feature', 'pricing.faq_note': 'Payment is deducted from your CanHelp balance. Top up available in Payments.', 'pricing.feat.messages': 'Messages / day', 'pricing.feat.orders': 'Orders / day', 'pricing.feat.contact_all': 'Contact everyone', 'pricing.feat.view_phone': 'View phone number', 'pricing.feat.show_contact': 'Show contact info', 'pricing.feat.favorites': 'Favorites', 'pricing.feat.verified_badge': 'Verified badge', 'pricing.feat.google_calendar': 'Google Calendar', 'pricing.feat.personal_site': 'Personal site', 'pricing.feat.auto_response': 'Auto-response', 'pricing.feat.auto_match': 'Auto-match', 'pricing.feat.highlighted_reviews': 'Highlighted reviews', 'pricing.feat.portfolio': 'Offer items', 'pricing.feat.cards': 'Number of offers', 'pricing.feat.notify_tasks': 'New task notifications', 'pricing.feat.video': 'Video in offer', // Upgrade prompt 'upgrade.available_in': 'Available in', 'upgrade.cta': 'Upgrade', // Dashboard plan block 'dashboard.plan.title': 'My Plan', 'dashboard.plan.expires': 'Expires in {n} days', 'dashboard.plan.upgrade': 'Upgrade plan', 'dashboard.plan.no_plan': 'Free plan', 'dashboard.plan.messages': 'Messages today', 'dashboard.plan.orders': 'Orders today', 'dashboard.plan.limits': 'Daily limits', 'dashboard.plan.features': 'Features', 'dashboard.plan.stats': 'Stats', 'dashboard.stats.cards': 'Portfolios', 'dashboard.stats.maxCards': 'Max portfolios', 'dashboard.stats.portfolioItems': 'Portfolio items', 'dashboard.stats.maxPortfolioItems': 'Max items', 'dashboard.stats.activeOffers': 'Active offers', 'dashboard.stats.reviewsReceived': 'Reviews', 'dashboard.stats.activeTasks': 'Active tasks', 'dashboard.stats.completedTasks': 'Completed', 'status.need_help': 'I need help', 'status.active': 'Active', 'status.toggle_on': 'Enable', 'status.toggle_off': 'Disable', // FOMO 'fomo.missed_orders': 'Missed {n} orders', 'fomo.missed_value': 'Worth €{v}', 'fomo.upgrade_hint': 'Upgrade to receive more orders', 'fomo.conversion': 'Task conversion', 'fomo.active': 'Active', 'fomo.with_offers': 'With offers', 'fomo.completed': 'Completed', 'fomo.already_offered': '{n} specialists have already responded', 'fomo.specialist_missed': 'You missed {n} orders', 'fomo.top_categories': 'Categories', 'fomo.offers_received': 'offers received', 'fomo.avg_offers': 'Avg {n}/task', 'fomo.completion_rate': 'completed', // Task auto-match 'task.auto_match': 'Auto-match', 'task.auto_match_results': 'Top specialists', 'task.no_offer_yet': 'You haven\'t sent an offer yet', 'task.make_offer': 'Send offer', 'auto_response.title': 'Auto-Response', 'auto_response.enabled': 'Enable auto-response', 'auto_response.min_budget': 'Min budget', 'auto_response.max_budget': 'Max budget', 'auto_response.default_price': 'Default price', 'auto_response.default_message': 'Default message', 'auto_response.max_per_day': 'Max auto-offers per day', 'auto_response.save': 'Save', 'auto_response.saved': 'Saved', 'auto_response.categories': 'Categories', 'auto_response.locations': 'Locations', // Personal site 'profile.personal_site': 'Personal Site', 'profile.site_slug': 'URL slug', 'profile.site_slug_hint': 'Only latin letters, numbers, - and _', 'profile.site_open': 'Open site', 'profile.site_preview': 'Your site', 'profile.show_contact': 'Show contact info', 'profile.show_contact_hint': 'Customers with Pro/Ultimate plans will see your phone number', // Google Calendar plan gate 'gcal.upgrade_required': 'Google Calendar requires a Pro or Ultimate plan', // Chat limits 'chat.limit_warning': '{n} messages left today', 'chat.limit_reached': 'Message limit reached. Upgrade your plan', 'chat.upgrade': 'Upgrade', // Site page 'site.member_since': 'Member since', 'site.rating': 'Rating', 'site.completed_tasks': 'Completed', 'site.languages': 'Languages', 'site.photos': 'photos', 'site.contact_form': 'Get in touch', 'site.contact_sent': 'Message sent!', 'site.contact_sent_desc': 'The specialist will contact you soon', 'site.contact_name': 'Name', 'site.contact_name_ph': 'Your name', 'site.contact_email_ph': 'your@email.com', 'site.contact_message': 'Message', 'site.contact_message_ph': 'Describe your task...', 'site.contact_send': 'Send', 'site.share': 'Share', 'site.speaks_languages': 'Speaks', 'site.message_sent': 'Message sent!', 'site.message_sent_desc': 'The specialist will receive it in the chat', 'site.message_placeholder': 'Write your message...', 'site.write_to_chat': 'Write to chat', 'site.auth_required_title': 'Sign in required', 'site.auth_required_desc': 'To write in the chat, you need to sign in to your CanHelp account.', 'site.auth_login_btn': 'Sign in', 'site.auth_contact_form_btn': 'Contact via feedback form', 'specialist.services': 'Services', 'portfolio.title': 'Portfolio', 'status.can_help_now': 'Available now', 'common.not_found': 'Page not found', 'common.anonymous': 'Anonymous', 'specialist_setup.page_title': 'Specialist profile setup', 'specialist_setup.step_of': 'Step {current} of {total}', 'specialist_setup.next': 'Next', 'specialist_setup.back': 'Back', 'specialist_setup.skip': 'Skip', 'specialist_setup.finish': 'Finish', 'specialist_setup.go_to_profile': 'Go to profile', 'specialist_setup.browse_tasks': 'Browse tasks', 'specialist_setup.step1.title': 'Welcome!', 'specialist_setup.step1.subtitle': "Let's set up your profile", 'specialist_setup.step1.desc': 'A complete profile helps you find more clients. Follow the steps to create the perfect specialist profile.', 'specialist_setup.step1.what_next': 'What we will do:', 'specialist_setup.step1.item1': 'Fill in basic information', 'specialist_setup.step1.item2': 'Create a service card', 'specialist_setup.step1.item3': 'Add skills and categories', 'specialist_setup.step1.item4': 'Select service area', 'specialist_setup.step1.item5': 'Upload portfolio photos', 'specialist_setup.step2.title': 'Basic profile', 'specialist_setup.step2.subtitle': 'Tell us about yourself', 'specialist_setup.step2.bio_label': 'About me', 'specialist_setup.step2.bio_placeholder': 'Describe your experience, services you offer...', 'specialist_setup.step2.phone_label': 'Phone', 'specialist_setup.step2.phone_placeholder': '+30 6900000000', 'specialist_setup.step2.photo_label': 'Profile photo', 'specialist_setup.step2.photo_btn': 'Upload photo', 'specialist_setup.step2.photo_uploading': 'Uploading...', 'specialist_setup.step2.photo_hint': 'Shown on your profile', 'specialist_setup.step3.title': 'Service card', 'specialist_setup.step3.subtitle': 'Create your first service card', 'specialist_setup.step3.title_label': 'Card title', 'specialist_setup.step3.title_placeholder': 'E.g. Plumber, Electrician, Cleaning...', 'specialist_setup.step3.desc_label': 'Description', 'specialist_setup.step3.desc_placeholder': 'Describe in detail what you offer, your experience, advantages...', 'specialist_setup.step3.title_required': 'Title is required', 'specialist_setup.step4.title': 'Skills & Categories', 'specialist_setup.step4.subtitle': 'Add skills and select categories', 'specialist_setup.step4.skills_label': 'Skills', 'specialist_setup.step4.skills_placeholder': 'E.g. Pipe installation...', 'specialist_setup.step4.skills_add': 'Add', 'specialist_setup.step4.categories_label': 'Categories', 'specialist_setup.step5.title': 'Service area', 'specialist_setup.step5.subtitle': 'Where do you provide services?', 'specialist_setup.step5.hint': 'Select cities or specific areas', 'specialist_setup.done.title': 'Your profile is ready!', 'specialist_setup.done.subtitle': 'Congratulations! Your profile has been set up', 'specialist_setup.done.desc': 'You can now receive orders from clients. Browse tasks that match your skills.', // Support 'support.title': 'Support', 'support.type.label': 'Request type', 'support.type.bug': 'Bug report', 'support.type.suggestion': 'Suggestion', 'support.type.other': 'Other', 'support.subject': 'Subject', 'support.subject.placeholder': 'Brief description...', 'support.body': 'Message', 'support.body.placeholder': 'Describe the issue or suggestion in detail...', 'support.submit': 'Submit', 'support.cancel': 'Cancel', 'support.error': 'Failed to send. Please try again.', 'support.sent.title': 'Request received!', 'support.sent.body': 'We will reply to your email as soon as possible.', 'support.sent.close': 'Close', 'admin.tab.support': 'Support', 'admin.tab.backup': 'Backup', 'admin.tab.translations': 'Translations', 'admin.tab.dbcheck': 'DB Check', 'admin.tab.balances': 'Balances', 'admin.tab.push': 'Push', 'admin.tab.referrals': 'Referrals', 'admin.search': 'Search', 'admin.noData': 'No data', 'admin.cat.order': 'Order', 'admin.cat.skills': 'Skills', 'admin.plans.form.max_tasks': 'Max tasks', 'admin.settings.referral.shared_section': 'Shared referral settings', 'admin.settings.seo.title': 'SEO settings', 'admin.backup.title': 'Backup', 'admin.backup.tables': 'Tables', 'admin.backup.exportAll': 'Export all', 'admin.backup.importAll': 'Import all', 'admin.backup.exportTable': 'Export table', 'admin.backup.importTable': 'Import table', 'admin.backup.exporting': 'Exporting...', 'admin.backup.importing': 'Importing...', 'admin.backup.exportSuccess': 'Export completed', 'admin.backup.importSuccess': 'Import completed', 'admin.backup.autoBackup': 'Auto backup', 'admin.backup.autoBackupDesc': 'Automatic daily backup', 'admin.backup.storedBackups': 'Stored backups', 'admin.backup.noStoredBackups': 'No stored backups', 'admin.backup.restore': 'Restore', 'admin.backup.restoreConfirm': 'Restore from backup?', 'admin.backup.restoreSuccess': 'Restore completed', 'admin.backup.restoring': 'Restoring...', 'admin.backup.date': 'Date', 'admin.backup.size': 'Size', 'admin.backup.today': 'Today', 'admin.backup.yesterday': 'Yesterday', 'admin.balance.col.operation': 'Operation', 'admin.balance.col.amount': 'Amount', 'admin.balance.col.result': 'Balance', 'admin.balance.col.description': 'Description', 'admin.balance.col.date': 'Date', 'admin.balance.empty': 'No records yet', 'admin.balance.filter.all': 'All operations', 'admin.balance.filter.user_id': 'Filter by userId', 'admin.balance.kind.topup': 'Top-up', 'admin.balance.kind.plan_purchase': 'Plan charge', 'admin.balance.kind.admin_topup': 'Admin top-up', 'admin.balance.kind.admin_adjustment': 'Adjustment', 'admin.support.search': 'Search', 'admin.support.all_statuses': 'All statuses', 'admin.support.all_types': 'All types', 'admin.support.none': 'No tickets', 'admin.support.reply': 'Reply', 'admin.support.reply_placeholder': 'Type your reply...', 'admin.support.send_reply': 'Send reply', 'admin.support.cancel': 'Cancel', 'admin.support.close': 'Close', 'admin.support.status.open': 'Open', 'admin.support.status.in_progress': 'In progress', 'admin.support.status.resolved': 'Resolved', 'admin.support.status.closed': 'Closed', 'admin.support.your_reply': 'Your reply', 'admin.user_edit.visibility_requirements.title': 'Profile is not yet visible in Offers', 'admin.user_edit.visibility_requirements.hint': 'Visibility requirements:', 'admin.user_edit.visibility_requirements.bio': 'Fill in bio', 'admin.user_edit.visibility_requirements.published_card': 'Publish at least one card', 'admin.user_edit.visibility_requirements.categories': 'Add a category to a published card', 'admin.user_edit.visibility_requirements.locations': 'Add a location to a published card', 'auto_response.desc': 'Automatically respond to matching tasks', 'auto_response.budget_range': 'Task budget', 'auto_response.message_placeholder': 'Hello! I can help with this task...', 'profile.background.title': 'Profile header background', 'profile.background.hint': 'Shown in the public profile header on web and mobile app.', 'profile.photo.uploading': 'Uploading...', 'profile.balance.history': 'Operation history', 'profile.balance.history.last': 'Latest operations', 'profile.balance.history.empty': 'No operations yet', 'profile.balance.history.balance_after': 'Balance after', 'profile.balance.history.kind.topup': 'Balance top-up', 'profile.balance.history.kind.plan_purchase': 'Plan charge', 'profile.balance.history.kind.admin_topup': 'Admin top-up', 'profile.balance.history.kind.admin_adjustment': 'Admin adjustment', 'profile.plan_history.title': 'Plan history', 'profile.plan_history.empty': 'Plan change history is empty', 'profile.plan_history.expires': 'Until', 'profile.plan_history.days': 'days', 'profile.plan_history.event.activated': 'Activated', 'profile.plan_history.event.renewed': 'Renewed', 'profile.plan_history.event.downgraded': 'Downgraded', 'profile.plan_history.event.referral_reward': 'Referral reward', 'profile.plan_history.event.admin_change': 'Changed by admin', 'profile.plan_history.event.expired': 'Expired', 'profile.show_contact_desc': 'Lets clients contact you directly', 'profile.site.visible.price_list': 'Price list', 'site.pricelist': 'Price list', 'status.plan_required': 'Status is unavailable on your current plan', 'status.admin_not_applicable': 'User status is not applicable to admin accounts' }, ru: { 'footer.slogan': 'Ваша задача — наша забота! Решаем любые вопросы быстро и удобно.', 'footer.links': 'Ссылки', 'footer.socials': 'Мы в соцсетях', 'nav.home': 'Главная', 'nav.tasks': 'Задачи', 'nav.post': '+ Опубликовать', 'nav.dashboard': 'Мои задачи', 'nav.chat': 'Сообщения', 'nav.notifications': 'Уведомления', 'nav.profile': 'Профиль', 'nav.admin': 'Админка', 'nav.specialists': 'Предложения', 'nav.new_task': 'Новая задача', 'nav.login': 'Войти', 'nav.register': 'Регистрация', 'nav.logout': 'Выйти', 'hero.title': 'Каждый человек может чем-то помочь', 'hero.subtitle': 'Найди помощь, предложи свои навыки или зарабатывай, помогая другим', 'hero.cta.post': 'Найти помощь', 'hero.cta.browse': 'Предложить помощь', 'hero.cta.specialists': 'Найти работу', 'hero.search.placeholder': 'Что нужно? напр. электрик, уборка...', 'hero.specialist.title': 'Найдите заказы рядом с вами', 'hero.specialist.subtitle': 'Откройте заказы в своих категориях и отправьте предложение', 'hero.specialist.cta': 'Найти заказы', 'hero.specialist.search.placeholder': 'Поиск заказов... напр. электрика, уборка', 'section.categories.specialist': 'Найдите заказы по категории', 'section.cities.specialist': 'Заказы по городу', 'how.specialist.step1.title': 'Создайте карточку специалиста', 'how.specialist.step1.desc': 'Укажите категории, навыки и районы — система найдёт подходящие заказы автоматически', 'how.specialist.step2.title': 'Найдите подходящие заказы', 'how.specialist.step2.desc': 'Просматривайте заказы в своих категориях и начните работу сразу', 'how.specialist.step3.title': 'Отправьте предложение и зарабатывайте', 'how.specialist.step3.desc': 'Подайте предложение с ценой и сроками, общайтесь с клиентами и выполняйте заказы', 'stats.specialists': 'предложений', 'stats.tasks': 'задач', 'stats.categories': 'категорий', 'stats.free': 'бесплатная регистрация', 'promo.title': 'Получи Pro бесплатно — только до конца года', 'promo.subtitle': 'Зарегистрируйся сейчас и пользуйся тарифом Pro без оплаты. Акция заканчивается 31 декабря.', 'promo.cta': 'Зарегистрироваться', 'promo.days': 'дней', 'promo.hours': 'часов', 'promo.minutes': 'минут', 'promo.seconds': 'сек.', 'section.categories': 'Создай задачу в любой категории', 'section.how': 'Как это работает', 'section.recent': 'Последние задачи', 'section.all': 'Смотреть все →', 'section.more': 'ещё', 'section.cities': 'Города и районы', 'section.community': 'Общественный проект для всех', 'community.subtitle': 'CanHelp — не просто маркетплейс, это сообщество взаимопомощи. Любой, у кого есть знания или навык, может найти клиента. Любой, у кого есть задача, может найти специалиста.', 'community.point1.title': 'Умеете что-то делать?', 'community.point1.desc': 'Ремонт, репетиторство, дизайн, переводы, уход — каждый навык имеет ценность. Создайте профиль и находите клиентов рядом с вами.', 'community.point2.title': 'Нужна помощь?', 'community.point2.desc': 'Опубликуйте задачу за минуту и получайте предложения от проверенных специалистов в вашем городе.', 'community.point3.title': 'Помогите проекту расти', 'community.point3.desc': 'CanHelp развивается благодаря сообществам. Поделитесь ссылкой с друзьями и знакомыми — вместе мы строим что-то полезное для всех.', 'community.share': 'Поделиться с друзьями', 'community.share.copied': 'Ссылка скопирована!', // Referral section on home page 'section.referral': 'Реферальная программа', 'referral.home.subtitle': 'Поделитесь ссылкой — каждый новый пользователь, зарегистрировавшийся по ней, принесёт вам награду.', 'referral.home.step1.title': 'Зарегистрируйтесь и получите ссылку', 'referral.home.step1.desc': 'Создайте аккаунт и найдите свою уникальную реферальную ссылку в профиле.', 'referral.home.step2.title': 'Поделитесь с друзьями', 'referral.home.step2.desc': 'Отправьте ссылку друзьям, знакомым или опубликуйте в социальных сетях.', 'referral.home.step3.title': 'Получайте награды', 'referral.home.step3.desc': 'Как только друг подтвердит email, вы автоматически получите свою награду.', 'referral.home.cta': 'Получить ссылку', 'referral.home.badge': 'Реферальная программа', // FAQ section 'section.faq': 'Частые вопросы', 'faq.q1': 'Как работает CanHelp?', 'faq.a1': 'Опубликуйте задачу, получите предложения от специалистов, выберите лучшего и начните сотрудничество. Это быстро, просто и бесплатно для клиентов.', 'faq.q2': 'Сколько стоит использование платформы?', 'faq.a2': 'Регистрация и публикация задач полностью бесплатны для клиентов. Специалисты имеют доступ к бесплатному плану, а также к премиум-опциям.', 'faq.q3': 'Как стать специалистом?', 'faq.a3': 'Зарегистрируйтесь, перейдите в «Стать специалистом», заполните профиль навыками и категориями и начните получать задачи.', 'faq.q4': 'Как выбрать подходящего специалиста?', 'faq.a4': 'Оцените отзывы, опыт, навыки и портфолио каждого специалиста. Общайтесь через чат платформы и уточняйте детали до принятия решения.', 'faq.q5': 'Что если я не доволен результатом?', 'faq.a5': 'Вы можете оставить отзыв о специалисте и поставить оценку от 1 до 5 звёзд. Отзывы помогают другим пользователям выбирать проверенных профессионалов.', 'faq.q6': 'Можно ли связаться со специалистом до принятия предложения?', 'faq.a6': 'Да. Как только вы получили предложение, можно открыть чат со специалистом, задать вопросы и уточнить все детали до принятия решения.', 'faq.q7': 'Сколько времени ждать предложений?', 'faq.a7': 'Как правило, в течение нескольких часов. Специалисты получают уведомление о новых задачах и могут быстро ответить.', 'faq.q8': 'Можно ли разместить задачу в любом городе Греции?', 'faq.a8': 'Да! CanHelp охватывает всю Грецию — Афины, Фессалоники, Патры и другие города.', 'faq.q9': 'Какие виды задач есть на CanHelp?', 'faq.a9': 'Ремонт, уборка, электрики, репетиторство, дизайн, IT, переезды, красота и многое другое. Категории постоянно расширяются.', 'faq.q10': 'Есть ли мобильное приложение?', 'faq.a10': 'Да! CanHelp доступно для Android и iOS. Скачайте приложение и управляйте всем со своего телефона.', 'how.step1.title': 'Опубликуй задачу', 'how.step1.desc': 'Опиши что нужно и установи бюджет', 'how.step2.title': 'Получи предложения', 'how.step2.desc': 'Специалисты пришлют предложения с ценой и сроками', 'how.step3.title': 'Выбери и начни', 'how.step3.desc': 'Выбери лучшего профессионала и начни сотрудничество', 'tasks.title': 'задач', 'tasks.filters': 'Фильтры', 'tasks.search': 'Поиск', 'tasks.search.placeholder': 'Название или ключевое слово...', 'tasks.search.btn': 'Поиск', 'tasks.publish': 'Опубликовать', 'tasks.category.all': 'Все', 'tasks.category.all_in': 'Все в', 'tasks.category.label': 'Категория', 'tasks.location.label': 'Город', 'tasks.location.placeholder': 'напр. Афины', 'tasks.empty': 'Задачи не найдены', 'tasks.empty.cta': 'Опубликуй первую', 'task.status.open': 'Открыта', 'task.status.in_progress': 'В работе', 'task.status.completed': 'Завершена', 'task.status.cancelled': 'Отменена', 'task.status.draft': 'Черновик', 'task.budget': 'Бюджет', 'task.location': 'Местоположение', 'task.deadline': 'Дата начала', 'task.expires_at': 'Активно до', 'task.created_at': 'Создано', 'task.customer': 'Заказчик', 'task.offer.btn': 'Отправить предложение', 'task.invite.banner_title': 'Вас пригласили на это задание', 'task.invite.banner_hint': 'Заказчик лично пригласил вас', 'task.invite.accept': 'Отправить предложение', 'task.invite.decline': 'Отказаться', 'offer.accept': 'Принять', 'offer.decline': 'Отклонить', 'task.complete': 'Завершить задачу', 'task.complete.confirm': 'Отметить задачу как выполненную?', 'task.edit': 'Редактировать', 'task.status_label': 'Статус', 'task.yours': 'Ваша задача', 'task.offer.yours': 'Ваше предложение', 'review.leave': 'Оставить отзыв', 'review.rating': 'Оценка', 'review.comment': 'Комментарий', 'review.comment.placeholder': 'Расскажите о своём опыте...', 'review.submit': 'Отправить отзыв', 'review.submitting': 'Отправка...', 'review.done': 'Отзыв отправлен!', 'profile.reviews': 'Отзывы', 'profile.no_reviews': 'Отзывов пока нет', 'profile.rating': 'Рейтинг', 'profile.skills.label': 'Навыки', 'profile.member_since': 'Участник с', 'task.offers': 'Предложения', 'task.offers.none': 'Предложений пока нет', 'create.title': 'Опубликовать задачу', 'create.field.title': 'Название', 'create.field.description': 'Описание', 'create.field.category': 'Категория', 'create.field.category.select': 'Выберите...', 'create.field.location': 'Местоположение', 'create.field.location.any': 'Где угодно', 'create.field.location.all': 'Весь город', 'create.field.budget': 'Бюджет (€)', 'create.field.deadline': 'Дата начала', 'create.field.expires_at': 'Объявление активно', 'create.field.expires_at.days': '{n} дней', 'create.field.budget_negotiable': 'Цена обсуждается', 'create.field.time_slot': 'Время выполнения', 'create.field.time_slot.any': 'В любое время', 'create.field.time_slot.morning': 'Утром (08:00–13:00)', 'create.field.time_slot.afternoon': 'Днём (13:00–18:00)', 'create.field.time_slot.evening': 'Вечером (18:00–22:00)', 'create.field.time_slot.weekend': 'Выходной', 'create.field.address': 'Адрес (необязательно)', 'create.field.address.district': 'Квартал', 'create.field.address.street': 'Улица', 'create.field.address.house': 'Дом', 'create.field.confidential': 'Конфиденциальная заметка', 'create.field.confidential.placeholder': 'Детали, видные только назначенному специалисту...', 'create.field.confidential.hint': 'Не отображается публично', 'create.field.photos': 'Фотографии', 'create.field.photos.add': 'Добавить фото', 'create.field.photos.uploading': 'Загрузка...', 'task.budget_negotiable': 'Цена обсуждается', 'task.time_slot': 'Время', 'task.confidential': 'Конфид. заметка', 'create.field.title.placeholder': 'напр. Уборка квартиры 80кв', 'create.field.description.placeholder': 'Подробно опишите что нужно...', 'create.field.location.placeholder': 'напр. Афины, Колонаки', 'create.field.budget.placeholder': 'напр. 100', 'create.submit': 'Опубликовать задачу', 'create.submitting': 'Публикация...', 'login.title': 'Добро пожаловать', 'login.subtitle': 'Вход в CanHelp', 'login.email': 'Email', 'login.password': 'Пароль', 'login.submit': 'Войти', 'login.submitting': 'Вход...', 'login.error': 'Неверный email или пароль', 'login.unverified.title': 'Подтвердите ваш email', 'login.unverified.desc': 'Мы отправили ссылку для подтверждения на ваш email. Проверьте входящие (или спам) и перейдите по ссылке.', 'login.unverified.resend': 'Отправить письмо повторно', 'login.unverified.sending': 'Отправка...', 'login.unverified.sent': '✓ Отправлено — проверьте входящие', 'profile.email.verified': 'Email подтверждён', 'profile.email.not_verified': 'Email не подтверждён', 'login.no_account': 'Нет аккаунта?', 'login.register_link': 'Зарегистрироваться', 'login.forgot_password': 'Забыл пароль?', 'login.or_continue_with': 'или продолжите через', 'login.continue_google': 'Войти через Google', 'forgot.title': 'Забыл пароль', 'forgot.subtitle': 'Введите email для получения ссылки восстановления', 'forgot.email': 'Email', 'forgot.submit': 'Отправить ссылку', 'forgot.submitting': 'Отправка...', 'forgot.sent.title': 'Проверьте входящие', 'forgot.sent.desc': 'Если аккаунт с таким email существует, мы отправим ссылку для сброса пароля.', 'forgot.back_to_login': 'Вернуться ко входу', 'forgot.error': 'Не удалось отправить ссылку. Проверьте адрес и попробуйте снова.', 'forgot.error.not_found': 'Аккаунт с таким email не найден.', 'forgot.error.send_failed': 'Ошибка отправки письма. Попробуйте позже.', 'reset.title': 'Новый пароль', 'reset.subtitle': 'Введите новый пароль', 'reset.password': 'Новый пароль', 'reset.confirm': 'Подтвердите пароль', 'reset.submit': 'Изменить пароль', 'reset.submitting': 'Сохранение...', 'reset.success': 'Пароль успешно изменён. Перенаправление ко входу...', 'reset.back_to_login': 'Вернуться ко входу', 'reset.error.mismatch': 'Пароли не совпадают', 'reset.error.invalid': 'Недействительная или устаревшая ссылка. Запросите новую.', 'register.title': 'Регистрация', 'register.subtitle': 'Создать аккаунт в CanHelp', 'register.first_name': 'Имя', 'register.last_name': 'Фамилия', 'register.email': 'Email', 'register.password': 'Пароль (мин. 8 символов)', 'register.role': 'Роль', 'register.role.customer': 'Пользователь', 'register.role.customer.desc': 'Публикую задачи', 'register.role.specialist': 'Специалист', 'register.role.specialist.desc': 'Беру задачи', 'register.submit': 'Создать аккаунт', 'register.submitting': 'Регистрация...', 'register.has_account': 'Уже есть аккаунт?', 'register.login_link': 'Войти', 'register.continue_google': 'Зарегистрироваться через Google', 'register.check_email.title': 'Проверьте почту', 'register.check_email.desc': 'Мы отправили ссылку для подтверждения на ваш email. Проверьте входящие (или спам) и перейдите по ссылке.', 'register.check_email.login': 'Вернуться к входу', 'register.captcha_failed': 'Проверка CAPTCHA не пройдена. Пройдите проверку безопасности и попробуйте снова.', 'dashboard.title': 'Панель управления', 'dashboard.new_task': '+ Новая задача', 'dashboard.onboarding.title': 'Добро пожаловать в CanHelp 👋', 'dashboard.onboarding.subtitle': 'Выберите, с чего хотите начать.', 'dashboard.onboarding.helper.title': 'Предложите свою помощь', 'dashboard.onboarding.helper.desc': 'Заполните анкету — навыки, категории и города. Это займёт пару минут, и вы начнёте получать заказы.', 'dashboard.onboarding.helper.cta': 'Заполнить анкету', 'dashboard.onboarding.requester.title': 'Нужна помощь?', 'dashboard.onboarding.requester.desc': 'Опубликуйте задачу — помощники пришлют вам свои предложения.', 'dashboard.onboarding.requester.cta': 'Опубликовать задачу', 'dashboard.my_tasks': 'Мои задачи', 'dashboard.my_offers': 'Мои предложения', 'dashboard.invitations': 'Приглашения на задания', 'dashboard.offers_count': 'предл.', 'dashboard.declined_count': 'откл.', 'dashboard.completed_tasks': 'Завершённые задачи', 'dashboard.completed_offers': 'Завершённые предложения', 'dashboard.review_pending': 'Оценка ещё не оставлена', 'tasks.new.top_specialists': 'Топ специалисты', 'tasks.new.select_category': 'Выберите категорию, чтобы увидеть специалистов', 'tasks.new.invite': 'Предложить работу', 'tasks.new.invited': 'Выбран ✓', 'reviews.count': 'отзывов', 'filter.location': 'Локация', 'filter.language': 'Языки', 'filter.language.any': 'Любой язык', 'filter.category.all': 'Все категории', 'user.categories': 'Категории', 'user.work_area': 'Район работы', 'user.specialist_cards': 'Карточки услуг', 'card.skills': 'Навыки', 'card.categories': 'Категории', 'card.geography': 'Район работы', 'card.portfolio': 'Галерея работ', 'card.close': 'Закрыть', 'dashboard.tasks.empty': 'Вы не публиковали задачи', 'dashboard.tasks.empty.cta': 'Опубликуйте первую', 'dashboard.tasks.add_new': 'Добавить новую задачу', 'dashboard.offers.empty': 'Вы не отправляли предложений', 'dashboard.offers.empty.cta': 'Найти задачи', 'dashboard.customer.specialists_title': 'Ищете исполнителя?', 'dashboard.customer.specialists_hint': 'Просматривайте профили специалистов, читайте отзывы и приглашайте их на свои задачи', 'dashboard.customer.specialists_cta': 'Найти исполнителя', 'dashboard.customer.how_title': 'Как это работает', 'dashboard.customer.step1': 'Создайте задачу с описанием и бюджетом', 'dashboard.customer.step2': 'Специалисты пришлют предложения с ценой и сроками', 'dashboard.customer.step3': 'Выберите подходящего и начните работу', 'notif.title': 'Уведомления', 'notif.mark_all': 'Отметить все как прочитанные', 'notif.empty': 'Нет уведомлений', 'notif.type.generic': 'Уведомление', 'notif.type.new_offer': 'Новое предложение', 'notif.type.offer_accepted': 'Ваше предложение принято', 'notif.type.offer_declined': 'Ваше предложение отклонено', 'notif.type.task_completed': 'Задание выполнено', 'notif.type.task_cancelled': 'Задание отменено', 'notif.type.new_message': 'Новое сообщение', 'notif.type.new_review': 'Новый отзыв', 'notif.type.task_invite': 'Приглашение на задание', 'notif.type.referral_reward': 'Реферальная награда', 'notif.type.specialist_card_submitted': 'Карточка отправлена на проверку', 'notif.type.specialist_card_approved': 'Карточка одобрена', 'notif.type.specialist_card_rejected': 'Карточка отклонена', 'notif.body.new_offer': 'Новое предложение на «{title}»', 'notif.body.offer_accepted': 'Ваше предложение на «{title}» принято', 'notif.body.offer_declined': 'Ваше предложение на «{title}» отклонено', 'notif.body.task_invite': 'Вас приглашают на «{title}»', 'notif.body.new_review': 'Вы получили оценку {rating}★', 'notif.body.referral_reward': 'На ваш аккаунт добавлено {days} дней доступа к плану «{plan}»!', 'notif.body.specialist_card_submitted': 'Карточка «{title}» отправлена на проверку', 'notif.body.specialist_card_approved': 'Карточка «{title}» одобрена и опубликована', 'notif.body.specialist_card_rejected': 'Карточка «{title}» не была одобрена. Исправьте её и отправьте снова.', 'offer.status.pending': 'Ожидает', 'offer.status.accepted': 'Принято', 'offer.status.declined': 'Отклонено', 'offer.status.withdrawn': 'Отозвано', 'offer.status.other_accepted': 'Выбран другой исполнитель', 'common.loading': 'Загрузка...', 'common.error': 'Ошибка', 'common.save': 'Сохранить', 'common.saving': 'Сохранение...', 'common.cancel': 'Отмена', 'common.add': 'Добавить', 'common.close': 'Закрыть', 'common.edit': 'Редактировать', 'common.delete': 'Удалить', 'common.from': 'от', 'common.currency': '€', 'common.greece': 'Греция', // Chat 'chat.connected': 'Подключено', 'chat.disconnected': 'Отключено', 'chat.no_rooms': 'Переписок пока нет', 'chat.task_fallback': 'Задача', 'chat.select': 'Выберите переписку', 'chat.no_messages': 'Сообщений пока нет', 'chat.placeholder': 'Напишите сообщение... (Enter для отправки)', 'chat.conversation_fallback': 'Переписка', 'chat.direct_chat': 'Личный чат', 'chat.linked_task': 'Прикреплённый заказ', 'chat.write_btn': 'Написать', 'chat.just_now': 'только что', 'chat.min_ago': 'м', 'chat.write_specialist': 'Написать специалисту', 'chat.write_customer': 'Написать заказчику', 'chat.notif_settings': 'Настройки уведомлений', 'chat.notif_messages': 'Уведомления о новых сообщениях', 'chat.toast_title': 'Новое сообщение', 'chat.toast_open': 'Открыть чат', // Offer form 'offer.price': 'Цена', 'offer.price.placeholder': 'напр. 80', 'offer.customer_budget': 'Бюджет заказчика', 'offer.message': 'Сообщение', 'offer.optional': 'необязательно', 'offer.message.placeholder': 'Представьтесь, расскажите об опыте и почему вы лучший выбор...', 'offer.submitting': 'Отправка...', // Profile 'profile.photo': 'Фото профиля', 'profile.photo.change': 'Изменить фото', 'profile.photo.hint': 'JPEG, PNG, WebP · до 5MB', 'profile.basic_info': 'Основная информация', 'profile.phone': 'Телефон', 'profile.phone.placeholder': '+30 6901234567', 'profile.bio': 'Краткое описание', 'profile.bio.placeholder': 'Расскажите немного о себе...', 'profile.language': 'Язык', 'profile.language.hint': 'Язык интерфейса и email-уведомлений', 'profile.languages': 'Языки общения', 'profile.languages.hint': 'Выберите все языки, на которых вы общаетесь', 'profile.skills': 'Навыки', 'profile.skills.subtitle': 'Добавьте услуги, которые вы предлагаете', 'profile.skills.placeholder': 'напр. Уборка, IT, Репетиторство...', 'profile.role': 'Роль аккаунта', 'profile.role.specialist': '🔧 Помощник', 'profile.role.admin': '👑 Admin', 'profile.role.customer': '👤 Пользователь', 'profile.role.user': '👤 Пользователь', 'profile.role.change': 'Для смены роли обратитесь в службу поддержки.', 'profile.become_specialist': 'Предложить помощь', 'profile.become_specialist.desc': 'Создай профиль помощника, предложи свои навыки и начни получать задачи.', 'become_specialist.hero.title': 'Предложи свои навыки и начни зарабатывать', 'become_specialist.hero.subtitle': 'Создай профиль помощника и получай запросы от людей, которым нужна помощь', 'become_specialist.how.title': 'Как это работает', 'become_specialist.step1.title': 'Создай портфолио специалиста', 'become_specialist.step1.desc': 'Укажи категории, навыки и зону покрытия — система автоматически подберёт подходящие заказы', 'become_specialist.step2.title': 'Ищи заказы', 'become_specialist.step2.desc': 'Просматривай задачи по своим категориям в разделе «Поиск заказов»', 'become_specialist.step3.title': 'Откликайся и зарабатывай', 'become_specialist.step3.desc': 'Отправляй предложения с ценой и сроками, общайся с клиентами и выполняй заказы', 'become_specialist.benefits.title': 'Преимущества профиля специалиста', 'become_specialist.benefit1': 'Поиск заказов по вашим категориям и локации', 'become_specialist.benefit2': 'Публичный профиль с отзывами клиентов', 'become_specialist.benefit3': 'Расписание доступности, видимое клиентам', 'become_specialist.benefit4': 'Добавление в избранное клиентами', 'become_specialist.cta': 'Подробнее', 'become_specialist.free_badge': 'Бесплатная регистрация', 'profile.tab.notifications': 'Уведомления', 'profile.tab.reviews': 'Отзывы', 'profile.tab.referral': 'Рефералы', 'profile.tab.auto_response': 'Авто-ответ', 'profile.tab.site': 'Сайт', 'profile.site.title': 'Персональная страница', 'profile.site.url_label': 'Личный сайт', 'profile.site.copy': 'Копировать', 'profile.site.copied': 'Скопировано', 'profile.site.visible_title': 'Что отображается на вашей странице', 'profile.site.visible.name': 'Имя и фото', 'profile.site.visible.bio': 'Биография', 'profile.site.visible.rating': 'Рейтинг и отзывы', 'profile.site.visible.portfolio': 'Портфолио / Карточки', 'profile.site.visible.contacts': 'Контактные данные', 'profile.site.visible.full_last_name': 'Фамилия полностью', 'profile.site.visible.services': 'Карточки услуг', 'profile.site.visible.reviews': 'Раздел с отзывами', 'profile.site.visible.status': 'Статус «Готов помочь»', 'profile.site.theme': 'Тема оформления', 'profile.site.theme.dark': 'Тёмная', 'profile.site.theme.light': 'Светлая', 'profile.site.slug_taken': 'Этот адрес уже занят', 'profile.site.stats.title': 'Аналитика сайта', 'profile.site.stats.days': 'последние 30 дней', 'profile.site.stats.views': 'Просмотры', 'profile.site.stats.unique': 'Уникальные посетители', 'profile.site.stats.messages': 'Сообщения', 'profile.site.stats.total_views': 'Просмотры', 'profile.site.stats.total_unique': 'Уник. посетители', 'profile.site.stats.total_messages': 'Сообщения', 'profile.site.stats.empty': 'Данных пока нет', 'profile.site.stats.loading': 'Загрузка аналитики...', 'profile.site.stats.no_slug': 'Укажите адрес сайта, чтобы видеть статистику', 'profile.site.edit_bio_hint': 'Биография и фото настраиваются во вкладке «Основное».', 'profile.site.seo.title': 'SEO — мета-данные сайта', 'profile.site.seo.hint': 'Отображается в поисковиках. При сохранении автоматически переводится на все языки.', 'profile.site.seo.site_title': 'Заголовок страницы', 'profile.site.seo.site_title_placeholder': 'Иван Иванов — Электрик в Афинах', 'profile.site.seo.site_desc': 'Мета-описание', 'profile.site.seo.site_desc_placeholder': 'Краткое описание для поисковиков...', 'status.title': 'Статус', 'status.can_help_now_hint': 'Ваша карточка показывается выше в поиске', 'status.need_help_hint': 'Специалисты могут предложить вам помощь', 'profile.referral.title': 'Партнёрская программа', 'profile.referral.desc': 'Поделитесь ссылкой и получайте награду за каждого привлечённого пользователя.', 'profile.referral.link_label': 'Ваша реферальная ссылка', 'profile.referral.copy': 'Копировать', 'profile.referral.copied': 'Скопировано!', 'profile.referral.invited_count': 'успешных приглашений', 'profile.referral.no_code': 'Реферальный код недоступен.', 'notifications.title': 'Настройки уведомлений', 'notifications.email.new_tasks': 'Email о новых заказах', 'notifications.email.new_tasks.desc': 'Получать email, когда в ваших категориях публикуется новый заказ', 'notifications.messages.desc': 'Получать уведомление при новом входящем сообщении', 'notifications.saved': 'Настройки сохранены', 'notifications.plan_required': 'Недоступно в вашем тарифе', 'profile.tab.info': 'Основное', 'profile.tab.finance': 'Финансы', 'profile.tab.skills': 'Навыки', 'profile.tab.categories': 'Категории', 'profile.tab.geography': 'География', 'profile.specialist.categories': 'Категории работ', 'profile.specialist.categories.desc': 'Выберите категории, в которых вы работаете', 'profile.specialist.geography': 'Города покрытия', 'profile.specialist.geography.desc': 'Выберите города / районы, где вы работаете', 'profile.saving': 'Сохранение...', 'profile.upload.error': 'Ошибка загрузки фото', 'profile.saved': 'Сохранено', 'profile.tab.cards': 'Предложения', 'profile.cards.count': 'Предложения', 'profile.cards.add': 'Добавить предложение', 'profile.cards.new_title': 'Название нового предложения', 'profile.cards.placeholder': 'Например: Сантехника', 'profile.cards.create': 'Создать', 'profile.cards.cancel': 'Отмена', 'profile.cards.empty': 'У вас нет предложений', 'profile.cards.empty_hint': 'Создайте первую карточку, чтобы показать услуги клиентам.', 'profile.cards.create_first': 'Создать первое предложение', 'profile.cards.delete_confirm': 'Удалить предложение?', 'profile.background.change': 'Изменить фон', 'profile.background.remove': 'Удалить фон', 'profile.listing_requirements.published_card': 'Опубликуйте хотя бы одну карточку', 'profile.listing_requirements.title': 'Ваш профиль пока не показывается в разделе «Предложения»', 'profile.listing_requirements.hint': 'Чтобы карточка отображалась, выполните условия:', 'profile.listing_requirements.bio': 'Добавьте краткую информацию о себе в «Основное»', 'profile.listing_requirements.categories': 'Укажите хотя бы одну категорию в активной карточке', 'profile.listing_requirements.locations': 'Укажите хотя бы одну локацию в активной карточке', 'profile.listing_requirements.card_inactive': 'Сделайте карточку активной', 'profile.listing_requirements.review_pending': 'Карточка на рассмотрении', 'profile.card.visibility_issue': 'Карточка не отображается в разделе «Предложения»', 'profile.card.tab.main': 'Основное', 'profile.card.tab.skills': 'Навыки', 'profile.card.tab.categories': 'Категории', 'profile.card.tab.geography': 'География', 'profile.card.tab.portfolio': 'Галерея', 'profile.card.tab.pricelist': 'Прайс-лист', 'profile.card.pricelist.empty': 'Группы прайс-листа ещё не добавлены.', 'profile.card.pricelist.add_group': 'Добавить группу', 'profile.card.pricelist.group_title': 'Название группы', 'profile.card.pricelist.add_item': 'Добавить позицию', 'profile.card.pricelist.item_name': 'Услуга / работа', 'profile.card.pricelist.item_desc': 'Описание (необязательно)', 'profile.card.pricelist.item_price': 'Цена', 'profile.card.pricelist.item_unit': 'Единица (например /час)', 'profile.card.pricelist.save_group': 'Сохранить группу', 'profile.card.pricelist.save_item': 'Сохранить', 'profile.card.pricelist.delete_group': 'Удалить группу', 'profile.card.pricelist.delete_item': 'Удалить', 'profile.card.active': 'Активна', 'profile.card.review_pending': 'На рассмотрении', 'profile.card.review_pending_hint': 'Ваша карточка сейчас проверяется администрацией.', 'profile.card.review_submitted': 'Карточка отправлена на проверку', 'profile.card.review_approved': 'Карточка одобрена', 'profile.card.review_approved_hint': 'Ваша карточка теперь отображается в предложениях.', 'profile.card.review_rejected': 'Карточка отклонена', 'profile.card.review_rejected_hint': 'Карточка не была одобрена. Исправьте её и отправьте снова.', 'profile.card.submit_review': 'Отправить на рассмотрение', 'profile.card.withdraw_review': 'Отозвать заявку', 'profile.card.unpublish': 'Снять с публикации', 'profile.card.save': 'Сохранить', 'profile.card.saved': 'Сохранено', 'profile.card.delete': 'Удалить', 'profile.card.skill.add': 'Добавить навык', 'profile.card.photo.add': 'Добавить фото', 'profile.card.photo.uploading': 'Загрузка...', 'profile.card.photo.empty': 'Нет фотографий', 'profile.card.item.title': 'Заголовок', 'profile.card.item.desc': 'Описание', 'profile.card.item.save': 'Сохранить', 'profile.card.item.cancel': 'Отмена', 'profile.card.item.edit': 'Описание работы', 'profile.card.description': 'Описание карточки', 'profile.card.desc_auto_translate': 'При сохранении будет автоматически переведено на другие языки', 'profile.card.desc_translated': 'Есть переводы:', 'profile.upgrade.cards_limit': 'Лимит портфолио исчерпан', 'profile.upgrade.plan': 'Текущий тариф:', 'profile.upgrade.contact': 'Обратитесь к администратору для смены тарифа', 'profile.upgrade.ok': 'Понятно', 'profile.plan.title': 'Тарифный план', 'profile.balance': 'Баланс', 'profile.balance.topup': 'Пополнить баланс', 'profile.balance.topup.title': 'Пополнить баланс', 'profile.balance.topup.amount': 'Сумма (в EUR)', 'profile.balance.topup.hint': 'Выберите сумму или введите вручную', 'profile.balance.topup.submit': 'Перейти к оплате', 'profile.balance.topup.loading': 'Перенаправление...', 'profile.balance.topup.error': 'Ошибка инициализации платежа. Попробуйте снова.', 'payment.success.title': 'Оплата прошла успешно!', 'payment.success.desc': 'Ваш баланс обновлён.', 'payment.cancelled.title': 'Оплата отменена', 'payment.cancelled.desc': 'Оплата была отменена. Средства не списаны.', 'payment.pending.title': 'Обрабатывается...', 'payment.pending.desc': 'Ваш платёж в обработке.', 'payment.back_to_profile': 'Вернуться в профиль', 'profile.plan.basic': 'Базовый (бесплатный)', 'profile.plan.contact_upgrade': 'Обратитесь к администратору для подключения тарифа', 'profile.plan.cards_up_to': 'Портфолио: до', 'profile.plan.cards_unlimited': 'Портфолио: безлимитно', 'profile.plan.tasks_up_to': 'Задач: до', 'profile.plan.offers_up_to': 'Откликов: до', 'profile.plan.valid_until': 'Действителен до', 'profile.plan.no_expiry': 'Бессрочно', // Create task 'create.error': 'Ошибка при публикации', // Tasks list extras 'tasks.category.general': 'Общее', 'tasks.budget.range': 'Диапазон:', 'tasks.budget.from': 'от', 'tasks.budget.to': 'до', 'tasks.filter.reset': 'Сбросить фильтры', 'tasks.load_more': 'Загрузить ещё', 'tasks.showing': 'Результатов:', 'tasks.field.budget': 'Бюджет, €', // Admin 'admin.title': 'Панель администратора', 'admin.tab.stats': 'Статистика', 'admin.tab.users': 'Пользователи', 'admin.tab.tasks': 'Задачи', 'admin.tab.reports': 'Жалобы', 'admin.tab.moderation': 'Модерация', 'admin.stats.users': 'Пользователи', 'admin.stats.tasks': 'Задачи', 'admin.stats.offers': 'Предложения', 'admin.stats.reviews': 'Отзывы', 'admin.tasks.by_status': 'Задачи по статусу', 'admin.col.user': 'Пользователь', 'admin.col.email': 'Email', 'admin.col.role': 'Роль', 'admin.col.registered': 'Регистрация', 'admin.col.status': 'Статус', 'admin.col.title': 'Название', 'admin.col.budget': 'Бюджет', 'admin.col.created': 'Создано', 'admin.users.active': 'Активен', 'admin.users.inactive': 'Неактивен', 'admin.users.deactivate': 'Деактивировать', 'admin.users.activate': 'Активировать', 'admin.tasks.cancel': 'Отменить', 'admin.reports.none': 'Жалоб нет', 'admin.moderation.none': 'Нет предложений для проверки', 'admin.moderation.pending': 'В ожидании', 'admin.moderation.active': 'Активно', 'admin.moderation.approve': 'Одобрить', 'admin.moderation.block': 'Заблокировать', 'admin.moderation.pending_title': 'Предложения на одобрение', 'admin.moderation.active_title': 'Активные предложения', 'admin.moderation.pending_count': 'В ожидании', 'admin.moderation.active_count': 'Активные', 'admin.moderation.pending_hint': 'Новые предложения, ожидающие проверки', 'admin.moderation.active_hint': 'Активные предложения, которые можно заблокировать', 'admin.moderation.pending_empty': 'Новых предложений для одобрения нет', 'admin.moderation.active_empty': 'Активных предложений не найдено', 'admin.reports.reviewed': 'Рассмотрено', 'admin.reports.dismiss': 'Отклонить', 'admin.pagination.total': 'Всего', 'admin.users.role.change': 'Изменить роль', 'admin.users.search.placeholder': 'Поиск по имени или email...', 'admin.tasks.delete': 'Удалить', 'admin.tasks.delete.confirm': 'Удалить эту задачу навсегда?', 'admin.tasks.search.placeholder': 'Поиск по названию...', 'admin.col.customer': 'Заказчик', 'admin.col.reporter': 'Жалобщик', 'admin.col.target': 'Цель', 'admin.filter.all_roles': 'Все роли', 'admin.filter.all_statuses': 'Все статусы', 'admin.reports.target.task': 'Задача', 'admin.reports.target.user': 'Пользователь', 'admin.tab.categories': 'Категории', 'admin.tab.locations': 'Города и районы', 'admin.tab.logs': 'Логи', 'admin.tab.plans': 'Тарифы', 'admin.tab.settings': 'Настройки', 'admin.logs.subtab.ai': 'AI логи', 'admin.logs.subtab.activity': 'Активность', 'admin.logs.subtab.mail': 'Mail', 'admin.logs.subtab.notifications': 'Уведомления', 'admin.notif_logs.type': 'Тип', 'admin.notif_logs.title': 'Заголовок', 'admin.notif_logs.read': 'Прочитано', 'admin.notif_logs.empty': 'Логи уведомлений пусты', 'admin.stats.notif_chart_title': 'Уведомления по дням', 'admin.stats.notif_label': 'Уведомления', 'admin.stats.mail_chart_title': 'Email по дням', 'admin.stats.mail_label': 'Emails', 'admin.filter.all': 'Все', 'admin.stats.specialists': 'Помощники', 'admin.col.plan': 'Тариф', 'admin.back_home': 'На главную', 'admin.plans.title': 'Тарифные пакеты', 'admin.plans.add': '+ Добавить тариф', 'admin.plans.empty': 'Тарифы не созданы', 'admin.plans.form.new': 'Новый тариф', 'admin.plans.form.edit': 'Редактировать тариф', 'admin.plans.form.name': 'Название', 'admin.plans.form.price': 'Цена (EUR)', 'admin.plans.form.old_price': 'Старая цена (EUR, необязательно)', 'admin.plans.form.max_offers': 'Макс. откликов (пусто = без лимита)', 'admin.plans.form.max_cards': 'Макс. предложений (пусто = без лимита)', 'admin.plans.form.duration_days': 'Срок (дней, пусто = без истечения)', 'admin.plans.form.description': 'Описание', 'admin.plans.form.features': 'Возможности (по одной на строку)', 'admin.plans.form.notify': 'Уведомления о новых заказах', 'admin.plans.form.default': 'По умолчанию', 'admin.plans.form.active': 'Активен', 'admin.plans.form.order': 'Порядок', 'admin.plans.form.role': 'Роль', 'admin.plans.form.tier': 'Уровень', 'admin.plans.form.role.customer': 'Заказчик', 'admin.plans.form.role.specialist': 'Помощник', 'admin.plans.form.tier.free': 'Бесплатный', 'admin.plans.form.tier.pro': 'Pro', 'admin.plans.form.tier.ultimate': 'Ultimate', 'admin.plans.form.section.limits': 'Лимиты (пусто = без ограничений)', 'admin.plans.form.max_messages_day': 'Макс. сообщений/день', 'admin.plans.form.max_orders_day': 'Макс. заказов/день', 'admin.plans.form.max_skills': 'Макс. навыков', 'admin.plans.form.max_profiles': 'Макс. профилей', 'admin.plans.form.max_portfolio': 'Макс. элементов портфолио', 'admin.plans.form.section.boost': 'Множители & Буст', 'admin.plans.form.search_boost': 'Буст в поиске', 'admin.plans.form.offers_multiplier': 'Множитель откликов', 'admin.plans.form.section.contact': 'Права контактов', 'admin.plans.form.can_contact_free': 'Контакт с бесплатными пользователями', 'admin.plans.form.can_contact_pro': 'Контакт с Pro пользователями', 'admin.plans.form.can_contact_all': 'Контакт со всеми', 'admin.plans.form.can_show_contact': 'Показывать контакты', 'admin.plans.form.can_view_phone': 'Просмотр телефона', 'admin.plans.form.section.features': 'Возможности', 'admin.plans.form.upload_video': 'Загрузка видео', 'admin.plans.form.favorites': 'Избранное', 'admin.plans.form.google_calendar': 'Google Calendar', 'admin.plans.form.verified_badge': 'Знак верификации', 'admin.plans.form.highlighted_reviews': 'Выделенные отзывы', 'admin.plans.form.personal_site': 'Личный сайт', 'admin.plans.form.can_help_now': 'Статус «Могу помочь»', 'admin.plans.form.need_help': 'Статус «Нужна помощь»', 'admin.plans.form.auto_response': 'Автоответ', 'admin.plans.form.auto_match': 'Автоподбор', 'admin.plans.form.price_list': 'Прайс-лист', 'admin.plans.form.instant_dispatch_free': 'Мгновенная рассылка (бесплатно)', 'admin.plans.form.instant_dispatch_pro': 'Мгновенная рассылка (Pro)', 'admin.plans.badge.default': 'По умолчанию', 'admin.plans.badge.inactive': 'Неактивен', 'admin.plans.make_default': 'Сделать по умолчанию', 'admin.plans.tasks': 'Задач', 'admin.plans.offers': 'Откликов', 'admin.plans.cards': 'Предложения', 'admin.plans.notify_tasks': 'Уведомления о заказах', 'admin.plans.delete.confirm': 'Удалить тариф', 'admin.activity.title': 'Журнал активности', 'admin.activity.event': 'Событие', 'admin.activity.all_events': 'Все события', 'admin.activity.from': 'От', 'admin.activity.to': 'До', 'admin.activity.reset': 'Сбросить', 'admin.activity.total': 'Всего', 'admin.activity.empty': 'Нет записей', 'admin.mail.event': 'Email событие', 'admin.mail.all_events': 'Все email события', 'admin.mail.from': 'От', 'admin.mail.to': 'До', 'admin.mail.reset': 'Сбросить', 'admin.mail.total': 'Всего', 'admin.mail.empty': 'Нет email логов', 'admin.mail.recipient': 'Получатель', 'admin.mail.provider': 'Провайдер', 'admin.mail.details': 'Детали', 'admin.mail.status': 'Статус', 'admin.mail.success': 'Успешно', 'admin.mail.failed': 'Ошибка', 'admin.event.email_sent': 'Email отправлен', 'admin.event.email_failed': 'Email не отправлен', 'admin.event.email_dev': 'Email DEV fallback', 'admin.event.admin_email_test_sent': 'Тестовый email отправлен', 'admin.event.admin_email_test_failed': 'Тестовый email не отправлен', 'admin.logs.empty': 'Нет записей', 'admin.logs.date': 'Дата', 'admin.logs.provider': 'Провайдер', 'admin.logs.model': 'Модель', 'admin.logs.action': 'Действие', 'admin.logs.langs': 'Языки', 'admin.logs.in': 'Вход', 'admin.logs.out': 'Выход', 'admin.logs.total': 'Итого', 'admin.logs.ms': 'мс', 'admin.logs.status': 'Статус', 'admin.stats.activity_30d': 'Активность за 30 дней', 'admin.stats.tasks_label': 'Заявки', 'admin.stats.users_label': 'Пользователи', 'admin.stats.specialists_label': 'Помощники', 'admin.stats.tokens_title': 'Расход токенов (по месяцам)', 'admin.stats.tokens_out': 'Исходящие', 'admin.stats.tokens_in': 'Входящие', 'admin.stats.tokens_out_label': 'Исходящие токены', 'admin.stats.tokens_in_label': 'Входящие токены', 'admin.stats.cost_label': 'Стоимость (USD)', 'admin.stats.tasks_by_status': 'Заявки по статусам', 'admin.task_status.open': 'Открытые', 'admin.task_status.in_progress': 'В работе', 'admin.task_status.completed': 'Завершённые', 'admin.task_status.cancelled': 'Отменённые', 'admin.task_status.draft': 'Черновики', 'admin.settings.tab.general': 'Общие', 'admin.settings.tab.smtp': 'E-Mail', 'admin.settings.tab.notifications': 'Уведомления', 'admin.settings.tab.payment': 'Оплата', 'admin.settings.tab.referral': 'Реферальная', 'admin.settings.tab.seo': 'SEO', 'admin.settings.tab.socials': 'Соцсети', 'admin.settings.tab.telegram': 'Telegram Bot', 'admin.settings.telegram.title': 'Настройки Telegram Bot', 'admin.settings.telegram.help': 'Создайте бота через @BotFather. ID чата узнайте через @userinfobot.', 'admin.settings.telegram.bot_token': 'Bot Token', 'admin.settings.telegram.admin_chat_id': 'Chat ID администратора', 'admin.settings.telegram.admin_chat_hint': 'Сначала отправьте /start своему боту, затем узнайте chat ID через @userinfobot', 'admin.settings.telegram.channel_id': 'неиспользуется', 'admin.settings.telegram.channels_title': 'Каналы по языкам', 'admin.settings.telegram.channel_hint': 'Username публичного канала (@канал) или числовой ID', 'admin.settings.telegram.notify_registrations': 'Уведомлять о новых регистрациях', 'admin.settings.telegram.notify_registrations_hint': 'Отправлять сообщение при регистрации нового пользователя', 'admin.settings.telegram.post_new_tasks': 'Публиковать новые задания в канал', 'admin.settings.telegram.post_new_tasks_hint': 'Автоматически публиковать новые задания в Telegram-канал', 'admin.settings.telegram.test': 'Тест', 'admin.settings.telegram.verify': 'Проверить токен', 'admin.settings.telegram.test_ok': 'Соединение работает', 'admin.settings.telegram.test_fail': 'Ошибка соединения', 'admin.settings.socials.title': 'Ссылки на социальные сети', 'admin.settings.socials.hint': 'Заполненные ссылки отображаются в подвале сайта', 'admin.settings.seo.maintenance_label': 'Режим обслуживания', 'admin.settings.seo.maintenance_hint': 'Показывать страницу обслуживания всем посетителям', 'admin.settings.seo.indexing_label': 'Индексация поисковыми системами', 'admin.settings.seo.indexing_hint': 'Разрешить поисковым системам индексировать сайт', 'admin.settings.seo.head_scripts_label': 'Скрипты в (JS)', 'admin.settings.seo.head_scripts_hint': 'Выполняется на каждой странице (Google Tag Manager, аналитика и т.д.)', 'admin.settings.seo.site_title_label': 'Заголовок сайта', 'admin.settings.seo.site_description_label': 'Описание сайта (meta description)', 'admin.settings.referral.title': 'Партнёрская программа', 'admin.settings.referral.hint': 'Награждайте пользователей, приводящих новых участников.', 'admin.settings.referral.enabled_label': 'Включено', 'admin.settings.referral.enabled_hint': 'Включить / отключить выдачу наград', 'admin.settings.referral.customer_section': 'Для клиентов', 'admin.settings.referral.specialist_section': 'Для помощников', 'admin.settings.referral.plan_label': 'Тарифный план за реферала', 'admin.settings.referral.no_plan': '— без плана —', 'admin.settings.referral.plan_hint': 'Этот план будет назначен пригласившему. Если его текущий план выше — добавятся только дни.', 'admin.settings.referral.days_label': 'Дней награды', 'admin.settings.referral.days_hint': 'Количество дней, добавляемых к сроку действия плана.', 'admin.settings.general.title': 'Общие настройки', 'admin.settings.general.site_name': 'Название сайта', 'admin.settings.general.site_url': 'URL сайта', 'admin.settings.general.contact_email': 'Email для связи', 'admin.settings.general.support_phone': 'Телефон поддержки', 'admin.settings.smtp.title': 'Настройки SMTP сервера', 'admin.settings.smtp.hint': 'Используется для отправки email-уведомлений.', 'admin.settings.smtp.host': 'SMTP Хост', 'admin.settings.smtp.port': 'Порт', 'admin.settings.smtp.encryption': 'Шифрование', 'admin.settings.smtp.enc.none': 'Нет', 'admin.settings.smtp.enc.tls': 'STARTTLS (порт 587)', 'admin.settings.smtp.enc.ssl': 'SSL/TLS (порт 465)', 'admin.settings.smtp.username': 'Имя пользователя', 'admin.settings.smtp.password': 'Пароль / App Password', 'admin.settings.smtp.from_name': 'Имя отправителя', 'admin.settings.smtp.from_email': 'Email отправителя', 'admin.settings.smtp.test': 'Отправить тестовый email', 'admin.settings.smtp.sending': 'Отправка...', 'admin.settings.payment.hint': 'Данные для подключения к ePay Piraeus Bank.', 'admin.settings.env.test': 'Тест (sandbox)', 'admin.settings.env.prod': 'Боевой режим', 'admin.settings.env.label': 'Среда', 'admin.settings.merchant_id': 'Merchant ID', 'admin.settings.api_user': 'API User', 'admin.settings.api_password': 'API Password', 'admin.settings.confirm_url': 'Confirmation URL (webhook)', 'admin.settings.cancel_url': 'Cancel URL', 'admin.settings.active': 'Активен', 'admin.settings.saving': 'Сохранение...', 'admin.settings.saved': 'Сохранено', 'admin.notif.vars_hint': 'Доступные переменные в шаблонах', 'admin.notif.tmpl.not_set': 'Шаблон не настроен', 'admin.notif.tmpl.subject_label': 'Тема письма', 'admin.notif.tmpl.body_label': 'Текст письма (HTML)', 'admin.notif.tmpl.save': 'Сохранить', 'admin.notif.tmpl.close': 'Закрыть', 'admin.notif.tmpl.translate': 'Авто-перевод на другие языки', 'admin.notif.tmpl.translating': 'Перевод...', 'admin.notif.tmpl.saving': 'Сохранение...', 'admin.notif.email_verification': 'Подтверждение email адреса', 'admin.notif.registration_success': 'Успешная регистрация', 'admin.notif.password_reset': 'Восстановление пароля', 'admin.notif.new_offer': 'Новое предложение', 'admin.notif.new_task': 'Новая задача', 'admin.notif.offer_accepted': 'Предложение принято', 'admin.notif.new_message': 'Новое сообщение', 'admin.notif.offer_declined': 'Отклонение предложения', 'admin.notif.offer_other_accepted': 'Выбран другой исполнитель', 'admin.notif.task_updated': 'Изменение задания', 'admin.notif.deadline_reminder': 'Напоминание о дедлайне', 'admin.notif.task_archived': 'Автоснятие задания', 'admin.notif.referral_reward': 'Реферальная награда', // Шаблоны email для тарифов 'admin.email_template.plan_activated': 'Тарифы — активация тарифа', 'admin.email_template.plan_upgraded': 'Тарифы — повышение тарифа', 'admin.email_template.plan_downgrade_scheduled': 'Тарифы — запланированное понижение', 'admin.email_template.plan_downgrade_applied': 'Тарифы — применение понижения', 'admin.email_template.plan_renewal_reminder': 'Тарифы — напоминание о продлении', 'admin.email_template.plan_insufficient_funds': 'Тарифы — нехватка средств', // Модальное окно подтверждения тарифа 'pricing.confirm.title': 'Подтвердите выбор тарифа', 'pricing.confirm.plan': 'Тариф', 'pricing.confirm.prorated': 'Зачёт остатка', 'pricing.confirm.effective_price': 'К оплате', 'pricing.confirm.your_balance': 'Ваш баланс', 'pricing.confirm.downgrade_info': 'Переход на новый тариф произойдёт автоматически после окончания текущего периода.', 'pricing.confirm.insufficient': 'Недостаточно средств на балансе.', 'pricing.confirm.top_up': 'Пополнить', 'pricing.confirm.schedule_downgrade': 'Запланировать переход', 'pricing.confirm.pay': 'Оплатить', 'admin.user_edit.title': 'Редактирование пользователя', 'admin.user_edit.email': 'Email', 'admin.user_edit.email_verified': 'Email подтверждён', 'admin.user_edit.email_not_verified': 'Email не подтверждён', 'admin.user_edit.verify_email_btn': 'Подтвердить вручную', 'admin.user_edit.verify_email_done': 'Email подтверждён!', 'admin.user_edit.id': 'ID', 'admin.user_edit.registered': 'Регистрация', 'admin.user_edit.last_seen': 'Последний визит', 'admin.user_edit.lang': 'Язык', 'admin.user_edit.first_name': 'Имя', 'admin.user_edit.last_name': 'Фамилия', 'admin.user_edit.phone': 'Телефон', 'admin.user_edit.bio': 'О себе', 'admin.user_edit.role': 'Роль', 'admin.user_edit.plan': 'Тариф', 'admin.user_edit.no_plan': '— Без тарифа —', 'admin.user_edit.active': 'Активный аккаунт', 'admin.user_edit.published': 'Опубликована', 'admin.user_edit.balance': 'Баланс (EUR)', 'admin.user_edit.skills': 'Навыки', 'admin.user_edit.tab.profile': 'Профиль', 'admin.user_edit.tab.account': 'Аккаунт', 'admin.user_edit.tab.balance': 'Баланс', 'admin.user_edit.tab.settings': 'Настройки', 'admin.user_edit.tab.specialist': 'Предложения', 'admin.user_edit.tab.site': 'Сайт', 'admin.user_edit.plan_expires': 'Тариф истекает', 'admin.user_edit.interface_lang': 'Язык интерфейса', 'admin.user_edit.comm_languages': 'Языки общения', 'admin.user_edit.personal_site_slug': 'Персональная страница', 'admin.user_edit.show_contact_info': 'Показывать контакты', 'admin.user_edit.show_contact_info.hint': 'Видно заказчикам', 'admin.user_edit.notify_new_tasks': 'Уведомлять о новых задачах', 'admin.user_edit.notify_new_tasks.hint': 'Push и email уведомления', 'admin.user_edit.notif_messages': 'Уведомления о сообщениях', 'admin.user_edit.notif_messages.hint': 'Новые сообщения в чате', 'admin.user_edit.site_settings': 'Настройки персональной страницы', 'admin.user_edit.categories': 'Категории услуг', 'admin.user_edit.locations': 'Районы обслуживания', 'admin.user_edit.skill_placeholder': 'Новый навык...', 'admin.user_edit.add_category': '— Выберите категорию —', 'admin.user_edit.add_location': '— Выберите район —', 'admin.user_edit.specialist_cards': 'Предложения специалиста', 'admin.user_edit.no_cards': 'Предложения не найдены', 'admin.user_edit.card_title': 'Заголовок предложения', 'admin.user_edit.card_description': 'Описание', 'admin.balance.topup.btn': 'Пополнить', 'admin.balance.withdraw.btn': 'Списать', 'admin.balance.modal_hint': 'Изменения применяются сразу и фиксируются в истории', 'admin.balance.topup.title': 'Пополнение баланса', 'admin.balance.topup.amount': 'Сумма', 'admin.balance.topup.description': 'Комментарий', 'admin.balance.topup.description.placeholder': 'Например: бонус или ручное пополнение', 'admin.balance.topup.submit': 'Пополнить баланс', 'admin.balance.withdraw.title': 'Снятие баланса', 'admin.balance.withdraw.amount': 'Сумма', 'admin.balance.withdraw.description': 'Комментарий', 'admin.balance.withdraw.description.placeholder': 'Например: возврат или ручное списание', 'admin.balance.withdraw.submit': 'Списать баланс', 'admin.user_edit.role.customer': 'Заказчик', 'admin.user_edit.role.user': 'Пользователь', 'admin.user_edit.role.specialist': 'Помощник', 'admin.user_edit.role.admin': 'Администратор', 'common.refresh': 'Обновить', 'common.back_home': 'На главную', 'admin.loc.hint': 'Управление городами и районами', 'admin.loc.add_city': 'Новый город', 'admin.loc.add_district': 'Добавить район', 'admin.loc.new': 'Новая локация', 'admin.loc.edit': 'Редактировать локацию', 'admin.loc.district': 'район', 'admin.loc.empty': 'Нет локаций', 'admin.loc.delete.confirm': 'Удалить локацию? Все районы также будут удалены.', 'admin.cat.add_root': 'Новая категория', 'admin.cat.add_sub': 'Подкатегория', 'admin.cat.edit': 'Редактировать', 'admin.cat.delete': 'Удалить', 'admin.cat.delete.confirm': 'Удалить категорию? Все подкатегории также будут удалены.', 'admin.cat.slug': 'Slug', 'admin.cat.icon': 'Иконка', 'admin.cat.name_el': 'Греческий', 'admin.cat.name_en': 'Английский', 'admin.cat.name_ru': 'Русский', 'admin.cat.name_uk': 'Украинский', 'admin.cat.active': 'Активна', 'admin.cat.parent': 'Родительская категория', 'admin.cat.no_parent': 'Верхний уровень', 'admin.cat.save': 'Сохранить', 'admin.cat.cancel': 'Отмена', 'admin.cat.empty': 'Нет категорий', 'admin.cat.hint': 'Управление категориями с многоуровневой иерархией', 'admin.cat.new': 'Новая категория', 'admin.cat.subcategory': 'подкатегория', 'admin.cat.add_child': 'Добавить подкатегорию', 'admin.cat.inactive': 'Неактивна', 'admin.event.user_login': 'Вход', 'admin.event.user_register': 'Регистрация', 'admin.event.admin_user_deactivate': 'Блокировка юзера', 'admin.event.admin_user_activate': 'Разблокировка юзера', 'admin.event.admin_user_role_changed': 'Смена роли', 'admin.event.admin_task_cancelled': 'Отмена задачи', 'admin.event.admin_task_deleted': 'Удаление задачи', 'admin.event.admin_report_reviewed': 'Жалоба рассмотрена', 'admin.event.admin_report_dismissed': 'Жалоба отклонена', 'admin.event.task_created': 'Создана задача', // User status 'user.online': 'Онлайн', 'user.seen_minutes': 'был здесь {n} мин назад', 'user.seen_hours': 'был здесь {n} ч назад', 'user.seen_yesterday': 'был здесь вчера', 'user.seen_days': 'был здесь {n} дн назад', // Specialists 'specialists.title': 'Предложения', 'specialists.search': 'Поиск специалиста...', 'specialists.search.btn': 'Поиск', 'specialists.empty': 'Специалисты не найдены', 'specialists.no_bio': 'Без описания', 'specialists.view': 'Смотреть профиль', 'specialists.reviews': 'отзывов', 'specialist.favorite': 'Добавить в избранное', 'specialist.unfavorite': 'Убрать из избранного', 'specialist.site_link': 'Личный сайт', 'favorites.specialists.title': 'Избранные специалисты', 'favorites.specialists.empty': 'Вы ещё не добавили специалистов в избранное', 'nav.favorites': 'Избранное', 'nav.schedule': 'Расписание', 'nav.find_tasks': 'Поиск заказов', 'schedule.title': 'Моё расписание', 'schedule.subtitle': 'Отмечайте дни когда вы свободны или заняты — заказчики увидят вашу доступность', 'schedule.available': 'Свободен', 'schedule.busy': 'Занят', 'schedule.unset': 'Не указано', 'schedule.click_hint': '← клик меняет статус по кругу', 'schedule.range_mode': 'Выделить диапазон', 'schedule.range_from': 'С {date} — выберите конечную дату', 'schedule.click_to_set': 'Нажмите чтобы отметить', 'schedule.free': 'свободно', 'schedule.busy_count': 'занято', 'schedule.free_days': 'свободных дней', 'schedule.googleCalendar': 'Google Календарь', 'schedule.connectGoogle': 'Подключить Google Календарь', 'schedule.disconnectGoogle': 'Отключить', 'schedule.connectedAs': 'Подключено как', 'schedule.importFromGoogle': 'Синхр. из Google', 'schedule.gcalConnected': '\u2713 Google Календарь подключён', 'schedule.gcalError': 'Ошибка подключения Google Календарь', 'schedule.gcalImportDone': 'Импортировано {n} дней из Google Календарь', 'schedule.gcalAutoSyncNote': 'Изменения доступности автоматически отправляются в Google Календарь', 'schedule.gcalConnectDesc': 'Подключите Google Календарь для автоматической синхронизации расписания', 'schedule.gcalDisconnectConfirm': 'Отключить Google Календарь?', 'find_tasks.title': 'Поиск заказов', 'find_tasks.for_me': 'Для меня', 'find_tasks.all': 'Все заказы', 'find_tasks.by_category': 'По категориям', 'find_tasks.list': 'Списком', 'find_tasks.already_offered': 'Предложение отправлено', 'find_tasks.offer_now': 'Откликнуться', 'find_tasks.empty_for_me': 'Нет заказов в ваших категориях', 'find_tasks.banner_hint': 'Найдите заказы по категориям вашего портфолио', 'find_tasks.no_cards': 'Создайте портфолио специалиста, чтобы видеть подходящие заказы', 'find_tasks.add_card': 'Создать портфолио', 'find_tasks.search': 'Поиск заказов...', 'find_tasks.tasks_count': 'заданий', 'footer.tagline': 'Платформа задач для Греции', 'footer.rights': 'Все права защищены.', 'nav.privacy': 'Политика конфиденциальности', 'nav.delete_account': 'Удаление аккаунта', 'delete_account.title': 'Запрос на удаление аккаунта', 'delete_account.subtitle': 'После проверки вашего запроса мы навсегда удалим ваш аккаунт и данные в течение 30 дней.', 'delete_account.warning': 'Это действие нельзя отменить. Все ваши данные будут удалены безвозвратно.', 'delete_account.reason_label': 'Причина (необязательно)', 'delete_account.reason_placeholder': 'Расскажите, почему вы хотите удалить аккаунт...', 'delete_account.confirm_label': 'Подтверждаю, что хочу навсегда удалить свой аккаунт', 'delete_account.submit': 'Отправить запрос', 'delete_account.submitting': 'Отправка...', 'delete_account.success_title': 'Ваш запрос получен', 'delete_account.success_body': 'Мы обработаем ваш запрос в течение 30 дней и уведомим вас по email.', 'delete_account.login_required': 'Для отправки запроса на удаление необходимо войти в аккаунт.', 'delete_account.login_btn': 'Войти', // App download section 'app.download_title': 'Скачайте мобильное приложение CanHelp', 'app.download_desc': 'Всё CanHelp — всегда под рукой. Доступно для Android и iOS.', // Nav 'nav.pricing': 'Тарифы', // Pricing page 'pricing.title': 'Тарифы', 'pricing.subtitle': 'Выберите подходящий план', 'pricing.role.customer': 'Заказчик', 'pricing.role.specialist': 'Специалист', 'pricing.free': 'Бесплатно', 'pricing.per_month': 'мес', 'pricing.duration': 'Срок', 'pricing.days': 'дн.', 'pricing.current_plan': 'Ваш план', 'pricing.popular': 'Популярный', 'pricing.choose': 'Выбрать', 'pricing.your_plan': 'Активный план', 'pricing.free_default': 'По умолчанию', 'pricing.compare': 'Сравнение функций', 'pricing.feature': 'Функция', 'pricing.faq_note': 'Оплата списывается с баланса CanHelp. Пополнение доступно в разделе Оплата.', 'pricing.feat.messages': 'Сообщений / день', 'pricing.feat.orders': 'Заказов / день', 'pricing.feat.contact_all': 'Связь со всеми', 'pricing.feat.view_phone': 'Просмотр телефона', 'pricing.feat.show_contact': 'Показывать контакты', 'pricing.feat.favorites': 'Избранное', 'pricing.feat.verified_badge': 'Верифицированный бейдж', 'pricing.feat.google_calendar': 'Google Календарь', 'pricing.feat.personal_site': 'Персональный сайт', 'pricing.feat.auto_response': 'Авто-ответ', 'pricing.feat.auto_match': 'Авто-подбор', 'pricing.feat.highlighted_reviews': 'Выделенные отзывы', 'pricing.feat.portfolio': 'Элементов предложения', 'pricing.feat.cards': 'Количество предложений', 'pricing.feat.notify_tasks': 'Уведомления о новых задачах', 'pricing.feat.video': 'Видео в предложении', // Upgrade prompt 'upgrade.available_in': 'Доступно в', 'upgrade.cta': 'Улучшить', // Dashboard plan block 'dashboard.plan.title': 'Мой план', 'dashboard.plan.expires': 'Истекает через {n} дней', 'dashboard.plan.upgrade': 'Улучшить план', 'dashboard.plan.no_plan': 'Бесплатный план', 'dashboard.plan.messages': 'Сообщений сегодня', 'dashboard.plan.orders': 'Заказов сегодня', 'dashboard.plan.limits': 'Дневные лимиты', 'dashboard.plan.features': 'Функции', 'dashboard.plan.stats': 'Статистика', 'dashboard.stats.cards': 'Портфолио', 'dashboard.stats.maxCards': 'Макс. портфолио', 'dashboard.stats.portfolioItems': 'Элементы портфолио', 'dashboard.stats.maxPortfolioItems': 'Макс. элементы', 'dashboard.stats.activeOffers': 'Активные отклики', 'dashboard.stats.reviewsReceived': 'Отзывы', 'dashboard.stats.activeTasks': 'Активные задачи', 'dashboard.stats.completedTasks': 'Завершённые', 'status.need_help': 'Нужна помощь', 'status.active': 'Активен', 'status.toggle_on': 'Включить', 'status.toggle_off': 'Выключить', // FOMO 'fomo.missed_orders': 'Пропущено {n} заказов', 'fomo.missed_value': 'На сумму €{v}', 'fomo.upgrade_hint': 'Улучшите план — получайте больше заказов', 'fomo.conversion': 'Конверсия задач', 'fomo.active': 'Активные', 'fomo.with_offers': 'С офертами', 'fomo.completed': 'Завершённые', 'fomo.already_offered': '{n} специалистов уже откликнулись', 'fomo.specialist_missed': 'Вы пропустили {n} заказов', 'fomo.top_categories': 'Категории', 'fomo.offers_received': 'предложений получено', 'fomo.avg_offers': 'В среднем {n}/задача', 'fomo.completion_rate': 'завершено', // Task auto-match 'task.auto_match': 'Авто-матч', 'task.auto_match_results': 'Топ специалисты', 'task.no_offer_yet': 'Вы ещё не отправили предложение', 'task.make_offer': 'Отправить предложение', 'auto_response.title': 'Авто-ответ', 'auto_response.enabled': 'Включить авто-ответ', 'auto_response.min_budget': 'Мин. бюджет', 'auto_response.max_budget': 'Макс. бюджет', 'auto_response.default_price': 'Цена по умолчанию', 'auto_response.default_message': 'Сообщение по умолчанию', 'auto_response.max_per_day': 'Макс. авто-офертов в день', 'auto_response.save': 'Сохранить', 'auto_response.saved': 'Сохранено', 'auto_response.categories': 'Категории', 'auto_response.locations': 'Локации', // Personal site 'profile.personal_site': 'Персональный сайт', 'profile.site_slug': 'URL slug', 'profile.site_slug_hint': 'Только латинские буквы, цифры, - и _', 'profile.site_open': 'Открыть сайт', 'profile.site_preview': 'Ваш сайт', 'profile.show_contact': 'Показывать контакты', 'profile.show_contact_hint': 'Заказчики с Pro/Ultimate-планом увидят ваш телефон', // Google Calendar plan gate 'gcal.upgrade_required': 'Google Календарь требует план Pro или Ultimate', // Chat limits 'chat.limit_warning': 'Осталось {n} сообщений сегодня', 'chat.limit_reached': 'Лимит сообщений исчерпан. Улучшите план', 'chat.upgrade': 'Улучшить', // Site page 'site.member_since': 'С нами с', 'site.rating': 'Рейтинг', 'site.completed_tasks': 'Выполнено', 'site.languages': 'Языков', 'site.photos': 'фото', 'site.contact_form': 'Связаться', 'site.contact_sent': 'Сообщение отправлено!', 'site.contact_sent_desc': 'Специалист свяжется с вами в ближайшее время', 'site.contact_name': 'Имя', 'site.contact_name_ph': 'Ваше имя', 'site.contact_email_ph': 'your@email.com', 'site.contact_message': 'Сообщение', 'site.contact_message_ph': 'Опишите вашу задачу...', 'site.contact_send': 'Отправить', 'site.share': 'Поделиться', 'site.speaks_languages': 'Говорит на языках', 'site.message_sent': 'Сообщение отправлено!', 'site.message_sent_desc': 'Специалист получит его в чате', 'site.message_placeholder': 'Напишите сообщение...', 'site.write_to_chat': 'Написать в чат', 'site.auth_required_title': 'Нужна авторизация', 'site.auth_required_desc': 'Чтобы написать в чат, необходимо войти в аккаунт CanHelp.', 'site.auth_login_btn': 'Войти в аккаунт', 'site.auth_contact_form_btn': 'Написать через форму обратной связи', 'specialist.services': 'Услуги', 'portfolio.title': 'Портфолио', 'status.can_help_now': 'Готов помочь', 'common.not_found': 'Страница не найдена', 'common.anonymous': 'Анонимно', 'specialist_setup.page_title': 'Настройка профиля специалиста', 'specialist_setup.step_of': 'Шаг {current} из {total}', 'specialist_setup.next': 'Далее', 'specialist_setup.back': 'Назад', 'specialist_setup.skip': 'Пропустить', 'specialist_setup.finish': 'Завершить', 'specialist_setup.go_to_profile': 'Перейти в профиль', 'specialist_setup.browse_tasks': 'Найти задачи', 'specialist_setup.step1.title': 'Добро пожаловать!', 'specialist_setup.step1.subtitle': 'Давайте настроим ваш профиль', 'specialist_setup.step1.desc': 'Полный профиль помогает находить больше клиентов. Следуйте шагам, чтобы создать идеальный профиль специалиста.', 'specialist_setup.step1.what_next': 'Что мы сделаем:', 'specialist_setup.step1.item1': 'Заполним основную информацию', 'specialist_setup.step1.item2': 'Создадим карточку услуги', 'specialist_setup.step1.item3': 'Добавим навыки и категории', 'specialist_setup.step1.item4': 'Выберем географию обслуживания', 'specialist_setup.step1.item5': 'Загрузим фото портфолио', 'specialist_setup.step2.title': 'Базовый профиль', 'specialist_setup.step2.subtitle': 'Расскажите о себе', 'specialist_setup.step2.bio_label': 'О себе', 'specialist_setup.step2.bio_placeholder': 'Опишите ваш опыт, услуги которые вы предлагаете...', 'specialist_setup.step2.phone_label': 'Телефон', 'specialist_setup.step2.phone_placeholder': '+30 6900000000', 'specialist_setup.step2.photo_label': 'Фото профиля', 'specialist_setup.step2.photo_btn': 'Загрузить фото', 'specialist_setup.step2.photo_uploading': 'Загрузка...', 'specialist_setup.step2.photo_hint': 'Отображается в вашем профиле', 'specialist_setup.step3.title': 'Карточка услуги', 'specialist_setup.step3.subtitle': 'Создайте вашу первую карточку услуги', 'specialist_setup.step3.title_label': 'Название карточки', 'specialist_setup.step3.title_placeholder': 'Напр. Сантехник, Электрик, Уборка...', 'specialist_setup.step3.desc_label': 'Описание', 'specialist_setup.step3.desc_placeholder': 'Подробно опишите что вы предлагаете, опыт, преимущества...', 'specialist_setup.step3.title_required': 'Название обязательно', 'specialist_setup.step4.title': 'Навыки и категории', 'specialist_setup.step4.subtitle': 'Добавьте навыки и выберите категории', 'specialist_setup.step4.skills_label': 'Навыки', 'specialist_setup.step4.skills_placeholder': 'Напр. Монтаж труб...', 'specialist_setup.step4.skills_add': 'Добавить', 'specialist_setup.step4.categories_label': 'Категории', 'specialist_setup.step5.title': 'География обслуживания', 'specialist_setup.step5.subtitle': 'Где вы оказываете услуги?', 'specialist_setup.step5.hint': 'Выберите города или конкретные районы', 'specialist_setup.done.title': 'Ваш профиль готов!', 'specialist_setup.done.subtitle': 'Поздравляем! Профиль настроен', 'specialist_setup.done.desc': 'Теперь вы можете получать заказы от клиентов. Найдите задачи, которые соответствуют вашим навыкам.', // Support 'support.title': 'Поддержка', 'support.type.label': 'Тип обращения', 'support.type.bug': 'Ошибка', 'support.type.suggestion': 'Предложение', 'support.type.other': 'Другое', 'support.subject': 'Тема', 'support.subject.placeholder': 'Кратко опишите проблему...', 'support.body': 'Сообщение', 'support.body.placeholder': 'Подробно опишите проблему или предложение...', 'support.submit': 'Отправить', 'support.cancel': 'Отмена', 'support.error': 'Ошибка отправки. Попробуйте ещё раз.', 'support.sent.title': 'Запрос получен!', 'support.sent.body': 'Мы ответим на ваш email в ближайшее время.', 'support.sent.close': 'Закрыть', 'admin.tab.support': 'Поддержка', 'admin.tab.backup': 'Бэкап', 'admin.tab.translations': 'Переводы', 'admin.tab.dbcheck': 'Проверка БД', 'admin.tab.balances': 'Баланс', 'admin.tab.push': 'Push', 'admin.tab.referrals': 'Рефералы', 'admin.search': 'Поиск', 'admin.noData': 'Нет данных', 'admin.cat.order': 'Порядок', 'admin.cat.skills': 'Навыки', 'admin.plans.form.max_tasks': 'Макс. задач', 'admin.settings.referral.shared_section': 'Общие настройки рефералов', 'admin.settings.seo.title': 'SEO настройки', 'admin.backup.title': 'Бэкап', 'admin.backup.tables': 'Таблицы', 'admin.backup.exportAll': 'Экспорт всего', 'admin.backup.importAll': 'Импорт всего', 'admin.backup.exportTable': 'Экспорт таблицы', 'admin.backup.importTable': 'Импорт таблицы', 'admin.backup.exporting': 'Экспорт...', 'admin.backup.importing': 'Импорт...', 'admin.backup.exportSuccess': 'Экспорт завершён', 'admin.backup.importSuccess': 'Импорт завершён', 'admin.backup.autoBackup': 'Автобэкап', 'admin.backup.autoBackupDesc': 'Автоматический ежедневный бэкап', 'admin.backup.storedBackups': 'Сохранённые бэкапы', 'admin.backup.noStoredBackups': 'Сохранённых бэкапов нет', 'admin.backup.restore': 'Восстановить', 'admin.backup.restoreConfirm': 'Восстановить из бэкапа?', 'admin.backup.restoreSuccess': 'Восстановление завершено', 'admin.backup.restoring': 'Восстановление...', 'admin.backup.date': 'Дата', 'admin.backup.size': 'Размер', 'admin.backup.today': 'Сегодня', 'admin.backup.yesterday': 'Вчера', 'admin.balance.col.operation': 'Операция', 'admin.balance.col.amount': 'Сумма', 'admin.balance.col.result': 'Баланс', 'admin.balance.col.description': 'Описание', 'admin.balance.col.date': 'Дата', 'admin.balance.empty': 'Записей пока нет', 'admin.balance.filter.all': 'Все операции', 'admin.balance.filter.user_id': 'Фильтр по userId', 'admin.balance.kind.topup': 'Пополнение', 'admin.balance.kind.plan_purchase': 'Списание за тариф', 'admin.balance.kind.admin_topup': 'Пополнение админом', 'admin.balance.kind.admin_adjustment': 'Корректировка', 'admin.support.search': 'Поиск', 'admin.support.all_statuses': 'Все статусы', 'admin.support.all_types': 'Все типы', 'admin.support.none': 'Обращений нет', 'admin.support.reply': 'Ответить', 'admin.support.reply_placeholder': 'Введите ответ...', 'admin.support.send_reply': 'Отправить ответ', 'admin.support.cancel': 'Отмена', 'admin.support.close': 'Закрыть', 'admin.support.status.open': 'Открыто', 'admin.support.status.in_progress': 'В работе', 'admin.support.status.resolved': 'Решено', 'admin.support.status.closed': 'Закрыто', 'admin.support.your_reply': 'Ваш ответ', 'admin.user_edit.visibility_requirements.title': 'Профиль пока не попадает в «Предложения»', 'admin.user_edit.visibility_requirements.hint': 'Нужно выполнить условия видимости:', 'admin.user_edit.visibility_requirements.bio': 'Заполнить описание (bio)', 'admin.user_edit.visibility_requirements.published_card': 'Опубликовать хотя бы одну карточку', 'admin.user_edit.visibility_requirements.categories': 'Указать категорию в опубликованной карточке', 'admin.user_edit.visibility_requirements.locations': 'Указать локацию в опубликованной карточке', 'auto_response.desc': 'Автоматически отвечать на подходящие задачи', 'auto_response.budget_range': 'Бюджет задачи', 'auto_response.message_placeholder': 'Здравствуйте! Я могу помочь с этой задачей...', 'profile.background.title': 'Фон шапки профиля', 'profile.background.hint': 'Показывается в шапке публичного профиля на web и в мобильном приложении.', 'profile.photo.uploading': 'Загрузка...', 'profile.balance.history': 'Архив операций', 'profile.balance.history.last': 'Последние операции', 'profile.balance.history.empty': 'Операций пока нет', 'profile.balance.history.balance_after': 'Баланс после', 'profile.balance.history.kind.topup': 'Пополнение баланса', 'profile.balance.history.kind.plan_purchase': 'Списание за тариф', 'profile.balance.history.kind.admin_topup': 'Пополнение администратором', 'profile.balance.history.kind.admin_adjustment': 'Корректировка администратором', 'profile.plan_history.title': 'История тарифного плана', 'profile.plan_history.empty': 'История изменений тарифа пока пуста', 'profile.plan_history.expires': 'До', 'profile.plan_history.days': 'дней', 'profile.plan_history.event.activated': 'Активирован', 'profile.plan_history.event.renewed': 'Продлён', 'profile.plan_history.event.downgraded': 'Понижен', 'profile.plan_history.event.referral_reward': 'Реферальная награда', 'profile.plan_history.event.admin_change': 'Изменён администратором', 'profile.plan_history.event.expired': 'Истёк', 'profile.show_contact_desc': 'Позволяет клиентам связаться напрямую', 'profile.site.visible.price_list': 'Прайслист', 'site.pricelist': 'Прайслист', 'status.plan_required': 'Статус недоступен на текущем тарифе', 'status.admin_not_applicable': 'Для аккаунта администратора пользовательский статус не применяется' }, uk: { 'footer.slogan': 'Ваше завдання — наша турбота! Вирішуємо будь-які питання швидко і зручно.', 'footer.links': 'Посилання', 'footer.socials': 'Ми в соцмережах', 'nav.home': 'Головна', 'nav.tasks': 'Завдання', 'nav.post': '+ Опублікувати', 'nav.dashboard': 'Мої завдання', 'nav.chat': 'Повідомлення', 'nav.notifications': 'Сповіщення', 'nav.profile': 'Профіль', 'nav.admin': 'Адмінка', 'nav.specialists': 'Пропозиції', 'nav.new_task': 'Нове завдання', 'nav.login': 'Увійти', 'nav.register': 'Реєстрація', 'nav.logout': 'Вийти', 'hero.title': 'Кожен має навичку, яка може допомогти іншому', 'hero.subtitle': 'Знайди допомогу, запропонуй свої навички або заробляй, допомагаючи іншим', 'hero.cta.post': 'Знайти допомогу', 'hero.cta.browse': 'Запропонувати допомогу', 'hero.cta.specialists': 'Знайти роботу', 'hero.search.placeholder': 'Що потрібно? напр. електрик, прибирання...', 'hero.specialist.title': 'Знайдіть замовлення поруч з вами', 'hero.specialist.subtitle': 'Відкрийте замовлення у своїх категоріях і надішліть пропозицію', 'hero.specialist.cta': 'Знайти замовлення', 'hero.specialist.search.placeholder': 'Пошук замовлень... напр. електрика, прибирання', 'section.categories.specialist': 'Знайдіть замовлення за категорією', 'section.cities.specialist': 'Замовлення за містом', 'how.specialist.step1.title': 'Створіть картку спеціаліста', 'how.specialist.step1.desc': 'Вкажіть категорії, навички і райони — система знайде підходящі замовлення автоматично', 'how.specialist.step2.title': 'Знайдіть підходящі замовлення', 'how.specialist.step2.desc': 'Переглядайте замовлення у своїх категоріях і починайте роботу одразу', 'how.specialist.step3.title': 'Надішліть пропозицію і заробляйте', 'how.specialist.step3.desc': 'Подайте пропозицію з ціною і термінами, спілкуйтеся з клієнтами і виконуйте замовлення', 'stats.specialists': 'пропозиції', 'stats.tasks': 'завдань', 'stats.categories': 'категорій', 'stats.free': 'безкоштовна реєстрація', 'promo.title': 'Отримай Pro безкоштовно — тільки до кінця року', 'promo.subtitle': 'Зареєструйся зараз і користуйся тарифом Pro без оплати. Акція закінчується 31 грудня.', 'promo.cta': 'Зареєструватися', 'promo.days': 'днів', 'promo.hours': 'годин', 'promo.minutes': 'хвилин', 'promo.seconds': 'сек.', 'section.categories': 'Створи завдання у будь-якій категорії', 'section.how': 'Як це працює', 'section.recent': 'Останні завдання', 'section.all': 'Дивитись всі →', 'section.more': 'ще', 'section.cities': 'Міста і райони', 'section.community': 'Суспільний проект для всіх', 'community.subtitle': 'CanHelp — не просто маркетплейс, це спільнота взаємодопомоги. Будь-хто, хто має знання або навичку, може знайти клієнта. Будь-хто, у кого є завдання, може знайти спеціаліста.', 'community.point1.title': 'Вмієте щось робити?', 'community.point1.desc': 'Ремонт, репетиторство, дизайн, переклади, догляд — кожна навичка має цінність. Створіть профіль і знаходьте клієнтів поруч.', 'community.point2.title': 'Потрібна допомога?', 'community.point2.desc': 'Опублікуйте завдання за хвилину і отримуйте пропозиції від перевірених спеціалістів у вашому місті.', 'community.point3.title': 'Допоможіть проекту рости', 'community.point3.desc': 'CanHelp розвивається завдяки спільнотам. Поділіться посиланням з друзями і знайомими — разом ми будуємо щось корисне для всіх.', 'community.share': 'Поділитися з друзями', 'community.share.copied': 'Посилання скопійовано!', 'section.referral': 'Реферальна програма', 'referral.home.subtitle': 'Поділіться посиланням — кожен новий користувач, зареєстрований через нього, принесе вам нагороду.', 'referral.home.step1.title': 'Зареєструйтесь і отримайте посилання', 'referral.home.step1.desc': 'Створіть акаунт і знайдіть своє унікальне реферальне посилання в профілі.', 'referral.home.step2.title': 'Поділіться з друзями', 'referral.home.step2.desc': 'Надішліть посилання друзям, знайомим або опублікуйте в соціальних мережах.', 'referral.home.step3.title': 'Отримуйте нагороди', 'referral.home.step3.desc': 'Як тільки друг підтвердить email, ви автоматично отримаєте свою нагороду.', 'referral.home.cta': 'Отримати посилання', 'referral.home.badge': 'Реферальна програма', 'section.faq': 'Часті запитання', 'faq.q1': 'Як працює CanHelp?', 'faq.a1': 'Опублікуйте завдання, отримайте пропозиції від спеціалістів, виберіть найкращого і почніть співпрацю. Це швидко, просто і безкоштовно для клієнтів.', 'faq.q2': 'Скільки коштує використання платформи?', 'faq.a2': 'Реєстрація і публікація завдань повністю безкоштовні для клієнтів. Спеціалісти мають доступ до безкоштовного плану, а також до преміум-опцій.', 'faq.q3': 'Як стати спеціалістом?', 'faq.a3': 'Зареєструйтесь, перейдіть у «Стати спеціалістом», заповніть профіль навичками і категоріями і починайте отримувати завдання.', 'faq.q4': 'Як вибрати підходящого спеціаліста?', 'faq.a4': 'Оцініть відгуки, досвід, навички і портфоліо кожного спеціаліста. Спілкуйтеся через чат платформи і уточнюйте деталі до прийняття рішення.', 'faq.q5': 'Що якщо я не задоволений результатом?', 'faq.a5': 'Ви можете залишити відгук про спеціаліста і поставити оцінку від 1 до 5 зірок. Відгуки допомагають іншим користувачам вибирати перевірених професіоналів.', 'faq.q6': 'Чи можна зв\'язатись зі спеціалістом до прийняття пропозиції?', 'faq.a6': 'Так. Як тільки ви отримали пропозицію, можна відкрити чат зі спеціалістом, задати питання і уточнити всі деталі до прийняття рішення.', 'faq.q7': 'Скільки часу чекати пропозицій?', 'faq.a7': 'Як правило, протягом кількох годин. Спеціалісти отримують сповіщення про нові завдання і можуть швидко відповісти.', 'faq.q8': 'Чи можна розмістити завдання у будь-якому місті Греції?', 'faq.a8': 'Так! CanHelp охоплює всю Грецію — Афіни, Салоніки, Патри та інші міста.', 'faq.q9': 'Які види завдань є на CanHelp?', 'faq.a9': 'Ремонт, прибирання, електрика, репетиторство, дизайн, IT, переїзди, краса та багато іншого. Категорії постійно розширюються.', 'faq.q10': 'Чи є мобільний додаток?', 'faq.a10': 'Так! CanHelp доступний для Android та iOS. Завантажте додаток і керуйте всім зі свого телефону.', 'how.step1.title': 'Опублікуй завдання', 'how.step1.desc': 'Опиши що потрібно і встанови бюджет', 'how.step2.title': 'Отримай пропозиції', 'how.step2.desc': 'Спеціалісти надішлють пропозиції з ціною і термінами', 'how.step3.title': 'Обери і почни', 'how.step3.desc': 'Обери найкращого професіонала і почни співпрацю', 'tasks.title': 'завдань', 'tasks.filters': 'Фільтри', 'tasks.search': 'Пошук', 'tasks.search.placeholder': 'Назва або ключове слово...', 'tasks.search.btn': 'Пошук', 'tasks.publish': 'Опублікувати', 'tasks.category.all': 'Всі', 'tasks.category.all_in': 'Всі в', 'tasks.category.label': 'Категорія', 'tasks.location.label': 'Місто', 'tasks.location.placeholder': 'напр. Афіни', 'tasks.empty': 'Завдань не знайдено', 'tasks.empty.cta': 'Опублікуй перше', 'task.status.open': 'Відкрито', 'task.status.in_progress': 'В роботі', 'task.status.completed': 'Завершено', 'task.status.cancelled': 'Скасовано', 'task.status.draft': 'Чернетка', 'task.budget': 'Бюджет', 'task.location': 'Місцезнаходження', 'task.deadline': 'Дата початку', 'task.expires_at': 'Активно до', 'task.created_at': 'Створено', 'task.customer': 'Замовник', 'task.offer.btn': 'Надіслати пропозицію', 'task.invite.banner_title': 'Вас запросили на це завдання', 'task.invite.banner_hint': 'Замовник особисто запросив вас', 'task.invite.accept': 'Надіслати пропозицію', 'task.invite.decline': 'Відмовитися', 'offer.accept': 'Прийняти', 'offer.decline': 'Відхилити', 'task.complete': 'Завершити завдання', 'task.complete.confirm': 'Позначити завдання як виконане?', 'task.edit': 'Редагувати', 'task.status_label': 'Статус', 'task.yours': 'Ваше завдання', 'task.offer.yours': 'Ваша пропозиція', 'review.leave': 'Залишити відгук', 'review.rating': 'Оцінка', 'review.comment': 'Коментар', 'review.comment.placeholder': 'Розкажіть про свій досвід...', 'review.submit': 'Надіслати відгук', 'review.submitting': 'Надсилання...', 'review.done': 'Відгук надіслано!', 'profile.reviews': 'Відгуки', 'profile.no_reviews': 'Відгуків поки немає', 'profile.rating': 'Рейтинг', 'profile.skills.label': 'Навички', 'profile.member_since': 'Учасник з', 'task.offers': 'Пропозиції', 'task.offers.none': 'Пропозицій поки немає', 'create.title': 'Опублікувати завдання', 'create.field.title': 'Назва', 'create.field.description': 'Опис', 'create.field.category': 'Категорія', 'create.field.category.select': 'Оберіть...', 'create.field.location': 'Місцезнаходження', 'create.field.location.any': 'Де завгодно', 'create.field.location.all': 'Все місто', 'create.field.budget': 'Бюджет (€)', 'create.field.deadline': 'Дата початку', 'create.field.expires_at': 'Оголошення активне', 'create.field.expires_at.days': '{n} днів', 'create.field.budget_negotiable': 'Ціна обговорюється', 'create.field.time_slot': 'Час виконання', 'create.field.time_slot.any': 'У будь-який час', 'create.field.time_slot.morning': 'Вранці (08:00–13:00)', 'create.field.time_slot.afternoon': 'Вдень (13:00–18:00)', 'create.field.time_slot.evening': 'Ввечері (18:00–22:00)', 'create.field.time_slot.weekend': 'Вихідний', 'create.field.address': 'Адреса (необов\'язково)', 'create.field.address.district': 'Квартал', 'create.field.address.street': 'Вулиця', 'create.field.address.house': 'Будинок', 'create.field.confidential': 'Конфіденційна нотатка', 'create.field.confidential.placeholder': 'Деталі, видні тільки призначеному спеціалісту...', 'create.field.confidential.hint': 'Не відображається публічно', 'create.field.photos': 'Фотографії', 'create.field.photos.add': 'Додати фото', 'create.field.photos.uploading': 'Завантаження...', 'task.budget_negotiable': 'Ціна обговорюється', 'task.time_slot': 'Час', 'task.confidential': 'Конфід. нотатка', 'create.field.title.placeholder': 'напр. Прибирання квартири 80кв', 'create.field.description.placeholder': 'Детально опишіть що потрібно...', 'create.field.location.placeholder': 'напр. Афіни, Колонаки', 'create.field.budget.placeholder': 'напр. 100', 'create.submit': 'Опублікувати завдання', 'create.submitting': 'Публікація...', 'login.title': 'Ласкаво просимо', 'login.subtitle': 'Вхід до CanHelp', 'login.email': 'Email', 'login.password': 'Пароль', 'login.submit': 'Увійти', 'login.submitting': 'Вхід...', 'login.error': 'Невірний email або пароль', 'login.unverified.title': 'Підтвердіть ваш email', 'login.unverified.desc': 'Ми надіслали посилання для підтвердження на ваш email. Перевірте вхідні (або спам) і перейдіть за посиланням.', 'login.unverified.resend': 'Надіслати лист повторно', 'login.unverified.sending': 'Надсилання...', 'login.unverified.sent': '✓ Надіслано — перевірте вхідні', 'profile.email.verified': 'Email підтверджено', 'profile.email.not_verified': 'Email не підтверджено', 'login.no_account': 'Немає акаунту?', 'login.register_link': 'Зареєструватися', 'login.forgot_password': 'Забув пароль?', 'login.or_continue_with': 'або продовжте через', 'login.continue_google': 'Увійти через Google', 'forgot.title': 'Забув пароль', 'forgot.subtitle': 'Введіть email для отримання посилання відновлення', 'forgot.email': 'Email', 'forgot.submit': 'Надіслати посилання', 'forgot.submitting': 'Надсилання...', 'forgot.sent.title': 'Перевірте вхідні', 'forgot.sent.desc': 'Якщо акаунт з таким email існує, ми надішлемо посилання для скидання пароля.', 'forgot.back_to_login': 'Повернутися до входу', 'forgot.error': 'Не вдалося надіслати посилання. Перевірте адресу і спробуйте знову.', 'forgot.error.not_found': 'Акаунт з таким email не знайдено.', 'forgot.error.send_failed': 'Помилка надсилання листа. Спробуйте пізніше.', 'reset.title': 'Новий пароль', 'reset.subtitle': 'Введіть новий пароль', 'reset.password': 'Новий пароль', 'reset.confirm': 'Підтвердіть пароль', 'reset.submit': 'Змінити пароль', 'reset.submitting': 'Збереження...', 'reset.success': 'Пароль успішно змінено. Перенаправлення до входу...', 'reset.back_to_login': 'Повернутися до входу', 'reset.error.mismatch': 'Паролі не збігаються', 'reset.error.invalid': 'Недійсне або застаріле посилання. Запросіть нове.', 'register.title': 'Реєстрація', 'register.subtitle': 'Створити акаунт в CanHelp', 'register.first_name': 'Ім\'я', 'register.last_name': 'Прізвище', 'register.email': 'Email', 'register.password': 'Пароль (мін. 8 символів)', 'register.role': 'Роль', 'register.role.customer': 'Користувач', 'register.role.customer.desc': 'Публікую завдання', 'register.role.specialist': 'Спеціаліст', 'register.role.specialist.desc': 'Беру завдання', 'register.submit': 'Створити акаунт', 'register.submitting': 'Реєстрація...', 'register.has_account': 'Вже є акаунт?', 'register.login_link': 'Увійти', 'register.continue_google': 'Зареєструватися через Google', 'register.check_email.title': 'Перевірте пошту', 'register.check_email.desc': 'Ми надіслали посилання для підтвердження на ваш email. Перевірте вхідні (або спам) і перейдіть за посиланням.', 'register.check_email.login': 'Повернутися до входу', 'register.captcha_failed': 'Перевірка CAPTCHA не пройдена. Пройдіть перевірку безпеки та спробуйте знову.', 'dashboard.title': 'Панель управління', 'dashboard.new_task': '+ Нове завдання', 'dashboard.onboarding.title': 'Ласкаво просимо до CanHelp 👋', 'dashboard.onboarding.subtitle': 'Оберіть, з чого хочете почати.', 'dashboard.onboarding.helper.title': 'Запропонуйте свою допомогу', 'dashboard.onboarding.helper.desc': 'Заповніть анкету — навички, категорії та міста. Це займе кілька хвилин, і ви почнете отримувати замовлення.', 'dashboard.onboarding.helper.cta': 'Заповнити анкету', 'dashboard.onboarding.requester.title': 'Потрібна допомога?', 'dashboard.onboarding.requester.desc': 'Опублікуйте завдання — помічники надішлють вам свої пропозиції.', 'dashboard.onboarding.requester.cta': 'Опублікувати завдання', 'dashboard.my_tasks': 'Мої завдання', 'dashboard.my_offers': 'Мої пропозиції', 'dashboard.invitations': 'Запрошення на завдання', 'dashboard.offers_count': 'проп.', 'dashboard.declined_count': 'відх.', 'dashboard.completed_tasks': 'Завершені завдання', 'dashboard.completed_offers': 'Завершені пропозиції', 'dashboard.review_pending': 'Оцінка ще не залишена', 'tasks.new.top_specialists': 'Топ спеціалісти', 'tasks.new.select_category': 'Виберіть категорію, щоб побачити спеціалістів', 'tasks.new.invite': 'Запропонувати роботу', 'tasks.new.invited': 'Вибрано ✓', 'reviews.count': 'відгуків', 'filter.location': 'Локація', 'filter.language': 'Мови', 'filter.language.any': 'Будь-яка мова', 'filter.category.all': 'Всі категорії', 'user.categories': 'Категорії', 'user.work_area': 'Район роботи', 'user.specialist_cards': 'Картки послуг', 'card.skills': 'Навички', 'card.categories': 'Категорії', 'card.geography': 'Район роботи', 'card.portfolio': 'Портфоліо', 'card.close': 'Закрити', 'dashboard.tasks.empty': 'Ви не публікували завдання', 'dashboard.tasks.empty.cta': 'Опублікуйте перше', 'dashboard.tasks.add_new': 'Додати нове завдання', 'dashboard.offers.empty': 'Ви не надсилали пропозицій', 'dashboard.offers.empty.cta': 'Знайти завдання', 'dashboard.customer.specialists_title': 'Шукаєте виконавця?', 'dashboard.customer.specialists_hint': 'Переглядайте профілі спеціалістів, читайте відгуки і запрошуйте їх на свої завдання', 'dashboard.customer.specialists_cta': 'Знайти виконавця', 'dashboard.customer.how_title': 'Як це працює', 'dashboard.customer.step1': 'Створіть завдання з описом і бюджетом', 'dashboard.customer.step2': 'Спеціалісти надішлють пропозиції з ціною і термінами', 'dashboard.customer.step3': 'Оберіть підходящого і почніть роботу', 'notif.title': 'Сповіщення', 'notif.mark_all': 'Позначити всі як прочитані', 'notif.empty': 'Немає сповіщень', 'notif.type.generic': 'Сповіщення', 'notif.type.new_offer': 'Нова пропозиція', 'notif.type.offer_accepted': 'Вашу пропозицію прийнято', 'notif.type.offer_declined': 'Вашу пропозицію відхилено', 'notif.type.task_completed': 'Завдання виконано', 'notif.type.task_cancelled': 'Завдання скасовано', 'notif.type.new_message': 'Нове повідомлення', 'notif.type.new_review': 'Новий відгук', 'notif.type.task_invite': 'Запрошення на завдання', 'notif.type.referral_reward': 'Реферальна нагорода', 'notif.type.specialist_card_submitted': 'Картку надіслано на перевірку', 'notif.type.specialist_card_approved': 'Картку схвалено', 'notif.type.specialist_card_rejected': 'Картку відхилено', 'notif.body.new_offer': 'Нова пропозиція на «{title}»', 'notif.body.offer_accepted': 'Вашу пропозицію на «{title}» прийнято', 'notif.body.offer_declined': 'Вашу пропозицію на «{title}» відхилено', 'notif.body.task_invite': 'Вас запрошують на «{title}»', 'notif.body.new_review': 'Ви отримали оцінку {rating}★', 'notif.body.referral_reward': 'На ваш акаунт додано {days} днів доступу до плану «{plan}»!', 'notif.body.specialist_card_submitted': 'Картку «{title}» надіслано на перевірку', 'notif.body.specialist_card_approved': 'Картку «{title}» схвалено та опубліковано', 'notif.body.specialist_card_rejected': 'Картку «{title}» не було схвалено. Виправте її та надішліть знову.', 'offer.status.pending': 'Очікує', 'offer.status.accepted': 'Прийнято', 'offer.status.declined': 'Відхилено', 'offer.status.withdrawn': 'Відкликано', 'offer.status.other_accepted': 'Вибрано іншого виконавця', 'common.loading': 'Завантаження...', 'common.error': 'Помилка', 'common.save': 'Зберегти', 'common.saving': 'Збереження...', 'common.cancel': 'Скасувати', 'common.add': 'Додати', 'common.close': 'Закрити', 'common.edit': 'Редагувати', 'common.delete': 'Видалити', 'common.from': 'від', 'common.currency': '€', 'common.greece': 'Греція', 'chat.connected': 'Підключено', 'chat.disconnected': 'Відключено', 'chat.no_rooms': 'Переписок поки немає', 'chat.task_fallback': 'Завдання', 'chat.select': 'Виберіть переписку', 'chat.no_messages': 'Повідомлень поки немає', 'chat.placeholder': 'Напишіть повідомлення... (Enter для надсилання)', 'chat.conversation_fallback': 'Переписка', 'chat.direct_chat': 'Особистий чат', 'chat.linked_task': 'Прикріплене замовлення', 'chat.write_btn': 'Написати', 'chat.just_now': 'щойно', 'chat.min_ago': 'хв', 'chat.write_specialist': 'Написати спеціалісту', 'chat.write_customer': 'Написати замовнику', 'chat.notif_settings': 'Налаштування сповіщень', 'chat.notif_messages': 'Сповіщення про нові повідомлення', 'chat.toast_title': 'Нове повідомлення', 'chat.toast_open': 'Відкрити чат', 'offer.price': 'Ціна', 'offer.price.placeholder': 'напр. 80', 'offer.customer_budget': 'Бюджет замовника', 'offer.message': 'Повідомлення', 'offer.optional': 'необов\'язково', 'offer.message.placeholder': 'Представтеся, розкажіть про досвід і чому ви найкращий вибір...', 'offer.submitting': 'Надсилання...', 'profile.photo': 'Фото профілю', 'profile.photo.change': 'Змінити фото', 'profile.photo.hint': 'JPEG, PNG, WebP · до 5MB', 'profile.basic_info': 'Основна інформація', 'profile.phone': 'Телефон', 'profile.phone.placeholder': '+30 6901234567', 'profile.bio': 'Короткий опис', 'profile.bio.placeholder': 'Розкажіть трохи про себе...', 'profile.language': 'Мова', 'profile.language.hint': 'Мова інтерфейсу і email-сповіщень', 'profile.languages': 'Мови спілкування', 'profile.languages.hint': 'Виберіть усі мови, якими ви спілкуєтесь', 'profile.skills': 'Навички', 'profile.skills.subtitle': 'Додайте послуги, які ви пропонуєте', 'profile.skills.placeholder': 'напр. Прибирання, IT, Репетиторство...', 'profile.role': 'Роль акаунту', 'profile.role.specialist': '🔧 Помічник', 'profile.role.admin': '👑 Admin', 'profile.role.customer': '👤 Користувач', 'profile.role.user': '👤 Користувач', 'profile.role.change': 'Для зміни ролі зверніться до служби підтримки.', 'profile.become_specialist': 'Запропонувати допомогу', 'profile.become_specialist.desc': 'Створи профіль помічника, запропонуй свої навички та почни отримувати завдання.', 'become_specialist.hero.title': 'Запропонуй свої навички і почни заробляти', 'become_specialist.hero.subtitle': 'Створи профіль помічника та отримуй запити від людей, яким потрібна допомога', 'become_specialist.how.title': 'Як це працює', 'become_specialist.step1.title': 'Створи портфоліо спеціаліста', 'become_specialist.step1.desc': 'Вкажи категорії, навички і зону покриття — система автоматично підбере підходящі замовлення', 'become_specialist.step2.title': 'Шукай замовлення', 'become_specialist.step2.desc': 'Переглядай завдання по своїх категоріях у розділі «Пошук замовлень»', 'become_specialist.step3.title': 'Відгукуйся і заробляй', 'become_specialist.step3.desc': 'Надсилай пропозиції з ціною і термінами, спілкуйся з клієнтами і виконуй замовлення', 'become_specialist.benefits.title': 'Переваги профілю спеціаліста', 'become_specialist.benefit1': 'Пошук замовлень за категоріями і локацією', 'become_specialist.benefit2': 'Публічний профіль з відгуками клієнтів', 'become_specialist.benefit3': 'Розклад доступності, видимий клієнтам', 'become_specialist.benefit4': 'Додавання до обраного клієнтами', 'become_specialist.cta': 'Детальніше', 'become_specialist.free_badge': 'Безкоштовна реєстрація', 'profile.tab.notifications': 'Сповіщення', 'profile.tab.reviews': 'Відгуки', 'profile.tab.referral': 'Реферали', 'profile.tab.auto_response': 'Авто-відповідь', 'profile.tab.site': 'Сайт', 'profile.site.title': 'Персональна сторінка', 'profile.site.url_label': 'Особистий сайт', 'profile.site.copy': 'Копіювати', 'profile.site.copied': 'Скопійовано', 'profile.site.visible_title': 'Що відображається на вашій сторінці', 'profile.site.visible.name': 'Ім\'я і фото', 'profile.site.visible.bio': 'Біографія', 'profile.site.visible.rating': 'Рейтинг і відгуки', 'profile.site.visible.portfolio': 'Портфоліо / Картки', 'profile.site.visible.contacts': 'Контактні дані', 'profile.site.visible.full_last_name': 'Прізвище повністю', 'profile.site.visible.services': 'Картки послуг', 'profile.site.visible.reviews': 'Розділ з відгуками', 'profile.site.visible.status': 'Статус «Готовий допомогти»', 'profile.site.theme': 'Тема оформлення', 'profile.site.theme.dark': 'Темна', 'profile.site.theme.light': 'Світла', 'profile.site.slug_taken': 'Ця адреса вже зайнята', 'profile.site.stats.title': 'Аналітика сайту', 'profile.site.stats.days': 'останні 30 днів', 'profile.site.stats.views': 'Перегляди', 'profile.site.stats.unique': 'Унікальні відвідувачі', 'profile.site.stats.messages': 'Повідомлення', 'profile.site.stats.total_views': 'Перегляди', 'profile.site.stats.total_unique': 'Унік. відвідувачі', 'profile.site.stats.total_messages': 'Повідомлення', 'profile.site.stats.empty': 'Даних поки немає', 'profile.site.stats.loading': 'Завантаження аналітики...', 'profile.site.stats.no_slug': 'Вкажіть адресу сайту, щоб бачити статистику', 'profile.site.edit_bio_hint': 'Біографія і фото налаштовуються у вкладці «Основне».', 'profile.site.seo.title': 'SEO — мета-дані сайту', 'profile.site.seo.hint': 'Відображається в пошуковиках. При збереженні автоматично перекладається на всі мови.', 'profile.site.seo.site_title': 'Заголовок сторінки', 'profile.site.seo.site_title_placeholder': 'Іван Іванов — Електрик в Афінах', 'profile.site.seo.site_desc': 'Мета-опис', 'profile.site.seo.site_desc_placeholder': 'Короткий опис для пошуковиків...', 'status.title': 'Статус', 'status.can_help_now_hint': 'Ваша картка показується вище у пошуку', 'status.need_help_hint': 'Спеціалісти можуть запропонувати вам допомогу', 'profile.referral.title': 'Партнерська програма', 'profile.referral.desc': 'Поділіться посиланням і отримуйте нагороду за кожного залученого користувача.', 'profile.referral.link_label': 'Ваше реферальне посилання', 'profile.referral.copy': 'Копіювати', 'profile.referral.copied': 'Скопійовано!', 'profile.referral.invited_count': 'успішних запрошень', 'profile.referral.no_code': 'Реферальний код недоступний.', 'notifications.title': 'Налаштування сповіщень', 'notifications.email.new_tasks': 'Email про нові замовлення', 'notifications.email.new_tasks.desc': 'Отримувати email, коли у ваших категоріях публікується нове замовлення', 'notifications.messages.desc': 'Отримувати сповіщення при новому вхідному повідомленні', 'notifications.saved': 'Налаштування збережено', 'notifications.plan_required': 'Недоступно у вашому тарифі', 'profile.tab.info': 'Основне', 'profile.tab.finance': 'Фінанси', 'profile.tab.skills': 'Навички', 'profile.tab.categories': 'Категорії', 'profile.tab.geography': 'Географія', 'profile.specialist.categories': 'Категорії робіт', 'profile.specialist.categories.desc': 'Виберіть категорії, в яких ви працюєте', 'profile.specialist.geography': 'Міста покриття', 'profile.specialist.geography.desc': 'Виберіть міста / райони, де ви працюєте', 'profile.saving': 'Збереження...', 'profile.upload.error': 'Помилка завантаження фото', 'profile.saved': 'Збережено', 'profile.tab.cards': 'Пропозиції', 'profile.cards.count': 'Пропозиції', 'profile.cards.add': 'Додати пропозицію', 'profile.cards.new_title': 'Назва нової пропозиції', 'profile.cards.placeholder': 'Наприклад: Сантехніка', 'profile.cards.create': 'Створити', 'profile.cards.cancel': 'Скасувати', 'profile.cards.empty': 'У вас немає пропозицій', 'profile.cards.empty_hint': 'Створіть першу картку, щоб показати послуги клієнтам.', 'profile.cards.create_first': 'Створити першу пропозицію', 'profile.cards.delete_confirm': 'Видалити пропозицію?', 'profile.background.change': 'Змінити фон', 'profile.background.remove': 'Видалити фон', 'profile.listing_requirements.published_card': 'Опублікуйте хоча б одну картку', 'profile.listing_requirements.title': 'Ваш профіль поки не показується в розділі «Пропозиції»', 'profile.listing_requirements.hint': 'Щоб картка відображалась, виконайте умови:', 'profile.listing_requirements.bio': 'Додайте коротку інформацію про себе в «Основне»', 'profile.listing_requirements.categories': 'Укажіть хоча б одну категорію в активній картці', 'profile.listing_requirements.locations': 'Укажіть хоча б одну локацію в активній картці', 'profile.listing_requirements.card_inactive': 'Зробіть картку активною', 'profile.listing_requirements.review_pending': 'Картка на розгляді', 'profile.card.visibility_issue': 'Картка не відображається в розділі «Пропозиції»', 'profile.card.tab.main': 'Основне', 'profile.card.tab.skills': 'Навички', 'profile.card.tab.categories': 'Категорії', 'profile.card.tab.geography': 'Географія', 'profile.card.tab.portfolio': 'Галерея', 'profile.card.tab.pricelist': 'Прайс-лист', 'profile.card.pricelist.empty': 'Групи прайс-листа ще не додані.', 'profile.card.pricelist.add_group': 'Додати групу', 'profile.card.pricelist.group_title': 'Назва групи', 'profile.card.pricelist.add_item': 'Додати позицію', 'profile.card.pricelist.item_name': 'Послуга / робота', 'profile.card.pricelist.item_desc': 'Опис (необов\'язково)', 'profile.card.pricelist.item_price': 'Ціна', 'profile.card.pricelist.item_unit': 'Одиниця (наприклад /год)', 'profile.card.pricelist.save_group': 'Зберегти групу', 'profile.card.pricelist.save_item': 'Зберегти', 'profile.card.pricelist.delete_group': 'Видалити групу', 'profile.card.pricelist.delete_item': 'Видалити', 'profile.card.active': 'Активна', 'profile.card.review_pending': 'На розгляді', 'profile.card.review_pending_hint': 'Вашу картку зараз перевіряє адміністрація.', 'profile.card.review_submitted': 'Картку надіслано на перевірку', 'profile.card.review_approved': 'Картку схвалено', 'profile.card.review_approved_hint': 'Ваша картка тепер відображається в пропозиціях.', 'profile.card.review_rejected': 'Картку відхилено', 'profile.card.review_rejected_hint': 'Картку не було схвалено. Виправте її та надішліть знову.', 'profile.card.submit_review': 'Надіслати на розгляд', 'profile.card.withdraw_review': 'Відкликати заявку', 'profile.card.unpublish': 'Зняти з публікації', 'profile.card.save': 'Зберегти', 'profile.card.saved': 'Збережено', 'profile.card.delete': 'Видалити', 'profile.card.skill.add': 'Додати навичку', 'profile.card.photo.add': 'Додати фото', 'profile.card.photo.uploading': 'Завантаження...', 'profile.card.photo.empty': 'Немає фотографій', 'profile.card.item.title': 'Заголовок', 'profile.card.item.desc': 'Опис', 'profile.card.item.save': 'Зберегти', 'profile.card.item.cancel': 'Скасувати', 'profile.card.item.edit': 'Опис роботи', 'profile.card.description': 'Опис картки', 'profile.card.desc_auto_translate': 'При збереженні буде автоматично перекладено на інші мови', 'profile.card.desc_translated': 'Є переклади:', 'profile.upgrade.cards_limit': 'Ліміт портфоліо вичерпано', 'profile.upgrade.plan': 'Поточний тариф:', 'profile.upgrade.contact': 'Зверніться до адміністратора для зміни тарифу', 'profile.upgrade.ok': 'Зрозуміло', 'profile.plan.title': 'Тарифний план', 'profile.balance': 'Баланс', 'profile.balance.topup': 'Поповнити баланс', 'profile.balance.topup.title': 'Поповнити баланс', 'profile.balance.topup.amount': 'Сума (в EUR)', 'profile.balance.topup.hint': 'Виберіть суму або введіть вручну', 'profile.balance.topup.submit': 'Перейти до оплати', 'profile.balance.topup.loading': 'Перенаправлення...', 'profile.balance.topup.error': 'Помилка ініціалізації платежу. Спробуйте знову.', 'payment.success.title': 'Оплата пройшла успішно!', 'payment.success.desc': 'Ваш баланс оновлено.', 'payment.cancelled.title': 'Оплату скасовано', 'payment.cancelled.desc': 'Оплату було скасовано. Кошти не списано.', 'payment.pending.title': 'Обробляється...', 'payment.pending.desc': 'Ваш платіж в обробці.', 'payment.back_to_profile': 'Повернутися в профіль', 'profile.plan.basic': 'Базовий (безкоштовний)', 'profile.plan.contact_upgrade': 'Зверніться до адміністратора для підключення тарифу', 'profile.plan.cards_up_to': 'Портфоліо: до', 'profile.plan.cards_unlimited': 'Портфоліо: безліміт', 'profile.plan.tasks_up_to': 'Завдань: до', 'profile.plan.offers_up_to': 'Відгуків: до', 'profile.plan.valid_until': 'Дійсний до', 'profile.plan.no_expiry': 'Безстроково', 'create.error': 'Помилка при публікації', 'tasks.category.general': 'Загальне', 'tasks.budget.range': 'Діапазон:', 'tasks.budget.from': 'від', 'tasks.budget.to': 'до', 'tasks.filter.reset': 'Скинути фільтри', 'tasks.load_more': 'Завантажити ще', 'tasks.showing': 'Результатів:', 'tasks.field.budget': 'Бюджет, €', 'admin.title': 'Панель адміністратора', 'admin.tab.stats': 'Статистика', 'admin.tab.users': 'Користувачі', 'admin.tab.tasks': 'Завдання', 'admin.tab.reports': 'Скарги', 'admin.tab.moderation': 'Модерація', 'admin.stats.users': 'Користувачі', 'admin.stats.tasks': 'Завдання', 'admin.stats.offers': 'Пропозиції', 'admin.stats.reviews': 'Відгуки', 'admin.tasks.by_status': 'Завдання за статусом', 'admin.col.user': 'Користувач', 'admin.col.email': 'Email', 'admin.col.role': 'Роль', 'admin.col.registered': 'Реєстрація', 'admin.col.status': 'Статус', 'admin.col.title': 'Назва', 'admin.col.budget': 'Бюджет', 'admin.col.created': 'Створено', 'admin.users.active': 'Активний', 'admin.users.inactive': 'Неактивний', 'admin.users.deactivate': 'Деактивувати', 'admin.users.activate': 'Активувати', 'admin.tasks.cancel': 'Скасувати', 'admin.reports.none': 'Скарг немає', 'admin.moderation.none': 'Немає пропозицій для перевірки', 'admin.moderation.pending': 'В очікуванні', 'admin.moderation.active': 'Активно', 'admin.moderation.approve': 'Підтвердити', 'admin.moderation.block': 'Заблокувати', 'admin.moderation.pending_title': 'Пропозиції на підтвердження', 'admin.moderation.active_title': 'Активні пропозиції', 'admin.moderation.pending_count': 'В очікуванні', 'admin.moderation.active_count': 'Активні', 'admin.moderation.pending_hint': 'Нові пропозиції, які очікують підтвердження', 'admin.moderation.active_hint': 'Активні пропозиції, які можна заблокувати', 'admin.moderation.pending_empty': 'Немає нових пропозицій для підтвердження', 'admin.moderation.active_empty': 'Активних пропозицій не знайдено', 'admin.reports.reviewed': 'Розглянуто', 'admin.reports.dismiss': 'Відхилити', 'admin.pagination.total': 'Всього', 'admin.users.role.change': 'Змінити роль', 'admin.users.search.placeholder': 'Пошук за ім\'ям або email...', 'admin.tasks.delete': 'Видалити', 'admin.tasks.delete.confirm': 'Видалити це завдання назавжди?', 'admin.tasks.search.placeholder': 'Пошук за назвою...', 'admin.col.customer': 'Замовник', 'admin.col.reporter': 'Скаржник', 'admin.col.target': 'Ціль', 'admin.filter.all_roles': 'Всі ролі', 'admin.filter.all_statuses': 'Всі статуси', 'admin.reports.target.task': 'Завдання', 'admin.reports.target.user': 'Користувач', 'admin.tab.categories': 'Категорії', 'admin.tab.locations': 'Міста і райони', 'admin.tab.logs': 'Логи', 'admin.tab.plans': 'Тарифи', 'admin.tab.settings': 'Налаштування', 'admin.logs.subtab.ai': 'AI логи', 'admin.logs.subtab.activity': 'Активність', 'admin.logs.subtab.mail': 'Mail', 'admin.logs.subtab.notifications': 'Сповіщення', 'admin.notif_logs.type': 'Тип', 'admin.notif_logs.title': 'Заголовок', 'admin.notif_logs.read': 'Прочитано', 'admin.notif_logs.empty': 'Логи сповіщень порожні', 'admin.stats.notif_chart_title': 'Сповіщення по днях', 'admin.stats.notif_label': 'Сповіщення', 'admin.stats.mail_chart_title': 'Email по днях', 'admin.stats.mail_label': 'Emails', 'admin.filter.all': 'Всі', 'admin.stats.specialists': 'Помічники', 'admin.col.plan': 'Тариф', 'admin.back_home': 'На головну', 'admin.plans.title': 'Тарифні пакети', 'admin.plans.add': '+ Додати тариф', 'admin.plans.empty': 'Тарифи не створено', 'admin.plans.form.new': 'Новий тариф', 'admin.plans.form.edit': 'Редагувати тариф', 'admin.plans.form.name': 'Назва', 'admin.plans.form.price': 'Ціна (EUR)', 'admin.plans.form.old_price': 'Стара ціна (EUR, необов\'язково)', 'admin.plans.form.max_offers': 'Макс. відгуків (порожньо = без ліміту)', 'admin.plans.form.max_cards': 'Макс. пропозицій (порожньо = без ліміту)', 'admin.plans.form.duration_days': 'Термін (днів, порожньо = без закінчення)', 'admin.plans.form.description': 'Опис', 'admin.plans.form.features': 'Можливості (по одному на рядок)', 'admin.plans.form.notify': 'Сповіщення про нові замовлення', 'admin.plans.form.default': 'За замовчуванням', 'admin.plans.form.active': 'Активний', 'admin.plans.form.order': 'Порядок', 'admin.plans.form.role': 'Роль', 'admin.plans.form.tier': 'Рівень', 'admin.plans.form.role.customer': 'Замовник', 'admin.plans.form.role.specialist': 'Помічник', 'admin.plans.form.tier.free': 'Безкоштовний', 'admin.plans.form.tier.pro': 'Pro', 'admin.plans.form.tier.ultimate': 'Ultimate', 'admin.plans.form.section.limits': 'Ліміти (порожньо = без обмежень)', 'admin.plans.form.max_messages_day': 'Макс. повідомлень/день', 'admin.plans.form.max_orders_day': 'Макс. замовлень/день', 'admin.plans.form.max_skills': 'Макс. навичок', 'admin.plans.form.max_profiles': 'Макс. профілів', 'admin.plans.form.max_portfolio': 'Макс. елементів портфоліо', 'admin.plans.form.section.boost': 'Множники & Буст', 'admin.plans.form.search_boost': 'Буст у пошуку', 'admin.plans.form.offers_multiplier': 'Множник відгуків', 'admin.plans.form.section.contact': 'Права контактів', 'admin.plans.form.can_contact_free': 'Контакт з безкоштовними користувачами', 'admin.plans.form.can_contact_pro': 'Контакт з Pro користувачами', 'admin.plans.form.can_contact_all': 'Контакт з усіма', 'admin.plans.form.can_show_contact': 'Показувати контакти', 'admin.plans.form.can_view_phone': 'Перегляд телефону', 'admin.plans.form.section.features': 'Можливості', 'admin.plans.form.upload_video': 'Завантаження відео', 'admin.plans.form.favorites': 'Обране', 'admin.plans.form.google_calendar': 'Google Calendar', 'admin.plans.form.verified_badge': 'Знак верифікації', 'admin.plans.form.highlighted_reviews': 'Виділені відгуки', 'admin.plans.form.personal_site': 'Особистий сайт', 'admin.plans.form.can_help_now': 'Статус «Можу допомогти»', 'admin.plans.form.need_help': 'Статус «Потрібна допомога»', 'admin.plans.form.auto_response': 'Авто-відповідь', 'admin.plans.form.auto_match': 'Авто-підбір', 'admin.plans.form.price_list': 'Прайс-лист', 'admin.plans.form.instant_dispatch_free': 'Миттєва розсилка (безкоштовно)', 'admin.plans.form.instant_dispatch_pro': 'Миттєва розсилка (Pro)', 'admin.plans.badge.default': 'За замовчуванням', 'admin.plans.badge.inactive': 'Неактивний', 'admin.plans.make_default': 'Зробити за замовчуванням', 'admin.plans.tasks': 'Завдань', 'admin.plans.offers': 'Відгуків', 'admin.plans.cards': 'Пропозиції', 'admin.plans.notify_tasks': 'Сповіщення про замовлення', 'admin.plans.delete.confirm': 'Видалити тариф', 'admin.activity.title': 'Журнал активності', 'admin.activity.event': 'Подія', 'admin.activity.all_events': 'Всі події', 'admin.activity.from': 'Від', 'admin.activity.to': 'До', 'admin.activity.reset': 'Скинути', 'admin.activity.total': 'Всього', 'admin.activity.empty': 'Немає записів', 'admin.mail.event': 'Email подія', 'admin.mail.all_events': 'Всі email події', 'admin.mail.from': 'Від', 'admin.mail.to': 'До', 'admin.mail.reset': 'Скинути', 'admin.mail.total': 'Всього', 'admin.mail.empty': 'Немає email логів', 'admin.mail.recipient': 'Отримувач', 'admin.mail.provider': 'Провайдер', 'admin.mail.details': 'Деталі', 'admin.mail.status': 'Статус', 'admin.mail.success': 'Успішно', 'admin.mail.failed': 'Помилка', 'admin.event.email_sent': 'Email надіслано', 'admin.event.email_failed': 'Email не надіслано', 'admin.event.email_dev': 'Email DEV fallback', 'admin.event.admin_email_test_sent': 'Тестовий email надіслано', 'admin.event.admin_email_test_failed': 'Тестовий email не надіслано', 'admin.logs.empty': 'Немає записів', 'admin.logs.date': 'Дата', 'admin.logs.provider': 'Провайдер', 'admin.logs.model': 'Модель', 'admin.logs.action': 'Дія', 'admin.logs.langs': 'Мови', 'admin.logs.in': 'Вхід', 'admin.logs.out': 'Вихід', 'admin.logs.total': 'Разом', 'admin.logs.ms': 'мс', 'admin.logs.status': 'Статус', 'admin.stats.activity_30d': 'Активність за 30 днів', 'admin.stats.tasks_label': 'Заявки', 'admin.stats.users_label': 'Користувачі', 'admin.stats.specialists_label': 'Помічники', 'admin.stats.tokens_title': 'Витрата токенів (по місяцях)', 'admin.stats.tokens_out': 'Вихідні', 'admin.stats.tokens_in': 'Вхідні', 'admin.stats.tokens_out_label': 'Вихідні токени', 'admin.stats.tokens_in_label': 'Вхідні токени', 'admin.stats.cost_label': 'Вартість (USD)', 'admin.stats.tasks_by_status': 'Заявки за статусами', 'admin.task_status.open': 'Відкриті', 'admin.task_status.in_progress': 'В роботі', 'admin.task_status.completed': 'Завершені', 'admin.task_status.cancelled': 'Скасовані', 'admin.task_status.draft': 'Чернетки', 'admin.settings.tab.general': 'Загальні', 'admin.settings.tab.smtp': 'E-Mail', 'admin.settings.tab.notifications': 'Сповіщення', 'admin.settings.tab.payment': 'Оплата', 'admin.settings.tab.referral': 'Реферальна', 'admin.settings.tab.seo': 'SEO', 'admin.settings.tab.socials': 'Соцмережі', 'admin.settings.tab.telegram': 'Telegram Bot', 'admin.settings.telegram.title': 'Налаштування Telegram Bot', 'admin.settings.telegram.help': 'Створіть бота через @BotFather. ID чату дізнайтесь через @userinfobot.', 'admin.settings.telegram.bot_token': 'Bot Token', 'admin.settings.telegram.admin_chat_id': 'Chat ID адміністратора', 'admin.settings.telegram.admin_chat_hint': 'Спочатку надішліть /start своєму боту, потім дізнайтесь chat ID через @userinfobot', 'admin.settings.telegram.channel_id': 'невикористовується', 'admin.settings.telegram.channels_title': 'Канали за мовами', 'admin.settings.telegram.channel_hint': 'Username публічного каналу (@канал) або числовий ID', 'admin.settings.telegram.notify_registrations': 'Сповіщати про нові реєстрації', 'admin.settings.telegram.notify_registrations_hint': 'Надсилати повідомлення при реєстрації нового користувача', 'admin.settings.telegram.post_new_tasks': 'Публікувати нові завдання в канал', 'admin.settings.telegram.post_new_tasks_hint': 'Автоматично публікувати нові завдання в Telegram-канал', 'admin.settings.telegram.test': 'Тест', 'admin.settings.telegram.verify': 'Перевірити токен', 'admin.settings.telegram.test_fail': 'Помилка з\'єднання', 'admin.settings.socials.title': 'Посилання на соціальні мережі', 'admin.settings.socials.hint': 'Заповнені посилання відображаються у підвалі сайту', 'admin.settings.seo.maintenance_label': 'Режим обслуговування', 'admin.settings.seo.maintenance_hint': 'Показувати сторінку обслуговування всім відвідувачам', 'admin.settings.seo.indexing_label': 'Індексація пошуковими системами', 'admin.settings.seo.indexing_hint': 'Дозволити пошуковим системам індексувати сайт', 'admin.settings.seo.head_scripts_label': 'Скрипти в (JS)', 'admin.settings.seo.head_scripts_hint': 'Виконується на кожній сторінці (Google Tag Manager, аналітика тощо)', 'admin.settings.seo.site_title_label': 'Заголовок сайту', 'admin.settings.seo.site_description_label': 'Опис сайту (meta description)', 'admin.settings.referral.title': 'Партнерська програма', 'admin.settings.referral.hint': 'Нагороджуйте користувачів, що приводять нових учасників.', 'admin.settings.referral.enabled_label': 'Увімкнено', 'admin.settings.referral.enabled_hint': 'Увімкнути / вимкнути видачу нагород', 'admin.settings.referral.customer_section': 'Для клієнтів', 'admin.settings.referral.specialist_section': 'Для помічників', 'admin.settings.referral.plan_label': 'Тарифний план за реферала', 'admin.settings.referral.no_plan': '— без плану —', 'admin.settings.referral.plan_hint': 'Цей план буде призначений тому, хто запросив. Якщо його поточний план вищий — додадуться тільки дні.', 'admin.settings.referral.days_label': 'Днів нагороди', 'admin.settings.referral.days_hint': 'Кількість днів, що додаються до терміну дії плану.', 'admin.settings.general.title': 'Загальні налаштування', 'admin.settings.general.site_name': 'Назва сайту', 'admin.settings.general.site_url': 'URL сайту', 'admin.settings.general.contact_email': 'Email для зв\'язку', 'admin.settings.general.support_phone': 'Телефон підтримки', 'admin.settings.smtp.title': 'Налаштування SMTP сервера', 'admin.settings.smtp.hint': 'Використовується для надсилання email-сповіщень.', 'admin.settings.smtp.host': 'SMTP Хост', 'admin.settings.smtp.port': 'Порт', 'admin.settings.smtp.encryption': 'Шифрування', 'admin.settings.smtp.enc.none': 'Немає', 'admin.settings.smtp.enc.tls': 'STARTTLS (порт 587)', 'admin.settings.smtp.enc.ssl': 'SSL/TLS (порт 465)', 'admin.settings.smtp.username': 'Ім\'я користувача', 'admin.settings.smtp.password': 'Пароль / App Password', 'admin.settings.smtp.from_name': 'Ім\'я відправника', 'admin.settings.smtp.from_email': 'Email відправника', 'admin.settings.smtp.test': 'Надіслати тестовий email', 'admin.settings.smtp.sending': 'Надсилання...', 'admin.settings.payment.hint': 'Дані для підключення до ePay Piraeus Bank.', 'admin.settings.env.test': 'Тест (sandbox)', 'admin.settings.env.prod': 'Бойовий режим', 'admin.settings.env.label': 'Середовище', 'admin.settings.merchant_id': 'Merchant ID', 'admin.settings.api_user': 'API User', 'admin.settings.api_password': 'API Password', 'admin.settings.confirm_url': 'Confirmation URL (webhook)', 'admin.settings.cancel_url': 'Cancel URL', 'admin.settings.active': 'Активний', 'admin.settings.saving': 'Збереження...', 'admin.settings.saved': 'Збережено', 'admin.notif.vars_hint': 'Доступні змінні в шаблонах', 'admin.notif.tmpl.not_set': 'Шаблон не налаштовано', 'admin.notif.tmpl.subject_label': 'Тема листа', 'admin.notif.tmpl.body_label': 'Текст листа (HTML)', 'admin.notif.tmpl.save': 'Зберегти', 'admin.notif.tmpl.close': 'Закрити', 'admin.notif.tmpl.translate': 'Авто-переклад на інші мови', 'admin.notif.tmpl.translating': 'Переклад...', 'admin.notif.tmpl.saving': 'Збереження...', 'admin.notif.email_verification': 'Підтвердження email адреси', 'admin.notif.registration_success': 'Успішна реєстрація', 'admin.notif.password_reset': 'Відновлення пароля', 'admin.notif.new_offer': 'Нова пропозиція', 'admin.notif.new_task': 'Нове завдання', 'admin.notif.offer_accepted': 'Пропозицію прийнято', 'admin.notif.new_message': 'Нове повідомлення', 'admin.notif.offer_declined': 'Відхилення пропозиції', 'admin.notif.offer_other_accepted': 'Вибрано іншого виконавця', 'admin.notif.task_updated': 'Зміна завдання', 'admin.notif.deadline_reminder': 'Нагадування про дедлайн', 'admin.notif.task_archived': 'Автознняття завдання', 'admin.notif.referral_reward': 'Реферальна нагорода', 'admin.email_template.plan_activated': 'Тарифи — активація тарифу', 'admin.email_template.plan_upgraded': 'Тарифи — підвищення тарифу', 'admin.email_template.plan_downgrade_scheduled': 'Тарифи — запланований перехід', 'admin.email_template.plan_downgrade_applied': 'Тарифи — застосування переходу', 'admin.email_template.plan_renewal_reminder': 'Тарифи — нагадування про продовження', 'admin.email_template.plan_insufficient_funds': 'Тарифи — недостатньо коштів', 'pricing.confirm.title': 'Підтвердіть вибір тарифу', 'pricing.confirm.plan': 'Тариф', 'pricing.confirm.prorated': 'Залік залишку', 'pricing.confirm.effective_price': 'До оплати', 'pricing.confirm.your_balance': 'Ваш баланс', 'pricing.confirm.downgrade_info': 'Перехід на новий тариф відбудеться автоматично після закінчення поточного періоду.', 'pricing.confirm.insufficient': 'Недостатньо коштів на балансі.', 'pricing.confirm.top_up': 'Поповнити', 'pricing.confirm.schedule_downgrade': 'Запланувати перехід', 'pricing.confirm.pay': 'Оплатити', 'admin.user_edit.title': 'Редагування користувача', 'admin.user_edit.email': 'Email', 'admin.user_edit.email_verified': 'Email підтверджено', 'admin.user_edit.email_not_verified': 'Email не підтверджено', 'admin.user_edit.verify_email_btn': 'Підтвердити вручну', 'admin.user_edit.verify_email_done': 'Email підтверджено!', 'admin.user_edit.id': 'ID', 'admin.user_edit.registered': 'Реєстрація', 'admin.user_edit.last_seen': 'Останній візит', 'admin.user_edit.lang': 'Мова', 'admin.user_edit.first_name': 'Ім\'я', 'admin.user_edit.last_name': 'Прізвище', 'admin.user_edit.phone': 'Телефон', 'admin.user_edit.bio': 'Про себе', 'admin.user_edit.role': 'Роль', 'admin.user_edit.plan': 'Тариф', 'admin.user_edit.no_plan': '— Без тарифу —', 'admin.user_edit.active': 'Активний акаунт', 'admin.user_edit.published': 'Опублікована', 'admin.user_edit.balance': 'Баланс (EUR)', 'admin.user_edit.skills': 'Навички', 'admin.user_edit.tab.profile': 'Профіль', 'admin.user_edit.tab.account': 'Акаунт', 'admin.user_edit.tab.balance': 'Баланс', 'admin.user_edit.tab.settings': 'Налаштування', 'admin.user_edit.tab.specialist': 'Пропозиції', 'admin.user_edit.tab.site': 'Сайт', 'admin.user_edit.plan_expires': 'Тариф закінчується', 'admin.user_edit.interface_lang': 'Мова інтерфейсу', 'admin.user_edit.comm_languages': 'Мови спілкування', 'admin.user_edit.personal_site_slug': 'Персональна сторінка', 'admin.user_edit.show_contact_info': 'Показувати контакти', 'admin.user_edit.show_contact_info.hint': 'Видно замовникам', 'admin.user_edit.notify_new_tasks': 'Сповіщати про нові завдання', 'admin.user_edit.notify_new_tasks.hint': 'Push і email сповіщення', 'admin.user_edit.notif_messages': 'Сповіщення про повідомлення', 'admin.user_edit.notif_messages.hint': 'Нові повідомлення в чаті', 'admin.user_edit.site_settings': 'Налаштування персональної сторінки', 'admin.user_edit.categories': 'Категорії послуг', 'admin.user_edit.locations': 'Райони обслуговування', 'admin.user_edit.skill_placeholder': 'Нова навичка...', 'admin.user_edit.add_category': '— Виберіть категорію —', 'admin.user_edit.add_location': '— Виберіть район —', 'admin.user_edit.specialist_cards': 'Пропозиції спеціаліста', 'admin.user_edit.no_cards': 'Пропозиції не знайдено', 'admin.user_edit.card_title': 'Заголовок пропозиції', 'admin.user_edit.card_description': 'Опис', 'admin.balance.topup.btn': 'Поповнити', 'admin.balance.withdraw.btn': 'Списати', 'admin.balance.modal_hint': 'Зміни застосовуються одразу і фіксуються в історії', 'admin.balance.topup.title': 'Поповнення балансу', 'admin.balance.topup.amount': 'Сума', 'admin.balance.topup.description': 'Коментар', 'admin.balance.topup.description.placeholder': 'Наприклад: бонус або ручне поповнення', 'admin.balance.topup.submit': 'Поповнити баланс', 'admin.balance.withdraw.title': 'Зняття балансу', 'admin.balance.withdraw.amount': 'Сума', 'admin.balance.withdraw.description': 'Коментар', 'admin.balance.withdraw.description.placeholder': 'Наприклад: повернення або ручне списання', 'admin.balance.withdraw.submit': 'Списати баланс', 'admin.user_edit.role.customer': 'Замовник', 'admin.user_edit.role.user': 'Користувач', 'admin.user_edit.role.specialist': 'Помічник', 'admin.user_edit.role.admin': 'Адміністратор', 'common.refresh': 'Оновити', 'common.back_home': 'На головну', 'admin.loc.hint': 'Управління містами і районами', 'admin.loc.add_city': 'Нове місто', 'admin.loc.add_district': 'Додати район', 'admin.loc.new': 'Нова локація', 'admin.loc.edit': 'Редагувати локацію', 'admin.loc.district': 'район', 'admin.loc.empty': 'Немає локацій', 'admin.loc.delete.confirm': 'Видалити локацію? Всі райони також будуть видалені.', 'admin.cat.add_root': 'Нова категорія', 'admin.cat.add_sub': 'Підкатегорія', 'admin.cat.edit': 'Редагувати', 'admin.cat.delete': 'Видалити', 'admin.cat.delete.confirm': 'Видалити категорію? Всі підкатегорії також будуть видалені.', 'admin.cat.slug': 'Slug', 'admin.cat.icon': 'Іконка', 'admin.cat.name_el': 'Грецька', 'admin.cat.name_en': 'Англійська', 'admin.cat.name_ru': 'Російська', 'admin.cat.name_uk': 'Українська', 'admin.cat.active': 'Активна', 'admin.cat.parent': 'Батьківська категорія', 'admin.cat.no_parent': 'Верхній рівень', 'admin.cat.save': 'Зберегти', 'admin.cat.cancel': 'Скасувати', 'admin.cat.empty': 'Немає категорій', 'admin.cat.hint': 'Управління категоріями з багаторівневою ієрархією', 'admin.cat.new': 'Нова категорія', 'admin.cat.subcategory': 'підкатегорія', 'admin.cat.add_child': 'Додати підкатегорію', 'admin.cat.inactive': 'Неактивна', 'admin.event.user_login': 'Вхід', 'admin.event.user_register': 'Реєстрація', 'admin.event.admin_user_deactivate': 'Блокування юзера', 'admin.event.admin_user_activate': 'Розблокування юзера', 'admin.event.admin_user_role_changed': 'Зміна ролі', 'admin.event.admin_task_cancelled': 'Скасування завдання', 'admin.event.admin_task_deleted': 'Видалення завдання', 'admin.event.admin_report_reviewed': 'Скаргу розглянуто', 'admin.event.admin_report_dismissed': 'Скаргу відхилено', 'admin.event.task_created': 'Створено завдання', 'user.online': 'Онлайн', 'user.seen_minutes': 'був тут {n} хв тому', 'user.seen_hours': 'був тут {n} год тому', 'user.seen_yesterday': 'був тут вчора', 'user.seen_days': 'був тут {n} дн тому', 'specialists.title': 'Пропозиції', 'specialists.search': 'Пошук спеціаліста...', 'specialists.search.btn': 'Пошук', 'specialists.empty': 'Спеціалістів не знайдено', 'specialists.no_bio': 'Без опису', 'specialists.view': 'Дивитись профіль', 'specialists.reviews': 'відгуків', 'specialist.favorite': 'Додати до обраного', 'specialist.unfavorite': 'Прибрати з обраного', 'specialist.site_link': 'Особистий сайт', 'favorites.specialists.title': 'Обрані спеціалісти', 'favorites.specialists.empty': 'Ви ще не додали спеціалістів до обраного', 'nav.favorites': 'Обране', 'nav.schedule': 'Розклад', 'nav.find_tasks': 'Пошук замовлень', 'schedule.title': 'Мій розклад', 'schedule.subtitle': 'Позначайте дні коли ви вільні або зайняті — замовники побачать вашу доступність', 'schedule.available': 'Вільний', 'schedule.busy': 'Зайнятий', 'schedule.unset': 'Не вказано', 'schedule.click_hint': '← клік змінює статус по колу', 'schedule.range_mode': 'Виділити діапазон', 'schedule.range_from': 'З {date} — оберіть кінцеву дату', 'schedule.click_to_set': 'Натисніть щоб позначити', 'schedule.free': 'вільно', 'schedule.busy_count': 'зайнято', 'schedule.free_days': 'вільних днів', 'schedule.googleCalendar': 'Google Календар', 'schedule.connectGoogle': 'Підключити Google Календар', 'schedule.disconnectGoogle': 'Відключити', 'schedule.connectedAs': 'Підключено як', 'schedule.importFromGoogle': 'Синхр. з Google', 'schedule.gcalConnected': '✓ Google Календар підключено', 'schedule.gcalError': 'Помилка підключення Google Календар', 'schedule.gcalImportDone': 'Імпортовано {n} днів з Google Календар', 'schedule.gcalAutoSyncNote': 'Зміни доступності автоматично надсилаються в Google Календар', 'schedule.gcalConnectDesc': 'Підключіть Google Календар для автоматичної синхронізації розкладу', 'schedule.gcalDisconnectConfirm': 'Відключити Google Календар?', 'find_tasks.title': 'Пошук замовлень', 'find_tasks.for_me': 'Для мене', 'find_tasks.all': 'Всі замовлення', 'find_tasks.by_category': 'За категоріями', 'find_tasks.list': 'Списком', 'find_tasks.already_offered': 'Пропозицію надіслано', 'find_tasks.offer_now': 'Відгукнутися', 'find_tasks.empty_for_me': 'Немає замовлень у ваших категоріях', 'find_tasks.banner_hint': 'Знайдіть замовлення за категоріями вашого портфоліо', 'find_tasks.no_cards': 'Створіть портфоліо спеціаліста, щоб бачити підходящі замовлення', 'find_tasks.add_card': 'Створити портфоліо', 'find_tasks.search': 'Пошук замовлень...', 'find_tasks.tasks_count': 'завдань', 'footer.tagline': 'Платформа завдань для Греції', 'footer.rights': 'Всі права захищені.', 'nav.privacy': 'Політика конфіденційності', 'nav.delete_account': 'Видалення акаунту', 'delete_account.title': 'Запит на видалення акаунту', 'delete_account.subtitle': 'Після перевірки вашого запиту ми назавжди видалимо ваш акаунт і дані протягом 30 днів.', 'delete_account.warning': 'Цю дію не можна скасувати. Всі ваші дані будуть видалені безповоротно.', 'delete_account.reason_label': 'Причина (необов\'язково)', 'delete_account.reason_placeholder': 'Розкажіть, чому ви хочете видалити акаунт...', 'delete_account.confirm_label': 'Підтверджую, що хочу назавжди видалити свій акаунт', 'delete_account.submit': 'Надіслати запит', 'delete_account.submitting': 'Надсилання...', 'delete_account.success_title': 'Ваш запит отримано', 'delete_account.success_body': 'Ми опрацюємо ваш запит протягом 30 днів і повідомимо вас електронною поштою.', 'delete_account.login_required': 'Для надсилання запиту на видалення необхідно увійти в акаунт.', 'delete_account.login_btn': 'Увійти', 'app.download_title': 'Завантажте мобільний додаток CanHelp', 'app.download_desc': 'Все CanHelp — завжди під рукою. Доступно для Android та iOS.', 'nav.pricing': 'Тарифи', 'pricing.title': 'Тарифи', 'pricing.subtitle': 'Виберіть підходящий план', 'pricing.role.customer': 'Замовник', 'pricing.role.specialist': 'Спеціаліст', 'pricing.free': 'Безкоштовно', 'pricing.per_month': 'міс', 'pricing.duration': 'Термін', 'pricing.days': 'дн.', 'pricing.current_plan': 'Ваш план', 'pricing.popular': 'Популярний', 'pricing.choose': 'Вибрати', 'pricing.your_plan': 'Активний план', 'pricing.free_default': 'За замовчуванням', 'pricing.compare': 'Порівняння функцій', 'pricing.feature': 'Функція', 'pricing.faq_note': 'Оплата списується з балансу CanHelp. Поповнення доступне в розділі Оплата.', 'pricing.feat.messages': 'Повідомлень / день', 'pricing.feat.orders': 'Замовлень / день', 'pricing.feat.contact_all': 'Зв\'язок з усіма', 'pricing.feat.view_phone': 'Перегляд телефону', 'pricing.feat.show_contact': 'Показувати контакти', 'pricing.feat.favorites': 'Обране', 'pricing.feat.verified_badge': 'Верифікований бейдж', 'pricing.feat.google_calendar': 'Google Календар', 'pricing.feat.personal_site': 'Персональний сайт', 'pricing.feat.auto_response': 'Авто-відповідь', 'pricing.feat.auto_match': 'Авто-підбір', 'pricing.feat.highlighted_reviews': 'Виділені відгуки', 'pricing.feat.portfolio': 'Елементів пропозиції', 'pricing.feat.cards': 'Кількість пропозицій', 'pricing.feat.notify_tasks': 'Сповіщення про нові завдання', 'pricing.feat.video': 'Відео в пропозиції', 'upgrade.available_in': 'Доступно в', 'upgrade.cta': 'Покращити', 'dashboard.plan.title': 'Мій план', 'dashboard.plan.expires': 'Закінчується через {n} днів', 'dashboard.plan.upgrade': 'Покращити план', 'dashboard.plan.no_plan': 'Безкоштовний план', 'dashboard.plan.messages': 'Повідомлень сьогодні', 'dashboard.plan.orders': 'Замовлень сьогодні', 'dashboard.plan.limits': 'Денні ліміти', 'dashboard.plan.features': 'Функції', 'dashboard.plan.stats': 'Статистика', 'dashboard.stats.cards': 'Портфоліо', 'dashboard.stats.maxCards': 'Макс. портфоліо', 'dashboard.stats.portfolioItems': 'Елементи портфоліо', 'dashboard.stats.maxPortfolioItems': 'Макс. елементи', 'dashboard.stats.activeOffers': 'Активні відгуки', 'dashboard.stats.reviewsReceived': 'Відгуки', 'dashboard.stats.activeTasks': 'Активні завдання', 'dashboard.stats.completedTasks': 'Завершені', 'status.need_help': 'Потрібна допомога', 'status.active': 'Активний', 'status.toggle_on': 'Увімкнути', 'status.toggle_off': 'Вимкнути', 'fomo.missed_orders': 'Пропущено {n} замовлень', 'fomo.missed_value': 'На суму €{v}', 'fomo.upgrade_hint': 'Покращте план — отримуйте більше замовлень', 'fomo.conversion': 'Конверсія завдань', 'fomo.active': 'Активні', 'fomo.with_offers': 'З офертами', 'fomo.completed': 'Завершені', 'fomo.already_offered': '{n} спеціалістів вже відгукнулися', 'fomo.specialist_missed': 'Ви пропустили {n} замовлень', 'fomo.top_categories': 'Категорії', 'fomo.offers_received': 'пропозицій отримано', 'fomo.avg_offers': 'В середньому {n}/завдання', 'fomo.completion_rate': 'завершено', 'task.auto_match': 'Авто-матч', 'task.auto_match_results': 'Топ спеціалісти', 'task.no_offer_yet': 'Ви ще не надіслали пропозицію', 'task.make_offer': 'Надіслати пропозицію', 'auto_response.title': 'Авто-відповідь', 'auto_response.enabled': 'Увімкнути авто-відповідь', 'auto_response.min_budget': 'Мін. бюджет', 'auto_response.max_budget': 'Макс. бюджет', 'auto_response.default_price': 'Ціна за замовчуванням', 'auto_response.default_message': 'Повідомлення за замовчуванням', 'auto_response.max_per_day': 'Макс. авто-офертів на день', 'auto_response.save': 'Зберегти', 'auto_response.saved': 'Збережено', 'auto_response.categories': 'Категорії', 'auto_response.locations': 'Локації', 'profile.personal_site': 'Персональний сайт', 'profile.site_slug': 'URL slug', 'profile.site_slug_hint': 'Тільки латинські букви, цифри, - і _', 'profile.site_open': 'Відкрити сайт', 'profile.site_preview': 'Ваш сайт', 'profile.show_contact': 'Показувати контакти', 'profile.show_contact_hint': 'Замовники з Pro/Ultimate-планом побачать ваш телефон', 'gcal.upgrade_required': 'Google Календар вимагає план Pro або Ultimate', 'chat.limit_warning': 'Залишилось {n} повідомлень сьогодні', 'chat.limit_reached': 'Ліміт повідомлень вичерпано. Покращте план', 'chat.upgrade': 'Покращити', 'site.member_since': 'З нами з', 'site.rating': 'Рейтинг', 'site.completed_tasks': 'Виконано', 'site.languages': 'Мов', 'site.photos': 'фото', 'site.contact_form': 'Зв\'язатися', 'site.contact_sent': 'Повідомлення надіслано!', 'site.contact_sent_desc': 'Спеціаліст зв\'яжеться з вами найближчим часом', 'site.contact_name': 'Ім\'я', 'site.contact_name_ph': 'Ваше ім\'я', 'site.contact_email_ph': 'your@email.com', 'site.contact_message': 'Повідомлення', 'site.contact_message_ph': 'Опишіть ваше завдання...', 'site.contact_send': 'Надіслати', 'site.share': 'Поділитися', 'site.speaks_languages': 'Розмовляє мовами', 'site.message_sent': 'Повідомлення надіслано!', 'site.message_sent_desc': 'Спеціаліст отримає його в чаті', 'site.message_placeholder': 'Напишіть повідомлення...', 'site.write_to_chat': 'Написати в чат', 'site.auth_required_title': 'Потрібна авторизація', 'site.auth_required_desc': 'Щоб написати в чат, необхідно увійти в акаунт CanHelp.', 'site.auth_login_btn': 'Увійти в акаунт', 'site.auth_contact_form_btn': 'Написати через форму зворотного зв\'язку', 'specialist.services': 'Послуги', 'portfolio.title': 'Портфоліо', 'status.can_help_now': 'Готовий допомогти', 'common.not_found': 'Сторінку не знайдено', 'common.anonymous': 'Анонімно', 'specialist_setup.page_title': 'Налаштування профілю спеціаліста', 'specialist_setup.step_of': 'Крок {current} з {total}', 'specialist_setup.next': 'Далі', 'specialist_setup.back': 'Назад', 'specialist_setup.skip': 'Пропустити', 'specialist_setup.finish': 'Завершити', 'specialist_setup.go_to_profile': 'Перейти в профіль', 'specialist_setup.browse_tasks': 'Знайти завдання', 'specialist_setup.step1.title': 'Ласкаво просимо!', 'specialist_setup.step1.subtitle': 'Давайте налаштуємо ваш профіль', 'specialist_setup.step1.desc': 'Повний профіль допомагає знаходити більше клієнтів. Слідуйте крокам, щоб створити ідеальний профіль спеціаліста.', 'specialist_setup.step1.what_next': 'Що ми зробимо:', 'specialist_setup.step1.item1': 'Заповнимо основну інформацію', 'specialist_setup.step1.item2': 'Створимо картку послуги', 'specialist_setup.step1.item3': 'Додамо навички і категорії', 'specialist_setup.step1.item4': 'Оберемо географію обслуговування', 'specialist_setup.step1.item5': 'Завантажимо фото портфоліо', 'specialist_setup.step2.title': 'Базовий профіль', 'specialist_setup.step2.subtitle': 'Розкажіть про себе', 'specialist_setup.step2.bio_label': 'Про себе', 'specialist_setup.step2.bio_placeholder': 'Опишіть ваш досвід, послуги які ви пропонуєте...', 'specialist_setup.step2.phone_label': 'Телефон', 'specialist_setup.step2.phone_placeholder': '+30 6900000000', 'specialist_setup.step2.photo_label': 'Фото профілю', 'specialist_setup.step2.photo_btn': 'Завантажити фото', 'specialist_setup.step2.photo_uploading': 'Завантаження...', 'specialist_setup.step2.photo_hint': 'Відображається у вашому профілі', 'specialist_setup.step3.title': 'Картка послуги', 'specialist_setup.step3.subtitle': 'Створіть вашу першу картку послуги', 'specialist_setup.step3.title_label': 'Назва картки', 'specialist_setup.step3.title_placeholder': 'Напр. Сантехнік, Електрик, Прибирання...', 'specialist_setup.step3.desc_label': 'Опис', 'specialist_setup.step3.desc_placeholder': 'Детально опишіть що ви пропонуєте, досвід, переваги...', 'specialist_setup.step3.title_required': 'Назва обов\'язкова', 'specialist_setup.step4.title': 'Навички і категорії', 'specialist_setup.step4.subtitle': 'Додайте навички і виберіть категорії', 'specialist_setup.step4.skills_label': 'Навички', 'specialist_setup.step4.skills_placeholder': 'Напр. Монтаж труб...', 'specialist_setup.step4.skills_add': 'Додати', 'specialist_setup.step4.categories_label': 'Категорії', 'specialist_setup.step5.title': 'Географія обслуговування', 'specialist_setup.step5.subtitle': 'Де ви надаєте послуги?', 'specialist_setup.step5.hint': 'Виберіть міста або конкретні райони', 'specialist_setup.done.title': 'Ваш профіль готовий!', 'specialist_setup.done.subtitle': 'Вітаємо! Профіль налаштовано', 'specialist_setup.done.desc': 'Тепер ви можете отримувати замовлення від клієнтів. Знайдіть завдання, що відповідають вашим навичкам.', 'support.title': 'Підтримка', 'support.type.label': 'Тип звернення', 'support.type.bug': 'Помилка', 'support.type.suggestion': 'Пропозиція', 'support.type.other': 'Інше', 'support.subject': 'Тема', 'support.subject.placeholder': 'Коротко опишіть проблему...', 'support.body': 'Повідомлення', 'support.body.placeholder': 'Детально опишіть проблему або пропозицію...', 'support.submit': 'Надіслати', 'support.cancel': 'Скасувати', 'support.error': 'Помилка надсилання. Спробуйте ще раз.', 'support.sent.title': 'Запит отримано!', 'support.sent.body': 'Ми відповімо на ваш email якнайшвидше.', 'support.sent.close': 'Закрити', 'admin.tab.support': 'Підтримка', 'admin.tab.backup': 'Резервні копії', 'admin.tab.translations': 'Переклади', 'admin.tab.dbcheck': 'Перевірка БД', 'admin.tab.balances': 'Баланс', 'admin.tab.push': 'Push', 'admin.tab.referrals': 'Реферали', 'admin.search': 'Пошук', 'admin.noData': 'Немає даних', 'admin.cat.order': 'Порядок', 'admin.cat.skills': 'Навички', 'admin.plans.form.max_tasks': 'Макс. завдань', 'admin.settings.referral.shared_section': 'Спільні налаштування рефералів', 'admin.settings.seo.title': 'SEO налаштування', 'admin.backup.title': 'Резервні копії', 'admin.backup.tables': 'Таблиці', 'admin.backup.exportAll': 'Експорт всього', 'admin.backup.importAll': 'Імпорт всього', 'admin.backup.exportTable': 'Експорт таблиці', 'admin.backup.importTable': 'Імпорт таблиці', 'admin.backup.exporting': 'Експорт...', 'admin.backup.importing': 'Імпорт...', 'admin.backup.exportSuccess': 'Експорт завершено', 'admin.backup.importSuccess': 'Імпорт завершено', 'admin.backup.autoBackup': 'Автобекап', 'admin.backup.autoBackupDesc': 'Автоматичний щоденний бекап', 'admin.backup.storedBackups': 'Збережені бекапи', 'admin.backup.noStoredBackups': 'Збережених бекапів немає', 'admin.backup.restore': 'Відновити', 'admin.backup.restoreConfirm': 'Відновити з бекапу?', 'admin.backup.restoreSuccess': 'Відновлення завершено', 'admin.backup.restoring': 'Відновлення...', 'admin.backup.date': 'Дата', 'admin.backup.size': 'Розмір', 'admin.backup.today': 'Сьогодні', 'admin.backup.yesterday': 'Вчора', 'admin.balance.col.operation': 'Операція', 'admin.balance.col.amount': 'Сума', 'admin.balance.col.result': 'Баланс', 'admin.balance.col.description': 'Опис', 'admin.balance.col.date': 'Дата', 'admin.balance.empty': 'Записів поки немає', 'admin.balance.filter.all': 'Всі операції', 'admin.balance.filter.user_id': 'Фільтр за userId', 'admin.balance.kind.topup': 'Поповнення', 'admin.balance.kind.plan_purchase': 'Списання за тариф', 'admin.balance.kind.admin_topup': 'Поповнення адміном', 'admin.balance.kind.admin_adjustment': 'Коригування', 'admin.support.search': 'Пошук', 'admin.support.all_statuses': 'Всі статуси', 'admin.support.all_types': 'Всі типи', 'admin.support.none': 'Звернень немає', 'admin.support.reply': 'Відповісти', 'admin.support.reply_placeholder': 'Введіть відповідь...', 'admin.support.send_reply': 'Надіслати відповідь', 'admin.support.cancel': 'Скасувати', 'admin.support.close': 'Закрити', 'admin.support.status.open': 'Відкрито', 'admin.support.status.in_progress': 'В роботі', 'admin.support.status.resolved': 'Вирішено', 'admin.support.status.closed': 'Закрито', 'admin.support.your_reply': 'Ваша відповідь', 'admin.user_edit.visibility_requirements.title': 'Профіль поки не потрапляє в «Пропозиції»', 'admin.user_edit.visibility_requirements.hint': 'Потрібно виконати умови видимості:', 'admin.user_edit.visibility_requirements.bio': 'Заповнити опис (bio)', 'admin.user_edit.visibility_requirements.published_card': 'Опублікувати хоча б одну картку', 'admin.user_edit.visibility_requirements.categories': 'Вказати категорію в опублікованій картці', 'admin.user_edit.visibility_requirements.locations': 'Вказати локацію в опублікованій картці', 'auto_response.desc': 'Автоматично відповідати на відповідні завдання', 'auto_response.budget_range': 'Бюджет завдання', 'auto_response.message_placeholder': 'Вітаю! Я можу допомогти з цим завданням...', 'profile.background.title': 'Фон шапки профілю', 'profile.background.hint': 'Показується в шапці публічного профілю на web і в мобільному застосунку.', 'profile.photo.uploading': 'Завантаження...', 'profile.balance.history': 'Архів операцій', 'profile.balance.history.last': 'Останні операції', 'profile.balance.history.empty': 'Операцій поки немає', 'profile.balance.history.balance_after': 'Баланс після', 'profile.balance.history.kind.topup': 'Поповнення балансу', 'profile.balance.history.kind.plan_purchase': 'Списання за тариф', 'profile.balance.history.kind.admin_topup': 'Поповнення адміністратором', 'profile.balance.history.kind.admin_adjustment': 'Коригування адміністратором', 'profile.plan_history.title': 'Історія тарифного плану', 'profile.plan_history.empty': 'Історія змін тарифу поки порожня', 'profile.plan_history.expires': 'До', 'profile.plan_history.days': 'днів', 'profile.plan_history.event.activated': 'Активовано', 'profile.plan_history.event.renewed': 'Продовжено', 'profile.plan_history.event.downgraded': 'Понижено', 'profile.plan_history.event.referral_reward': 'Реферальна нагорода', 'profile.plan_history.event.admin_change': 'Змінено адміністратором', 'profile.plan_history.event.expired': 'Закінчився', 'profile.show_contact_desc': 'Дозволяє клієнтам зв’язатися напряму', 'profile.site.visible.price_list': 'Прайслист', 'site.pricelist': 'Прайслист', 'status.plan_required': 'Статус недоступний на поточному тарифі', 'status.admin_not_applicable': 'Для акаунта адміністратора користувацький статус не застосовується' } }; export function getTranslations(locale) { const t = translations[locale] ?? translations.el; return (key, fallback)=>t[key] ?? translations.el[key] ?? fallback ?? key; } C_ebuffersourcesizemapshash</* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ $: () => (/* binding */ getTranslations), /* harmony export */ YZ: () => (/* binding */ LOCALES) /* harmony export */ }); /* unused harmony export translations */ const LOCALES = [ { code: 'el', label: 'Ελληνικά', flag: '🇬🇷' }, { code: 'en', label: 'English', flag: '🇬🇧' }, { code: 'uk', label: 'Українська', flag: '🇺🇦' }, { code: 'ru', label: 'Русский', flag: '🇷🇺' } ]; const translations = { el: { 'footer.slogan': 'Η εργασία σου — η φροντίδα μας! Λύνουμε κάθε ζήτημα γρήγορα και εύκολα.', 'footer.links': 'Σύνδεσμοι', 'footer.socials': 'Στα κοινωνικά δίκτυα', // Nav 'nav.home': 'Αρχική', 'nav.tasks': 'Εργασίες', 'nav.post': '+ Δημοσίευση', 'nav.dashboard': 'Οι εργασίες μου', 'nav.chat': 'Μηνύματα', 'nav.notifications': 'Ειδοποιήσεις', 'nav.profile': 'Προφίλ', 'nav.admin': 'Διαχείριση', 'nav.specialists': 'Προσφορές', 'nav.new_task': 'Νέα εργασία', 'nav.login': 'Σύνδεση', 'nav.register': 'Εγγραφή', 'nav.logout': 'Έξοδος', // Hero 'hero.title': 'Κάθε άνθρωπος έχει κάτι να προσφέρει', 'hero.subtitle': 'Βρες βοήθεια, πρόσφερε τις δεξιότητές σου ή κέρδισε χρήματα βοηθώντας άλλους', 'hero.cta.post': 'Ζήτησε βοήθεια', 'hero.cta.browse': 'Πρόσφερε βοήθεια', 'hero.cta.specialists': 'Βρες εργασία', 'hero.search.placeholder': 'Τι χρειάζεσαι; π.χ. ηλεκτρολόγος, καθαρισμός...', 'hero.specialist.title': 'Βρες εργασίες κοντά σου', 'hero.specialist.subtitle': 'Ανακάλυψε εργασίες στις κατηγορίες σου και στείλε προσφορά', 'hero.specialist.cta': 'Βρες εργασίες', 'hero.specialist.search.placeholder': 'Αναζήτηση εργασιών... π.χ. ηλεκτρολογία, καθαρισμός', 'section.categories.specialist': 'Βρες εργασίες ανά κατηγορία', 'section.cities.specialist': 'Εργασίες ανά πόλη', 'how.specialist.step1.title': 'Δημιούργησε κάρτα ειδικού', 'how.specialist.step1.desc': 'Δήλωσε κατηγορίες, δεξιότητες και περιοχές — το σύστημα βρίσκει εργασίες αυτόματα', 'how.specialist.step2.title': 'Βρες σχετικές εργασίες', 'how.specialist.step2.desc': 'Ανακάλυψε εργασίες στις κατηγορίες σου και ξεκίνα αμέσως', 'how.specialist.step3.title': 'Στείλε προσφορά & κέρδισε', 'how.specialist.step3.desc': 'Υποβάλε προσφορά με τιμή και χρόνο, επικοινωνήσε και ολοκλήρωσε εργασίες', 'stats.specialists': 'προσφορές', 'stats.tasks': 'εργασίες', 'stats.categories': 'κατηγορίες', 'stats.free': 'δωρεάν εγγραφή', 'promo.title': 'Αποκτήσε Pro δωρεάν — μόνο μέχρι το τέλος του χρόνου', 'promo.subtitle': 'Εγγράψου τώρα και απόλαυσε το πλάνο Pro χωρίς χρέωση. Η προσφορά λήγει στις 31 Δεκεμβρίου.', 'promo.cta': 'Εγγραφή δωρεάν', 'promo.days': 'μέρες', 'promo.hours': 'ώρες', 'promo.minutes': 'λεπτά', 'promo.seconds': 'δευτ.', // Sections 'section.categories': 'Δημιούργησε εργασία σε οποιαδήποτε κατηγορία', 'section.how': 'Πώς λειτουργεί', 'section.recent': 'Πρόσφατες εργασίες', 'section.all': 'Δες όλες →', 'section.more': 'ακόμα', 'section.cities': 'Πόλεις & Περιοχές', 'section.community': 'Ένα κοινοτικό έργο για όλους', 'community.subtitle': 'Το CanHelp δεν είναι απλώς μια αγορά — είναι μια κοινότητα αμοιβαίας βοήθειας. Οποιοσδήποτε έχει γνώση ή δεξιότητα μπορεί να βρει έναν πελάτη. Οποιοσδήποτε έχει ένα πρόβλημα μπορεί να βρει έναν ειδικό.', 'community.point1.title': 'Είσαι ειδικός σε κάτι;', 'community.point1.desc': 'Επισκευές, μαθήματα, σχεδιασμός, μεταφράσεις, φροντίδα — κάθε δεξιότητα αξίζει. Δημιούργησε προφίλ και βρες πελάτες κοντά σου.', 'community.point2.title': 'Χρειάζεσαι βοήθεια;', 'community.point2.desc': 'Δημοσίευσε εργασία σε λιγότερο από ένα λεπτό και λάβε προσφορές από επαληθευμένους ειδικούς στην πόλη σου.', 'community.point3.title': 'Βοήθησε το έργο να αναπτυχθεί', 'community.point3.desc': 'Το CanHelp αναπτύσσεται χάρη στις κοινότητες. Μοιράσου το σύνδεσμο με φίλους και γνωστούς — μαζί χτίζουμε κάτι χρήσιμο για όλους.', 'community.share': 'Μοιράσου με φίλους', 'community.share.copied': 'Σύνδεσμος αντιγράφηκε!', // Referral section on home page 'section.referral': 'Πρόγραμμα παραπομπών', 'referral.home.subtitle': 'Μοιράσου τον σύνδεσμό σου — κάθε νέος χρήστης που εγγράφεται μέσα από αυτόν σου αποφέρει ανταμοιβή.', 'referral.home.step1.title': 'Εγγραφείσε και λάβε σύνδεσμο', 'referral.home.step1.desc': 'Δημιούργησε λογαριασμό και βρες τον μοναδικό σου σύνδεσμο παραπομπής στο προφίλ σου.', 'referral.home.step2.title': 'Μοιράσου με φίλους', 'referral.home.step2.desc': 'Στείλε τον σύνδεσμο σε φίλους, γνωστούς ή δημοσίευσέ τον στα social media.', 'referral.home.step3.title': 'Κέρδισε ανταμοιβές', 'referral.home.step3.desc': 'Μόλις ο φίλος σου επαληθεύσει το email του, λαμβάνεις αυτόματα την ανταμοιβή σου.', 'referral.home.cta': 'Πάρε τον σύνδεσμό σου', 'referral.home.badge': 'Πρόγραμμα παραπομπών', // FAQ section 'section.faq': 'Συχνές Ερωτήσεις', 'faq.q1': 'Πώς λειτουργεί το CanHelp;', 'faq.a1': 'Δημοσίευσε μια εργασία, λάβε προσφορές από ειδικούς, επέλεξε τον καλύτερο και ξεκίνα τη συνεργασία. Είναι γρήγορο, απλό και δωρεάν για πελάτες.', 'faq.q2': 'Πόσο κοστίζει η χρήση της πλατφόρμας;', 'faq.a2': 'Η εγγραφή και η δημοσίευση εργασιών είναι εντελώς δωρεάν για πελάτες. Οι ειδικοί έχουν στη διάθεσή τους δωρεάν πλάνο καθώς και premium επιλογές.', 'faq.q3': 'Πώς μπορώ να γίνω ειδικός;', 'faq.a3': 'Κάνε εγγραφή, πήγαινε στο «Γίνε Ειδικός», συμπλήρωσε το προφίλ σου με δεξιότητες και κατηγορίες και αρχίνισε να λαμβάνεις εργασίες.', 'faq.q4': 'Πώς επιλέγω τον κατάλληλο ειδικό;', 'faq.a4': 'Δες τις αξιολογήσεις, την εμπειρία, τις δεξιότητες και το χαρτοφυλάκιο κάθε ειδικού. Επικοινώνησε μαζί του μέσω chat και συζήτα τις λεπτομέρειες πριν αποφασίσεις.', 'faq.q5': 'Τι γίνεται αν δεν είμαι ικανοποιημένος;', 'faq.a5': 'Μπορείς να αφήσεις αξιολόγηση για τον ειδικό και να τον βαθμολογήσεις από 1 έως 5 αστέρια. Οι αξιολογήσεις βοηθούν άλλους χρήστες να επιλέξουν έμπιστους επαγγελματίες.', 'faq.q6': 'Μπορώ να επικοινωνήσω με τον ειδικό πριν την αποδοχή;', 'faq.a6': 'Ναι. Μόλις λάβεις μια προσφορά, μπορείς να ανοίξεις chat με τον ειδικό, να κάνεις ερωτήσεις και να συντονίσεις τις λεπτομέρειες πριν αποφασίσεις.', 'faq.q7': 'Πόσος χρόνος χρειάζεται για να λάβω προσφορές;', 'faq.a7': 'Συνήθως μέσα σε λίγες ώρες. Οι ειδικοί λαμβάνουν ειδοποίηση για νέες εργασίες και μπορούν να απαντήσουν γρήγορα.', 'faq.q8': 'Μπορώ να δημοσιεύσω εργασία σε οποιαδήποτε πόλη της Ελλάδας;', 'faq.a8': 'Ναι! Το CanHelp καλύπτει όλη την Ελλάδα. Μπορείς να βρεις ειδικούς στην Αθήνα, στη Θεσσαλονίκη, στην Πάτρα και αλλού.', 'faq.q9': 'Τι είδη εργασιών μπορώ να βρω στο CanHelp;', 'faq.a9': 'Επισκευές, καθαρισμό, ηλεκτρολόγους, μαθήματα, σχεδιασμό, IT, μετακομίσεις, ομορφιά και πολλά άλλα. Οι κατηγορίες αυξάνονται συνεχώς.', 'faq.q10': 'Υπάρχει εφαρμογή για κινητό;', 'faq.a10': 'Ναι! Το CanHelp διατίθεται για Android και iOS. Κατέβασε την εφαρμογή και διαχειρίσου τα πάντα από το τηλέφωνό σου.', // How it works 'how.step1.title': 'Δημοσίευσε εργασία', 'how.step1.desc': 'Περίγραψε τι χρειάζεσαι και ορίζε τον προϋπολογισμό σου', 'how.step2.title': 'Λάβε προσφορές', 'how.step2.desc': 'Ειδικοί θα σου στείλουν προσφορές με τιμή και χρόνο', 'how.step3.title': 'Επίλεξε & ξεκίνα', 'how.step3.desc': 'Επέλεξε τον καλύτερο επαγγελματία και ξεκίνα τη συνεργασία', // Tasks page 'tasks.title': 'εργασίες', 'tasks.filters': 'Φίλτρα', 'tasks.search': 'Αναζήτηση', 'tasks.search.placeholder': 'Τίτλος ή λέξη κλειδί...', 'tasks.search.btn': 'Αναζήτηση', 'tasks.publish': 'Δημοσίευση', 'tasks.category.all': 'Όλες', 'tasks.category.all_in': 'Όλα στην', 'tasks.category.label': 'Κατηγορία', 'tasks.location.label': 'Πόλη', 'tasks.location.placeholder': 'π.χ. Αθήνα', 'tasks.empty': 'Δεν βρέθηκαν εργασίες', 'tasks.empty.cta': 'Δημοσίευσε την πρώτη', // Task detail 'task.status.open': 'Ανοιχτή', 'task.status.in_progress': 'Σε εξέλιξη', 'task.status.completed': 'Ολοκληρωμένη', 'task.status.cancelled': 'Ακυρωμένη', 'task.status.draft': 'Πρόχειρο', 'task.budget': 'Προϋπολογισμός', 'task.location': 'Τοποθεσία', 'task.deadline': 'Ημερομηνία έναρξης', 'task.expires_at': 'Ενεργό έως', 'task.created_at': 'Δημιουργήθηκε', 'task.customer': 'Πελάτης', 'task.offer.btn': 'Υποβολή προσφοράς', 'task.invite.banner_title': 'Σας προσκαλούν σε αυτήν την εργασία', 'task.invite.banner_hint': 'Ο πελάτης σας πρόσκαλεσε προσωπικά', 'task.invite.accept': 'Αποστολή προσφοράς', 'task.invite.decline': 'Άρνηση', 'offer.accept': 'Αποδοχή', 'offer.decline': 'Απόρριψη', 'task.complete': 'Ολοκλήρωση εργασίας', 'task.complete.confirm': 'Να ολοκληρωθεί η εργασία;', 'task.edit': 'Επεξεργασία', 'task.status_label': 'Κατάσταση', 'task.yours': 'Η εργασία σου', 'task.offer.yours': 'Η προσφορά σου', 'review.leave': 'Άφησε αξιολόγηση', 'review.rating': 'Βαθμολογία', 'review.comment': 'Σχόλιο', 'review.comment.placeholder': 'Πες μας για την εμπειρία σου...', 'review.submit': 'Υποβολή αξιολόγησης', 'review.submitting': 'Αποστολή...', 'review.done': 'Η αξιολόγηση καταχωρήθηκε!', 'profile.reviews': 'Αξιολογήσεις', 'profile.no_reviews': 'Δεν υπάρχουν αξιολογήσεις ακόμα', 'profile.rating': 'Βαθμολογία', 'profile.skills.label': 'Δεξιότητες', 'profile.member_since': 'Μέλος από', 'task.offers': 'Προσφορές', 'task.offers.none': 'Δεν υπάρχουν ακόμα προσφορές', // Create task 'create.title': 'Δημοσίευση εργασίας', 'create.field.title': 'Τίτλος', 'create.field.description': 'Περιγραφή', 'create.field.category': 'Κατηγορία', 'create.field.category.select': 'Επιλέξτε...', 'create.field.location': 'Τοποθεσία', 'create.field.location.any': 'Οπουδήποτε', 'create.field.location.all': 'Ολόκληρη η πόλη', 'create.field.budget': 'Προϋπολογισμός (€)', 'create.field.deadline': 'Ημερομηνία έναρξης', 'create.field.expires_at': 'Αγγελία ενεργή έως', 'create.field.expires_at.days': '{n} ημέρες', 'create.field.budget_negotiable': 'Η τιμή είναι διαπραγματεύσιμη', 'create.field.time_slot': 'Χρόνος εκτέλεσης', 'create.field.time_slot.any': 'Οποιαδήποτε', 'create.field.time_slot.morning': 'Πρωινό (08:00–13:00)', 'create.field.time_slot.afternoon': 'Μεσημέρι (13:00–18:00)', 'create.field.time_slot.evening': 'Βράδυ (18:00–22:00)', 'create.field.time_slot.weekend': 'Σαββατοκύριακο', 'create.field.address': 'Διεύθυνση (προαιρετικά)', 'create.field.address.district': 'Συνοικία', 'create.field.address.street': 'Οδός', 'create.field.address.house': 'Αριθμός', 'create.field.confidential': 'Εμπιστευτική σημείωση', 'create.field.confidential.placeholder': 'Λεπτομέρειες που θα δει μόνο ο αναδοχόμενος...', 'create.field.confidential.hint': 'Δεν εμφανίζεται δημόσια', 'create.field.photos': 'Φωτογραφίες', 'create.field.photos.add': 'Προσθήκη φωτογραφίας', 'create.field.photos.uploading': 'Ανέβασμα...', 'task.budget_negotiable': 'Τιμή διαπραγματεύσιμη', 'task.time_slot': 'Χρόνος', 'task.confidential': 'Εμπιστευτική σημείωση', 'create.field.title.placeholder': 'π.χ. Καθαρισμός διαμερίσματος 80τμ', 'create.field.description.placeholder': 'Περίγραψε λεπτομερώς τι χρειάζεσαι...', 'create.field.location.placeholder': 'π.χ. Αθήνα, Κολωνάκι', 'create.field.budget.placeholder': 'π.χ. 100', 'create.submit': 'Δημοσίευση εργασίας', 'create.submitting': 'Δημοσίευση...', // Auth 'login.title': 'Καλωσόρισες', 'login.subtitle': 'Σύνδεση στο CanHelp', 'login.email': 'Email', 'login.password': 'Κωδικός', 'login.submit': 'Σύνδεση', 'login.submitting': 'Σύνδεση...', 'login.error': 'Λάθος email ή κωδικός', 'login.unverified.title': 'Επιβεβαιώστε το email σας', 'login.unverified.desc': 'Στείλαμε σύνδεσμο επαλήθευσης στο email σας. Ελέγξτε τα εισερχόμενα (ή spam) και πατήστε το σύνδεσμο.', 'login.unverified.resend': 'Αποστολή νέου email επαλήθευσης', 'login.unverified.sending': 'Αποστολή...', 'login.unverified.sent': '✓ Εστάλη — ελέγξτε τα εισερχόμενα', 'profile.email.verified': 'Email επαληθεύτηκε', 'profile.email.not_verified': 'Email δεν επαληθεύτηκε', 'login.no_account': 'Δεν έχεις λογαριασμό;', 'login.register_link': 'Εγγραφή', 'login.forgot_password': 'Ξέχασα τον κωδικό', 'login.or_continue_with': 'ή συνεχίστε με', 'login.continue_google': 'Σύνδεση με Google', 'forgot.title': 'Ξέχασα τον κωδικό', 'forgot.subtitle': 'Εισάγετε το email σας για να λάβετε σύνδεσμο ανάκτησης', 'forgot.email': 'Email', 'forgot.submit': 'Αποστολή', 'forgot.submitting': 'Αποστολή...', 'forgot.sent.title': 'Ελέγξτε τα εισερχόμενά σας', 'forgot.sent.desc': 'Αν υπάρχει λογαριασμός με αυτό το email, θα σας στείλουμε σύνδεσμο ανάκτησης κωδικού.', 'forgot.back_to_login': 'Επιστροφή στη σύνδεση', 'forgot.error': 'Αποτυχία αποστολής. Ελέγξτε το email σας ή δοκιμάστε ξανά.', 'forgot.error.not_found': 'Δεν βρέθηκε λογαριασμός με αυτό το email.', 'forgot.error.send_failed': 'Αποτυχία αποστολής email. Δοκιμάστε ξανά αργότερα', 'reset.title': 'Νέος κωδικός', 'reset.subtitle': 'Εισάγετε τον νέο σας κωδικό', 'reset.password': 'Νέος κωδικός', 'reset.confirm': 'Επιβεβαίωση κωδικού', 'reset.submit': 'Αλλαγή κωδικού', 'reset.submitting': 'Αποθήκευση...', 'reset.success': 'Ο κωδικός άλλαξε επιτυχώς. Ανακατεύθυνση στη σύνδεση...', 'reset.back_to_login': 'Επιστροφή στη σύνδεση', 'reset.error.mismatch': 'Οι κωδικοί δεν ταιριάζουν', 'reset.error.invalid': 'Μη έγκυρος σύνδεσμος. Παρακαλώ ζητήστε νέο.', 'register.title': 'Εγγραφή', 'register.subtitle': 'Δημιουργία λογαριασμού στο CanHelp', 'register.first_name': 'Όνομα', 'register.last_name': 'Επώνυμο', 'register.email': 'Email', 'register.password': 'Κωδικός (min 8 χαρακτήρες)', 'register.role': 'Ρόλος', 'register.role.customer': 'Χρήστης', 'register.role.customer.desc': 'Δημοσιεύω εργασίες', 'register.role.specialist': 'Ειδικός', 'register.role.specialist.desc': 'Αναλαμβάνω εργασίες', 'register.submit': 'Δημιουργία λογαριασμού', 'register.submitting': 'Εγγραφή...', 'register.has_account': 'Έχεις ήδη λογαριασμό;', 'register.login_link': 'Σύνδεση', 'register.continue_google': 'Εγγραφή με Google', 'register.check_email.title': 'Ελέγξτε το email σας', 'register.check_email.desc': 'Στείλαμε σύνδεσμο επαλήθευσης στη διεύθυνση email σας. Ελέγξτε τα εισερχόμενα (ή spam) και πατήστε τον σύνδεσμο.', 'register.check_email.login': 'Επιστροφή στη σύνδεση', 'register.captcha_failed': 'Η επαλήθευση CAPTCHA απέτυχε. Παρακαλώ δοκιμάστε ξανά.', // Dashboard 'dashboard.title': 'Πίνακας ελέγχου', 'dashboard.new_task': '+ Νέα εργασία', 'dashboard.onboarding.title': 'Καλωσήλθατε στο CanHelp 👋', 'dashboard.onboarding.subtitle': 'Διαλέξτε πώς θέλετε να ξεκινήσετε.', 'dashboard.onboarding.helper.title': 'Πρόσφερε τη βοήθειά σου', 'dashboard.onboarding.helper.desc': 'Συμπλήρωσε το προφίλ σου — δεξιότητες, κατηγορίες και περιοχές. Παίρνει μόνο λίγα λεπτά και αρχίζεις να δέχεσαι παραγγελίες.', 'dashboard.onboarding.helper.cta': 'Συμπλήρωσε το προφίλ', 'dashboard.onboarding.requester.title': 'Χρειάζεσαι βοήθεια;', 'dashboard.onboarding.requester.desc': 'Δημοσίευσε μια εργασία και οι βοηθοί θα σου στείλουν προσφορές.', 'dashboard.onboarding.requester.cta': 'Δημοσίευσε εργασία', 'dashboard.my_tasks': 'Οι εργασίες μου', 'dashboard.my_offers': 'Οι προσφορές μου', 'dashboard.invitations': 'Προσκλήσεις για εργασία', 'dashboard.offers_count': 'προσφορές', 'dashboard.declined_count': 'απορρίφθηκαν', 'dashboard.completed_tasks': 'Ολοκληρωμένες εργασίες', 'dashboard.completed_offers': 'Ολοκληρωμένες προσφορές', 'dashboard.review_pending': 'Η αξιολόγηση δεν έχει υποβληθεί ακόμα', 'tasks.new.top_specialists': 'Κορυφαίοι ειδικοί', 'tasks.new.select_category': 'Επιλέξτε κατηγορία για να δείτε ειδικούς', 'tasks.new.invite': 'Πρόσκληση', 'tasks.new.invited': 'Επιλέχθηκε ✓', 'reviews.count': 'αξιολογήσεις', 'filter.location': 'Τοποθεσία', 'filter.language': 'Γλώσσες', 'filter.language.any': 'Οποιαδήποτε γλώσσα', 'filter.category.all': 'Όλες οι κατηγορίες', 'user.categories': 'Κατηγορίες', 'user.work_area': 'Περιοχή εργασίας', 'user.specialist_cards': 'Κάρτες υπηρεσιών', 'card.skills': 'Δεξιότητες', 'card.categories': 'Κατηγορίες', 'card.geography': 'Περιοχή εργασίας', 'card.portfolio': 'Χαρτοφυλάκιο', 'card.close': 'Κλείσιμο', 'dashboard.tasks.empty': 'Δεν έχεις δημοσιεύσει εργασίες', 'dashboard.tasks.empty.cta': 'Δημοσίευσε την πρώτη σου', 'dashboard.tasks.add_new': 'Πρόσθεσε νέα εργασία', 'dashboard.offers.empty': 'Δεν έχεις υποβάλλει προσφορές', 'dashboard.offers.empty.cta': 'Βρες εργασίες', 'dashboard.customer.specialists_title': 'Ψάχνεις εκτελεστή;', 'dashboard.customer.specialists_hint': 'Δες προφίλ ειδικών, διάβασε αξιολογήσεις και κάλεσέ τους στις εργασίες σου', 'dashboard.customer.specialists_cta': 'Βρες ειδικό', 'dashboard.customer.how_title': 'Πώς λειτουργεί', 'dashboard.customer.step1': 'Δημιούργησε εργασία με περιγραφή και προϋπολογισμό', 'dashboard.customer.step2': 'Οι ειδικοί θα στείλουν προσφορές με τιμή και χρόνο', 'dashboard.customer.step3': 'Επίλεξε τον κατάλληλο και ξεκίνα τη συνεργασία', // Notifications 'notif.title': 'Ειδοποιήσεις', 'notif.mark_all': 'Σήμανση όλων ως αναγνωσμένα', 'notif.empty': 'Δεν υπάρχουν ειδοποιήσεις', 'notif.type.generic': 'Ειδοποίηση', 'notif.type.new_offer': 'Νέα προσφορά', 'notif.type.offer_accepted': 'Η προσφορά σας έγινε δεκτή', 'notif.type.offer_declined': 'Η προσφορά σας απορρίφθηκε', 'notif.type.task_completed': 'Η εργασία ολοκληρώθηκε', 'notif.type.task_cancelled': 'Η εργασία ακυρώθηκε', 'notif.type.new_message': 'Νέο μήνυμα', 'notif.type.new_review': 'Νέα αξιολόγηση', 'notif.type.task_invite': 'Πρόσκληση σε εργασία', 'notif.type.referral_reward': 'Ανταμοιβή παραπομπής', 'notif.type.specialist_card_submitted': 'Η κάρτα στάλθηκε για έλεγχο', 'notif.type.specialist_card_approved': 'Η κάρτα εγκρίθηκε', 'notif.type.specialist_card_rejected': 'Η κάρτα απορρίφθηκε', 'notif.body.new_offer': 'Νέα προσφορά για «{title}»', 'notif.body.offer_accepted': 'Η προσφορά σας για «{title}» έγινε δεκτή', 'notif.body.offer_declined': 'Η προσφορά σας για «{title}» απορρίφθηκε', 'notif.body.task_invite': 'Σας προσκαλούν για «{title}»', 'notif.body.new_review': 'Λάβατε αξιολόγηση {rating}★', 'notif.body.referral_reward': 'Προστέθηκαν {days} ημέρες πρόσβασης στο πλάνο «{plan}» στον λογαριασμό σας!', 'notif.body.specialist_card_submitted': 'Η κάρτα «{title}» στάλθηκε για έλεγχο', 'notif.body.specialist_card_approved': 'Η κάρτα «{title}» εγκρίθηκε και δημοσιεύτηκε', 'notif.body.specialist_card_rejected': 'Η κάρτα «{title}» δεν εγκρίθηκε. Διορθώστε την και στείλτε την ξανά.', // Offer status 'offer.status.pending': 'Εκκρεμεί', 'offer.status.accepted': 'Αποδεκτή', 'offer.status.declined': 'Απορρίφθηκε', 'offer.status.withdrawn': 'Αποσύρθηκε', 'offer.status.other_accepted': 'Επιλέχθηκε άλλος ειδικός', // Common 'common.loading': 'Φόρτωση...', 'common.error': 'Σφάλμα', 'common.save': 'Αποθήκευση', 'common.saving': 'Αποθήκευση...', 'common.cancel': 'Ακύρωση', 'common.add': 'Προσθήκη', 'common.close': 'Κλείσιμο', 'common.edit': 'Επεξεργασία', 'common.delete': 'Διαγραφή', 'common.from': 'από', 'common.currency': '€', 'common.greece': 'Ελλάδα', // Chat 'chat.connected': 'Συνδεδεμένος', 'chat.disconnected': 'Αποσυνδεδεμένος', 'chat.no_rooms': 'Δεν υπάρχουν συνομιλίες ακόμα', 'chat.task_fallback': 'Εργασία', 'chat.select': 'Επίλεξε συνομιλία', 'chat.no_messages': 'Δεν υπάρχουν μηνύματα', 'chat.placeholder': 'Γράψε μήνυμα... (Enter για αποστολή)', 'chat.conversation_fallback': 'Συνομιλία', 'chat.direct_chat': 'Απευθείας συνομιλία', 'chat.linked_task': 'Συνδεδεμένη εργασία', 'chat.write_btn': 'Μήνυμα', 'chat.just_now': 'μόλις τώρα', 'chat.min_ago': 'λ', 'chat.write_specialist': 'Γράψε στον ειδικό', 'chat.write_customer': 'Γράψε στον πελάτη', 'chat.notif_settings': 'Ρυθμίσεις ειδοποιήσεων', 'chat.notif_messages': 'Ειδοποιήσεις για νέα μηνύματα', 'chat.toast_title': 'Νέο μήνυμα', 'chat.toast_open': 'Άνοιγμα συνομιλίας', // Offer form 'offer.price': 'Τιμή', 'offer.price.placeholder': 'π.χ. 80', 'offer.customer_budget': 'Προϋπολογισμός πελάτη', 'offer.message': 'Μήνυμα', 'offer.optional': 'προαιρετικό', 'offer.message.placeholder': 'Παρουσίασε τον εαυτό σου, την εμπειρία σου και γιατί είσαι η καλύτερη επιλογή...', 'offer.submitting': 'Αποστολή...', // Profile 'profile.photo': 'Φωτογραφία προφίλ', 'profile.photo.change': 'Αλλαγή φωτογραφίας', 'profile.photo.hint': 'JPEG, PNG, WebP · έως 5MB', 'profile.basic_info': 'Βασικά στοιχεία', 'profile.phone': 'Τηλέφωνο', 'profile.phone.placeholder': '+30 6901234567', 'profile.bio': 'Σύντομη περιγραφή', 'profile.bio.placeholder': 'Πες μας λίγα λόγια για εσένα...', 'profile.language': 'Γλώσσα', 'profile.language.hint': 'Γλώσσα διεπαφής και email ειδοποιήσεων', 'profile.languages': 'Γλώσσες επικοινωνίας', 'profile.languages.hint': 'Επιλέξτε όλες τις γλώσσες που μιλάτε', 'profile.skills': 'Δεξιότητες', 'profile.skills.subtitle': 'Προσθέσε τις υπηρεσίες που προσφέρεις', 'profile.skills.placeholder': 'π.χ. Καθαρισμός, IT, Μαθήματα...', 'profile.role': 'Ρόλος λογαριασμού', 'profile.role.specialist': '🔧 Βοηθός', 'profile.role.admin': '👑 Admin', 'profile.role.customer': '👤 Χρήστης', 'profile.role.user': '👤 Χρήστης', 'profile.role.change': 'Για αλλαγή ρόλου επικοινωνήστε με την υποστήριξη.', 'profile.become_specialist': 'Πρόσφερε βοήθεια', 'profile.become_specialist.desc': 'Δημιούργησε το προφίλ βοηθού σου, πρόσφερε τις δεξιότητές σου και αρχίνισε να λαμβάνεις εργασίες.', 'become_specialist.hero.title': 'Πρόσφερε τις δεξιότητές σου', 'become_specialist.hero.subtitle': 'Δημιούργησε προφίλ βοηθού και λάβε αιτήματα από ανθρώπους που χρειάζονται βοήθεια', 'become_specialist.how.title': 'Πώς λειτουργεί', 'become_specialist.step1.title': 'Δημιούργησε κάρτα ειδικού', 'become_specialist.step1.desc': 'Δήλωσε κατηγορίες, δεξιότητες και περιοχές κάλυψης — το σύστημα θα βρει τις κατάλληλες εργασίες για σένα αυτόματα', 'become_specialist.step2.title': 'Βρες εργασίες', 'become_specialist.step2.desc': 'Ανακάλυψε εργασίες στις κατηγορίες σου στην ενότητα «Αναζήτηση εργασιών»', 'become_specialist.step3.title': 'Στείλε προσφορά & κέρδισε', 'become_specialist.step3.desc': 'Υποβάλε προσφορές με τιμή και χρόνο, επικοινωνήσε με πελάτες και ολοκλήρωσε εργασίες', 'become_specialist.benefits.title': 'Πλεονεκτήματα προφίλ ειδικού', 'become_specialist.benefit1': 'Αναζήτηση εργασιών ανά κατηγορία και τοποθεσία', 'become_specialist.benefit2': 'Δημόσιο προφίλ με αξιολογήσεις πελατών', 'become_specialist.benefit3': 'Πρόγραμμα διαθεσιμότητας ορατό στους πελάτες', 'become_specialist.benefit4': 'Προσθήκη σε αγαπημένα από πελάτες', 'become_specialist.cta': 'Περισσότερα', 'become_specialist.free_badge': 'Δωρεάν εγγραφή', 'profile.tab.notifications': 'Ειδοποιήσεις', 'profile.tab.reviews': 'Αξιολογήσεις', 'profile.tab.referral': 'Παραπομπές', 'profile.tab.auto_response': 'Αυτόματη απάντηση', 'profile.tab.site': 'Site', 'profile.site.title': 'Προσωπική σελίδα', 'profile.site.url_label': 'Προσωπικό site', 'profile.site.copy': 'Αντιγραφή', 'profile.site.copied': 'Αντιγράφηκε', 'profile.site.visible_title': 'Τι εμφανίζεται στη σελίδα σας', 'profile.site.visible.name': 'Όνομα και φωτογραφία', 'profile.site.visible.bio': 'Βιογραφικό', 'profile.site.visible.rating': 'Αξιολόγηση και κριτικές', 'profile.site.visible.portfolio': 'Χαρτοφυλάκιο / Κάρτες', 'profile.site.visible.contacts': 'Στοιχεία επικοινωνίας', 'profile.site.visible.full_last_name': 'Πλήρες επώνυμο', 'profile.site.visible.services': 'Κάρτες υπηρεσιών', 'profile.site.visible.reviews': 'Ενότητα κριτικών', 'profile.site.visible.status': 'Κατάσταση «Έτοιμος να βοηθήσω»', 'profile.site.theme': 'Θέμα εμφάνισης', 'profile.site.theme.dark': 'Σκοτεινό', 'profile.site.theme.light': 'Φωτεινό', 'profile.site.slug_taken': 'Αυτή η διεύθυνση είναι ήδη κατειλημμένη', 'profile.site.stats.title': 'Στατιστικά επισκεψιμότητας', 'profile.site.stats.days': 'τελευταίες 30 ημέρες', 'profile.site.stats.views': 'Προβολές', 'profile.site.stats.unique': 'Μοναδικοί επισκέπτες', 'profile.site.stats.messages': 'Μηνύματα', 'profile.site.stats.total_views': 'Συνολικές προβολές', 'profile.site.stats.total_unique': 'Μοναδικοί επισκέπτες', 'profile.site.stats.total_messages': 'Μηνύματα', 'profile.site.stats.empty': 'Δεν υπάρχουν δεδομένα ακόμη', 'profile.site.stats.loading': 'Φόρτωση στατιστικών...', 'profile.site.stats.no_slug': 'Ορίστε τη διεύθυνση του site για να δείτε στατιστικά', 'profile.site.edit_bio_hint': 'Το βιογραφικό και η φωτογραφία ρυθμίζονται στην καρτέλα «Βασικά».', 'profile.site.seo.title': 'SEO — μεταδεδομένα σελίδας', 'profile.site.seo.hint': 'Εμφανίζεται στα αποτελέσματα αναζήτησης. Αποθηκεύστε για αυτόματη μετάφραση σε όλες τις γλώσσες.', 'profile.site.seo.site_title': 'Τίτλος σελίδας', 'profile.site.seo.site_title_placeholder': 'Γιάννης Παπαδόπουλος — Υδραυλικός στην Αθήνα', 'profile.site.seo.site_desc': 'Μετα-περιγραφή', 'profile.site.seo.site_desc_placeholder': 'Σύντομη περιγραφή για τις μηχανές αναζήτησης...', 'status.can_help_now_hint': 'Η κάρτα σου εμφανίζεται ψηλότερα', 'status.need_help_hint': 'Οι ειδικοί μπορούν να σε βοηθήσουν', 'profile.referral.title': 'Πρόγραμμα παραπομπών', 'profile.referral.desc': 'Μοιράσου τον σύνδεσμο σου και κέρδισε ανταμοιβές για κάθε νέο χρήστη.', 'profile.referral.link_label': 'Ο σύνδεσμος παραπομπής σου', 'profile.referral.copy': 'Αντιγραφή', 'profile.referral.copied': 'Αντιγράφηκε!', 'profile.referral.invited_count': 'επιτυχείς παραπομπές', 'profile.referral.no_code': 'Ο κωδικός παραπομπής δεν είναι διαθέσιμος.', 'notifications.title': 'Ρυθμίσεις ειδοποιήσεων', 'notifications.email.new_tasks': 'Email για νέες εργασίες', 'notifications.email.new_tasks.desc': 'Λάβε email όταν δημοσιευτεί νέα εργασία στις κατηγορίες σου', 'notifications.messages.desc': 'Λαμβάνεις ειδοποίηση όταν έρθει νέο μήνυμα', 'notifications.saved': 'Ρυθμίσεις αποθηκεύτηκαν', 'notifications.plan_required': 'Συνδρομή απαιτείται για αυτή τη λειτουργία', 'profile.tab.info': 'Βασικά στοιχεία', 'profile.tab.finance': 'Οικονομικά', 'profile.tab.skills': 'Δεξιότητες', 'profile.tab.categories': 'Κατηγορίες', 'profile.tab.geography': 'Γεωγραφία', 'profile.specialist.categories': 'Κατηγορίες εργασιών', 'profile.specialist.categories.desc': 'Επίλεξε τις κατηγορίες στις οποίες εργάζεσαι', 'profile.specialist.geography': 'Περιοχές κάλυψης', 'profile.specialist.geography.desc': 'Επίλεξε τις πόλεις / περιοχές όπου δραστηριοποιείσαι', 'profile.saving': 'Αποθήκευση...', 'profile.upload.error': 'Σφάλμα κατά την αναφόρτωση', 'profile.saved': 'Αποθηκεύτηκε', 'profile.tab.cards': 'Προσφορές', 'profile.cards.count': 'Προσφορές', 'profile.cards.add': 'Νέα προσφορά', 'profile.cards.new_title': 'Τίτλος νέας προσφοράς', 'profile.cards.placeholder': 'π.χ. Υδραυλικά', 'profile.cards.create': 'Δημιουργία', 'profile.cards.cancel': 'Ακύρωση', 'profile.cards.empty': 'Δεν έχετε προσφορές', 'profile.cards.empty_hint': 'Δημιουργήστε την πρώτη σας κάρτα για να προβάλετε τις υπηρεσίες σας στους πελάτες.', 'profile.cards.create_first': 'Δημιουργήστε την πρώτη σας προσφορά', 'profile.cards.delete_confirm': 'Διαγραφή προσφοράς;', 'profile.listing_requirements.published_card': 'Δημοσιεύστε τουλάχιστον μία κάρτα', 'profile.listing_requirements.title': 'Το προφίλ σας δεν εμφανίζεται ακόμη στις προσφορές', 'profile.listing_requirements.hint': 'Για να γίνει ορατή η κάρτα, ολοκληρώστε αυτές τις προϋποθέσεις:', 'profile.listing_requirements.bio': 'Προσθέστε ένα σύντομο βιογραφικό στην ενότητα προφίλ', 'profile.listing_requirements.categories': 'Προσθέστε τουλάχιστον μία κατηγορία στην ενεργή κάρτα', 'profile.listing_requirements.locations': 'Προσθέστε τουλάχιστον μία τοποθεσία στην ενεργή κάρτα', 'profile.listing_requirements.card_inactive': 'Κάντε την κάρτα ενεργή', 'profile.listing_requirements.review_pending': 'Η κάρτα είναι υπό έλεγχο', 'profile.card.visibility_issue': 'Η κάρτα δεν εμφανίζεται στις προσφορές', 'profile.card.tab.main': 'Γενικά', 'profile.card.tab.skills': 'Δεξιότητες', 'profile.card.tab.categories': 'Κατηγορίες', 'profile.card.tab.geography': 'Γεωγραφία', 'profile.card.tab.portfolio': 'Γκαλερί', 'profile.card.tab.pricelist': 'Τιμοκατάλογος', 'profile.card.pricelist.empty': 'Δεν έχουν οριστεί ομάδες τιμοκαταλόγου.', 'profile.card.pricelist.add_group': 'Προσθήκη ομάδας', 'profile.card.pricelist.group_title': 'Τίτλος ομάδας', 'profile.card.pricelist.add_item': 'Προσθήκη στοιχείου', 'profile.card.pricelist.item_name': 'Υπηρεσία / εργασία', 'profile.card.pricelist.item_desc': 'Περιγραφή (προαιρετικό)', 'profile.card.pricelist.item_price': 'Τιμή', 'profile.card.pricelist.item_unit': 'Μονάδα (π.χ. /ώρα)', 'profile.card.pricelist.save_group': 'Αποθήκευση ομάδας', 'profile.card.pricelist.save_item': 'Αποθήκευση', 'profile.card.pricelist.delete_group': 'Διαγραφή ομάδας', 'profile.card.pricelist.delete_item': 'Διαγραφή', 'profile.card.active': 'Ενεργή', 'profile.card.review_pending': 'Σε αναμονή έγκρισης', 'profile.card.review_pending_hint': 'Η κάρτα σας ελέγχεται τώρα από τη διαχείριση.', 'profile.card.review_submitted': 'Η κάρτα στάλθηκε για έλεγχο', 'profile.card.review_approved': 'Η κάρτα εγκρίθηκε', 'profile.card.review_approved_hint': 'Η κάρτα σας εμφανίζεται τώρα στις προσφορές.', 'profile.card.review_rejected': 'Η κάρτα απορρίφθηκε', 'profile.card.review_rejected_hint': 'Η κάρτα σας δεν εγκρίθηκε. Διορθώστε την και στείλτε την ξανά.', 'profile.card.submit_review': 'Αποστολή για έλεγχο', 'profile.card.withdraw_review': 'Ανάκληση αίτησης', 'profile.card.unpublish': 'Αφαίρεση από δημοσίευση', 'profile.card.save': 'Αποθήκευση', 'profile.card.saved': 'Αποθηκεύτηκε', 'profile.card.delete': 'Διαγραφή', 'profile.card.skill.add': 'Προσθήκη δεξιότητας', 'profile.card.photo.add': 'Προσθήκη φωτογραφίας', 'profile.card.photo.uploading': 'Μεταφόρτωση...', 'profile.card.photo.empty': 'Δεν υπάρχουν φωτογραφίες', 'profile.card.item.title': 'Τίτλος', 'profile.card.item.desc': 'Περιγραφή', 'profile.card.item.save': 'Αποθήκευση', 'profile.card.item.cancel': 'Ακύρωση', 'profile.card.item.edit': 'Επεξεργασία', 'profile.card.description': 'Περιγραφή κάρτας', 'profile.card.desc_auto_translate': 'Κατά την αποθήκευση θα μεταφραστεί αυτόματα σε άλλες γλώσσες', 'profile.card.desc_translated': 'Υπάρχουν μεταφράσεις:', 'profile.upgrade.cards_limit': 'Όριο χαρτοφυλακίων εξαντλήθηκε', 'profile.upgrade.plan': 'Τρέχον πλάνο:', 'profile.upgrade.contact': 'Επικοινωνήστε με τον διαχειριστή για αλλαγή πλάνου', 'profile.upgrade.ok': 'Εντάξει', 'profile.plan.title': 'Πλάνο συνδρομής', 'profile.balance': 'Υπόλοιπο', 'profile.balance.topup': 'Αναπλήρωση υπολοίπου', 'profile.balance.topup.title': 'Αναπλήρωση υπολοίπου', 'profile.balance.topup.amount': 'Ποσό (σε EUR)', 'profile.balance.topup.hint': 'Επιλέξτε ποσό ή εισαγάγετε μανούαλα', 'profile.balance.topup.submit': 'Πληρωμή', 'profile.balance.topup.loading': 'Ρεδιρεκτάρισμα...', 'profile.balance.topup.error': 'Σφάλμα μετάβασης στην πληρωμή. Προσπαθήστε ξανά.', 'payment.success.title': 'Πληρωμή επιτυχής!', 'payment.success.desc': 'Το υπόλοιπό σας ενημερώθηκε.', 'payment.cancelled.title': 'Ακύρωση πληρωμής', 'payment.cancelled.desc': 'Η πληρωμή ακυρώθηκε. Κανένα χρήμα δεν χρεώθηκε.', 'payment.pending.title': 'Σε εξέλιξη...', 'payment.pending.desc': 'Επεξεργαζόμαστε την πληρωμή σας.', 'payment.back_to_profile': 'Επιστροφή στο προφίλ', 'profile.plan.basic': 'Βασικό (δωρεάν)', 'profile.plan.contact_upgrade': 'Επικοινωνήστε με τον διαχειριστή για αναβάθμιση', 'profile.plan.cards_up_to': 'Χαρτοφυλάκια: έως', 'profile.plan.cards_unlimited': 'Χαρτοφυλάκια: απεριόριστα', 'profile.plan.tasks_up_to': 'Εργασίες: έως', 'profile.plan.offers_up_to': 'Προσφορές: έως', 'profile.plan.valid_until': 'Ισχύει έως', 'profile.plan.no_expiry': 'Δεν λήγει', // Create task 'create.error': 'Σφάλμα κατά τη δημοσίευση', // Tasks list extras 'tasks.category.general': 'Γενικά', 'tasks.budget.range': 'Εύρος:', 'tasks.budget.from': 'από', 'tasks.budget.to': 'έως', 'tasks.filter.reset': 'Εκκαθάριση φίλτρων', 'tasks.load_more': 'Φόρτωση ακόμα', 'tasks.showing': 'Αποτελέσματα:', 'tasks.field.budget': 'Προϋπολογισμός, €', // Admin 'admin.title': 'Πίνακας Διαχείρισης', 'admin.tab.stats': 'Στατιστικά', 'admin.tab.users': 'Χρήστες', 'admin.tab.tasks': 'Εργασίες', 'admin.tab.reports': 'Αναφορές', 'admin.tab.moderation': 'Μονάδα ελέγχου', 'admin.stats.users': 'Χρήστες', 'admin.stats.tasks': 'Εργασίες', 'admin.stats.offers': 'Προσφορές', 'admin.stats.reviews': 'Αξιολογήσεις', 'admin.tasks.by_status': 'Εργασίες ανά κατάσταση', 'admin.col.user': 'Χρήστης', 'admin.col.email': 'Email', 'admin.col.role': 'Ρόλος', 'admin.col.registered': 'Εγγραφή', 'admin.col.status': 'Κατάσταση', 'admin.col.title': 'Τίτλος', 'admin.col.budget': 'Προϋπολογισμός', 'admin.col.created': 'Δημιουργία', 'admin.users.active': 'Ενεργός', 'admin.users.inactive': 'Ανενεργός', 'admin.users.deactivate': 'Απενεργοποίηση', 'admin.users.activate': 'Ενεργοποίηση', 'admin.tasks.cancel': 'Ακύρωση', 'admin.reports.none': 'Δεν υπάρχουν αναφορές', 'admin.moderation.none': 'Δεν βρέθηκαν προσφορές για έλεγχο', 'admin.moderation.pending': 'Σε αναμονή', 'admin.moderation.active': 'Ενεργό', 'admin.moderation.approve': 'Έγκριση', 'admin.moderation.block': 'Μπλοκάρισμα', 'admin.moderation.pending_title': 'Προσφορές προς έγκριση', 'admin.moderation.active_title': 'Ενεργές προσφορές', 'admin.moderation.pending_count': 'Σε αναμονή', 'admin.moderation.active_count': 'Ενεργές', 'admin.moderation.pending_hint': 'Νέες προσφορές που περιμένουν έγκριση', 'admin.moderation.active_hint': 'Ενεργές προσφορές που μπορείτε να μπλοκάρετε', 'admin.moderation.pending_empty': 'Δεν υπάρχουν νέες προσφορές προς έγκριση', 'admin.moderation.active_empty': 'Δεν βρέθηκαν ενεργές προσφορές', 'admin.reports.reviewed': 'Αναθεωρήθηκε', 'admin.reports.dismiss': 'Απόρριψη', 'admin.pagination.total': 'Σύνολο', 'admin.users.role.change': 'Αλλαγή ρόλου', 'admin.users.search.placeholder': 'Αναζήτηση ονόματος ή email...', 'admin.tasks.delete': 'Διαγραφή', 'admin.tasks.delete.confirm': 'Διαγραφή αυτής της εργασίας μόνιμα;', 'admin.tasks.search.placeholder': 'Αναζήτηση τίτλου...', 'admin.col.customer': 'Πελάτης', 'admin.col.reporter': 'Καταγγέλλων', 'admin.col.target': 'Στόχος', 'admin.filter.all_roles': 'Όλοι οι ρόλοι', 'admin.filter.all_statuses': 'Όλες οι καταστάσεις', 'admin.reports.target.task': 'Εργασία', 'admin.reports.target.user': 'Χρήστης', 'admin.tab.categories': 'Κατηγορίες', 'admin.tab.locations': 'Πόλεις & Περιοχές', 'admin.tab.logs': 'Αρχεία', 'admin.tab.plans': 'Πακέτα', 'admin.tab.settings': 'Ρυθμίσεις', 'admin.logs.subtab.ai': 'AI Logs', 'admin.logs.subtab.activity': 'Δραστηριότητα', 'admin.logs.subtab.mail': 'Mail', 'admin.logs.subtab.notifications': 'Ειδοποιήσεις', 'admin.notif_logs.type': 'Τύπος', 'admin.notif_logs.title': 'Τίτλος', 'admin.notif_logs.read': 'Διαβασμένο', 'admin.notif_logs.empty': 'Δεν υπάρχουν αρχεία ειδοποιήσεων', 'admin.stats.notif_chart_title': 'Ειδοποιήσεις ανά ημέρα', 'admin.stats.notif_label': 'Ειδοποιήσεις', 'admin.stats.mail_chart_title': 'Emails ανά ημέρα', 'admin.stats.mail_label': 'Emails', 'admin.filter.all': 'Όλα', 'admin.stats.specialists': 'Βοηθοί', 'admin.col.plan': 'Πακέτο', 'admin.back_home': 'Αρχική', 'admin.plans.title': 'Πακέτα συνδρομής', 'admin.plans.add': '+ Νέο πακέτο', 'admin.plans.empty': 'Δεν υπάρχουν πακέτα', 'admin.plans.form.new': 'Νέο πακέτο', 'admin.plans.form.edit': 'Επεξεργασία πακέτου', 'admin.plans.form.name': 'Όνομα', 'admin.plans.form.price': 'Τιμή (EUR)', 'admin.plans.form.old_price': 'Παλιά τιμή (EUR, προαιρετικό)', 'admin.plans.form.max_offers': 'Μέγ. προσφορές (κενό = χωρίς όριο)', 'admin.plans.form.max_cards': 'Μέγ. προσφορές (κενό = χωρίς όριο)', 'admin.plans.form.duration_days': 'Διάρκεια (ημέρες, κενό = χωρίς λήξη)', 'admin.plans.form.description': 'Περιγραφή', 'admin.plans.form.features': 'Δυνατότητες (μία ανά γραμμή)', 'admin.plans.form.notify': 'Ειδοποιήσεις νέων εργασιών', 'admin.plans.form.default': 'Προεπιλογή', 'admin.plans.form.active': 'Ενεργό', 'admin.plans.form.order': 'Σειρά', 'admin.plans.form.role': 'Ρόλος', 'admin.plans.form.tier': 'Επίπεδο', 'admin.plans.form.role.customer': 'Πελάτης', 'admin.plans.form.role.specialist': 'Βοηθός', 'admin.plans.form.tier.free': 'Δωρεάν', 'admin.plans.form.tier.pro': 'Pro', 'admin.plans.form.tier.ultimate': 'Ultimate', 'admin.plans.form.section.limits': 'Όρια (κενό = χωρίς όριο)', 'admin.plans.form.max_messages_day': 'Μέγ. μηνύματα/ημέρα', 'admin.plans.form.max_orders_day': 'Μέγ. παραγγελίες/ημέρα', 'admin.plans.form.max_skills': 'Μέγ. δεξιότητες', 'admin.plans.form.max_profiles': 'Μέγ. προφίλ', 'admin.plans.form.max_portfolio': 'Μέγ. στοιχεία χαρτοφυλακίου', 'admin.plans.form.section.boost': 'Πολλαπλασιαστές & Ενίσχυση', 'admin.plans.form.search_boost': 'Ενίσχυση αναζήτησης', 'admin.plans.form.offers_multiplier': 'Πολλαπλασιαστής προσφορών', 'admin.plans.form.section.contact': 'Δικαιώματα επικοινωνίας', 'admin.plans.form.can_contact_free': 'Επικοινωνία με δωρεάν χρήστες', 'admin.plans.form.can_contact_pro': 'Επικοινωνία με Pro χρήστες', 'admin.plans.form.can_contact_all': 'Επικοινωνία με όλους', 'admin.plans.form.can_show_contact': 'Εμφάνιση στοιχείων επικοινωνίας', 'admin.plans.form.can_view_phone': 'Προβολή τηλεφώνου', 'admin.plans.form.section.features': 'Λειτουργίες', 'admin.plans.form.upload_video': 'Μεταφόρτωση βίντεο', 'admin.plans.form.favorites': 'Αγαπημένα', 'admin.plans.form.google_calendar': 'Google Calendar', 'admin.plans.form.verified_badge': 'Σήμα επαλήθευσης', 'admin.plans.form.highlighted_reviews': 'Προβεβλημένες κριτικές', 'admin.plans.form.personal_site': 'Προσωπική σελίδα', 'admin.plans.form.can_help_now': 'Κατάσταση «Μπορώ να βοηθήσω»', 'admin.plans.form.need_help': 'Κατάσταση «Χρειάζομαι βοήθεια»', 'admin.plans.form.auto_response': 'Αυτόματη απάντηση', 'admin.plans.form.auto_match': 'Αυτόματη αντιστοίχιση', 'admin.plans.form.price_list': 'Τιμοκατάλογος', 'admin.plans.form.instant_dispatch_free': 'Άμεση αποστολή (δωρεάν)', 'admin.plans.form.instant_dispatch_pro': 'Άμεση αποστολή (Pro)', 'admin.plans.badge.default': 'Προεπιλογή', 'admin.plans.badge.inactive': 'Ανενεργό', 'admin.plans.make_default': 'Ορισμός ως προεπιλογή', 'admin.plans.tasks': 'Εργασίες', 'admin.plans.offers': 'Προσφορές', 'admin.plans.cards': 'Προσφορές', 'admin.plans.notify_tasks': 'Ειδοποιήσεις εργασιών', 'admin.plans.delete.confirm': 'Διαγραφή πακέτου', 'admin.activity.title': 'Αρχείο δραστηριότητας', 'admin.activity.event': 'Γεγονός', 'admin.activity.all_events': 'Όλα τα γεγονότα', 'admin.activity.from': 'Από', 'admin.activity.to': 'Έως', 'admin.activity.reset': 'Επαναφορά', 'admin.activity.total': 'Σύνολο', 'admin.activity.empty': 'Δεν υπάρχουν εγγραφές', 'admin.mail.event': 'Συμβάν email', 'admin.mail.all_events': 'Όλα τα email συμβάντα', 'admin.mail.from': 'Από', 'admin.mail.to': 'Έως', 'admin.mail.reset': 'Επαναφορά', 'admin.mail.total': 'Σύνολο', 'admin.mail.empty': 'Δεν υπάρχουν email logs', 'admin.mail.recipient': 'Παραλήπτης', 'admin.mail.provider': 'Πάροχος', 'admin.mail.details': 'Λεπτομέρειες', 'admin.mail.status': 'Κατάσταση', 'admin.mail.success': 'Επιτυχία', 'admin.mail.failed': 'Σφάλμα', 'admin.event.email_sent': 'Email sent', 'admin.event.email_failed': 'Email failed', 'admin.event.email_dev': 'Email DEV fallback', 'admin.event.admin_email_test_sent': 'Admin test email sent', 'admin.event.admin_email_test_failed': 'Admin test email failed', 'admin.logs.empty': 'Δεν υπάρχουν εγγραφές', 'admin.logs.date': 'Ημερομηνία', 'admin.logs.provider': 'Πάροχος', 'admin.logs.model': 'Μοντέλο', 'admin.logs.action': 'Ενέργεια', 'admin.logs.langs': 'Γλώσσες', 'admin.logs.in': 'Είσοδος', 'admin.logs.out': 'Έξοδος', 'admin.logs.total': 'Σύνολο', 'admin.logs.ms': 'ms', 'admin.logs.status': 'Κατάσταση', 'admin.stats.activity_30d': 'Δραστηριότητα 30 ημερών', 'admin.stats.tasks_label': 'Εργασίες', 'admin.stats.users_label': 'Χρήστες', 'admin.stats.specialists_label': 'Βοηθοί', 'admin.stats.tokens_title': 'Χρήση tokens (ανά μήνα)', 'admin.stats.tokens_out': 'Εξερχόμενα', 'admin.stats.tokens_in': 'Εισερχόμενα', 'admin.stats.tokens_out_label': 'Εξερχόμενα tokens', 'admin.stats.tokens_in_label': 'Εισερχόμενα tokens', 'admin.stats.cost_label': 'Κόστος (USD)', 'admin.stats.tasks_by_status': 'Εργασίες ανά κατάσταση', 'admin.task_status.open': 'Ανοιχτές', 'admin.task_status.in_progress': 'Σε εξέλιξη', 'admin.task_status.completed': 'Ολοκληρωμένες', 'admin.task_status.cancelled': 'Ακυρωμένες', 'admin.task_status.draft': 'Προσχέδια', 'admin.settings.tab.general': 'Γενικά', 'admin.settings.tab.smtp': 'E-Mail', 'admin.settings.tab.notifications': 'Ειδοποιήσεις', 'admin.settings.tab.payment': 'Πληρωμή', 'admin.settings.tab.referral': 'Παραπομπές', 'admin.settings.tab.seo': 'SEO', 'admin.settings.tab.socials': 'Κοινωνικά δίκτυα', 'admin.settings.tab.telegram': 'Telegram Bot', 'admin.settings.telegram.title': 'Ρυθμίσεις Telegram Bot', 'admin.settings.telegram.help': 'Δημιουργήστε bot μέσω @BotFather. Για chat ID χρησιμοποιήστε @userinfobot.', 'admin.settings.telegram.bot_token': 'Bot Token', 'admin.settings.telegram.admin_chat_id': 'Admin Chat ID', 'admin.settings.telegram.admin_chat_hint': 'Γράψτε /start στο bot σας, μετά στείλτε μήνυμα μέσω @userinfobot για να λάβετε το chat ID', 'admin.settings.telegram.channel_id': 'Channel ID', 'admin.settings.telegram.channels_title': 'Κανάλια ανά γλώσσα', 'admin.settings.telegram.channel_hint': 'Αναγνωριστικό δημόσιου καναλιού ή @όνομα καναλιού', 'admin.settings.telegram.notify_registrations': 'Ειδοποίηση νέων εγγραφών', 'admin.settings.telegram.notify_registrations_hint': 'Αποστολή μηνύματος στον admin κατά την εγγραφή νέου χρήστη', 'admin.settings.telegram.post_new_tasks': 'Δημοσίευση νέων εργασιών', 'admin.settings.telegram.post_new_tasks_hint': 'Αυτόματη δημοσίευση νέων εργασιών στο κανάλι', 'admin.settings.telegram.test': 'Δοκιμή', 'admin.settings.telegram.verify': 'Επαλήθευση', 'admin.settings.telegram.test_ok': 'Η σύνδεση λειτουργεί', 'admin.settings.telegram.test_fail': 'Σφάλμα σύνδεσης', 'admin.settings.socials.title': 'Σύνδεσμοι κοινωνικών δικτύων', 'admin.settings.socials.hint': 'Συμπληρωμένες εγγραφές εμφανίζονται στο υπόγειο', 'admin.settings.seo.maintenance_label': 'Λειτουργία συντήρησης', 'admin.settings.seo.maintenance_hint': 'Εμφάνιση σελίδας συντήρησης σε όλους τους επισκέπτες', 'admin.settings.seo.indexing_label': 'Ευρετηρίαση από μηχανές αναζήτησης', 'admin.settings.seo.indexing_hint': 'Επιτρέπει στις μηχανές αναζήτησης να ευρετηριάσουν τον ιστότοπο', 'admin.settings.seo.head_scripts_label': 'Scripts στο (JS)', 'admin.settings.seo.head_scripts_hint': 'Εκτελείται σε κάθε σελίδα (Google Tag Manager, analytics κ.λπ.)', 'admin.settings.seo.site_title_label': 'Τίτλος ιστότοπου', 'admin.settings.seo.site_description_label': 'Περιγραφή ιστότοπου (meta description)', 'admin.settings.referral.title': 'Πρόγραμμα παραπομπών', 'admin.settings.referral.hint': 'Επιβράβευσε χρήστες που φέρνουν νέους εγγεγραμμένους.', 'admin.settings.referral.enabled_label': 'Ενεργό', 'admin.settings.referral.enabled_hint': 'Ενεργοποίηση / απενεργοποίηση εφαρμογής ανταμοιβών', 'admin.settings.referral.customer_section': 'Για πελάτες', 'admin.settings.referral.specialist_section': 'Για βοηθούς', 'admin.settings.referral.plan_label': 'Πλάνο ανταμοιβής', 'admin.settings.referral.no_plan': '— χωρίς πλάνο —', 'admin.settings.referral.plan_hint': 'Αυτό το πλάνο θα ανατεθεί στον χρήστη που έφερε νέους. Εάν το τρέχον πλάνο του είναι υψηλότερο, θα προστεθούν μόνο οι μέρες.', 'admin.settings.referral.days_label': 'Ημέρες ανταμοιβής', 'admin.settings.referral.days_hint': 'Αριθμός ημερών που θα προστεθούν στη λήξη του πλάνου.', 'admin.settings.general.title': 'Γενικές ρυθμίσεις', 'admin.settings.general.site_name': 'Όνομα ιστότοπου', 'admin.settings.general.site_url': 'URL ιστότοπου', 'admin.settings.general.contact_email': 'Email επικοινωνίας', 'admin.settings.general.support_phone': 'Τηλέφωνο υποστήριξης', 'admin.settings.smtp.title': 'Ρυθμίσεις SMTP', 'admin.settings.smtp.hint': 'Χρησιμοποιείται για αποστολή ειδοποιήσεων email.', 'admin.settings.smtp.host': 'SMTP Host', 'admin.settings.smtp.port': 'Θύρα', 'admin.settings.smtp.encryption': 'Κρυπτογράφηση', 'admin.settings.smtp.enc.none': 'Χωρίς', 'admin.settings.smtp.enc.tls': 'STARTTLS (θύρα 587)', 'admin.settings.smtp.enc.ssl': 'SSL/TLS (θύρα 465)', 'admin.settings.smtp.username': 'Όνομα χρήστη', 'admin.settings.smtp.password': 'Κωδικός / App Password', 'admin.settings.smtp.from_name': 'Όνομα αποστολέα', 'admin.settings.smtp.from_email': 'Email αποστολέα', 'admin.settings.smtp.test': 'Αποστολή δοκιμαστικού email', 'admin.settings.smtp.sending': 'Αποστολή...', 'admin.settings.payment.hint': 'Τα στοιχεία για ePay Piraeus Bank.', 'admin.settings.env.test': 'Δοκιμαστικό (sandbox)', 'admin.settings.env.prod': 'Παραγωγή', 'admin.settings.env.label': 'Περιβάλλον', 'admin.settings.merchant_id': 'Merchant ID', 'admin.settings.api_user': 'API User', 'admin.settings.api_password': 'API Password', 'admin.settings.confirm_url': 'Confirmation URL (webhook)', 'admin.settings.cancel_url': 'Cancel URL', 'admin.settings.active': 'Ενεργό', 'admin.settings.saving': 'Αποθήκευση...', 'admin.settings.saved': '✓ Αποθηκεύτηκε', 'admin.notif.vars_hint': 'Διαθέσιμες μεταβλητές στα πρότυπα', 'admin.notif.tmpl.not_set': 'Πρότυπο δεν έχει οριστεί', 'admin.notif.tmpl.subject_label': 'Θέμα email', 'admin.notif.tmpl.body_label': 'Κείμενο email (HTML)', 'admin.notif.tmpl.save': 'Αποθήκευση', 'admin.notif.tmpl.close': 'Κλείσιμο', 'admin.notif.tmpl.translate': 'Αυτόματη μετάφραση', 'admin.notif.tmpl.translating': 'Μετάφραση...', 'admin.notif.tmpl.saving': 'Αποθήκευση...', 'admin.notif.email_verification': 'Επαλήθευση email', 'admin.notif.registration_success': 'Επιτυχής εγγραφή', 'admin.notif.password_reset': 'Επαναφορά κωδικού', 'admin.notif.new_offer': 'Νέα προσφορά', 'admin.notif.new_task': 'Νέα εργασία', 'admin.notif.offer_accepted': 'Προσφορά αποδεκτή', 'admin.notif.new_message': 'Νέο μήνυμα', 'admin.notif.offer_declined': 'Απόρριψη προσφοράς', 'admin.notif.offer_other_accepted': 'Επιλέχθηκε άλλος ειδικός', 'admin.notif.task_updated': 'Ενημέρωση εργασίας', 'admin.notif.deadline_reminder': 'Υπενθύμιση προθεσμίας', 'admin.notif.task_archived': 'Αυτόματη απόσυρση εργασίας', 'admin.notif.referral_reward': 'Ανταμοιβή παραπομπής', // Plan lifecycle email templates 'admin.email_template.plan_activated': 'Τιμολόγιο — ενεργοποίηση πλάνου', 'admin.email_template.plan_upgraded': 'Τιμολόγιο — αναβάθμιση πλάνου', 'admin.email_template.plan_downgrade_scheduled': 'Τιμολόγιο — προγραμματισμένη υποβάθμιση', 'admin.email_template.plan_downgrade_applied': 'Τιμολόγιο — εφαρμογή υποβάθμισης', 'admin.email_template.plan_renewal_reminder': 'Τιμολόγιο — υπενθύμιση ανανέωσης', 'admin.email_template.plan_insufficient_funds': 'Τιμολόγιο — ανεπαρκές υπόλοιπο', // Pricing confirm modal 'pricing.confirm.title': 'Επιβεβαίωση επιλογής πλάνου', 'pricing.confirm.plan': 'Πλάνο', 'pricing.confirm.prorated': 'Αναλογική έκπτωση', 'pricing.confirm.effective_price': 'Προς πληρωμή', 'pricing.confirm.your_balance': 'Το υπόλοιπό σας', 'pricing.confirm.downgrade_info': 'Η μετάβαση στο νέο πλάνο θα γίνει αυτόματα μετά τη λήξη της τρέχουσας περιόδου.', 'pricing.confirm.insufficient': 'Ανεπαρκές υπόλοιπο.', 'pricing.confirm.top_up': 'Ανανέωση', 'pricing.confirm.schedule_downgrade': 'Προγραμματισμός μετάβασης', 'pricing.confirm.pay': 'Πληρωμή', 'admin.user_edit.title': 'Επεξεργασία χρήστη', 'admin.user_edit.email': 'Email', 'admin.user_edit.email_verified': 'Διευθυνση email επαληθεύτηκε', 'admin.user_edit.email_not_verified': 'Email δεν έχει επαληθευτεί', 'admin.user_edit.verify_email_btn': 'Χειροκίνητη επαλήθευση', 'admin.user_edit.verify_email_done': 'Email επαληθεύτηκε!', 'admin.user_edit.id': 'ID', 'admin.user_edit.registered': 'Εγγραφή', 'admin.user_edit.last_seen': 'Τελευταία σύνδεση', 'admin.user_edit.lang': 'Γλώσσα', 'admin.user_edit.first_name': 'Όνομα', 'admin.user_edit.last_name': 'Επώνυμο', 'admin.user_edit.phone': 'Τηλέφωνο', 'admin.user_edit.bio': 'Βιογραφικό', 'admin.user_edit.role': 'Ρόλος', 'admin.user_edit.plan': 'Πακέτο', 'admin.user_edit.no_plan': '— Χωρίς πακέτο —', 'admin.user_edit.active': 'Ενεργός λογαριασμός', 'admin.user_edit.published': 'Δημοσιευμένη', 'admin.user_edit.balance': 'Υπόλοιπο (EUR)', 'admin.user_edit.skills': 'Δεξιότητες', 'admin.user_edit.tab.profile': 'Προφίλ', 'admin.user_edit.tab.account': 'Λογαριασμός', 'admin.user_edit.tab.balance': 'Υπόλοιπο', 'admin.user_edit.tab.settings': 'Ρυθμίσεις', 'admin.user_edit.tab.specialist': 'Προσφορές', 'admin.user_edit.tab.site': 'Ιστοσελίδα', 'admin.user_edit.plan_expires': 'Λήξη πλάνου', 'admin.user_edit.interface_lang': 'Γλώσσα διεπαφής', 'admin.user_edit.comm_languages': 'Γλώσσες επικοινωνίας', 'admin.user_edit.personal_site_slug': 'Προσωπική σελίδα', 'admin.user_edit.show_contact_info': 'Εμφάνιση στοιχείων επικοινωνίας', 'admin.user_edit.show_contact_info.hint': 'Ορατό στους πελάτες', 'admin.user_edit.notify_new_tasks': 'Ειδοποίηση για νέες εργασίες', 'admin.user_edit.notify_new_tasks.hint': 'Push και email ειδοποιήσεις', 'admin.user_edit.notif_messages': 'Ειδοποιήσεις μηνυμάτων', 'admin.user_edit.notif_messages.hint': 'Νέα μηνύματα στη συνομιλία', 'admin.user_edit.site_settings': 'Ρυθμίσεις προσωπικής σελίδας', 'admin.user_edit.categories': 'Κατηγορίες υπηρεσιών', 'admin.user_edit.locations': 'Περιοχές εξυπηρέτησης', 'admin.user_edit.skill_placeholder': 'Νέα δεξιότητα...', 'admin.user_edit.add_category': '— Επιλέξτε κατηγορία —', 'admin.user_edit.add_location': '— Επιλέξτε περιοχή —', 'admin.user_edit.specialist_cards': 'Προσφορές ειδικού', 'admin.user_edit.no_cards': 'Δεν βρέθηκαν προσφορές', 'admin.user_edit.card_title': 'Τίτλος προσφοράς', 'admin.user_edit.card_description': 'Περιγραφή', 'admin.balance.topup.btn': 'Αναπλήρωση', 'admin.balance.withdraw.btn': 'Αφαίρεση', 'admin.balance.modal_hint': 'Οι αλλαγές ισχύουν άμεσα και καταγράφονται στο ιστορικό', 'admin.balance.topup.title': 'Αναπλήρωση υπολοίπου', 'admin.balance.topup.amount': 'Ποσό', 'admin.balance.topup.description': 'Σχόλιο', 'admin.balance.topup.description.placeholder': 'Για παράδειγμα: bonus ή χειροκίνητη αναπλήρωση', 'admin.balance.topup.submit': 'Αναπλήρωση υπολοίπου', 'admin.balance.withdraw.title': 'Αφαίρεση υπολοίπου', 'admin.balance.withdraw.amount': 'Ποσό', 'admin.balance.withdraw.description': 'Σχόλιο', 'admin.balance.withdraw.description.placeholder': 'Για παράδειγμα: επιστροφή ή χειροκίνητη χρέωση', 'admin.balance.withdraw.submit': 'Αφαίρεση από το υπόλοιπο', 'admin.user_edit.role.customer': 'Πελάτης', 'admin.user_edit.role.user': 'Χρήστης', 'admin.user_edit.role.specialist': 'Βοηθός', 'admin.user_edit.role.admin': 'Διαχειριστής', 'common.refresh': 'Ανανέωση', 'common.back_home': 'Αρχική', 'admin.loc.hint': 'Διαχείριση πόλεων και συνοικιών', 'admin.loc.add_city': 'Νέα πόλη', 'admin.loc.add_district': 'Προσθήκη συνοικίας', 'admin.loc.new': 'Νέα τοποθεσία', 'admin.loc.edit': 'Επεξεργασία τοποθεσίας', 'admin.loc.district': 'συνοικία', 'admin.loc.empty': 'Δεν υπάρχουν τοποθεσίες', 'admin.loc.delete.confirm': 'Διαγραφή τοποθεσίας; Όλες οι συνοικίες θα διαγραφούν επίσης.', 'admin.cat.add_root': 'Νέα κατηγορία', 'admin.cat.add_sub': 'Υποκατηγορία', 'admin.cat.edit': 'Επεξεργασία', 'admin.cat.delete': 'Διαγραφή', 'admin.cat.delete.confirm': 'Διαγραφή κατηγορίας; Όλες οι υποκατηγορίες θα διαγραφούν επίσης.', 'admin.cat.slug': 'Slug', 'admin.cat.icon': 'Εικονίδιο', 'admin.cat.name_el': 'Ελληνικά', 'admin.cat.name_en': 'Αγγλικά', 'admin.cat.name_ru': 'Ρωσικά', 'admin.cat.name_uk': 'Ουκρανικά', 'admin.cat.active': 'Ενεργή', 'admin.cat.parent': 'Γονική κατηγορία', 'admin.cat.no_parent': 'Κορυφαίο επίπεδο', 'admin.cat.save': 'Αποθήκευση', 'admin.cat.cancel': 'Ακύρωση', 'admin.cat.empty': 'Δεν υπάρχουν κατηγορίες', 'admin.cat.hint': 'Διαχείριση κατηγοριών με πολυεπίπεδη ιεραρχία', 'admin.cat.new': 'Νέα κατηγορία', 'admin.cat.subcategory': 'υποκατηγορία', 'admin.cat.add_child': 'Προσθήκη υποκατηγορίας', 'admin.cat.inactive': 'Ανενεργή', 'admin.event.user_login': 'Σύνδεση', 'admin.event.user_register': 'Εγγραφή', 'admin.event.admin_user_deactivate': 'Αποκλεισμός χρήστη', 'admin.event.admin_user_activate': 'Ενεργοποίηση χρήστη', 'admin.event.admin_user_role_changed': 'Αλλαγή ρόλου', 'admin.event.admin_task_cancelled': 'Ακύρωση εργασίας', 'admin.event.admin_task_deleted': 'Διαγραφή εργασίας', 'admin.event.admin_report_reviewed': 'Αναφορά εξετάστηκε', 'admin.event.admin_report_dismissed': 'Αναφορά απορρίφθηκε', 'admin.event.task_created': 'Δημιουργία εργασίας', 'user.online': 'Σε σύνδεση', 'user.seen_minutes': 'ήταν εδώ πριν {n} λεπτά', 'user.seen_hours': 'ήταν εδώ πριν {n} ώρες', 'user.seen_yesterday': 'ήταν εδώ χθες', 'user.seen_days': 'ήταν εδώ πριν {n} μέρες', // Specialists 'specialists.title': 'Προσφορές', 'specialists.search': 'Αναζήτηση ειδικού...', 'specialists.search.btn': 'Αναζήτηση', 'specialists.empty': 'Δεν βρέθηκαν ειδικοί', 'specialists.no_bio': 'Χωρίς περιγραφή', 'specialists.view': 'Προβολή προφίλ', 'specialists.reviews': 'αξιολογήσεις', 'specialist.favorite': 'Προσθήκη στα αγαπημένα', 'specialist.unfavorite': 'Αφαίρεση από αγαπημένα', 'specialist.site_link': 'Προσωπικό site', 'favorites.specialists.title': 'Αγαπημένοι ειδικοί', 'favorites.specialists.empty': 'Δεν έχετε αγαπημένους ειδικούς', 'nav.favorites': 'Αγαπημένα', 'nav.schedule': 'Πρόγραμμα', 'nav.find_tasks': 'Αναζήτηση εργασιών', 'schedule.title': 'Το πρόγραμμά μου', 'schedule.subtitle': 'Σημειώστε τις ημέρες που είστε ελεύθεροι ή απασχολημένοι — οι πελάτες θα δουν τη διαθεσιμότητά σας', 'schedule.available': 'Ελεύθερος', 'schedule.busy': 'Απασχολημένος', 'schedule.unset': 'Μη ορισμένο', 'schedule.click_hint': '← κλικ για εναλλαγή κατάστασης', 'schedule.range_mode': 'Επιλογή εύρους', 'schedule.range_from': 'Από {date} — επιλέξτε τελική ημερομηνία', 'schedule.click_to_set': 'Κλικ για ορισμό', 'schedule.free': 'ελεύθερα', 'schedule.busy_count': 'απασχολημένα', 'schedule.free_days': 'ελεύθερες ημέρες', 'schedule.googleCalendar': 'Google Calendar', 'schedule.connectGoogle': 'Σύνδεση με Google Calendar', 'schedule.disconnectGoogle': 'Αποσύνδεση', 'schedule.connectedAs': 'Συνδεδεμένο ως', 'schedule.importFromGoogle': 'Συγχρονισμός από Google', 'schedule.gcalConnected': '✓ Google Calendar συνδέθηκε', 'schedule.gcalError': 'Σφάλμα σύνδεσης Google Calendar', 'schedule.gcalImportDone': 'Εισήχθησαν {n} ημερ. από Google Calendar', 'schedule.gcalAutoSyncNote': 'Οι αλλαγές αποστέλλονται αυτόματα στο Google Calendar', 'schedule.gcalConnectDesc': 'Συνδέστε το Google Calendar για αυτόματο συγχρονισμό', 'schedule.gcalDisconnectConfirm': 'Αποσύνδεση Google Calendar;', 'find_tasks.title': 'Αναζήτηση εργασιών', 'find_tasks.for_me': 'Για μένα', 'find_tasks.all': 'Όλες οι εργασίες', 'find_tasks.by_category': 'Ανά κατηγορία', 'find_tasks.list': 'Λίστα', 'find_tasks.already_offered': 'Προσφορά υποβλήθηκε', 'find_tasks.offer_now': 'Υποβολή προσφοράς', 'find_tasks.empty_for_me': 'Δεν βρέθηκαν εργασίες στις κατηγορίες σας', 'find_tasks.banner_hint': 'Βρείτε εργασίες που ταιριάζουν με το χαρτοφυλάκιό σας', 'find_tasks.no_cards': 'Δημιουργήστε ένα χαρτοφυλάκιο ειδικού για να δείτε εργασίες για εσάς', 'find_tasks.add_card': 'Δημιουργία χαρτοφυλακίου', 'find_tasks.search': 'Αναζήτηση εργασιών...', 'find_tasks.tasks_count': 'εργασίες', // Footer 'footer.tagline': 'Η πλατφόρμα εργασιών για την Ελλάδα', 'footer.rights': 'Όλα τα δικαιώματα διατηρούνται.', 'nav.privacy': 'Πολιτική απορρήτου', 'nav.delete_account': 'Διαγραφή λογαριασμού', 'delete_account.title': 'Αίτηση διαγραφής λογαριασμού', 'delete_account.subtitle': 'Αφού επαληθεύσουμε την αίτησή σας, θα διαγράψουμε μόνιμα τον λογαριασμό και τα δεδομένα σας εντός 30 ημερών.', 'delete_account.warning': 'Αυτή η ενέργεια δεν μπορεί να αναιρεθεί. Όλα τα δεδομένα σας θα διαγραφούν μόνιμα.', 'delete_account.reason_label': 'Αιτία (προαιρετικό)', 'delete_account.reason_placeholder': 'Πείτε μας γιατί θέλετε να διαγράψετε τον λογαριασμό σας...', 'delete_account.confirm_label': 'Επιβεβαιώνω ότι θέλω να διαγράψω μόνιμα τον λογαριασμό μου', 'delete_account.submit': 'Υποβολή αίτησης', 'delete_account.submitting': 'Αποστολή...', 'delete_account.success_title': 'Η αίτησή σας ελήφθη', 'delete_account.success_body': 'Θα επεξεργαστούμε την αίτησή σας εντός 30 ημερών και θα σας ειδοποιήσουμε μέσω email.', 'delete_account.login_required': 'Πρέπει να συνδεθείτε για να υποβάλετε αίτηση διαγραφής.', 'delete_account.login_btn': 'Σύνδεση', // App download section 'app.download_title': 'Κατεβάστε την εφαρμογή CanHelp', 'app.download_desc': 'Όλο το CanHelp — πάντα μαζί σας. Διαθέσιμο για Android και iOS.', // Nav 'nav.pricing': 'Τιμές', // Pricing page 'pricing.title': 'Τιμολόγηση', 'pricing.subtitle': 'Επιλέξτε το κατάλληλο πρόγραμμα', 'pricing.role.customer': 'Πελάτης', 'pricing.role.specialist': 'Ειδικός', 'pricing.free': 'Δωρεάν', 'pricing.per_month': 'μήνα', 'pricing.duration': 'Διάρκεια', 'pricing.days': 'ημ.', 'pricing.current_plan': 'Το πρόγραμμά σας', 'pricing.popular': 'Δημοφιλές', 'pricing.choose': 'Επιλογή', 'pricing.your_plan': 'Ενεργό πρόγραμμα', 'pricing.free_default': 'Προεπιλογή', 'pricing.compare': 'Σύγκριση λειτουργιών', 'pricing.feature': 'Λειτουργία', 'pricing.faq_note': 'Η πληρωμή γίνεται από το υπόλοιπο CanHelp. Ανατροφοδότηση διαθέσιμη στην Πληρωμή.', 'pricing.feat.messages': 'Μηνύματα / ημέρα', 'pricing.feat.orders': 'Παραγγελίες / ημέρα', 'pricing.feat.contact_all': 'Επικοινωνία με όλους', 'pricing.feat.view_phone': 'Εμφάνιση τηλεφώνου', 'pricing.feat.show_contact': 'Εμφάνιση στοιχείων επαφής', 'pricing.feat.favorites': 'Αγαπημένα', 'pricing.feat.verified_badge': 'Επαληθευμένο badge', 'pricing.feat.google_calendar': 'Google Calendar', 'pricing.feat.personal_site': 'Προσωπικό site', 'pricing.feat.auto_response': 'Αυτόματη απάντηση', 'pricing.feat.auto_match': 'Αυτόματη αντιστοίχιση', 'pricing.feat.highlighted_reviews': 'Επισημασμένες αξιολογήσεις', 'pricing.feat.portfolio': 'Στοιχεία προσφοράς', 'pricing.feat.cards': 'Αριθμός προσφορών', 'pricing.feat.notify_tasks': 'Ειδοποιήσεις νέων εργασιών', 'pricing.feat.video': 'Βίντεο στην προσφορά', // Upgrade prompt 'upgrade.available_in': 'Διαθέσιμο στο', 'upgrade.cta': 'Αναβάθμιση', // Dashboard plan block 'dashboard.plan.title': 'Το πρόγραμμά μου', 'dashboard.plan.expires': 'Λήγει σε {n} ημέρες', 'dashboard.plan.upgrade': 'Αναβάθμιση προγράμματος', 'dashboard.plan.no_plan': 'Δωρεάν πρόγραμμα', 'dashboard.plan.messages': 'Μηνύματα σήμερα', 'dashboard.plan.orders': 'Παραγγελίες σήμερα', 'dashboard.plan.limits': 'Ημερήσια όρια', 'dashboard.plan.features': 'Λειτουργίες', 'dashboard.plan.stats': 'Στατιστικά', 'dashboard.stats.cards': 'Χαρτοφυλάκια', 'dashboard.stats.maxCards': 'Μέγ. χαρτοφυλάκια', 'dashboard.stats.portfolioItems': 'Στοιχεία portfolio', 'dashboard.stats.maxPortfolioItems': 'Μέγ. στοιχεία', 'dashboard.stats.activeOffers': 'Ενεργές προσφορές', 'dashboard.stats.reviewsReceived': 'Αξιολογήσεις', 'dashboard.stats.activeTasks': 'Ενεργές εργασίες', 'dashboard.stats.completedTasks': 'Ολοκληρωμένες', 'status.can_help_now': 'Είμαι διαθέσιμος τώρα', 'status.need_help': 'Χρειάζομαι βοήθεια', 'status.active': 'Ενεργό', 'status.toggle_on': 'Ενεργοποίηση', 'status.toggle_off': 'Απενεργοποίηση', // FOMO 'fomo.missed_orders': 'Χάσατε {n} παραγγελίες', 'fomo.missed_value': 'Αξία €{v}', 'fomo.upgrade_hint': 'Αναβαθμίστε για να λαμβάνετε περισσότερες παραγγελίες', 'fomo.conversion': 'Μετατροπές εργασιών', 'fomo.active': 'Ενεργές', 'fomo.with_offers': 'Με προσφορές', 'fomo.completed': 'Ολοκληρωμένες', 'fomo.already_offered': '{n} ειδικοί έχουν ήδη απαντήσει', 'fomo.specialist_missed': 'Χάσατε {n} παραγγελίες', 'fomo.top_categories': 'Κατηγορίες', 'fomo.offers_received': 'προσφορές ελήφθησαν', 'fomo.avg_offers': 'Μέσο {n}/εργασία', 'fomo.completion_rate': 'ολοκληρωμένες', // Task auto-match 'task.auto_match': 'Αυτόματη αντιστοίχιση', 'task.auto_match_results': 'Κορυφαίοι ειδικοί', 'task.no_offer_yet': 'Δεν έχετε στείλει προσφορά ακόμα', 'task.make_offer': 'Αποστολή προσφοράς', 'auto_response.title': 'Αυτόματη Απάντηση', 'auto_response.enabled': 'Ενεργοποίηση αυτόματης απάντησης', 'auto_response.min_budget': 'Ελάχ. προϋπολογισμός', 'auto_response.max_budget': 'Μέγ. προϋπολογισμός', 'auto_response.default_price': 'Προεπιλεγμένη τιμή', 'auto_response.default_message': 'Προεπιλεγμένο μήνυμα', 'auto_response.max_per_day': 'Μέγ. αυτόματες προσφορές/ημέρα', 'auto_response.save': 'Αποθήκευση', 'auto_response.saved': 'Αποθηκεύτηκε', 'auto_response.categories': 'Κατηγορίες', 'auto_response.locations': 'Τοποθεσίες', // Personal site 'profile.personal_site': 'Προσωπικό Site', 'profile.site_slug': 'Slug URL', 'profile.site_slug_hint': 'Μόνο λατινικοί χαρακτήρες, αριθμοί, - και _', 'profile.site_open': 'Άνοιγμα site', 'profile.site_preview': 'Το site σας', 'profile.show_contact': 'Εμφάνιση στοιχείων επαφής', 'profile.show_contact_hint': 'Πελάτες με Pro/Ultimate πρόγραμμα θα βλέπουν το τηλέφωνό σας', // Google Calendar plan gate 'gcal.upgrade_required': 'Το Google Calendar απαιτεί Pro ή Ultimate πρόγραμμα', // Chat limits 'chat.limit_warning': 'Απομένουν {n} μηνύματα σήμερα', 'chat.limit_reached': 'Εξαντλήθηκαν τα μηνύματα. Αναβαθμίστε το πρόγραμμά σας', 'chat.upgrade': 'Αναβάθμιση', // Site page 'site.member_since': 'Μαζί μας από', 'site.rating': 'Βαθμολογία', 'site.completed_tasks': 'Ολοκληρώθηκαν', 'site.languages': 'Γλώσσες', 'site.photos': 'φωτ.', 'site.contact_form': 'Επικοινωνία', 'site.contact_sent': 'Το μήνυμα στάλθηκε!', 'site.contact_sent_desc': 'Ο ειδικός θα επικοινωνήσει μαζί σας σύντομα', 'site.contact_name': 'Όνομα', 'site.contact_name_ph': 'Το όνομά σας', 'site.contact_email_ph': 'your@email.com', 'site.contact_message': 'Μήνυμα', 'site.contact_message_ph': 'Περιγράψτε την εργασία σας...', 'site.contact_send': 'Αποστολή', 'site.share': 'Κοινοποίηση', 'site.speaks_languages': 'Μιλάει', 'site.message_sent': 'Το μήνυμα εστάλη!', 'site.message_sent_desc': 'Ο ειδικός θα το λάβει στη συνομιλία', 'site.message_placeholder': 'Γράψτε το μήνυμά σας...', 'site.write_to_chat': 'Γράψτε στο chat', 'site.auth_required_title': 'Απαιτείται σύνδεση', 'site.auth_required_desc': 'Για να γράψετε στο chat, χρειάζεται να συνδεθείτε στο λογαριασμό σας.', 'site.auth_login_btn': 'Σύνδεση', 'site.auth_contact_form_btn': 'Επικοινωνία μέσω φόρμας', 'specialist.services': 'Υπηρεσίες', 'portfolio.title': 'Χαρτοφυλάκιο', 'common.not_found': 'Η σελίδα δεν βρέθηκε', 'common.anonymous': 'Ανώνυμα', 'specialist_setup.page_title': 'Ρύθμιση προφίλ ειδικού', 'specialist_setup.step_of': 'Βήμα {current} από {total}', 'specialist_setup.next': 'Επόμενο', 'specialist_setup.back': 'Πίσω', 'specialist_setup.skip': 'Παράλειψη', 'specialist_setup.finish': 'Ολοκλήρωση', 'specialist_setup.go_to_profile': 'Μεταβείτε στο προφίλ', 'specialist_setup.browse_tasks': 'Εξερεύνηση εργασιών', 'specialist_setup.step1.title': 'Καλωσήλθατε!', 'specialist_setup.step1.subtitle': 'Ας ρυθμίσουμε το προφίλ σας', 'specialist_setup.step1.desc': 'Ένα πλήρες προφίλ σας βοηθά να βρείτε περισσότερους πελάτες. Ακολουθήστε τα βήματα για να δημιουργήσετε το τέλειο προφίλ ειδικού.', 'specialist_setup.step1.what_next': 'Τι θα κάνουμε:', 'specialist_setup.step1.item1': 'Συμπλήρωση βασικών πληροφοριών', 'specialist_setup.step1.item2': 'Δημιουργία κάρτας υπηρεσίας', 'specialist_setup.step1.item3': 'Προσθήκη δεξιοτήτων και κατηγοριών', 'specialist_setup.step1.item4': 'Επιλογή γεωγραφικής περιοχής', 'specialist_setup.step1.item5': 'Μεταφόρτωση φωτογραφιών χαρτοφυλακίου', 'specialist_setup.step2.title': 'Βασικό προφίλ', 'specialist_setup.step2.subtitle': 'Πείτε μας για σας', 'specialist_setup.step2.bio_label': 'Σχετικά με εμένα', 'specialist_setup.step2.bio_placeholder': 'Περιγράψτε την εμπειρία σας, τις υπηρεσίες που προσφέρετε...', 'specialist_setup.step2.phone_label': 'Τηλέφωνο', 'specialist_setup.step2.phone_placeholder': '+30 6900000000', 'specialist_setup.step2.photo_label': 'Φωτογραφία προφίλ', 'specialist_setup.step2.photo_btn': 'Μεταφόρτωση φωτογραφίας', 'specialist_setup.step2.photo_uploading': 'Μεταφόρτωση...', 'specialist_setup.step2.photo_hint': 'Εμφανίζεται στο προφίλ σας', 'specialist_setup.step3.title': 'Κάρτα υπηρεσίας', 'specialist_setup.step3.subtitle': 'Δημιουργήστε την πρώτη σας κάρτα υπηρεσίας', 'specialist_setup.step3.title_label': 'Τίτλος κάρτας', 'specialist_setup.step3.title_placeholder': 'Π.χ. Υδραυλικός, Ηλεκτρολόγος, Καθαρισμός...', 'specialist_setup.step3.desc_label': 'Περιγραφή', 'specialist_setup.step3.desc_placeholder': 'Περιγράψτε λεπτομερώς τι προσφέρετε, εμπειρία, πλεονεκτήματα...', 'specialist_setup.step3.title_required': 'Απαιτείται τίτλος', 'specialist_setup.step4.title': 'Δεξιότητες & Κατηγορίες', 'specialist_setup.step4.subtitle': 'Προσθέστε δεξιότητες και επιλέξτε κατηγορίες', 'specialist_setup.step4.skills_label': 'Δεξιότητες', 'specialist_setup.step4.skills_placeholder': 'Π.χ. Εγκατάσταση σωληνώσεων...', 'specialist_setup.step4.skills_add': 'Προσθήκη', 'specialist_setup.step4.categories_label': 'Κατηγορίες', 'specialist_setup.step5.title': 'Γεωγραφική περιοχή', 'specialist_setup.step5.subtitle': 'Πού παρέχετε υπηρεσίες;', 'specialist_setup.step5.hint': 'Επιλέξτε πόλεις ή συγκεκριμένες περιοχές', 'specialist_setup.done.title': 'Το προφίλ σας είναι έτοιμο!', 'specialist_setup.done.subtitle': 'Συγχαρητήρια! Το προφίλ σας έχει ρυθμιστεί', 'specialist_setup.done.desc': 'Τώρα μπορείτε να λαμβάνετε παραγγελίες από πελάτες. Αναζητήστε εργασίες που ταιριάζουν με τις δεξιότητές σας.', // Support 'support.title': 'Υποστήριξη', 'support.type.label': 'Τύπος αιτήματος', 'support.type.bug': 'Σφάλμα', 'support.type.suggestion': 'Πρόταση', 'support.type.other': 'Άλλο', 'support.subject': 'Θέμα', 'support.subject.placeholder': 'Σύντομη περιγραφή...', 'support.body': 'Μήνυμα', 'support.body.placeholder': 'Περιγράψτε λεπτομερώς το πρόβλημα ή την πρότασή σας...', 'support.submit': 'Αποστολή', 'support.cancel': 'Ακύρωση', 'support.error': 'Σφάλμα αποστολής. Παρακαλώ δοκιμάστε ξανά.', 'support.sent.title': 'Λάβαμε το αίτημά σας!', 'support.sent.body': 'Θα σας απαντήσουμε στο email σας το συντομότερο δυνατόν.', 'support.sent.close': 'Κλείσιμο', 'admin.tab.support': 'Υποστήριξη', 'admin.tab.backup': 'Αντίγραφα ασφαλείας', 'admin.tab.translations': 'Μεταφράσεις', 'admin.tab.dbcheck': 'Έλεγχος ΒΔ', 'admin.tab.balances': 'Υπόλοιπα', 'admin.tab.push': 'Push', 'admin.tab.referrals': 'Παραπομπές', 'admin.search': 'Αναζήτηση', 'admin.noData': 'Δεν υπάρχουν δεδομένα', 'admin.cat.order': 'Σειρά', 'admin.cat.skills': 'Δεξιότητες', 'admin.plans.form.max_tasks': 'Μέγιστες εργασίες', 'admin.settings.referral.shared_section': 'Κοινές ρυθμίσεις referral', 'admin.settings.seo.title': 'Ρυθμίσεις SEO', 'admin.backup.title': 'Αντίγραφα ασφαλείας', 'admin.backup.tables': 'Πίνακες', 'admin.backup.exportAll': 'Εξαγωγή όλων', 'admin.backup.importAll': 'Εισαγωγή όλων', 'admin.backup.exportTable': 'Εξαγωγή πίνακα', 'admin.backup.importTable': 'Εισαγωγή πίνακα', 'admin.backup.exporting': 'Εξαγωγή...', 'admin.backup.importing': 'Εισαγωγή...', 'admin.backup.exportSuccess': 'Η εξαγωγή ολοκληρώθηκε', 'admin.backup.importSuccess': 'Η εισαγωγή ολοκληρώθηκε', 'admin.backup.autoBackup': 'Αυτόματο backup', 'admin.backup.autoBackupDesc': 'Καθημερινό αυτόματο backup', 'admin.backup.storedBackups': 'Αποθηκευμένα backups', 'admin.backup.noStoredBackups': 'Δεν υπάρχουν αποθηκευμένα backups', 'admin.backup.restore': 'Επαναφορά', 'admin.backup.restoreConfirm': 'Επαναφορά από backup;', 'admin.backup.restoreSuccess': 'Η επαναφορά ολοκληρώθηκε', 'admin.backup.restoring': 'Επαναφορά...', 'admin.backup.date': 'Ημερομηνία', 'admin.backup.size': 'Μέγεθος', 'admin.backup.today': 'Σήμερα', 'admin.backup.yesterday': 'Χθες', 'admin.balance.col.operation': 'Ενέργεια', 'admin.balance.col.amount': 'Ποσό', 'admin.balance.col.result': 'Υπόλοιπο', 'admin.balance.col.description': 'Περιγραφή', 'admin.balance.col.date': 'Ημερομηνία', 'admin.balance.empty': 'Δεν υπάρχουν εγγραφές', 'admin.balance.filter.all': 'Όλες οι ενέργειες', 'admin.balance.filter.user_id': 'Φίλτρο ανά userId', 'admin.balance.kind.topup': 'Αναπλήρωση', 'admin.balance.kind.plan_purchase': 'Χρέωση πλάνου', 'admin.balance.kind.admin_topup': 'Αναπλήρωση από διαχειριστή', 'admin.balance.kind.admin_adjustment': 'Διόρθωση', 'admin.support.search': 'Αναζήτηση', 'admin.support.all_statuses': 'Όλες οι καταστάσεις', 'admin.support.all_types': 'Όλοι οι τύποι', 'admin.support.none': 'Δεν υπάρχουν αιτήματα', 'admin.support.reply': 'Απάντηση', 'admin.support.reply_placeholder': 'Πληκτρολογήστε απάντηση...', 'admin.support.send_reply': 'Αποστολή απάντησης', 'admin.support.cancel': 'Ακύρωση', 'admin.support.close': 'Κλείσιμο', 'admin.support.status.open': 'Ανοιχτό', 'admin.support.status.in_progress': 'Σε εξέλιξη', 'admin.support.status.resolved': 'Επιλύθηκε', 'admin.support.status.closed': 'Κλειστό', 'admin.support.your_reply': 'Η απάντησή σας', 'admin.user_edit.visibility_requirements.title': 'Το προφίλ δεν εμφανίζεται ακόμη στις Προσφορές', 'admin.user_edit.visibility_requirements.hint': 'Απαιτήσεις ορατότητας:', 'admin.user_edit.visibility_requirements.bio': 'Συμπληρώστε το βιογραφικό', 'admin.user_edit.visibility_requirements.published_card': 'Δημοσιεύστε τουλάχιστον μία κάρτα', 'admin.user_edit.visibility_requirements.categories': 'Προσθέστε κατηγορία σε δημοσιευμένη κάρτα', 'admin.user_edit.visibility_requirements.locations': 'Προσθέστε τοποθεσία σε δημοσιευμένη κάρτα', 'auto_response.desc': 'Αυτόματη απάντηση σε κατάλληλες εργασίες', 'auto_response.budget_range': 'Προϋπολογισμός εργασίας', 'auto_response.message_placeholder': 'Γεια σας! Μπορώ να βοηθήσω με αυτήν την εργασία...', 'profile.background.title': 'Φόντο κεφαλίδας προφίλ', 'profile.background.hint': 'Εμφανίζεται στην κεφαλίδα του δημόσιου προφίλ σε web και mobile.', 'profile.photo.uploading': 'Μεταφόρτωση...', 'profile.balance.history': 'Ιστορικό ενεργειών', 'profile.balance.history.last': 'Τελευταίες ενέργειες', 'profile.balance.history.empty': 'Δεν υπάρχουν ενέργειες', 'profile.balance.history.balance_after': 'Υπόλοιπο μετά', 'profile.balance.history.kind.topup': 'Αναπλήρωση υπολοίπου', 'profile.balance.history.kind.plan_purchase': 'Χρέωση πλάνου', 'profile.balance.history.kind.admin_topup': 'Αναπλήρωση από διαχειριστή', 'profile.balance.history.kind.admin_adjustment': 'Διόρθωση από διαχειριστή', 'profile.plan_history.title': 'Ιστορικό πλάνου', 'profile.plan_history.empty': 'Το ιστορικό πλάνου είναι άδειο', 'profile.plan_history.expires': 'Έως', 'profile.plan_history.days': 'ημέρες', 'profile.plan_history.event.activated': 'Ενεργοποιήθηκε', 'profile.plan_history.event.renewed': 'Ανανεώθηκε', 'profile.plan_history.event.downgraded': 'Υποβαθμίστηκε', 'profile.plan_history.event.referral_reward': 'Ανταμοιβή referral', 'profile.plan_history.event.admin_change': 'Αλλαγή από διαχειριστή', 'profile.plan_history.event.expired': 'Έληξε', 'profile.show_contact_desc': 'Επιτρέπει στους πελάτες να επικοινωνούν απευθείας', 'profile.site.visible.price_list': 'Τιμοκατάλογος', 'site.pricelist': 'Τιμοκατάλογος', 'status.plan_required': 'Η κατάσταση δεν είναι διαθέσιμη στο τρέχον πλάνο', 'status.admin_not_applicable': 'Η κατάσταση χρήστη δεν ισχύει για διαχειριστές' }, en: { 'footer.slogan': 'Your task — our care! We solve any issue quickly and easily.', 'footer.links': 'Links', 'footer.socials': 'Socials', 'nav.home': 'Home', 'nav.tasks': 'Tasks', 'nav.post': '+ Post task', 'nav.dashboard': 'My Tasks', 'nav.chat': 'Messages', 'nav.notifications': 'Notifications', 'nav.profile': 'Profile', 'nav.admin': 'Admin Panel', 'nav.specialists': 'Offers', 'nav.new_task': 'New task', 'nav.login': 'Login', 'nav.register': 'Register', 'nav.logout': 'Logout', 'hero.title': 'Everyone has something valuable to offer', 'hero.subtitle': 'Find help, offer your skills, or earn money helping others', 'hero.cta.post': 'Find help', 'hero.cta.browse': 'Offer your help', 'hero.cta.specialists': 'Find a job', 'hero.search.placeholder': 'What do you need? e.g. electrician, cleaning...', 'hero.specialist.title': 'Find tasks near you', 'hero.specialist.subtitle': 'Discover tasks in your categories and send your offer', 'hero.specialist.cta': 'Browse tasks', 'hero.specialist.search.placeholder': 'Search tasks... e.g. electrical, cleaning', 'section.categories.specialist': 'Find tasks by category', 'section.cities.specialist': 'Tasks by city', 'how.specialist.step1.title': 'Create a specialist card', 'how.specialist.step1.desc': 'Set your categories, skills and areas — the system finds tasks automatically', 'how.specialist.step2.title': 'Find relevant tasks', 'how.specialist.step2.desc': 'Discover tasks in your categories and get started right away', 'how.specialist.step3.title': 'Send an offer & earn', 'how.specialist.step3.desc': 'Submit an offer with price and timeline, communicate with clients and complete tasks', 'stats.specialists': 'offers', 'stats.tasks': 'tasks', 'stats.categories': 'categories', 'stats.free': 'free sign-up', 'promo.title': 'Get Pro for free — until end of year', 'promo.subtitle': 'Sign up now and enjoy the Pro plan at no cost. Offer ends December 31.', 'promo.cta': 'Sign up free', 'promo.days': 'days', 'promo.hours': 'hrs', 'promo.minutes': 'min', 'promo.seconds': 'sec', 'section.categories': 'Create a task in any category', 'section.how': 'How it works', 'section.recent': 'Recent tasks', 'section.all': 'See all →', 'section.more': 'more', 'section.cities': 'Cities & Districts', 'section.community': 'A community project for everyone', 'community.subtitle': 'CanHelp is not just a marketplace — it\'s a community of mutual help. Anyone with knowledge or a skill can find a client. Anyone with a problem can find a specialist.', 'community.point1.title': 'Are you good at something?', 'community.point1.desc': 'Repairs, tutoring, design, translation, care — every skill has value. Create a profile and find clients near you.', 'community.point2.title': 'Need help with something?', 'community.point2.desc': 'Post a task in under a minute and receive offers from verified specialists in your city.', 'community.point3.title': 'Help the project grow', 'community.point3.desc': 'CanHelp grows through communities. Share the link with friends and acquaintances — together we build something useful for everyone.', 'community.share': 'Share with friends', 'community.share.copied': 'Link copied!', // Referral section on home page 'section.referral': 'Referral Program', 'referral.home.subtitle': 'Share your link — every new user who signs up through it earns you a reward.', 'referral.home.step1.title': 'Sign up and get your link', 'referral.home.step1.desc': 'Create an account and find your unique referral link in your profile.', 'referral.home.step2.title': 'Share with friends', 'referral.home.step2.desc': 'Send the link to friends, acquaintances, or post it on social media.', 'referral.home.step3.title': 'Earn rewards', 'referral.home.step3.desc': 'Once your friend verifies their email, you automatically receive your reward.', 'referral.home.cta': 'Get your link', 'referral.home.badge': 'Referral Program', // FAQ section 'section.faq': 'Frequently Asked Questions', 'faq.q1': 'How does CanHelp work?', 'faq.a1': 'Post a task, receive offers from specialists, choose the best one and start working together. It\'s fast, simple and free for customers.', 'faq.q2': 'How much does it cost to use the platform?', 'faq.a2': 'Registration and task posting is completely free for customers. Specialists have access to a free plan as well as premium options.', 'faq.q3': 'How can I become a specialist?', 'faq.a3': 'Register, go to «Become a Specialist», fill in your profile with skills and categories, and start receiving tasks.', 'faq.q4': 'How do I choose the right specialist?', 'faq.a4': 'Check their reviews, experience, skills and portfolio. Chat with them through the platform and discuss the details before deciding.', 'faq.q5': 'What if I am not satisfied?', 'faq.a5': 'You can leave a review about the specialist and rate them from 1 to 5 stars. Reviews help other users find trusted professionals.', 'faq.q6': 'Can I contact a specialist before accepting their offer?', 'faq.a6': 'Yes. Once you receive an offer, you can open a chat with the specialist, ask questions and discuss all the details before making a decision.', 'faq.q7': 'How long does it take to receive offers?', 'faq.a7': 'Usually within a few hours. Specialists get notified about new tasks and can respond quickly.', 'faq.q8': 'Can I post a task in any city in Greece?', 'faq.a8': 'Yes! CanHelp covers all of Greece — Athens, Thessaloniki, Patras and more.', 'faq.q9': 'What types of tasks can I find on CanHelp?', 'faq.a9': 'Repairs, cleaning, electricians, tutoring, design, IT, moving, beauty and much more. Categories are constantly expanding.', 'faq.q10': 'Is there a mobile app?', 'faq.a10': 'Yes! CanHelp is available for Android and iOS. Download the app and manage everything from your phone.', 'how.step1.title': 'Post a task', 'how.step1.desc': 'Describe what you need and set your budget', 'how.step2.title': 'Receive offers', 'how.step2.desc': 'Specialists will send you offers with price and timeline', 'how.step3.title': 'Choose & start', 'how.step3.desc': 'Pick the best professional and start the collaboration', 'tasks.title': 'tasks', 'tasks.filters': 'Filters', 'tasks.search': 'Search', 'tasks.search.placeholder': 'Title or keyword...', 'tasks.search.btn': 'Search', 'tasks.publish': 'Post', 'tasks.category.all': 'All', 'tasks.category.all_in': 'All in', 'tasks.category.label': 'Category', 'tasks.location.label': 'City', 'tasks.location.placeholder': 'e.g. Athens', 'tasks.empty': 'No tasks found', 'tasks.empty.cta': 'Post the first one', 'task.status.open': 'Open', 'task.status.in_progress': 'In progress', 'task.status.completed': 'Completed', 'task.status.cancelled': 'Cancelled', 'task.status.draft': 'Draft', 'task.budget': 'Budget', 'task.location': 'Location', 'task.deadline': 'Start date', 'task.expires_at': 'Active until', 'task.created_at': 'Created', 'task.customer': 'Customer', 'task.offer.btn': 'Submit offer', 'task.invite.banner_title': "You've been invited to this task", 'task.invite.banner_hint': 'The customer personally invited you', 'task.invite.accept': 'Send offer', 'task.invite.decline': 'Decline', 'offer.accept': 'Accept', 'offer.decline': 'Decline', 'task.complete': 'Complete task', 'task.complete.confirm': 'Mark this task as complete?', 'task.edit': 'Edit', 'task.status_label': 'Status', 'task.yours': 'Your task', 'task.offer.yours': 'Your offer', 'review.leave': 'Leave a review', 'review.rating': 'Rating', 'review.comment': 'Comment', 'review.comment.placeholder': 'Tell us about your experience...', 'review.submit': 'Submit review', 'review.submitting': 'Submitting...', 'review.done': 'Review submitted!', 'profile.reviews': 'Reviews', 'profile.no_reviews': 'No reviews yet', 'profile.rating': 'Rating', 'profile.skills.label': 'Skills', 'profile.member_since': 'Member since', 'task.offers': 'Offers', 'task.offers.none': 'No offers yet', 'create.title': 'Post a task', 'create.field.title': 'Title', 'create.field.description': 'Description', 'create.field.category': 'Category', 'create.field.category.select': 'Select...', 'create.field.location': 'Location', 'create.field.location.any': 'Anywhere', 'create.field.location.all': 'Entire city', 'create.field.budget': 'Budget (€)', 'create.field.deadline': 'Start date', 'create.field.expires_at': 'Listing active for', 'create.field.expires_at.days': '{n} days', 'create.field.budget_negotiable': 'Price is negotiable', 'create.field.time_slot': 'Time slot', 'create.field.time_slot.any': 'Anytime', 'create.field.time_slot.morning': 'Morning (08:00–13:00)', 'create.field.time_slot.afternoon': 'Afternoon (13:00–18:00)', 'create.field.time_slot.evening': 'Evening (18:00–22:00)', 'create.field.time_slot.weekend': 'Weekend', 'create.field.address': 'Address (optional)', 'create.field.address.district': 'District', 'create.field.address.street': 'Street', 'create.field.address.house': 'Number', 'create.field.confidential': 'Confidential note', 'create.field.confidential.placeholder': 'Details visible only to the assigned specialist...', 'create.field.confidential.hint': 'Not shown publicly', 'create.field.photos': 'Photos', 'create.field.photos.add': 'Add photo', 'create.field.photos.uploading': 'Uploading...', 'task.budget_negotiable': 'Price negotiable', 'task.time_slot': 'Time slot', 'task.confidential': 'Confidential note', 'create.field.title.placeholder': 'e.g. Clean 80sqm apartment', 'create.field.description.placeholder': 'Describe in detail what you need...', 'create.field.location.placeholder': 'e.g. Athens, Kolonaki', 'create.field.budget.placeholder': 'e.g. 100', 'create.submit': 'Post task', 'create.submitting': 'Posting...', 'login.title': 'Welcome back', 'login.subtitle': 'Sign in to CanHelp', 'login.email': 'Email', 'login.password': 'Password', 'login.submit': 'Sign in', 'login.submitting': 'Signing in...', 'login.error': 'Invalid email or password', 'login.unverified.title': 'Verify your email address', 'login.unverified.desc': 'We sent a verification link to your email. Check your inbox (or spam) and click the link.', 'login.unverified.resend': 'Resend verification email', 'login.unverified.sending': 'Sending...', 'login.unverified.sent': '✓ Sent — check your inbox', 'profile.email.verified': 'Email verified', 'profile.email.not_verified': 'Email not verified', 'login.no_account': "Don't have an account?", 'login.register_link': 'Register', 'login.forgot_password': 'Forgot password?', 'login.or_continue_with': 'or continue with', 'login.continue_google': 'Continue with Google', 'forgot.title': 'Forgot password', 'forgot.subtitle': 'Enter your email to receive a reset link', 'forgot.email': 'Email', 'forgot.submit': 'Send reset link', 'forgot.submitting': 'Sending...', 'forgot.sent.title': 'Check your inbox', 'forgot.sent.desc': 'If an account exists with that email, we\'ll send you a password reset link.', 'forgot.back_to_login': 'Back to sign in', 'forgot.error': 'Could not send reset link. Check the email address and try again.', 'forgot.error.not_found': 'No account found with this email address.', 'forgot.error.send_failed': 'Failed to send email. Please try again later.', 'reset.title': 'New password', 'reset.subtitle': 'Enter your new password', 'reset.password': 'New password', 'reset.confirm': 'Confirm password', 'reset.submit': 'Change password', 'reset.submitting': 'Saving...', 'reset.success': 'Password changed successfully. Redirecting to sign in...', 'reset.back_to_login': 'Back to sign in', 'reset.error.mismatch': 'Passwords do not match', 'reset.error.invalid': 'Invalid or expired link. Please request a new one.', 'register.title': 'Register', 'register.subtitle': 'Create a CanHelp account', 'register.first_name': 'First name', 'register.last_name': 'Last name', 'register.email': 'Email', 'register.password': 'Password (min 8 characters)', 'register.role': 'Role', 'register.role.customer': 'User', 'register.role.customer.desc': 'I post tasks', 'register.role.specialist': 'Specialist', 'register.role.specialist.desc': 'I take on tasks', 'register.submit': 'Create account', 'register.submitting': 'Registering...', 'register.has_account': 'Already have an account?', 'register.login_link': 'Sign in', 'register.continue_google': 'Continue with Google', 'register.check_email.title': 'Check your email', 'register.check_email.desc': 'We sent a verification link to your email address. Check your inbox (or spam) and click the link.', 'register.check_email.login': 'Back to sign in', 'register.captcha_failed': 'CAPTCHA verification failed. Please complete the security check and try again.', 'dashboard.title': 'Dashboard', 'dashboard.new_task': '+ New task', 'dashboard.onboarding.title': 'Welcome to CanHelp 👋', 'dashboard.onboarding.subtitle': 'Choose how you want to get started.', 'dashboard.onboarding.helper.title': 'Offer your help', 'dashboard.onboarding.helper.desc': 'Complete your profile — skills, categories and areas. It takes a couple of minutes and you start receiving orders.', 'dashboard.onboarding.helper.cta': 'Complete your profile', 'dashboard.onboarding.requester.title': 'Need help?', 'dashboard.onboarding.requester.desc': 'Post a task and helpers will send you their offers.', 'dashboard.onboarding.requester.cta': 'Post a task', 'dashboard.my_tasks': 'My tasks', 'dashboard.my_offers': 'My offers', 'dashboard.invitations': 'Job invitations', 'dashboard.offers_count': 'offers', 'dashboard.declined_count': 'declined', 'dashboard.completed_tasks': 'Completed tasks', 'dashboard.completed_offers': 'Completed offers', 'dashboard.review_pending': 'Review not yet submitted', 'tasks.new.top_specialists': 'Top specialists', 'tasks.new.select_category': 'Select a category to see matching specialists', 'tasks.new.invite': 'Offer work', 'tasks.new.invited': 'Selected ✓', 'reviews.count': 'reviews', 'filter.location': 'Location', 'filter.language': 'Languages', 'filter.language.any': 'Any language', 'filter.category.all': 'All categories', 'user.categories': 'Categories', 'user.work_area': 'Work area', 'user.specialist_cards': 'Service cards', 'card.skills': 'Skills', 'card.categories': 'Categories', 'card.geography': 'Work area', 'card.portfolio': 'Portfolio', 'card.close': 'Close', 'dashboard.tasks.empty': "You haven't posted any tasks", 'dashboard.tasks.empty.cta': 'Post your first one', 'dashboard.tasks.add_new': 'Add a new task', 'dashboard.offers.empty': "You haven't submitted any offers", 'dashboard.offers.empty.cta': 'Find tasks', 'dashboard.customer.specialists_title': 'Looking for a specialist?', 'dashboard.customer.specialists_hint': 'Browse specialist profiles, read reviews and invite them to your tasks', 'dashboard.customer.specialists_cta': 'Find a specialist', 'dashboard.customer.how_title': 'How it works', 'dashboard.customer.step1': 'Create a task with a description and budget', 'dashboard.customer.step2': 'Specialists will send offers with price and timeline', 'dashboard.customer.step3': 'Choose the right one and start working', 'notif.title': 'Notifications', 'notif.mark_all': 'Mark all as read', 'notif.empty': 'No notifications', 'notif.type.generic': 'Notification', 'notif.type.new_offer': 'New offer', 'notif.type.offer_accepted': 'Your offer was accepted', 'notif.type.offer_declined': 'Your offer was declined', 'notif.type.task_completed': 'Task completed', 'notif.type.task_cancelled': 'Task cancelled', 'notif.type.new_message': 'New message', 'notif.type.new_review': 'New review', 'notif.type.task_invite': 'Job invitation', 'notif.type.referral_reward': 'Referral reward', 'notif.type.specialist_card_submitted': 'Card submitted for review', 'notif.type.specialist_card_approved': 'Card approved', 'notif.type.specialist_card_rejected': 'Card rejected', 'notif.body.new_offer': 'New offer for «{title}»', 'notif.body.offer_accepted': 'Your offer for «{title}» was accepted', 'notif.body.offer_declined': 'Your offer for «{title}» was declined', 'notif.body.task_invite': 'You\'ve been invited for «{title}»', 'notif.body.new_review': 'You received a {rating}★ review', 'notif.body.referral_reward': '{days} days of «{plan}» plan access have been added to your account!', 'notif.body.specialist_card_submitted': 'The card «{title}» was sent for review', 'notif.body.specialist_card_approved': 'The card «{title}» was approved and published', 'notif.body.specialist_card_rejected': 'The card «{title}» was not approved. You can fix it and submit again.', 'offer.status.pending': 'Pending', 'offer.status.accepted': 'Accepted', 'offer.status.declined': 'Declined', 'offer.status.withdrawn': 'Withdrawn', 'offer.status.other_accepted': 'Another specialist was chosen', 'common.loading': 'Loading...', 'common.error': 'Error', 'common.save': 'Save', 'common.saving': 'Saving...', 'common.cancel': 'Cancel', 'common.add': 'Add', 'common.close': 'Close', 'common.edit': 'Edit', 'common.delete': 'Delete', 'common.from': 'by', 'common.currency': '€', 'common.greece': 'Greece', // Chat 'chat.connected': 'Connected', 'chat.disconnected': 'Disconnected', 'chat.no_rooms': 'No conversations yet', 'chat.task_fallback': 'Task', 'chat.select': 'Select a conversation', 'chat.no_messages': 'No messages yet', 'chat.placeholder': 'Write a message... (Enter to send)', 'chat.conversation_fallback': 'Conversation', 'chat.direct_chat': 'Direct chat', 'chat.linked_task': 'Linked task', 'chat.write_btn': 'Message', 'chat.just_now': 'just now', 'chat.min_ago': 'm', 'chat.write_specialist': 'Write to specialist', 'chat.write_customer': 'Write to customer', 'chat.notif_settings': 'Notification settings', 'chat.notif_messages': 'Notifications for new messages', 'chat.toast_title': 'New message', 'chat.toast_open': 'Open chat', // Offer form 'offer.price': 'Price', 'offer.price.placeholder': 'e.g. 80', 'offer.customer_budget': 'Client budget', 'offer.message': 'Message', 'offer.optional': 'optional', 'offer.message.placeholder': 'Introduce yourself, your experience and why you are the best choice...', 'offer.submitting': 'Sending...', // Profile 'profile.photo': 'Profile photo', 'profile.photo.change': 'Change photo', 'profile.photo.hint': 'JPEG, PNG, WebP · up to 5MB', 'profile.basic_info': 'Basic info', 'profile.phone': 'Phone', 'profile.phone.placeholder': '+30 6901234567', 'profile.bio': 'Short bio', 'profile.bio.placeholder': 'Tell us a bit about yourself...', 'profile.language': 'Language', 'profile.language.hint': 'App interface and email notification language', 'profile.languages': 'Languages spoken', 'profile.languages.hint': 'Select all languages you speak', 'profile.skills': 'Skills', 'profile.skills.subtitle': 'Add the services you offer', 'profile.skills.placeholder': 'e.g. Cleaning, IT, Tutoring...', 'profile.role': 'Account role', 'profile.role.specialist': '🔧 Helper', 'profile.role.admin': '👑 Admin', 'profile.role.customer': '👤 User', 'profile.role.user': '👤 User', 'profile.role.change': 'To change your role please contact support.', 'profile.become_specialist': 'Offer your help', 'profile.become_specialist.desc': 'Create your helper profile, offer your skills and start receiving tasks.', 'become_specialist.hero.title': 'Offer your skills and start earning', 'become_specialist.hero.subtitle': 'Create a helper profile and receive requests from people who need help', 'become_specialist.how.title': 'How it works', 'become_specialist.step1.title': 'Create a specialist portfolio', 'become_specialist.step1.desc': 'Set your categories, skills and coverage areas — the system will automatically match you with relevant tasks', 'become_specialist.step2.title': 'Find tasks', 'become_specialist.step2.desc': 'Discover tasks in your categories in the "Find Orders" section', 'become_specialist.step3.title': 'Send an offer & earn', 'become_specialist.step3.desc': 'Submit offers with price and timeline, chat with clients and complete tasks', 'become_specialist.benefits.title': 'Specialist profile advantages', 'become_specialist.benefit1': 'Task search filtered by your categories and location', 'become_specialist.benefit2': 'Public profile with client reviews', 'become_specialist.benefit3': 'Availability schedule visible to clients', 'become_specialist.benefit4': 'Saved to favourites by clients', 'become_specialist.cta': 'Learn more', 'become_specialist.free_badge': 'Free registration', 'profile.tab.notifications': 'Notifications', 'profile.tab.reviews': 'Reviews', 'profile.tab.referral': 'Referrals', 'profile.tab.auto_response': 'Auto-response', 'profile.tab.site': 'Site', 'profile.site.title': 'Personal page', 'profile.site.url_label': 'Personal site', 'profile.site.copy': 'Copy', 'profile.site.copied': 'Copied', 'profile.site.visible_title': "What's on your page", 'profile.site.visible.name': 'Name and photo', 'profile.site.visible.bio': 'Bio', 'profile.site.visible.rating': 'Rating and reviews', 'profile.site.visible.portfolio': 'Portfolio / Cards', 'profile.site.visible.contacts': 'Contact info', 'profile.site.visible.full_last_name': 'Full last name', 'profile.site.visible.services': 'Service cards', 'profile.site.visible.reviews': 'Reviews section', 'profile.site.visible.status': '"Ready to help" status', 'profile.site.theme': 'Appearance theme', 'profile.site.theme.dark': 'Dark', 'profile.site.theme.light': 'Light', 'profile.site.slug_taken': 'This address is already taken', 'profile.site.stats.title': 'Site analytics', 'profile.site.stats.days': 'last 30 days', 'profile.site.stats.views': 'Views', 'profile.site.stats.unique': 'Unique visitors', 'profile.site.stats.messages': 'Messages', 'profile.site.stats.total_views': 'Total views', 'profile.site.stats.total_unique': 'Unique visitors', 'profile.site.stats.total_messages': 'Messages', 'profile.site.stats.empty': 'No data yet', 'profile.site.stats.loading': 'Loading analytics...', 'profile.site.stats.no_slug': 'Set your site URL to see analytics', 'profile.site.edit_bio_hint': 'Bio and photo are edited in the "Basic info" tab.', 'profile.site.seo.title': 'SEO — Page Metadata', 'profile.site.seo.hint': 'Shown in search results. Saved values are auto-translated into all languages.', 'profile.site.seo.site_title': 'Page title', 'profile.site.seo.site_title_placeholder': 'John Doe — Plumber in Athens', 'profile.site.seo.site_desc': 'Meta description', 'profile.site.seo.site_desc_placeholder': 'Brief description for search engines...', 'status.title': 'Status', 'status.can_help_now_hint': 'Your card is shown higher in search', 'status.need_help_hint': 'Specialists can offer you help', 'profile.referral.title': 'Referral program', 'profile.referral.desc': 'Share your link and earn rewards for every new user you invite.', 'profile.referral.link_label': 'Your referral link', 'profile.referral.copy': 'Copy', 'profile.referral.copied': 'Copied!', 'profile.referral.invited_count': 'successful referrals', 'profile.referral.no_code': 'Referral code is not available.', 'notifications.title': 'Notification settings', 'notifications.email.new_tasks': 'Email for new tasks', 'notifications.email.new_tasks.desc': 'Receive an email when a new task is posted in your categories', 'notifications.messages.desc': 'Receive a notification when a new message arrives', 'notifications.saved': 'Settings saved', 'notifications.plan_required': 'Not available in your plan', 'profile.tab.info': 'Basic info', 'profile.tab.finance': 'Finance', 'profile.tab.skills': 'Skills', 'profile.tab.categories': 'Categories', 'profile.tab.geography': 'Geography', 'profile.specialist.categories': 'Work categories', 'profile.specialist.categories.desc': 'Select the categories you work in', 'profile.specialist.geography': 'Coverage areas', 'profile.specialist.geography.desc': 'Select the cities / districts where you are active', 'profile.saving': 'Saving...', 'profile.upload.error': 'Error uploading photo', 'profile.saved': 'Saved', 'profile.tab.cards': 'Offers', 'profile.cards.count': 'Offers', 'profile.cards.add': 'Add offer', 'profile.cards.new_title': 'New offer title', 'profile.cards.placeholder': 'e.g. Plumbing', 'profile.cards.create': 'Create', 'profile.cards.cancel': 'Cancel', 'profile.cards.empty': 'No offers yet', 'profile.cards.empty_hint': 'Create your first card to show your services to clients.', 'profile.cards.create_first': 'Create your first offer', 'profile.cards.delete_confirm': 'Delete offer?', 'profile.background.change': 'Change background', 'profile.background.remove': 'Remove background', 'profile.listing_requirements.published_card': 'Publish at least one card', 'profile.listing_requirements.title': 'Your profile is not shown yet in offers', 'profile.listing_requirements.hint': 'To make the card visible, complete these conditions:', 'profile.listing_requirements.bio': 'Add a short bio in the main profile section', 'profile.listing_requirements.categories': 'Add at least one category to the active card', 'profile.listing_requirements.locations': 'Add at least one location to the active card', 'profile.listing_requirements.card_inactive': 'Make the card active', 'profile.listing_requirements.review_pending': 'Card is under review', 'profile.card.visibility_issue': 'Card is not shown in offers', 'profile.card.tab.main': 'General', 'profile.card.tab.skills': 'Skills', 'profile.card.tab.categories': 'Categories', 'profile.card.tab.geography': 'Geography', 'profile.card.tab.portfolio': 'Portfolio', 'profile.card.tab.pricelist': 'Price list', 'profile.card.pricelist.empty': 'No price list groups yet.', 'profile.card.pricelist.add_group': 'Add group', 'profile.card.pricelist.group_title': 'Group title', 'profile.card.pricelist.add_item': 'Add item', 'profile.card.pricelist.item_name': 'Service / work', 'profile.card.pricelist.item_desc': 'Description (optional)', 'profile.card.pricelist.item_price': 'Price', 'profile.card.pricelist.item_unit': 'Unit (e.g. /hour)', 'profile.card.pricelist.save_group': 'Save group', 'profile.card.pricelist.save_item': 'Save', 'profile.card.pricelist.delete_group': 'Delete group', 'profile.card.pricelist.delete_item': 'Delete', 'profile.card.active': 'Active', 'profile.card.review_pending': 'Pending approval', 'profile.card.review_pending_hint': 'Your card is being reviewed by the admin team.', 'profile.card.review_submitted': 'Card submitted for review', 'profile.card.review_approved': 'Card approved', 'profile.card.review_approved_hint': 'Your card is now visible in offers.', 'profile.card.review_rejected': 'Card rejected', 'profile.card.review_rejected_hint': 'Your card was not approved. Please update it and submit again.', 'profile.card.submit_review': 'Submit for review', 'profile.card.withdraw_review': 'Withdraw request', 'profile.card.unpublish': 'Unpublish', 'profile.card.save': 'Save', 'profile.card.saved': 'Saved', 'profile.card.delete': 'Delete', 'profile.card.skill.add': 'Add skill', 'profile.card.photo.add': 'Add photo', 'profile.card.photo.uploading': 'Uploading...', 'profile.card.photo.empty': 'No photos yet', 'profile.card.item.title': 'Title', 'profile.card.item.desc': 'Description', 'profile.card.item.save': 'Save', 'profile.card.item.cancel': 'Cancel', 'profile.card.item.edit': 'Edit', 'profile.card.description': 'Card description', 'profile.card.desc_auto_translate': 'Will be automatically translated into other languages on save', 'profile.card.desc_translated': 'Translations available:', 'profile.upgrade.cards_limit': 'Portfolio limit reached', 'profile.upgrade.plan': 'Current plan:', 'profile.upgrade.contact': 'Contact the administrator to change your plan', 'profile.upgrade.ok': 'Got it', 'profile.plan.title': 'Subscription plan', 'profile.balance': 'Balance', 'profile.balance.topup': 'Top Up Balance', 'profile.balance.topup.title': 'Top Up Balance', 'profile.balance.topup.amount': 'Amount (EUR)', 'profile.balance.topup.hint': 'Choose a preset or enter a custom amount', 'profile.balance.topup.submit': 'Proceed to Payment', 'profile.balance.topup.loading': 'Redirecting...', 'profile.balance.topup.error': 'Payment initiation failed. Please try again.', 'payment.success.title': 'Payment Successful!', 'payment.success.desc': 'Your balance has been updated.', 'payment.cancelled.title': 'Payment Cancelled', 'payment.cancelled.desc': 'Payment was cancelled. No charges were made.', 'payment.pending.title': 'Processing...', 'payment.pending.desc': 'Your payment is being processed.', 'payment.back_to_profile': 'Back to Profile', 'profile.plan.basic': 'Basic (free)', 'profile.plan.contact_upgrade': 'Contact admin to upgrade your plan', 'profile.plan.cards_up_to': 'Portfolio: up to', 'profile.plan.cards_unlimited': 'Portfolio: unlimited', 'profile.plan.tasks_up_to': 'Tasks: up to', 'profile.plan.offers_up_to': 'Offers: up to', 'profile.plan.valid_until': 'Valid until', 'profile.plan.no_expiry': 'No expiry', // Create task 'create.error': 'Error posting task', // Tasks list extras 'tasks.category.general': 'General', 'tasks.budget.range': 'Range:', 'tasks.budget.from': 'from', 'tasks.budget.to': 'to', 'tasks.filter.reset': 'Reset filters', 'tasks.load_more': 'Load more', 'tasks.showing': 'Results:', 'tasks.field.budget': 'Budget, €', // Admin 'admin.title': 'Admin Panel', 'admin.tab.stats': 'Statistics', 'admin.tab.users': 'Users', 'admin.tab.tasks': 'Tasks', 'admin.tab.reports': 'Reports', 'admin.tab.moderation': 'Moderation', 'admin.stats.users': 'Users', 'admin.stats.tasks': 'Tasks', 'admin.stats.offers': 'Offers', 'admin.stats.reviews': 'Reviews', 'admin.tasks.by_status': 'Tasks by status', 'admin.col.user': 'User', 'admin.col.email': 'Email', 'admin.col.role': 'Role', 'admin.col.registered': 'Registered', 'admin.col.status': 'Status', 'admin.col.title': 'Title', 'admin.col.budget': 'Budget', 'admin.col.created': 'Created', 'admin.users.active': 'Active', 'admin.users.inactive': 'Inactive', 'admin.users.deactivate': 'Deactivate', 'admin.users.activate': 'Activate', 'admin.tasks.cancel': 'Cancel', 'admin.reports.none': 'No reports', 'admin.moderation.none': 'No offers to review', 'admin.moderation.pending': 'Pending', 'admin.moderation.active': 'Active', 'admin.moderation.approve': 'Approve', 'admin.moderation.block': 'Block', 'admin.moderation.pending_title': 'Offers pending approval', 'admin.moderation.active_title': 'Active offers', 'admin.moderation.pending_count': 'Pending', 'admin.moderation.active_count': 'Active', 'admin.moderation.pending_hint': 'New offers waiting for approval', 'admin.moderation.active_hint': 'Visible offers you can block', 'admin.moderation.pending_empty': 'No new offers to approve', 'admin.moderation.active_empty': 'No active offers found', 'admin.reports.reviewed': 'Reviewed', 'admin.reports.dismiss': 'Dismiss', 'admin.pagination.total': 'Total', 'admin.users.role.change': 'Change role', 'admin.users.search.placeholder': 'Search name or email...', 'admin.tasks.delete': 'Delete', 'admin.tasks.delete.confirm': 'Permanently delete this task?', 'admin.tasks.search.placeholder': 'Search title...', 'admin.col.customer': 'Customer', 'admin.col.reporter': 'Reporter', 'admin.col.target': 'Target', 'admin.filter.all_roles': 'All roles', 'admin.filter.all_statuses': 'All statuses', 'admin.reports.target.task': 'Task', 'admin.reports.target.user': 'User', 'admin.tab.categories': 'Categories', 'admin.tab.locations': 'Cities & Districts', 'admin.tab.logs': 'Logs', 'admin.tab.plans': 'Plans', 'admin.tab.settings': 'Settings', 'admin.logs.subtab.ai': 'AI Logs', 'admin.logs.subtab.activity': 'Activity', 'admin.logs.subtab.mail': 'Mail', 'admin.logs.subtab.notifications': 'Notifications', 'admin.notif_logs.type': 'Type', 'admin.notif_logs.title': 'Title', 'admin.notif_logs.read': 'Read', 'admin.notif_logs.empty': 'No notification logs', 'admin.stats.notif_chart_title': 'Notifications per day', 'admin.stats.notif_label': 'Notifications', 'admin.stats.mail_chart_title': 'Emails per day', 'admin.stats.mail_label': 'Emails', 'admin.filter.all': 'All', 'admin.stats.specialists': 'Helpers', 'admin.col.plan': 'Plan', 'admin.back_home': 'Home', 'admin.plans.title': 'Subscription plans', 'admin.plans.add': '+ New plan', 'admin.plans.empty': 'No plans created', 'admin.plans.form.new': 'New plan', 'admin.plans.form.edit': 'Edit plan', 'admin.plans.form.name': 'Name', 'admin.plans.form.price': 'Price (EUR)', 'admin.plans.form.old_price': 'Old price (EUR, optional)', 'admin.plans.form.max_offers': 'Max offers (empty = no limit)', 'admin.plans.form.max_cards': 'Max offers (empty = no limit)', 'admin.plans.form.duration_days': 'Duration (days, empty = no expiry)', 'admin.plans.form.description': 'Description', 'admin.plans.form.features': 'Features (one per line)', 'admin.plans.form.notify': 'Notify about new tasks', 'admin.plans.form.default': 'Default', 'admin.plans.form.active': 'Active', 'admin.plans.form.order': 'Order', 'admin.plans.form.role': 'Role', 'admin.plans.form.tier': 'Tier', 'admin.plans.form.role.customer': 'Customer', 'admin.plans.form.role.specialist': 'Helper', 'admin.plans.form.tier.free': 'Free', 'admin.plans.form.tier.pro': 'Pro', 'admin.plans.form.tier.ultimate': 'Ultimate', 'admin.plans.form.section.limits': 'Limits (empty = unlimited)', 'admin.plans.form.max_messages_day': 'Max Messages/Day', 'admin.plans.form.max_orders_day': 'Max Orders/Day', 'admin.plans.form.max_skills': 'Max Skills', 'admin.plans.form.max_profiles': 'Max Profiles', 'admin.plans.form.max_portfolio': 'Max Portfolio Items', 'admin.plans.form.section.boost': 'Multipliers & Boost', 'admin.plans.form.search_boost': 'Search Boost', 'admin.plans.form.offers_multiplier': 'Offers Multiplier', 'admin.plans.form.section.contact': 'Contact Permissions', 'admin.plans.form.can_contact_free': 'Contact Free Plan users', 'admin.plans.form.can_contact_pro': 'Contact Pro Plan users', 'admin.plans.form.can_contact_all': 'Contact All users', 'admin.plans.form.can_show_contact': 'Show Contact Info', 'admin.plans.form.can_view_phone': 'View Phone', 'admin.plans.form.section.features': 'Feature Flags', 'admin.plans.form.upload_video': 'Upload Video', 'admin.plans.form.favorites': 'Favorites', 'admin.plans.form.google_calendar': 'Google Calendar', 'admin.plans.form.verified_badge': 'Verified Badge', 'admin.plans.form.highlighted_reviews': 'Highlighted Reviews', 'admin.plans.form.personal_site': 'Personal Site', 'admin.plans.form.can_help_now': 'Can Help Now Status', 'admin.plans.form.need_help': 'Need Help Status', 'admin.plans.form.auto_response': 'Auto Response', 'admin.plans.form.auto_match': 'Auto Match', 'admin.plans.form.price_list': 'Price List', 'admin.plans.form.instant_dispatch_free': 'Instant Dispatch (Free)', 'admin.plans.form.instant_dispatch_pro': 'Instant Dispatch (Pro)', 'admin.plans.badge.default': 'Default', 'admin.plans.badge.inactive': 'Inactive', 'admin.plans.make_default': 'Set as default', 'admin.plans.tasks': 'Tasks', 'admin.plans.offers': 'Offers', 'admin.plans.cards': 'Offers', 'admin.plans.notify_tasks': 'Task notifications', 'admin.plans.delete.confirm': 'Delete plan', 'admin.activity.title': 'Activity log', 'admin.activity.event': 'Event', 'admin.activity.all_events': 'All events', 'admin.activity.from': 'From', 'admin.activity.to': 'To', 'admin.activity.reset': 'Reset', 'admin.activity.total': 'Total', 'admin.activity.empty': 'No records', 'admin.mail.event': 'Email event', 'admin.mail.all_events': 'All email events', 'admin.mail.from': 'From', 'admin.mail.to': 'To', 'admin.mail.reset': 'Reset', 'admin.mail.total': 'Total', 'admin.mail.empty': 'No email logs', 'admin.mail.recipient': 'Recipient', 'admin.mail.provider': 'Provider', 'admin.mail.details': 'Details', 'admin.mail.status': 'Status', 'admin.mail.success': 'Success', 'admin.mail.failed': 'Failed', 'admin.event.email_sent': 'Email sent', 'admin.event.email_failed': 'Email failed', 'admin.event.email_dev': 'Email DEV fallback', 'admin.event.admin_email_test_sent': 'Admin test email sent', 'admin.event.admin_email_test_failed': 'Admin test email failed', 'admin.logs.empty': 'No records', 'admin.logs.date': 'Date', 'admin.logs.provider': 'Provider', 'admin.logs.model': 'Model', 'admin.logs.action': 'Action', 'admin.logs.langs': 'Languages', 'admin.logs.in': 'In', 'admin.logs.out': 'Out', 'admin.logs.total': 'Total', 'admin.logs.ms': 'ms', 'admin.logs.status': 'Status', 'admin.stats.activity_30d': 'Activity over 30 days', 'admin.stats.tasks_label': 'Tasks', 'admin.stats.users_label': 'Users', 'admin.stats.specialists_label': 'Helpers', 'admin.stats.tokens_title': 'Token usage (by month)', 'admin.stats.tokens_out': 'Output', 'admin.stats.tokens_in': 'Input', 'admin.stats.tokens_out_label': 'Output tokens', 'admin.stats.tokens_in_label': 'Input tokens', 'admin.stats.cost_label': 'Cost (USD)', 'admin.stats.tasks_by_status': 'Tasks by status', 'admin.task_status.open': 'Open', 'admin.task_status.in_progress': 'In progress', 'admin.task_status.completed': 'Completed', 'admin.task_status.cancelled': 'Cancelled', 'admin.task_status.draft': 'Drafts', 'admin.settings.tab.general': 'General', 'admin.settings.tab.smtp': 'E-Mail', 'admin.settings.tab.notifications': 'Notifications', 'admin.settings.tab.payment': 'Payment', 'admin.settings.tab.referral': 'Referrals', 'admin.settings.tab.seo': 'SEO', 'admin.settings.tab.socials': 'Socials', 'admin.settings.tab.telegram': 'Telegram Bot', 'admin.settings.telegram.title': 'Telegram Bot Settings', 'admin.settings.telegram.help': 'Create a bot via @BotFather. Use @userinfobot to get chat IDs.', 'admin.settings.telegram.bot_token': 'Bot Token', 'admin.settings.telegram.admin_chat_id': 'Admin Chat ID', 'admin.settings.telegram.admin_chat_hint': 'First send /start to your bot, then use @userinfobot to get your chat ID', 'admin.settings.telegram.channel_id': 'Channel ID', 'admin.settings.telegram.channels_title': 'Language Channels', 'admin.settings.telegram.channel_hint': 'Public channel @username or numeric ID', 'admin.settings.telegram.notify_registrations': 'Notify on new registrations', 'admin.settings.telegram.notify_registrations_hint': 'Send admin a message when a new user registers', 'admin.settings.telegram.post_new_tasks': 'Post new tasks to channel', 'admin.settings.telegram.post_new_tasks_hint': 'Automatically publish new tasks to the Telegram channel', 'admin.settings.telegram.test': 'Test', 'admin.settings.telegram.verify': 'Verify', 'admin.settings.telegram.test_ok': 'Connection successful', 'admin.settings.telegram.test_fail': 'Connection failed', 'admin.settings.socials.title': 'Social Network Links', 'admin.settings.socials.hint': 'Filled links are displayed in the site footer', 'admin.settings.seo.maintenance_label': 'Maintenance Mode', 'admin.settings.seo.maintenance_hint': 'Show a maintenance page to all visitors', 'admin.settings.seo.indexing_label': 'Search Engine Indexing', 'admin.settings.seo.indexing_hint': 'Allow search engines to index the site', 'admin.settings.seo.head_scripts_label': ' Scripts (JS)', 'admin.settings.seo.head_scripts_hint': 'Runs on every page (Google Tag Manager, analytics, etc.)', 'admin.settings.seo.site_title_label': 'Site Title', 'admin.settings.seo.site_description_label': 'Site Description (meta description)', 'admin.settings.referral.title': 'Referral program', 'admin.settings.referral.hint': 'Reward users who bring new registrations.', 'admin.settings.referral.enabled_label': 'Enabled', 'admin.settings.referral.enabled_hint': 'Enable / disable reward application', 'admin.settings.referral.customer_section': 'For customers', 'admin.settings.referral.specialist_section': 'For helpers', 'admin.settings.referral.plan_label': 'Reward plan', 'admin.settings.referral.no_plan': '— no plan —', 'admin.settings.referral.plan_hint': 'This plan will be assigned to the referrer. If their current plan is higher, only days will be added.', 'admin.settings.referral.days_label': 'Reward days', 'admin.settings.referral.days_hint': 'Number of days added to the plan expiry.', 'admin.settings.general.title': 'General settings', 'admin.settings.general.site_name': 'Site name', 'admin.settings.general.site_url': 'Site URL', 'admin.settings.general.contact_email': 'Contact email', 'admin.settings.general.support_phone': 'Support phone', 'admin.settings.smtp.title': 'SMTP settings', 'admin.settings.smtp.hint': 'Used to send email notifications.', 'admin.settings.smtp.host': 'SMTP Host', 'admin.settings.smtp.port': 'Port', 'admin.settings.smtp.encryption': 'Encryption', 'admin.settings.smtp.enc.none': 'None', 'admin.settings.smtp.enc.tls': 'STARTTLS (port 587)', 'admin.settings.smtp.enc.ssl': 'SSL/TLS (port 465)', 'admin.settings.smtp.username': 'Username', 'admin.settings.smtp.password': 'Password / App Password', 'admin.settings.smtp.from_name': 'Sender name', 'admin.settings.smtp.from_email': 'Sender email', 'admin.settings.smtp.test': 'Send test email', 'admin.settings.smtp.sending': 'Sending...', 'admin.settings.payment.hint': 'ePay Piraeus Bank credentials.', 'admin.settings.env.test': 'Test (sandbox)', 'admin.settings.env.prod': 'Production', 'admin.settings.env.label': 'Environment', 'admin.settings.merchant_id': 'Merchant ID', 'admin.settings.api_user': 'API User', 'admin.settings.api_password': 'API Password', 'admin.settings.confirm_url': 'Confirmation URL (webhook)', 'admin.settings.cancel_url': 'Cancel URL', 'admin.settings.active': 'Active', 'admin.settings.saving': 'Saving...', 'admin.settings.saved': 'Saved', 'admin.notif.vars_hint': 'Available variables in templates', 'admin.notif.tmpl.not_set': 'Template not configured', 'admin.notif.tmpl.subject_label': 'Email subject', 'admin.notif.tmpl.body_label': 'Email body (HTML)', 'admin.notif.tmpl.save': 'Save', 'admin.notif.tmpl.close': 'Close', 'admin.notif.tmpl.translate': 'Auto-translate to other languages', 'admin.notif.tmpl.translating': 'Translating...', 'admin.notif.tmpl.saving': 'Saving...', 'admin.notif.email_verification': 'Email verification', 'admin.notif.registration_success': 'Successful registration', 'admin.notif.password_reset': 'Password reset', 'admin.notif.new_offer': 'New offer', 'admin.notif.new_task': 'New task', 'admin.notif.offer_accepted': 'Offer accepted', 'admin.notif.new_message': 'New message', 'admin.notif.offer_declined': 'Offer declined', 'admin.notif.offer_other_accepted': 'Another specialist chosen', 'admin.notif.task_updated': 'Task updated', 'admin.notif.deadline_reminder': 'Deadline reminder', 'admin.notif.task_archived': 'Task unpublished automatically', 'admin.notif.referral_reward': 'Referral reward', // Plan lifecycle email templates 'admin.email_template.plan_activated': 'Plan activated', 'admin.email_template.plan_upgraded': 'Plan upgraded', 'admin.email_template.plan_downgrade_scheduled': 'Downgrade scheduled', 'admin.email_template.plan_downgrade_applied': 'Downgrade applied', 'admin.email_template.plan_renewal_reminder': 'Renewal reminder', 'admin.email_template.plan_insufficient_funds': 'Insufficient funds warning', // Pricing confirm modal 'pricing.confirm.title': 'Confirm plan selection', 'pricing.confirm.plan': 'Plan', 'pricing.confirm.prorated': 'Prorated credit', 'pricing.confirm.effective_price': 'Amount due', 'pricing.confirm.your_balance': 'Your balance', 'pricing.confirm.downgrade_info': 'The switch to the new plan will happen automatically after the current period ends.', 'pricing.confirm.insufficient': 'Insufficient balance.', 'pricing.confirm.top_up': 'Top up', 'pricing.confirm.schedule_downgrade': 'Schedule downgrade', 'pricing.confirm.pay': 'Pay', 'admin.user_edit.title': 'Edit user', 'admin.user_edit.email': 'Email', 'admin.user_edit.email_verified': 'Email verified', 'admin.user_edit.email_not_verified': 'Email not verified', 'admin.user_edit.verify_email_btn': 'Verify manually', 'admin.user_edit.verify_email_done': 'Email verified!', 'admin.user_edit.id': 'ID', 'admin.user_edit.registered': 'Registered', 'admin.user_edit.last_seen': 'Last seen', 'admin.user_edit.lang': 'Language', 'admin.user_edit.first_name': 'First name', 'admin.user_edit.last_name': 'Last name', 'admin.user_edit.phone': 'Phone', 'admin.user_edit.bio': 'Bio', 'admin.user_edit.role': 'Role', 'admin.user_edit.plan': 'Plan', 'admin.user_edit.no_plan': '— No plan —', 'admin.user_edit.active': 'Active account', 'admin.user_edit.published': 'Published', 'admin.user_edit.balance': 'Balance (EUR)', 'admin.user_edit.skills': 'Skills', 'admin.user_edit.tab.profile': 'Profile', 'admin.user_edit.tab.account': 'Account', 'admin.user_edit.tab.balance': 'Balance', 'admin.user_edit.tab.settings': 'Settings', 'admin.user_edit.tab.specialist': 'Offers', 'admin.user_edit.tab.site': 'Website', 'admin.user_edit.plan_expires': 'Plan expires', 'admin.user_edit.interface_lang': 'Interface language', 'admin.user_edit.comm_languages': 'Communication languages', 'admin.user_edit.personal_site_slug': 'Personal page', 'admin.user_edit.show_contact_info': 'Show contact info', 'admin.user_edit.show_contact_info.hint': 'Visible to customers', 'admin.user_edit.notify_new_tasks': 'Notify about new tasks', 'admin.user_edit.notify_new_tasks.hint': 'Push and email notifications', 'admin.user_edit.notif_messages': 'Message notifications', 'admin.user_edit.notif_messages.hint': 'New messages in chat', 'admin.user_edit.site_settings': 'Personal page settings', 'admin.user_edit.categories': 'Service categories', 'admin.user_edit.locations': 'Service areas', 'admin.user_edit.skill_placeholder': 'New skill...', 'admin.user_edit.add_category': '— Select category —', 'admin.user_edit.add_location': '— Select location —', 'admin.user_edit.specialist_cards': 'Offers', 'admin.user_edit.no_cards': 'No offers found', 'admin.user_edit.card_title': 'Offer title', 'admin.user_edit.card_description': 'Description', 'admin.balance.topup.btn': 'Top up', 'admin.balance.withdraw.btn': 'Withdraw', 'admin.balance.modal_hint': 'Changes take effect immediately and are recorded in history', 'admin.balance.topup.title': 'Top up balance', 'admin.balance.topup.amount': 'Amount', 'admin.balance.topup.description': 'Comment', 'admin.balance.topup.description.placeholder': 'For example: bonus or manual top-up', 'admin.balance.topup.submit': 'Top up balance', 'admin.balance.withdraw.title': 'Withdraw balance', 'admin.balance.withdraw.amount': 'Amount', 'admin.balance.withdraw.description': 'Comment', 'admin.balance.withdraw.description.placeholder': 'For example: refund or manual debit', 'admin.balance.withdraw.submit': 'Withdraw from balance', 'admin.user_edit.role.customer': 'Customer', 'admin.user_edit.role.user': 'User', 'admin.user_edit.role.specialist': 'Helper', 'admin.user_edit.role.admin': 'Administrator', 'common.refresh': 'Refresh', 'common.back_home': 'Home', 'admin.loc.hint': 'Manage cities and districts', 'admin.loc.add_city': 'New city', 'admin.loc.add_district': 'Add district', 'admin.loc.new': 'New location', 'admin.loc.edit': 'Edit location', 'admin.loc.district': 'district', 'admin.loc.empty': 'No locations', 'admin.loc.delete.confirm': 'Delete location? All districts will also be deleted.', 'admin.cat.add_root': 'New category', 'admin.cat.add_sub': 'Subcategory', 'admin.cat.edit': 'Edit', 'admin.cat.delete': 'Delete', 'admin.cat.delete.confirm': 'Delete category? All subcategories will also be deleted.', 'admin.cat.slug': 'Slug', 'admin.cat.icon': 'Icon', 'admin.cat.name_el': 'Greek', 'admin.cat.name_en': 'English', 'admin.cat.name_ru': 'Russian', 'admin.cat.name_uk': 'Ukrainian', 'admin.cat.active': 'Active', 'admin.cat.parent': 'Parent category', 'admin.cat.no_parent': 'Top level', 'admin.cat.save': 'Save', 'admin.cat.cancel': 'Cancel', 'admin.cat.empty': 'No categories', 'admin.cat.hint': 'Manage categories with multi-level hierarchy', 'admin.cat.new': 'New category', 'admin.cat.subcategory': 'subcategory', 'admin.cat.add_child': 'Add subcategory', 'admin.cat.inactive': 'Inactive', 'admin.event.user_login': 'Login', 'admin.event.user_register': 'Registration', 'admin.event.admin_user_deactivate': 'User blocked', 'admin.event.admin_user_activate': 'User activated', 'admin.event.admin_user_role_changed': 'Role changed', 'admin.event.admin_task_cancelled': 'Task cancelled', 'admin.event.admin_task_deleted': 'Task deleted', 'admin.event.admin_report_reviewed': 'Report reviewed', 'admin.event.admin_report_dismissed': 'Report dismissed', 'admin.event.task_created': 'Task created', // User status 'user.online': 'Online', 'user.seen_minutes': 'was here {n} min ago', 'user.seen_hours': 'was here {n} hr ago', 'user.seen_yesterday': 'was here yesterday', 'user.seen_days': 'was here {n} days ago', // Specialists 'specialists.title': 'Offers', 'specialists.search': 'Search specialist...', 'specialists.search.btn': 'Search', 'specialists.empty': 'No specialists found', 'specialists.no_bio': 'No description', 'specialists.view': 'View profile', 'specialists.reviews': 'reviews', 'specialist.favorite': 'Add to favorites', 'specialist.unfavorite': 'Remove from favorites', 'specialist.site_link': 'Personal site', 'favorites.specialists.title': 'Favourite specialists', 'favorites.specialists.empty': 'No favourite specialists yet', 'nav.favorites': 'Favourites', 'nav.schedule': 'Schedule', 'nav.find_tasks': 'Find Orders', 'schedule.title': 'My Schedule', 'schedule.subtitle': 'Mark the days when you are free or busy — clients will see your availability', 'schedule.available': 'Available', 'schedule.busy': 'Busy', 'schedule.unset': 'Not set', 'schedule.click_hint': '← click to cycle status', 'schedule.range_mode': 'Select range', 'schedule.range_from': 'From {date} — select end date', 'schedule.click_to_set': 'Click to set', 'schedule.free': 'free', 'schedule.busy_count': 'busy', 'schedule.free_days': 'free days', 'schedule.googleCalendar': 'Google Calendar', 'schedule.connectGoogle': 'Connect Google Calendar', 'schedule.disconnectGoogle': 'Disconnect', 'schedule.connectedAs': 'Connected as', 'schedule.importFromGoogle': 'Sync from Google', 'schedule.gcalConnected': '\u2713 Google Calendar connected', 'schedule.gcalError': 'Google Calendar connection error', 'schedule.gcalImportDone': 'Imported {n} days from Google Calendar', 'schedule.gcalAutoSyncNote': 'Availability changes are automatically synced to Google Calendar', 'schedule.gcalConnectDesc': 'Connect Google Calendar to automatically sync your availability', 'schedule.gcalDisconnectConfirm': 'Disconnect Google Calendar?', 'find_tasks.title': 'Find Orders', 'find_tasks.for_me': 'For me', 'find_tasks.all': 'All orders', 'find_tasks.by_category': 'By category', 'find_tasks.list': 'List', 'find_tasks.already_offered': 'Offer sent', 'find_tasks.offer_now': 'Make an offer', 'find_tasks.empty_for_me': 'No tasks found in your categories', 'find_tasks.banner_hint': 'Find tasks matching your portfolio categories', 'find_tasks.no_cards': 'Create a specialist portfolio to see tasks matched to you', 'find_tasks.add_card': 'Create portfolio', 'find_tasks.search': 'Search tasks...', 'find_tasks.tasks_count': 'tasks', 'footer.tagline': 'The task platform for Greece', 'footer.rights': 'All rights reserved.', 'nav.privacy': 'Privacy Policy', 'nav.delete_account': 'Delete Account', 'delete_account.title': 'Request Account Deletion', 'delete_account.subtitle': 'Once we verify your request, we will permanently delete your account and data within 30 days.', 'delete_account.warning': 'This action cannot be undone. All your data will be permanently deleted.', 'delete_account.reason_label': 'Reason (optional)', 'delete_account.reason_placeholder': 'Tell us why you want to delete your account...', 'delete_account.confirm_label': 'I confirm that I want to permanently delete my account', 'delete_account.submit': 'Submit request', 'delete_account.submitting': 'Submitting...', 'delete_account.success_title': 'Your request has been received', 'delete_account.success_body': 'We will process your request within 30 days and notify you by email.', 'delete_account.login_required': 'You must be logged in to submit a deletion request.', 'delete_account.login_btn': 'Log in', // App download section 'app.download_title': 'Download the CanHelp mobile app', 'app.download_desc': 'All of CanHelp — always at your fingertips. Available for Android and iOS.', // Nav 'nav.pricing': 'Pricing', // Pricing page 'pricing.title': 'Pricing', 'pricing.subtitle': 'Choose the right plan for you', 'pricing.role.customer': 'Customer', 'pricing.role.specialist': 'Specialist', 'pricing.free': 'Free', 'pricing.per_month': 'mo', 'pricing.duration': 'Duration', 'pricing.days': 'days', 'pricing.current_plan': 'Your plan', 'pricing.popular': 'Popular', 'pricing.choose': 'Choose', 'pricing.your_plan': 'Active plan', 'pricing.free_default': 'Default', 'pricing.compare': 'Compare features', 'pricing.feature': 'Feature', 'pricing.faq_note': 'Payment is deducted from your CanHelp balance. Top up available in Payments.', 'pricing.feat.messages': 'Messages / day', 'pricing.feat.orders': 'Orders / day', 'pricing.feat.contact_all': 'Contact everyone', 'pricing.feat.view_phone': 'View phone number', 'pricing.feat.show_contact': 'Show contact info', 'pricing.feat.favorites': 'Favorites', 'pricing.feat.verified_badge': 'Verified badge', 'pricing.feat.google_calendar': 'Google Calendar', 'pricing.feat.personal_site': 'Personal site', 'pricing.feat.auto_response': 'Auto-response', 'pricing.feat.auto_match': 'Auto-match', 'pricing.feat.highlighted_reviews': 'Highlighted reviews', 'pricing.feat.portfolio': 'Offer items', 'pricing.feat.cards': 'Number of offers', 'pricing.feat.notify_tasks': 'New task notifications', 'pricing.feat.video': 'Video in offer', // Upgrade prompt 'upgrade.available_in': 'Available in', 'upgrade.cta': 'Upgrade', // Dashboard plan block 'dashboard.plan.title': 'My Plan', 'dashboard.plan.expires': 'Expires in {n} days', 'dashboard.plan.upgrade': 'Upgrade plan', 'dashboard.plan.no_plan': 'Free plan', 'dashboard.plan.messages': 'Messages today', 'dashboard.plan.orders': 'Orders today', 'dashboard.plan.limits': 'Daily limits', 'dashboard.plan.features': 'Features', 'dashboard.plan.stats': 'Stats', 'dashboard.stats.cards': 'Portfolios', 'dashboard.stats.maxCards': 'Max portfolios', 'dashboard.stats.portfolioItems': 'Portfolio items', 'dashboard.stats.maxPortfolioItems': 'Max items', 'dashboard.stats.activeOffers': 'Active offers', 'dashboard.stats.reviewsReceived': 'Reviews', 'dashboard.stats.activeTasks': 'Active tasks', 'dashboard.stats.completedTasks': 'Completed', 'status.need_help': 'I need help', 'status.active': 'Active', 'status.toggle_on': 'Enable', 'status.toggle_off': 'Disable', // FOMO 'fomo.missed_orders': 'Missed {n} orders', 'fomo.missed_value': 'Worth €{v}', 'fomo.upgrade_hint': 'Upgrade to receive more orders', 'fomo.conversion': 'Task conversion', 'fomo.active': 'Active', 'fomo.with_offers': 'With offers', 'fomo.completed': 'Completed', 'fomo.already_offered': '{n} specialists have already responded', 'fomo.specialist_missed': 'You missed {n} orders', 'fomo.top_categories': 'Categories', 'fomo.offers_received': 'offers received', 'fomo.avg_offers': 'Avg {n}/task', 'fomo.completion_rate': 'completed', // Task auto-match 'task.auto_match': 'Auto-match', 'task.auto_match_results': 'Top specialists', 'task.no_offer_yet': 'You haven\'t sent an offer yet', 'task.make_offer': 'Send offer', 'auto_response.title': 'Auto-Response', 'auto_response.enabled': 'Enable auto-response', 'auto_response.min_budget': 'Min budget', 'auto_response.max_budget': 'Max budget', 'auto_response.default_price': 'Default price', 'auto_response.default_message': 'Default message', 'auto_response.max_per_day': 'Max auto-offers per day', 'auto_response.save': 'Save', 'auto_response.saved': 'Saved', 'auto_response.categories': 'Categories', 'auto_response.locations': 'Locations', // Personal site 'profile.personal_site': 'Personal Site', 'profile.site_slug': 'URL slug', 'profile.site_slug_hint': 'Only latin letters, numbers, - and _', 'profile.site_open': 'Open site', 'profile.site_preview': 'Your site', 'profile.show_contact': 'Show contact info', 'profile.show_contact_hint': 'Customers with Pro/Ultimate plans will see your phone number', // Google Calendar plan gate 'gcal.upgrade_required': 'Google Calendar requires a Pro or Ultimate plan', // Chat limits 'chat.limit_warning': '{n} messages left today', 'chat.limit_reached': 'Message limit reached. Upgrade your plan', 'chat.upgrade': 'Upgrade', // Site page 'site.member_since': 'Member since', 'site.rating': 'Rating', 'site.completed_tasks': 'Completed', 'site.languages': 'Languages', 'site.photos': 'photos', 'site.contact_form': 'Get in touch', 'site.contact_sent': 'Message sent!', 'site.contact_sent_desc': 'The specialist will contact you soon', 'site.contact_name': 'Name', 'site.contact_name_ph': 'Your name', 'site.contact_email_ph': 'your@email.com', 'site.contact_message': 'Message', 'site.contact_message_ph': 'Describe your task...', 'site.contact_send': 'Send', 'site.share': 'Share', 'site.speaks_languages': 'Speaks', 'site.message_sent': 'Message sent!', 'site.message_sent_desc': 'The specialist will receive it in the chat', 'site.message_placeholder': 'Write your message...', 'site.write_to_chat': 'Write to chat', 'site.auth_required_title': 'Sign in required', 'site.auth_required_desc': 'To write in the chat, you need to sign in to your CanHelp account.', 'site.auth_login_btn': 'Sign in', 'site.auth_contact_form_btn': 'Contact via feedback form', 'specialist.services': 'Services', 'portfolio.title': 'Portfolio', 'status.can_help_now': 'Available now', 'common.not_found': 'Page not found', 'common.anonymous': 'Anonymous', 'specialist_setup.page_title': 'Specialist profile setup', 'specialist_setup.step_of': 'Step {current} of {total}', 'specialist_setup.next': 'Next', 'specialist_setup.back': 'Back', 'specialist_setup.skip': 'Skip', 'specialist_setup.finish': 'Finish', 'specialist_setup.go_to_profile': 'Go to profile', 'specialist_setup.browse_tasks': 'Browse tasks', 'specialist_setup.step1.title': 'Welcome!', 'specialist_setup.step1.subtitle': "Let's set up your profile", 'specialist_setup.step1.desc': 'A complete profile helps you find more clients. Follow the steps to create the perfect specialist profile.', 'specialist_setup.step1.what_next': 'What we will do:', 'specialist_setup.step1.item1': 'Fill in basic information', 'specialist_setup.step1.item2': 'Create a service card', 'specialist_setup.step1.item3': 'Add skills and categories', 'specialist_setup.step1.item4': 'Select service area', 'specialist_setup.step1.item5': 'Upload portfolio photos', 'specialist_setup.step2.title': 'Basic profile', 'specialist_setup.step2.subtitle': 'Tell us about yourself', 'specialist_setup.step2.bio_label': 'About me', 'specialist_setup.step2.bio_placeholder': 'Describe your experience, services you offer...', 'specialist_setup.step2.phone_label': 'Phone', 'specialist_setup.step2.phone_placeholder': '+30 6900000000', 'specialist_setup.step2.photo_label': 'Profile photo', 'specialist_setup.step2.photo_btn': 'Upload photo', 'specialist_setup.step2.photo_uploading': 'Uploading...', 'specialist_setup.step2.photo_hint': 'Shown on your profile', 'specialist_setup.step3.title': 'Service card', 'specialist_setup.step3.subtitle': 'Create your first service card', 'specialist_setup.step3.title_label': 'Card title', 'specialist_setup.step3.title_placeholder': 'E.g. Plumber, Electrician, Cleaning...', 'specialist_setup.step3.desc_label': 'Description', 'specialist_setup.step3.desc_placeholder': 'Describe in detail what you offer, your experience, advantages...', 'specialist_setup.step3.title_required': 'Title is required', 'specialist_setup.step4.title': 'Skills & Categories', 'specialist_setup.step4.subtitle': 'Add skills and select categories', 'specialist_setup.step4.skills_label': 'Skills', 'specialist_setup.step4.skills_placeholder': 'E.g. Pipe installation...', 'specialist_setup.step4.skills_add': 'Add', 'specialist_setup.step4.categories_label': 'Categories', 'specialist_setup.step5.title': 'Service area', 'specialist_setup.step5.subtitle': 'Where do you provide services?', 'specialist_setup.step5.hint': 'Select cities or specific areas', 'specialist_setup.done.title': 'Your profile is ready!', 'specialist_setup.done.subtitle': 'Congratulations! Your profile has been set up', 'specialist_setup.done.desc': 'You can now receive orders from clients. Browse tasks that match your skills.', // Support 'support.title': 'Support', 'support.type.label': 'Request type', 'support.type.bug': 'Bug report', 'support.type.suggestion': 'Suggestion', 'support.type.other': 'Other', 'support.subject': 'Subject', 'support.subject.placeholder': 'Brief description...', 'support.body': 'Message', 'support.body.placeholder': 'Describe the issue or suggestion in detail...', 'support.submit': 'Submit', 'support.cancel': 'Cancel', 'support.error': 'Failed to send. Please try again.', 'support.sent.title': 'Request received!', 'support.sent.body': 'We will reply to your email as soon as possible.', 'support.sent.close': 'Close', 'admin.tab.support': 'Support', 'admin.tab.backup': 'Backup', 'admin.tab.translations': 'Translations', 'admin.tab.dbcheck': 'DB Check', 'admin.tab.balances': 'Balances', 'admin.tab.push': 'Push', 'admin.tab.referrals': 'Referrals', 'admin.search': 'Search', 'admin.noData': 'No data', 'admin.cat.order': 'Order', 'admin.cat.skills': 'Skills', 'admin.plans.form.max_tasks': 'Max tasks', 'admin.settings.referral.shared_section': 'Shared referral settings', 'admin.settings.seo.title': 'SEO settings', 'admin.backup.title': 'Backup', 'admin.backup.tables': 'Tables', 'admin.backup.exportAll': 'Export all', 'admin.backup.importAll': 'Import all', 'admin.backup.exportTable': 'Export table', 'admin.backup.importTable': 'Import table', 'admin.backup.exporting': 'Exporting...', 'admin.backup.importing': 'Importing...', 'admin.backup.exportSuccess': 'Export completed', 'admin.backup.importSuccess': 'Import completed', 'admin.backup.autoBackup': 'Auto backup', 'admin.backup.autoBackupDesc': 'Automatic daily backup', 'admin.backup.storedBackups': 'Stored backups', 'admin.backup.noStoredBackups': 'No stored backups', 'admin.backup.restore': 'Restore', 'admin.backup.restoreConfirm': 'Restore from backup?', 'admin.backup.restoreSuccess': 'Restore completed', 'admin.backup.restoring': 'Restoring...', 'admin.backup.date': 'Date', 'admin.backup.size': 'Size', 'admin.backup.today': 'Today', 'admin.backup.yesterday': 'Yesterday', 'admin.balance.col.operation': 'Operation', 'admin.balance.col.amount': 'Amount', 'admin.balance.col.result': 'Balance', 'admin.balance.col.description': 'Description', 'admin.balance.col.date': 'Date', 'admin.balance.empty': 'No records yet', 'admin.balance.filter.all': 'All operations', 'admin.balance.filter.user_id': 'Filter by userId', 'admin.balance.kind.topup': 'Top-up', 'admin.balance.kind.plan_purchase': 'Plan charge', 'admin.balance.kind.admin_topup': 'Admin top-up', 'admin.balance.kind.admin_adjustment': 'Adjustment', 'admin.support.search': 'Search', 'admin.support.all_statuses': 'All statuses', 'admin.support.all_types': 'All types', 'admin.support.none': 'No tickets', 'admin.support.reply': 'Reply', 'admin.support.reply_placeholder': 'Type your reply...', 'admin.support.send_reply': 'Send reply', 'admin.support.cancel': 'Cancel', 'admin.support.close': 'Close', 'admin.support.status.open': 'Open', 'admin.support.status.in_progress': 'In progress', 'admin.support.status.resolved': 'Resolved', 'admin.support.status.closed': 'Closed', 'admin.support.your_reply': 'Your reply', 'admin.user_edit.visibility_requirements.title': 'Profile is not yet visible in Offers', 'admin.user_edit.visibility_requirements.hint': 'Visibility requirements:', 'admin.user_edit.visibility_requirements.bio': 'Fill in bio', 'admin.user_edit.visibility_requirements.published_card': 'Publish at least one card', 'admin.user_edit.visibility_requirements.categories': 'Add a category to a published card', 'admin.user_edit.visibility_requirements.locations': 'Add a location to a published card', 'auto_response.desc': 'Automatically respond to matching tasks', 'auto_response.budget_range': 'Task budget', 'auto_response.message_placeholder': 'Hello! I can help with this task...', 'profile.background.title': 'Profile header background', 'profile.background.hint': 'Shown in the public profile header on web and mobile app.', 'profile.photo.uploading': 'Uploading...', 'profile.balance.history': 'Operation history', 'profile.balance.history.last': 'Latest operations', 'profile.balance.history.empty': 'No operations yet', 'profile.balance.history.balance_after': 'Balance after', 'profile.balance.history.kind.topup': 'Balance top-up', 'profile.balance.history.kind.plan_purchase': 'Plan charge', 'profile.balance.history.kind.admin_topup': 'Admin top-up', 'profile.balance.history.kind.admin_adjustment': 'Admin adjustment', 'profile.plan_history.title': 'Plan history', 'profile.plan_history.empty': 'Plan change history is empty', 'profile.plan_history.expires': 'Until', 'profile.plan_history.days': 'days', 'profile.plan_history.event.activated': 'Activated', 'profile.plan_history.event.renewed': 'Renewed', 'profile.plan_history.event.downgraded': 'Downgraded', 'profile.plan_history.event.referral_reward': 'Referral reward', 'profile.plan_history.event.admin_change': 'Changed by admin', 'profile.plan_history.event.expired': 'Expired', 'profile.show_contact_desc': 'Lets clients contact you directly', 'profile.site.visible.price_list': 'Price list', 'site.pricelist': 'Price list', 'status.plan_required': 'Status is unavailable on your current plan', 'status.admin_not_applicable': 'User status is not applicable to admin accounts' }, ru: { 'footer.slogan': 'Ваша задача — наша забота! Решаем любые вопросы быстро и удобно.', 'footer.links': 'Ссылки', 'footer.socials': 'Мы в соцсетях', 'nav.home': 'Главная', 'nav.tasks': 'Задачи', 'nav.post': '+ Опубликовать', 'nav.dashboard': 'Мои задачи', 'nav.chat': 'Сообщения', 'nav.notifications': 'Уведомления', 'nav.profile': 'Профиль', 'nav.admin': 'Админка', 'nav.specialists': 'Предложения', 'nav.new_task': 'Новая задача', 'nav.login': 'Войти', 'nav.register': 'Регистрация', 'nav.logout': 'Выйти', 'hero.title': 'Каждый человек может чем-то помочь', 'hero.subtitle': 'Найди помощь, предложи свои навыки или зарабатывай, помогая другим', 'hero.cta.post': 'Найти помощь', 'hero.cta.browse': 'Предложить помощь', 'hero.cta.specialists': 'Найти работу', 'hero.search.placeholder': 'Что нужно? напр. электрик, уборка...', 'hero.specialist.title': 'Найдите заказы рядом с вами', 'hero.specialist.subtitle': 'Откройте заказы в своих категориях и отправьте предложение', 'hero.specialist.cta': 'Найти заказы', 'hero.specialist.search.placeholder': 'Поиск заказов... напр. электрика, уборка', 'section.categories.specialist': 'Найдите заказы по категории', 'section.cities.specialist': 'Заказы по городу', 'how.specialist.step1.title': 'Создайте карточку специалиста', 'how.specialist.step1.desc': 'Укажите категории, навыки и районы — система найдёт подходящие заказы автоматически', 'how.specialist.step2.title': 'Найдите подходящие заказы', 'how.specialist.step2.desc': 'Просматривайте заказы в своих категориях и начните работу сразу', 'how.specialist.step3.title': 'Отправьте предложение и зарабатывайте', 'how.specialist.step3.desc': 'Подайте предложение с ценой и сроками, общайтесь с клиентами и выполняйте заказы', 'stats.specialists': 'предложений', 'stats.tasks': 'задач', 'stats.categories': 'категорий', 'stats.free': 'бесплатная регистрация', 'promo.title': 'Получи Pro бесплатно — только до конца года', 'promo.subtitle': 'Зарегистрируйся сейчас и пользуйся тарифом Pro без оплаты. Акция заканчивается 31 декабря.', 'promo.cta': 'Зарегистрироваться', 'promo.days': 'дней', 'promo.hours': 'часов', 'promo.minutes': 'минут', 'promo.seconds': 'сек.', 'section.categories': 'Создай задачу в любой категории', 'section.how': 'Как это работает', 'section.recent': 'Последние задачи', 'section.all': 'Смотреть все →', 'section.more': 'ещё', 'section.cities': 'Города и районы', 'section.community': 'Общественный проект для всех', 'community.subtitle': 'CanHelp — не просто маркетплейс, это сообщество взаимопомощи. Любой, у кого есть знания или навык, может найти клиента. Любой, у кого есть задача, может найти специалиста.', 'community.point1.title': 'Умеете что-то делать?', 'community.point1.desc': 'Ремонт, репетиторство, дизайн, переводы, уход — каждый навык имеет ценность. Создайте профиль и находите клиентов рядом с вами.', 'community.point2.title': 'Нужна помощь?', 'community.point2.desc': 'Опубликуйте задачу за минуту и получайте предложения от проверенных специалистов в вашем городе.', 'community.point3.title': 'Помогите проекту расти', 'community.point3.desc': 'CanHelp развивается благодаря сообществам. Поделитесь ссылкой с друзьями и знакомыми — вместе мы строим что-то полезное для всех.', 'community.share': 'Поделиться с друзьями', 'community.share.copied': 'Ссылка скопирована!', // Referral section on home page 'section.referral': 'Реферальная программа', 'referral.home.subtitle': 'Поделитесь ссылкой — каждый новый пользователь, зарегистрировавшийся по ней, принесёт вам награду.', 'referral.home.step1.title': 'Зарегистрируйтесь и получите ссылку', 'referral.home.step1.desc': 'Создайте аккаунт и найдите свою уникальную реферальную ссылку в профиле.', 'referral.home.step2.title': 'Поделитесь с друзьями', 'referral.home.step2.desc': 'Отправьте ссылку друзьям, знакомым или опубликуйте в социальных сетях.', 'referral.home.step3.title': 'Получайте награды', 'referral.home.step3.desc': 'Как только друг подтвердит email, вы автоматически получите свою награду.', 'referral.home.cta': 'Получить ссылку', 'referral.home.badge': 'Реферальная программа', // FAQ section 'section.faq': 'Частые вопросы', 'faq.q1': 'Как работает CanHelp?', 'faq.a1': 'Опубликуйте задачу, получите предложения от специалистов, выберите лучшего и начните сотрудничество. Это быстро, просто и бесплатно для клиентов.', 'faq.q2': 'Сколько стоит использование платформы?', 'faq.a2': 'Регистрация и публикация задач полностью бесплатны для клиентов. Специалисты имеют доступ к бесплатному плану, а также к премиум-опциям.', 'faq.q3': 'Как стать специалистом?', 'faq.a3': 'Зарегистрируйтесь, перейдите в «Стать специалистом», заполните профиль навыками и категориями и начните получать задачи.', 'faq.q4': 'Как выбрать подходящего специалиста?', 'faq.a4': 'Оцените отзывы, опыт, навыки и портфолио каждого специалиста. Общайтесь через чат платформы и уточняйте детали до принятия решения.', 'faq.q5': 'Что если я не доволен результатом?', 'faq.a5': 'Вы можете оставить отзыв о специалисте и поставить оценку от 1 до 5 звёзд. Отзывы помогают другим пользователям выбирать проверенных профессионалов.', 'faq.q6': 'Можно ли связаться со специалистом до принятия предложения?', 'faq.a6': 'Да. Как только вы получили предложение, можно открыть чат со специалистом, задать вопросы и уточнить все детали до принятия решения.', 'faq.q7': 'Сколько времени ждать предложений?', 'faq.a7': 'Как правило, в течение нескольких часов. Специалисты получают уведомление о новых задачах и могут быстро ответить.', 'faq.q8': 'Можно ли разместить задачу в любом городе Греции?', 'faq.a8': 'Да! CanHelp охватывает всю Грецию — Афины, Фессалоники, Патры и другие города.', 'faq.q9': 'Какие виды задач есть на CanHelp?', 'faq.a9': 'Ремонт, уборка, электрики, репетиторство, дизайн, IT, переезды, красота и многое другое. Категории постоянно расширяются.', 'faq.q10': 'Есть ли мобильное приложение?', 'faq.a10': 'Да! CanHelp доступно для Android и iOS. Скачайте приложение и управляйте всем со своего телефона.', 'how.step1.title': 'Опубликуй задачу', 'how.step1.desc': 'Опиши что нужно и установи бюджет', 'how.step2.title': 'Получи предложения', 'how.step2.desc': 'Специалисты пришлют предложения с ценой и сроками', 'how.step3.title': 'Выбери и начни', 'how.step3.desc': 'Выбери лучшего профессионала и начни сотрудничество', 'tasks.title': 'задач', 'tasks.filters': 'Фильтры', 'tasks.search': 'Поиск', 'tasks.search.placeholder': 'Название или ключевое слово...', 'tasks.search.btn': 'Поиск', 'tasks.publish': 'Опубликовать', 'tasks.category.all': 'Все', 'tasks.category.all_in': 'Все в', 'tasks.category.label': 'Категория', 'tasks.location.label': 'Город', 'tasks.location.placeholder': 'напр. Афины', 'tasks.empty': 'Задачи не найдены', 'tasks.empty.cta': 'Опубликуй первую', 'task.status.open': 'Открыта', 'task.status.in_progress': 'В работе', 'task.status.completed': 'Завершена', 'task.status.cancelled': 'Отменена', 'task.status.draft': 'Черновик', 'task.budget': 'Бюджет', 'task.location': 'Местоположение', 'task.deadline': 'Дата начала', 'task.expires_at': 'Активно до', 'task.created_at': 'Создано', 'task.customer': 'Заказчик', 'task.offer.btn': 'Отправить предложение', 'task.invite.banner_title': 'Вас пригласили на это задание', 'task.invite.banner_hint': 'Заказчик лично пригласил вас', 'task.invite.accept': 'Отправить предложение', 'task.invite.decline': 'Отказаться', 'offer.accept': 'Принять', 'offer.decline': 'Отклонить', 'task.complete': 'Завершить задачу', 'task.complete.confirm': 'Отметить задачу как выполненную?', 'task.edit': 'Редактировать', 'task.status_label': 'Статус', 'task.yours': 'Ваша задача', 'task.offer.yours': 'Ваше предложение', 'review.leave': 'Оставить отзыв', 'review.rating': 'Оценка', 'review.comment': 'Комментарий', 'review.comment.placeholder': 'Расскажите о своём опыте...', 'review.submit': 'Отправить отзыв', 'review.submitting': 'Отправка...', 'review.done': 'Отзыв отправлен!', 'profile.reviews': 'Отзывы', 'profile.no_reviews': 'Отзывов пока нет', 'profile.rating': 'Рейтинг', 'profile.skills.label': 'Навыки', 'profile.member_since': 'Участник с', 'task.offers': 'Предложения', 'task.offers.none': 'Предложений пока нет', 'create.title': 'Опубликовать задачу', 'create.field.title': 'Название', 'create.field.description': 'Описание', 'create.field.category': 'Категория', 'create.field.category.select': 'Выберите...', 'create.field.location': 'Местоположение', 'create.field.location.any': 'Где угодно', 'create.field.location.all': 'Весь город', 'create.field.budget': 'Бюджет (€)', 'create.field.deadline': 'Дата начала', 'create.field.expires_at': 'Объявление активно', 'create.field.expires_at.days': '{n} дней', 'create.field.budget_negotiable': 'Цена обсуждается', 'create.field.time_slot': 'Время выполнения', 'create.field.time_slot.any': 'В любое время', 'create.field.time_slot.morning': 'Утром (08:00–13:00)', 'create.field.time_slot.afternoon': 'Днём (13:00–18:00)', 'create.field.time_slot.evening': 'Вечером (18:00–22:00)', 'create.field.time_slot.weekend': 'Выходной', 'create.field.address': 'Адрес (необязательно)', 'create.field.address.district': 'Квартал', 'create.field.address.street': 'Улица', 'create.field.address.house': 'Дом', 'create.field.confidential': 'Конфиденциальная заметка', 'create.field.confidential.placeholder': 'Детали, видные только назначенному специалисту...', 'create.field.confidential.hint': 'Не отображается публично', 'create.field.photos': 'Фотографии', 'create.field.photos.add': 'Добавить фото', 'create.field.photos.uploading': 'Загрузка...', 'task.budget_negotiable': 'Цена обсуждается', 'task.time_slot': 'Время', 'task.confidential': 'Конфид. заметка', 'create.field.title.placeholder': 'напр. Уборка квартиры 80кв', 'create.field.description.placeholder': 'Подробно опишите что нужно...', 'create.field.location.placeholder': 'напр. Афины, Колонаки', 'create.field.budget.placeholder': 'напр. 100', 'create.submit': 'Опубликовать задачу', 'create.submitting': 'Публикация...', 'login.title': 'Добро пожаловать', 'login.subtitle': 'Вход в CanHelp', 'login.email': 'Email', 'login.password': 'Пароль', 'login.submit': 'Войти', 'login.submitting': 'Вход...', 'login.error': 'Неверный email или пароль', 'login.unverified.title': 'Подтвердите ваш email', 'login.unverified.desc': 'Мы отправили ссылку для подтверждения на ваш email. Проверьте входящие (или спам) и перейдите по ссылке.', 'login.unverified.resend': 'Отправить письмо повторно', 'login.unverified.sending': 'Отправка...', 'login.unverified.sent': '✓ Отправлено — проверьте входящие', 'profile.email.verified': 'Email подтверждён', 'profile.email.not_verified': 'Email не подтверждён', 'login.no_account': 'Нет аккаунта?', 'login.register_link': 'Зарегистрироваться', 'login.forgot_password': 'Забыл пароль?', 'login.or_continue_with': 'или продолжите через', 'login.continue_google': 'Войти через Google', 'forgot.title': 'Забыл пароль', 'forgot.subtitle': 'Введите email для получения ссылки восстановления', 'forgot.email': 'Email', 'forgot.submit': 'Отправить ссылку', 'forgot.submitting': 'Отправка...', 'forgot.sent.title': 'Проверьте входящие', 'forgot.sent.desc': 'Если аккаунт с таким email существует, мы отправим ссылку для сброса пароля.', 'forgot.back_to_login': 'Вернуться ко входу', 'forgot.error': 'Не удалось отправить ссылку. Проверьте адрес и попробуйте снова.', 'forgot.error.not_found': 'Аккаунт с таким email не найден.', 'forgot.error.send_failed': 'Ошибка отправки письма. Попробуйте позже.', 'reset.title': 'Новый пароль', 'reset.subtitle': 'Введите новый пароль', 'reset.password': 'Новый пароль', 'reset.confirm': 'Подтвердите пароль', 'reset.submit': 'Изменить пароль', 'reset.submitting': 'Сохранение...', 'reset.success': 'Пароль успешно изменён. Перенаправление ко входу...', 'reset.back_to_login': 'Вернуться ко входу', 'reset.error.mismatch': 'Пароли не совпадают', 'reset.error.invalid': 'Недействительная или устаревшая ссылка. Запросите новую.', 'register.title': 'Регистрация', 'register.subtitle': 'Создать аккаунт в CanHelp', 'register.first_name': 'Имя', 'register.last_name': 'Фамилия', 'register.email': 'Email', 'register.password': 'Пароль (мин. 8 символов)', 'register.role': 'Роль', 'register.role.customer': 'Пользователь', 'register.role.customer.desc': 'Публикую задачи', 'register.role.specialist': 'Специалист', 'register.role.specialist.desc': 'Беру задачи', 'register.submit': 'Создать аккаунт', 'register.submitting': 'Регистрация...', 'register.has_account': 'Уже есть аккаунт?', 'register.login_link': 'Войти', 'register.continue_google': 'Зарегистрироваться через Google', 'register.check_email.title': 'Проверьте почту', 'register.check_email.desc': 'Мы отправили ссылку для подтверждения на ваш email. Проверьте входящие (или спам) и перейдите по ссылке.', 'register.check_email.login': 'Вернуться к входу', 'register.captcha_failed': 'Проверка CAPTCHA не пройдена. Пройдите проверку безопасности и попробуйте снова.', 'dashboard.title': 'Панель управления', 'dashboard.new_task': '+ Новая задача', 'dashboard.onboarding.title': 'Добро пожаловать в CanHelp 👋', 'dashboard.onboarding.subtitle': 'Выберите, с чего хотите начать.', 'dashboard.onboarding.helper.title': 'Предложите свою помощь', 'dashboard.onboarding.helper.desc': 'Заполните анкету — навыки, категории и города. Это займёт пару минут, и вы начнёте получать заказы.', 'dashboard.onboarding.helper.cta': 'Заполнить анкету', 'dashboard.onboarding.requester.title': 'Нужна помощь?', 'dashboard.onboarding.requester.desc': 'Опубликуйте задачу — помощники пришлют вам свои предложения.', 'dashboard.onboarding.requester.cta': 'Опубликовать задачу', 'dashboard.my_tasks': 'Мои задачи', 'dashboard.my_offers': 'Мои предложения', 'dashboard.invitations': 'Приглашения на задания', 'dashboard.offers_count': 'предл.', 'dashboard.declined_count': 'откл.', 'dashboard.completed_tasks': 'Завершённые задачи', 'dashboard.completed_offers': 'Завершённые предложения', 'dashboard.review_pending': 'Оценка ещё не оставлена', 'tasks.new.top_specialists': 'Топ специалисты', 'tasks.new.select_category': 'Выберите категорию, чтобы увидеть специалистов', 'tasks.new.invite': 'Предложить работу', 'tasks.new.invited': 'Выбран ✓', 'reviews.count': 'отзывов', 'filter.location': 'Локация', 'filter.language': 'Языки', 'filter.language.any': 'Любой язык', 'filter.category.all': 'Все категории', 'user.categories': 'Категории', 'user.work_area': 'Район работы', 'user.specialist_cards': 'Карточки услуг', 'card.skills': 'Навыки', 'card.categories': 'Категории', 'card.geography': 'Район работы', 'card.portfolio': 'Галерея работ', 'card.close': 'Закрыть', 'dashboard.tasks.empty': 'Вы не публиковали задачи', 'dashboard.tasks.empty.cta': 'Опубликуйте первую', 'dashboard.tasks.add_new': 'Добавить новую задачу', 'dashboard.offers.empty': 'Вы не отправляли предложений', 'dashboard.offers.empty.cta': 'Найти задачи', 'dashboard.customer.specialists_title': 'Ищете исполнителя?', 'dashboard.customer.specialists_hint': 'Просматривайте профили специалистов, читайте отзывы и приглашайте их на свои задачи', 'dashboard.customer.specialists_cta': 'Найти исполнителя', 'dashboard.customer.how_title': 'Как это работает', 'dashboard.customer.step1': 'Создайте задачу с описанием и бюджетом', 'dashboard.customer.step2': 'Специалисты пришлют предложения с ценой и сроками', 'dashboard.customer.step3': 'Выберите подходящего и начните работу', 'notif.title': 'Уведомления', 'notif.mark_all': 'Отметить все как прочитанные', 'notif.empty': 'Нет уведомлений', 'notif.type.generic': 'Уведомление', 'notif.type.new_offer': 'Новое предложение', 'notif.type.offer_accepted': 'Ваше предложение принято', 'notif.type.offer_declined': 'Ваше предложение отклонено', 'notif.type.task_completed': 'Задание выполнено', 'notif.type.task_cancelled': 'Задание отменено', 'notif.type.new_message': 'Новое сообщение', 'notif.type.new_review': 'Новый отзыв', 'notif.type.task_invite': 'Приглашение на задание', 'notif.type.referral_reward': 'Реферальная награда', 'notif.type.specialist_card_submitted': 'Карточка отправлена на проверку', 'notif.type.specialist_card_approved': 'Карточка одобрена', 'notif.type.specialist_card_rejected': 'Карточка отклонена', 'notif.body.new_offer': 'Новое предложение на «{title}»', 'notif.body.offer_accepted': 'Ваше предложение на «{title}» принято', 'notif.body.offer_declined': 'Ваше предложение на «{title}» отклонено', 'notif.body.task_invite': 'Вас приглашают на «{title}»', 'notif.body.new_review': 'Вы получили оценку {rating}★', 'notif.body.referral_reward': 'На ваш аккаунт добавлено {days} дней доступа к плану «{plan}»!', 'notif.body.specialist_card_submitted': 'Карточка «{title}» отправлена на проверку', 'notif.body.specialist_card_approved': 'Карточка «{title}» одобрена и опубликована', 'notif.body.specialist_card_rejected': 'Карточка «{title}» не была одобрена. Исправьте её и отправьте снова.', 'offer.status.pending': 'Ожидает', 'offer.status.accepted': 'Принято', 'offer.status.declined': 'Отклонено', 'offer.status.withdrawn': 'Отозвано', 'offer.status.other_accepted': 'Выбран другой исполнитель', 'common.loading': 'Загрузка...', 'common.error': 'Ошибка', 'common.save': 'Сохранить', 'common.saving': 'Сохранение...', 'common.cancel': 'Отмена', 'common.add': 'Добавить', 'common.close': 'Закрыть', 'common.edit': 'Редактировать', 'common.delete': 'Удалить', 'common.from': 'от', 'common.currency': '€', 'common.greece': 'Греция', // Chat 'chat.connected': 'Подключено', 'chat.disconnected': 'Отключено', 'chat.no_rooms': 'Переписок пока нет', 'chat.task_fallback': 'Задача', 'chat.select': 'Выберите переписку', 'chat.no_messages': 'Сообщений пока нет', 'chat.placeholder': 'Напишите сообщение... (Enter для отправки)', 'chat.conversation_fallback': 'Переписка', 'chat.direct_chat': 'Личный чат', 'chat.linked_task': 'Прикреплённый заказ', 'chat.write_btn': 'Написать', 'chat.just_now': 'только что', 'chat.min_ago': 'м', 'chat.write_specialist': 'Написать специалисту', 'chat.write_customer': 'Написать заказчику', 'chat.notif_settings': 'Настройки уведомлений', 'chat.notif_messages': 'Уведомления о новых сообщениях', 'chat.toast_title': 'Новое сообщение', 'chat.toast_open': 'Открыть чат', // Offer form 'offer.price': 'Цена', 'offer.price.placeholder': 'напр. 80', 'offer.customer_budget': 'Бюджет заказчика', 'offer.message': 'Сообщение', 'offer.optional': 'необязательно', 'offer.message.placeholder': 'Представьтесь, расскажите об опыте и почему вы лучший выбор...', 'offer.submitting': 'Отправка...', // Profile 'profile.photo': 'Фото профиля', 'profile.photo.change': 'Изменить фото', 'profile.photo.hint': 'JPEG, PNG, WebP · до 5MB', 'profile.basic_info': 'Основная информация', 'profile.phone': 'Телефон', 'profile.phone.placeholder': '+30 6901234567', 'profile.bio': 'Краткое описание', 'profile.bio.placeholder': 'Расскажите немного о себе...', 'profile.language': 'Язык', 'profile.language.hint': 'Язык интерфейса и email-уведомлений', 'profile.languages': 'Языки общения', 'profile.languages.hint': 'Выберите все языки, на которых вы общаетесь', 'profile.skills': 'Навыки', 'profile.skills.subtitle': 'Добавьте услуги, которые вы предлагаете', 'profile.skills.placeholder': 'напр. Уборка, IT, Репетиторство...', 'profile.role': 'Роль аккаунта', 'profile.role.specialist': '🔧 Помощник', 'profile.role.admin': '👑 Admin', 'profile.role.customer': '👤 Пользователь', 'profile.role.user': '👤 Пользователь', 'profile.role.change': 'Для смены роли обратитесь в службу поддержки.', 'profile.become_specialist': 'Предложить помощь', 'profile.become_specialist.desc': 'Создай профиль помощника, предложи свои навыки и начни получать задачи.', 'become_specialist.hero.title': 'Предложи свои навыки и начни зарабатывать', 'become_specialist.hero.subtitle': 'Создай профиль помощника и получай запросы от людей, которым нужна помощь', 'become_specialist.how.title': 'Как это работает', 'become_specialist.step1.title': 'Создай портфолио специалиста', 'become_specialist.step1.desc': 'Укажи категории, навыки и зону покрытия — система автоматически подберёт подходящие заказы', 'become_specialist.step2.title': 'Ищи заказы', 'become_specialist.step2.desc': 'Просматривай задачи по своим категориям в разделе «Поиск заказов»', 'become_specialist.step3.title': 'Откликайся и зарабатывай', 'become_specialist.step3.desc': 'Отправляй предложения с ценой и сроками, общайся с клиентами и выполняй заказы', 'become_specialist.benefits.title': 'Преимущества профиля специалиста', 'become_specialist.benefit1': 'Поиск заказов по вашим категориям и локации', 'become_specialist.benefit2': 'Публичный профиль с отзывами клиентов', 'become_specialist.benefit3': 'Расписание доступности, видимое клиентам', 'become_specialist.benefit4': 'Добавление в избранное клиентами', 'become_specialist.cta': 'Подробнее', 'become_specialist.free_badge': 'Бесплатная регистрация', 'profile.tab.notifications': 'Уведомления', 'profile.tab.reviews': 'Отзывы', 'profile.tab.referral': 'Рефералы', 'profile.tab.auto_response': 'Авто-ответ', 'profile.tab.site': 'Сайт', 'profile.site.title': 'Персональная страница', 'profile.site.url_label': 'Личный сайт', 'profile.site.copy': 'Копировать', 'profile.site.copied': 'Скопировано', 'profile.site.visible_title': 'Что отображается на вашей странице', 'profile.site.visible.name': 'Имя и фото', 'profile.site.visible.bio': 'Биография', 'profile.site.visible.rating': 'Рейтинг и отзывы', 'profile.site.visible.portfolio': 'Портфолио / Карточки', 'profile.site.visible.contacts': 'Контактные данные', 'profile.site.visible.full_last_name': 'Фамилия полностью', 'profile.site.visible.services': 'Карточки услуг', 'profile.site.visible.reviews': 'Раздел с отзывами', 'profile.site.visible.status': 'Статус «Готов помочь»', 'profile.site.theme': 'Тема оформления', 'profile.site.theme.dark': 'Тёмная', 'profile.site.theme.light': 'Светлая', 'profile.site.slug_taken': 'Этот адрес уже занят', 'profile.site.stats.title': 'Аналитика сайта', 'profile.site.stats.days': 'последние 30 дней', 'profile.site.stats.views': 'Просмотры', 'profile.site.stats.unique': 'Уникальные посетители', 'profile.site.stats.messages': 'Сообщения', 'profile.site.stats.total_views': 'Просмотры', 'profile.site.stats.total_unique': 'Уник. посетители', 'profile.site.stats.total_messages': 'Сообщения', 'profile.site.stats.empty': 'Данных пока нет', 'profile.site.stats.loading': 'Загрузка аналитики...', 'profile.site.stats.no_slug': 'Укажите адрес сайта, чтобы видеть статистику', 'profile.site.edit_bio_hint': 'Биография и фото настраиваются во вкладке «Основное».', 'profile.site.seo.title': 'SEO — мета-данные сайта', 'profile.site.seo.hint': 'Отображается в поисковиках. При сохранении автоматически переводится на все языки.', 'profile.site.seo.site_title': 'Заголовок страницы', 'profile.site.seo.site_title_placeholder': 'Иван Иванов — Электрик в Афинах', 'profile.site.seo.site_desc': 'Мета-описание', 'profile.site.seo.site_desc_placeholder': 'Краткое описание для поисковиков...', 'status.title': 'Статус', 'status.can_help_now_hint': 'Ваша карточка показывается выше в поиске', 'status.need_help_hint': 'Специалисты могут предложить вам помощь', 'profile.referral.title': 'Партнёрская программа', 'profile.referral.desc': 'Поделитесь ссылкой и получайте награду за каждого привлечённого пользователя.', 'profile.referral.link_label': 'Ваша реферальная ссылка', 'profile.referral.copy': 'Копировать', 'profile.referral.copied': 'Скопировано!', 'profile.referral.invited_count': 'успешных приглашений', 'profile.referral.no_code': 'Реферальный код недоступен.', 'notifications.title': 'Настройки уведомлений', 'notifications.email.new_tasks': 'Email о новых заказах', 'notifications.email.new_tasks.desc': 'Получать email, когда в ваших категориях публикуется новый заказ', 'notifications.messages.desc': 'Получать уведомление при новом входящем сообщении', 'notifications.saved': 'Настройки сохранены', 'notifications.plan_required': 'Недоступно в вашем тарифе', 'profile.tab.info': 'Основное', 'profile.tab.finance': 'Финансы', 'profile.tab.skills': 'Навыки', 'profile.tab.categories': 'Категории', 'profile.tab.geography': 'География', 'profile.specialist.categories': 'Категории работ', 'profile.specialist.categories.desc': 'Выберите категории, в которых вы работаете', 'profile.specialist.geography': 'Города покрытия', 'profile.specialist.geography.desc': 'Выберите города / районы, где вы работаете', 'profile.saving': 'Сохранение...', 'profile.upload.error': 'Ошибка загрузки фото', 'profile.saved': 'Сохранено', 'profile.tab.cards': 'Предложения', 'profile.cards.count': 'Предложения', 'profile.cards.add': 'Добавить предложение', 'profile.cards.new_title': 'Название нового предложения', 'profile.cards.placeholder': 'Например: Сантехника', 'profile.cards.create': 'Создать', 'profile.cards.cancel': 'Отмена', 'profile.cards.empty': 'У вас нет предложений', 'profile.cards.empty_hint': 'Создайте первую карточку, чтобы показать услуги клиентам.', 'profile.cards.create_first': 'Создать первое предложение', 'profile.cards.delete_confirm': 'Удалить предложение?', 'profile.background.change': 'Изменить фон', 'profile.background.remove': 'Удалить фон', 'profile.listing_requirements.published_card': 'Опубликуйте хотя бы одну карточку', 'profile.listing_requirements.title': 'Ваш профиль пока не показывается в разделе «Предложения»', 'profile.listing_requirements.hint': 'Чтобы карточка отображалась, выполните условия:', 'profile.listing_requirements.bio': 'Добавьте краткую информацию о себе в «Основное»', 'profile.listing_requirements.categories': 'Укажите хотя бы одну категорию в активной карточке', 'profile.listing_requirements.locations': 'Укажите хотя бы одну локацию в активной карточке', 'profile.listing_requirements.card_inactive': 'Сделайте карточку активной', 'profile.listing_requirements.review_pending': 'Карточка на рассмотрении', 'profile.card.visibility_issue': 'Карточка не отображается в разделе «Предложения»', 'profile.card.tab.main': 'Основное', 'profile.card.tab.skills': 'Навыки', 'profile.card.tab.categories': 'Категории', 'profile.card.tab.geography': 'География', 'profile.card.tab.portfolio': 'Галерея', 'profile.card.tab.pricelist': 'Прайс-лист', 'profile.card.pricelist.empty': 'Группы прайс-листа ещё не добавлены.', 'profile.card.pricelist.add_group': 'Добавить группу', 'profile.card.pricelist.group_title': 'Название группы', 'profile.card.pricelist.add_item': 'Добавить позицию', 'profile.card.pricelist.item_name': 'Услуга / работа', 'profile.card.pricelist.item_desc': 'Описание (необязательно)', 'profile.card.pricelist.item_price': 'Цена', 'profile.card.pricelist.item_unit': 'Единица (например /час)', 'profile.card.pricelist.save_group': 'Сохранить группу', 'profile.card.pricelist.save_item': 'Сохранить', 'profile.card.pricelist.delete_group': 'Удалить группу', 'profile.card.pricelist.delete_item': 'Удалить', 'profile.card.active': 'Активна', 'profile.card.review_pending': 'На рассмотрении', 'profile.card.review_pending_hint': 'Ваша карточка сейчас проверяется администрацией.', 'profile.card.review_submitted': 'Карточка отправлена на проверку', 'profile.card.review_approved': 'Карточка одобрена', 'profile.card.review_approved_hint': 'Ваша карточка теперь отображается в предложениях.', 'profile.card.review_rejected': 'Карточка отклонена', 'profile.card.review_rejected_hint': 'Карточка не была одобрена. Исправьте её и отправьте снова.', 'profile.card.submit_review': 'Отправить на рассмотрение', 'profile.card.withdraw_review': 'Отозвать заявку', 'profile.card.unpublish': 'Снять с публикации', 'profile.card.save': 'Сохранить', 'profile.card.saved': 'Сохранено', 'profile.card.delete': 'Удалить', 'profile.card.skill.add': 'Добавить навык', 'profile.card.photo.add': 'Добавить фото', 'profile.card.photo.uploading': 'Загрузка...', 'profile.card.photo.empty': 'Нет фотографий', 'profile.card.item.title': 'Заголовок', 'profile.card.item.desc': 'Описание', 'profile.card.item.save': 'Сохранить', 'profile.card.item.cancel': 'Отмена', 'profile.card.item.edit': 'Описание работы', 'profile.card.description': 'Описание карточки', 'profile.card.desc_auto_translate': 'При сохранении будет автоматически переведено на другие языки', 'profile.card.desc_translated': 'Есть переводы:', 'profile.upgrade.cards_limit': 'Лимит портфолио исчерпан', 'profile.upgrade.plan': 'Текущий тариф:', 'profile.upgrade.contact': 'Обратитесь к администратору для смены тарифа', 'profile.upgrade.ok': 'Понятно', 'profile.plan.title': 'Тарифный план', 'profile.balance': 'Баланс', 'profile.balance.topup': 'Пополнить баланс', 'profile.balance.topup.title': 'Пополнить баланс', 'profile.balance.topup.amount': 'Сумма (в EUR)', 'profile.balance.topup.hint': 'Выберите сумму или введите вручную', 'profile.balance.topup.submit': 'Перейти к оплате', 'profile.balance.topup.loading': 'Перенаправление...', 'profile.balance.topup.error': 'Ошибка инициализации платежа. Попробуйте снова.', 'payment.success.title': 'Оплата прошла успешно!', 'payment.success.desc': 'Ваш баланс обновлён.', 'payment.cancelled.title': 'Оплата отменена', 'payment.cancelled.desc': 'Оплата была отменена. Средства не списаны.', 'payment.pending.title': 'Обрабатывается...', 'payment.pending.desc': 'Ваш платёж в обработке.', 'payment.back_to_profile': 'Вернуться в профиль', 'profile.plan.basic': 'Базовый (бесплатный)', 'profile.plan.contact_upgrade': 'Обратитесь к администратору для подключения тарифа', 'profile.plan.cards_up_to': 'Портфолио: до', 'profile.plan.cards_unlimited': 'Портфолио: безлимитно', 'profile.plan.tasks_up_to': 'Задач: до', 'profile.plan.offers_up_to': 'Откликов: до', 'profile.plan.valid_until': 'Действителен до', 'profile.plan.no_expiry': 'Бессрочно', // Create task 'create.error': 'Ошибка при публикации', // Tasks list extras 'tasks.category.general': 'Общее', 'tasks.budget.range': 'Диапазон:', 'tasks.budget.from': 'от', 'tasks.budget.to': 'до', 'tasks.filter.reset': 'Сбросить фильтры', 'tasks.load_more': 'Загрузить ещё', 'tasks.showing': 'Результатов:', 'tasks.field.budget': 'Бюджет, €', // Admin 'admin.title': 'Панель администратора', 'admin.tab.stats': 'Статистика', 'admin.tab.users': 'Пользователи', 'admin.tab.tasks': 'Задачи', 'admin.tab.reports': 'Жалобы', 'admin.tab.moderation': 'Модерация', 'admin.stats.users': 'Пользователи', 'admin.stats.tasks': 'Задачи', 'admin.stats.offers': 'Предложения', 'admin.stats.reviews': 'Отзывы', 'admin.tasks.by_status': 'Задачи по статусу', 'admin.col.user': 'Пользователь', 'admin.col.email': 'Email', 'admin.col.role': 'Роль', 'admin.col.registered': 'Регистрация', 'admin.col.status': 'Статус', 'admin.col.title': 'Название', 'admin.col.budget': 'Бюджет', 'admin.col.created': 'Создано', 'admin.users.active': 'Активен', 'admin.users.inactive': 'Неактивен', 'admin.users.deactivate': 'Деактивировать', 'admin.users.activate': 'Активировать', 'admin.tasks.cancel': 'Отменить', 'admin.reports.none': 'Жалоб нет', 'admin.moderation.none': 'Нет предложений для проверки', 'admin.moderation.pending': 'В ожидании', 'admin.moderation.active': 'Активно', 'admin.moderation.approve': 'Одобрить', 'admin.moderation.block': 'Заблокировать', 'admin.moderation.pending_title': 'Предложения на одобрение', 'admin.moderation.active_title': 'Активные предложения', 'admin.moderation.pending_count': 'В ожидании', 'admin.moderation.active_count': 'Активные', 'admin.moderation.pending_hint': 'Новые предложения, ожидающие проверки', 'admin.moderation.active_hint': 'Активные предложения, которые можно заблокировать', 'admin.moderation.pending_empty': 'Новых предложений для одобрения нет', 'admin.moderation.active_empty': 'Активных предложений не найдено', 'admin.reports.reviewed': 'Рассмотрено', 'admin.reports.dismiss': 'Отклонить', 'admin.pagination.total': 'Всего', 'admin.users.role.change': 'Изменить роль', 'admin.users.search.placeholder': 'Поиск по имени или email...', 'admin.tasks.delete': 'Удалить', 'admin.tasks.delete.confirm': 'Удалить эту задачу навсегда?', 'admin.tasks.search.placeholder': 'Поиск по названию...', 'admin.col.customer': 'Заказчик', 'admin.col.reporter': 'Жалобщик', 'admin.col.target': 'Цель', 'admin.filter.all_roles': 'Все роли', 'admin.filter.all_statuses': 'Все статусы', 'admin.reports.target.task': 'Задача', 'admin.reports.target.user': 'Пользователь', 'admin.tab.categories': 'Категории', 'admin.tab.locations': 'Города и районы', 'admin.tab.logs': 'Логи', 'admin.tab.plans': 'Тарифы', 'admin.tab.settings': 'Настройки', 'admin.logs.subtab.ai': 'AI логи', 'admin.logs.subtab.activity': 'Активность', 'admin.logs.subtab.mail': 'Mail', 'admin.logs.subtab.notifications': 'Уведомления', 'admin.notif_logs.type': 'Тип', 'admin.notif_logs.title': 'Заголовок', 'admin.notif_logs.read': 'Прочитано', 'admin.notif_logs.empty': 'Логи уведомлений пусты', 'admin.stats.notif_chart_title': 'Уведомления по дням', 'admin.stats.notif_label': 'Уведомления', 'admin.stats.mail_chart_title': 'Email по дням', 'admin.stats.mail_label': 'Emails', 'admin.filter.all': 'Все', 'admin.stats.specialists': 'Помощники', 'admin.col.plan': 'Тариф', 'admin.back_home': 'На главную', 'admin.plans.title': 'Тарифные пакеты', 'admin.plans.add': '+ Добавить тариф', 'admin.plans.empty': 'Тарифы не созданы', 'admin.plans.form.new': 'Новый тариф', 'admin.plans.form.edit': 'Редактировать тариф', 'admin.plans.form.name': 'Название', 'admin.plans.form.price': 'Цена (EUR)', 'admin.plans.form.old_price': 'Старая цена (EUR, необязательно)', 'admin.plans.form.max_offers': 'Макс. откликов (пусто = без лимита)', 'admin.plans.form.max_cards': 'Макс. предложений (пусто = без лимита)', 'admin.plans.form.duration_days': 'Срок (дней, пусто = без истечения)', 'admin.plans.form.description': 'Описание', 'admin.plans.form.features': 'Возможности (по одной на строку)', 'admin.plans.form.notify': 'Уведомления о новых заказах', 'admin.plans.form.default': 'По умолчанию', 'admin.plans.form.active': 'Активен', 'admin.plans.form.order': 'Порядок', 'admin.plans.form.role': 'Роль', 'admin.plans.form.tier': 'Уровень', 'admin.plans.form.role.customer': 'Заказчик', 'admin.plans.form.role.specialist': 'Помощник', 'admin.plans.form.tier.free': 'Бесплатный', 'admin.plans.form.tier.pro': 'Pro', 'admin.plans.form.tier.ultimate': 'Ultimate', 'admin.plans.form.section.limits': 'Лимиты (пусто = без ограничений)', 'admin.plans.form.max_messages_day': 'Макс. сообщений/день', 'admin.plans.form.max_orders_day': 'Макс. заказов/день', 'admin.plans.form.max_skills': 'Макс. навыков', 'admin.plans.form.max_profiles': 'Макс. профилей', 'admin.plans.form.max_portfolio': 'Макс. элементов портфолио', 'admin.plans.form.section.boost': 'Множители & Буст', 'admin.plans.form.search_boost': 'Буст в поиске', 'admin.plans.form.offers_multiplier': 'Множитель откликов', 'admin.plans.form.section.contact': 'Права контактов', 'admin.plans.form.can_contact_free': 'Контакт с бесплатными пользователями', 'admin.plans.form.can_contact_pro': 'Контакт с Pro пользователями', 'admin.plans.form.can_contact_all': 'Контакт со всеми', 'admin.plans.form.can_show_contact': 'Показывать контакты', 'admin.plans.form.can_view_phone': 'Просмотр телефона', 'admin.plans.form.section.features': 'Возможности', 'admin.plans.form.upload_video': 'Загрузка видео', 'admin.plans.form.favorites': 'Избранное', 'admin.plans.form.google_calendar': 'Google Calendar', 'admin.plans.form.verified_badge': 'Знак верификации', 'admin.plans.form.highlighted_reviews': 'Выделенные отзывы', 'admin.plans.form.personal_site': 'Личный сайт', 'admin.plans.form.can_help_now': 'Статус «Могу помочь»', 'admin.plans.form.need_help': 'Статус «Нужна помощь»', 'admin.plans.form.auto_response': 'Автоответ', 'admin.plans.form.auto_match': 'Автоподбор', 'admin.plans.form.price_list': 'Прайс-лист', 'admin.plans.form.instant_dispatch_free': 'Мгновенная рассылка (бесплатно)', 'admin.plans.form.instant_dispatch_pro': 'Мгновенная рассылка (Pro)', 'admin.plans.badge.default': 'По умолчанию', 'admin.plans.badge.inactive': 'Неактивен', 'admin.plans.make_default': 'Сделать по умолчанию', 'admin.plans.tasks': 'Задач', 'admin.plans.offers': 'Откликов', 'admin.plans.cards': 'Предложения', 'admin.plans.notify_tasks': 'Уведомления о заказах', 'admin.plans.delete.confirm': 'Удалить тариф', 'admin.activity.title': 'Журнал активности', 'admin.activity.event': 'Событие', 'admin.activity.all_events': 'Все события', 'admin.activity.from': 'От', 'admin.activity.to': 'До', 'admin.activity.reset': 'Сбросить', 'admin.activity.total': 'Всего', 'admin.activity.empty': 'Нет записей', 'admin.mail.event': 'Email событие', 'admin.mail.all_events': 'Все email события', 'admin.mail.from': 'От', 'admin.mail.to': 'До', 'admin.mail.reset': 'Сбросить', 'admin.mail.total': 'Всего', 'admin.mail.empty': 'Нет email логов', 'admin.mail.recipient': 'Получатель', 'admin.mail.provider': 'Провайдер', 'admin.mail.details': 'Детали', 'admin.mail.status': 'Статус', 'admin.mail.success': 'Успешно', 'admin.mail.failed': 'Ошибка', 'admin.event.email_sent': 'Email отправлен', 'admin.event.email_failed': 'Email не отправлен', 'admin.event.email_dev': 'Email DEV fallback', 'admin.event.admin_email_test_sent': 'Тестовый email отправлен', 'admin.event.admin_email_test_failed': 'Тестовый email не отправлен', 'admin.logs.empty': 'Нет записей', 'admin.logs.date': 'Дата', 'admin.logs.provider': 'Провайдер', 'admin.logs.model': 'Модель', 'admin.logs.action': 'Действие', 'admin.logs.langs': 'Языки', 'admin.logs.in': 'Вход', 'admin.logs.out': 'Выход', 'admin.logs.total': 'Итого', 'admin.logs.ms': 'мс', 'admin.logs.status': 'Статус', 'admin.stats.activity_30d': 'Активность за 30 дней', 'admin.stats.tasks_label': 'Заявки', 'admin.stats.users_label': 'Пользователи', 'admin.stats.specialists_label': 'Помощники', 'admin.stats.tokens_title': 'Расход токенов (по месяцам)', 'admin.stats.tokens_out': 'Исходящие', 'admin.stats.tokens_in': 'Входящие', 'admin.stats.tokens_out_label': 'Исходящие токены', 'admin.stats.tokens_in_label': 'Входящие токены', 'admin.stats.cost_label': 'Стоимость (USD)', 'admin.stats.tasks_by_status': 'Заявки по статусам', 'admin.task_status.open': 'Открытые', 'admin.task_status.in_progress': 'В работе', 'admin.task_status.completed': 'Завершённые', 'admin.task_status.cancelled': 'Отменённые', 'admin.task_status.draft': 'Черновики', 'admin.settings.tab.general': 'Общие', 'admin.settings.tab.smtp': 'E-Mail', 'admin.settings.tab.notifications': 'Уведомления', 'admin.settings.tab.payment': 'Оплата', 'admin.settings.tab.referral': 'Реферальная', 'admin.settings.tab.seo': 'SEO', 'admin.settings.tab.socials': 'Соцсети', 'admin.settings.tab.telegram': 'Telegram Bot', 'admin.settings.telegram.title': 'Настройки Telegram Bot', 'admin.settings.telegram.help': 'Создайте бота через @BotFather. ID чата узнайте через @userinfobot.', 'admin.settings.telegram.bot_token': 'Bot Token', 'admin.settings.telegram.admin_chat_id': 'Chat ID администратора', 'admin.settings.telegram.admin_chat_hint': 'Сначала отправьте /start своему боту, затем узнайте chat ID через @userinfobot', 'admin.settings.telegram.channel_id': 'неиспользуется', 'admin.settings.telegram.channels_title': 'Каналы по языкам', 'admin.settings.telegram.channel_hint': 'Username публичного канала (@канал) или числовой ID', 'admin.settings.telegram.notify_registrations': 'Уведомлять о новых регистрациях', 'admin.settings.telegram.notify_registrations_hint': 'Отправлять сообщение при регистрации нового пользователя', 'admin.settings.telegram.post_new_tasks': 'Публиковать новые задания в канал', 'admin.settings.telegram.post_new_tasks_hint': 'Автоматически публиковать новые задания в Telegram-канал', 'admin.settings.telegram.test': 'Тест', 'admin.settings.telegram.verify': 'Проверить токен', 'admin.settings.telegram.test_ok': 'Соединение работает', 'admin.settings.telegram.test_fail': 'Ошибка соединения', 'admin.settings.socials.title': 'Ссылки на социальные сети', 'admin.settings.socials.hint': 'Заполненные ссылки отображаются в подвале сайта', 'admin.settings.seo.maintenance_label': 'Режим обслуживания', 'admin.settings.seo.maintenance_hint': 'Показывать страницу обслуживания всем посетителям', 'admin.settings.seo.indexing_label': 'Индексация поисковыми системами', 'admin.settings.seo.indexing_hint': 'Разрешить поисковым системам индексировать сайт', 'admin.settings.seo.head_scripts_label': 'Скрипты в (JS)', 'admin.settings.seo.head_scripts_hint': 'Выполняется на каждой странице (Google Tag Manager, аналитика и т.д.)', 'admin.settings.seo.site_title_label': 'Заголовок сайта', 'admin.settings.seo.site_description_label': 'Описание сайта (meta description)', 'admin.settings.referral.title': 'Партнёрская программа', 'admin.settings.referral.hint': 'Награждайте пользователей, приводящих новых участников.', 'admin.settings.referral.enabled_label': 'Включено', 'admin.settings.referral.enabled_hint': 'Включить / отключить выдачу наград', 'admin.settings.referral.customer_section': 'Для клиентов', 'admin.settings.referral.specialist_section': 'Для помощников', 'admin.settings.referral.plan_label': 'Тарифный план за реферала', 'admin.settings.referral.no_plan': '— без плана —', 'admin.settings.referral.plan_hint': 'Этот план будет назначен пригласившему. Если его текущий план выше — добавятся только дни.', 'admin.settings.referral.days_label': 'Дней награды', 'admin.settings.referral.days_hint': 'Количество дней, добавляемых к сроку действия плана.', 'admin.settings.general.title': 'Общие настройки', 'admin.settings.general.site_name': 'Название сайта', 'admin.settings.general.site_url': 'URL сайта', 'admin.settings.general.contact_email': 'Email для связи', 'admin.settings.general.support_phone': 'Телефон поддержки', 'admin.settings.smtp.title': 'Настройки SMTP сервера', 'admin.settings.smtp.hint': 'Используется для отправки email-уведомлений.', 'admin.settings.smtp.host': 'SMTP Хост', 'admin.settings.smtp.port': 'Порт', 'admin.settings.smtp.encryption': 'Шифрование', 'admin.settings.smtp.enc.none': 'Нет', 'admin.settings.smtp.enc.tls': 'STARTTLS (порт 587)', 'admin.settings.smtp.enc.ssl': 'SSL/TLS (порт 465)', 'admin.settings.smtp.username': 'Имя пользователя', 'admin.settings.smtp.password': 'Пароль / App Password', 'admin.settings.smtp.from_name': 'Имя отправителя', 'admin.settings.smtp.from_email': 'Email отправителя', 'admin.settings.smtp.test': 'Отправить тестовый email', 'admin.settings.smtp.sending': 'Отправка...', 'admin.settings.payment.hint': 'Данные для подключения к ePay Piraeus Bank.', 'admin.settings.env.test': 'Тест (sandbox)', 'admin.settings.env.prod': 'Боевой режим', 'admin.settings.env.label': 'Среда', 'admin.settings.merchant_id': 'Merchant ID', 'admin.settings.api_user': 'API User', 'admin.settings.api_password': 'API Password', 'admin.settings.confirm_url': 'Confirmation URL (webhook)', 'admin.settings.cancel_url': 'Cancel URL', 'admin.settings.active': 'Активен', 'admin.settings.saving': 'Сохранение...', 'admin.settings.saved': 'Сохранено', 'admin.notif.vars_hint': 'Доступные переменные в шаблонах', 'admin.notif.tmpl.not_set': 'Шаблон не настроен', 'admin.notif.tmpl.subject_label': 'Тема письма', 'admin.notif.tmpl.body_label': 'Текст письма (HTML)', 'admin.notif.tmpl.save': 'Сохранить', 'admin.notif.tmpl.close': 'Закрыть', 'admin.notif.tmpl.translate': 'Авто-перевод на другие языки', 'admin.notif.tmpl.translating': 'Перевод...', 'admin.notif.tmpl.saving': 'Сохранение...', 'admin.notif.email_verification': 'Подтверждение email адреса', 'admin.notif.registration_success': 'Успешная регистрация', 'admin.notif.password_reset': 'Восстановление пароля', 'admin.notif.new_offer': 'Новое предложение', 'admin.notif.new_task': 'Новая задача', 'admin.notif.offer_accepted': 'Предложение принято', 'admin.notif.new_message': 'Новое сообщение', 'admin.notif.offer_declined': 'Отклонение предложения', 'admin.notif.offer_other_accepted': 'Выбран другой исполнитель', 'admin.notif.task_updated': 'Изменение задания', 'admin.notif.deadline_reminder': 'Напоминание о дедлайне', 'admin.notif.task_archived': 'Автоснятие задания', 'admin.notif.referral_reward': 'Реферальная награда', // Шаблоны email для тарифов 'admin.email_template.plan_activated': 'Тарифы — активация тарифа', 'admin.email_template.plan_upgraded': 'Тарифы — повышение тарифа', 'admin.email_template.plan_downgrade_scheduled': 'Тарифы — запланированное понижение', 'admin.email_template.plan_downgrade_applied': 'Тарифы — применение понижения', 'admin.email_template.plan_renewal_reminder': 'Тарифы — напоминание о продлении', 'admin.email_template.plan_insufficient_funds': 'Тарифы — нехватка средств', // Модальное окно подтверждения тарифа 'pricing.confirm.title': 'Подтвердите выбор тарифа', 'pricing.confirm.plan': 'Тариф', 'pricing.confirm.prorated': 'Зачёт остатка', 'pricing.confirm.effective_price': 'К оплате', 'pricing.confirm.your_balance': 'Ваш баланс', 'pricing.confirm.downgrade_info': 'Переход на новый тариф произойдёт автоматически после окончания текущего периода.', 'pricing.confirm.insufficient': 'Недостаточно средств на балансе.', 'pricing.confirm.top_up': 'Пополнить', 'pricing.confirm.schedule_downgrade': 'Запланировать переход', 'pricing.confirm.pay': 'Оплатить', 'admin.user_edit.title': 'Редактирование пользователя', 'admin.user_edit.email': 'Email', 'admin.user_edit.email_verified': 'Email подтверждён', 'admin.user_edit.email_not_verified': 'Email не подтверждён', 'admin.user_edit.verify_email_btn': 'Подтвердить вручную', 'admin.user_edit.verify_email_done': 'Email подтверждён!', 'admin.user_edit.id': 'ID', 'admin.user_edit.registered': 'Регистрация', 'admin.user_edit.last_seen': 'Последний визит', 'admin.user_edit.lang': 'Язык', 'admin.user_edit.first_name': 'Имя', 'admin.user_edit.last_name': 'Фамилия', 'admin.user_edit.phone': 'Телефон', 'admin.user_edit.bio': 'О себе', 'admin.user_edit.role': 'Роль', 'admin.user_edit.plan': 'Тариф', 'admin.user_edit.no_plan': '— Без тарифа —', 'admin.user_edit.active': 'Активный аккаунт', 'admin.user_edit.published': 'Опубликована', 'admin.user_edit.balance': 'Баланс (EUR)', 'admin.user_edit.skills': 'Навыки', 'admin.user_edit.tab.profile': 'Профиль', 'admin.user_edit.tab.account': 'Аккаунт', 'admin.user_edit.tab.balance': 'Баланс', 'admin.user_edit.tab.settings': 'Настройки', 'admin.user_edit.tab.specialist': 'Предложения', 'admin.user_edit.tab.site': 'Сайт', 'admin.user_edit.plan_expires': 'Тариф истекает', 'admin.user_edit.interface_lang': 'Язык интерфейса', 'admin.user_edit.comm_languages': 'Языки общения', 'admin.user_edit.personal_site_slug': 'Персональная страница', 'admin.user_edit.show_contact_info': 'Показывать контакты', 'admin.user_edit.show_contact_info.hint': 'Видно заказчикам', 'admin.user_edit.notify_new_tasks': 'Уведомлять о новых задачах', 'admin.user_edit.notify_new_tasks.hint': 'Push и email уведомления', 'admin.user_edit.notif_messages': 'Уведомления о сообщениях', 'admin.user_edit.notif_messages.hint': 'Новые сообщения в чате', 'admin.user_edit.site_settings': 'Настройки персональной страницы', 'admin.user_edit.categories': 'Категории услуг', 'admin.user_edit.locations': 'Районы обслуживания', 'admin.user_edit.skill_placeholder': 'Новый навык...', 'admin.user_edit.add_category': '— Выберите категорию —', 'admin.user_edit.add_location': '— Выберите район —', 'admin.user_edit.specialist_cards': 'Предложения специалиста', 'admin.user_edit.no_cards': 'Предложения не найдены', 'admin.user_edit.card_title': 'Заголовок предложения', 'admin.user_edit.card_description': 'Описание', 'admin.balance.topup.btn': 'Пополнить', 'admin.balance.withdraw.btn': 'Списать', 'admin.balance.modal_hint': 'Изменения применяются сразу и фиксируются в истории', 'admin.balance.topup.title': 'Пополнение баланса', 'admin.balance.topup.amount': 'Сумма', 'admin.balance.topup.description': 'Комментарий', 'admin.balance.topup.description.placeholder': 'Например: бонус или ручное пополнение', 'admin.balance.topup.submit': 'Пополнить баланс', 'admin.balance.withdraw.title': 'Снятие баланса', 'admin.balance.withdraw.amount': 'Сумма', 'admin.balance.withdraw.description': 'Комментарий', 'admin.balance.withdraw.description.placeholder': 'Например: возврат или ручное списание', 'admin.balance.withdraw.submit': 'Списать баланс', 'admin.user_edit.role.customer': 'Заказчик', 'admin.user_edit.role.user': 'Пользователь', 'admin.user_edit.role.specialist': 'Помощник', 'admin.user_edit.role.admin': 'Администратор', 'common.refresh': 'Обновить', 'common.back_home': 'На главную', 'admin.loc.hint': 'Управление городами и районами', 'admin.loc.add_city': 'Новый город', 'admin.loc.add_district': 'Добавить район', 'admin.loc.new': 'Новая локация', 'admin.loc.edit': 'Редактировать локацию', 'admin.loc.district': 'район', 'admin.loc.empty': 'Нет локаций', 'admin.loc.delete.confirm': 'Удалить локацию? Все районы также будут удалены.', 'admin.cat.add_root': 'Новая категория', 'admin.cat.add_sub': 'Подкатегория', 'admin.cat.edit': 'Редактировать', 'admin.cat.delete': 'Удалить', 'admin.cat.delete.confirm': 'Удалить категорию? Все подкатегории также будут удалены.', 'admin.cat.slug': 'Slug', 'admin.cat.icon': 'Иконка', 'admin.cat.name_el': 'Греческий', 'admin.cat.name_en': 'Английский', 'admin.cat.name_ru': 'Русский', 'admin.cat.name_uk': 'Украинский', 'admin.cat.active': 'Активна', 'admin.cat.parent': 'Родительская категория', 'admin.cat.no_parent': 'Верхний уровень', 'admin.cat.save': 'Сохранить', 'admin.cat.cancel': 'Отмена', 'admin.cat.empty': 'Нет категорий', 'admin.cat.hint': 'Управление категориями с многоуровневой иерархией', 'admin.cat.new': 'Новая категория', 'admin.cat.subcategory': 'подкатегория', 'admin.cat.add_child': 'Добавить подкатегорию', 'admin.cat.inactive': 'Неактивна', 'admin.event.user_login': 'Вход', 'admin.event.user_register': 'Регистрация', 'admin.event.admin_user_deactivate': 'Блокировка юзера', 'admin.event.admin_user_activate': 'Разблокировка юзера', 'admin.event.admin_user_role_changed': 'Смена роли', 'admin.event.admin_task_cancelled': 'Отмена задачи', 'admin.event.admin_task_deleted': 'Удаление задачи', 'admin.event.admin_report_reviewed': 'Жалоба рассмотрена', 'admin.event.admin_report_dismissed': 'Жалоба отклонена', 'admin.event.task_created': 'Создана задача', // User status 'user.online': 'Онлайн', 'user.seen_minutes': 'был здесь {n} мин назад', 'user.seen_hours': 'был здесь {n} ч назад', 'user.seen_yesterday': 'был здесь вчера', 'user.seen_days': 'был здесь {n} дн назад', // Specialists 'specialists.title': 'Предложения', 'specialists.search': 'Поиск специалиста...', 'specialists.search.btn': 'Поиск', 'specialists.empty': 'Специалисты не найдены', 'specialists.no_bio': 'Без описания', 'specialists.view': 'Смотреть профиль', 'specialists.reviews': 'отзывов', 'specialist.favorite': 'Добавить в избранное', 'specialist.unfavorite': 'Убрать из избранного', 'specialist.site_link': 'Личный сайт', 'favorites.specialists.title': 'Избранные специалисты', 'favorites.specialists.empty': 'Вы ещё не добавили специалистов в избранное', 'nav.favorites': 'Избранное', 'nav.schedule': 'Расписание', 'nav.find_tasks': 'Поиск заказов', 'schedule.title': 'Моё расписание', 'schedule.subtitle': 'Отмечайте дни когда вы свободны или заняты — заказчики увидят вашу доступность', 'schedule.available': 'Свободен', 'schedule.busy': 'Занят', 'schedule.unset': 'Не указано', 'schedule.click_hint': '← клик меняет статус по кругу', 'schedule.range_mode': 'Выделить диапазон', 'schedule.range_from': 'С {date} — выберите конечную дату', 'schedule.click_to_set': 'Нажмите чтобы отметить', 'schedule.free': 'свободно', 'schedule.busy_count': 'занято', 'schedule.free_days': 'свободных дней', 'schedule.googleCalendar': 'Google Календарь', 'schedule.connectGoogle': 'Подключить Google Календарь', 'schedule.disconnectGoogle': 'Отключить', 'schedule.connectedAs': 'Подключено как', 'schedule.importFromGoogle': 'Синхр. из Google', 'schedule.gcalConnected': '\u2713 Google Календарь подключён', 'schedule.gcalError': 'Ошибка подключения Google Календарь', 'schedule.gcalImportDone': 'Импортировано {n} дней из Google Календарь', 'schedule.gcalAutoSyncNote': 'Изменения доступности автоматически отправляются в Google Календарь', 'schedule.gcalConnectDesc': 'Подключите Google Календарь для автоматической синхронизации расписания', 'schedule.gcalDisconnectConfirm': 'Отключить Google Календарь?', 'find_tasks.title': 'Поиск заказов', 'find_tasks.for_me': 'Для меня', 'find_tasks.all': 'Все заказы', 'find_tasks.by_category': 'По категориям', 'find_tasks.list': 'Списком', 'find_tasks.already_offered': 'Предложение отправлено', 'find_tasks.offer_now': 'Откликнуться', 'find_tasks.empty_for_me': 'Нет заказов в ваших категориях', 'find_tasks.banner_hint': 'Найдите заказы по категориям вашего портфолио', 'find_tasks.no_cards': 'Создайте портфолио специалиста, чтобы видеть подходящие заказы', 'find_tasks.add_card': 'Создать портфолио', 'find_tasks.search': 'Поиск заказов...', 'find_tasks.tasks_count': 'заданий', 'footer.tagline': 'Платформа задач для Греции', 'footer.rights': 'Все права защищены.', 'nav.privacy': 'Политика конфиденциальности', 'nav.delete_account': 'Удаление аккаунта', 'delete_account.title': 'Запрос на удаление аккаунта', 'delete_account.subtitle': 'После проверки вашего запроса мы навсегда удалим ваш аккаунт и данные в течение 30 дней.', 'delete_account.warning': 'Это действие нельзя отменить. Все ваши данные будут удалены безвозвратно.', 'delete_account.reason_label': 'Причина (необязательно)', 'delete_account.reason_placeholder': 'Расскажите, почему вы хотите удалить аккаунт...', 'delete_account.confirm_label': 'Подтверждаю, что хочу навсегда удалить свой аккаунт', 'delete_account.submit': 'Отправить запрос', 'delete_account.submitting': 'Отправка...', 'delete_account.success_title': 'Ваш запрос получен', 'delete_account.success_body': 'Мы обработаем ваш запрос в течение 30 дней и уведомим вас по email.', 'delete_account.login_required': 'Для отправки запроса на удаление необходимо войти в аккаунт.', 'delete_account.login_btn': 'Войти', // App download section 'app.download_title': 'Скачайте мобильное приложение CanHelp', 'app.download_desc': 'Всё CanHelp — всегда под рукой. Доступно для Android и iOS.', // Nav 'nav.pricing': 'Тарифы', // Pricing page 'pricing.title': 'Тарифы', 'pricing.subtitle': 'Выберите подходящий план', 'pricing.role.customer': 'Заказчик', 'pricing.role.specialist': 'Специалист', 'pricing.free': 'Бесплатно', 'pricing.per_month': 'мес', 'pricing.duration': 'Срок', 'pricing.days': 'дн.', 'pricing.current_plan': 'Ваш план', 'pricing.popular': 'Популярный', 'pricing.choose': 'Выбрать', 'pricing.your_plan': 'Активный план', 'pricing.free_default': 'По умолчанию', 'pricing.compare': 'Сравнение функций', 'pricing.feature': 'Функция', 'pricing.faq_note': 'Оплата списывается с баланса CanHelp. Пополнение доступно в разделе Оплата.', 'pricing.feat.messages': 'Сообщений / день', 'pricing.feat.orders': 'Заказов / день', 'pricing.feat.contact_all': 'Связь со всеми', 'pricing.feat.view_phone': 'Просмотр телефона', 'pricing.feat.show_contact': 'Показывать контакты', 'pricing.feat.favorites': 'Избранное', 'pricing.feat.verified_badge': 'Верифицированный бейдж', 'pricing.feat.google_calendar': 'Google Календарь', 'pricing.feat.personal_site': 'Персональный сайт', 'pricing.feat.auto_response': 'Авто-ответ', 'pricing.feat.auto_match': 'Авто-подбор', 'pricing.feat.highlighted_reviews': 'Выделенные отзывы', 'pricing.feat.portfolio': 'Элементов предложения', 'pricing.feat.cards': 'Количество предложений', 'pricing.feat.notify_tasks': 'Уведомления о новых задачах', 'pricing.feat.video': 'Видео в предложении', // Upgrade prompt 'upgrade.available_in': 'Доступно в', 'upgrade.cta': 'Улучшить', // Dashboard plan block 'dashboard.plan.title': 'Мой план', 'dashboard.plan.expires': 'Истекает через {n} дней', 'dashboard.plan.upgrade': 'Улучшить план', 'dashboard.plan.no_plan': 'Бесплатный план', 'dashboard.plan.messages': 'Сообщений сегодня', 'dashboard.plan.orders': 'Заказов сегодня', 'dashboard.plan.limits': 'Дневные лимиты', 'dashboard.plan.features': 'Функции', 'dashboard.plan.stats': 'Статистика', 'dashboard.stats.cards': 'Портфолио', 'dashboard.stats.maxCards': 'Макс. портфолио', 'dashboard.stats.portfolioItems': 'Элементы портфолио', 'dashboard.stats.maxPortfolioItems': 'Макс. элементы', 'dashboard.stats.activeOffers': 'Активные отклики', 'dashboard.stats.reviewsReceived': 'Отзывы', 'dashboard.stats.activeTasks': 'Активные задачи', 'dashboard.stats.completedTasks': 'Завершённые', 'status.need_help': 'Нужна помощь', 'status.active': 'Активен', 'status.toggle_on': 'Включить', 'status.toggle_off': 'Выключить', // FOMO 'fomo.missed_orders': 'Пропущено {n} заказов', 'fomo.missed_value': 'На сумму €{v}', 'fomo.upgrade_hint': 'Улучшите план — получайте больше заказов', 'fomo.conversion': 'Конверсия задач', 'fomo.active': 'Активные', 'fomo.with_offers': 'С офертами', 'fomo.completed': 'Завершённые', 'fomo.already_offered': '{n} специалистов уже откликнулись', 'fomo.specialist_missed': 'Вы пропустили {n} заказов', 'fomo.top_categories': 'Категории', 'fomo.offers_received': 'предложений получено', 'fomo.avg_offers': 'В среднем {n}/задача', 'fomo.completion_rate': 'завершено', // Task auto-match 'task.auto_match': 'Авто-матч', 'task.auto_match_results': 'Топ специалисты', 'task.no_offer_yet': 'Вы ещё не отправили предложение', 'task.make_offer': 'Отправить предложение', 'auto_response.title': 'Авто-ответ', 'auto_response.enabled': 'Включить авто-ответ', 'auto_response.min_budget': 'Мин. бюджет', 'auto_response.max_budget': 'Макс. бюджет', 'auto_response.default_price': 'Цена по умолчанию', 'auto_response.default_message': 'Сообщение по умолчанию', 'auto_response.max_per_day': 'Макс. авто-офертов в день', 'auto_response.save': 'Сохранить', 'auto_response.saved': 'Сохранено', 'auto_response.categories': 'Категории', 'auto_response.locations': 'Локации', // Personal site 'profile.personal_site': 'Персональный сайт', 'profile.site_slug': 'URL slug', 'profile.site_slug_hint': 'Только латинские буквы, цифры, - и _', 'profile.site_open': 'Открыть сайт', 'profile.site_preview': 'Ваш сайт', 'profile.show_contact': 'Показывать контакты', 'profile.show_contact_hint': 'Заказчики с Pro/Ultimate-планом увидят ваш телефон', // Google Calendar plan gate 'gcal.upgrade_required': 'Google Календарь требует план Pro или Ultimate', // Chat limits 'chat.limit_warning': 'Осталось {n} сообщений сегодня', 'chat.limit_reached': 'Лимит сообщений исчерпан. Улучшите план', 'chat.upgrade': 'Улучшить', // Site page 'site.member_since': 'С нами с', 'site.rating': 'Рейтинг', 'site.completed_tasks': 'Выполнено', 'site.languages': 'Языков', 'site.photos': 'фото', 'site.contact_form': 'Связаться', 'site.contact_sent': 'Сообщение отправлено!', 'site.contact_sent_desc': 'Специалист свяжется с вами в ближайшее время', 'site.contact_name': 'Имя', 'site.contact_name_ph': 'Ваше имя', 'site.contact_email_ph': 'your@email.com', 'site.contact_message': 'Сообщение', 'site.contact_message_ph': 'Опишите вашу задачу...', 'site.contact_send': 'Отправить', 'site.share': 'Поделиться', 'site.speaks_languages': 'Говорит на языках', 'site.message_sent': 'Сообщение отправлено!', 'site.message_sent_desc': 'Специалист получит его в чате', 'site.message_placeholder': 'Напишите сообщение...', 'site.write_to_chat': 'Написать в чат', 'site.auth_required_title': 'Нужна авторизация', 'site.auth_required_desc': 'Чтобы написать в чат, необходимо войти в аккаунт CanHelp.', 'site.auth_login_btn': 'Войти в аккаунт', 'site.auth_contact_form_btn': 'Написать через форму обратной связи', 'specialist.services': 'Услуги', 'portfolio.title': 'Портфолио', 'status.can_help_now': 'Готов помочь', 'common.not_found': 'Страница не найдена', 'common.anonymous': 'Анонимно', 'specialist_setup.page_title': 'Настройка профиля специалиста', 'specialist_setup.step_of': 'Шаг {current} из {total}', 'specialist_setup.next': 'Далее', 'specialist_setup.back': 'Назад', 'specialist_setup.skip': 'Пропустить', 'specialist_setup.finish': 'Завершить', 'specialist_setup.go_to_profile': 'Перейти в профиль', 'specialist_setup.browse_tasks': 'Найти задачи', 'specialist_setup.step1.title': 'Добро пожаловать!', 'specialist_setup.step1.subtitle': 'Давайте настроим ваш профиль', 'specialist_setup.step1.desc': 'Полный профиль помогает находить больше клиентов. Следуйте шагам, чтобы создать идеальный профиль специалиста.', 'specialist_setup.step1.what_next': 'Что мы сделаем:', 'specialist_setup.step1.item1': 'Заполним основную информацию', 'specialist_setup.step1.item2': 'Создадим карточку услуги', 'specialist_setup.step1.item3': 'Добавим навыки и категории', 'specialist_setup.step1.item4': 'Выберем географию обслуживания', 'specialist_setup.step1.item5': 'Загрузим фото портфолио', 'specialist_setup.step2.title': 'Базовый профиль', 'specialist_setup.step2.subtitle': 'Расскажите о себе', 'specialist_setup.step2.bio_label': 'О себе', 'specialist_setup.step2.bio_placeholder': 'Опишите ваш опыт, услуги которые вы предлагаете...', 'specialist_setup.step2.phone_label': 'Телефон', 'specialist_setup.step2.phone_placeholder': '+30 6900000000', 'specialist_setup.step2.photo_label': 'Фото профиля', 'specialist_setup.step2.photo_btn': 'Загрузить фото', 'specialist_setup.step2.photo_uploading': 'Загрузка...', 'specialist_setup.step2.photo_hint': 'Отображается в вашем профиле', 'specialist_setup.step3.title': 'Карточка услуги', 'specialist_setup.step3.subtitle': 'Создайте вашу первую карточку услуги', 'specialist_setup.step3.title_label': 'Название карточки', 'specialist_setup.step3.title_placeholder': 'Напр. Сантехник, Электрик, Уборка...', 'specialist_setup.step3.desc_label': 'Описание', 'specialist_setup.step3.desc_placeholder': 'Подробно опишите что вы предлагаете, опыт, преимущества...', 'specialist_setup.step3.title_required': 'Название обязательно', 'specialist_setup.step4.title': 'Навыки и категории', 'specialist_setup.step4.subtitle': 'Добавьте навыки и выберите категории', 'specialist_setup.step4.skills_label': 'Навыки', 'specialist_setup.step4.skills_placeholder': 'Напр. Монтаж труб...', 'specialist_setup.step4.skills_add': 'Добавить', 'specialist_setup.step4.categories_label': 'Категории', 'specialist_setup.step5.title': 'География обслуживания', 'specialist_setup.step5.subtitle': 'Где вы оказываете услуги?', 'specialist_setup.step5.hint': 'Выберите города или конкретные районы', 'specialist_setup.done.title': 'Ваш профиль готов!', 'specialist_setup.done.subtitle': 'Поздравляем! Профиль настроен', 'specialist_setup.done.desc': 'Теперь вы можете получать заказы от клиентов. Найдите задачи, которые соответствуют вашим навыкам.', // Support 'support.title': 'Поддержка', 'support.type.label': 'Тип обращения', 'support.type.bug': 'Ошибка', 'support.type.suggestion': 'Предложение', 'support.type.other': 'Другое', 'support.subject': 'Тема', 'support.subject.placeholder': 'Кратко опишите проблему...', 'support.body': 'Сообщение', 'support.body.placeholder': 'Подробно опишите проблему или предложение...', 'support.submit': 'Отправить', 'support.cancel': 'Отмена', 'support.error': 'Ошибка отправки. Попробуйте ещё раз.', 'support.sent.title': 'Запрос получен!', 'support.sent.body': 'Мы ответим на ваш email в ближайшее время.', 'support.sent.close': 'Закрыть', 'admin.tab.support': 'Поддержка', 'admin.tab.backup': 'Бэкап', 'admin.tab.translations': 'Переводы', 'admin.tab.dbcheck': 'Проверка БД', 'admin.tab.balances': 'Баланс', 'admin.tab.push': 'Push', 'admin.tab.referrals': 'Рефералы', 'admin.search': 'Поиск', 'admin.noData': 'Нет данных', 'admin.cat.order': 'Порядок', 'admin.cat.skills': 'Навыки', 'admin.plans.form.max_tasks': 'Макс. задач', 'admin.settings.referral.shared_section': 'Общие настройки рефералов', 'admin.settings.seo.title': 'SEO настройки', 'admin.backup.title': 'Бэкап', 'admin.backup.tables': 'Таблицы', 'admin.backup.exportAll': 'Экспорт всего', 'admin.backup.importAll': 'Импорт всего', 'admin.backup.exportTable': 'Экспорт таблицы', 'admin.backup.importTable': 'Импорт таблицы', 'admin.backup.exporting': 'Экспорт...', 'admin.backup.importing': 'Импорт...', 'admin.backup.exportSuccess': 'Экспорт завершён', 'admin.backup.importSuccess': 'Импорт завершён', 'admin.backup.autoBackup': 'Автобэкап', 'admin.backup.autoBackupDesc': 'Автоматический ежедневный бэкап', 'admin.backup.storedBackups': 'Сохранённые бэкапы', 'admin.backup.noStoredBackups': 'Сохранённых бэкапов нет', 'admin.backup.restore': 'Восстановить', 'admin.backup.restoreConfirm': 'Восстановить из бэкапа?', 'admin.backup.restoreSuccess': 'Восстановление завершено', 'admin.backup.restoring': 'Восстановление...', 'admin.backup.date': 'Дата', 'admin.backup.size': 'Размер', 'admin.backup.today': 'Сегодня', 'admin.backup.yesterday': 'Вчера', 'admin.balance.col.operation': 'Операция', 'admin.balance.col.amount': 'Сумма', 'admin.balance.col.result': 'Баланс', 'admin.balance.col.description': 'Описание', 'admin.balance.col.date': 'Дата', 'admin.balance.empty': 'Записей пока нет', 'admin.balance.filter.all': 'Все операции', 'admin.balance.filter.user_id': 'Фильтр по userId', 'admin.balance.kind.topup': 'Пополнение', 'admin.balance.kind.plan_purchase': 'Списание за тариф', 'admin.balance.kind.admin_topup': 'Пополнение админом', 'admin.balance.kind.admin_adjustment': 'Корректировка', 'admin.support.search': 'Поиск', 'admin.support.all_statuses': 'Все статусы', 'admin.support.all_types': 'Все типы', 'admin.support.none': 'Обращений нет', 'admin.support.reply': 'Ответить', 'admin.support.reply_placeholder': 'Введите ответ...', 'admin.support.send_reply': 'Отправить ответ', 'admin.support.cancel': 'Отмена', 'admin.support.close': 'Закрыть', 'admin.support.status.open': 'Открыто', 'admin.support.status.in_progress': 'В работе', 'admin.support.status.resolved': 'Решено', 'admin.support.status.closed': 'Закрыто', 'admin.support.your_reply': 'Ваш ответ', 'admin.user_edit.visibility_requirements.title': 'Профиль пока не попадает в «Предложения»', 'admin.user_edit.visibility_requirements.hint': 'Нужно выполнить условия видимости:', 'admin.user_edit.visibility_requirements.bio': 'Заполнить описание (bio)', 'admin.user_edit.visibility_requirements.published_card': 'Опубликовать хотя бы одну карточку', 'admin.user_edit.visibility_requirements.categories': 'Указать категорию в опубликованной карточке', 'admin.user_edit.visibility_requirements.locations': 'Указать локацию в опубликованной карточке', 'auto_response.desc': 'Автоматически отвечать на подходящие задачи', 'auto_response.budget_range': 'Бюджет задачи', 'auto_response.message_placeholder': 'Здравствуйте! Я могу помочь с этой задачей...', 'profile.background.title': 'Фон шапки профиля', 'profile.background.hint': 'Показывается в шапке публичного профиля на web и в мобильном приложении.', 'profile.photo.uploading': 'Загрузка...', 'profile.balance.history': 'Архив операций', 'profile.balance.history.last': 'Последние операции', 'profile.balance.history.empty': 'Операций пока нет', 'profile.balance.history.balance_after': 'Баланс после', 'profile.balance.history.kind.topup': 'Пополнение баланса', 'profile.balance.history.kind.plan_purchase': 'Списание за тариф', 'profile.balance.history.kind.admin_topup': 'Пополнение администратором', 'profile.balance.history.kind.admin_adjustment': 'Корректировка администратором', 'profile.plan_history.title': 'История тарифного плана', 'profile.plan_history.empty': 'История изменений тарифа пока пуста', 'profile.plan_history.expires': 'До', 'profile.plan_history.days': 'дней', 'profile.plan_history.event.activated': 'Активирован', 'profile.plan_history.event.renewed': 'Продлён', 'profile.plan_history.event.downgraded': 'Понижен', 'profile.plan_history.event.referral_reward': 'Реферальная награда', 'profile.plan_history.event.admin_change': 'Изменён администратором', 'profile.plan_history.event.expired': 'Истёк', 'profile.show_contact_desc': 'Позволяет клиентам связаться напрямую', 'profile.site.visible.price_list': 'Прайслист', 'site.pricelist': 'Прайслист', 'status.plan_required': 'Статус недоступен на текущем тарифе', 'status.admin_not_applicable': 'Для аккаунта администратора пользовательский статус не применяется' }, uk: { 'footer.slogan': 'Ваше завдання — наша турбота! Вирішуємо будь-які питання швидко і зручно.', 'footer.links': 'Посилання', 'footer.socials': 'Ми в соцмережах', 'nav.home': 'Головна', 'nav.tasks': 'Завдання', 'nav.post': '+ Опублікувати', 'nav.dashboard': 'Мої завдання', 'nav.chat': 'Повідомлення', 'nav.notifications': 'Сповіщення', 'nav.profile': 'Профіль', 'nav.admin': 'Адмінка', 'nav.specialists': 'Пропозиції', 'nav.new_task': 'Нове завдання', 'nav.login': 'Увійти', 'nav.register': 'Реєстрація', 'nav.logout': 'Вийти', 'hero.title': 'Кожен має навичку, яка може допомогти іншому', 'hero.subtitle': 'Знайди допомогу, запропонуй свої навички або заробляй, допомагаючи іншим', 'hero.cta.post': 'Знайти допомогу', 'hero.cta.browse': 'Запропонувати допомогу', 'hero.cta.specialists': 'Знайти роботу', 'hero.search.placeholder': 'Що потрібно? напр. електрик, прибирання...', 'hero.specialist.title': 'Знайдіть замовлення поруч з вами', 'hero.specialist.subtitle': 'Відкрийте замовлення у своїх категоріях і надішліть пропозицію', 'hero.specialist.cta': 'Знайти замовлення', 'hero.specialist.search.placeholder': 'Пошук замовлень... напр. електрика, прибирання', 'section.categories.specialist': 'Знайдіть замовлення за категорією', 'section.cities.specialist': 'Замовлення за містом', 'how.specialist.step1.title': 'Створіть картку спеціаліста', 'how.specialist.step1.desc': 'Вкажіть категорії, навички і райони — система знайде підходящі замовлення автоматично', 'how.specialist.step2.title': 'Знайдіть підходящі замовлення', 'how.specialist.step2.desc': 'Переглядайте замовлення у своїх категоріях і починайте роботу одразу', 'how.specialist.step3.title': 'Надішліть пропозицію і заробляйте', 'how.specialist.step3.desc': 'Подайте пропозицію з ціною і термінами, спілкуйтеся з клієнтами і виконуйте замовлення', 'stats.specialists': 'пропозиції', 'stats.tasks': 'завдань', 'stats.categories': 'категорій', 'stats.free': 'безкоштовна реєстрація', 'promo.title': 'Отримай Pro безкоштовно — тільки до кінця року', 'promo.subtitle': 'Зареєструйся зараз і користуйся тарифом Pro без оплати. Акція закінчується 31 грудня.', 'promo.cta': 'Зареєструватися', 'promo.days': 'днів', 'promo.hours': 'годин', 'promo.minutes': 'хвилин', 'promo.seconds': 'сек.', 'section.categories': 'Створи завдання у будь-якій категорії', 'section.how': 'Як це працює', 'section.recent': 'Останні завдання', 'section.all': 'Дивитись всі →', 'section.more': 'ще', 'section.cities': 'Міста і райони', 'section.community': 'Суспільний проект для всіх', 'community.subtitle': 'CanHelp — не просто маркетплейс, це спільнота взаємодопомоги. Будь-хто, хто має знання або навичку, може знайти клієнта. Будь-хто, у кого є завдання, може знайти спеціаліста.', 'community.point1.title': 'Вмієте щось робити?', 'community.point1.desc': 'Ремонт, репетиторство, дизайн, переклади, догляд — кожна навичка має цінність. Створіть профіль і знаходьте клієнтів поруч.', 'community.point2.title': 'Потрібна допомога?', 'community.point2.desc': 'Опублікуйте завдання за хвилину і отримуйте пропозиції від перевірених спеціалістів у вашому місті.', 'community.point3.title': 'Допоможіть проекту рости', 'community.point3.desc': 'CanHelp розвивається завдяки спільнотам. Поділіться посиланням з друзями і знайомими — разом ми будуємо щось корисне для всіх.', 'community.share': 'Поділитися з друзями', 'community.share.copied': 'Посилання скопійовано!', 'section.referral': 'Реферальна програма', 'referral.home.subtitle': 'Поділіться посиланням — кожен новий користувач, зареєстрований через нього, принесе вам нагороду.', 'referral.home.step1.title': 'Зареєструйтесь і отримайте посилання', 'referral.home.step1.desc': 'Створіть акаунт і знайдіть своє унікальне реферальне посилання в профілі.', 'referral.home.step2.title': 'Поділіться з друзями', 'referral.home.step2.desc': 'Надішліть посилання друзям, знайомим або опублікуйте в соціальних мережах.', 'referral.home.step3.title': 'Отримуйте нагороди', 'referral.home.step3.desc': 'Як тільки друг підтвердить email, ви автоматично отримаєте свою нагороду.', 'referral.home.cta': 'Отримати посилання', 'referral.home.badge': 'Реферальна програма', 'section.faq': 'Часті запитання', 'faq.q1': 'Як працює CanHelp?', 'faq.a1': 'Опублікуйте завдання, отримайте пропозиції від спеціалістів, виберіть найкращого і почніть співпрацю. Це швидко, просто і безкоштовно для клієнтів.', 'faq.q2': 'Скільки коштує використання платформи?', 'faq.a2': 'Реєстрація і публікація завдань повністю безкоштовні для клієнтів. Спеціалісти мають доступ до безкоштовного плану, а також до преміум-опцій.', 'faq.q3': 'Як стати спеціалістом?', 'faq.a3': 'Зареєструйтесь, перейдіть у «Стати спеціалістом», заповніть профіль навичками і категоріями і починайте отримувати завдання.', 'faq.q4': 'Як вибрати підходящого спеціаліста?', 'faq.a4': 'Оцініть відгуки, досвід, навички і портфоліо кожного спеціаліста. Спілкуйтеся через чат платформи і уточнюйте деталі до прийняття рішення.', 'faq.q5': 'Що якщо я не задоволений результатом?', 'faq.a5': 'Ви можете залишити відгук про спеціаліста і поставити оцінку від 1 до 5 зірок. Відгуки допомагають іншим користувачам вибирати перевірених професіоналів.', 'faq.q6': 'Чи можна зв\'язатись зі спеціалістом до прийняття пропозиції?', 'faq.a6': 'Так. Як тільки ви отримали пропозицію, можна відкрити чат зі спеціалістом, задати питання і уточнити всі деталі до прийняття рішення.', 'faq.q7': 'Скільки часу чекати пропозицій?', 'faq.a7': 'Як правило, протягом кількох годин. Спеціалісти отримують сповіщення про нові завдання і можуть швидко відповісти.', 'faq.q8': 'Чи можна розмістити завдання у будь-якому місті Греції?', 'faq.a8': 'Так! CanHelp охоплює всю Грецію — Афіни, Салоніки, Патри та інші міста.', 'faq.q9': 'Які види завдань є на CanHelp?', 'faq.a9': 'Ремонт, прибирання, електрика, репетиторство, дизайн, IT, переїзди, краса та багато іншого. Категорії постійно розширюються.', 'faq.q10': 'Чи є мобільний додаток?', 'faq.a10': 'Так! CanHelp доступний для Android та iOS. Завантажте додаток і керуйте всім зі свого телефону.', 'how.step1.title': 'Опублікуй завдання', 'how.step1.desc': 'Опиши що потрібно і встанови бюджет', 'how.step2.title': 'Отримай пропозиції', 'how.step2.desc': 'Спеціалісти надішлють пропозиції з ціною і термінами', 'how.step3.title': 'Обери і почни', 'how.step3.desc': 'Обери найкращого професіонала і почни співпрацю', 'tasks.title': 'завдань', 'tasks.filters': 'Фільтри', 'tasks.search': 'Пошук', 'tasks.search.placeholder': 'Назва або ключове слово...', 'tasks.search.btn': 'Пошук', 'tasks.publish': 'Опублікувати', 'tasks.category.all': 'Всі', 'tasks.category.all_in': 'Всі в', 'tasks.category.label': 'Категорія', 'tasks.location.label': 'Місто', 'tasks.location.placeholder': 'напр. Афіни', 'tasks.empty': 'Завдань не знайдено', 'tasks.empty.cta': 'Опублікуй перше', 'task.status.open': 'Відкрито', 'task.status.in_progress': 'В роботі', 'task.status.completed': 'Завершено', 'task.status.cancelled': 'Скасовано', 'task.status.draft': 'Чернетка', 'task.budget': 'Бюджет', 'task.location': 'Місцезнаходження', 'task.deadline': 'Дата початку', 'task.expires_at': 'Активно до', 'task.created_at': 'Створено', 'task.customer': 'Замовник', 'task.offer.btn': 'Надіслати пропозицію', 'task.invite.banner_title': 'Вас запросили на це завдання', 'task.invite.banner_hint': 'Замовник особисто запросив вас', 'task.invite.accept': 'Надіслати пропозицію', 'task.invite.decline': 'Відмовитися', 'offer.accept': 'Прийняти', 'offer.decline': 'Відхилити', 'task.complete': 'Завершити завдання', 'task.complete.confirm': 'Позначити завдання як виконане?', 'task.edit': 'Редагувати', 'task.status_label': 'Статус', 'task.yours': 'Ваше завдання', 'task.offer.yours': 'Ваша пропозиція', 'review.leave': 'Залишити відгук', 'review.rating': 'Оцінка', 'review.comment': 'Коментар', 'review.comment.placeholder': 'Розкажіть про свій досвід...', 'review.submit': 'Надіслати відгук', 'review.submitting': 'Надсилання...', 'review.done': 'Відгук надіслано!', 'profile.reviews': 'Відгуки', 'profile.no_reviews': 'Відгуків поки немає', 'profile.rating': 'Рейтинг', 'profile.skills.label': 'Навички', 'profile.member_since': 'Учасник з', 'task.offers': 'Пропозиції', 'task.offers.none': 'Пропозицій поки немає', 'create.title': 'Опублікувати завдання', 'create.field.title': 'Назва', 'create.field.description': 'Опис', 'create.field.category': 'Категорія', 'create.field.category.select': 'Оберіть...', 'create.field.location': 'Місцезнаходження', 'create.field.location.any': 'Де завгодно', 'create.field.location.all': 'Все місто', 'create.field.budget': 'Бюджет (€)', 'create.field.deadline': 'Дата початку', 'create.field.expires_at': 'Оголошення активне', 'create.field.expires_at.days': '{n} днів', 'create.field.budget_negotiable': 'Ціна обговорюється', 'create.field.time_slot': 'Час виконання', 'create.field.time_slot.any': 'У будь-який час', 'create.field.time_slot.morning': 'Вранці (08:00–13:00)', 'create.field.time_slot.afternoon': 'Вдень (13:00–18:00)', 'create.field.time_slot.evening': 'Ввечері (18:00–22:00)', 'create.field.time_slot.weekend': 'Вихідний', 'create.field.address': 'Адреса (необов\'язково)', 'create.field.address.district': 'Квартал', 'create.field.address.street': 'Вулиця', 'create.field.address.house': 'Будинок', 'create.field.confidential': 'Конфіденційна нотатка', 'create.field.confidential.placeholder': 'Деталі, видні тільки призначеному спеціалісту...', 'create.field.confidential.hint': 'Не відображається публічно', 'create.field.photos': 'Фотографії', 'create.field.photos.add': 'Додати фото', 'create.field.photos.uploading': 'Завантаження...', 'task.budget_negotiable': 'Ціна обговорюється', 'task.time_slot': 'Час', 'task.confidential': 'Конфід. нотатка', 'create.field.title.placeholder': 'напр. Прибирання квартири 80кв', 'create.field.description.placeholder': 'Детально опишіть що потрібно...', 'create.field.location.placeholder': 'напр. Афіни, Колонаки', 'create.field.budget.placeholder': 'напр. 100', 'create.submit': 'Опублікувати завдання', 'create.submitting': 'Публікація...', 'login.title': 'Ласкаво просимо', 'login.subtitle': 'Вхід до CanHelp', 'login.email': 'Email', 'login.password': 'Пароль', 'login.submit': 'Увійти', 'login.submitting': 'Вхід...', 'login.error': 'Невірний email або пароль', 'login.unverified.title': 'Підтвердіть ваш email', 'login.unverified.desc': 'Ми надіслали посилання для підтвердження на ваш email. Перевірте вхідні (або спам) і перейдіть за посиланням.', 'login.unverified.resend': 'Надіслати лист повторно', 'login.unverified.sending': 'Надсилання...', 'login.unverified.sent': '✓ Надіслано — перевірте вхідні', 'profile.email.verified': 'Email підтверджено', 'profile.email.not_verified': 'Email не підтверджено', 'login.no_account': 'Немає акаунту?', 'login.register_link': 'Зареєструватися', 'login.forgot_password': 'Забув пароль?', 'login.or_continue_with': 'або продовжте через', 'login.continue_google': 'Увійти через Google', 'forgot.title': 'Забув пароль', 'forgot.subtitle': 'Введіть email для отримання посилання відновлення', 'forgot.email': 'Email', 'forgot.submit': 'Надіслати посилання', 'forgot.submitting': 'Надсилання...', 'forgot.sent.title': 'Перевірте вхідні', 'forgot.sent.desc': 'Якщо акаунт з таким email існує, ми надішлемо посилання для скидання пароля.', 'forgot.back_to_login': 'Повернутися до входу', 'forgot.error': 'Не вдалося надіслати посилання. Перевірте адресу і спробуйте знову.', 'forgot.error.not_found': 'Акаунт з таким email не знайдено.', 'forgot.error.send_failed': 'Помилка надсилання листа. Спробуйте пізніше.', 'reset.title': 'Новий пароль', 'reset.subtitle': 'Введіть новий пароль', 'reset.password': 'Новий пароль', 'reset.confirm': 'Підтвердіть пароль', 'reset.submit': 'Змінити пароль', 'reset.submitting': 'Збереження...', 'reset.success': 'Пароль успішно змінено. Перенаправлення до входу...', 'reset.back_to_login': 'Повернутися до входу', 'reset.error.mismatch': 'Паролі не збігаються', 'reset.error.invalid': 'Недійсне або застаріле посилання. Запросіть нове.', 'register.title': 'Реєстрація', 'register.subtitle': 'Створити акаунт в CanHelp', 'register.first_name': 'Ім\'я', 'register.last_name': 'Прізвище', 'register.email': 'Email', 'register.password': 'Пароль (мін. 8 символів)', 'register.role': 'Роль', 'register.role.customer': 'Користувач', 'register.role.customer.desc': 'Публікую завдання', 'register.role.specialist': 'Спеціаліст', 'register.role.specialist.desc': 'Беру завдання', 'register.submit': 'Створити акаунт', 'register.submitting': 'Реєстрація...', 'register.has_account': 'Вже є акаунт?', 'register.login_link': 'Увійти', 'register.continue_google': 'Зареєструватися через Google', 'register.check_email.title': 'Перевірте пошту', 'register.check_email.desc': 'Ми надіслали посилання для підтвердження на ваш email. Перевірте вхідні (або спам) і перейдіть за посиланням.', 'register.check_email.login': 'Повернутися до входу', 'register.captcha_failed': 'Перевірка CAPTCHA не пройдена. Пройдіть перевірку безпеки та спробуйте знову.', 'dashboard.title': 'Панель управління', 'dashboard.new_task': '+ Нове завдання', 'dashboard.onboarding.title': 'Ласкаво просимо до CanHelp 👋', 'dashboard.onboarding.subtitle': 'Оберіть, з чого хочете почати.', 'dashboard.onboarding.helper.title': 'Запропонуйте свою допомогу', 'dashboard.onboarding.helper.desc': 'Заповніть анкету — навички, категорії та міста. Це займе кілька хвилин, і ви почнете отримувати замовлення.', 'dashboard.onboarding.helper.cta': 'Заповнити анкету', 'dashboard.onboarding.requester.title': 'Потрібна допомога?', 'dashboard.onboarding.requester.desc': 'Опублікуйте завдання — помічники надішлють вам свої пропозиції.', 'dashboard.onboarding.requester.cta': 'Опублікувати завдання', 'dashboard.my_tasks': 'Мої завдання', 'dashboard.my_offers': 'Мої пропозиції', 'dashboard.invitations': 'Запрошення на завдання', 'dashboard.offers_count': 'проп.', 'dashboard.declined_count': 'відх.', 'dashboard.completed_tasks': 'Завершені завдання', 'dashboard.completed_offers': 'Завершені пропозиції', 'dashboard.review_pending': 'Оцінка ще не залишена', 'tasks.new.top_specialists': 'Топ спеціалісти', 'tasks.new.select_category': 'Виберіть категорію, щоб побачити спеціалістів', 'tasks.new.invite': 'Запропонувати роботу', 'tasks.new.invited': 'Вибрано ✓', 'reviews.count': 'відгуків', 'filter.location': 'Локація', 'filter.language': 'Мови', 'filter.language.any': 'Будь-яка мова', 'filter.category.all': 'Всі категорії', 'user.categories': 'Категорії', 'user.work_area': 'Район роботи', 'user.specialist_cards': 'Картки послуг', 'card.skills': 'Навички', 'card.categories': 'Категорії', 'card.geography': 'Район роботи', 'card.portfolio': 'Портфоліо', 'card.close': 'Закрити', 'dashboard.tasks.empty': 'Ви не публікували завдання', 'dashboard.tasks.empty.cta': 'Опублікуйте перше', 'dashboard.tasks.add_new': 'Додати нове завдання', 'dashboard.offers.empty': 'Ви не надсилали пропозицій', 'dashboard.offers.empty.cta': 'Знайти завдання', 'dashboard.customer.specialists_title': 'Шукаєте виконавця?', 'dashboard.customer.specialists_hint': 'Переглядайте профілі спеціалістів, читайте відгуки і запрошуйте їх на свої завдання', 'dashboard.customer.specialists_cta': 'Знайти виконавця', 'dashboard.customer.how_title': 'Як це працює', 'dashboard.customer.step1': 'Створіть завдання з описом і бюджетом', 'dashboard.customer.step2': 'Спеціалісти надішлють пропозиції з ціною і термінами', 'dashboard.customer.step3': 'Оберіть підходящого і почніть роботу', 'notif.title': 'Сповіщення', 'notif.mark_all': 'Позначити всі як прочитані', 'notif.empty': 'Немає сповіщень', 'notif.type.generic': 'Сповіщення', 'notif.type.new_offer': 'Нова пропозиція', 'notif.type.offer_accepted': 'Вашу пропозицію прийнято', 'notif.type.offer_declined': 'Вашу пропозицію відхилено', 'notif.type.task_completed': 'Завдання виконано', 'notif.type.task_cancelled': 'Завдання скасовано', 'notif.type.new_message': 'Нове повідомлення', 'notif.type.new_review': 'Новий відгук', 'notif.type.task_invite': 'Запрошення на завдання', 'notif.type.referral_reward': 'Реферальна нагорода', 'notif.type.specialist_card_submitted': 'Картку надіслано на перевірку', 'notif.type.specialist_card_approved': 'Картку схвалено', 'notif.type.specialist_card_rejected': 'Картку відхилено', 'notif.body.new_offer': 'Нова пропозиція на «{title}»', 'notif.body.offer_accepted': 'Вашу пропозицію на «{title}» прийнято', 'notif.body.offer_declined': 'Вашу пропозицію на «{title}» відхилено', 'notif.body.task_invite': 'Вас запрошують на «{title}»', 'notif.body.new_review': 'Ви отримали оцінку {rating}★', 'notif.body.referral_reward': 'На ваш акаунт додано {days} днів доступу до плану «{plan}»!', 'notif.body.specialist_card_submitted': 'Картку «{title}» надіслано на перевірку', 'notif.body.specialist_card_approved': 'Картку «{title}» схвалено та опубліковано', 'notif.body.specialist_card_rejected': 'Картку «{title}» не було схвалено. Виправте її та надішліть знову.', 'offer.status.pending': 'Очікує', 'offer.status.accepted': 'Прийнято', 'offer.status.declined': 'Відхилено', 'offer.status.withdrawn': 'Відкликано', 'offer.status.other_accepted': 'Вибрано іншого виконавця', 'common.loading': 'Завантаження...', 'common.error': 'Помилка', 'common.save': 'Зберегти', 'common.saving': 'Збереження...', 'common.cancel': 'Скасувати', 'common.add': 'Додати', 'common.close': 'Закрити', 'common.edit': 'Редагувати', 'common.delete': 'Видалити', 'common.from': 'від', 'common.currency': '€', 'common.greece': 'Греція', 'chat.connected': 'Підключено', 'chat.disconnected': 'Відключено', 'chat.no_rooms': 'Переписок поки немає', 'chat.task_fallback': 'Завдання', 'chat.select': 'Виберіть переписку', 'chat.no_messages': 'Повідомлень поки немає', 'chat.placeholder': 'Напишіть повідомлення... (Enter для надсилання)', 'chat.conversation_fallback': 'Переписка', 'chat.direct_chat': 'Особистий чат', 'chat.linked_task': 'Прикріплене замовлення', 'chat.write_btn': 'Написати', 'chat.just_now': 'щойно', 'chat.min_ago': 'хв', 'chat.write_specialist': 'Написати спеціалісту', 'chat.write_customer': 'Написати замовнику', 'chat.notif_settings': 'Налаштування сповіщень', 'chat.notif_messages': 'Сповіщення про нові повідомлення', 'chat.toast_title': 'Нове повідомлення', 'chat.toast_open': 'Відкрити чат', 'offer.price': 'Ціна', 'offer.price.placeholder': 'напр. 80', 'offer.customer_budget': 'Бюджет замовника', 'offer.message': 'Повідомлення', 'offer.optional': 'необов\'язково', 'offer.message.placeholder': 'Представтеся, розкажіть про досвід і чому ви найкращий вибір...', 'offer.submitting': 'Надсилання...', 'profile.photo': 'Фото профілю', 'profile.photo.change': 'Змінити фото', 'profile.photo.hint': 'JPEG, PNG, WebP · до 5MB', 'profile.basic_info': 'Основна інформація', 'profile.phone': 'Телефон', 'profile.phone.placeholder': '+30 6901234567', 'profile.bio': 'Короткий опис', 'profile.bio.placeholder': 'Розкажіть трохи про себе...', 'profile.language': 'Мова', 'profile.language.hint': 'Мова інтерфейсу і email-сповіщень', 'profile.languages': 'Мови спілкування', 'profile.languages.hint': 'Виберіть усі мови, якими ви спілкуєтесь', 'profile.skills': 'Навички', 'profile.skills.subtitle': 'Додайте послуги, які ви пропонуєте', 'profile.skills.placeholder': 'напр. Прибирання, IT, Репетиторство...', 'profile.role': 'Роль акаунту', 'profile.role.specialist': '🔧 Помічник', 'profile.role.admin': '👑 Admin', 'profile.role.customer': '👤 Користувач', 'profile.role.user': '👤 Користувач', 'profile.role.change': 'Для зміни ролі зверніться до служби підтримки.', 'profile.become_specialist': 'Запропонувати допомогу', 'profile.become_specialist.desc': 'Створи профіль помічника, запропонуй свої навички та почни отримувати завдання.', 'become_specialist.hero.title': 'Запропонуй свої навички і почни заробляти', 'become_specialist.hero.subtitle': 'Створи профіль помічника та отримуй запити від людей, яким потрібна допомога', 'become_specialist.how.title': 'Як це працює', 'become_specialist.step1.title': 'Створи портфоліо спеціаліста', 'become_specialist.step1.desc': 'Вкажи категорії, навички і зону покриття — система автоматично підбере підходящі замовлення', 'become_specialist.step2.title': 'Шукай замовлення', 'become_specialist.step2.desc': 'Переглядай завдання по своїх категоріях у розділі «Пошук замовлень»', 'become_specialist.step3.title': 'Відгукуйся і заробляй', 'become_specialist.step3.desc': 'Надсилай пропозиції з ціною і термінами, спілкуйся з клієнтами і виконуй замовлення', 'become_specialist.benefits.title': 'Переваги профілю спеціаліста', 'become_specialist.benefit1': 'Пошук замовлень за категоріями і локацією', 'become_specialist.benefit2': 'Публічний профіль з відгуками клієнтів', 'become_specialist.benefit3': 'Розклад доступності, видимий клієнтам', 'become_specialist.benefit4': 'Додавання до обраного клієнтами', 'become_specialist.cta': 'Детальніше', 'become_specialist.free_badge': 'Безкоштовна реєстрація', 'profile.tab.notifications': 'Сповіщення', 'profile.tab.reviews': 'Відгуки', 'profile.tab.referral': 'Реферали', 'profile.tab.auto_response': 'Авто-відповідь', 'profile.tab.site': 'Сайт', 'profile.site.title': 'Персональна сторінка', 'profile.site.url_label': 'Особистий сайт', 'profile.site.copy': 'Копіювати', 'profile.site.copied': 'Скопійовано', 'profile.site.visible_title': 'Що відображається на вашій сторінці', 'profile.site.visible.name': 'Ім\'я і фото', 'profile.site.visible.bio': 'Біографія', 'profile.site.visible.rating': 'Рейтинг і відгуки', 'profile.site.visible.portfolio': 'Портфоліо / Картки', 'profile.site.visible.contacts': 'Контактні дані', 'profile.site.visible.full_last_name': 'Прізвище повністю', 'profile.site.visible.services': 'Картки послуг', 'profile.site.visible.reviews': 'Розділ з відгуками', 'profile.site.visible.status': 'Статус «Готовий допомогти»', 'profile.site.theme': 'Тема оформлення', 'profile.site.theme.dark': 'Темна', 'profile.site.theme.light': 'Світла', 'profile.site.slug_taken': 'Ця адреса вже зайнята', 'profile.site.stats.title': 'Аналітика сайту', 'profile.site.stats.days': 'останні 30 днів', 'profile.site.stats.views': 'Перегляди', 'profile.site.stats.unique': 'Унікальні відвідувачі', 'profile.site.stats.messages': 'Повідомлення', 'profile.site.stats.total_views': 'Перегляди', 'profile.site.stats.total_unique': 'Унік. відвідувачі', 'profile.site.stats.total_messages': 'Повідомлення', 'profile.site.stats.empty': 'Даних поки немає', 'profile.site.stats.loading': 'Завантаження аналітики...', 'profile.site.stats.no_slug': 'Вкажіть адресу сайту, щоб бачити статистику', 'profile.site.edit_bio_hint': 'Біографія і фото налаштовуються у вкладці «Основне».', 'profile.site.seo.title': 'SEO — мета-дані сайту', 'profile.site.seo.hint': 'Відображається в пошуковиках. При збереженні автоматично перекладається на всі мови.', 'profile.site.seo.site_title': 'Заголовок сторінки', 'profile.site.seo.site_title_placeholder': 'Іван Іванов — Електрик в Афінах', 'profile.site.seo.site_desc': 'Мета-опис', 'profile.site.seo.site_desc_placeholder': 'Короткий опис для пошуковиків...', 'status.title': 'Статус', 'status.can_help_now_hint': 'Ваша картка показується вище у пошуку', 'status.need_help_hint': 'Спеціалісти можуть запропонувати вам допомогу', 'profile.referral.title': 'Партнерська програма', 'profile.referral.desc': 'Поділіться посиланням і отримуйте нагороду за кожного залученого користувача.', 'profile.referral.link_label': 'Ваше реферальне посилання', 'profile.referral.copy': 'Копіювати', 'profile.referral.copied': 'Скопійовано!', 'profile.referral.invited_count': 'успішних запрошень', 'profile.referral.no_code': 'Реферальний код недоступний.', 'notifications.title': 'Налаштування сповіщень', 'notifications.email.new_tasks': 'Email про нові замовлення', 'notifications.email.new_tasks.desc': 'Отримувати email, коли у ваших категоріях публікується нове замовлення', 'notifications.messages.desc': 'Отримувати сповіщення при новому вхідному повідомленні', 'notifications.saved': 'Налаштування збережено', 'notifications.plan_required': 'Недоступно у вашому тарифі', 'profile.tab.info': 'Основне', 'profile.tab.finance': 'Фінанси', 'profile.tab.skills': 'Навички', 'profile.tab.categories': 'Категорії', 'profile.tab.geography': 'Географія', 'profile.specialist.categories': 'Категорії робіт', 'profile.specialist.categories.desc': 'Виберіть категорії, в яких ви працюєте', 'profile.specialist.geography': 'Міста покриття', 'profile.specialist.geography.desc': 'Виберіть міста / райони, де ви працюєте', 'profile.saving': 'Збереження...', 'profile.upload.error': 'Помилка завантаження фото', 'profile.saved': 'Збережено', 'profile.tab.cards': 'Пропозиції', 'profile.cards.count': 'Пропозиції', 'profile.cards.add': 'Додати пропозицію', 'profile.cards.new_title': 'Назва нової пропозиції', 'profile.cards.placeholder': 'Наприклад: Сантехніка', 'profile.cards.create': 'Створити', 'profile.cards.cancel': 'Скасувати', 'profile.cards.empty': 'У вас немає пропозицій', 'profile.cards.empty_hint': 'Створіть першу картку, щоб показати послуги клієнтам.', 'profile.cards.create_first': 'Створити першу пропозицію', 'profile.cards.delete_confirm': 'Видалити пропозицію?', 'profile.background.change': 'Змінити фон', 'profile.background.remove': 'Видалити фон', 'profile.listing_requirements.published_card': 'Опублікуйте хоча б одну картку', 'profile.listing_requirements.title': 'Ваш профіль поки не показується в розділі «Пропозиції»', 'profile.listing_requirements.hint': 'Щоб картка відображалась, виконайте умови:', 'profile.listing_requirements.bio': 'Додайте коротку інформацію про себе в «Основне»', 'profile.listing_requirements.categories': 'Укажіть хоча б одну категорію в активній картці', 'profile.listing_requirements.locations': 'Укажіть хоча б одну локацію в активній картці', 'profile.listing_requirements.card_inactive': 'Зробіть картку активною', 'profile.listing_requirements.review_pending': 'Картка на розгляді', 'profile.card.visibility_issue': 'Картка не відображається в розділі «Пропозиції»', 'profile.card.tab.main': 'Основне', 'profile.card.tab.skills': 'Навички', 'profile.card.tab.categories': 'Категорії', 'profile.card.tab.geography': 'Географія', 'profile.card.tab.portfolio': 'Галерея', 'profile.card.tab.pricelist': 'Прайс-лист', 'profile.card.pricelist.empty': 'Групи прайс-листа ще не додані.', 'profile.card.pricelist.add_group': 'Додати групу', 'profile.card.pricelist.group_title': 'Назва групи', 'profile.card.pricelist.add_item': 'Додати позицію', 'profile.card.pricelist.item_name': 'Послуга / робота', 'profile.card.pricelist.item_desc': 'Опис (необов\'язково)', 'profile.card.pricelist.item_price': 'Ціна', 'profile.card.pricelist.item_unit': 'Одиниця (наприклад /год)', 'profile.card.pricelist.save_group': 'Зберегти групу', 'profile.card.pricelist.save_item': 'Зберегти', 'profile.card.pricelist.delete_group': 'Видалити групу', 'profile.card.pricelist.delete_item': 'Видалити', 'profile.card.active': 'Активна', 'profile.card.review_pending': 'На розгляді', 'profile.card.review_pending_hint': 'Вашу картку зараз перевіряє адміністрація.', 'profile.card.review_submitted': 'Картку надіслано на перевірку', 'profile.card.review_approved': 'Картку схвалено', 'profile.card.review_approved_hint': 'Ваша картка тепер відображається в пропозиціях.', 'profile.card.review_rejected': 'Картку відхилено', 'profile.card.review_rejected_hint': 'Картку не було схвалено. Виправте її та надішліть знову.', 'profile.card.submit_review': 'Надіслати на розгляд', 'profile.card.withdraw_review': 'Відкликати заявку', 'profile.card.unpublish': 'Зняти з публікації', 'profile.card.save': 'Зберегти', 'profile.card.saved': 'Збережено', 'profile.card.delete': 'Видалити', 'profile.card.skill.add': 'Додати навичку', 'profile.card.photo.add': 'Додати фото', 'profile.card.photo.uploading': 'Завантаження...', 'profile.card.photo.empty': 'Немає фотографій', 'profile.card.item.title': 'Заголовок', 'profile.card.item.desc': 'Опис', 'profile.card.item.save': 'Зберегти', 'profile.card.item.cancel': 'Скасувати', 'profile.card.item.edit': 'Опис роботи', 'profile.card.description': 'Опис картки', 'profile.card.desc_auto_translate': 'При збереженні буде автоматично перекладено на інші мови', 'profile.card.desc_translated': 'Є переклади:', 'profile.upgrade.cards_limit': 'Ліміт портфоліо вичерпано', 'profile.upgrade.plan': 'Поточний тариф:', 'profile.upgrade.contact': 'Зверніться до адміністратора для зміни тарифу', 'profile.upgrade.ok': 'Зрозуміло', 'profile.plan.title': 'Тарифний план', 'profile.balance': 'Баланс', 'profile.balance.topup': 'Поповнити баланс', 'profile.balance.topup.title': 'Поповнити баланс', 'profile.balance.topup.amount': 'Сума (в EUR)', 'profile.balance.topup.hint': 'Виберіть суму або введіть вручну', 'profile.balance.topup.submit': 'Перейти до оплати', 'profile.balance.topup.loading': 'Перенаправлення...', 'profile.balance.topup.error': 'Помилка ініціалізації платежу. Спробуйте знову.', 'payment.success.title': 'Оплата пройшла успішно!', 'payment.success.desc': 'Ваш баланс оновлено.', 'payment.cancelled.title': 'Оплату скасовано', 'payment.cancelled.desc': 'Оплату було скасовано. Кошти не списано.', 'payment.pending.title': 'Обробляється...', 'payment.pending.desc': 'Ваш платіж в обробці.', 'payment.back_to_profile': 'Повернутися в профіль', 'profile.plan.basic': 'Базовий (безкоштовний)', 'profile.plan.contact_upgrade': 'Зверніться до адміністратора для підключення тарифу', 'profile.plan.cards_up_to': 'Портфоліо: до', 'profile.plan.cards_unlimited': 'Портфоліо: безліміт', 'profile.plan.tasks_up_to': 'Завдань: до', 'profile.plan.offers_up_to': 'Відгуків: до', 'profile.plan.valid_until': 'Дійсний до', 'profile.plan.no_expiry': 'Безстроково', 'create.error': 'Помилка при публікації', 'tasks.category.general': 'Загальне', 'tasks.budget.range': 'Діапазон:', 'tasks.budget.from': 'від', 'tasks.budget.to': 'до', 'tasks.filter.reset': 'Скинути фільтри', 'tasks.load_more': 'Завантажити ще', 'tasks.showing': 'Результатів:', 'tasks.field.budget': 'Бюджет, €', 'admin.title': 'Панель адміністратора', 'admin.tab.stats': 'Статистика', 'admin.tab.users': 'Користувачі', 'admin.tab.tasks': 'Завдання', 'admin.tab.reports': 'Скарги', 'admin.tab.moderation': 'Модерація', 'admin.stats.users': 'Користувачі', 'admin.stats.tasks': 'Завдання', 'admin.stats.offers': 'Пропозиції', 'admin.stats.reviews': 'Відгуки', 'admin.tasks.by_status': 'Завдання за статусом', 'admin.col.user': 'Користувач', 'admin.col.email': 'Email', 'admin.col.role': 'Роль', 'admin.col.registered': 'Реєстрація', 'admin.col.status': 'Статус', 'admin.col.title': 'Назва', 'admin.col.budget': 'Бюджет', 'admin.col.created': 'Створено', 'admin.users.active': 'Активний', 'admin.users.inactive': 'Неактивний', 'admin.users.deactivate': 'Деактивувати', 'admin.users.activate': 'Активувати', 'admin.tasks.cancel': 'Скасувати', 'admin.reports.none': 'Скарг немає', 'admin.moderation.none': 'Немає пропозицій для перевірки', 'admin.moderation.pending': 'В очікуванні', 'admin.moderation.active': 'Активно', 'admin.moderation.approve': 'Підтвердити', 'admin.moderation.block': 'Заблокувати', 'admin.moderation.pending_title': 'Пропозиції на підтвердження', 'admin.moderation.active_title': 'Активні пропозиції', 'admin.moderation.pending_count': 'В очікуванні', 'admin.moderation.active_count': 'Активні', 'admin.moderation.pending_hint': 'Нові пропозиції, які очікують підтвердження', 'admin.moderation.active_hint': 'Активні пропозиції, які можна заблокувати', 'admin.moderation.pending_empty': 'Немає нових пропозицій для підтвердження', 'admin.moderation.active_empty': 'Активних пропозицій не знайдено', 'admin.reports.reviewed': 'Розглянуто', 'admin.reports.dismiss': 'Відхилити', 'admin.pagination.total': 'Всього', 'admin.users.role.change': 'Змінити роль', 'admin.users.search.placeholder': 'Пошук за ім\'ям або email...', 'admin.tasks.delete': 'Видалити', 'admin.tasks.delete.confirm': 'Видалити це завдання назавжди?', 'admin.tasks.search.placeholder': 'Пошук за назвою...', 'admin.col.customer': 'Замовник', 'admin.col.reporter': 'Скаржник', 'admin.col.target': 'Ціль', 'admin.filter.all_roles': 'Всі ролі', 'admin.filter.all_statuses': 'Всі статуси', 'admin.reports.target.task': 'Завдання', 'admin.reports.target.user': 'Користувач', 'admin.tab.categories': 'Категорії', 'admin.tab.locations': 'Міста і райони', 'admin.tab.logs': 'Логи', 'admin.tab.plans': 'Тарифи', 'admin.tab.settings': 'Налаштування', 'admin.logs.subtab.ai': 'AI логи', 'admin.logs.subtab.activity': 'Активність', 'admin.logs.subtab.mail': 'Mail', 'admin.logs.subtab.notifications': 'Сповіщення', 'admin.notif_logs.type': 'Тип', 'admin.notif_logs.title': 'Заголовок', 'admin.notif_logs.read': 'Прочитано', 'admin.notif_logs.empty': 'Логи сповіщень порожні', 'admin.stats.notif_chart_title': 'Сповіщення по днях', 'admin.stats.notif_label': 'Сповіщення', 'admin.stats.mail_chart_title': 'Email по днях', 'admin.stats.mail_label': 'Emails', 'admin.filter.all': 'Всі', 'admin.stats.specialists': 'Помічники', 'admin.col.plan': 'Тариф', 'admin.back_home': 'На головну', 'admin.plans.title': 'Тарифні пакети', 'admin.plans.add': '+ Додати тариф', 'admin.plans.empty': 'Тарифи не створено', 'admin.plans.form.new': 'Новий тариф', 'admin.plans.form.edit': 'Редагувати тариф', 'admin.plans.form.name': 'Назва', 'admin.plans.form.price': 'Ціна (EUR)', 'admin.plans.form.old_price': 'Стара ціна (EUR, необов\'язково)', 'admin.plans.form.max_offers': 'Макс. відгуків (порожньо = без ліміту)', 'admin.plans.form.max_cards': 'Макс. пропозицій (порожньо = без ліміту)', 'admin.plans.form.duration_days': 'Термін (днів, порожньо = без закінчення)', 'admin.plans.form.description': 'Опис', 'admin.plans.form.features': 'Можливості (по одному на рядок)', 'admin.plans.form.notify': 'Сповіщення про нові замовлення', 'admin.plans.form.default': 'За замовчуванням', 'admin.plans.form.active': 'Активний', 'admin.plans.form.order': 'Порядок', 'admin.plans.form.role': 'Роль', 'admin.plans.form.tier': 'Рівень', 'admin.plans.form.role.customer': 'Замовник', 'admin.plans.form.role.specialist': 'Помічник', 'admin.plans.form.tier.free': 'Безкоштовний', 'admin.plans.form.tier.pro': 'Pro', 'admin.plans.form.tier.ultimate': 'Ultimate', 'admin.plans.form.section.limits': 'Ліміти (порожньо = без обмежень)', 'admin.plans.form.max_messages_day': 'Макс. повідомлень/день', 'admin.plans.form.max_orders_day': 'Макс. замовлень/день', 'admin.plans.form.max_skills': 'Макс. навичок', 'admin.plans.form.max_profiles': 'Макс. профілів', 'admin.plans.form.max_portfolio': 'Макс. елементів портфоліо', 'admin.plans.form.section.boost': 'Множники & Буст', 'admin.plans.form.search_boost': 'Буст у пошуку', 'admin.plans.form.offers_multiplier': 'Множник відгуків', 'admin.plans.form.section.contact': 'Права контактів', 'admin.plans.form.can_contact_free': 'Контакт з безкоштовними користувачами', 'admin.plans.form.can_contact_pro': 'Контакт з Pro користувачами', 'admin.plans.form.can_contact_all': 'Контакт з усіма', 'admin.plans.form.can_show_contact': 'Показувати контакти', 'admin.plans.form.can_view_phone': 'Перегляд телефону', 'admin.plans.form.section.features': 'Можливості', 'admin.plans.form.upload_video': 'Завантаження відео', 'admin.plans.form.favorites': 'Обране', 'admin.plans.form.google_calendar': 'Google Calendar', 'admin.plans.form.verified_badge': 'Знак верифікації', 'admin.plans.form.highlighted_reviews': 'Виділені відгуки', 'admin.plans.form.personal_site': 'Особистий сайт', 'admin.plans.form.can_help_now': 'Статус «Можу допомогти»', 'admin.plans.form.need_help': 'Статус «Потрібна допомога»', 'admin.plans.form.auto_response': 'Авто-відповідь', 'admin.plans.form.auto_match': 'Авто-підбір', 'admin.plans.form.price_list': 'Прайс-лист', 'admin.plans.form.instant_dispatch_free': 'Миттєва розсилка (безкоштовно)', 'admin.plans.form.instant_dispatch_pro': 'Миттєва розсилка (Pro)', 'admin.plans.badge.default': 'За замовчуванням', 'admin.plans.badge.inactive': 'Неактивний', 'admin.plans.make_default': 'Зробити за замовчуванням', 'admin.plans.tasks': 'Завдань', 'admin.plans.offers': 'Відгуків', 'admin.plans.cards': 'Пропозиції', 'admin.plans.notify_tasks': 'Сповіщення про замовлення', 'admin.plans.delete.confirm': 'Видалити тариф', 'admin.activity.title': 'Журнал активності', 'admin.activity.event': 'Подія', 'admin.activity.all_events': 'Всі події', 'admin.activity.from': 'Від', 'admin.activity.to': 'До', 'admin.activity.reset': 'Скинути', 'admin.activity.total': 'Всього', 'admin.activity.empty': 'Немає записів', 'admin.mail.event': 'Email подія', 'admin.mail.all_events': 'Всі email події', 'admin.mail.from': 'Від', 'admin.mail.to': 'До', 'admin.mail.reset': 'Скинути', 'admin.mail.total': 'Всього', 'admin.mail.empty': 'Немає email логів', 'admin.mail.recipient': 'Отримувач', 'admin.mail.provider': 'Провайдер', 'admin.mail.details': 'Деталі', 'admin.mail.status': 'Статус', 'admin.mail.success': 'Успішно', 'admin.mail.failed': 'Помилка', 'admin.event.email_sent': 'Email надіслано', 'admin.event.email_failed': 'Email не надіслано', 'admin.event.email_dev': 'Email DEV fallback', 'admin.event.admin_email_test_sent': 'Тестовий email надіслано', 'admin.event.admin_email_test_failed': 'Тестовий email не надіслано', 'admin.logs.empty': 'Немає записів', 'admin.logs.date': 'Дата', 'admin.logs.provider': 'Провайдер', 'admin.logs.model': 'Модель', 'admin.logs.action': 'Дія', 'admin.logs.langs': 'Мови', 'admin.logs.in': 'Вхід', 'admin.logs.out': 'Вихід', 'admin.logs.total': 'Разом', 'admin.logs.ms': 'мс', 'admin.logs.status': 'Статус', 'admin.stats.activity_30d': 'Активність за 30 днів', 'admin.stats.tasks_label': 'Заявки', 'admin.stats.users_label': 'Користувачі', 'admin.stats.specialists_label': 'Помічники', 'admin.stats.tokens_title': 'Витрата токенів (по місяцях)', 'admin.stats.tokens_out': 'Вихідні', 'admin.stats.tokens_in': 'Вхідні', 'admin.stats.tokens_out_label': 'Вихідні токени', 'admin.stats.tokens_in_label': 'Вхідні токени', 'admin.stats.cost_label': 'Вартість (USD)', 'admin.stats.tasks_by_status': 'Заявки за статусами', 'admin.task_status.open': 'Відкриті', 'admin.task_status.in_progress': 'В роботі', 'admin.task_status.completed': 'Завершені', 'admin.task_status.cancelled': 'Скасовані', 'admin.task_status.draft': 'Чернетки', 'admin.settings.tab.general': 'Загальні', 'admin.settings.tab.smtp': 'E-Mail', 'admin.settings.tab.notifications': 'Сповіщення', 'admin.settings.tab.payment': 'Оплата', 'admin.settings.tab.referral': 'Реферальна', 'admin.settings.tab.seo': 'SEO', 'admin.settings.tab.socials': 'Соцмережі', 'admin.settings.tab.telegram': 'Telegram Bot', 'admin.settings.telegram.title': 'Налаштування Telegram Bot', 'admin.settings.telegram.help': 'Створіть бота через @BotFather. ID чату дізнайтесь через @userinfobot.', 'admin.settings.telegram.bot_token': 'Bot Token', 'admin.settings.telegram.admin_chat_id': 'Chat ID адміністратора', 'admin.settings.telegram.admin_chat_hint': 'Спочатку надішліть /start своєму боту, потім дізнайтесь chat ID через @userinfobot', 'admin.settings.telegram.channel_id': 'невикористовується', 'admin.settings.telegram.channels_title': 'Канали за мовами', 'admin.settings.telegram.channel_hint': 'Username публічного каналу (@канал) або числовий ID', 'admin.settings.telegram.notify_registrations': 'Сповіщати про нові реєстрації', 'admin.settings.telegram.notify_registrations_hint': 'Надсилати повідомлення при реєстрації нового користувача', 'admin.settings.telegram.post_new_tasks': 'Публікувати нові завдання в канал', 'admin.settings.telegram.post_new_tasks_hint': 'Автоматично публікувати нові завдання в Telegram-канал', 'admin.settings.telegram.test': 'Тест', 'admin.settings.telegram.verify': 'Перевірити токен', 'admin.settings.telegram.test_fail': 'Помилка з\'єднання', 'admin.settings.socials.title': 'Посилання на соціальні мережі', 'admin.settings.socials.hint': 'Заповнені посилання відображаються у підвалі сайту', 'admin.settings.seo.maintenance_label': 'Режим обслуговування', 'admin.settings.seo.maintenance_hint': 'Показувати сторінку обслуговування всім відвідувачам', 'admin.settings.seo.indexing_label': 'Індексація пошуковими системами', 'admin.settings.seo.indexing_hint': 'Дозволити пошуковим системам індексувати сайт', 'admin.settings.seo.head_scripts_label': 'Скрипти в (JS)', 'admin.settings.seo.head_scripts_hint': 'Виконується на кожній сторінці (Google Tag Manager, аналітика тощо)', 'admin.settings.seo.site_title_label': 'Заголовок сайту', 'admin.settings.seo.site_description_label': 'Опис сайту (meta description)', 'admin.settings.referral.title': 'Партнерська програма', 'admin.settings.referral.hint': 'Нагороджуйте користувачів, що приводять нових учасників.', 'admin.settings.referral.enabled_label': 'Увімкнено', 'admin.settings.referral.enabled_hint': 'Увімкнути / вимкнути видачу нагород', 'admin.settings.referral.customer_section': 'Для клієнтів', 'admin.settings.referral.specialist_section': 'Для помічників', 'admin.settings.referral.plan_label': 'Тарифний план за реферала', 'admin.settings.referral.no_plan': '— без плану —', 'admin.settings.referral.plan_hint': 'Цей план буде призначений тому, хто запросив. Якщо його поточний план вищий — додадуться тільки дні.', 'admin.settings.referral.days_label': 'Днів нагороди', 'admin.settings.referral.days_hint': 'Кількість днів, що додаються до терміну дії плану.', 'admin.settings.general.title': 'Загальні налаштування', 'admin.settings.general.site_name': 'Назва сайту', 'admin.settings.general.site_url': 'URL сайту', 'admin.settings.general.contact_email': 'Email для зв\'язку', 'admin.settings.general.support_phone': 'Телефон підтримки', 'admin.settings.smtp.title': 'Налаштування SMTP сервера', 'admin.settings.smtp.hint': 'Використовується для надсилання email-сповіщень.', 'admin.settings.smtp.host': 'SMTP Хост', 'admin.settings.smtp.port': 'Порт', 'admin.settings.smtp.encryption': 'Шифрування', 'admin.settings.smtp.enc.none': 'Немає', 'admin.settings.smtp.enc.tls': 'STARTTLS (порт 587)', 'admin.settings.smtp.enc.ssl': 'SSL/TLS (порт 465)', 'admin.settings.smtp.username': 'Ім\'я користувача', 'admin.settings.smtp.password': 'Пароль / App Password', 'admin.settings.smtp.from_name': 'Ім\'я відправника', 'admin.settings.smtp.from_email': 'Email відправника', 'admin.settings.smtp.test': 'Надіслати тестовий email', 'admin.settings.smtp.sending': 'Надсилання...', 'admin.settings.payment.hint': 'Дані для підключення до ePay Piraeus Bank.', 'admin.settings.env.test': 'Тест (sandbox)', 'admin.settings.env.prod': 'Бойовий режим', 'admin.settings.env.label': 'Середовище', 'admin.settings.merchant_id': 'Merchant ID', 'admin.settings.api_user': 'API User', 'admin.settings.api_password': 'API Password', 'admin.settings.confirm_url': 'Confirmation URL (webhook)', 'admin.settings.cancel_url': 'Cancel URL', 'admin.settings.active': 'Активний', 'admin.settings.saving': 'Збереження...', 'admin.settings.saved': 'Збережено', 'admin.notif.vars_hint': 'Доступні змінні в шаблонах', 'admin.notif.tmpl.not_set': 'Шаблон не налаштовано', 'admin.notif.tmpl.subject_label': 'Тема листа', 'admin.notif.tmpl.body_label': 'Текст листа (HTML)', 'admin.notif.tmpl.save': 'Зберегти', 'admin.notif.tmpl.close': 'Закрити', 'admin.notif.tmpl.translate': 'Авто-переклад на інші мови', 'admin.notif.tmpl.translating': 'Переклад...', 'admin.notif.tmpl.saving': 'Збереження...', 'admin.notif.email_verification': 'Підтвердження email адреси', 'admin.notif.registration_success': 'Успішна реєстрація', 'admin.notif.password_reset': 'Відновлення пароля', 'admin.notif.new_offer': 'Нова пропозиція', 'admin.notif.new_task': 'Нове завдання', 'admin.notif.offer_accepted': 'Пропозицію прийнято', 'admin.notif.new_message': 'Нове повідомлення', 'admin.notif.offer_declined': 'Відхилення пропозиції', 'admin.notif.offer_other_accepted': 'Вибрано іншого виконавця', 'admin.notif.task_updated': 'Зміна завдання', 'admin.notif.deadline_reminder': 'Нагадування про дедлайн', 'admin.notif.task_archived': 'Автознняття завдання', 'admin.notif.referral_reward': 'Реферальна нагорода', 'admin.email_template.plan_activated': 'Тарифи — активація тарифу', 'admin.email_template.plan_upgraded': 'Тарифи — підвищення тарифу', 'admin.email_template.plan_downgrade_scheduled': 'Тарифи — запланований перехід', 'admin.email_template.plan_downgrade_applied': 'Тарифи — застосування переходу', 'admin.email_template.plan_renewal_reminder': 'Тарифи — нагадування про продовження', 'admin.email_template.plan_insufficient_funds': 'Тарифи — недостатньо коштів', 'pricing.confirm.title': 'Підтвердіть вибір тарифу', 'pricing.confirm.plan': 'Тариф', 'pricing.confirm.prorated': 'Залік залишку', 'pricing.confirm.effective_price': 'До оплати', 'pricing.confirm.your_balance': 'Ваш баланс', 'pricing.confirm.downgrade_info': 'Перехід на новий тариф відбудеться автоматично після закінчення поточного періоду.', 'pricing.confirm.insufficient': 'Недостатньо коштів на балансі.', 'pricing.confirm.top_up': 'Поповнити', 'pricing.confirm.schedule_downgrade': 'Запланувати перехід', 'pricing.confirm.pay': 'Оплатити', 'admin.user_edit.title': 'Редагування користувача', 'admin.user_edit.email': 'Email', 'admin.user_edit.email_verified': 'Email підтверджено', 'admin.user_edit.email_not_verified': 'Email не підтверджено', 'admin.user_edit.verify_email_btn': 'Підтвердити вручну', 'admin.user_edit.verify_email_done': 'Email підтверджено!', 'admin.user_edit.id': 'ID', 'admin.user_edit.registered': 'Реєстрація', 'admin.user_edit.last_seen': 'Останній візит', 'admin.user_edit.lang': 'Мова', 'admin.user_edit.first_name': 'Ім\'я', 'admin.user_edit.last_name': 'Прізвище', 'admin.user_edit.phone': 'Телефон', 'admin.user_edit.bio': 'Про себе', 'admin.user_edit.role': 'Роль', 'admin.user_edit.plan': 'Тариф', 'admin.user_edit.no_plan': '— Без тарифу —', 'admin.user_edit.active': 'Активний акаунт', 'admin.user_edit.published': 'Опублікована', 'admin.user_edit.balance': 'Баланс (EUR)', 'admin.user_edit.skills': 'Навички', 'admin.user_edit.tab.profile': 'Профіль', 'admin.user_edit.tab.account': 'Акаунт', 'admin.user_edit.tab.balance': 'Баланс', 'admin.user_edit.tab.settings': 'Налаштування', 'admin.user_edit.tab.specialist': 'Пропозиції', 'admin.user_edit.tab.site': 'Сайт', 'admin.user_edit.plan_expires': 'Тариф закінчується', 'admin.user_edit.interface_lang': 'Мова інтерфейсу', 'admin.user_edit.comm_languages': 'Мови спілкування', 'admin.user_edit.personal_site_slug': 'Персональна сторінка', 'admin.user_edit.show_contact_info': 'Показувати контакти', 'admin.user_edit.show_contact_info.hint': 'Видно замовникам', 'admin.user_edit.notify_new_tasks': 'Сповіщати про нові завдання', 'admin.user_edit.notify_new_tasks.hint': 'Push і email сповіщення', 'admin.user_edit.notif_messages': 'Сповіщення про повідомлення', 'admin.user_edit.notif_messages.hint': 'Нові повідомлення в чаті', 'admin.user_edit.site_settings': 'Налаштування персональної сторінки', 'admin.user_edit.categories': 'Категорії послуг', 'admin.user_edit.locations': 'Райони обслуговування', 'admin.user_edit.skill_placeholder': 'Нова навичка...', 'admin.user_edit.add_category': '— Виберіть категорію —', 'admin.user_edit.add_location': '— Виберіть район —', 'admin.user_edit.specialist_cards': 'Пропозиції спеціаліста', 'admin.user_edit.no_cards': 'Пропозиції не знайдено', 'admin.user_edit.card_title': 'Заголовок пропозиції', 'admin.user_edit.card_description': 'Опис', 'admin.balance.topup.btn': 'Поповнити', 'admin.balance.withdraw.btn': 'Списати', 'admin.balance.modal_hint': 'Зміни застосовуються одразу і фіксуються в історії', 'admin.balance.topup.title': 'Поповнення балансу', 'admin.balance.topup.amount': 'Сума', 'admin.balance.topup.description': 'Коментар', 'admin.balance.topup.description.placeholder': 'Наприклад: бонус або ручне поповнення', 'admin.balance.topup.submit': 'Поповнити баланс', 'admin.balance.withdraw.title': 'Зняття балансу', 'admin.balance.withdraw.amount': 'Сума', 'admin.balance.withdraw.description': 'Коментар', 'admin.balance.withdraw.description.placeholder': 'Наприклад: повернення або ручне списання', 'admin.balance.withdraw.submit': 'Списати баланс', 'admin.user_edit.role.customer': 'Замовник', 'admin.user_edit.role.user': 'Користувач', 'admin.user_edit.role.specialist': 'Помічник', 'admin.user_edit.role.admin': 'Адміністратор', 'common.refresh': 'Оновити', 'common.back_home': 'На головну', 'admin.loc.hint': 'Управління містами і районами', 'admin.loc.add_city': 'Нове місто', 'admin.loc.add_district': 'Додати район', 'admin.loc.new': 'Нова локація', 'admin.loc.edit': 'Редагувати локацію', 'admin.loc.district': 'район', 'admin.loc.empty': 'Немає локацій', 'admin.loc.delete.confirm': 'Видалити локацію? Всі райони також будуть видалені.', 'admin.cat.add_root': 'Нова категорія', 'admin.cat.add_sub': 'Підкатегорія', 'admin.cat.edit': 'Редагувати', 'admin.cat.delete': 'Видалити', 'admin.cat.delete.confirm': 'Видалити категорію? Всі підкатегорії також будуть видалені.', 'admin.cat.slug': 'Slug', 'admin.cat.icon': 'Іконка', 'admin.cat.name_el': 'Грецька', 'admin.cat.name_en': 'Англійська', 'admin.cat.name_ru': 'Російська', 'admin.cat.name_uk': 'Українська', 'admin.cat.active': 'Активна', 'admin.cat.parent': 'Батьківська категорія', 'admin.cat.no_parent': 'Верхній рівень', 'admin.cat.save': 'Зберегти', 'admin.cat.cancel': 'Скасувати', 'admin.cat.empty': 'Немає категорій', 'admin.cat.hint': 'Управління категоріями з багаторівневою ієрархією', 'admin.cat.new': 'Нова категорія', 'admin.cat.subcategory': 'підкатегорія', 'admin.cat.add_child': 'Додати підкатегорію', 'admin.cat.inactive': 'Неактивна', 'admin.event.user_login': 'Вхід', 'admin.event.user_register': 'Реєстрація', 'admin.event.admin_user_deactivate': 'Блокування юзера', 'admin.event.admin_user_activate': 'Розблокування юзера', 'admin.event.admin_user_role_changed': 'Зміна ролі', 'admin.event.admin_task_cancelled': 'Скасування завдання', 'admin.event.admin_task_deleted': 'Видалення завдання', 'admin.event.admin_report_reviewed': 'Скаргу розглянуто', 'admin.event.admin_report_dismissed': 'Скаргу відхилено', 'admin.event.task_created': 'Створено завдання', 'user.online': 'Онлайн', 'user.seen_minutes': 'був тут {n} хв тому', 'user.seen_hours': 'був тут {n} год тому', 'user.seen_yesterday': 'був тут вчора', 'user.seen_days': 'був тут {n} дн тому', 'specialists.title': 'Пропозиції', 'specialists.search': 'Пошук спеціаліста...', 'specialists.search.btn': 'Пошук', 'specialists.empty': 'Спеціалістів не знайдено', 'specialists.no_bio': 'Без опису', 'specialists.view': 'Дивитись профіль', 'specialists.reviews': 'відгуків', 'specialist.favorite': 'Додати до обраного', 'specialist.unfavorite': 'Прибрати з обраного', 'specialist.site_link': 'Особистий сайт', 'favorites.specialists.title': 'Обрані спеціалісти', 'favorites.specialists.empty': 'Ви ще не додали спеціалістів до обраного', 'nav.favorites': 'Обране', 'nav.schedule': 'Розклад', 'nav.find_tasks': 'Пошук замовлень', 'schedule.title': 'Мій розклад', 'schedule.subtitle': 'Позначайте дні коли ви вільні або зайняті — замовники побачать вашу доступність', 'schedule.available': 'Вільний', 'schedule.busy': 'Зайнятий', 'schedule.unset': 'Не вказано', 'schedule.click_hint': '← клік змінює статус по колу', 'schedule.range_mode': 'Виділити діапазон', 'schedule.range_from': 'З {date} — оберіть кінцеву дату', 'schedule.click_to_set': 'Натисніть щоб позначити', 'schedule.free': 'вільно', 'schedule.busy_count': 'зайнято', 'schedule.free_days': 'вільних днів', 'schedule.googleCalendar': 'Google Календар', 'schedule.connectGoogle': 'Підключити Google Календар', 'schedule.disconnectGoogle': 'Відключити', 'schedule.connectedAs': 'Підключено як', 'schedule.importFromGoogle': 'Синхр. з Google', 'schedule.gcalConnected': '✓ Google Календар підключено', 'schedule.gcalError': 'Помилка підключення Google Календар', 'schedule.gcalImportDone': 'Імпортовано {n} днів з Google Календар', 'schedule.gcalAutoSyncNote': 'Зміни доступності автоматично надсилаються в Google Календар', 'schedule.gcalConnectDesc': 'Підключіть Google Календар для автоматичної синхронізації розкладу', 'schedule.gcalDisconnectConfirm': 'Відключити Google Календар?', 'find_tasks.title': 'Пошук замовлень', 'find_tasks.for_me': 'Для мене', 'find_tasks.all': 'Всі замовлення', 'find_tasks.by_category': 'За категоріями', 'find_tasks.list': 'Списком', 'find_tasks.already_offered': 'Пропозицію надіслано', 'find_tasks.offer_now': 'Відгукнутися', 'find_tasks.empty_for_me': 'Немає замовлень у ваших категоріях', 'find_tasks.banner_hint': 'Знайдіть замовлення за категоріями вашого портфоліо', 'find_tasks.no_cards': 'Створіть портфоліо спеціаліста, щоб бачити підходящі замовлення', 'find_tasks.add_card': 'Створити портфоліо', 'find_tasks.search': 'Пошук замовлень...', 'find_tasks.tasks_count': 'завдань', 'footer.tagline': 'Платформа завдань для Греції', 'footer.rights': 'Всі права захищені.', 'nav.privacy': 'Політика конфіденційності', 'nav.delete_account': 'Видалення акаунту', 'delete_account.title': 'Запит на видалення акаунту', 'delete_account.subtitle': 'Після перевірки вашого запиту ми назавжди видалимо ваш акаунт і дані протягом 30 днів.', 'delete_account.warning': 'Цю дію не можна скасувати. Всі ваші дані будуть видалені безповоротно.', 'delete_account.reason_label': 'Причина (необов\'язково)', 'delete_account.reason_placeholder': 'Розкажіть, чому ви хочете видалити акаунт...', 'delete_account.confirm_label': 'Підтверджую, що хочу назавжди видалити свій акаунт', 'delete_account.submit': 'Надіслати запит', 'delete_account.submitting': 'Надсилання...', 'delete_account.success_title': 'Ваш запит отримано', 'delete_account.success_body': 'Ми опрацюємо ваш запит протягом 30 днів і повідомимо вас електронною поштою.', 'delete_account.login_required': 'Для надсилання запиту на видалення необхідно увійти в акаунт.', 'delete_account.login_btn': 'Увійти', 'app.download_title': 'Завантажте мобільний додаток CanHelp', 'app.download_desc': 'Все CanHelp — завжди під рукою. Доступно для Android та iOS.', 'nav.pricing': 'Тарифи', 'pricing.title': 'Тарифи', 'pricing.subtitle': 'Виберіть підходящий план', 'pricing.role.customer': 'Замовник', 'pricing.role.specialist': 'Спеціаліст', 'pricing.free': 'Безкоштовно', 'pricing.per_month': 'міс', 'pricing.duration': 'Термін', 'pricing.days': 'дн.', 'pricing.current_plan': 'Ваш план', 'pricing.popular': 'Популярний', 'pricing.choose': 'Вибрати', 'pricing.your_plan': 'Активний план', 'pricing.free_default': 'За замовчуванням', 'pricing.compare': 'Порівняння функцій', 'pricing.feature': 'Функція', 'pricing.faq_note': 'Оплата списується з балансу CanHelp. Поповнення доступне в розділі Оплата.', 'pricing.feat.messages': 'Повідомлень / день', 'pricing.feat.orders': 'Замовлень / день', 'pricing.feat.contact_all': 'Зв\'язок з усіма', 'pricing.feat.view_phone': 'Перегляд телефону', 'pricing.feat.show_contact': 'Показувати контакти', 'pricing.feat.favorites': 'Обране', 'pricing.feat.verified_badge': 'Верифікований бейдж', 'pricing.feat.google_calendar': 'Google Календар', 'pricing.feat.personal_site': 'Персональний сайт', 'pricing.feat.auto_response': 'Авто-відповідь', 'pricing.feat.auto_match': 'Авто-підбір', 'pricing.feat.highlighted_reviews': 'Виділені відгуки', 'pricing.feat.portfolio': 'Елементів пропозиції', 'pricing.feat.cards': 'Кількість пропозицій', 'pricing.feat.notify_tasks': 'Сповіщення про нові завдання', 'pricing.feat.video': 'Відео в пропозиції', 'upgrade.available_in': 'Доступно в', 'upgrade.cta': 'Покращити', 'dashboard.plan.title': 'Мій план', 'dashboard.plan.expires': 'Закінчується через {n} днів', 'dashboard.plan.upgrade': 'Покращити план', 'dashboard.plan.no_plan': 'Безкоштовний план', 'dashboard.plan.messages': 'Повідомлень сьогодні', 'dashboard.plan.orders': 'Замовлень сьогодні', 'dashboard.plan.limits': 'Денні ліміти', 'dashboard.plan.features': 'Функції', 'dashboard.plan.stats': 'Статистика', 'dashboard.stats.cards': 'Портфоліо', 'dashboard.stats.maxCards': 'Макс. портфоліо', 'dashboard.stats.portfolioItems': 'Елементи портфоліо', 'dashboard.stats.maxPortfolioItems': 'Макс. елементи', 'dashboard.stats.activeOffers': 'Активні відгуки', 'dashboard.stats.reviewsReceived': 'Відгуки', 'dashboard.stats.activeTasks': 'Активні завдання', 'dashboard.stats.completedTasks': 'Завершені', 'status.need_help': 'Потрібна допомога', 'status.active': 'Активний', 'status.toggle_on': 'Увімкнути', 'status.toggle_off': 'Вимкнути', 'fomo.missed_orders': 'Пропущено {n} замовлень', 'fomo.missed_value': 'На суму €{v}', 'fomo.upgrade_hint': 'Покращте план — отримуйте більше замовлень', 'fomo.conversion': 'Конверсія завдань', 'fomo.active': 'Активні', 'fomo.with_offers': 'З офертами', 'fomo.completed': 'Завершені', 'fomo.already_offered': '{n} спеціалістів вже відгукнулися', 'fomo.specialist_missed': 'Ви пропустили {n} замовлень', 'fomo.top_categories': 'Категорії', 'fomo.offers_received': 'пропозицій отримано', 'fomo.avg_offers': 'В середньому {n}/завдання', 'fomo.completion_rate': 'завершено', 'task.auto_match': 'Авто-матч', 'task.auto_match_results': 'Топ спеціалісти', 'task.no_offer_yet': 'Ви ще не надіслали пропозицію', 'task.make_offer': 'Надіслати пропозицію', 'auto_response.title': 'Авто-відповідь', 'auto_response.enabled': 'Увімкнути авто-відповідь', 'auto_response.min_budget': 'Мін. бюджет', 'auto_response.max_budget': 'Макс. бюджет', 'auto_response.default_price': 'Ціна за замовчуванням', 'auto_response.default_message': 'Повідомлення за замовчуванням', 'auto_response.max_per_day': 'Макс. авто-офертів на день', 'auto_response.save': 'Зберегти', 'auto_response.saved': 'Збережено', 'auto_response.categories': 'Категорії', 'auto_response.locations': 'Локації', 'profile.personal_site': 'Персональний сайт', 'profile.site_slug': 'URL slug', 'profile.site_slug_hint': 'Тільки латинські букви, цифри, - і _', 'profile.site_open': 'Відкрити сайт', 'profile.site_preview': 'Ваш сайт', 'profile.show_contact': 'Показувати контакти', 'profile.show_contact_hint': 'Замовники з Pro/Ultimate-планом побачать ваш телефон', 'gcal.upgrade_required': 'Google Календар вимагає план Pro або Ultimate', 'chat.limit_warning': 'Залишилось {n} повідомлень сьогодні', 'chat.limit_reached': 'Ліміт повідомлень вичерпано. Покращте план', 'chat.upgrade': 'Покращити', 'site.member_since': 'З нами з', 'site.rating': 'Рейтинг', 'site.completed_tasks': 'Виконано', 'site.languages': 'Мов', 'site.photos': 'фото', 'site.contact_form': 'Зв\'язатися', 'site.contact_sent': 'Повідомлення надіслано!', 'site.contact_sent_desc': 'Спеціаліст зв\'яжеться з вами найближчим часом', 'site.contact_name': 'Ім\'я', 'site.contact_name_ph': 'Ваше ім\'я', 'site.contact_email_ph': 'your@email.com', 'site.contact_message': 'Повідомлення', 'site.contact_message_ph': 'Опишіть ваше завдання...', 'site.contact_send': 'Надіслати', 'site.share': 'Поділитися', 'site.speaks_languages': 'Розмовляє мовами', 'site.message_sent': 'Повідомлення надіслано!', 'site.message_sent_desc': 'Спеціаліст отримає його в чаті', 'site.message_placeholder': 'Напишіть повідомлення...', 'site.write_to_chat': 'Написати в чат', 'site.auth_required_title': 'Потрібна авторизація', 'site.auth_required_desc': 'Щоб написати в чат, необхідно увійти в акаунт CanHelp.', 'site.auth_login_btn': 'Увійти в акаунт', 'site.auth_contact_form_btn': 'Написати через форму зворотного зв\'язку', 'specialist.services': 'Послуги', 'portfolio.title': 'Портфоліо', 'status.can_help_now': 'Готовий допомогти', 'common.not_found': 'Сторінку не знайдено', 'common.anonymous': 'Анонімно', 'specialist_setup.page_title': 'Налаштування профілю спеціаліста', 'specialist_setup.step_of': 'Крок {current} з {total}', 'specialist_setup.next': 'Далі', 'specialist_setup.back': 'Назад', 'specialist_setup.skip': 'Пропустити', 'specialist_setup.finish': 'Завершити', 'specialist_setup.go_to_profile': 'Перейти в профіль', 'specialist_setup.browse_tasks': 'Знайти завдання', 'specialist_setup.step1.title': 'Ласкаво просимо!', 'specialist_setup.step1.subtitle': 'Давайте налаштуємо ваш профіль', 'specialist_setup.step1.desc': 'Повний профіль допомагає знаходити більше клієнтів. Слідуйте крокам, щоб створити ідеальний профіль спеціаліста.', 'specialist_setup.step1.what_next': 'Що ми зробимо:', 'specialist_setup.step1.item1': 'Заповнимо основну інформацію', 'specialist_setup.step1.item2': 'Створимо картку послуги', 'specialist_setup.step1.item3': 'Додамо навички і категорії', 'specialist_setup.step1.item4': 'Оберемо географію обслуговування', 'specialist_setup.step1.item5': 'Завантажимо фото портфоліо', 'specialist_setup.step2.title': 'Базовий профіль', 'specialist_setup.step2.subtitle': 'Розкажіть про себе', 'specialist_setup.step2.bio_label': 'Про себе', 'specialist_setup.step2.bio_placeholder': 'Опишіть ваш досвід, послуги які ви пропонуєте...', 'specialist_setup.step2.phone_label': 'Телефон', 'specialist_setup.step2.phone_placeholder': '+30 6900000000', 'specialist_setup.step2.photo_label': 'Фото профілю', 'specialist_setup.step2.photo_btn': 'Завантажити фото', 'specialist_setup.step2.photo_uploading': 'Завантаження...', 'specialist_setup.step2.photo_hint': 'Відображається у вашому профілі', 'specialist_setup.step3.title': 'Картка послуги', 'specialist_setup.step3.subtitle': 'Створіть вашу першу картку послуги', 'specialist_setup.step3.title_label': 'Назва картки', 'specialist_setup.step3.title_placeholder': 'Напр. Сантехнік, Електрик, Прибирання...', 'specialist_setup.step3.desc_label': 'Опис', 'specialist_setup.step3.desc_placeholder': 'Детально опишіть що ви пропонуєте, досвід, переваги...', 'specialist_setup.step3.title_required': 'Назва обов\'язкова', 'specialist_setup.step4.title': 'Навички і категорії', 'specialist_setup.step4.subtitle': 'Додайте навички і виберіть категорії', 'specialist_setup.step4.skills_label': 'Навички', 'specialist_setup.step4.skills_placeholder': 'Напр. Монтаж труб...', 'specialist_setup.step4.skills_add': 'Додати', 'specialist_setup.step4.categories_label': 'Категорії', 'specialist_setup.step5.title': 'Географія обслуговування', 'specialist_setup.step5.subtitle': 'Де ви надаєте послуги?', 'specialist_setup.step5.hint': 'Виберіть міста або конкретні райони', 'specialist_setup.done.title': 'Ваш профіль готовий!', 'specialist_setup.done.subtitle': 'Вітаємо! Профіль налаштовано', 'specialist_setup.done.desc': 'Тепер ви можете отримувати замовлення від клієнтів. Знайдіть завдання, що відповідають вашим навичкам.', 'support.title': 'Підтримка', 'support.type.label': 'Тип звернення', 'support.type.bug': 'Помилка', 'support.type.suggestion': 'Пропозиція', 'support.type.other': 'Інше', 'support.subject': 'Тема', 'support.subject.placeholder': 'Коротко опишіть проблему...', 'support.body': 'Повідомлення', 'support.body.placeholder': 'Детально опишіть проблему або пропозицію...', 'support.submit': 'Надіслати', 'support.cancel': 'Скасувати', 'support.error': 'Помилка надсилання. Спробуйте ще раз.', 'support.sent.title': 'Запит отримано!', 'support.sent.body': 'Ми відповімо на ваш email якнайшвидше.', 'support.sent.close': 'Закрити', 'admin.tab.support': 'Підтримка', 'admin.tab.backup': 'Резервні копії', 'admin.tab.translations': 'Переклади', 'admin.tab.dbcheck': 'Перевірка БД', 'admin.tab.balances': 'Баланс', 'admin.tab.push': 'Push', 'admin.tab.referrals': 'Реферали', 'admin.search': 'Пошук', 'admin.noData': 'Немає даних', 'admin.cat.order': 'Порядок', 'admin.cat.skills': 'Навички', 'admin.plans.form.max_tasks': 'Макс. завдань', 'admin.settings.referral.shared_section': 'Спільні налаштування рефералів', 'admin.settings.seo.title': 'SEO налаштування', 'admin.backup.title': 'Резервні копії', 'admin.backup.tables': 'Таблиці', 'admin.backup.exportAll': 'Експорт всього', 'admin.backup.importAll': 'Імпорт всього', 'admin.backup.exportTable': 'Експорт таблиці', 'admin.backup.importTable': 'Імпорт таблиці', 'admin.backup.exporting': 'Експорт...', 'admin.backup.importing': 'Імпорт...', 'admin.backup.exportSuccess': 'Експорт завершено', 'admin.backup.importSuccess': 'Імпорт завершено', 'admin.backup.autoBackup': 'Автобекап', 'admin.backup.autoBackupDesc': 'Автоматичний щоденний бекап', 'admin.backup.storedBackups': 'Збережені бекапи', 'admin.backup.noStoredBackups': 'Збережених бекапів немає', 'admin.backup.restore': 'Відновити', 'admin.backup.restoreConfirm': 'Відновити з бекапу?', 'admin.backup.restoreSuccess': 'Відновлення завершено', 'admin.backup.restoring': 'Відновлення...', 'admin.backup.date': 'Дата', 'admin.backup.size': 'Розмір', 'admin.backup.today': 'Сьогодні', 'admin.backup.yesterday': 'Вчора', 'admin.balance.col.operation': 'Операція', 'admin.balance.col.amount': 'Сума', 'admin.balance.col.result': 'Баланс', 'admin.balance.col.description': 'Опис', 'admin.balance.col.date': 'Дата', 'admin.balance.empty': 'Записів поки немає', 'admin.balance.filter.all': 'Всі операції', 'admin.balance.filter.user_id': 'Фільтр за userId', 'admin.balance.kind.topup': 'Поповнення', 'admin.balance.kind.plan_purchase': 'Списання за тариф', 'admin.balance.kind.admin_topup': 'Поповнення адміном', 'admin.balance.kind.admin_adjustment': 'Коригування', 'admin.support.search': 'Пошук', 'admin.support.all_statuses': 'Всі статуси', 'admin.support.all_types': 'Всі типи', 'admin.support.none': 'Звернень немає', 'admin.support.reply': 'Відповісти', 'admin.support.reply_placeholder': 'Введіть відповідь...', 'admin.support.send_reply': 'Надіслати відповідь', 'admin.support.cancel': 'Скасувати', 'admin.support.close': 'Закрити', 'admin.support.status.open': 'Відкрито', 'admin.support.status.in_progress': 'В роботі', 'admin.support.status.resolved': 'Вирішено', 'admin.support.status.closed': 'Закрито', 'admin.support.your_reply': 'Ваша відповідь', 'admin.user_edit.visibility_requirements.title': 'Профіль поки не потрапляє в «Пропозиції»', 'admin.user_edit.visibility_requirements.hint': 'Потрібно виконати умови видимості:', 'admin.user_edit.visibility_requirements.bio': 'Заповнити опис (bio)', 'admin.user_edit.visibility_requirements.published_card': 'Опублікувати хоча б одну картку', 'admin.user_edit.visibility_requirements.categories': 'Вказати категорію в опублікованій картці', 'admin.user_edit.visibility_requirements.locations': 'Вказати локацію в опублікованій картці', 'auto_response.desc': 'Автоматично відповідати на відповідні завдання', 'auto_response.budget_range': 'Бюджет завдання', 'auto_response.message_placeholder': 'Вітаю! Я можу допомогти з цим завданням...', 'profile.background.title': 'Фон шапки профілю', 'profile.background.hint': 'Показується в шапці публічного профілю на web і в мобільному застосунку.', 'profile.photo.uploading': 'Завантаження...', 'profile.balance.history': 'Архів операцій', 'profile.balance.history.last': 'Останні операції', 'profile.balance.history.empty': 'Операцій поки немає', 'profile.balance.history.balance_after': 'Баланс після', 'profile.balance.history.kind.topup': 'Поповнення балансу', 'profile.balance.history.kind.plan_purchase': 'Списання за тариф', 'profile.balance.history.kind.admin_topup': 'Поповнення адміністратором', 'profile.balance.history.kind.admin_adjustment': 'Коригування адміністратором', 'profile.plan_history.title': 'Історія тарифного плану', 'profile.plan_history.empty': 'Історія змін тарифу поки порожня', 'profile.plan_history.expires': 'До', 'profile.plan_history.days': 'днів', 'profile.plan_history.event.activated': 'Активовано', 'profile.plan_history.event.renewed': 'Продовжено', 'profile.plan_history.event.downgraded': 'Понижено', 'profile.plan_history.event.referral_reward': 'Реферальна нагорода', 'profile.plan_history.event.admin_change': 'Змінено адміністратором', 'profile.plan_history.event.expired': 'Закінчився', 'profile.show_contact_desc': 'Дозволяє клієнтам зв’язатися напряму', 'profile.site.visible.price_list': 'Прайслист', 'site.pricelist': 'Прайслист', 'status.plan_required': 'Статус недоступний на поточному тарифі', 'status.admin_not_applicable': 'Для акаунта адміністратора користувацький статус не застосовується' } }; function getTranslations(locale) { const t = translations[locale] ?? translations.el; return (key, fallback)=>t[key] ?? translations.el[key] ?? fallback ?? key; } {"finalSource":true}mapbufferedMap ConcatSourceRawSource/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ $: () => (/* binding */ getTranslations), /* harmony export */ YZ: () => (/* binding */ LOCALES) /* harmony export */ }); /* unused harmony export translations */ ReplaceSourceRawSourceSexport const LOCALES = [ { code: 'el', label: 'Ελληνικά', flag: '🇬🇷' }, { code: 'en', label: 'English', flag: '🇬🇧' }, { code: 'uk', label: 'Українська', flag: '🇺🇦' }, { code: 'ru', label: 'Русский', flag: '🇷🇺' } ]; export const translations = { el: { 'footer.slogan': 'Η εργασία σου — η φροντίδα μας! Λύνουμε κάθε ζήτημα γρήγορα και εύκολα.', 'footer.links': 'Σύνδεσμοι', 'footer.socials': 'Στα κοινωνικά δίκτυα', // Nav 'nav.home': 'Αρχική', 'nav.tasks': 'Εργασίες', 'nav.post': '+ Δημοσίευση', 'nav.dashboard': 'Οι εργασίες μου', 'nav.chat': 'Μηνύματα', 'nav.notifications': 'Ειδοποιήσεις', 'nav.profile': 'Προφίλ', 'nav.admin': 'Διαχείριση', 'nav.specialists': 'Προσφορές', 'nav.new_task': 'Νέα εργασία', 'nav.login': 'Σύνδεση', 'nav.register': 'Εγγραφή', 'nav.logout': 'Έξοδος', // Hero 'hero.title': 'Κάθε άνθρωπος έχει κάτι να προσφέρει', 'hero.subtitle': 'Βρες βοήθεια, πρόσφερε τις δεξιότητές σου ή κέρδισε χρήματα βοηθώντας άλλους', 'hero.cta.post': 'Ζήτησε βοήθεια', 'hero.cta.browse': 'Πρόσφερε βοήθεια', 'hero.cta.specialists': 'Βρες εργασία', 'hero.search.placeholder': 'Τι χρειάζεσαι; π.χ. ηλεκτρολόγος, καθαρισμός...', 'hero.specialist.title': 'Βρες εργασίες κοντά σου', 'hero.specialist.subtitle': 'Ανακάλυψε εργασίες στις κατηγορίες σου και στείλε προσφορά', 'hero.specialist.cta': 'Βρες εργασίες', 'hero.specialist.search.placeholder': 'Αναζήτηση εργασιών... π.χ. ηλεκτρολογία, καθαρισμός', 'section.categories.specialist': 'Βρες εργασίες ανά κατηγορία', 'section.cities.specialist': 'Εργασίες ανά πόλη', 'how.specialist.step1.title': 'Δημιούργησε κάρτα ειδικού', 'how.specialist.step1.desc': 'Δήλωσε κατηγορίες, δεξιότητες και περιοχές — το σύστημα βρίσκει εργασίες αυτόματα', 'how.specialist.step2.title': 'Βρες σχετικές εργασίες', 'how.specialist.step2.desc': 'Ανακάλυψε εργασίες στις κατηγορίες σου και ξεκίνα αμέσως', 'how.specialist.step3.title': 'Στείλε προσφορά & κέρδισε', 'how.specialist.step3.desc': 'Υποβάλε προσφορά με τιμή και χρόνο, επικοινωνήσε και ολοκλήρωσε εργασίες', 'stats.specialists': 'προσφορές', 'stats.tasks': 'εργασίες', 'stats.categories': 'κατηγορίες', 'stats.free': 'δωρεάν εγγραφή', 'promo.title': 'Αποκτήσε Pro δωρεάν — μόνο μέχρι το τέλος του χρόνου', 'promo.subtitle': 'Εγγράψου τώρα και απόλαυσε το πλάνο Pro χωρίς χρέωση. Η προσφορά λήγει στις 31 Δεκεμβρίου.', 'promo.cta': 'Εγγραφή δωρεάν', 'promo.days': 'μέρες', 'promo.hours': 'ώρες', 'promo.minutes': 'λεπτά', 'promo.seconds': 'δευτ.', // Sections 'section.categories': 'Δημιούργησε εργασία σε οποιαδήποτε κατηγορία', 'section.how': 'Πώς λειτουργεί', 'section.recent': 'Πρόσφατες εργασίες', 'section.all': 'Δες όλες →', 'section.more': 'ακόμα', 'section.cities': 'Πόλεις & Περιοχές', 'section.community': 'Ένα κοινοτικό έργο για όλους', 'community.subtitle': 'Το CanHelp δεν είναι απλώς μια αγορά — είναι μια κοινότητα αμοιβαίας βοήθειας. Οποιοσδήποτε έχει γνώση ή δεξιότητα μπορεί να βρει έναν πελάτη. Οποιοσδήποτε έχει ένα πρόβλημα μπορεί να βρει έναν ειδικό.', 'community.point1.title': 'Είσαι ειδικός σε κάτι;', 'community.point1.desc': 'Επισκευές, μαθήματα, σχεδιασμός, μεταφράσεις, φροντίδα — κάθε δεξιότητα αξίζει. Δημιούργησε προφίλ και βρες πελάτες κοντά σου.', 'community.point2.title': 'Χρειάζεσαι βοήθεια;', 'community.point2.desc': 'Δημοσίευσε εργασία σε λιγότερο από ένα λεπτό και λάβε προσφορές από επαληθευμένους ειδικούς στην πόλη σου.', 'community.point3.title': 'Βοήθησε το έργο να αναπτυχθεί', 'community.point3.desc': 'Το CanHelp αναπτύσσεται χάρη στις κοινότητες. Μοιράσου το σύνδεσμο με φίλους και γνωστούς — μαζί χτίζουμε κάτι χρήσιμο για όλους.', 'community.share': 'Μοιράσου με φίλους', 'community.share.copied': 'Σύνδεσμος αντιγράφηκε!', // Referral section on home page 'section.referral': 'Πρόγραμμα παραπομπών', 'referral.home.subtitle': 'Μοιράσου τον σύνδεσμό σου — κάθε νέος χρήστης που εγγράφεται μέσα από αυτόν σου αποφέρει ανταμοιβή.', 'referral.home.step1.title': 'Εγγραφείσε και λάβε σύνδεσμο', 'referral.home.step1.desc': 'Δημιούργησε λογαριασμό και βρες τον μοναδικό σου σύνδεσμο παραπομπής στο προφίλ σου.', 'referral.home.step2.title': 'Μοιράσου με φίλους', 'referral.home.step2.desc': 'Στείλε τον σύνδεσμο σε φίλους, γνωστούς ή δημοσίευσέ τον στα social media.', 'referral.home.step3.title': 'Κέρδισε ανταμοιβές', 'referral.home.step3.desc': 'Μόλις ο φίλος σου επαληθεύσει το email του, λαμβάνεις αυτόματα την ανταμοιβή σου.', 'referral.home.cta': 'Πάρε τον σύνδεσμό σου', 'referral.home.badge': 'Πρόγραμμα παραπομπών', // FAQ section 'section.faq': 'Συχνές Ερωτήσεις', 'faq.q1': 'Πώς λειτουργεί το CanHelp;', 'faq.a1': 'Δημοσίευσε μια εργασία, λάβε προσφορές από ειδικούς, επέλεξε τον καλύτερο και ξεκίνα τη συνεργασία. Είναι γρήγορο, απλό και δωρεάν για πελάτες.', 'faq.q2': 'Πόσο κοστίζει η χρήση της πλατφόρμας;', 'faq.a2': 'Η εγγραφή και η δημοσίευση εργασιών είναι εντελώς δωρεάν για πελάτες. Οι ειδικοί έχουν στη διάθεσή τους δωρεάν πλάνο καθώς και premium επιλογές.', 'faq.q3': 'Πώς μπορώ να γίνω ειδικός;', 'faq.a3': 'Κάνε εγγραφή, πήγαινε στο «Γίνε Ειδικός», συμπλήρωσε το προφίλ σου με δεξιότητες και κατηγορίες και αρχίνισε να λαμβάνεις εργασίες.', 'faq.q4': 'Πώς επιλέγω τον κατάλληλο ειδικό;', 'faq.a4': 'Δες τις αξιολογήσεις, την εμπειρία, τις δεξιότητες και το χαρτοφυλάκιο κάθε ειδικού. Επικοινώνησε μαζί του μέσω chat και συζήτα τις λεπτομέρειες πριν αποφασίσεις.', 'faq.q5': 'Τι γίνεται αν δεν είμαι ικανοποιημένος;', 'faq.a5': 'Μπορείς να αφήσεις αξιολόγηση για τον ειδικό και να τον βαθμολογήσεις από 1 έως 5 αστέρια. Οι αξιολογήσεις βοηθούν άλλους χρήστες να επιλέξουν έμπιστους επαγγελματίες.', 'faq.q6': 'Μπορώ να επικοινωνήσω με τον ειδικό πριν την αποδοχή;', 'faq.a6': 'Ναι. Μόλις λάβεις μια προσφορά, μπορείς να ανοίξεις chat με τον ειδικό, να κάνεις ερωτήσεις και να συντονίσεις τις λεπτομέρειες πριν αποφασίσεις.', 'faq.q7': 'Πόσος χρόνος χρειάζεται για να λάβω προσφορές;', 'faq.a7': 'Συνήθως μέσα σε λίγες ώρες. Οι ειδικοί λαμβάνουν ειδοποίηση για νέες εργασίες και μπορούν να απαντήσουν γρήγορα.', 'faq.q8': 'Μπορώ να δημοσιεύσω εργασία σε οποιαδήποτε πόλη της Ελλάδας;', 'faq.a8': 'Ναι! Το CanHelp καλύπτει όλη την Ελλάδα. Μπορείς να βρεις ειδικούς στην Αθήνα, στη Θεσσαλονίκη, στην Πάτρα και αλλού.', 'faq.q9': 'Τι είδη εργασιών μπορώ να βρω στο CanHelp;', 'faq.a9': 'Επισκευές, καθαρισμό, ηλεκτρολόγους, μαθήματα, σχεδιασμό, IT, μετακομίσεις, ομορφιά και πολλά άλλα. Οι κατηγορίες αυξάνονται συνεχώς.', 'faq.q10': 'Υπάρχει εφαρμογή για κινητό;', 'faq.a10': 'Ναι! Το CanHelp διατίθεται για Android και iOS. Κατέβασε την εφαρμογή και διαχειρίσου τα πάντα από το τηλέφωνό σου.', // How it works 'how.step1.title': 'Δημοσίευσε εργασία', 'how.step1.desc': 'Περίγραψε τι χρειάζεσαι και ορίζε τον προϋπολογισμό σου', 'how.step2.title': 'Λάβε προσφορές', 'how.step2.desc': 'Ειδικοί θα σου στείλουν προσφορές με τιμή και χρόνο', 'how.step3.title': 'Επίλεξε & ξεκίνα', 'how.step3.desc': 'Επέλεξε τον καλύτερο επαγγελματία και ξεκίνα τη συνεργασία', // Tasks page 'tasks.title': 'εργασίες', 'tasks.filters': 'Φίλτρα', 'tasks.search': 'Αναζήτηση', 'tasks.search.placeholder': 'Τίτλος ή λέξη κλειδί...', 'tasks.search.btn': 'Αναζήτηση', 'tasks.publish': 'Δημοσίευση', 'tasks.category.all': 'Όλες', 'tasks.category.all_in': 'Όλα στην', 'tasks.category.label': 'Κατηγορία', 'tasks.location.label': 'Πόλη', 'tasks.location.placeholder': 'π.χ. Αθήνα', 'tasks.empty': 'Δεν βρέθηκαν εργασίες', 'tasks.empty.cta': 'Δημοσίευσε την πρώτη', // Task detail 'task.status.open': 'Ανοιχτή', 'task.status.in_progress': 'Σε εξέλιξη', 'task.status.completed': 'Ολοκληρωμένη', 'task.status.cancelled': 'Ακυρωμένη', 'task.status.draft': 'Πρόχειρο', 'task.budget': 'Προϋπολογισμός', 'task.location': 'Τοποθεσία', 'task.deadline': 'Ημερομηνία έναρξης', 'task.expires_at': 'Ενεργό έως', 'task.created_at': 'Δημιουργήθηκε', 'task.customer': 'Πελάτης', 'task.offer.btn': 'Υποβολή προσφοράς', 'task.invite.banner_title': 'Σας προσκαλούν σε αυτήν την εργασία', 'task.invite.banner_hint': 'Ο πελάτης σας πρόσκαλεσε προσωπικά', 'task.invite.accept': 'Αποστολή προσφοράς', 'task.invite.decline': 'Άρνηση', 'offer.accept': 'Αποδοχή', 'offer.decline': 'Απόρριψη', 'task.complete': 'Ολοκλήρωση εργασίας', 'task.complete.confirm': 'Να ολοκληρωθεί η εργασία;', 'task.edit': 'Επεξεργασία', 'task.status_label': 'Κατάσταση', 'task.yours': 'Η εργασία σου', 'task.offer.yours': 'Η προσφορά σου', 'review.leave': 'Άφησε αξιολόγηση', 'review.rating': 'Βαθμολογία', 'review.comment': 'Σχόλιο', 'review.comment.placeholder': 'Πες μας για την εμπειρία σου...', 'review.submit': 'Υποβολή αξιολόγησης', 'review.submitting': 'Αποστολή...', 'review.done': 'Η αξιολόγηση καταχωρήθηκε!', 'profile.reviews': 'Αξιολογήσεις', 'profile.no_reviews': 'Δεν υπάρχουν αξιολογήσεις ακόμα', 'profile.rating': 'Βαθμολογία', 'profile.skills.label': 'Δεξιότητες', 'profile.member_since': 'Μέλος από', 'task.offers': 'Προσφορές', 'task.offers.none': 'Δεν υπάρχουν ακόμα προσφορές', // Create task 'create.title': 'Δημοσίευση εργασίας', 'create.field.title': 'Τίτλος', 'create.field.description': 'Περιγραφή', 'create.field.category': 'Κατηγορία', 'create.field.category.select': 'Επιλέξτε...', 'create.field.location': 'Τοποθεσία', 'create.field.location.any': 'Οπουδήποτε', 'create.field.location.all': 'Ολόκληρη η πόλη', 'create.field.budget': 'Προϋπολογισμός (€)', 'create.field.deadline': 'Ημερομηνία έναρξης', 'create.field.expires_at': 'Αγγελία ενεργή έως', 'create.field.expires_at.days': '{n} ημέρες', 'create.field.budget_negotiable': 'Η τιμή είναι διαπραγματεύσιμη', 'create.field.time_slot': 'Χρόνος εκτέλεσης', 'create.field.time_slot.any': 'Οποιαδήποτε', 'create.field.time_slot.morning': 'Πρωινό (08:00–13:00)', 'create.field.time_slot.afternoon': 'Μεσημέρι (13:00–18:00)', 'create.field.time_slot.evening': 'Βράδυ (18:00–22:00)', 'create.field.time_slot.weekend': 'Σαββατοκύριακο', 'create.field.address': 'Διεύθυνση (προαιρετικά)', 'create.field.address.district': 'Συνοικία', 'create.field.address.street': 'Οδός', 'create.field.address.house': 'Αριθμός', 'create.field.confidential': 'Εμπιστευτική σημείωση', 'create.field.confidential.placeholder': 'Λεπτομέρειες που θα δει μόνο ο αναδοχόμενος...', 'create.field.confidential.hint': 'Δεν εμφανίζεται δημόσια', 'create.field.photos': 'Φωτογραφίες', 'create.field.photos.add': 'Προσθήκη φωτογραφίας', 'create.field.photos.uploading': 'Ανέβασμα...', 'task.budget_negotiable': 'Τιμή διαπραγματεύσιμη', 'task.time_slot': 'Χρόνος', 'task.confidential': 'Εμπιστευτική σημείωση', 'create.field.title.placeholder': 'π.χ. Καθαρισμός διαμερίσματος 80τμ', 'create.field.description.placeholder': 'Περίγραψε λεπτομερώς τι χρειάζεσαι...', 'create.field.location.placeholder': 'π.χ. Αθήνα, Κολωνάκι', 'create.field.budget.placeholder': 'π.χ. 100', 'create.submit': 'Δημοσίευση εργασίας', 'create.submitting': 'Δημοσίευση...', // Auth 'login.title': 'Καλωσόρισες', 'login.subtitle': 'Σύνδεση στο CanHelp', 'login.email': 'Email', 'login.password': 'Κωδικός', 'login.submit': 'Σύνδεση', 'login.submitting': 'Σύνδεση...', 'login.error': 'Λάθος email ή κωδικός', 'login.unverified.title': 'Επιβεβαιώστε το email σας', 'login.unverified.desc': 'Στείλαμε σύνδεσμο επαλήθευσης στο email σας. Ελέγξτε τα εισερχόμενα (ή spam) και πατήστε το σύνδεσμο.', 'login.unverified.resend': 'Αποστολή νέου email επαλήθευσης', 'login.unverified.sending': 'Αποστολή...', 'login.unverified.sent': '✓ Εστάλη — ελέγξτε τα εισερχόμενα', 'profile.email.verified': 'Email επαληθεύτηκε', 'profile.email.not_verified': 'Email δεν επαληθεύτηκε', 'login.no_account': 'Δεν έχεις λογαριασμό;', 'login.register_link': 'Εγγραφή', 'login.forgot_password': 'Ξέχασα τον κωδικό', 'login.or_continue_with': 'ή συνεχίστε με', 'login.continue_google': 'Σύνδεση με Google', 'forgot.title': 'Ξέχασα τον κωδικό', 'forgot.subtitle': 'Εισάγετε το email σας για να λάβετε σύνδεσμο ανάκτησης', 'forgot.email': 'Email', 'forgot.submit': 'Αποστολή', 'forgot.submitting': 'Αποστολή...', 'forgot.sent.title': 'Ελέγξτε τα εισερχόμενά σας', 'forgot.sent.desc': 'Αν υπάρχει λογαριασμός με αυτό το email, θα σας στείλουμε σύνδεσμο ανάκτησης κωδικού.', 'forgot.back_to_login': 'Επιστροφή στη σύνδεση', 'forgot.error': 'Αποτυχία αποστολής. Ελέγξτε το email σας ή δοκιμάστε ξανά.', 'forgot.error.not_found': 'Δεν βρέθηκε λογαριασμός με αυτό το email.', 'forgot.error.send_failed': 'Αποτυχία αποστολής email. Δοκιμάστε ξανά αργότερα', 'reset.title': 'Νέος κωδικός', 'reset.subtitle': 'Εισάγετε τον νέο σας κωδικό', 'reset.password': 'Νέος κωδικός', 'reset.confirm': 'Επιβεβαίωση κωδικού', 'reset.submit': 'Αλλαγή κωδικού', 'reset.submitting': 'Αποθήκευση...', 'reset.success': 'Ο κωδικός άλλαξε επιτυχώς. Ανακατεύθυνση στη σύνδεση...', 'reset.back_to_login': 'Επιστροφή στη σύνδεση', 'reset.error.mismatch': 'Οι κωδικοί δεν ταιριάζουν', 'reset.error.invalid': 'Μη έγκυρος σύνδεσμος. Παρακαλώ ζητήστε νέο.', 'register.title': 'Εγγραφή', 'register.subtitle': 'Δημιουργία λογαριασμού στο CanHelp', 'register.first_name': 'Όνομα', 'register.last_name': 'Επώνυμο', 'register.email': 'Email', 'register.password': 'Κωδικός (min 8 χαρακτήρες)', 'register.role': 'Ρόλος', 'register.role.customer': 'Χρήστης', 'register.role.customer.desc': 'Δημοσιεύω εργασίες', 'register.role.specialist': 'Ειδικός', 'register.role.specialist.desc': 'Αναλαμβάνω εργασίες', 'register.submit': 'Δημιουργία λογαριασμού', 'register.submitting': 'Εγγραφή...', 'register.has_account': 'Έχεις ήδη λογαριασμό;', 'register.login_link': 'Σύνδεση', 'register.continue_google': 'Εγγραφή με Google', 'register.check_email.title': 'Ελέγξτε το email σας', 'register.check_email.desc': 'Στείλαμε σύνδεσμο επαλήθευσης στη διεύθυνση email σας. Ελέγξτε τα εισερχόμενα (ή spam) και πατήστε τον σύνδεσμο.', 'register.check_email.login': 'Επιστροφή στη σύνδεση', 'register.captcha_failed': 'Η επαλήθευση CAPTCHA απέτυχε. Παρακαλώ δοκιμάστε ξανά.', // Dashboard 'dashboard.title': 'Πίνακας ελέγχου', 'dashboard.new_task': '+ Νέα εργασία', 'dashboard.onboarding.title': 'Καλωσήλθατε στο CanHelp 👋', 'dashboard.onboarding.subtitle': 'Διαλέξτε πώς θέλετε να ξεκινήσετε.', 'dashboard.onboarding.helper.title': 'Πρόσφερε τη βοήθειά σου', 'dashboard.onboarding.helper.desc': 'Συμπλήρωσε το προφίλ σου — δεξιότητες, κατηγορίες και περιοχές. Παίρνει μόνο λίγα λεπτά και αρχίζεις να δέχεσαι παραγγελίες.', 'dashboard.onboarding.helper.cta': 'Συμπλήρωσε το προφίλ', 'dashboard.onboarding.requester.title': 'Χρειάζεσαι βοήθεια;', 'dashboard.onboarding.requester.desc': 'Δημοσίευσε μια εργασία και οι βοηθοί θα σου στείλουν προσφορές.', 'dashboard.onboarding.requester.cta': 'Δημοσίευσε εργασία', 'dashboard.my_tasks': 'Οι εργασίες μου', 'dashboard.my_offers': 'Οι προσφορές μου', 'dashboard.invitations': 'Προσκλήσεις για εργασία', 'dashboard.offers_count': 'προσφορές', 'dashboard.declined_count': 'απορρίφθηκαν', 'dashboard.completed_tasks': 'Ολοκληρωμένες εργασίες', 'dashboard.completed_offers': 'Ολοκληρωμένες προσφορές', 'dashboard.review_pending': 'Η αξιολόγηση δεν έχει υποβληθεί ακόμα', 'tasks.new.top_specialists': 'Κορυφαίοι ειδικοί', 'tasks.new.select_category': 'Επιλέξτε κατηγορία για να δείτε ειδικούς', 'tasks.new.invite': 'Πρόσκληση', 'tasks.new.invited': 'Επιλέχθηκε ✓', 'reviews.count': 'αξιολογήσεις', 'filter.location': 'Τοποθεσία', 'filter.language': 'Γλώσσες', 'filter.language.any': 'Οποιαδήποτε γλώσσα', 'filter.category.all': 'Όλες οι κατηγορίες', 'user.categories': 'Κατηγορίες', 'user.work_area': 'Περιοχή εργασίας', 'user.specialist_cards': 'Κάρτες υπηρεσιών', 'card.skills': 'Δεξιότητες', 'card.categories': 'Κατηγορίες', 'card.geography': 'Περιοχή εργασίας', 'card.portfolio': 'Χαρτοφυλάκιο', 'card.close': 'Κλείσιμο', 'dashboard.tasks.empty': 'Δεν έχεις δημοσιεύσει εργασίες', 'dashboard.tasks.empty.cta': 'Δημοσίευσε την πρώτη σου', 'dashboard.tasks.add_new': 'Πρόσθεσε νέα εργασία', 'dashboard.offers.empty': 'Δεν έχεις υποβάλλει προσφορές', 'dashboard.offers.empty.cta': 'Βρες εργασίες', 'dashboard.customer.specialists_title': 'Ψάχνεις εκτελεστή;', 'dashboard.customer.specialists_hint': 'Δες προφίλ ειδικών, διάβασε αξιολογήσεις και κάλεσέ τους στις εργασίες σου', 'dashboard.customer.specialists_cta': 'Βρες ειδικό', 'dashboard.customer.how_title': 'Πώς λειτουργεί', 'dashboard.customer.step1': 'Δημιούργησε εργασία με περιγραφή και προϋπολογισμό', 'dashboard.customer.step2': 'Οι ειδικοί θα στείλουν προσφορές με τιμή και χρόνο', 'dashboard.customer.step3': 'Επίλεξε τον κατάλληλο και ξεκίνα τη συνεργασία', // Notifications 'notif.title': 'Ειδοποιήσεις', 'notif.mark_all': 'Σήμανση όλων ως αναγνωσμένα', 'notif.empty': 'Δεν υπάρχουν ειδοποιήσεις', 'notif.type.generic': 'Ειδοποίηση', 'notif.type.new_offer': 'Νέα προσφορά', 'notif.type.offer_accepted': 'Η προσφορά σας έγινε δεκτή', 'notif.type.offer_declined': 'Η προσφορά σας απορρίφθηκε', 'notif.type.task_completed': 'Η εργασία ολοκληρώθηκε', 'notif.type.task_cancelled': 'Η εργασία ακυρώθηκε', 'notif.type.new_message': 'Νέο μήνυμα', 'notif.type.new_review': 'Νέα αξιολόγηση', 'notif.type.task_invite': 'Πρόσκληση σε εργασία', 'notif.type.referral_reward': 'Ανταμοιβή παραπομπής', 'notif.type.specialist_card_submitted': 'Η κάρτα στάλθηκε για έλεγχο', 'notif.type.specialist_card_approved': 'Η κάρτα εγκρίθηκε', 'notif.type.specialist_card_rejected': 'Η κάρτα απορρίφθηκε', 'notif.body.new_offer': 'Νέα προσφορά για «{title}»', 'notif.body.offer_accepted': 'Η προσφορά σας για «{title}» έγινε δεκτή', 'notif.body.offer_declined': 'Η προσφορά σας για «{title}» απορρίφθηκε', 'notif.body.task_invite': 'Σας προσκαλούν για «{title}»', 'notif.body.new_review': 'Λάβατε αξιολόγηση {rating}★', 'notif.body.referral_reward': 'Προστέθηκαν {days} ημέρες πρόσβασης στο πλάνο «{plan}» στον λογαριασμό σας!', 'notif.body.specialist_card_submitted': 'Η κάρτα «{title}» στάλθηκε για έλεγχο', 'notif.body.specialist_card_approved': 'Η κάρτα «{title}» εγκρίθηκε και δημοσιεύτηκε', 'notif.body.specialist_card_rejected': 'Η κάρτα «{title}» δεν εγκρίθηκε. Διορθώστε την και στείλτε την ξανά.', // Offer status 'offer.status.pending': 'Εκκρεμεί', 'offer.status.accepted': 'Αποδεκτή', 'offer.status.declined': 'Απορρίφθηκε', 'offer.status.withdrawn': 'Αποσύρθηκε', 'offer.status.other_accepted': 'Επιλέχθηκε άλλος ειδικός', // Common 'common.loading': 'Φόρτωση...', 'common.error': 'Σφάλμα', 'common.save': 'Αποθήκευση', 'common.saving': 'Αποθήκευση...', 'common.cancel': 'Ακύρωση', 'common.add': 'Προσθήκη', 'common.close': 'Κλείσιμο', 'common.edit': 'Επεξεργασία', 'common.delete': 'Διαγραφή', 'common.from': 'από', 'common.currency': '€', 'common.greece': 'Ελλάδα', // Chat 'chat.connected': 'Συνδεδεμένος', 'chat.disconnected': 'Αποσυνδεδεμένος', 'chat.no_rooms': 'Δεν υπάρχουν συνομιλίες ακόμα', 'chat.task_fallback': 'Εργασία', 'chat.select': 'Επίλεξε συνομιλία', 'chat.no_messages': 'Δεν υπάρχουν μηνύματα', 'chat.placeholder': 'Γράψε μήνυμα... (Enter για αποστολή)', 'chat.conversation_fallback': 'Συνομιλία', 'chat.direct_chat': 'Απευθείας συνομιλία', 'chat.linked_task': 'Συνδεδεμένη εργασία', 'chat.write_btn': 'Μήνυμα', 'chat.just_now': 'μόλις τώρα', 'chat.min_ago': 'λ', 'chat.write_specialist': 'Γράψε στον ειδικό', 'chat.write_customer': 'Γράψε στον πελάτη', 'chat.notif_settings': 'Ρυθμίσεις ειδοποιήσεων', 'chat.notif_messages': 'Ειδοποιήσεις για νέα μηνύματα', 'chat.toast_title': 'Νέο μήνυμα', 'chat.toast_open': 'Άνοιγμα συνομιλίας', // Offer form 'offer.price': 'Τιμή', 'offer.price.placeholder': 'π.χ. 80', 'offer.customer_budget': 'Προϋπολογισμός πελάτη', 'offer.message': 'Μήνυμα', 'offer.optional': 'προαιρετικό', 'offer.message.placeholder': 'Παρουσίασε τον εαυτό σου, την εμπειρία σου και γιατί είσαι η καλύτερη επιλογή...', 'offer.submitting': 'Αποστολή...', // Profile 'profile.photo': 'Φωτογραφία προφίλ', 'profile.photo.change': 'Αλλαγή φωτογραφίας', 'profile.photo.hint': 'JPEG, PNG, WebP · έως 5MB', 'profile.basic_info': 'Βασικά στοιχεία', 'profile.phone': 'Τηλέφωνο', 'profile.phone.placeholder': '+30 6901234567', 'profile.bio': 'Σύντομη περιγραφή', 'profile.bio.placeholder': 'Πες μας λίγα λόγια για εσένα...', 'profile.language': 'Γλώσσα', 'profile.language.hint': 'Γλώσσα διεπαφής και email ειδοποιήσεων', 'profile.languages': 'Γλώσσες επικοινωνίας', 'profile.languages.hint': 'Επιλέξτε όλες τις γλώσσες που μιλάτε', 'profile.skills': 'Δεξιότητες', 'profile.skills.subtitle': 'Προσθέσε τις υπηρεσίες που προσφέρεις', 'profile.skills.placeholder': 'π.χ. Καθαρισμός, IT, Μαθήματα...', 'profile.role': 'Ρόλος λογαριασμού', 'profile.role.specialist': '🔧 Βοηθός', 'profile.role.admin': '👑 Admin', 'profile.role.customer': '👤 Χρήστης', 'profile.role.user': '👤 Χρήστης', 'profile.role.change': 'Για αλλαγή ρόλου επικοινωνήστε με την υποστήριξη.', 'profile.become_specialist': 'Πρόσφερε βοήθεια', 'profile.become_specialist.desc': 'Δημιούργησε το προφίλ βοηθού σου, πρόσφερε τις δεξιότητές σου και αρχίνισε να λαμβάνεις εργασίες.', 'become_specialist.hero.title': 'Πρόσφερε τις δεξιότητές σου', 'become_specialist.hero.subtitle': 'Δημιούργησε προφίλ βοηθού και λάβε αιτήματα από ανθρώπους που χρειάζονται βοήθεια', 'become_specialist.how.title': 'Πώς λειτουργεί', 'become_specialist.step1.title': 'Δημιούργησε κάρτα ειδικού', 'become_specialist.step1.desc': 'Δήλωσε κατηγορίες, δεξιότητες και περιοχές κάλυψης — το σύστημα θα βρει τις κατάλληλες εργασίες για σένα αυτόματα', 'become_specialist.step2.title': 'Βρες εργασίες', 'become_specialist.step2.desc': 'Ανακάλυψε εργασίες στις κατηγορίες σου στην ενότητα «Αναζήτηση εργασιών»', 'become_specialist.step3.title': 'Στείλε προσφορά & κέρδισε', 'become_specialist.step3.desc': 'Υποβάλε προσφορές με τιμή και χρόνο, επικοινωνήσε με πελάτες και ολοκλήρωσε εργασίες', 'become_specialist.benefits.title': 'Πλεονεκτήματα προφίλ ειδικού', 'become_specialist.benefit1': 'Αναζήτηση εργασιών ανά κατηγορία και τοποθεσία', 'become_specialist.benefit2': 'Δημόσιο προφίλ με αξιολογήσεις πελατών', 'become_specialist.benefit3': 'Πρόγραμμα διαθεσιμότητας ορατό στους πελάτες', 'become_specialist.benefit4': 'Προσθήκη σε αγαπημένα από πελάτες', 'become_specialist.cta': 'Περισσότερα', 'become_specialist.free_badge': 'Δωρεάν εγγραφή', 'profile.tab.notifications': 'Ειδοποιήσεις', 'profile.tab.reviews': 'Αξιολογήσεις', 'profile.tab.referral': 'Παραπομπές', 'profile.tab.auto_response': 'Αυτόματη απάντηση', 'profile.tab.site': 'Site', 'profile.site.title': 'Προσωπική σελίδα', 'profile.site.url_label': 'Προσωπικό site', 'profile.site.copy': 'Αντιγραφή', 'profile.site.copied': 'Αντιγράφηκε', 'profile.site.visible_title': 'Τι εμφανίζεται στη σελίδα σας', 'profile.site.visible.name': 'Όνομα και φωτογραφία', 'profile.site.visible.bio': 'Βιογραφικό', 'profile.site.visible.rating': 'Αξιολόγηση και κριτικές', 'profile.site.visible.portfolio': 'Χαρτοφυλάκιο / Κάρτες', 'profile.site.visible.contacts': 'Στοιχεία επικοινωνίας', 'profile.site.visible.full_last_name': 'Πλήρες επώνυμο', 'profile.site.visible.services': 'Κάρτες υπηρεσιών', 'profile.site.visible.reviews': 'Ενότητα κριτικών', 'profile.site.visible.status': 'Κατάσταση «Έτοιμος να βοηθήσω»', 'profile.site.theme': 'Θέμα εμφάνισης', 'profile.site.theme.dark': 'Σκοτεινό', 'profile.site.theme.light': 'Φωτεινό', 'profile.site.slug_taken': 'Αυτή η διεύθυνση είναι ήδη κατειλημμένη', 'profile.site.stats.title': 'Στατιστικά επισκεψιμότητας', 'profile.site.stats.days': 'τελευταίες 30 ημέρες', 'profile.site.stats.views': 'Προβολές', 'profile.site.stats.unique': 'Μοναδικοί επισκέπτες', 'profile.site.stats.messages': 'Μηνύματα', 'profile.site.stats.total_views': 'Συνολικές προβολές', 'profile.site.stats.total_unique': 'Μοναδικοί επισκέπτες', 'profile.site.stats.total_messages': 'Μηνύματα', 'profile.site.stats.empty': 'Δεν υπάρχουν δεδομένα ακόμη', 'profile.site.stats.loading': 'Φόρτωση στατιστικών...', 'profile.site.stats.no_slug': 'Ορίστε τη διεύθυνση του site για να δείτε στατιστικά', 'profile.site.edit_bio_hint': 'Το βιογραφικό και η φωτογραφία ρυθμίζονται στην καρτέλα «Βασικά».', 'profile.site.seo.title': 'SEO — μεταδεδομένα σελίδας', 'profile.site.seo.hint': 'Εμφανίζεται στα αποτελέσματα αναζήτησης. Αποθηκεύστε για αυτόματη μετάφραση σε όλες τις γλώσσες.', 'profile.site.seo.site_title': 'Τίτλος σελίδας', 'profile.site.seo.site_title_placeholder': 'Γιάννης Παπαδόπουλος — Υδραυλικός στην Αθήνα', 'profile.site.seo.site_desc': 'Μετα-περιγραφή', 'profile.site.seo.site_desc_placeholder': 'Σύντομη περιγραφή για τις μηχανές αναζήτησης...', 'status.can_help_now_hint': 'Η κάρτα σου εμφανίζεται ψηλότερα', 'status.need_help_hint': 'Οι ειδικοί μπορούν να σε βοηθήσουν', 'profile.referral.title': 'Πρόγραμμα παραπομπών', 'profile.referral.desc': 'Μοιράσου τον σύνδεσμο σου και κέρδισε ανταμοιβές για κάθε νέο χρήστη.', 'profile.referral.link_label': 'Ο σύνδεσμος παραπομπής σου', 'profile.referral.copy': 'Αντιγραφή', 'profile.referral.copied': 'Αντιγράφηκε!', 'profile.referral.invited_count': 'επιτυχείς παραπομπές', 'profile.referral.no_code': 'Ο κωδικός παραπομπής δεν είναι διαθέσιμος.', 'notifications.title': 'Ρυθμίσεις ειδοποιήσεων', 'notifications.email.new_tasks': 'Email για νέες εργασίες', 'notifications.email.new_tasks.desc': 'Λάβε email όταν δημοσιευτεί νέα εργασία στις κατηγορίες σου', 'notifications.messages.desc': 'Λαμβάνεις ειδοποίηση όταν έρθει νέο μήνυμα', 'notifications.saved': 'Ρυθμίσεις αποθηκεύτηκαν', 'notifications.plan_required': 'Συνδρομή απαιτείται για αυτή τη λειτουργία', 'profile.tab.info': 'Βασικά στοιχεία', 'profile.tab.finance': 'Οικονομικά', 'profile.tab.skills': 'Δεξιότητες', 'profile.tab.categories': 'Κατηγορίες', 'profile.tab.geography': 'Γεωγραφία', 'profile.specialist.categories': 'Κατηγορίες εργασιών', 'profile.specialist.categories.desc': 'Επίλεξε τις κατηγορίες στις οποίες εργάζεσαι', 'profile.specialist.geography': 'Περιοχές κάλυψης', 'profile.specialist.geography.desc': 'Επίλεξε τις πόλεις / περιοχές όπου δραστηριοποιείσαι', 'profile.saving': 'Αποθήκευση...', 'profile.upload.error': 'Σφάλμα κατά την αναφόρτωση', 'profile.saved': 'Αποθηκεύτηκε', 'profile.tab.cards': 'Προσφορές', 'profile.cards.count': 'Προσφορές', 'profile.cards.add': 'Νέα προσφορά', 'profile.cards.new_title': 'Τίτλος νέας προσφοράς', 'profile.cards.placeholder': 'π.χ. Υδραυλικά', 'profile.cards.create': 'Δημιουργία', 'profile.cards.cancel': 'Ακύρωση', 'profile.cards.empty': 'Δεν έχετε προσφορές', 'profile.cards.empty_hint': 'Δημιουργήστε την πρώτη σας κάρτα για να προβάλετε τις υπηρεσίες σας στους πελάτες.', 'profile.cards.create_first': 'Δημιουργήστε την πρώτη σας προσφορά', 'profile.cards.delete_confirm': 'Διαγραφή προσφοράς;', 'profile.listing_requirements.published_card': 'Δημοσιεύστε τουλάχιστον μία κάρτα', 'profile.listing_requirements.title': 'Το προφίλ σας δεν εμφανίζεται ακόμη στις προσφορές', 'profile.listing_requirements.hint': 'Για να γίνει ορατή η κάρτα, ολοκληρώστε αυτές τις προϋποθέσεις:', 'profile.listing_requirements.bio': 'Προσθέστε ένα σύντομο βιογραφικό στην ενότητα προφίλ', 'profile.listing_requirements.categories': 'Προσθέστε τουλάχιστον μία κατηγορία στην ενεργή κάρτα', 'profile.listing_requirements.locations': 'Προσθέστε τουλάχιστον μία τοποθεσία στην ενεργή κάρτα', 'profile.listing_requirements.card_inactive': 'Κάντε την κάρτα ενεργή', 'profile.listing_requirements.review_pending': 'Η κάρτα είναι υπό έλεγχο', 'profile.card.visibility_issue': 'Η κάρτα δεν εμφανίζεται στις προσφορές', 'profile.card.tab.main': 'Γενικά', 'profile.card.tab.skills': 'Δεξιότητες', 'profile.card.tab.categories': 'Κατηγορίες', 'profile.card.tab.geography': 'Γεωγραφία', 'profile.card.tab.portfolio': 'Γκαλερί', 'profile.card.tab.pricelist': 'Τιμοκατάλογος', 'profile.card.pricelist.empty': 'Δεν έχουν οριστεί ομάδες τιμοκαταλόγου.', 'profile.card.pricelist.add_group': 'Προσθήκη ομάδας', 'profile.card.pricelist.group_title': 'Τίτλος ομάδας', 'profile.card.pricelist.add_item': 'Προσθήκη στοιχείου', 'profile.card.pricelist.item_name': 'Υπηρεσία / εργασία', 'profile.card.pricelist.item_desc': 'Περιγραφή (προαιρετικό)', 'profile.card.pricelist.item_price': 'Τιμή', 'profile.card.pricelist.item_unit': 'Μονάδα (π.χ. /ώρα)', 'profile.card.pricelist.save_group': 'Αποθήκευση ομάδας', 'profile.card.pricelist.save_item': 'Αποθήκευση', 'profile.card.pricelist.delete_group': 'Διαγραφή ομάδας', 'profile.card.pricelist.delete_item': 'Διαγραφή', 'profile.card.active': 'Ενεργή', 'profile.card.review_pending': 'Σε αναμονή έγκρισης', 'profile.card.review_pending_hint': 'Η κάρτα σας ελέγχεται τώρα από τη διαχείριση.', 'profile.card.review_submitted': 'Η κάρτα στάλθηκε για έλεγχο', 'profile.card.review_approved': 'Η κάρτα εγκρίθηκε', 'profile.card.review_approved_hint': 'Η κάρτα σας εμφανίζεται τώρα στις προσφορές.', 'profile.card.review_rejected': 'Η κάρτα απορρίφθηκε', 'profile.card.review_rejected_hint': 'Η κάρτα σας δεν εγκρίθηκε. Διορθώστε την και στείλτε την ξανά.', 'profile.card.submit_review': 'Αποστολή για έλεγχο', 'profile.card.withdraw_review': 'Ανάκληση αίτησης', 'profile.card.unpublish': 'Αφαίρεση από δημοσίευση', 'profile.card.save': 'Αποθήκευση', 'profile.card.saved': 'Αποθηκεύτηκε', 'profile.card.delete': 'Διαγραφή', 'profile.card.skill.add': 'Προσθήκη δεξιότητας', 'profile.card.photo.add': 'Προσθήκη φωτογραφίας', 'profile.card.photo.uploading': 'Μεταφόρτωση...', 'profile.card.photo.empty': 'Δεν υπάρχουν φωτογραφίες', 'profile.card.item.title': 'Τίτλος', 'profile.card.item.desc': 'Περιγραφή', 'profile.card.item.save': 'Αποθήκευση', 'profile.card.item.cancel': 'Ακύρωση', 'profile.card.item.edit': 'Επεξεργασία', 'profile.card.description': 'Περιγραφή κάρτας', 'profile.card.desc_auto_translate': 'Κατά την αποθήκευση θα μεταφραστεί αυτόματα σε άλλες γλώσσες', 'profile.card.desc_translated': 'Υπάρχουν μεταφράσεις:', 'profile.upgrade.cards_limit': 'Όριο χαρτοφυλακίων εξαντλήθηκε', 'profile.upgrade.plan': 'Τρέχον πλάνο:', 'profile.upgrade.contact': 'Επικοινωνήστε με τον διαχειριστή για αλλαγή πλάνου', 'profile.upgrade.ok': 'Εντάξει', 'profile.plan.title': 'Πλάνο συνδρομής', 'profile.balance': 'Υπόλοιπο', 'profile.balance.topup': 'Αναπλήρωση υπολοίπου', 'profile.balance.topup.title': 'Αναπλήρωση υπολοίπου', 'profile.balance.topup.amount': 'Ποσό (σε EUR)', 'profile.balance.topup.hint': 'Επιλέξτε ποσό ή εισαγάγετε μανούαλα', 'profile.balance.topup.submit': 'Πληρωμή', 'profile.balance.topup.loading': 'Ρεδιρεκτάρισμα...', 'profile.balance.topup.error': 'Σφάλμα μετάβασης στην πληρωμή. Προσπαθήστε ξανά.', 'payment.success.title': 'Πληρωμή επιτυχής!', 'payment.success.desc': 'Το υπόλοιπό σας ενημερώθηκε.', 'payment.cancelled.title': 'Ακύρωση πληρωμής', 'payment.cancelled.desc': 'Η πληρωμή ακυρώθηκε. Κανένα χρήμα δεν χρεώθηκε.', 'payment.pending.title': 'Σε εξέλιξη...', 'payment.pending.desc': 'Επεξεργαζόμαστε την πληρωμή σας.', 'payment.back_to_profile': 'Επιστροφή στο προφίλ', 'profile.plan.basic': 'Βασικό (δωρεάν)', 'profile.plan.contact_upgrade': 'Επικοινωνήστε με τον διαχειριστή για αναβάθμιση', 'profile.plan.cards_up_to': 'Χαρτοφυλάκια: έως', 'profile.plan.cards_unlimited': 'Χαρτοφυλάκια: απεριόριστα', 'profile.plan.tasks_up_to': 'Εργασίες: έως', 'profile.plan.offers_up_to': 'Προσφορές: έως', 'profile.plan.valid_until': 'Ισχύει έως', 'profile.plan.no_expiry': 'Δεν λήγει', // Create task 'create.error': 'Σφάλμα κατά τη δημοσίευση', // Tasks list extras 'tasks.category.general': 'Γενικά', 'tasks.budget.range': 'Εύρος:', 'tasks.budget.from': 'από', 'tasks.budget.to': 'έως', 'tasks.filter.reset': 'Εκκαθάριση φίλτρων', 'tasks.load_more': 'Φόρτωση ακόμα', 'tasks.showing': 'Αποτελέσματα:', 'tasks.field.budget': 'Προϋπολογισμός, €', // Admin 'admin.title': 'Πίνακας Διαχείρισης', 'admin.tab.stats': 'Στατιστικά', 'admin.tab.users': 'Χρήστες', 'admin.tab.tasks': 'Εργασίες', 'admin.tab.reports': 'Αναφορές', 'admin.tab.moderation': 'Μονάδα ελέγχου', 'admin.stats.users': 'Χρήστες', 'admin.stats.tasks': 'Εργασίες', 'admin.stats.offers': 'Προσφορές', 'admin.stats.reviews': 'Αξιολογήσεις', 'admin.tasks.by_status': 'Εργασίες ανά κατάσταση', 'admin.col.user': 'Χρήστης', 'admin.col.email': 'Email', 'admin.col.role': 'Ρόλος', 'admin.col.registered': 'Εγγραφή', 'admin.col.status': 'Κατάσταση', 'admin.col.title': 'Τίτλος', 'admin.col.budget': 'Προϋπολογισμός', 'admin.col.created': 'Δημιουργία', 'admin.users.active': 'Ενεργός', 'admin.users.inactive': 'Ανενεργός', 'admin.users.deactivate': 'Απενεργοποίηση', 'admin.users.activate': 'Ενεργοποίηση', 'admin.tasks.cancel': 'Ακύρωση', 'admin.reports.none': 'Δεν υπάρχουν αναφορές', 'admin.moderation.none': 'Δεν βρέθηκαν προσφορές για έλεγχο', 'admin.moderation.pending': 'Σε αναμονή', 'admin.moderation.active': 'Ενεργό', 'admin.moderation.approve': 'Έγκριση', 'admin.moderation.block': 'Μπλοκάρισμα', 'admin.moderation.pending_title': 'Προσφορές προς έγκριση', 'admin.moderation.active_title': 'Ενεργές προσφορές', 'admin.moderation.pending_count': 'Σε αναμονή', 'admin.moderation.active_count': 'Ενεργές', 'admin.moderation.pending_hint': 'Νέες προσφορές που περιμένουν έγκριση', 'admin.moderation.active_hint': 'Ενεργές προσφορές που μπορείτε να μπλοκάρετε', 'admin.moderation.pending_empty': 'Δεν υπάρχουν νέες προσφορές προς έγκριση', 'admin.moderation.active_empty': 'Δεν βρέθηκαν ενεργές προσφορές', 'admin.reports.reviewed': 'Αναθεωρήθηκε', 'admin.reports.dismiss': 'Απόρριψη', 'admin.pagination.total': 'Σύνολο', 'admin.users.role.change': 'Αλλαγή ρόλου', 'admin.users.search.placeholder': 'Αναζήτηση ονόματος ή email...', 'admin.tasks.delete': 'Διαγραφή', 'admin.tasks.delete.confirm': 'Διαγραφή αυτής της εργασίας μόνιμα;', 'admin.tasks.search.placeholder': 'Αναζήτηση τίτλου...', 'admin.col.customer': 'Πελάτης', 'admin.col.reporter': 'Καταγγέλλων', 'admin.col.target': 'Στόχος', 'admin.filter.all_roles': 'Όλοι οι ρόλοι', 'admin.filter.all_statuses': 'Όλες οι καταστάσεις', 'admin.reports.target.task': 'Εργασία', 'admin.reports.target.user': 'Χρήστης', 'admin.tab.categories': 'Κατηγορίες', 'admin.tab.locations': 'Πόλεις & Περιοχές', 'admin.tab.logs': 'Αρχεία', 'admin.tab.plans': 'Πακέτα', 'admin.tab.settings': 'Ρυθμίσεις', 'admin.logs.subtab.ai': 'AI Logs', 'admin.logs.subtab.activity': 'Δραστηριότητα', 'admin.logs.subtab.mail': 'Mail', 'admin.logs.subtab.notifications': 'Ειδοποιήσεις', 'admin.notif_logs.type': 'Τύπος', 'admin.notif_logs.title': 'Τίτλος', 'admin.notif_logs.read': 'Διαβασμένο', 'admin.notif_logs.empty': 'Δεν υπάρχουν αρχεία ειδοποιήσεων', 'admin.stats.notif_chart_title': 'Ειδοποιήσεις ανά ημέρα', 'admin.stats.notif_label': 'Ειδοποιήσεις', 'admin.stats.mail_chart_title': 'Emails ανά ημέρα', 'admin.stats.mail_label': 'Emails', 'admin.filter.all': 'Όλα', 'admin.stats.specialists': 'Βοηθοί', 'admin.col.plan': 'Πακέτο', 'admin.back_home': 'Αρχική', 'admin.plans.title': 'Πακέτα συνδρομής', 'admin.plans.add': '+ Νέο πακέτο', 'admin.plans.empty': 'Δεν υπάρχουν πακέτα', 'admin.plans.form.new': 'Νέο πακέτο', 'admin.plans.form.edit': 'Επεξεργασία πακέτου', 'admin.plans.form.name': 'Όνομα', 'admin.plans.form.price': 'Τιμή (EUR)', 'admin.plans.form.old_price': 'Παλιά τιμή (EUR, προαιρετικό)', 'admin.plans.form.max_offers': 'Μέγ. προσφορές (κενό = χωρίς όριο)', 'admin.plans.form.max_cards': 'Μέγ. προσφορές (κενό = χωρίς όριο)', 'admin.plans.form.duration_days': 'Διάρκεια (ημέρες, κενό = χωρίς λήξη)', 'admin.plans.form.description': 'Περιγραφή', 'admin.plans.form.features': 'Δυνατότητες (μία ανά γραμμή)', 'admin.plans.form.notify': 'Ειδοποιήσεις νέων εργασιών', 'admin.plans.form.default': 'Προεπιλογή', 'admin.plans.form.active': 'Ενεργό', 'admin.plans.form.order': 'Σειρά', 'admin.plans.form.role': 'Ρόλος', 'admin.plans.form.tier': 'Επίπεδο', 'admin.plans.form.role.customer': 'Πελάτης', 'admin.plans.form.role.specialist': 'Βοηθός', 'admin.plans.form.tier.free': 'Δωρεάν', 'admin.plans.form.tier.pro': 'Pro', 'admin.plans.form.tier.ultimate': 'Ultimate', 'admin.plans.form.section.limits': 'Όρια (κενό = χωρίς όριο)', 'admin.plans.form.max_messages_day': 'Μέγ. μηνύματα/ημέρα', 'admin.plans.form.max_orders_day': 'Μέγ. παραγγελίες/ημέρα', 'admin.plans.form.max_skills': 'Μέγ. δεξιότητες', 'admin.plans.form.max_profiles': 'Μέγ. προφίλ', 'admin.plans.form.max_portfolio': 'Μέγ. στοιχεία χαρτοφυλακίου', 'admin.plans.form.section.boost': 'Πολλαπλασιαστές & Ενίσχυση', 'admin.plans.form.search_boost': 'Ενίσχυση αναζήτησης', 'admin.plans.form.offers_multiplier': 'Πολλαπλασιαστής προσφορών', 'admin.plans.form.section.contact': 'Δικαιώματα επικοινωνίας', 'admin.plans.form.can_contact_free': 'Επικοινωνία με δωρεάν χρήστες', 'admin.plans.form.can_contact_pro': 'Επικοινωνία με Pro χρήστες', 'admin.plans.form.can_contact_all': 'Επικοινωνία με όλους', 'admin.plans.form.can_show_contact': 'Εμφάνιση στοιχείων επικοινωνίας', 'admin.plans.form.can_view_phone': 'Προβολή τηλεφώνου', 'admin.plans.form.section.features': 'Λειτουργίες', 'admin.plans.form.upload_video': 'Μεταφόρτωση βίντεο', 'admin.plans.form.favorites': 'Αγαπημένα', 'admin.plans.form.google_calendar': 'Google Calendar', 'admin.plans.form.verified_badge': 'Σήμα επαλήθευσης', 'admin.plans.form.highlighted_reviews': 'Προβεβλημένες κριτικές', 'admin.plans.form.personal_site': 'Προσωπική σελίδα', 'admin.plans.form.can_help_now': 'Κατάσταση «Μπορώ να βοηθήσω»', 'admin.plans.form.need_help': 'Κατάσταση «Χρειάζομαι βοήθεια»', 'admin.plans.form.auto_response': 'Αυτόματη απάντηση', 'admin.plans.form.auto_match': 'Αυτόματη αντιστοίχιση', 'admin.plans.form.price_list': 'Τιμοκατάλογος', 'admin.plans.form.instant_dispatch_free': 'Άμεση αποστολή (δωρεάν)', 'admin.plans.form.instant_dispatch_pro': 'Άμεση αποστολή (Pro)', 'admin.plans.badge.default': 'Προεπιλογή', 'admin.plans.badge.inactive': 'Ανενεργό', 'admin.plans.make_default': 'Ορισμός ως προεπιλογή', 'admin.plans.tasks': 'Εργασίες', 'admin.plans.offers': 'Προσφορές', 'admin.plans.cards': 'Προσφορές', 'admin.plans.notify_tasks': 'Ειδοποιήσεις εργασιών', 'admin.plans.delete.confirm': 'Διαγραφή πακέτου', 'admin.activity.title': 'Αρχείο δραστηριότητας', 'admin.activity.event': 'Γεγονός', 'admin.activity.all_events': 'Όλα τα γεγονότα', 'admin.activity.from': 'Από', 'admin.activity.to': 'Έως', 'admin.activity.reset': 'Επαναφορά', 'admin.activity.total': 'Σύνολο', 'admin.activity.empty': 'Δεν υπάρχουν εγγραφές', 'admin.mail.event': 'Συμβάν email', 'admin.mail.all_events': 'Όλα τα email συμβάντα', 'admin.mail.from': 'Από', 'admin.mail.to': 'Έως', 'admin.mail.reset': 'Επαναφορά', 'admin.mail.total': 'Σύνολο', 'admin.mail.empty': 'Δεν υπάρχουν email logs', 'admin.mail.recipient': 'Παραλήπτης', 'admin.mail.provider': 'Πάροχος', 'admin.mail.details': 'Λεπτομέρειες', 'admin.mail.status': 'Κατάσταση', 'admin.mail.success': 'Επιτυχία', 'admin.mail.failed': 'Σφάλμα', 'admin.event.email_sent': 'Email sent', 'admin.event.email_failed': 'Email failed', 'admin.event.email_dev': 'Email DEV fallback', 'admin.event.admin_email_test_sent': 'Admin test email sent', 'admin.event.admin_email_test_failed': 'Admin test email failed', 'admin.logs.empty': 'Δεν υπάρχουν εγγραφές', 'admin.logs.date': 'Ημερομηνία', 'admin.logs.provider': 'Πάροχος', 'admin.logs.model': 'Μοντέλο', 'admin.logs.action': 'Ενέργεια', 'admin.logs.langs': 'Γλώσσες', 'admin.logs.in': 'Είσοδος', 'admin.logs.out': 'Έξοδος', 'admin.logs.total': 'Σύνολο', 'admin.logs.ms': 'ms', 'admin.logs.status': 'Κατάσταση', 'admin.stats.activity_30d': 'Δραστηριότητα 30 ημερών', 'admin.stats.tasks_label': 'Εργασίες', 'admin.stats.users_label': 'Χρήστες', 'admin.stats.specialists_label': 'Βοηθοί', 'admin.stats.tokens_title': 'Χρήση tokens (ανά μήνα)', 'admin.stats.tokens_out': 'Εξερχόμενα', 'admin.stats.tokens_in': 'Εισερχόμενα', 'admin.stats.tokens_out_label': 'Εξερχόμενα tokens', 'admin.stats.tokens_in_label': 'Εισερχόμενα tokens', 'admin.stats.cost_label': 'Κόστος (USD)', 'admin.stats.tasks_by_status': 'Εργασίες ανά κατάσταση', 'admin.task_status.open': 'Ανοιχτές', 'admin.task_status.in_progress': 'Σε εξέλιξη', 'admin.task_status.completed': 'Ολοκληρωμένες', 'admin.task_status.cancelled': 'Ακυρωμένες', 'admin.task_status.draft': 'Προσχέδια', 'admin.settings.tab.general': 'Γενικά', 'admin.settings.tab.smtp': 'E-Mail', 'admin.settings.tab.notifications': 'Ειδοποιήσεις', 'admin.settings.tab.payment': 'Πληρωμή', 'admin.settings.tab.referral': 'Παραπομπές', 'admin.settings.tab.seo': 'SEO', 'admin.settings.tab.socials': 'Κοινωνικά δίκτυα', 'admin.settings.tab.telegram': 'Telegram Bot', 'admin.settings.telegram.title': 'Ρυθμίσεις Telegram Bot', 'admin.settings.telegram.help': 'Δημιουργήστε bot μέσω @BotFather. Για chat ID χρησιμοποιήστε @userinfobot.', 'admin.settings.telegram.bot_token': 'Bot Token', 'admin.settings.telegram.admin_chat_id': 'Admin Chat ID', 'admin.settings.telegram.admin_chat_hint': 'Γράψτε /start στο bot σας, μετά στείλτε μήνυμα μέσω @userinfobot για να λάβετε το chat ID', 'admin.settings.telegram.channel_id': 'Channel ID', 'admin.settings.telegram.channels_title': 'Κανάλια ανά γλώσσα', 'admin.settings.telegram.channel_hint': 'Αναγνωριστικό δημόσιου καναλιού ή @όνομα καναλιού', 'admin.settings.telegram.notify_registrations': 'Ειδοποίηση νέων εγγραφών', 'admin.settings.telegram.notify_registrations_hint': 'Αποστολή μηνύματος στον admin κατά την εγγραφή νέου χρήστη', 'admin.settings.telegram.post_new_tasks': 'Δημοσίευση νέων εργασιών', 'admin.settings.telegram.post_new_tasks_hint': 'Αυτόματη δημοσίευση νέων εργασιών στο κανάλι', 'admin.settings.telegram.test': 'Δοκιμή', 'admin.settings.telegram.verify': 'Επαλήθευση', 'admin.settings.telegram.test_ok': 'Η σύνδεση λειτουργεί', 'admin.settings.telegram.test_fail': 'Σφάλμα σύνδεσης', 'admin.settings.socials.title': 'Σύνδεσμοι κοινωνικών δικτύων', 'admin.settings.socials.hint': 'Συμπληρωμένες εγγραφές εμφανίζονται στο υπόγειο', 'admin.settings.seo.maintenance_label': 'Λειτουργία συντήρησης', 'admin.settings.seo.maintenance_hint': 'Εμφάνιση σελίδας συντήρησης σε όλους τους επισκέπτες', 'admin.settings.seo.indexing_label': 'Ευρετηρίαση από μηχανές αναζήτησης', 'admin.settings.seo.indexing_hint': 'Επιτρέπει στις μηχανές αναζήτησης να ευρετηριάσουν τον ιστότοπο', 'admin.settings.seo.head_scripts_label': 'Scripts στο (JS)', 'admin.settings.seo.head_scripts_hint': 'Εκτελείται σε κάθε σελίδα (Google Tag Manager, analytics κ.λπ.)', 'admin.settings.seo.site_title_label': 'Τίτλος ιστότοπου', 'admin.settings.seo.site_description_label': 'Περιγραφή ιστότοπου (meta description)', 'admin.settings.referral.title': 'Πρόγραμμα παραπομπών', 'admin.settings.referral.hint': 'Επιβράβευσε χρήστες που φέρνουν νέους εγγεγραμμένους.', 'admin.settings.referral.enabled_label': 'Ενεργό', 'admin.settings.referral.enabled_hint': 'Ενεργοποίηση / απενεργοποίηση εφαρμογής ανταμοιβών', 'admin.settings.referral.customer_section': 'Για πελάτες', 'admin.settings.referral.specialist_section': 'Για βοηθούς', 'admin.settings.referral.plan_label': 'Πλάνο ανταμοιβής', 'admin.settings.referral.no_plan': '— χωρίς πλάνο —', 'admin.settings.referral.plan_hint': 'Αυτό το πλάνο θα ανατεθεί στον χρήστη που έφερε νέους. Εάν το τρέχον πλάνο του είναι υψηλότερο, θα προστεθούν μόνο οι μέρες.', 'admin.settings.referral.days_label': 'Ημέρες ανταμοιβής', 'admin.settings.referral.days_hint': 'Αριθμός ημερών που θα προστεθούν στη λήξη του πλάνου.', 'admin.settings.general.title': 'Γενικές ρυθμίσεις', 'admin.settings.general.site_name': 'Όνομα ιστότοπου', 'admin.settings.general.site_url': 'URL ιστότοπου', 'admin.settings.general.contact_email': 'Email επικοινωνίας', 'admin.settings.general.support_phone': 'Τηλέφωνο υποστήριξης', 'admin.settings.smtp.title': 'Ρυθμίσεις SMTP', 'admin.settings.smtp.hint': 'Χρησιμοποιείται για αποστολή ειδοποιήσεων email.', 'admin.settings.smtp.host': 'SMTP Host', 'admin.settings.smtp.port': 'Θύρα', 'admin.settings.smtp.encryption': 'Κρυπτογράφηση', 'admin.settings.smtp.enc.none': 'Χωρίς', 'admin.settings.smtp.enc.tls': 'STARTTLS (θύρα 587)', 'admin.settings.smtp.enc.ssl': 'SSL/TLS (θύρα 465)', 'admin.settings.smtp.username': 'Όνομα χρήστη', 'admin.settings.smtp.password': 'Κωδικός / App Password', 'admin.settings.smtp.from_name': 'Όνομα αποστολέα', 'admin.settings.smtp.from_email': 'Email αποστολέα', 'admin.settings.smtp.test': 'Αποστολή δοκιμαστικού email', 'admin.settings.smtp.sending': 'Αποστολή...', 'admin.settings.payment.hint': 'Τα στοιχεία για ePay Piraeus Bank.', 'admin.settings.env.test': 'Δοκιμαστικό (sandbox)', 'admin.settings.env.prod': 'Παραγωγή', 'admin.settings.env.label': 'Περιβάλλον', 'admin.settings.merchant_id': 'Merchant ID', 'admin.settings.api_user': 'API User', 'admin.settings.api_password': 'API Password', 'admin.settings.confirm_url': 'Confirmation URL (webhook)', 'admin.settings.cancel_url': 'Cancel URL', 'admin.settings.active': 'Ενεργό', 'admin.settings.saving': 'Αποθήκευση...', 'admin.settings.saved': '✓ Αποθηκεύτηκε', 'admin.notif.vars_hint': 'Διαθέσιμες μεταβλητές στα πρότυπα', 'admin.notif.tmpl.not_set': 'Πρότυπο δεν έχει οριστεί', 'admin.notif.tmpl.subject_label': 'Θέμα email', 'admin.notif.tmpl.body_label': 'Κείμενο email (HTML)', 'admin.notif.tmpl.save': 'Αποθήκευση', 'admin.notif.tmpl.close': 'Κλείσιμο', 'admin.notif.tmpl.translate': 'Αυτόματη μετάφραση', 'admin.notif.tmpl.translating': 'Μετάφραση...', 'admin.notif.tmpl.saving': 'Αποθήκευση...', 'admin.notif.email_verification': 'Επαλήθευση email', 'admin.notif.registration_success': 'Επιτυχής εγγραφή', 'admin.notif.password_reset': 'Επαναφορά κωδικού', 'admin.notif.new_offer': 'Νέα προσφορά', 'admin.notif.new_task': 'Νέα εργασία', 'admin.notif.offer_accepted': 'Προσφορά αποδεκτή', 'admin.notif.new_message': 'Νέο μήνυμα', 'admin.notif.offer_declined': 'Απόρριψη προσφοράς', 'admin.notif.offer_other_accepted': 'Επιλέχθηκε άλλος ειδικός', 'admin.notif.task_updated': 'Ενημέρωση εργασίας', 'admin.notif.deadline_reminder': 'Υπενθύμιση προθεσμίας', 'admin.notif.task_archived': 'Αυτόματη απόσυρση εργασίας', 'admin.notif.referral_reward': 'Ανταμοιβή παραπομπής', // Plan lifecycle email templates 'admin.email_template.plan_activated': 'Τιμολόγιο — ενεργοποίηση πλάνου', 'admin.email_template.plan_upgraded': 'Τιμολόγιο — αναβάθμιση πλάνου', 'admin.email_template.plan_downgrade_scheduled': 'Τιμολόγιο — προγραμματισμένη υποβάθμιση', 'admin.email_template.plan_downgrade_applied': 'Τιμολόγιο — εφαρμογή υποβάθμισης', 'admin.email_template.plan_renewal_reminder': 'Τιμολόγιο — υπενθύμιση ανανέωσης', 'admin.email_template.plan_insufficient_funds': 'Τιμολόγιο — ανεπαρκές υπόλοιπο', // Pricing confirm modal 'pricing.confirm.title': 'Επιβεβαίωση επιλογής πλάνου', 'pricing.confirm.plan': 'Πλάνο', 'pricing.confirm.prorated': 'Αναλογική έκπτωση', 'pricing.confirm.effective_price': 'Προς πληρωμή', 'pricing.confirm.your_balance': 'Το υπόλοιπό σας', 'pricing.confirm.downgrade_info': 'Η μετάβαση στο νέο πλάνο θα γίνει αυτόματα μετά τη λήξη της τρέχουσας περιόδου.', 'pricing.confirm.insufficient': 'Ανεπαρκές υπόλοιπο.', 'pricing.confirm.top_up': 'Ανανέωση', 'pricing.confirm.schedule_downgrade': 'Προγραμματισμός μετάβασης', 'pricing.confirm.pay': 'Πληρωμή', 'admin.user_edit.title': 'Επεξεργασία χρήστη', 'admin.user_edit.email': 'Email', 'admin.user_edit.email_verified': 'Διευθυνση email επαληθεύτηκε', 'admin.user_edit.email_not_verified': 'Email δεν έχει επαληθευτεί', 'admin.user_edit.verify_email_btn': 'Χειροκίνητη επαλήθευση', 'admin.user_edit.verify_email_done': 'Email επαληθεύτηκε!', 'admin.user_edit.id': 'ID', 'admin.user_edit.registered': 'Εγγραφή', 'admin.user_edit.last_seen': 'Τελευταία σύνδεση', 'admin.user_edit.lang': 'Γλώσσα', 'admin.user_edit.first_name': 'Όνομα', 'admin.user_edit.last_name': 'Επώνυμο', 'admin.user_edit.phone': 'Τηλέφωνο', 'admin.user_edit.bio': 'Βιογραφικό', 'admin.user_edit.role': 'Ρόλος', 'admin.user_edit.plan': 'Πακέτο', 'admin.user_edit.no_plan': '— Χωρίς πακέτο —', 'admin.user_edit.active': 'Ενεργός λογαριασμός', 'admin.user_edit.published': 'Δημοσιευμένη', 'admin.user_edit.balance': 'Υπόλοιπο (EUR)', 'admin.user_edit.skills': 'Δεξιότητες', 'admin.user_edit.tab.profile': 'Προφίλ', 'admin.user_edit.tab.account': 'Λογαριασμός', 'admin.user_edit.tab.balance': 'Υπόλοιπο', 'admin.user_edit.tab.settings': 'Ρυθμίσεις', 'admin.user_edit.tab.specialist': 'Προσφορές', 'admin.user_edit.tab.site': 'Ιστοσελίδα', 'admin.user_edit.plan_expires': 'Λήξη πλάνου', 'admin.user_edit.interface_lang': 'Γλώσσα διεπαφής', 'admin.user_edit.comm_languages': 'Γλώσσες επικοινωνίας', 'admin.user_edit.personal_site_slug': 'Προσωπική σελίδα', 'admin.user_edit.show_contact_info': 'Εμφάνιση στοιχείων επικοινωνίας', 'admin.user_edit.show_contact_info.hint': 'Ορατό στους πελάτες', 'admin.user_edit.notify_new_tasks': 'Ειδοποίηση για νέες εργασίες', 'admin.user_edit.notify_new_tasks.hint': 'Push και email ειδοποιήσεις', 'admin.user_edit.notif_messages': 'Ειδοποιήσεις μηνυμάτων', 'admin.user_edit.notif_messages.hint': 'Νέα μηνύματα στη συνομιλία', 'admin.user_edit.site_settings': 'Ρυθμίσεις προσωπικής σελίδας', 'admin.user_edit.categories': 'Κατηγορίες υπηρεσιών', 'admin.user_edit.locations': 'Περιοχές εξυπηρέτησης', 'admin.user_edit.skill_placeholder': 'Νέα δεξιότητα...', 'admin.user_edit.add_category': '— Επιλέξτε κατηγορία —', 'admin.user_edit.add_location': '— Επιλέξτε περιοχή —', 'admin.user_edit.specialist_cards': 'Προσφορές ειδικού', 'admin.user_edit.no_cards': 'Δεν βρέθηκαν προσφορές', 'admin.user_edit.card_title': 'Τίτλος προσφοράς', 'admin.user_edit.card_description': 'Περιγραφή', 'admin.balance.topup.btn': 'Αναπλήρωση', 'admin.balance.withdraw.btn': 'Αφαίρεση', 'admin.balance.modal_hint': 'Οι αλλαγές ισχύουν άμεσα και καταγράφονται στο ιστορικό', 'admin.balance.topup.title': 'Αναπλήρωση υπολοίπου', 'admin.balance.topup.amount': 'Ποσό', 'admin.balance.topup.description': 'Σχόλιο', 'admin.balance.topup.description.placeholder': 'Για παράδειγμα: bonus ή χειροκίνητη αναπλήρωση', 'admin.balance.topup.submit': 'Αναπλήρωση υπολοίπου', 'admin.balance.withdraw.title': 'Αφαίρεση υπολοίπου', 'admin.balance.withdraw.amount': 'Ποσό', 'admin.balance.withdraw.description': 'Σχόλιο', 'admin.balance.withdraw.description.placeholder': 'Για παράδειγμα: επιστροφή ή χειροκίνητη χρέωση', 'admin.balance.withdraw.submit': 'Αφαίρεση από το υπόλοιπο', 'admin.user_edit.role.customer': 'Πελάτης', 'admin.user_edit.role.user': 'Χρήστης', 'admin.user_edit.role.specialist': 'Βοηθός', 'admin.user_edit.role.admin': 'Διαχειριστής', 'common.refresh': 'Ανανέωση', 'common.back_home': 'Αρχική', 'admin.loc.hint': 'Διαχείριση πόλεων και συνοικιών', 'admin.loc.add_city': 'Νέα πόλη', 'admin.loc.add_district': 'Προσθήκη συνοικίας', 'admin.loc.new': 'Νέα τοποθεσία', 'admin.loc.edit': 'Επεξεργασία τοποθεσίας', 'admin.loc.district': 'συνοικία', 'admin.loc.empty': 'Δεν υπάρχουν τοποθεσίες', 'admin.loc.delete.confirm': 'Διαγραφή τοποθεσίας; Όλες οι συνοικίες θα διαγραφούν επίσης.', 'admin.cat.add_root': 'Νέα κατηγορία', 'admin.cat.add_sub': 'Υποκατηγορία', 'admin.cat.edit': 'Επεξεργασία', 'admin.cat.delete': 'Διαγραφή', 'admin.cat.delete.confirm': 'Διαγραφή κατηγορίας; Όλες οι υποκατηγορίες θα διαγραφούν επίσης.', 'admin.cat.slug': 'Slug', 'admin.cat.icon': 'Εικονίδιο', 'admin.cat.name_el': 'Ελληνικά', 'admin.cat.name_en': 'Αγγλικά', 'admin.cat.name_ru': 'Ρωσικά', 'admin.cat.name_uk': 'Ουκρανικά', 'admin.cat.active': 'Ενεργή', 'admin.cat.parent': 'Γονική κατηγορία', 'admin.cat.no_parent': 'Κορυφαίο επίπεδο', 'admin.cat.save': 'Αποθήκευση', 'admin.cat.cancel': 'Ακύρωση', 'admin.cat.empty': 'Δεν υπάρχουν κατηγορίες', 'admin.cat.hint': 'Διαχείριση κατηγοριών με πολυεπίπεδη ιεραρχία', 'admin.cat.new': 'Νέα κατηγορία', 'admin.cat.subcategory': 'υποκατηγορία', 'admin.cat.add_child': 'Προσθήκη υποκατηγορίας', 'admin.cat.inactive': 'Ανενεργή', 'admin.event.user_login': 'Σύνδεση', 'admin.event.user_register': 'Εγγραφή', 'admin.event.admin_user_deactivate': 'Αποκλεισμός χρήστη', 'admin.event.admin_user_activate': 'Ενεργοποίηση χρήστη', 'admin.event.admin_user_role_changed': 'Αλλαγή ρόλου', 'admin.event.admin_task_cancelled': 'Ακύρωση εργασίας', 'admin.event.admin_task_deleted': 'Διαγραφή εργασίας', 'admin.event.admin_report_reviewed': 'Αναφορά εξετάστηκε', 'admin.event.admin_report_dismissed': 'Αναφορά απορρίφθηκε', 'admin.event.task_created': 'Δημιουργία εργασίας', 'user.online': 'Σε σύνδεση', 'user.seen_minutes': 'ήταν εδώ πριν {n} λεπτά', 'user.seen_hours': 'ήταν εδώ πριν {n} ώρες', 'user.seen_yesterday': 'ήταν εδώ χθες', 'user.seen_days': 'ήταν εδώ πριν {n} μέρες', // Specialists 'specialists.title': 'Προσφορές', 'specialists.search': 'Αναζήτηση ειδικού...', 'specialists.search.btn': 'Αναζήτηση', 'specialists.empty': 'Δεν βρέθηκαν ειδικοί', 'specialists.no_bio': 'Χωρίς περιγραφή', 'specialists.view': 'Προβολή προφίλ', 'specialists.reviews': 'αξιολογήσεις', 'specialist.favorite': 'Προσθήκη στα αγαπημένα', 'specialist.unfavorite': 'Αφαίρεση από αγαπημένα', 'specialist.site_link': 'Προσωπικό site', 'favorites.specialists.title': 'Αγαπημένοι ειδικοί', 'favorites.specialists.empty': 'Δεν έχετε αγαπημένους ειδικούς', 'nav.favorites': 'Αγαπημένα', 'nav.schedule': 'Πρόγραμμα', 'nav.find_tasks': 'Αναζήτηση εργασιών', 'schedule.title': 'Το πρόγραμμά μου', 'schedule.subtitle': 'Σημειώστε τις ημέρες που είστε ελεύθεροι ή απασχολημένοι — οι πελάτες θα δουν τη διαθεσιμότητά σας', 'schedule.available': 'Ελεύθερος', 'schedule.busy': 'Απασχολημένος', 'schedule.unset': 'Μη ορισμένο', 'schedule.click_hint': '← κλικ για εναλλαγή κατάστασης', 'schedule.range_mode': 'Επιλογή εύρους', 'schedule.range_from': 'Από {date} — επιλέξτε τελική ημερομηνία', 'schedule.click_to_set': 'Κλικ για ορισμό', 'schedule.free': 'ελεύθερα', 'schedule.busy_count': 'απασχολημένα', 'schedule.free_days': 'ελεύθερες ημέρες', 'schedule.googleCalendar': 'Google Calendar', 'schedule.connectGoogle': 'Σύνδεση με Google Calendar', 'schedule.disconnectGoogle': 'Αποσύνδεση', 'schedule.connectedAs': 'Συνδεδεμένο ως', 'schedule.importFromGoogle': 'Συγχρονισμός από Google', 'schedule.gcalConnected': '✓ Google Calendar συνδέθηκε', 'schedule.gcalError': 'Σφάλμα σύνδεσης Google Calendar', 'schedule.gcalImportDone': 'Εισήχθησαν {n} ημερ. από Google Calendar', 'schedule.gcalAutoSyncNote': 'Οι αλλαγές αποστέλλονται αυτόματα στο Google Calendar', 'schedule.gcalConnectDesc': 'Συνδέστε το Google Calendar για αυτόματο συγχρονισμό', 'schedule.gcalDisconnectConfirm': 'Αποσύνδεση Google Calendar;', 'find_tasks.title': 'Αναζήτηση εργασιών', 'find_tasks.for_me': 'Για μένα', 'find_tasks.all': 'Όλες οι εργασίες', 'find_tasks.by_category': 'Ανά κατηγορία', 'find_tasks.list': 'Λίστα', 'find_tasks.already_offered': 'Προσφορά υποβλήθηκε', 'find_tasks.offer_now': 'Υποβολή προσφοράς', 'find_tasks.empty_for_me': 'Δεν βρέθηκαν εργασίες στις κατηγορίες σας', 'find_tasks.banner_hint': 'Βρείτε εργασίες που ταιριάζουν με το χαρτοφυλάκιό σας', 'find_tasks.no_cards': 'Δημιουργήστε ένα χαρτοφυλάκιο ειδικού για να δείτε εργασίες για εσάς', 'find_tasks.add_card': 'Δημιουργία χαρτοφυλακίου', 'find_tasks.search': 'Αναζήτηση εργασιών...', 'find_tasks.tasks_count': 'εργασίες', // Footer 'footer.tagline': 'Η πλατφόρμα εργασιών για την Ελλάδα', 'footer.rights': 'Όλα τα δικαιώματα διατηρούνται.', 'nav.privacy': 'Πολιτική απορρήτου', 'nav.delete_account': 'Διαγραφή λογαριασμού', 'delete_account.title': 'Αίτηση διαγραφής λογαριασμού', 'delete_account.subtitle': 'Αφού επαληθεύσουμε την αίτησή σας, θα διαγράψουμε μόνιμα τον λογαριασμό και τα δεδομένα σας εντός 30 ημερών.', 'delete_account.warning': 'Αυτή η ενέργεια δεν μπορεί να αναιρεθεί. Όλα τα δεδομένα σας θα διαγραφούν μόνιμα.', 'delete_account.reason_label': 'Αιτία (προαιρετικό)', 'delete_account.reason_placeholder': 'Πείτε μας γιατί θέλετε να διαγράψετε τον λογαριασμό σας...', 'delete_account.confirm_label': 'Επιβεβαιώνω ότι θέλω να διαγράψω μόνιμα τον λογαριασμό μου', 'delete_account.submit': 'Υποβολή αίτησης', 'delete_account.submitting': 'Αποστολή...', 'delete_account.success_title': 'Η αίτησή σας ελήφθη', 'delete_account.success_body': 'Θα επεξεργαστούμε την αίτησή σας εντός 30 ημερών και θα σας ειδοποιήσουμε μέσω email.', 'delete_account.login_required': 'Πρέπει να συνδεθείτε για να υποβάλετε αίτηση διαγραφής.', 'delete_account.login_btn': 'Σύνδεση', // App download section 'app.download_title': 'Κατεβάστε την εφαρμογή CanHelp', 'app.download_desc': 'Όλο το CanHelp — πάντα μαζί σας. Διαθέσιμο για Android και iOS.', // Nav 'nav.pricing': 'Τιμές', // Pricing page 'pricing.title': 'Τιμολόγηση', 'pricing.subtitle': 'Επιλέξτε το κατάλληλο πρόγραμμα', 'pricing.role.customer': 'Πελάτης', 'pricing.role.specialist': 'Ειδικός', 'pricing.free': 'Δωρεάν', 'pricing.per_month': 'μήνα', 'pricing.duration': 'Διάρκεια', 'pricing.days': 'ημ.', 'pricing.current_plan': 'Το πρόγραμμά σας', 'pricing.popular': 'Δημοφιλές', 'pricing.choose': 'Επιλογή', 'pricing.your_plan': 'Ενεργό πρόγραμμα', 'pricing.free_default': 'Προεπιλογή', 'pricing.compare': 'Σύγκριση λειτουργιών', 'pricing.feature': 'Λειτουργία', 'pricing.faq_note': 'Η πληρωμή γίνεται από το υπόλοιπο CanHelp. Ανατροφοδότηση διαθέσιμη στην Πληρωμή.', 'pricing.feat.messages': 'Μηνύματα / ημέρα', 'pricing.feat.orders': 'Παραγγελίες / ημέρα', 'pricing.feat.contact_all': 'Επικοινωνία με όλους', 'pricing.feat.view_phone': 'Εμφάνιση τηλεφώνου', 'pricing.feat.show_contact': 'Εμφάνιση στοιχείων επαφής', 'pricing.feat.favorites': 'Αγαπημένα', 'pricing.feat.verified_badge': 'Επαληθευμένο badge', 'pricing.feat.google_calendar': 'Google Calendar', 'pricing.feat.personal_site': 'Προσωπικό site', 'pricing.feat.auto_response': 'Αυτόματη απάντηση', 'pricing.feat.auto_match': 'Αυτόματη αντιστοίχιση', 'pricing.feat.highlighted_reviews': 'Επισημασμένες αξιολογήσεις', 'pricing.feat.portfolio': 'Στοιχεία προσφοράς', 'pricing.feat.cards': 'Αριθμός προσφορών', 'pricing.feat.notify_tasks': 'Ειδοποιήσεις νέων εργασιών', 'pricing.feat.video': 'Βίντεο στην προσφορά', // Upgrade prompt 'upgrade.available_in': 'Διαθέσιμο στο', 'upgrade.cta': 'Αναβάθμιση', // Dashboard plan block 'dashboard.plan.title': 'Το πρόγραμμά μου', 'dashboard.plan.expires': 'Λήγει σε {n} ημέρες', 'dashboard.plan.upgrade': 'Αναβάθμιση προγράμματος', 'dashboard.plan.no_plan': 'Δωρεάν πρόγραμμα', 'dashboard.plan.messages': 'Μηνύματα σήμερα', 'dashboard.plan.orders': 'Παραγγελίες σήμερα', 'dashboard.plan.limits': 'Ημερήσια όρια', 'dashboard.plan.features': 'Λειτουργίες', 'dashboard.plan.stats': 'Στατιστικά', 'dashboard.stats.cards': 'Χαρτοφυλάκια', 'dashboard.stats.maxCards': 'Μέγ. χαρτοφυλάκια', 'dashboard.stats.portfolioItems': 'Στοιχεία portfolio', 'dashboard.stats.maxPortfolioItems': 'Μέγ. στοιχεία', 'dashboard.stats.activeOffers': 'Ενεργές προσφορές', 'dashboard.stats.reviewsReceived': 'Αξιολογήσεις', 'dashboard.stats.activeTasks': 'Ενεργές εργασίες', 'dashboard.stats.completedTasks': 'Ολοκληρωμένες', 'status.can_help_now': 'Είμαι διαθέσιμος τώρα', 'status.need_help': 'Χρειάζομαι βοήθεια', 'status.active': 'Ενεργό', 'status.toggle_on': 'Ενεργοποίηση', 'status.toggle_off': 'Απενεργοποίηση', // FOMO 'fomo.missed_orders': 'Χάσατε {n} παραγγελίες', 'fomo.missed_value': 'Αξία €{v}', 'fomo.upgrade_hint': 'Αναβαθμίστε για να λαμβάνετε περισσότερες παραγγελίες', 'fomo.conversion': 'Μετατροπές εργασιών', 'fomo.active': 'Ενεργές', 'fomo.with_offers': 'Με προσφορές', 'fomo.completed': 'Ολοκληρωμένες', 'fomo.already_offered': '{n} ειδικοί έχουν ήδη απαντήσει', 'fomo.specialist_missed': 'Χάσατε {n} παραγγελίες', 'fomo.top_categories': 'Κατηγορίες', 'fomo.offers_received': 'προσφορές ελήφθησαν', 'fomo.avg_offers': 'Μέσο {n}/εργασία', 'fomo.completion_rate': 'ολοκληρωμένες', // Task auto-match 'task.auto_match': 'Αυτόματη αντιστοίχιση', 'task.auto_match_results': 'Κορυφαίοι ειδικοί', 'task.no_offer_yet': 'Δεν έχετε στείλει προσφορά ακόμα', 'task.make_offer': 'Αποστολή προσφοράς', 'auto_response.title': 'Αυτόματη Απάντηση', 'auto_response.enabled': 'Ενεργοποίηση αυτόματης απάντησης', 'auto_response.min_budget': 'Ελάχ. προϋπολογισμός', 'auto_response.max_budget': 'Μέγ. προϋπολογισμός', 'auto_response.default_price': 'Προεπιλεγμένη τιμή', 'auto_response.default_message': 'Προεπιλεγμένο μήνυμα', 'auto_response.max_per_day': 'Μέγ. αυτόματες προσφορές/ημέρα', 'auto_response.save': 'Αποθήκευση', 'auto_response.saved': 'Αποθηκεύτηκε', 'auto_response.categories': 'Κατηγορίες', 'auto_response.locations': 'Τοποθεσίες', // Personal site 'profile.personal_site': 'Προσωπικό Site', 'profile.site_slug': 'Slug URL', 'profile.site_slug_hint': 'Μόνο λατινικοί χαρακτήρες, αριθμοί, - και _', 'profile.site_open': 'Άνοιγμα site', 'profile.site_preview': 'Το site σας', 'profile.show_contact': 'Εμφάνιση στοιχείων επαφής', 'profile.show_contact_hint': 'Πελάτες με Pro/Ultimate πρόγραμμα θα βλέπουν το τηλέφωνό σας', // Google Calendar plan gate 'gcal.upgrade_required': 'Το Google Calendar απαιτεί Pro ή Ultimate πρόγραμμα', // Chat limits 'chat.limit_warning': 'Απομένουν {n} μηνύματα σήμερα', 'chat.limit_reached': 'Εξαντλήθηκαν τα μηνύματα. Αναβαθμίστε το πρόγραμμά σας', 'chat.upgrade': 'Αναβάθμιση', // Site page 'site.member_since': 'Μαζί μας από', 'site.rating': 'Βαθμολογία', 'site.completed_tasks': 'Ολοκληρώθηκαν', 'site.languages': 'Γλώσσες', 'site.photos': 'φωτ.', 'site.contact_form': 'Επικοινωνία', 'site.contact_sent': 'Το μήνυμα στάλθηκε!', 'site.contact_sent_desc': 'Ο ειδικός θα επικοινωνήσει μαζί σας σύντομα', 'site.contact_name': 'Όνομα', 'site.contact_name_ph': 'Το όνομά σας', 'site.contact_email_ph': 'your@email.com', 'site.contact_message': 'Μήνυμα', 'site.contact_message_ph': 'Περιγράψτε την εργασία σας...', 'site.contact_send': 'Αποστολή', 'site.share': 'Κοινοποίηση', 'site.speaks_languages': 'Μιλάει', 'site.message_sent': 'Το μήνυμα εστάλη!', 'site.message_sent_desc': 'Ο ειδικός θα το λάβει στη συνομιλία', 'site.message_placeholder': 'Γράψτε το μήνυμά σας...', 'site.write_to_chat': 'Γράψτε στο chat', 'site.auth_required_title': 'Απαιτείται σύνδεση', 'site.auth_required_desc': 'Για να γράψετε στο chat, χρειάζεται να συνδεθείτε στο λογαριασμό σας.', 'site.auth_login_btn': 'Σύνδεση', 'site.auth_contact_form_btn': 'Επικοινωνία μέσω φόρμας', 'specialist.services': 'Υπηρεσίες', 'portfolio.title': 'Χαρτοφυλάκιο', 'common.not_found': 'Η σελίδα δεν βρέθηκε', 'common.anonymous': 'Ανώνυμα', 'specialist_setup.page_title': 'Ρύθμιση προφίλ ειδικού', 'specialist_setup.step_of': 'Βήμα {current} από {total}', 'specialist_setup.next': 'Επόμενο', 'specialist_setup.back': 'Πίσω', 'specialist_setup.skip': 'Παράλειψη', 'specialist_setup.finish': 'Ολοκλήρωση', 'specialist_setup.go_to_profile': 'Μεταβείτε στο προφίλ', 'specialist_setup.browse_tasks': 'Εξερεύνηση εργασιών', 'specialist_setup.step1.title': 'Καλωσήλθατε!', 'specialist_setup.step1.subtitle': 'Ας ρυθμίσουμε το προφίλ σας', 'specialist_setup.step1.desc': 'Ένα πλήρες προφίλ σας βοηθά να βρείτε περισσότερους πελάτες. Ακολουθήστε τα βήματα για να δημιουργήσετε το τέλειο προφίλ ειδικού.', 'specialist_setup.step1.what_next': 'Τι θα κάνουμε:', 'specialist_setup.step1.item1': 'Συμπλήρωση βασικών πληροφοριών', 'specialist_setup.step1.item2': 'Δημιουργία κάρτας υπηρεσίας', 'specialist_setup.step1.item3': 'Προσθήκη δεξιοτήτων και κατηγοριών', 'specialist_setup.step1.item4': 'Επιλογή γεωγραφικής περιοχής', 'specialist_setup.step1.item5': 'Μεταφόρτωση φωτογραφιών χαρτοφυλακίου', 'specialist_setup.step2.title': 'Βασικό προφίλ', 'specialist_setup.step2.subtitle': 'Πείτε μας για σας', 'specialist_setup.step2.bio_label': 'Σχετικά με εμένα', 'specialist_setup.step2.bio_placeholder': 'Περιγράψτε την εμπειρία σας, τις υπηρεσίες που προσφέρετε...', 'specialist_setup.step2.phone_label': 'Τηλέφωνο', 'specialist_setup.step2.phone_placeholder': '+30 6900000000', 'specialist_setup.step2.photo_label': 'Φωτογραφία προφίλ', 'specialist_setup.step2.photo_btn': 'Μεταφόρτωση φωτογραφίας', 'specialist_setup.step2.photo_uploading': 'Μεταφόρτωση...', 'specialist_setup.step2.photo_hint': 'Εμφανίζεται στο προφίλ σας', 'specialist_setup.step3.title': 'Κάρτα υπηρεσίας', 'specialist_setup.step3.subtitle': 'Δημιουργήστε την πρώτη σας κάρτα υπηρεσίας', 'specialist_setup.step3.title_label': 'Τίτλος κάρτας', 'specialist_setup.step3.title_placeholder': 'Π.χ. Υδραυλικός, Ηλεκτρολόγος, Καθαρισμός...', 'specialist_setup.step3.desc_label': 'Περιγραφή', 'specialist_setup.step3.desc_placeholder': 'Περιγράψτε λεπτομερώς τι προσφέρετε, εμπειρία, πλεονεκτήματα...', 'specialist_setup.step3.title_required': 'Απαιτείται τίτλος', 'specialist_setup.step4.title': 'Δεξιότητες & Κατηγορίες', 'specialist_setup.step4.subtitle': 'Προσθέστε δεξιότητες και επιλέξτε κατηγορίες', 'specialist_setup.step4.skills_label': 'Δεξιότητες', 'specialist_setup.step4.skills_placeholder': 'Π.χ. Εγκατάσταση σωληνώσεων...', 'specialist_setup.step4.skills_add': 'Προσθήκη', 'specialist_setup.step4.categories_label': 'Κατηγορίες', 'specialist_setup.step5.title': 'Γεωγραφική περιοχή', 'specialist_setup.step5.subtitle': 'Πού παρέχετε υπηρεσίες;', 'specialist_setup.step5.hint': 'Επιλέξτε πόλεις ή συγκεκριμένες περιοχές', 'specialist_setup.done.title': 'Το προφίλ σας είναι έτοιμο!', 'specialist_setup.done.subtitle': 'Συγχαρητήρια! Το προφίλ σας έχει ρυθμιστεί', 'specialist_setup.done.desc': 'Τώρα μπορείτε να λαμβάνετε παραγγελίες από πελάτες. Αναζητήστε εργασίες που ταιριάζουν με τις δεξιότητές σας.', // Support 'support.title': 'Υποστήριξη', 'support.type.label': 'Τύπος αιτήματος', 'support.type.bug': 'Σφάλμα', 'support.type.suggestion': 'Πρόταση', 'support.type.other': 'Άλλο', 'support.subject': 'Θέμα', 'support.subject.placeholder': 'Σύντομη περιγραφή...', 'support.body': 'Μήνυμα', 'support.body.placeholder': 'Περιγράψτε λεπτομερώς το πρόβλημα ή την πρότασή σας...', 'support.submit': 'Αποστολή', 'support.cancel': 'Ακύρωση', 'support.error': 'Σφάλμα αποστολής. Παρακαλώ δοκιμάστε ξανά.', 'support.sent.title': 'Λάβαμε το αίτημά σας!', 'support.sent.body': 'Θα σας απαντήσουμε στο email σας το συντομότερο δυνατόν.', 'support.sent.close': 'Κλείσιμο', 'admin.tab.support': 'Υποστήριξη', 'admin.tab.backup': 'Αντίγραφα ασφαλείας', 'admin.tab.translations': 'Μεταφράσεις', 'admin.tab.dbcheck': 'Έλεγχος ΒΔ', 'admin.tab.balances': 'Υπόλοιπα', 'admin.tab.push': 'Push', 'admin.tab.referrals': 'Παραπομπές', 'admin.search': 'Αναζήτηση', 'admin.noData': 'Δεν υπάρχουν δεδομένα', 'admin.cat.order': 'Σειρά', 'admin.cat.skills': 'Δεξιότητες', 'admin.plans.form.max_tasks': 'Μέγιστες εργασίες', 'admin.settings.referral.shared_section': 'Κοινές ρυθμίσεις referral', 'admin.settings.seo.title': 'Ρυθμίσεις SEO', 'admin.backup.title': 'Αντίγραφα ασφαλείας', 'admin.backup.tables': 'Πίνακες', 'admin.backup.exportAll': 'Εξαγωγή όλων', 'admin.backup.importAll': 'Εισαγωγή όλων', 'admin.backup.exportTable': 'Εξαγωγή πίνακα', 'admin.backup.importTable': 'Εισαγωγή πίνακα', 'admin.backup.exporting': 'Εξαγωγή...', 'admin.backup.importing': 'Εισαγωγή...', 'admin.backup.exportSuccess': 'Η εξαγωγή ολοκληρώθηκε', 'admin.backup.importSuccess': 'Η εισαγωγή ολοκληρώθηκε', 'admin.backup.autoBackup': 'Αυτόματο backup', 'admin.backup.autoBackupDesc': 'Καθημερινό αυτόματο backup', 'admin.backup.storedBackups': 'Αποθηκευμένα backups', 'admin.backup.noStoredBackups': 'Δεν υπάρχουν αποθηκευμένα backups', 'admin.backup.restore': 'Επαναφορά', 'admin.backup.restoreConfirm': 'Επαναφορά από backup;', 'admin.backup.restoreSuccess': 'Η επαναφορά ολοκληρώθηκε', 'admin.backup.restoring': 'Επαναφορά...', 'admin.backup.date': 'Ημερομηνία', 'admin.backup.size': 'Μέγεθος', 'admin.backup.today': 'Σήμερα', 'admin.backup.yesterday': 'Χθες', 'admin.balance.col.operation': 'Ενέργεια', 'admin.balance.col.amount': 'Ποσό', 'admin.balance.col.result': 'Υπόλοιπο', 'admin.balance.col.description': 'Περιγραφή', 'admin.balance.col.date': 'Ημερομηνία', 'admin.balance.empty': 'Δεν υπάρχουν εγγραφές', 'admin.balance.filter.all': 'Όλες οι ενέργειες', 'admin.balance.filter.user_id': 'Φίλτρο ανά userId', 'admin.balance.kind.topup': 'Αναπλήρωση', 'admin.balance.kind.plan_purchase': 'Χρέωση πλάνου', 'admin.balance.kind.admin_topup': 'Αναπλήρωση από διαχειριστή', 'admin.balance.kind.admin_adjustment': 'Διόρθωση', 'admin.support.search': 'Αναζήτηση', 'admin.support.all_statuses': 'Όλες οι καταστάσεις', 'admin.support.all_types': 'Όλοι οι τύποι', 'admin.support.none': 'Δεν υπάρχουν αιτήματα', 'admin.support.reply': 'Απάντηση', 'admin.support.reply_placeholder': 'Πληκτρολογήστε απάντηση...', 'admin.support.send_reply': 'Αποστολή απάντησης', 'admin.support.cancel': 'Ακύρωση', 'admin.support.close': 'Κλείσιμο', 'admin.support.status.open': 'Ανοιχτό', 'admin.support.status.in_progress': 'Σε εξέλιξη', 'admin.support.status.resolved': 'Επιλύθηκε', 'admin.support.status.closed': 'Κλειστό', 'admin.support.your_reply': 'Η απάντησή σας', 'admin.user_edit.visibility_requirements.title': 'Το προφίλ δεν εμφανίζεται ακόμη στις Προσφορές', 'admin.user_edit.visibility_requirements.hint': 'Απαιτήσεις ορατότητας:', 'admin.user_edit.visibility_requirements.bio': 'Συμπληρώστε το βιογραφικό', 'admin.user_edit.visibility_requirements.published_card': 'Δημοσιεύστε τουλάχιστον μία κάρτα', 'admin.user_edit.visibility_requirements.categories': 'Προσθέστε κατηγορία σε δημοσιευμένη κάρτα', 'admin.user_edit.visibility_requirements.locations': 'Προσθέστε τοποθεσία σε δημοσιευμένη κάρτα', 'auto_response.desc': 'Αυτόματη απάντηση σε κατάλληλες εργασίες', 'auto_response.budget_range': 'Προϋπολογισμός εργασίας', 'auto_response.message_placeholder': 'Γεια σας! Μπορώ να βοηθήσω με αυτήν την εργασία...', 'profile.background.title': 'Φόντο κεφαλίδας προφίλ', 'profile.background.hint': 'Εμφανίζεται στην κεφαλίδα του δημόσιου προφίλ σε web και mobile.', 'profile.photo.uploading': 'Μεταφόρτωση...', 'profile.balance.history': 'Ιστορικό ενεργειών', 'profile.balance.history.last': 'Τελευταίες ενέργειες', 'profile.balance.history.empty': 'Δεν υπάρχουν ενέργειες', 'profile.balance.history.balance_after': 'Υπόλοιπο μετά', 'profile.balance.history.kind.topup': 'Αναπλήρωση υπολοίπου', 'profile.balance.history.kind.plan_purchase': 'Χρέωση πλάνου', 'profile.balance.history.kind.admin_topup': 'Αναπλήρωση από διαχειριστή', 'profile.balance.history.kind.admin_adjustment': 'Διόρθωση από διαχειριστή', 'profile.plan_history.title': 'Ιστορικό πλάνου', 'profile.plan_history.empty': 'Το ιστορικό πλάνου είναι άδειο', 'profile.plan_history.expires': 'Έως', 'profile.plan_history.days': 'ημέρες', 'profile.plan_history.event.activated': 'Ενεργοποιήθηκε', 'profile.plan_history.event.renewed': 'Ανανεώθηκε', 'profile.plan_history.event.downgraded': 'Υποβαθμίστηκε', 'profile.plan_history.event.referral_reward': 'Ανταμοιβή referral', 'profile.plan_history.event.admin_change': 'Αλλαγή από διαχειριστή', 'profile.plan_history.event.expired': 'Έληξε', 'profile.show_contact_desc': 'Επιτρέπει στους πελάτες να επικοινωνούν απευθείας', 'profile.site.visible.price_list': 'Τιμοκατάλογος', 'site.pricelist': 'Τιμοκατάλογος', 'status.plan_required': 'Η κατάσταση δεν είναι διαθέσιμη στο τρέχον πλάνο', 'status.admin_not_applicable': 'Η κατάσταση χρήστη δεν ισχύει για διαχειριστές' }, en: { 'footer.slogan': 'Your task — our care! We solve any issue quickly and easily.', 'footer.links': 'Links', 'footer.socials': 'Socials', 'nav.home': 'Home', 'nav.tasks': 'Tasks', 'nav.post': '+ Post task', 'nav.dashboard': 'My Tasks', 'nav.chat': 'Messages', 'nav.notifications': 'Notifications', 'nav.profile': 'Profile', 'nav.admin': 'Admin Panel', 'nav.specialists': 'Offers', 'nav.new_task': 'New task', 'nav.login': 'Login', 'nav.register': 'Register', 'nav.logout': 'Logout', 'hero.title': 'Everyone has something valuable to offer', 'hero.subtitle': 'Find help, offer your skills, or earn money helping others', 'hero.cta.post': 'Find help', 'hero.cta.browse': 'Offer your help', 'hero.cta.specialists': 'Find a job', 'hero.search.placeholder': 'What do you need? e.g. electrician, cleaning...', 'hero.specialist.title': 'Find tasks near you', 'hero.specialist.subtitle': 'Discover tasks in your categories and send your offer', 'hero.specialist.cta': 'Browse tasks', 'hero.specialist.search.placeholder': 'Search tasks... e.g. electrical, cleaning', 'section.categories.specialist': 'Find tasks by category', 'section.cities.specialist': 'Tasks by city', 'how.specialist.step1.title': 'Create a specialist card', 'how.specialist.step1.desc': 'Set your categories, skills and areas — the system finds tasks automatically', 'how.specialist.step2.title': 'Find relevant tasks', 'how.specialist.step2.desc': 'Discover tasks in your categories and get started right away', 'how.specialist.step3.title': 'Send an offer & earn', 'how.specialist.step3.desc': 'Submit an offer with price and timeline, communicate with clients and complete tasks', 'stats.specialists': 'offers', 'stats.tasks': 'tasks', 'stats.categories': 'categories', 'stats.free': 'free sign-up', 'promo.title': 'Get Pro for free — until end of year', 'promo.subtitle': 'Sign up now and enjoy the Pro plan at no cost. Offer ends December 31.', 'promo.cta': 'Sign up free', 'promo.days': 'days', 'promo.hours': 'hrs', 'promo.minutes': 'min', 'promo.seconds': 'sec', 'section.categories': 'Create a task in any category', 'section.how': 'How it works', 'section.recent': 'Recent tasks', 'section.all': 'See all →', 'section.more': 'more', 'section.cities': 'Cities & Districts', 'section.community': 'A community project for everyone', 'community.subtitle': 'CanHelp is not just a marketplace — it\'s a community of mutual help. Anyone with knowledge or a skill can find a client. Anyone with a problem can find a specialist.', 'community.point1.title': 'Are you good at something?', 'community.point1.desc': 'Repairs, tutoring, design, translation, care — every skill has value. Create a profile and find clients near you.', 'community.point2.title': 'Need help with something?', 'community.point2.desc': 'Post a task in under a minute and receive offers from verified specialists in your city.', 'community.point3.title': 'Help the project grow', 'community.point3.desc': 'CanHelp grows through communities. Share the link with friends and acquaintances — together we build something useful for everyone.', 'community.share': 'Share with friends', 'community.share.copied': 'Link copied!', // Referral section on home page 'section.referral': 'Referral Program', 'referral.home.subtitle': 'Share your link — every new user who signs up through it earns you a reward.', 'referral.home.step1.title': 'Sign up and get your link', 'referral.home.step1.desc': 'Create an account and find your unique referral link in your profile.', 'referral.home.step2.title': 'Share with friends', 'referral.home.step2.desc': 'Send the link to friends, acquaintances, or post it on social media.', 'referral.home.step3.title': 'Earn rewards', 'referral.home.step3.desc': 'Once your friend verifies their email, you automatically receive your reward.', 'referral.home.cta': 'Get your link', 'referral.home.badge': 'Referral Program', // FAQ section 'section.faq': 'Frequently Asked Questions', 'faq.q1': 'How does CanHelp work?', 'faq.a1': 'Post a task, receive offers from specialists, choose the best one and start working together. It\'s fast, simple and free for customers.', 'faq.q2': 'How much does it cost to use the platform?', 'faq.a2': 'Registration and task posting is completely free for customers. Specialists have access to a free plan as well as premium options.', 'faq.q3': 'How can I become a specialist?', 'faq.a3': 'Register, go to «Become a Specialist», fill in your profile with skills and categories, and start receiving tasks.', 'faq.q4': 'How do I choose the right specialist?', 'faq.a4': 'Check their reviews, experience, skills and portfolio. Chat with them through the platform and discuss the details before deciding.', 'faq.q5': 'What if I am not satisfied?', 'faq.a5': 'You can leave a review about the specialist and rate them from 1 to 5 stars. Reviews help other users find trusted professionals.', 'faq.q6': 'Can I contact a specialist before accepting their offer?', 'faq.a6': 'Yes. Once you receive an offer, you can open a chat with the specialist, ask questions and discuss all the details before making a decision.', 'faq.q7': 'How long does it take to receive offers?', 'faq.a7': 'Usually within a few hours. Specialists get notified about new tasks and can respond quickly.', 'faq.q8': 'Can I post a task in any city in Greece?', 'faq.a8': 'Yes! CanHelp covers all of Greece — Athens, Thessaloniki, Patras and more.', 'faq.q9': 'What types of tasks can I find on CanHelp?', 'faq.a9': 'Repairs, cleaning, electricians, tutoring, design, IT, moving, beauty and much more. Categories are constantly expanding.', 'faq.q10': 'Is there a mobile app?', 'faq.a10': 'Yes! CanHelp is available for Android and iOS. Download the app and manage everything from your phone.', 'how.step1.title': 'Post a task', 'how.step1.desc': 'Describe what you need and set your budget', 'how.step2.title': 'Receive offers', 'how.step2.desc': 'Specialists will send you offers with price and timeline', 'how.step3.title': 'Choose & start', 'how.step3.desc': 'Pick the best professional and start the collaboration', 'tasks.title': 'tasks', 'tasks.filters': 'Filters', 'tasks.search': 'Search', 'tasks.search.placeholder': 'Title or keyword...', 'tasks.search.btn': 'Search', 'tasks.publish': 'Post', 'tasks.category.all': 'All', 'tasks.category.all_in': 'All in', 'tasks.category.label': 'Category', 'tasks.location.label': 'City', 'tasks.location.placeholder': 'e.g. Athens', 'tasks.empty': 'No tasks found', 'tasks.empty.cta': 'Post the first one', 'task.status.open': 'Open', 'task.status.in_progress': 'In progress', 'task.status.completed': 'Completed', 'task.status.cancelled': 'Cancelled', 'task.status.draft': 'Draft', 'task.budget': 'Budget', 'task.location': 'Location', 'task.deadline': 'Start date', 'task.expires_at': 'Active until', 'task.created_at': 'Created', 'task.customer': 'Customer', 'task.offer.btn': 'Submit offer', 'task.invite.banner_title': "You've been invited to this task", 'task.invite.banner_hint': 'The customer personally invited you', 'task.invite.accept': 'Send offer', 'task.invite.decline': 'Decline', 'offer.accept': 'Accept', 'offer.decline': 'Decline', 'task.complete': 'Complete task', 'task.complete.confirm': 'Mark this task as complete?', 'task.edit': 'Edit', 'task.status_label': 'Status', 'task.yours': 'Your task', 'task.offer.yours': 'Your offer', 'review.leave': 'Leave a review', 'review.rating': 'Rating', 'review.comment': 'Comment', 'review.comment.placeholder': 'Tell us about your experience...', 'review.submit': 'Submit review', 'review.submitting': 'Submitting...', 'review.done': 'Review submitted!', 'profile.reviews': 'Reviews', 'profile.no_reviews': 'No reviews yet', 'profile.rating': 'Rating', 'profile.skills.label': 'Skills', 'profile.member_since': 'Member since', 'task.offers': 'Offers', 'task.offers.none': 'No offers yet', 'create.title': 'Post a task', 'create.field.title': 'Title', 'create.field.description': 'Description', 'create.field.category': 'Category', 'create.field.category.select': 'Select...', 'create.field.location': 'Location', 'create.field.location.any': 'Anywhere', 'create.field.location.all': 'Entire city', 'create.field.budget': 'Budget (€)', 'create.field.deadline': 'Start date', 'create.field.expires_at': 'Listing active for', 'create.field.expires_at.days': '{n} days', 'create.field.budget_negotiable': 'Price is negotiable', 'create.field.time_slot': 'Time slot', 'create.field.time_slot.any': 'Anytime', 'create.field.time_slot.morning': 'Morning (08:00–13:00)', 'create.field.time_slot.afternoon': 'Afternoon (13:00–18:00)', 'create.field.time_slot.evening': 'Evening (18:00–22:00)', 'create.field.time_slot.weekend': 'Weekend', 'create.field.address': 'Address (optional)', 'create.field.address.district': 'District', 'create.field.address.street': 'Street', 'create.field.address.house': 'Number', 'create.field.confidential': 'Confidential note', 'create.field.confidential.placeholder': 'Details visible only to the assigned specialist...', 'create.field.confidential.hint': 'Not shown publicly', 'create.field.photos': 'Photos', 'create.field.photos.add': 'Add photo', 'create.field.photos.uploading': 'Uploading...', 'task.budget_negotiable': 'Price negotiable', 'task.time_slot': 'Time slot', 'task.confidential': 'Confidential note', 'create.field.title.placeholder': 'e.g. Clean 80sqm apartment', 'create.field.description.placeholder': 'Describe in detail what you need...', 'create.field.location.placeholder': 'e.g. Athens, Kolonaki', 'create.field.budget.placeholder': 'e.g. 100', 'create.submit': 'Post task', 'create.submitting': 'Posting...', 'login.title': 'Welcome back', 'login.subtitle': 'Sign in to CanHelp', 'login.email': 'Email', 'login.password': 'Password', 'login.submit': 'Sign in', 'login.submitting': 'Signing in...', 'login.error': 'Invalid email or password', 'login.unverified.title': 'Verify your email address', 'login.unverified.desc': 'We sent a verification link to your email. Check your inbox (or spam) and click the link.', 'login.unverified.resend': 'Resend verification email', 'login.unverified.sending': 'Sending...', 'login.unverified.sent': '✓ Sent — check your inbox', 'profile.email.verified': 'Email verified', 'profile.email.not_verified': 'Email not verified', 'login.no_account': "Don't have an account?", 'login.register_link': 'Register', 'login.forgot_password': 'Forgot password?', 'login.or_continue_with': 'or continue with', 'login.continue_google': 'Continue with Google', 'forgot.title': 'Forgot password', 'forgot.subtitle': 'Enter your email to receive a reset link', 'forgot.email': 'Email', 'forgot.submit': 'Send reset link', 'forgot.submitting': 'Sending...', 'forgot.sent.title': 'Check your inbox', 'forgot.sent.desc': 'If an account exists with that email, we\'ll send you a password reset link.', 'forgot.back_to_login': 'Back to sign in', 'forgot.error': 'Could not send reset link. Check the email address and try again.', 'forgot.error.not_found': 'No account found with this email address.', 'forgot.error.send_failed': 'Failed to send email. Please try again later.', 'reset.title': 'New password', 'reset.subtitle': 'Enter your new password', 'reset.password': 'New password', 'reset.confirm': 'Confirm password', 'reset.submit': 'Change password', 'reset.submitting': 'Saving...', 'reset.success': 'Password changed successfully. Redirecting to sign in...', 'reset.back_to_login': 'Back to sign in', 'reset.error.mismatch': 'Passwords do not match', 'reset.error.invalid': 'Invalid or expired link. Please request a new one.', 'register.title': 'Register', 'register.subtitle': 'Create a CanHelp account', 'register.first_name': 'First name', 'register.last_name': 'Last name', 'register.email': 'Email', 'register.password': 'Password (min 8 characters)', 'register.role': 'Role', 'register.role.customer': 'User', 'register.role.customer.desc': 'I post tasks', 'register.role.specialist': 'Specialist', 'register.role.specialist.desc': 'I take on tasks', 'register.submit': 'Create account', 'register.submitting': 'Registering...', 'register.has_account': 'Already have an account?', 'register.login_link': 'Sign in', 'register.continue_google': 'Continue with Google', 'register.check_email.title': 'Check your email', 'register.check_email.desc': 'We sent a verification link to your email address. Check your inbox (or spam) and click the link.', 'register.check_email.login': 'Back to sign in', 'register.captcha_failed': 'CAPTCHA verification failed. Please complete the security check and try again.', 'dashboard.title': 'Dashboard', 'dashboard.new_task': '+ New task', 'dashboard.onboarding.title': 'Welcome to CanHelp 👋', 'dashboard.onboarding.subtitle': 'Choose how you want to get started.', 'dashboard.onboarding.helper.title': 'Offer your help', 'dashboard.onboarding.helper.desc': 'Complete your profile — skills, categories and areas. It takes a couple of minutes and you start receiving orders.', 'dashboard.onboarding.helper.cta': 'Complete your profile', 'dashboard.onboarding.requester.title': 'Need help?', 'dashboard.onboarding.requester.desc': 'Post a task and helpers will send you their offers.', 'dashboard.onboarding.requester.cta': 'Post a task', 'dashboard.my_tasks': 'My tasks', 'dashboard.my_offers': 'My offers', 'dashboard.invitations': 'Job invitations', 'dashboard.offers_count': 'offers', 'dashboard.declined_count': 'declined', 'dashboard.completed_tasks': 'Completed tasks', 'dashboard.completed_offers': 'Completed offers', 'dashboard.review_pending': 'Review not yet submitted', 'tasks.new.top_specialists': 'Top specialists', 'tasks.new.select_category': 'Select a category to see matching specialists', 'tasks.new.invite': 'Offer work', 'tasks.new.invited': 'Selected ✓', 'reviews.count': 'reviews', 'filter.location': 'Location', 'filter.language': 'Languages', 'filter.language.any': 'Any language', 'filter.category.all': 'All categories', 'user.categories': 'Categories', 'user.work_area': 'Work area', 'user.specialist_cards': 'Service cards', 'card.skills': 'Skills', 'card.categories': 'Categories', 'card.geography': 'Work area', 'card.portfolio': 'Portfolio', 'card.close': 'Close', 'dashboard.tasks.empty': "You haven't posted any tasks", 'dashboard.tasks.empty.cta': 'Post your first one', 'dashboard.tasks.add_new': 'Add a new task', 'dashboard.offers.empty': "You haven't submitted any offers", 'dashboard.offers.empty.cta': 'Find tasks', 'dashboard.customer.specialists_title': 'Looking for a specialist?', 'dashboard.customer.specialists_hint': 'Browse specialist profiles, read reviews and invite them to your tasks', 'dashboard.customer.specialists_cta': 'Find a specialist', 'dashboard.customer.how_title': 'How it works', 'dashboard.customer.step1': 'Create a task with a description and budget', 'dashboard.customer.step2': 'Specialists will send offers with price and timeline', 'dashboard.customer.step3': 'Choose the right one and start working', 'notif.title': 'Notifications', 'notif.mark_all': 'Mark all as read', 'notif.empty': 'No notifications', 'notif.type.generic': 'Notification', 'notif.type.new_offer': 'New offer', 'notif.type.offer_accepted': 'Your offer was accepted', 'notif.type.offer_declined': 'Your offer was declined', 'notif.type.task_completed': 'Task completed', 'notif.type.task_cancelled': 'Task cancelled', 'notif.type.new_message': 'New message', 'notif.type.new_review': 'New review', 'notif.type.task_invite': 'Job invitation', 'notif.type.referral_reward': 'Referral reward', 'notif.type.specialist_card_submitted': 'Card submitted for review', 'notif.type.specialist_card_approved': 'Card approved', 'notif.type.specialist_card_rejected': 'Card rejected', 'notif.body.new_offer': 'New offer for «{title}»', 'notif.body.offer_accepted': 'Your offer for «{title}» was accepted', 'notif.body.offer_declined': 'Your offer for «{title}» was declined', 'notif.body.task_invite': 'You\'ve been invited for «{title}»', 'notif.body.new_review': 'You received a {rating}★ review', 'notif.body.referral_reward': '{days} days of «{plan}» plan access have been added to your account!', 'notif.body.specialist_card_submitted': 'The card «{title}» was sent for review', 'notif.body.specialist_card_approved': 'The card «{title}» was approved and published', 'notif.body.specialist_card_rejected': 'The card «{title}» was not approved. You can fix it and submit again.', 'offer.status.pending': 'Pending', 'offer.status.accepted': 'Accepted', 'offer.status.declined': 'Declined', 'offer.status.withdrawn': 'Withdrawn', 'offer.status.other_accepted': 'Another specialist was chosen', 'common.loading': 'Loading...', 'common.error': 'Error', 'common.save': 'Save', 'common.saving': 'Saving...', 'common.cancel': 'Cancel', 'common.add': 'Add', 'common.close': 'Close', 'common.edit': 'Edit', 'common.delete': 'Delete', 'common.from': 'by', 'common.currency': '€', 'common.greece': 'Greece', // Chat 'chat.connected': 'Connected', 'chat.disconnected': 'Disconnected', 'chat.no_rooms': 'No conversations yet', 'chat.task_fallback': 'Task', 'chat.select': 'Select a conversation', 'chat.no_messages': 'No messages yet', 'chat.placeholder': 'Write a message... (Enter to send)', 'chat.conversation_fallback': 'Conversation', 'chat.direct_chat': 'Direct chat', 'chat.linked_task': 'Linked task', 'chat.write_btn': 'Message', 'chat.just_now': 'just now', 'chat.min_ago': 'm', 'chat.write_specialist': 'Write to specialist', 'chat.write_customer': 'Write to customer', 'chat.notif_settings': 'Notification settings', 'chat.notif_messages': 'Notifications for new messages', 'chat.toast_title': 'New message', 'chat.toast_open': 'Open chat', // Offer form 'offer.price': 'Price', 'offer.price.placeholder': 'e.g. 80', 'offer.customer_budget': 'Client budget', 'offer.message': 'Message', 'offer.optional': 'optional', 'offer.message.placeholder': 'Introduce yourself, your experience and why you are the best choice...', 'offer.submitting': 'Sending...', // Profile 'profile.photo': 'Profile photo', 'profile.photo.change': 'Change photo', 'profile.photo.hint': 'JPEG, PNG, WebP · up to 5MB', 'profile.basic_info': 'Basic info', 'profile.phone': 'Phone', 'profile.phone.placeholder': '+30 6901234567', 'profile.bio': 'Short bio', 'profile.bio.placeholder': 'Tell us a bit about yourself...', 'profile.language': 'Language', 'profile.language.hint': 'App interface and email notification language', 'profile.languages': 'Languages spoken', 'profile.languages.hint': 'Select all languages you speak', 'profile.skills': 'Skills', 'profile.skills.subtitle': 'Add the services you offer', 'profile.skills.placeholder': 'e.g. Cleaning, IT, Tutoring...', 'profile.role': 'Account role', 'profile.role.specialist': '🔧 Helper', 'profile.role.admin': '👑 Admin', 'profile.role.customer': '👤 User', 'profile.role.user': '👤 User', 'profile.role.change': 'To change your role please contact support.', 'profile.become_specialist': 'Offer your help', 'profile.become_specialist.desc': 'Create your helper profile, offer your skills and start receiving tasks.', 'become_specialist.hero.title': 'Offer your skills and start earning', 'become_specialist.hero.subtitle': 'Create a helper profile and receive requests from people who need help', 'become_specialist.how.title': 'How it works', 'become_specialist.step1.title': 'Create a specialist portfolio', 'become_specialist.step1.desc': 'Set your categories, skills and coverage areas — the system will automatically match you with relevant tasks', 'become_specialist.step2.title': 'Find tasks', 'become_specialist.step2.desc': 'Discover tasks in your categories in the "Find Orders" section', 'become_specialist.step3.title': 'Send an offer & earn', 'become_specialist.step3.desc': 'Submit offers with price and timeline, chat with clients and complete tasks', 'become_specialist.benefits.title': 'Specialist profile advantages', 'become_specialist.benefit1': 'Task search filtered by your categories and location', 'become_specialist.benefit2': 'Public profile with client reviews', 'become_specialist.benefit3': 'Availability schedule visible to clients', 'become_specialist.benefit4': 'Saved to favourites by clients', 'become_specialist.cta': 'Learn more', 'become_specialist.free_badge': 'Free registration', 'profile.tab.notifications': 'Notifications', 'profile.tab.reviews': 'Reviews', 'profile.tab.referral': 'Referrals', 'profile.tab.auto_response': 'Auto-response', 'profile.tab.site': 'Site', 'profile.site.title': 'Personal page', 'profile.site.url_label': 'Personal site', 'profile.site.copy': 'Copy', 'profile.site.copied': 'Copied', 'profile.site.visible_title': "What's on your page", 'profile.site.visible.name': 'Name and photo', 'profile.site.visible.bio': 'Bio', 'profile.site.visible.rating': 'Rating and reviews', 'profile.site.visible.portfolio': 'Portfolio / Cards', 'profile.site.visible.contacts': 'Contact info', 'profile.site.visible.full_last_name': 'Full last name', 'profile.site.visible.services': 'Service cards', 'profile.site.visible.reviews': 'Reviews section', 'profile.site.visible.status': '"Ready to help" status', 'profile.site.theme': 'Appearance theme', 'profile.site.theme.dark': 'Dark', 'profile.site.theme.light': 'Light', 'profile.site.slug_taken': 'This address is already taken', 'profile.site.stats.title': 'Site analytics', 'profile.site.stats.days': 'last 30 days', 'profile.site.stats.views': 'Views', 'profile.site.stats.unique': 'Unique visitors', 'profile.site.stats.messages': 'Messages', 'profile.site.stats.total_views': 'Total views', 'profile.site.stats.total_unique': 'Unique visitors', 'profile.site.stats.total_messages': 'Messages', 'profile.site.stats.empty': 'No data yet', 'profile.site.stats.loading': 'Loading analytics...', 'profile.site.stats.no_slug': 'Set your site URL to see analytics', 'profile.site.edit_bio_hint': 'Bio and photo are edited in the "Basic info" tab.', 'profile.site.seo.title': 'SEO — Page Metadata', 'profile.site.seo.hint': 'Shown in search results. Saved values are auto-translated into all languages.', 'profile.site.seo.site_title': 'Page title', 'profile.site.seo.site_title_placeholder': 'John Doe — Plumber in Athens', 'profile.site.seo.site_desc': 'Meta description', 'profile.site.seo.site_desc_placeholder': 'Brief description for search engines...', 'status.title': 'Status', 'status.can_help_now_hint': 'Your card is shown higher in search', 'status.need_help_hint': 'Specialists can offer you help', 'profile.referral.title': 'Referral program', 'profile.referral.desc': 'Share your link and earn rewards for every new user you invite.', 'profile.referral.link_label': 'Your referral link', 'profile.referral.copy': 'Copy', 'profile.referral.copied': 'Copied!', 'profile.referral.invited_count': 'successful referrals', 'profile.referral.no_code': 'Referral code is not available.', 'notifications.title': 'Notification settings', 'notifications.email.new_tasks': 'Email for new tasks', 'notifications.email.new_tasks.desc': 'Receive an email when a new task is posted in your categories', 'notifications.messages.desc': 'Receive a notification when a new message arrives', 'notifications.saved': 'Settings saved', 'notifications.plan_required': 'Not available in your plan', 'profile.tab.info': 'Basic info', 'profile.tab.finance': 'Finance', 'profile.tab.skills': 'Skills', 'profile.tab.categories': 'Categories', 'profile.tab.geography': 'Geography', 'profile.specialist.categories': 'Work categories', 'profile.specialist.categories.desc': 'Select the categories you work in', 'profile.specialist.geography': 'Coverage areas', 'profile.specialist.geography.desc': 'Select the cities / districts where you are active', 'profile.saving': 'Saving...', 'profile.upload.error': 'Error uploading photo', 'profile.saved': 'Saved', 'profile.tab.cards': 'Offers', 'profile.cards.count': 'Offers', 'profile.cards.add': 'Add offer', 'profile.cards.new_title': 'New offer title', 'profile.cards.placeholder': 'e.g. Plumbing', 'profile.cards.create': 'Create', 'profile.cards.cancel': 'Cancel', 'profile.cards.empty': 'No offers yet', 'profile.cards.empty_hint': 'Create your first card to show your services to clients.', 'profile.cards.create_first': 'Create your first offer', 'profile.cards.delete_confirm': 'Delete offer?', 'profile.background.change': 'Change background', 'profile.background.remove': 'Remove background', 'profile.listing_requirements.published_card': 'Publish at least one card', 'profile.listing_requirements.title': 'Your profile is not shown yet in offers', 'profile.listing_requirements.hint': 'To make the card visible, complete these conditions:', 'profile.listing_requirements.bio': 'Add a short bio in the main profile section', 'profile.listing_requirements.categories': 'Add at least one category to the active card', 'profile.listing_requirements.locations': 'Add at least one location to the active card', 'profile.listing_requirements.card_inactive': 'Make the card active', 'profile.listing_requirements.review_pending': 'Card is under review', 'profile.card.visibility_issue': 'Card is not shown in offers', 'profile.card.tab.main': 'General', 'profile.card.tab.skills': 'Skills', 'profile.card.tab.categories': 'Categories', 'profile.card.tab.geography': 'Geography', 'profile.card.tab.portfolio': 'Portfolio', 'profile.card.tab.pricelist': 'Price list', 'profile.card.pricelist.empty': 'No price list groups yet.', 'profile.card.pricelist.add_group': 'Add group', 'profile.card.pricelist.group_title': 'Group title', 'profile.card.pricelist.add_item': 'Add item', 'profile.card.pricelist.item_name': 'Service / work', 'profile.card.pricelist.item_desc': 'Description (optional)', 'profile.card.pricelist.item_price': 'Price', 'profile.card.pricelist.item_unit': 'Unit (e.g. /hour)', 'profile.card.pricelist.save_group': 'Save group', 'profile.card.pricelist.save_item': 'Save', 'profile.card.pricelist.delete_group': 'Delete group', 'profile.card.pricelist.delete_item': 'Delete', 'profile.card.active': 'Active', 'profile.card.review_pending': 'Pending approval', 'profile.card.review_pending_hint': 'Your card is being reviewed by the admin team.', 'profile.card.review_submitted': 'Card submitted for review', 'profile.card.review_approved': 'Card approved', 'profile.card.review_approved_hint': 'Your card is now visible in offers.', 'profile.card.review_rejected': 'Card rejected', 'profile.card.review_rejected_hint': 'Your card was not approved. Please update it and submit again.', 'profile.card.submit_review': 'Submit for review', 'profile.card.withdraw_review': 'Withdraw request', 'profile.card.unpublish': 'Unpublish', 'profile.card.save': 'Save', 'profile.card.saved': 'Saved', 'profile.card.delete': 'Delete', 'profile.card.skill.add': 'Add skill', 'profile.card.photo.add': 'Add photo', 'profile.card.photo.uploading': 'Uploading...', 'profile.card.photo.empty': 'No photos yet', 'profile.card.item.title': 'Title', 'profile.card.item.desc': 'Description', 'profile.card.item.save': 'Save', 'profile.card.item.cancel': 'Cancel', 'profile.card.item.edit': 'Edit', 'profile.card.description': 'Card description', 'profile.card.desc_auto_translate': 'Will be automatically translated into other languages on save', 'profile.card.desc_translated': 'Translations available:', 'profile.upgrade.cards_limit': 'Portfolio limit reached', 'profile.upgrade.plan': 'Current plan:', 'profile.upgrade.contact': 'Contact the administrator to change your plan', 'profile.upgrade.ok': 'Got it', 'profile.plan.title': 'Subscription plan', 'profile.balance': 'Balance', 'profile.balance.topup': 'Top Up Balance', 'profile.balance.topup.title': 'Top Up Balance', 'profile.balance.topup.amount': 'Amount (EUR)', 'profile.balance.topup.hint': 'Choose a preset or enter a custom amount', 'profile.balance.topup.submit': 'Proceed to Payment', 'profile.balance.topup.loading': 'Redirecting...', 'profile.balance.topup.error': 'Payment initiation failed. Please try again.', 'payment.success.title': 'Payment Successful!', 'payment.success.desc': 'Your balance has been updated.', 'payment.cancelled.title': 'Payment Cancelled', 'payment.cancelled.desc': 'Payment was cancelled. No charges were made.', 'payment.pending.title': 'Processing...', 'payment.pending.desc': 'Your payment is being processed.', 'payment.back_to_profile': 'Back to Profile', 'profile.plan.basic': 'Basic (free)', 'profile.plan.contact_upgrade': 'Contact admin to upgrade your plan', 'profile.plan.cards_up_to': 'Portfolio: up to', 'profile.plan.cards_unlimited': 'Portfolio: unlimited', 'profile.plan.tasks_up_to': 'Tasks: up to', 'profile.plan.offers_up_to': 'Offers: up to', 'profile.plan.valid_until': 'Valid until', 'profile.plan.no_expiry': 'No expiry', // Create task 'create.error': 'Error posting task', // Tasks list extras 'tasks.category.general': 'General', 'tasks.budget.range': 'Range:', 'tasks.budget.from': 'from', 'tasks.budget.to': 'to', 'tasks.filter.reset': 'Reset filters', 'tasks.load_more': 'Load more', 'tasks.showing': 'Results:', 'tasks.field.budget': 'Budget, €', // Admin 'admin.title': 'Admin Panel', 'admin.tab.stats': 'Statistics', 'admin.tab.users': 'Users', 'admin.tab.tasks': 'Tasks', 'admin.tab.reports': 'Reports', 'admin.tab.moderation': 'Moderation', 'admin.stats.users': 'Users', 'admin.stats.tasks': 'Tasks', 'admin.stats.offers': 'Offers', 'admin.stats.reviews': 'Reviews', 'admin.tasks.by_status': 'Tasks by status', 'admin.col.user': 'User', 'admin.col.email': 'Email', 'admin.col.role': 'Role', 'admin.col.registered': 'Registered', 'admin.col.status': 'Status', 'admin.col.title': 'Title', 'admin.col.budget': 'Budget', 'admin.col.created': 'Created', 'admin.users.active': 'Active', 'admin.users.inactive': 'Inactive', 'admin.users.deactivate': 'Deactivate', 'admin.users.activate': 'Activate', 'admin.tasks.cancel': 'Cancel', 'admin.reports.none': 'No reports', 'admin.moderation.none': 'No offers to review', 'admin.moderation.pending': 'Pending', 'admin.moderation.active': 'Active', 'admin.moderation.approve': 'Approve', 'admin.moderation.block': 'Block', 'admin.moderation.pending_title': 'Offers pending approval', 'admin.moderation.active_title': 'Active offers', 'admin.moderation.pending_count': 'Pending', 'admin.moderation.active_count': 'Active', 'admin.moderation.pending_hint': 'New offers waiting for approval', 'admin.moderation.active_hint': 'Visible offers you can block', 'admin.moderation.pending_empty': 'No new offers to approve', 'admin.moderation.active_empty': 'No active offers found', 'admin.reports.reviewed': 'Reviewed', 'admin.reports.dismiss': 'Dismiss', 'admin.pagination.total': 'Total', 'admin.users.role.change': 'Change role', 'admin.users.search.placeholder': 'Search name or email...', 'admin.tasks.delete': 'Delete', 'admin.tasks.delete.confirm': 'Permanently delete this task?', 'admin.tasks.search.placeholder': 'Search title...', 'admin.col.customer': 'Customer', 'admin.col.reporter': 'Reporter', 'admin.col.target': 'Target', 'admin.filter.all_roles': 'All roles', 'admin.filter.all_statuses': 'All statuses', 'admin.reports.target.task': 'Task', 'admin.reports.target.user': 'User', 'admin.tab.categories': 'Categories', 'admin.tab.locations': 'Cities & Districts', 'admin.tab.logs': 'Logs', 'admin.tab.plans': 'Plans', 'admin.tab.settings': 'Settings', 'admin.logs.subtab.ai': 'AI Logs', 'admin.logs.subtab.activity': 'Activity', 'admin.logs.subtab.mail': 'Mail', 'admin.logs.subtab.notifications': 'Notifications', 'admin.notif_logs.type': 'Type', 'admin.notif_logs.title': 'Title', 'admin.notif_logs.read': 'Read', 'admin.notif_logs.empty': 'No notification logs', 'admin.stats.notif_chart_title': 'Notifications per day', 'admin.stats.notif_label': 'Notifications', 'admin.stats.mail_chart_title': 'Emails per day', 'admin.stats.mail_label': 'Emails', 'admin.filter.all': 'All', 'admin.stats.specialists': 'Helpers', 'admin.col.plan': 'Plan', 'admin.back_home': 'Home', 'admin.plans.title': 'Subscription plans', 'admin.plans.add': '+ New plan', 'admin.plans.empty': 'No plans created', 'admin.plans.form.new': 'New plan', 'admin.plans.form.edit': 'Edit plan', 'admin.plans.form.name': 'Name', 'admin.plans.form.price': 'Price (EUR)', 'admin.plans.form.old_price': 'Old price (EUR, optional)', 'admin.plans.form.max_offers': 'Max offers (empty = no limit)', 'admin.plans.form.max_cards': 'Max offers (empty = no limit)', 'admin.plans.form.duration_days': 'Duration (days, empty = no expiry)', 'admin.plans.form.description': 'Description', 'admin.plans.form.features': 'Features (one per line)', 'admin.plans.form.notify': 'Notify about new tasks', 'admin.plans.form.default': 'Default', 'admin.plans.form.active': 'Active', 'admin.plans.form.order': 'Order', 'admin.plans.form.role': 'Role', 'admin.plans.form.tier': 'Tier', 'admin.plans.form.role.customer': 'Customer', 'admin.plans.form.role.specialist': 'Helper', 'admin.plans.form.tier.free': 'Free', 'admin.plans.form.tier.pro': 'Pro', 'admin.plans.form.tier.ultimate': 'Ultimate', 'admin.plans.form.section.limits': 'Limits (empty = unlimited)', 'admin.plans.form.max_messages_day': 'Max Messages/Day', 'admin.plans.form.max_orders_day': 'Max Orders/Day', 'admin.plans.form.max_skills': 'Max Skills', 'admin.plans.form.max_profiles': 'Max Profiles', 'admin.plans.form.max_portfolio': 'Max Portfolio Items', 'admin.plans.form.section.boost': 'Multipliers & Boost', 'admin.plans.form.search_boost': 'Search Boost', 'admin.plans.form.offers_multiplier': 'Offers Multiplier', 'admin.plans.form.section.contact': 'Contact Permissions', 'admin.plans.form.can_contact_free': 'Contact Free Plan users', 'admin.plans.form.can_contact_pro': 'Contact Pro Plan users', 'admin.plans.form.can_contact_all': 'Contact All users', 'admin.plans.form.can_show_contact': 'Show Contact Info', 'admin.plans.form.can_view_phone': 'View Phone', 'admin.plans.form.section.features': 'Feature Flags', 'admin.plans.form.upload_video': 'Upload Video', 'admin.plans.form.favorites': 'Favorites', 'admin.plans.form.google_calendar': 'Google Calendar', 'admin.plans.form.verified_badge': 'Verified Badge', 'admin.plans.form.highlighted_reviews': 'Highlighted Reviews', 'admin.plans.form.personal_site': 'Personal Site', 'admin.plans.form.can_help_now': 'Can Help Now Status', 'admin.plans.form.need_help': 'Need Help Status', 'admin.plans.form.auto_response': 'Auto Response', 'admin.plans.form.auto_match': 'Auto Match', 'admin.plans.form.price_list': 'Price List', 'admin.plans.form.instant_dispatch_free': 'Instant Dispatch (Free)', 'admin.plans.form.instant_dispatch_pro': 'Instant Dispatch (Pro)', 'admin.plans.badge.default': 'Default', 'admin.plans.badge.inactive': 'Inactive', 'admin.plans.make_default': 'Set as default', 'admin.plans.tasks': 'Tasks', 'admin.plans.offers': 'Offers', 'admin.plans.cards': 'Offers', 'admin.plans.notify_tasks': 'Task notifications', 'admin.plans.delete.confirm': 'Delete plan', 'admin.activity.title': 'Activity log', 'admin.activity.event': 'Event', 'admin.activity.all_events': 'All events', 'admin.activity.from': 'From', 'admin.activity.to': 'To', 'admin.activity.reset': 'Reset', 'admin.activity.total': 'Total', 'admin.activity.empty': 'No records', 'admin.mail.event': 'Email event', 'admin.mail.all_events': 'All email events', 'admin.mail.from': 'From', 'admin.mail.to': 'To', 'admin.mail.reset': 'Reset', 'admin.mail.total': 'Total', 'admin.mail.empty': 'No email logs', 'admin.mail.recipient': 'Recipient', 'admin.mail.provider': 'Provider', 'admin.mail.details': 'Details', 'admin.mail.status': 'Status', 'admin.mail.success': 'Success', 'admin.mail.failed': 'Failed', 'admin.event.email_sent': 'Email sent', 'admin.event.email_failed': 'Email failed', 'admin.event.email_dev': 'Email DEV fallback', 'admin.event.admin_email_test_sent': 'Admin test email sent', 'admin.event.admin_email_test_failed': 'Admin test email failed', 'admin.logs.empty': 'No records', 'admin.logs.date': 'Date', 'admin.logs.provider': 'Provider', 'admin.logs.model': 'Model', 'admin.logs.action': 'Action', 'admin.logs.langs': 'Languages', 'admin.logs.in': 'In', 'admin.logs.out': 'Out', 'admin.logs.total': 'Total', 'admin.logs.ms': 'ms', 'admin.logs.status': 'Status', 'admin.stats.activity_30d': 'Activity over 30 days', 'admin.stats.tasks_label': 'Tasks', 'admin.stats.users_label': 'Users', 'admin.stats.specialists_label': 'Helpers', 'admin.stats.tokens_title': 'Token usage (by month)', 'admin.stats.tokens_out': 'Output', 'admin.stats.tokens_in': 'Input', 'admin.stats.tokens_out_label': 'Output tokens', 'admin.stats.tokens_in_label': 'Input tokens', 'admin.stats.cost_label': 'Cost (USD)', 'admin.stats.tasks_by_status': 'Tasks by status', 'admin.task_status.open': 'Open', 'admin.task_status.in_progress': 'In progress', 'admin.task_status.completed': 'Completed', 'admin.task_status.cancelled': 'Cancelled', 'admin.task_status.draft': 'Drafts', 'admin.settings.tab.general': 'General', 'admin.settings.tab.smtp': 'E-Mail', 'admin.settings.tab.notifications': 'Notifications', 'admin.settings.tab.payment': 'Payment', 'admin.settings.tab.referral': 'Referrals', 'admin.settings.tab.seo': 'SEO', 'admin.settings.tab.socials': 'Socials', 'admin.settings.tab.telegram': 'Telegram Bot', 'admin.settings.telegram.title': 'Telegram Bot Settings', 'admin.settings.telegram.help': 'Create a bot via @BotFather. Use @userinfobot to get chat IDs.', 'admin.settings.telegram.bot_token': 'Bot Token', 'admin.settings.telegram.admin_chat_id': 'Admin Chat ID', 'admin.settings.telegram.admin_chat_hint': 'First send /start to your bot, then use @userinfobot to get your chat ID', 'admin.settings.telegram.channel_id': 'Channel ID', 'admin.settings.telegram.channels_title': 'Language Channels', 'admin.settings.telegram.channel_hint': 'Public channel @username or numeric ID', 'admin.settings.telegram.notify_registrations': 'Notify on new registrations', 'admin.settings.telegram.notify_registrations_hint': 'Send admin a message when a new user registers', 'admin.settings.telegram.post_new_tasks': 'Post new tasks to channel', 'admin.settings.telegram.post_new_tasks_hint': 'Automatically publish new tasks to the Telegram channel', 'admin.settings.telegram.test': 'Test', 'admin.settings.telegram.verify': 'Verify', 'admin.settings.telegram.test_ok': 'Connection successful', 'admin.settings.telegram.test_fail': 'Connection failed', 'admin.settings.socials.title': 'Social Network Links', 'admin.settings.socials.hint': 'Filled links are displayed in the site footer', 'admin.settings.seo.maintenance_label': 'Maintenance Mode', 'admin.settings.seo.maintenance_hint': 'Show a maintenance page to all visitors', 'admin.settings.seo.indexing_label': 'Search Engine Indexing', 'admin.settings.seo.indexing_hint': 'Allow search engines to index the site', 'admin.settings.seo.head_scripts_label': ' Scripts (JS)', 'admin.settings.seo.head_scripts_hint': 'Runs on every page (Google Tag Manager, analytics, etc.)', 'admin.settings.seo.site_title_label': 'Site Title', 'admin.settings.seo.site_description_label': 'Site Description (meta description)', 'admin.settings.referral.title': 'Referral program', 'admin.settings.referral.hint': 'Reward users who bring new registrations.', 'admin.settings.referral.enabled_label': 'Enabled', 'admin.settings.referral.enabled_hint': 'Enable / disable reward application', 'admin.settings.referral.customer_section': 'For customers', 'admin.settings.referral.specialist_section': 'For helpers', 'admin.settings.referral.plan_label': 'Reward plan', 'admin.settings.referral.no_plan': '— no plan —', 'admin.settings.referral.plan_hint': 'This plan will be assigned to the referrer. If their current plan is higher, only days will be added.', 'admin.settings.referral.days_label': 'Reward days', 'admin.settings.referral.days_hint': 'Number of days added to the plan expiry.', 'admin.settings.general.title': 'General settings', 'admin.settings.general.site_name': 'Site name', 'admin.settings.general.site_url': 'Site URL', 'admin.settings.general.contact_email': 'Contact email', 'admin.settings.general.support_phone': 'Support phone', 'admin.settings.smtp.title': 'SMTP settings', 'admin.settings.smtp.hint': 'Used to send email notifications.', 'admin.settings.smtp.host': 'SMTP Host', 'admin.settings.smtp.port': 'Port', 'admin.settings.smtp.encryption': 'Encryption', 'admin.settings.smtp.enc.none': 'None', 'admin.settings.smtp.enc.tls': 'STARTTLS (port 587)', 'admin.settings.smtp.enc.ssl': 'SSL/TLS (port 465)', 'admin.settings.smtp.username': 'Username', 'admin.settings.smtp.password': 'Password / App Password', 'admin.settings.smtp.from_name': 'Sender name', 'admin.settings.smtp.from_email': 'Sender email', 'admin.settings.smtp.test': 'Send test email', 'admin.settings.smtp.sending': 'Sending...', 'admin.settings.payment.hint': 'ePay Piraeus Bank credentials.', 'admin.settings.env.test': 'Test (sandbox)', 'admin.settings.env.prod': 'Production', 'admin.settings.env.label': 'Environment', 'admin.settings.merchant_id': 'Merchant ID', 'admin.settings.api_user': 'API User', 'admin.settings.api_password': 'API Password', 'admin.settings.confirm_url': 'Confirmation URL (webhook)', 'admin.settings.cancel_url': 'Cancel URL', 'admin.settings.active': 'Active', 'admin.settings.saving': 'Saving...', 'admin.settings.saved': 'Saved', 'admin.notif.vars_hint': 'Available variables in templates', 'admin.notif.tmpl.not_set': 'Template not configured', 'admin.notif.tmpl.subject_label': 'Email subject', 'admin.notif.tmpl.body_label': 'Email body (HTML)', 'admin.notif.tmpl.save': 'Save', 'admin.notif.tmpl.close': 'Close', 'admin.notif.tmpl.translate': 'Auto-translate to other languages', 'admin.notif.tmpl.translating': 'Translating...', 'admin.notif.tmpl.saving': 'Saving...', 'admin.notif.email_verification': 'Email verification', 'admin.notif.registration_success': 'Successful registration', 'admin.notif.password_reset': 'Password reset', 'admin.notif.new_offer': 'New offer', 'admin.notif.new_task': 'New task', 'admin.notif.offer_accepted': 'Offer accepted', 'admin.notif.new_message': 'New message', 'admin.notif.offer_declined': 'Offer declined', 'admin.notif.offer_other_accepted': 'Another specialist chosen', 'admin.notif.task_updated': 'Task updated', 'admin.notif.deadline_reminder': 'Deadline reminder', 'admin.notif.task_archived': 'Task unpublished automatically', 'admin.notif.referral_reward': 'Referral reward', // Plan lifecycle email templates 'admin.email_template.plan_activated': 'Plan activated', 'admin.email_template.plan_upgraded': 'Plan upgraded', 'admin.email_template.plan_downgrade_scheduled': 'Downgrade scheduled', 'admin.email_template.plan_downgrade_applied': 'Downgrade applied', 'admin.email_template.plan_renewal_reminder': 'Renewal reminder', 'admin.email_template.plan_insufficient_funds': 'Insufficient funds warning', // Pricing confirm modal 'pricing.confirm.title': 'Confirm plan selection', 'pricing.confirm.plan': 'Plan', 'pricing.confirm.prorated': 'Prorated credit', 'pricing.confirm.effective_price': 'Amount due', 'pricing.confirm.your_balance': 'Your balance', 'pricing.confirm.downgrade_info': 'The switch to the new plan will happen automatically after the current period ends.', 'pricing.confirm.insufficient': 'Insufficient balance.', 'pricing.confirm.top_up': 'Top up', 'pricing.confirm.schedule_downgrade': 'Schedule downgrade', 'pricing.confirm.pay': 'Pay', 'admin.user_edit.title': 'Edit user', 'admin.user_edit.email': 'Email', 'admin.user_edit.email_verified': 'Email verified', 'admin.user_edit.email_not_verified': 'Email not verified', 'admin.user_edit.verify_email_btn': 'Verify manually', 'admin.user_edit.verify_email_done': 'Email verified!', 'admin.user_edit.id': 'ID', 'admin.user_edit.registered': 'Registered', 'admin.user_edit.last_seen': 'Last seen', 'admin.user_edit.lang': 'Language', 'admin.user_edit.first_name': 'First name', 'admin.user_edit.last_name': 'Last name', 'admin.user_edit.phone': 'Phone', 'admin.user_edit.bio': 'Bio', 'admin.user_edit.role': 'Role', 'admin.user_edit.plan': 'Plan', 'admin.user_edit.no_plan': '— No plan —', 'admin.user_edit.active': 'Active account', 'admin.user_edit.published': 'Published', 'admin.user_edit.balance': 'Balance (EUR)', 'admin.user_edit.skills': 'Skills', 'admin.user_edit.tab.profile': 'Profile', 'admin.user_edit.tab.account': 'Account', 'admin.user_edit.tab.balance': 'Balance', 'admin.user_edit.tab.settings': 'Settings', 'admin.user_edit.tab.specialist': 'Offers', 'admin.user_edit.tab.site': 'Website', 'admin.user_edit.plan_expires': 'Plan expires', 'admin.user_edit.interface_lang': 'Interface language', 'admin.user_edit.comm_languages': 'Communication languages', 'admin.user_edit.personal_site_slug': 'Personal page', 'admin.user_edit.show_contact_info': 'Show contact info', 'admin.user_edit.show_contact_info.hint': 'Visible to customers', 'admin.user_edit.notify_new_tasks': 'Notify about new tasks', 'admin.user_edit.notify_new_tasks.hint': 'Push and email notifications', 'admin.user_edit.notif_messages': 'Message notifications', 'admin.user_edit.notif_messages.hint': 'New messages in chat', 'admin.user_edit.site_settings': 'Personal page settings', 'admin.user_edit.categories': 'Service categories', 'admin.user_edit.locations': 'Service areas', 'admin.user_edit.skill_placeholder': 'New skill...', 'admin.user_edit.add_category': '— Select category —', 'admin.user_edit.add_location': '— Select location —', 'admin.user_edit.specialist_cards': 'Offers', 'admin.user_edit.no_cards': 'No offers found', 'admin.user_edit.card_title': 'Offer title', 'admin.user_edit.card_description': 'Description', 'admin.balance.topup.btn': 'Top up', 'admin.balance.withdraw.btn': 'Withdraw', 'admin.balance.modal_hint': 'Changes take effect immediately and are recorded in history', 'admin.balance.topup.title': 'Top up balance', 'admin.balance.topup.amount': 'Amount', 'admin.balance.topup.description': 'Comment', 'admin.balance.topup.description.placeholder': 'For example: bonus or manual top-up', 'admin.balance.topup.submit': 'Top up balance', 'admin.balance.withdraw.title': 'Withdraw balance', 'admin.balance.withdraw.amount': 'Amount', 'admin.balance.withdraw.description': 'Comment', 'admin.balance.withdraw.description.placeholder': 'For example: refund or manual debit', 'admin.balance.withdraw.submit': 'Withdraw from balance', 'admin.user_edit.role.customer': 'Customer', 'admin.user_edit.role.user': 'User', 'admin.user_edit.role.specialist': 'Helper', 'admin.user_edit.role.admin': 'Administrator', 'common.refresh': 'Refresh', 'common.back_home': 'Home', 'admin.loc.hint': 'Manage cities and districts', 'admin.loc.add_city': 'New city', 'admin.loc.add_district': 'Add district', 'admin.loc.new': 'New location', 'admin.loc.edit': 'Edit location', 'admin.loc.district': 'district', 'admin.loc.empty': 'No locations', 'admin.loc.delete.confirm': 'Delete location? All districts will also be deleted.', 'admin.cat.add_root': 'New category', 'admin.cat.add_sub': 'Subcategory', 'admin.cat.edit': 'Edit', 'admin.cat.delete': 'Delete', 'admin.cat.delete.confirm': 'Delete category? All subcategories will also be deleted.', 'admin.cat.slug': 'Slug', 'admin.cat.icon': 'Icon', 'admin.cat.name_el': 'Greek', 'admin.cat.name_en': 'English', 'admin.cat.name_ru': 'Russian', 'admin.cat.name_uk': 'Ukrainian', 'admin.cat.active': 'Active', 'admin.cat.parent': 'Parent category', 'admin.cat.no_parent': 'Top level', 'admin.cat.save': 'Save', 'admin.cat.cancel': 'Cancel', 'admin.cat.empty': 'No categories', 'admin.cat.hint': 'Manage categories with multi-level hierarchy', 'admin.cat.new': 'New category', 'admin.cat.subcategory': 'subcategory', 'admin.cat.add_child': 'Add subcategory', 'admin.cat.inactive': 'Inactive', 'admin.event.user_login': 'Login', 'admin.event.user_register': 'Registration', 'admin.event.admin_user_deactivate': 'User blocked', 'admin.event.admin_user_activate': 'User activated', 'admin.event.admin_user_role_changed': 'Role changed', 'admin.event.admin_task_cancelled': 'Task cancelled', 'admin.event.admin_task_deleted': 'Task deleted', 'admin.event.admin_report_reviewed': 'Report reviewed', 'admin.event.admin_report_dismissed': 'Report dismissed', 'admin.event.task_created': 'Task created', // User status 'user.online': 'Online', 'user.seen_minutes': 'was here {n} min ago', 'user.seen_hours': 'was here {n} hr ago', 'user.seen_yesterday': 'was here yesterday', 'user.seen_days': 'was here {n} days ago', // Specialists 'specialists.title': 'Offers', 'specialists.search': 'Search specialist...', 'specialists.search.btn': 'Search', 'specialists.empty': 'No specialists found', 'specialists.no_bio': 'No description', 'specialists.view': 'View profile', 'specialists.reviews': 'reviews', 'specialist.favorite': 'Add to favorites', 'specialist.unfavorite': 'Remove from favorites', 'specialist.site_link': 'Personal site', 'favorites.specialists.title': 'Favourite specialists', 'favorites.specialists.empty': 'No favourite specialists yet', 'nav.favorites': 'Favourites', 'nav.schedule': 'Schedule', 'nav.find_tasks': 'Find Orders', 'schedule.title': 'My Schedule', 'schedule.subtitle': 'Mark the days when you are free or busy — clients will see your availability', 'schedule.available': 'Available', 'schedule.busy': 'Busy', 'schedule.unset': 'Not set', 'schedule.click_hint': '← click to cycle status', 'schedule.range_mode': 'Select range', 'schedule.range_from': 'From {date} — select end date', 'schedule.click_to_set': 'Click to set', 'schedule.free': 'free', 'schedule.busy_count': 'busy', 'schedule.free_days': 'free days', 'schedule.googleCalendar': 'Google Calendar', 'schedule.connectGoogle': 'Connect Google Calendar', 'schedule.disconnectGoogle': 'Disconnect', 'schedule.connectedAs': 'Connected as', 'schedule.importFromGoogle': 'Sync from Google', 'schedule.gcalConnected': '\u2713 Google Calendar connected', 'schedule.gcalError': 'Google Calendar connection error', 'schedule.gcalImportDone': 'Imported {n} days from Google Calendar', 'schedule.gcalAutoSyncNote': 'Availability changes are automatically synced to Google Calendar', 'schedule.gcalConnectDesc': 'Connect Google Calendar to automatically sync your availability', 'schedule.gcalDisconnectConfirm': 'Disconnect Google Calendar?', 'find_tasks.title': 'Find Orders', 'find_tasks.for_me': 'For me', 'find_tasks.all': 'All orders', 'find_tasks.by_category': 'By category', 'find_tasks.list': 'List', 'find_tasks.already_offered': 'Offer sent', 'find_tasks.offer_now': 'Make an offer', 'find_tasks.empty_for_me': 'No tasks found in your categories', 'find_tasks.banner_hint': 'Find tasks matching your portfolio categories', 'find_tasks.no_cards': 'Create a specialist portfolio to see tasks matched to you', 'find_tasks.add_card': 'Create portfolio', 'find_tasks.search': 'Search tasks...', 'find_tasks.tasks_count': 'tasks', 'footer.tagline': 'The task platform for Greece', 'footer.rights': 'All rights reserved.', 'nav.privacy': 'Privacy Policy', 'nav.delete_account': 'Delete Account', 'delete_account.title': 'Request Account Deletion', 'delete_account.subtitle': 'Once we verify your request, we will permanently delete your account and data within 30 days.', 'delete_account.warning': 'This action cannot be undone. All your data will be permanently deleted.', 'delete_account.reason_label': 'Reason (optional)', 'delete_account.reason_placeholder': 'Tell us why you want to delete your account...', 'delete_account.confirm_label': 'I confirm that I want to permanently delete my account', 'delete_account.submit': 'Submit request', 'delete_account.submitting': 'Submitting...', 'delete_account.success_title': 'Your request has been received', 'delete_account.success_body': 'We will process your request within 30 days and notify you by email.', 'delete_account.login_required': 'You must be logged in to submit a deletion request.', 'delete_account.login_btn': 'Log in', // App download section 'app.download_title': 'Download the CanHelp mobile app', 'app.download_desc': 'All of CanHelp — always at your fingertips. Available for Android and iOS.', // Nav 'nav.pricing': 'Pricing', // Pricing page 'pricing.title': 'Pricing', 'pricing.subtitle': 'Choose the right plan for you', 'pricing.role.customer': 'Customer', 'pricing.role.specialist': 'Specialist', 'pricing.free': 'Free', 'pricing.per_month': 'mo', 'pricing.duration': 'Duration', 'pricing.days': 'days', 'pricing.current_plan': 'Your plan', 'pricing.popular': 'Popular', 'pricing.choose': 'Choose', 'pricing.your_plan': 'Active plan', 'pricing.free_default': 'Default', 'pricing.compare': 'Compare features', 'pricing.feature': 'Feature', 'pricing.faq_note': 'Payment is deducted from your CanHelp balance. Top up available in Payments.', 'pricing.feat.messages': 'Messages / day', 'pricing.feat.orders': 'Orders / day', 'pricing.feat.contact_all': 'Contact everyone', 'pricing.feat.view_phone': 'View phone number', 'pricing.feat.show_contact': 'Show contact info', 'pricing.feat.favorites': 'Favorites', 'pricing.feat.verified_badge': 'Verified badge', 'pricing.feat.google_calendar': 'Google Calendar', 'pricing.feat.personal_site': 'Personal site', 'pricing.feat.auto_response': 'Auto-response', 'pricing.feat.auto_match': 'Auto-match', 'pricing.feat.highlighted_reviews': 'Highlighted reviews', 'pricing.feat.portfolio': 'Offer items', 'pricing.feat.cards': 'Number of offers', 'pricing.feat.notify_tasks': 'New task notifications', 'pricing.feat.video': 'Video in offer', // Upgrade prompt 'upgrade.available_in': 'Available in', 'upgrade.cta': 'Upgrade', // Dashboard plan block 'dashboard.plan.title': 'My Plan', 'dashboard.plan.expires': 'Expires in {n} days', 'dashboard.plan.upgrade': 'Upgrade plan', 'dashboard.plan.no_plan': 'Free plan', 'dashboard.plan.messages': 'Messages today', 'dashboard.plan.orders': 'Orders today', 'dashboard.plan.limits': 'Daily limits', 'dashboard.plan.features': 'Features', 'dashboard.plan.stats': 'Stats', 'dashboard.stats.cards': 'Portfolios', 'dashboard.stats.maxCards': 'Max portfolios', 'dashboard.stats.portfolioItems': 'Portfolio items', 'dashboard.stats.maxPortfolioItems': 'Max items', 'dashboard.stats.activeOffers': 'Active offers', 'dashboard.stats.reviewsReceived': 'Reviews', 'dashboard.stats.activeTasks': 'Active tasks', 'dashboard.stats.completedTasks': 'Completed', 'status.need_help': 'I need help', 'status.active': 'Active', 'status.toggle_on': 'Enable', 'status.toggle_off': 'Disable', // FOMO 'fomo.missed_orders': 'Missed {n} orders', 'fomo.missed_value': 'Worth €{v}', 'fomo.upgrade_hint': 'Upgrade to receive more orders', 'fomo.conversion': 'Task conversion', 'fomo.active': 'Active', 'fomo.with_offers': 'With offers', 'fomo.completed': 'Completed', 'fomo.already_offered': '{n} specialists have already responded', 'fomo.specialist_missed': 'You missed {n} orders', 'fomo.top_categories': 'Categories', 'fomo.offers_received': 'offers received', 'fomo.avg_offers': 'Avg {n}/task', 'fomo.completion_rate': 'completed', // Task auto-match 'task.auto_match': 'Auto-match', 'task.auto_match_results': 'Top specialists', 'task.no_offer_yet': 'You haven\'t sent an offer yet', 'task.make_offer': 'Send offer', 'auto_response.title': 'Auto-Response', 'auto_response.enabled': 'Enable auto-response', 'auto_response.min_budget': 'Min budget', 'auto_response.max_budget': 'Max budget', 'auto_response.default_price': 'Default price', 'auto_response.default_message': 'Default message', 'auto_response.max_per_day': 'Max auto-offers per day', 'auto_response.save': 'Save', 'auto_response.saved': 'Saved', 'auto_response.categories': 'Categories', 'auto_response.locations': 'Locations', // Personal site 'profile.personal_site': 'Personal Site', 'profile.site_slug': 'URL slug', 'profile.site_slug_hint': 'Only latin letters, numbers, - and _', 'profile.site_open': 'Open site', 'profile.site_preview': 'Your site', 'profile.show_contact': 'Show contact info', 'profile.show_contact_hint': 'Customers with Pro/Ultimate plans will see your phone number', // Google Calendar plan gate 'gcal.upgrade_required': 'Google Calendar requires a Pro or Ultimate plan', // Chat limits 'chat.limit_warning': '{n} messages left today', 'chat.limit_reached': 'Message limit reached. Upgrade your plan', 'chat.upgrade': 'Upgrade', // Site page 'site.member_since': 'Member since', 'site.rating': 'Rating', 'site.completed_tasks': 'Completed', 'site.languages': 'Languages', 'site.photos': 'photos', 'site.contact_form': 'Get in touch', 'site.contact_sent': 'Message sent!', 'site.contact_sent_desc': 'The specialist will contact you soon', 'site.contact_name': 'Name', 'site.contact_name_ph': 'Your name', 'site.contact_email_ph': 'your@email.com', 'site.contact_message': 'Message', 'site.contact_message_ph': 'Describe your task...', 'site.contact_send': 'Send', 'site.share': 'Share', 'site.speaks_languages': 'Speaks', 'site.message_sent': 'Message sent!', 'site.message_sent_desc': 'The specialist will receive it in the chat', 'site.message_placeholder': 'Write your message...', 'site.write_to_chat': 'Write to chat', 'site.auth_required_title': 'Sign in required', 'site.auth_required_desc': 'To write in the chat, you need to sign in to your CanHelp account.', 'site.auth_login_btn': 'Sign in', 'site.auth_contact_form_btn': 'Contact via feedback form', 'specialist.services': 'Services', 'portfolio.title': 'Portfolio', 'status.can_help_now': 'Available now', 'common.not_found': 'Page not found', 'common.anonymous': 'Anonymous', 'specialist_setup.page_title': 'Specialist profile setup', 'specialist_setup.step_of': 'Step {current} of {total}', 'specialist_setup.next': 'Next', 'specialist_setup.back': 'Back', 'specialist_setup.skip': 'Skip', 'specialist_setup.finish': 'Finish', 'specialist_setup.go_to_profile': 'Go to profile', 'specialist_setup.browse_tasks': 'Browse tasks', 'specialist_setup.step1.title': 'Welcome!', 'specialist_setup.step1.subtitle': "Let's set up your profile", 'specialist_setup.step1.desc': 'A complete profile helps you find more clients. Follow the steps to create the perfect specialist profile.', 'specialist_setup.step1.what_next': 'What we will do:', 'specialist_setup.step1.item1': 'Fill in basic information', 'specialist_setup.step1.item2': 'Create a service card', 'specialist_setup.step1.item3': 'Add skills and categories', 'specialist_setup.step1.item4': 'Select service area', 'specialist_setup.step1.item5': 'Upload portfolio photos', 'specialist_setup.step2.title': 'Basic profile', 'specialist_setup.step2.subtitle': 'Tell us about yourself', 'specialist_setup.step2.bio_label': 'About me', 'specialist_setup.step2.bio_placeholder': 'Describe your experience, services you offer...', 'specialist_setup.step2.phone_label': 'Phone', 'specialist_setup.step2.phone_placeholder': '+30 6900000000', 'specialist_setup.step2.photo_label': 'Profile photo', 'specialist_setup.step2.photo_btn': 'Upload photo', 'specialist_setup.step2.photo_uploading': 'Uploading...', 'specialist_setup.step2.photo_hint': 'Shown on your profile', 'specialist_setup.step3.title': 'Service card', 'specialist_setup.step3.subtitle': 'Create your first service card', 'specialist_setup.step3.title_label': 'Card title', 'specialist_setup.step3.title_placeholder': 'E.g. Plumber, Electrician, Cleaning...', 'specialist_setup.step3.desc_label': 'Description', 'specialist_setup.step3.desc_placeholder': 'Describe in detail what you offer, your experience, advantages...', 'specialist_setup.step3.title_required': 'Title is required', 'specialist_setup.step4.title': 'Skills & Categories', 'specialist_setup.step4.subtitle': 'Add skills and select categories', 'specialist_setup.step4.skills_label': 'Skills', 'specialist_setup.step4.skills_placeholder': 'E.g. Pipe installation...', 'specialist_setup.step4.skills_add': 'Add', 'specialist_setup.step4.categories_label': 'Categories', 'specialist_setup.step5.title': 'Service area', 'specialist_setup.step5.subtitle': 'Where do you provide services?', 'specialist_setup.step5.hint': 'Select cities or specific areas', 'specialist_setup.done.title': 'Your profile is ready!', 'specialist_setup.done.subtitle': 'Congratulations! Your profile has been set up', 'specialist_setup.done.desc': 'You can now receive orders from clients. Browse tasks that match your skills.', // Support 'support.title': 'Support', 'support.type.label': 'Request type', 'support.type.bug': 'Bug report', 'support.type.suggestion': 'Suggestion', 'support.type.other': 'Other', 'support.subject': 'Subject', 'support.subject.placeholder': 'Brief description...', 'support.body': 'Message', 'support.body.placeholder': 'Describe the issue or suggestion in detail...', 'support.submit': 'Submit', 'support.cancel': 'Cancel', 'support.error': 'Failed to send. Please try again.', 'support.sent.title': 'Request received!', 'support.sent.body': 'We will reply to your email as soon as possible.', 'support.sent.close': 'Close', 'admin.tab.support': 'Support', 'admin.tab.backup': 'Backup', 'admin.tab.translations': 'Translations', 'admin.tab.dbcheck': 'DB Check', 'admin.tab.balances': 'Balances', 'admin.tab.push': 'Push', 'admin.tab.referrals': 'Referrals', 'admin.search': 'Search', 'admin.noData': 'No data', 'admin.cat.order': 'Order', 'admin.cat.skills': 'Skills', 'admin.plans.form.max_tasks': 'Max tasks', 'admin.settings.referral.shared_section': 'Shared referral settings', 'admin.settings.seo.title': 'SEO settings', 'admin.backup.title': 'Backup', 'admin.backup.tables': 'Tables', 'admin.backup.exportAll': 'Export all', 'admin.backup.importAll': 'Import all', 'admin.backup.exportTable': 'Export table', 'admin.backup.importTable': 'Import table', 'admin.backup.exporting': 'Exporting...', 'admin.backup.importing': 'Importing...', 'admin.backup.exportSuccess': 'Export completed', 'admin.backup.importSuccess': 'Import completed', 'admin.backup.autoBackup': 'Auto backup', 'admin.backup.autoBackupDesc': 'Automatic daily backup', 'admin.backup.storedBackups': 'Stored backups', 'admin.backup.noStoredBackups': 'No stored backups', 'admin.backup.restore': 'Restore', 'admin.backup.restoreConfirm': 'Restore from backup?', 'admin.backup.restoreSuccess': 'Restore completed', 'admin.backup.restoring': 'Restoring...', 'admin.backup.date': 'Date', 'admin.backup.size': 'Size', 'admin.backup.today': 'Today', 'admin.backup.yesterday': 'Yesterday', 'admin.balance.col.operation': 'Operation', 'admin.balance.col.amount': 'Amount', 'admin.balance.col.result': 'Balance', 'admin.balance.col.description': 'Description', 'admin.balance.col.date': 'Date', 'admin.balance.empty': 'No records yet', 'admin.balance.filter.all': 'All operations', 'admin.balance.filter.user_id': 'Filter by userId', 'admin.balance.kind.topup': 'Top-up', 'admin.balance.kind.plan_purchase': 'Plan charge', 'admin.balance.kind.admin_topup': 'Admin top-up', 'admin.balance.kind.admin_adjustment': 'Adjustment', 'admin.support.search': 'Search', 'admin.support.all_statuses': 'All statuses', 'admin.support.all_types': 'All types', 'admin.support.none': 'No tickets', 'admin.support.reply': 'Reply', 'admin.support.reply_placeholder': 'Type your reply...', 'admin.support.send_reply': 'Send reply', 'admin.support.cancel': 'Cancel', 'admin.support.close': 'Close', 'admin.support.status.open': 'Open', 'admin.support.status.in_progress': 'In progress', 'admin.support.status.resolved': 'Resolved', 'admin.support.status.closed': 'Closed', 'admin.support.your_reply': 'Your reply', 'admin.user_edit.visibility_requirements.title': 'Profile is not yet visible in Offers', 'admin.user_edit.visibility_requirements.hint': 'Visibility requirements:', 'admin.user_edit.visibility_requirements.bio': 'Fill in bio', 'admin.user_edit.visibility_requirements.published_card': 'Publish at least one card', 'admin.user_edit.visibility_requirements.categories': 'Add a category to a published card', 'admin.user_edit.visibility_requirements.locations': 'Add a location to a published card', 'auto_response.desc': 'Automatically respond to matching tasks', 'auto_response.budget_range': 'Task budget', 'auto_response.message_placeholder': 'Hello! I can help with this task...', 'profile.background.title': 'Profile header background', 'profile.background.hint': 'Shown in the public profile header on web and mobile app.', 'profile.photo.uploading': 'Uploading...', 'profile.balance.history': 'Operation history', 'profile.balance.history.last': 'Latest operations', 'profile.balance.history.empty': 'No operations yet', 'profile.balance.history.balance_after': 'Balance after', 'profile.balance.history.kind.topup': 'Balance top-up', 'profile.balance.history.kind.plan_purchase': 'Plan charge', 'profile.balance.history.kind.admin_topup': 'Admin top-up', 'profile.balance.history.kind.admin_adjustment': 'Admin adjustment', 'profile.plan_history.title': 'Plan history', 'profile.plan_history.empty': 'Plan change history is empty', 'profile.plan_history.expires': 'Until', 'profile.plan_history.days': 'days', 'profile.plan_history.event.activated': 'Activated', 'profile.plan_history.event.renewed': 'Renewed', 'profile.plan_history.event.downgraded': 'Downgraded', 'profile.plan_history.event.referral_reward': 'Referral reward', 'profile.plan_history.event.admin_change': 'Changed by admin', 'profile.plan_history.event.expired': 'Expired', 'profile.show_contact_desc': 'Lets clients contact you directly', 'profile.site.visible.price_list': 'Price list', 'site.pricelist': 'Price list', 'status.plan_required': 'Status is unavailable on your current plan', 'status.admin_not_applicable': 'User status is not applicable to admin accounts' }, ru: { 'footer.slogan': 'Ваша задача — наша забота! Решаем любые вопросы быстро и удобно.', 'footer.links': 'Ссылки', 'footer.socials': 'Мы в соцсетях', 'nav.home': 'Главная', 'nav.tasks': 'Задачи', 'nav.post': '+ Опубликовать', 'nav.dashboard': 'Мои задачи', 'nav.chat': 'Сообщения', 'nav.notifications': 'Уведомления', 'nav.profile': 'Профиль', 'nav.admin': 'Админка', 'nav.specialists': 'Предложения', 'nav.new_task': 'Новая задача', 'nav.login': 'Войти', 'nav.register': 'Регистрация', 'nav.logout': 'Выйти', 'hero.title': 'Каждый человек может чем-то помочь', 'hero.subtitle': 'Найди помощь, предложи свои навыки или зарабатывай, помогая другим', 'hero.cta.post': 'Найти помощь', 'hero.cta.browse': 'Предложить помощь', 'hero.cta.specialists': 'Найти работу', 'hero.search.placeholder': 'Что нужно? напр. электрик, уборка...', 'hero.specialist.title': 'Найдите заказы рядом с вами', 'hero.specialist.subtitle': 'Откройте заказы в своих категориях и отправьте предложение', 'hero.specialist.cta': 'Найти заказы', 'hero.specialist.search.placeholder': 'Поиск заказов... напр. электрика, уборка', 'section.categories.specialist': 'Найдите заказы по категории', 'section.cities.specialist': 'Заказы по городу', 'how.specialist.step1.title': 'Создайте карточку специалиста', 'how.specialist.step1.desc': 'Укажите категории, навыки и районы — система найдёт подходящие заказы автоматически', 'how.specialist.step2.title': 'Найдите подходящие заказы', 'how.specialist.step2.desc': 'Просматривайте заказы в своих категориях и начните работу сразу', 'how.specialist.step3.title': 'Отправьте предложение и зарабатывайте', 'how.specialist.step3.desc': 'Подайте предложение с ценой и сроками, общайтесь с клиентами и выполняйте заказы', 'stats.specialists': 'предложений', 'stats.tasks': 'задач', 'stats.categories': 'категорий', 'stats.free': 'бесплатная регистрация', 'promo.title': 'Получи Pro бесплатно — только до конца года', 'promo.subtitle': 'Зарегистрируйся сейчас и пользуйся тарифом Pro без оплаты. Акция заканчивается 31 декабря.', 'promo.cta': 'Зарегистрироваться', 'promo.days': 'дней', 'promo.hours': 'часов', 'promo.minutes': 'минут', 'promo.seconds': 'сек.', 'section.categories': 'Создай задачу в любой категории', 'section.how': 'Как это работает', 'section.recent': 'Последние задачи', 'section.all': 'Смотреть все →', 'section.more': 'ещё', 'section.cities': 'Города и районы', 'section.community': 'Общественный проект для всех', 'community.subtitle': 'CanHelp — не просто маркетплейс, это сообщество взаимопомощи. Любой, у кого есть знания или навык, может найти клиента. Любой, у кого есть задача, может найти специалиста.', 'community.point1.title': 'Умеете что-то делать?', 'community.point1.desc': 'Ремонт, репетиторство, дизайн, переводы, уход — каждый навык имеет ценность. Создайте профиль и находите клиентов рядом с вами.', 'community.point2.title': 'Нужна помощь?', 'community.point2.desc': 'Опубликуйте задачу за минуту и получайте предложения от проверенных специалистов в вашем городе.', 'community.point3.title': 'Помогите проекту расти', 'community.point3.desc': 'CanHelp развивается благодаря сообществам. Поделитесь ссылкой с друзьями и знакомыми — вместе мы строим что-то полезное для всех.', 'community.share': 'Поделиться с друзьями', 'community.share.copied': 'Ссылка скопирована!', // Referral section on home page 'section.referral': 'Реферальная программа', 'referral.home.subtitle': 'Поделитесь ссылкой — каждый новый пользователь, зарегистрировавшийся по ней, принесёт вам награду.', 'referral.home.step1.title': 'Зарегистрируйтесь и получите ссылку', 'referral.home.step1.desc': 'Создайте аккаунт и найдите свою уникальную реферальную ссылку в профиле.', 'referral.home.step2.title': 'Поделитесь с друзьями', 'referral.home.step2.desc': 'Отправьте ссылку друзьям, знакомым или опубликуйте в социальных сетях.', 'referral.home.step3.title': 'Получайте награды', 'referral.home.step3.desc': 'Как только друг подтвердит email, вы автоматически получите свою награду.', 'referral.home.cta': 'Получить ссылку', 'referral.home.badge': 'Реферальная программа', // FAQ section 'section.faq': 'Частые вопросы', 'faq.q1': 'Как работает CanHelp?', 'faq.a1': 'Опубликуйте задачу, получите предложения от специалистов, выберите лучшего и начните сотрудничество. Это быстро, просто и бесплатно для клиентов.', 'faq.q2': 'Сколько стоит использование платформы?', 'faq.a2': 'Регистрация и публикация задач полностью бесплатны для клиентов. Специалисты имеют доступ к бесплатному плану, а также к премиум-опциям.', 'faq.q3': 'Как стать специалистом?', 'faq.a3': 'Зарегистрируйтесь, перейдите в «Стать специалистом», заполните профиль навыками и категориями и начните получать задачи.', 'faq.q4': 'Как выбрать подходящего специалиста?', 'faq.a4': 'Оцените отзывы, опыт, навыки и портфолио каждого специалиста. Общайтесь через чат платформы и уточняйте детали до принятия решения.', 'faq.q5': 'Что если я не доволен результатом?', 'faq.a5': 'Вы можете оставить отзыв о специалисте и поставить оценку от 1 до 5 звёзд. Отзывы помогают другим пользователям выбирать проверенных профессионалов.', 'faq.q6': 'Можно ли связаться со специалистом до принятия предложения?', 'faq.a6': 'Да. Как только вы получили предложение, можно открыть чат со специалистом, задать вопросы и уточнить все детали до принятия решения.', 'faq.q7': 'Сколько времени ждать предложений?', 'faq.a7': 'Как правило, в течение нескольких часов. Специалисты получают уведомление о новых задачах и могут быстро ответить.', 'faq.q8': 'Можно ли разместить задачу в любом городе Греции?', 'faq.a8': 'Да! CanHelp охватывает всю Грецию — Афины, Фессалоники, Патры и другие города.', 'faq.q9': 'Какие виды задач есть на CanHelp?', 'faq.a9': 'Ремонт, уборка, электрики, репетиторство, дизайн, IT, переезды, красота и многое другое. Категории постоянно расширяются.', 'faq.q10': 'Есть ли мобильное приложение?', 'faq.a10': 'Да! CanHelp доступно для Android и iOS. Скачайте приложение и управляйте всем со своего телефона.', 'how.step1.title': 'Опубликуй задачу', 'how.step1.desc': 'Опиши что нужно и установи бюджет', 'how.step2.title': 'Получи предложения', 'how.step2.desc': 'Специалисты пришлют предложения с ценой и сроками', 'how.step3.title': 'Выбери и начни', 'how.step3.desc': 'Выбери лучшего профессионала и начни сотрудничество', 'tasks.title': 'задач', 'tasks.filters': 'Фильтры', 'tasks.search': 'Поиск', 'tasks.search.placeholder': 'Название или ключевое слово...', 'tasks.search.btn': 'Поиск', 'tasks.publish': 'Опубликовать', 'tasks.category.all': 'Все', 'tasks.category.all_in': 'Все в', 'tasks.category.label': 'Категория', 'tasks.location.label': 'Город', 'tasks.location.placeholder': 'напр. Афины', 'tasks.empty': 'Задачи не найдены', 'tasks.empty.cta': 'Опубликуй первую', 'task.status.open': 'Открыта', 'task.status.in_progress': 'В работе', 'task.status.completed': 'Завершена', 'task.status.cancelled': 'Отменена', 'task.status.draft': 'Черновик', 'task.budget': 'Бюджет', 'task.location': 'Местоположение', 'task.deadline': 'Дата начала', 'task.expires_at': 'Активно до', 'task.created_at': 'Создано', 'task.customer': 'Заказчик', 'task.offer.btn': 'Отправить предложение', 'task.invite.banner_title': 'Вас пригласили на это задание', 'task.invite.banner_hint': 'Заказчик лично пригласил вас', 'task.invite.accept': 'Отправить предложение', 'task.invite.decline': 'Отказаться', 'offer.accept': 'Принять', 'offer.decline': 'Отклонить', 'task.complete': 'Завершить задачу', 'task.complete.confirm': 'Отметить задачу как выполненную?', 'task.edit': 'Редактировать', 'task.status_label': 'Статус', 'task.yours': 'Ваша задача', 'task.offer.yours': 'Ваше предложение', 'review.leave': 'Оставить отзыв', 'review.rating': 'Оценка', 'review.comment': 'Комментарий', 'review.comment.placeholder': 'Расскажите о своём опыте...', 'review.submit': 'Отправить отзыв', 'review.submitting': 'Отправка...', 'review.done': 'Отзыв отправлен!', 'profile.reviews': 'Отзывы', 'profile.no_reviews': 'Отзывов пока нет', 'profile.rating': 'Рейтинг', 'profile.skills.label': 'Навыки', 'profile.member_since': 'Участник с', 'task.offers': 'Предложения', 'task.offers.none': 'Предложений пока нет', 'create.title': 'Опубликовать задачу', 'create.field.title': 'Название', 'create.field.description': 'Описание', 'create.field.category': 'Категория', 'create.field.category.select': 'Выберите...', 'create.field.location': 'Местоположение', 'create.field.location.any': 'Где угодно', 'create.field.location.all': 'Весь город', 'create.field.budget': 'Бюджет (€)', 'create.field.deadline': 'Дата начала', 'create.field.expires_at': 'Объявление активно', 'create.field.expires_at.days': '{n} дней', 'create.field.budget_negotiable': 'Цена обсуждается', 'create.field.time_slot': 'Время выполнения', 'create.field.time_slot.any': 'В любое время', 'create.field.time_slot.morning': 'Утром (08:00–13:00)', 'create.field.time_slot.afternoon': 'Днём (13:00–18:00)', 'create.field.time_slot.evening': 'Вечером (18:00–22:00)', 'create.field.time_slot.weekend': 'Выходной', 'create.field.address': 'Адрес (необязательно)', 'create.field.address.district': 'Квартал', 'create.field.address.street': 'Улица', 'create.field.address.house': 'Дом', 'create.field.confidential': 'Конфиденциальная заметка', 'create.field.confidential.placeholder': 'Детали, видные только назначенному специалисту...', 'create.field.confidential.hint': 'Не отображается публично', 'create.field.photos': 'Фотографии', 'create.field.photos.add': 'Добавить фото', 'create.field.photos.uploading': 'Загрузка...', 'task.budget_negotiable': 'Цена обсуждается', 'task.time_slot': 'Время', 'task.confidential': 'Конфид. заметка', 'create.field.title.placeholder': 'напр. Уборка квартиры 80кв', 'create.field.description.placeholder': 'Подробно опишите что нужно...', 'create.field.location.placeholder': 'напр. Афины, Колонаки', 'create.field.budget.placeholder': 'напр. 100', 'create.submit': 'Опубликовать задачу', 'create.submitting': 'Публикация...', 'login.title': 'Добро пожаловать', 'login.subtitle': 'Вход в CanHelp', 'login.email': 'Email', 'login.password': 'Пароль', 'login.submit': 'Войти', 'login.submitting': 'Вход...', 'login.error': 'Неверный email или пароль', 'login.unverified.title': 'Подтвердите ваш email', 'login.unverified.desc': 'Мы отправили ссылку для подтверждения на ваш email. Проверьте входящие (или спам) и перейдите по ссылке.', 'login.unverified.resend': 'Отправить письмо повторно', 'login.unverified.sending': 'Отправка...', 'login.unverified.sent': '✓ Отправлено — проверьте входящие', 'profile.email.verified': 'Email подтверждён', 'profile.email.not_verified': 'Email не подтверждён', 'login.no_account': 'Нет аккаунта?', 'login.register_link': 'Зарегистрироваться', 'login.forgot_password': 'Забыл пароль?', 'login.or_continue_with': 'или продолжите через', 'login.continue_google': 'Войти через Google', 'forgot.title': 'Забыл пароль', 'forgot.subtitle': 'Введите email для получения ссылки восстановления', 'forgot.email': 'Email', 'forgot.submit': 'Отправить ссылку', 'forgot.submitting': 'Отправка...', 'forgot.sent.title': 'Проверьте входящие', 'forgot.sent.desc': 'Если аккаунт с таким email существует, мы отправим ссылку для сброса пароля.', 'forgot.back_to_login': 'Вернуться ко входу', 'forgot.error': 'Не удалось отправить ссылку. Проверьте адрес и попробуйте снова.', 'forgot.error.not_found': 'Аккаунт с таким email не найден.', 'forgot.error.send_failed': 'Ошибка отправки письма. Попробуйте позже.', 'reset.title': 'Новый пароль', 'reset.subtitle': 'Введите новый пароль', 'reset.password': 'Новый пароль', 'reset.confirm': 'Подтвердите пароль', 'reset.submit': 'Изменить пароль', 'reset.submitting': 'Сохранение...', 'reset.success': 'Пароль успешно изменён. Перенаправление ко входу...', 'reset.back_to_login': 'Вернуться ко входу', 'reset.error.mismatch': 'Пароли не совпадают', 'reset.error.invalid': 'Недействительная или устаревшая ссылка. Запросите новую.', 'register.title': 'Регистрация', 'register.subtitle': 'Создать аккаунт в CanHelp', 'register.first_name': 'Имя', 'register.last_name': 'Фамилия', 'register.email': 'Email', 'register.password': 'Пароль (мин. 8 символов)', 'register.role': 'Роль', 'register.role.customer': 'Пользователь', 'register.role.customer.desc': 'Публикую задачи', 'register.role.specialist': 'Специалист', 'register.role.specialist.desc': 'Беру задачи', 'register.submit': 'Создать аккаунт', 'register.submitting': 'Регистрация...', 'register.has_account': 'Уже есть аккаунт?', 'register.login_link': 'Войти', 'register.continue_google': 'Зарегистрироваться через Google', 'register.check_email.title': 'Проверьте почту', 'register.check_email.desc': 'Мы отправили ссылку для подтверждения на ваш email. Проверьте входящие (или спам) и перейдите по ссылке.', 'register.check_email.login': 'Вернуться к входу', 'register.captcha_failed': 'Проверка CAPTCHA не пройдена. Пройдите проверку безопасности и попробуйте снова.', 'dashboard.title': 'Панель управления', 'dashboard.new_task': '+ Новая задача', 'dashboard.onboarding.title': 'Добро пожаловать в CanHelp 👋', 'dashboard.onboarding.subtitle': 'Выберите, с чего хотите начать.', 'dashboard.onboarding.helper.title': 'Предложите свою помощь', 'dashboard.onboarding.helper.desc': 'Заполните анкету — навыки, категории и города. Это займёт пару минут, и вы начнёте получать заказы.', 'dashboard.onboarding.helper.cta': 'Заполнить анкету', 'dashboard.onboarding.requester.title': 'Нужна помощь?', 'dashboard.onboarding.requester.desc': 'Опубликуйте задачу — помощники пришлют вам свои предложения.', 'dashboard.onboarding.requester.cta': 'Опубликовать задачу', 'dashboard.my_tasks': 'Мои задачи', 'dashboard.my_offers': 'Мои предложения', 'dashboard.invitations': 'Приглашения на задания', 'dashboard.offers_count': 'предл.', 'dashboard.declined_count': 'откл.', 'dashboard.completed_tasks': 'Завершённые задачи', 'dashboard.completed_offers': 'Завершённые предложения', 'dashboard.review_pending': 'Оценка ещё не оставлена', 'tasks.new.top_specialists': 'Топ специалисты', 'tasks.new.select_category': 'Выберите категорию, чтобы увидеть специалистов', 'tasks.new.invite': 'Предложить работу', 'tasks.new.invited': 'Выбран ✓', 'reviews.count': 'отзывов', 'filter.location': 'Локация', 'filter.language': 'Языки', 'filter.language.any': 'Любой язык', 'filter.category.all': 'Все категории', 'user.categories': 'Категории', 'user.work_area': 'Район работы', 'user.specialist_cards': 'Карточки услуг', 'card.skills': 'Навыки', 'card.categories': 'Категории', 'card.geography': 'Район работы', 'card.portfolio': 'Галерея работ', 'card.close': 'Закрыть', 'dashboard.tasks.empty': 'Вы не публиковали задачи', 'dashboard.tasks.empty.cta': 'Опубликуйте первую', 'dashboard.tasks.add_new': 'Добавить новую задачу', 'dashboard.offers.empty': 'Вы не отправляли предложений', 'dashboard.offers.empty.cta': 'Найти задачи', 'dashboard.customer.specialists_title': 'Ищете исполнителя?', 'dashboard.customer.specialists_hint': 'Просматривайте профили специалистов, читайте отзывы и приглашайте их на свои задачи', 'dashboard.customer.specialists_cta': 'Найти исполнителя', 'dashboard.customer.how_title': 'Как это работает', 'dashboard.customer.step1': 'Создайте задачу с описанием и бюджетом', 'dashboard.customer.step2': 'Специалисты пришлют предложения с ценой и сроками', 'dashboard.customer.step3': 'Выберите подходящего и начните работу', 'notif.title': 'Уведомления', 'notif.mark_all': 'Отметить все как прочитанные', 'notif.empty': 'Нет уведомлений', 'notif.type.generic': 'Уведомление', 'notif.type.new_offer': 'Новое предложение', 'notif.type.offer_accepted': 'Ваше предложение принято', 'notif.type.offer_declined': 'Ваше предложение отклонено', 'notif.type.task_completed': 'Задание выполнено', 'notif.type.task_cancelled': 'Задание отменено', 'notif.type.new_message': 'Новое сообщение', 'notif.type.new_review': 'Новый отзыв', 'notif.type.task_invite': 'Приглашение на задание', 'notif.type.referral_reward': 'Реферальная награда', 'notif.type.specialist_card_submitted': 'Карточка отправлена на проверку', 'notif.type.specialist_card_approved': 'Карточка одобрена', 'notif.type.specialist_card_rejected': 'Карточка отклонена', 'notif.body.new_offer': 'Новое предложение на «{title}»', 'notif.body.offer_accepted': 'Ваше предложение на «{title}» принято', 'notif.body.offer_declined': 'Ваше предложение на «{title}» отклонено', 'notif.body.task_invite': 'Вас приглашают на «{title}»', 'notif.body.new_review': 'Вы получили оценку {rating}★', 'notif.body.referral_reward': 'На ваш аккаунт добавлено {days} дней доступа к плану «{plan}»!', 'notif.body.specialist_card_submitted': 'Карточка «{title}» отправлена на проверку', 'notif.body.specialist_card_approved': 'Карточка «{title}» одобрена и опубликована', 'notif.body.specialist_card_rejected': 'Карточка «{title}» не была одобрена. Исправьте её и отправьте снова.', 'offer.status.pending': 'Ожидает', 'offer.status.accepted': 'Принято', 'offer.status.declined': 'Отклонено', 'offer.status.withdrawn': 'Отозвано', 'offer.status.other_accepted': 'Выбран другой исполнитель', 'common.loading': 'Загрузка...', 'common.error': 'Ошибка', 'common.save': 'Сохранить', 'common.saving': 'Сохранение...', 'common.cancel': 'Отмена', 'common.add': 'Добавить', 'common.close': 'Закрыть', 'common.edit': 'Редактировать', 'common.delete': 'Удалить', 'common.from': 'от', 'common.currency': '€', 'common.greece': 'Греция', // Chat 'chat.connected': 'Подключено', 'chat.disconnected': 'Отключено', 'chat.no_rooms': 'Переписок пока нет', 'chat.task_fallback': 'Задача', 'chat.select': 'Выберите переписку', 'chat.no_messages': 'Сообщений пока нет', 'chat.placeholder': 'Напишите сообщение... (Enter для отправки)', 'chat.conversation_fallback': 'Переписка', 'chat.direct_chat': 'Личный чат', 'chat.linked_task': 'Прикреплённый заказ', 'chat.write_btn': 'Написать', 'chat.just_now': 'только что', 'chat.min_ago': 'м', 'chat.write_specialist': 'Написать специалисту', 'chat.write_customer': 'Написать заказчику', 'chat.notif_settings': 'Настройки уведомлений', 'chat.notif_messages': 'Уведомления о новых сообщениях', 'chat.toast_title': 'Новое сообщение', 'chat.toast_open': 'Открыть чат', // Offer form 'offer.price': 'Цена', 'offer.price.placeholder': 'напр. 80', 'offer.customer_budget': 'Бюджет заказчика', 'offer.message': 'Сообщение', 'offer.optional': 'необязательно', 'offer.message.placeholder': 'Представьтесь, расскажите об опыте и почему вы лучший выбор...', 'offer.submitting': 'Отправка...', // Profile 'profile.photo': 'Фото профиля', 'profile.photo.change': 'Изменить фото', 'profile.photo.hint': 'JPEG, PNG, WebP · до 5MB', 'profile.basic_info': 'Основная информация', 'profile.phone': 'Телефон', 'profile.phone.placeholder': '+30 6901234567', 'profile.bio': 'Краткое описание', 'profile.bio.placeholder': 'Расскажите немного о себе...', 'profile.language': 'Язык', 'profile.language.hint': 'Язык интерфейса и email-уведомлений', 'profile.languages': 'Языки общения', 'profile.languages.hint': 'Выберите все языки, на которых вы общаетесь', 'profile.skills': 'Навыки', 'profile.skills.subtitle': 'Добавьте услуги, которые вы предлагаете', 'profile.skills.placeholder': 'напр. Уборка, IT, Репетиторство...', 'profile.role': 'Роль аккаунта', 'profile.role.specialist': '🔧 Помощник', 'profile.role.admin': '👑 Admin', 'profile.role.customer': '👤 Пользователь', 'profile.role.user': '👤 Пользователь', 'profile.role.change': 'Для смены роли обратитесь в службу поддержки.', 'profile.become_specialist': 'Предложить помощь', 'profile.become_specialist.desc': 'Создай профиль помощника, предложи свои навыки и начни получать задачи.', 'become_specialist.hero.title': 'Предложи свои навыки и начни зарабатывать', 'become_specialist.hero.subtitle': 'Создай профиль помощника и получай запросы от людей, которым нужна помощь', 'become_specialist.how.title': 'Как это работает', 'become_specialist.step1.title': 'Создай портфолио специалиста', 'become_specialist.step1.desc': 'Укажи категории, навыки и зону покрытия — система автоматически подберёт подходящие заказы', 'become_specialist.step2.title': 'Ищи заказы', 'become_specialist.step2.desc': 'Просматривай задачи по своим категориям в разделе «Поиск заказов»', 'become_specialist.step3.title': 'Откликайся и зарабатывай', 'become_specialist.step3.desc': 'Отправляй предложения с ценой и сроками, общайся с клиентами и выполняй заказы', 'become_specialist.benefits.title': 'Преимущества профиля специалиста', 'become_specialist.benefit1': 'Поиск заказов по вашим категориям и локации', 'become_specialist.benefit2': 'Публичный профиль с отзывами клиентов', 'become_specialist.benefit3': 'Расписание доступности, видимое клиентам', 'become_specialist.benefit4': 'Добавление в избранное клиентами', 'become_specialist.cta': 'Подробнее', 'become_specialist.free_badge': 'Бесплатная регистрация', 'profile.tab.notifications': 'Уведомления', 'profile.tab.reviews': 'Отзывы', 'profile.tab.referral': 'Рефералы', 'profile.tab.auto_response': 'Авто-ответ', 'profile.tab.site': 'Сайт', 'profile.site.title': 'Персональная страница', 'profile.site.url_label': 'Личный сайт', 'profile.site.copy': 'Копировать', 'profile.site.copied': 'Скопировано', 'profile.site.visible_title': 'Что отображается на вашей странице', 'profile.site.visible.name': 'Имя и фото', 'profile.site.visible.bio': 'Биография', 'profile.site.visible.rating': 'Рейтинг и отзывы', 'profile.site.visible.portfolio': 'Портфолио / Карточки', 'profile.site.visible.contacts': 'Контактные данные', 'profile.site.visible.full_last_name': 'Фамилия полностью', 'profile.site.visible.services': 'Карточки услуг', 'profile.site.visible.reviews': 'Раздел с отзывами', 'profile.site.visible.status': 'Статус «Готов помочь»', 'profile.site.theme': 'Тема оформления', 'profile.site.theme.dark': 'Тёмная', 'profile.site.theme.light': 'Светлая', 'profile.site.slug_taken': 'Этот адрес уже занят', 'profile.site.stats.title': 'Аналитика сайта', 'profile.site.stats.days': 'последние 30 дней', 'profile.site.stats.views': 'Просмотры', 'profile.site.stats.unique': 'Уникальные посетители', 'profile.site.stats.messages': 'Сообщения', 'profile.site.stats.total_views': 'Просмотры', 'profile.site.stats.total_unique': 'Уник. посетители', 'profile.site.stats.total_messages': 'Сообщения', 'profile.site.stats.empty': 'Данных пока нет', 'profile.site.stats.loading': 'Загрузка аналитики...', 'profile.site.stats.no_slug': 'Укажите адрес сайта, чтобы видеть статистику', 'profile.site.edit_bio_hint': 'Биография и фото настраиваются во вкладке «Основное».', 'profile.site.seo.title': 'SEO — мета-данные сайта', 'profile.site.seo.hint': 'Отображается в поисковиках. При сохранении автоматически переводится на все языки.', 'profile.site.seo.site_title': 'Заголовок страницы', 'profile.site.seo.site_title_placeholder': 'Иван Иванов — Электрик в Афинах', 'profile.site.seo.site_desc': 'Мета-описание', 'profile.site.seo.site_desc_placeholder': 'Краткое описание для поисковиков...', 'status.title': 'Статус', 'status.can_help_now_hint': 'Ваша карточка показывается выше в поиске', 'status.need_help_hint': 'Специалисты могут предложить вам помощь', 'profile.referral.title': 'Партнёрская программа', 'profile.referral.desc': 'Поделитесь ссылкой и получайте награду за каждого привлечённого пользователя.', 'profile.referral.link_label': 'Ваша реферальная ссылка', 'profile.referral.copy': 'Копировать', 'profile.referral.copied': 'Скопировано!', 'profile.referral.invited_count': 'успешных приглашений', 'profile.referral.no_code': 'Реферальный код недоступен.', 'notifications.title': 'Настройки уведомлений', 'notifications.email.new_tasks': 'Email о новых заказах', 'notifications.email.new_tasks.desc': 'Получать email, когда в ваших категориях публикуется новый заказ', 'notifications.messages.desc': 'Получать уведомление при новом входящем сообщении', 'notifications.saved': 'Настройки сохранены', 'notifications.plan_required': 'Недоступно в вашем тарифе', 'profile.tab.info': 'Основное', 'profile.tab.finance': 'Финансы', 'profile.tab.skills': 'Навыки', 'profile.tab.categories': 'Категории', 'profile.tab.geography': 'География', 'profile.specialist.categories': 'Категории работ', 'profile.specialist.categories.desc': 'Выберите категории, в которых вы работаете', 'profile.specialist.geography': 'Города покрытия', 'profile.specialist.geography.desc': 'Выберите города / районы, где вы работаете', 'profile.saving': 'Сохранение...', 'profile.upload.error': 'Ошибка загрузки фото', 'profile.saved': 'Сохранено', 'profile.tab.cards': 'Предложения', 'profile.cards.count': 'Предложения', 'profile.cards.add': 'Добавить предложение', 'profile.cards.new_title': 'Название нового предложения', 'profile.cards.placeholder': 'Например: Сантехника', 'profile.cards.create': 'Создать', 'profile.cards.cancel': 'Отмена', 'profile.cards.empty': 'У вас нет предложений', 'profile.cards.empty_hint': 'Создайте первую карточку, чтобы показать услуги клиентам.', 'profile.cards.create_first': 'Создать первое предложение', 'profile.cards.delete_confirm': 'Удалить предложение?', 'profile.background.change': 'Изменить фон', 'profile.background.remove': 'Удалить фон', 'profile.listing_requirements.published_card': 'Опубликуйте хотя бы одну карточку', 'profile.listing_requirements.title': 'Ваш профиль пока не показывается в разделе «Предложения»', 'profile.listing_requirements.hint': 'Чтобы карточка отображалась, выполните условия:', 'profile.listing_requirements.bio': 'Добавьте краткую информацию о себе в «Основное»', 'profile.listing_requirements.categories': 'Укажите хотя бы одну категорию в активной карточке', 'profile.listing_requirements.locations': 'Укажите хотя бы одну локацию в активной карточке', 'profile.listing_requirements.card_inactive': 'Сделайте карточку активной', 'profile.listing_requirements.review_pending': 'Карточка на рассмотрении', 'profile.card.visibility_issue': 'Карточка не отображается в разделе «Предложения»', 'profile.card.tab.main': 'Основное', 'profile.card.tab.skills': 'Навыки', 'profile.card.tab.categories': 'Категории', 'profile.card.tab.geography': 'География', 'profile.card.tab.portfolio': 'Галерея', 'profile.card.tab.pricelist': 'Прайс-лист', 'profile.card.pricelist.empty': 'Группы прайс-листа ещё не добавлены.', 'profile.card.pricelist.add_group': 'Добавить группу', 'profile.card.pricelist.group_title': 'Название группы', 'profile.card.pricelist.add_item': 'Добавить позицию', 'profile.card.pricelist.item_name': 'Услуга / работа', 'profile.card.pricelist.item_desc': 'Описание (необязательно)', 'profile.card.pricelist.item_price': 'Цена', 'profile.card.pricelist.item_unit': 'Единица (например /час)', 'profile.card.pricelist.save_group': 'Сохранить группу', 'profile.card.pricelist.save_item': 'Сохранить', 'profile.card.pricelist.delete_group': 'Удалить группу', 'profile.card.pricelist.delete_item': 'Удалить', 'profile.card.active': 'Активна', 'profile.card.review_pending': 'На рассмотрении', 'profile.card.review_pending_hint': 'Ваша карточка сейчас проверяется администрацией.', 'profile.card.review_submitted': 'Карточка отправлена на проверку', 'profile.card.review_approved': 'Карточка одобрена', 'profile.card.review_approved_hint': 'Ваша карточка теперь отображается в предложениях.', 'profile.card.review_rejected': 'Карточка отклонена', 'profile.card.review_rejected_hint': 'Карточка не была одобрена. Исправьте её и отправьте снова.', 'profile.card.submit_review': 'Отправить на рассмотрение', 'profile.card.withdraw_review': 'Отозвать заявку', 'profile.card.unpublish': 'Снять с публикации', 'profile.card.save': 'Сохранить', 'profile.card.saved': 'Сохранено', 'profile.card.delete': 'Удалить', 'profile.card.skill.add': 'Добавить навык', 'profile.card.photo.add': 'Добавить фото', 'profile.card.photo.uploading': 'Загрузка...', 'profile.card.photo.empty': 'Нет фотографий', 'profile.card.item.title': 'Заголовок', 'profile.card.item.desc': 'Описание', 'profile.card.item.save': 'Сохранить', 'profile.card.item.cancel': 'Отмена', 'profile.card.item.edit': 'Описание работы', 'profile.card.description': 'Описание карточки', 'profile.card.desc_auto_translate': 'При сохранении будет автоматически переведено на другие языки', 'profile.card.desc_translated': 'Есть переводы:', 'profile.upgrade.cards_limit': 'Лимит портфолио исчерпан', 'profile.upgrade.plan': 'Текущий тариф:', 'profile.upgrade.contact': 'Обратитесь к администратору для смены тарифа', 'profile.upgrade.ok': 'Понятно', 'profile.plan.title': 'Тарифный план', 'profile.balance': 'Баланс', 'profile.balance.topup': 'Пополнить баланс', 'profile.balance.topup.title': 'Пополнить баланс', 'profile.balance.topup.amount': 'Сумма (в EUR)', 'profile.balance.topup.hint': 'Выберите сумму или введите вручную', 'profile.balance.topup.submit': 'Перейти к оплате', 'profile.balance.topup.loading': 'Перенаправление...', 'profile.balance.topup.error': 'Ошибка инициализации платежа. Попробуйте снова.', 'payment.success.title': 'Оплата прошла успешно!', 'payment.success.desc': 'Ваш баланс обновлён.', 'payment.cancelled.title': 'Оплата отменена', 'payment.cancelled.desc': 'Оплата была отменена. Средства не списаны.', 'payment.pending.title': 'Обрабатывается...', 'payment.pending.desc': 'Ваш платёж в обработке.', 'payment.back_to_profile': 'Вернуться в профиль', 'profile.plan.basic': 'Базовый (бесплатный)', 'profile.plan.contact_upgrade': 'Обратитесь к администратору для подключения тарифа', 'profile.plan.cards_up_to': 'Портфолио: до', 'profile.plan.cards_unlimited': 'Портфолио: безлимитно', 'profile.plan.tasks_up_to': 'Задач: до', 'profile.plan.offers_up_to': 'Откликов: до', 'profile.plan.valid_until': 'Действителен до', 'profile.plan.no_expiry': 'Бессрочно', // Create task 'create.error': 'Ошибка при публикации', // Tasks list extras 'tasks.category.general': 'Общее', 'tasks.budget.range': 'Диапазон:', 'tasks.budget.from': 'от', 'tasks.budget.to': 'до', 'tasks.filter.reset': 'Сбросить фильтры', 'tasks.load_more': 'Загрузить ещё', 'tasks.showing': 'Результатов:', 'tasks.field.budget': 'Бюджет, €', // Admin 'admin.title': 'Панель администратора', 'admin.tab.stats': 'Статистика', 'admin.tab.users': 'Пользователи', 'admin.tab.tasks': 'Задачи', 'admin.tab.reports': 'Жалобы', 'admin.tab.moderation': 'Модерация', 'admin.stats.users': 'Пользователи', 'admin.stats.tasks': 'Задачи', 'admin.stats.offers': 'Предложения', 'admin.stats.reviews': 'Отзывы', 'admin.tasks.by_status': 'Задачи по статусу', 'admin.col.user': 'Пользователь', 'admin.col.email': 'Email', 'admin.col.role': 'Роль', 'admin.col.registered': 'Регистрация', 'admin.col.status': 'Статус', 'admin.col.title': 'Название', 'admin.col.budget': 'Бюджет', 'admin.col.created': 'Создано', 'admin.users.active': 'Активен', 'admin.users.inactive': 'Неактивен', 'admin.users.deactivate': 'Деактивировать', 'admin.users.activate': 'Активировать', 'admin.tasks.cancel': 'Отменить', 'admin.reports.none': 'Жалоб нет', 'admin.moderation.none': 'Нет предложений для проверки', 'admin.moderation.pending': 'В ожидании', 'admin.moderation.active': 'Активно', 'admin.moderation.approve': 'Одобрить', 'admin.moderation.block': 'Заблокировать', 'admin.moderation.pending_title': 'Предложения на одобрение', 'admin.moderation.active_title': 'Активные предложения', 'admin.moderation.pending_count': 'В ожидании', 'admin.moderation.active_count': 'Активные', 'admin.moderation.pending_hint': 'Новые предложения, ожидающие проверки', 'admin.moderation.active_hint': 'Активные предложения, которые можно заблокировать', 'admin.moderation.pending_empty': 'Новых предложений для одобрения нет', 'admin.moderation.active_empty': 'Активных предложений не найдено', 'admin.reports.reviewed': 'Рассмотрено', 'admin.reports.dismiss': 'Отклонить', 'admin.pagination.total': 'Всего', 'admin.users.role.change': 'Изменить роль', 'admin.users.search.placeholder': 'Поиск по имени или email...', 'admin.tasks.delete': 'Удалить', 'admin.tasks.delete.confirm': 'Удалить эту задачу навсегда?', 'admin.tasks.search.placeholder': 'Поиск по названию...', 'admin.col.customer': 'Заказчик', 'admin.col.reporter': 'Жалобщик', 'admin.col.target': 'Цель', 'admin.filter.all_roles': 'Все роли', 'admin.filter.all_statuses': 'Все статусы', 'admin.reports.target.task': 'Задача', 'admin.reports.target.user': 'Пользователь', 'admin.tab.categories': 'Категории', 'admin.tab.locations': 'Города и районы', 'admin.tab.logs': 'Логи', 'admin.tab.plans': 'Тарифы', 'admin.tab.settings': 'Настройки', 'admin.logs.subtab.ai': 'AI логи', 'admin.logs.subtab.activity': 'Активность', 'admin.logs.subtab.mail': 'Mail', 'admin.logs.subtab.notifications': 'Уведомления', 'admin.notif_logs.type': 'Тип', 'admin.notif_logs.title': 'Заголовок', 'admin.notif_logs.read': 'Прочитано', 'admin.notif_logs.empty': 'Логи уведомлений пусты', 'admin.stats.notif_chart_title': 'Уведомления по дням', 'admin.stats.notif_label': 'Уведомления', 'admin.stats.mail_chart_title': 'Email по дням', 'admin.stats.mail_label': 'Emails', 'admin.filter.all': 'Все', 'admin.stats.specialists': 'Помощники', 'admin.col.plan': 'Тариф', 'admin.back_home': 'На главную', 'admin.plans.title': 'Тарифные пакеты', 'admin.plans.add': '+ Добавить тариф', 'admin.plans.empty': 'Тарифы не созданы', 'admin.plans.form.new': 'Новый тариф', 'admin.plans.form.edit': 'Редактировать тариф', 'admin.plans.form.name': 'Название', 'admin.plans.form.price': 'Цена (EUR)', 'admin.plans.form.old_price': 'Старая цена (EUR, необязательно)', 'admin.plans.form.max_offers': 'Макс. откликов (пусто = без лимита)', 'admin.plans.form.max_cards': 'Макс. предложений (пусто = без лимита)', 'admin.plans.form.duration_days': 'Срок (дней, пусто = без истечения)', 'admin.plans.form.description': 'Описание', 'admin.plans.form.features': 'Возможности (по одной на строку)', 'admin.plans.form.notify': 'Уведомления о новых заказах', 'admin.plans.form.default': 'По умолчанию', 'admin.plans.form.active': 'Активен', 'admin.plans.form.order': 'Порядок', 'admin.plans.form.role': 'Роль', 'admin.plans.form.tier': 'Уровень', 'admin.plans.form.role.customer': 'Заказчик', 'admin.plans.form.role.specialist': 'Помощник', 'admin.plans.form.tier.free': 'Бесплатный', 'admin.plans.form.tier.pro': 'Pro', 'admin.plans.form.tier.ultimate': 'Ultimate', 'admin.plans.form.section.limits': 'Лимиты (пусто = без ограничений)', 'admin.plans.form.max_messages_day': 'Макс. сообщений/день', 'admin.plans.form.max_orders_day': 'Макс. заказов/день', 'admin.plans.form.max_skills': 'Макс. навыков', 'admin.plans.form.max_profiles': 'Макс. профилей', 'admin.plans.form.max_portfolio': 'Макс. элементов портфолио', 'admin.plans.form.section.boost': 'Множители & Буст', 'admin.plans.form.search_boost': 'Буст в поиске', 'admin.plans.form.offers_multiplier': 'Множитель откликов', 'admin.plans.form.section.contact': 'Права контактов', 'admin.plans.form.can_contact_free': 'Контакт с бесплатными пользователями', 'admin.plans.form.can_contact_pro': 'Контакт с Pro пользователями', 'admin.plans.form.can_contact_all': 'Контакт со всеми', 'admin.plans.form.can_show_contact': 'Показывать контакты', 'admin.plans.form.can_view_phone': 'Просмотр телефона', 'admin.plans.form.section.features': 'Возможности', 'admin.plans.form.upload_video': 'Загрузка видео', 'admin.plans.form.favorites': 'Избранное', 'admin.plans.form.google_calendar': 'Google Calendar', 'admin.plans.form.verified_badge': 'Знак верификации', 'admin.plans.form.highlighted_reviews': 'Выделенные отзывы', 'admin.plans.form.personal_site': 'Личный сайт', 'admin.plans.form.can_help_now': 'Статус «Могу помочь»', 'admin.plans.form.need_help': 'Статус «Нужна помощь»', 'admin.plans.form.auto_response': 'Автоответ', 'admin.plans.form.auto_match': 'Автоподбор', 'admin.plans.form.price_list': 'Прайс-лист', 'admin.plans.form.instant_dispatch_free': 'Мгновенная рассылка (бесплатно)', 'admin.plans.form.instant_dispatch_pro': 'Мгновенная рассылка (Pro)', 'admin.plans.badge.default': 'По умолчанию', 'admin.plans.badge.inactive': 'Неактивен', 'admin.plans.make_default': 'Сделать по умолчанию', 'admin.plans.tasks': 'Задач', 'admin.plans.offers': 'Откликов', 'admin.plans.cards': 'Предложения', 'admin.plans.notify_tasks': 'Уведомления о заказах', 'admin.plans.delete.confirm': 'Удалить тариф', 'admin.activity.title': 'Журнал активности', 'admin.activity.event': 'Событие', 'admin.activity.all_events': 'Все события', 'admin.activity.from': 'От', 'admin.activity.to': 'До', 'admin.activity.reset': 'Сбросить', 'admin.activity.total': 'Всего', 'admin.activity.empty': 'Нет записей', 'admin.mail.event': 'Email событие', 'admin.mail.all_events': 'Все email события', 'admin.mail.from': 'От', 'admin.mail.to': 'До', 'admin.mail.reset': 'Сбросить', 'admin.mail.total': 'Всего', 'admin.mail.empty': 'Нет email логов', 'admin.mail.recipient': 'Получатель', 'admin.mail.provider': 'Провайдер', 'admin.mail.details': 'Детали', 'admin.mail.status': 'Статус', 'admin.mail.success': 'Успешно', 'admin.mail.failed': 'Ошибка', 'admin.event.email_sent': 'Email отправлен', 'admin.event.email_failed': 'Email не отправлен', 'admin.event.email_dev': 'Email DEV fallback', 'admin.event.admin_email_test_sent': 'Тестовый email отправлен', 'admin.event.admin_email_test_failed': 'Тестовый email не отправлен', 'admin.logs.empty': 'Нет записей', 'admin.logs.date': 'Дата', 'admin.logs.provider': 'Провайдер', 'admin.logs.model': 'Модель', 'admin.logs.action': 'Действие', 'admin.logs.langs': 'Языки', 'admin.logs.in': 'Вход', 'admin.logs.out': 'Выход', 'admin.logs.total': 'Итого', 'admin.logs.ms': 'мс', 'admin.logs.status': 'Статус', 'admin.stats.activity_30d': 'Активность за 30 дней', 'admin.stats.tasks_label': 'Заявки', 'admin.stats.users_label': 'Пользователи', 'admin.stats.specialists_label': 'Помощники', 'admin.stats.tokens_title': 'Расход токенов (по месяцам)', 'admin.stats.tokens_out': 'Исходящие', 'admin.stats.tokens_in': 'Входящие', 'admin.stats.tokens_out_label': 'Исходящие токены', 'admin.stats.tokens_in_label': 'Входящие токены', 'admin.stats.cost_label': 'Стоимость (USD)', 'admin.stats.tasks_by_status': 'Заявки по статусам', 'admin.task_status.open': 'Открытые', 'admin.task_status.in_progress': 'В работе', 'admin.task_status.completed': 'Завершённые', 'admin.task_status.cancelled': 'Отменённые', 'admin.task_status.draft': 'Черновики', 'admin.settings.tab.general': 'Общие', 'admin.settings.tab.smtp': 'E-Mail', 'admin.settings.tab.notifications': 'Уведомления', 'admin.settings.tab.payment': 'Оплата', 'admin.settings.tab.referral': 'Реферальная', 'admin.settings.tab.seo': 'SEO', 'admin.settings.tab.socials': 'Соцсети', 'admin.settings.tab.telegram': 'Telegram Bot', 'admin.settings.telegram.title': 'Настройки Telegram Bot', 'admin.settings.telegram.help': 'Создайте бота через @BotFather. ID чата узнайте через @userinfobot.', 'admin.settings.telegram.bot_token': 'Bot Token', 'admin.settings.telegram.admin_chat_id': 'Chat ID администратора', 'admin.settings.telegram.admin_chat_hint': 'Сначала отправьте /start своему боту, затем узнайте chat ID через @userinfobot', 'admin.settings.telegram.channel_id': 'неиспользуется', 'admin.settings.telegram.channels_title': 'Каналы по языкам', 'admin.settings.telegram.channel_hint': 'Username публичного канала (@канал) или числовой ID', 'admin.settings.telegram.notify_registrations': 'Уведомлять о новых регистрациях', 'admin.settings.telegram.notify_registrations_hint': 'Отправлять сообщение при регистрации нового пользователя', 'admin.settings.telegram.post_new_tasks': 'Публиковать новые задания в канал', 'admin.settings.telegram.post_new_tasks_hint': 'Автоматически публиковать новые задания в Telegram-канал', 'admin.settings.telegram.test': 'Тест', 'admin.settings.telegram.verify': 'Проверить токен', 'admin.settings.telegram.test_ok': 'Соединение работает', 'admin.settings.telegram.test_fail': 'Ошибка соединения', 'admin.settings.socials.title': 'Ссылки на социальные сети', 'admin.settings.socials.hint': 'Заполненные ссылки отображаются в подвале сайта', 'admin.settings.seo.maintenance_label': 'Режим обслуживания', 'admin.settings.seo.maintenance_hint': 'Показывать страницу обслуживания всем посетителям', 'admin.settings.seo.indexing_label': 'Индексация поисковыми системами', 'admin.settings.seo.indexing_hint': 'Разрешить поисковым системам индексировать сайт', 'admin.settings.seo.head_scripts_label': 'Скрипты в (JS)', 'admin.settings.seo.head_scripts_hint': 'Выполняется на каждой странице (Google Tag Manager, аналитика и т.д.)', 'admin.settings.seo.site_title_label': 'Заголовок сайта', 'admin.settings.seo.site_description_label': 'Описание сайта (meta description)', 'admin.settings.referral.title': 'Партнёрская программа', 'admin.settings.referral.hint': 'Награждайте пользователей, приводящих новых участников.', 'admin.settings.referral.enabled_label': 'Включено', 'admin.settings.referral.enabled_hint': 'Включить / отключить выдачу наград', 'admin.settings.referral.customer_section': 'Для клиентов', 'admin.settings.referral.specialist_section': 'Для помощников', 'admin.settings.referral.plan_label': 'Тарифный план за реферала', 'admin.settings.referral.no_plan': '— без плана —', 'admin.settings.referral.plan_hint': 'Этот план будет назначен пригласившему. Если его текущий план выше — добавятся только дни.', 'admin.settings.referral.days_label': 'Дней награды', 'admin.settings.referral.days_hint': 'Количество дней, добавляемых к сроку действия плана.', 'admin.settings.general.title': 'Общие настройки', 'admin.settings.general.site_name': 'Название сайта', 'admin.settings.general.site_url': 'URL сайта', 'admin.settings.general.contact_email': 'Email для связи', 'admin.settings.general.support_phone': 'Телефон поддержки', 'admin.settings.smtp.title': 'Настройки SMTP сервера', 'admin.settings.smtp.hint': 'Используется для отправки email-уведомлений.', 'admin.settings.smtp.host': 'SMTP Хост', 'admin.settings.smtp.port': 'Порт', 'admin.settings.smtp.encryption': 'Шифрование', 'admin.settings.smtp.enc.none': 'Нет', 'admin.settings.smtp.enc.tls': 'STARTTLS (порт 587)', 'admin.settings.smtp.enc.ssl': 'SSL/TLS (порт 465)', 'admin.settings.smtp.username': 'Имя пользователя', 'admin.settings.smtp.password': 'Пароль / App Password', 'admin.settings.smtp.from_name': 'Имя отправителя', 'admin.settings.smtp.from_email': 'Email отправителя', 'admin.settings.smtp.test': 'Отправить тестовый email', 'admin.settings.smtp.sending': 'Отправка...', 'admin.settings.payment.hint': 'Данные для подключения к ePay Piraeus Bank.', 'admin.settings.env.test': 'Тест (sandbox)', 'admin.settings.env.prod': 'Боевой режим', 'admin.settings.env.label': 'Среда', 'admin.settings.merchant_id': 'Merchant ID', 'admin.settings.api_user': 'API User', 'admin.settings.api_password': 'API Password', 'admin.settings.confirm_url': 'Confirmation URL (webhook)', 'admin.settings.cancel_url': 'Cancel URL', 'admin.settings.active': 'Активен', 'admin.settings.saving': 'Сохранение...', 'admin.settings.saved': 'Сохранено', 'admin.notif.vars_hint': 'Доступные переменные в шаблонах', 'admin.notif.tmpl.not_set': 'Шаблон не настроен', 'admin.notif.tmpl.subject_label': 'Тема письма', 'admin.notif.tmpl.body_label': 'Текст письма (HTML)', 'admin.notif.tmpl.save': 'Сохранить', 'admin.notif.tmpl.close': 'Закрыть', 'admin.notif.tmpl.translate': 'Авто-перевод на другие языки', 'admin.notif.tmpl.translating': 'Перевод...', 'admin.notif.tmpl.saving': 'Сохранение...', 'admin.notif.email_verification': 'Подтверждение email адреса', 'admin.notif.registration_success': 'Успешная регистрация', 'admin.notif.password_reset': 'Восстановление пароля', 'admin.notif.new_offer': 'Новое предложение', 'admin.notif.new_task': 'Новая задача', 'admin.notif.offer_accepted': 'Предложение принято', 'admin.notif.new_message': 'Новое сообщение', 'admin.notif.offer_declined': 'Отклонение предложения', 'admin.notif.offer_other_accepted': 'Выбран другой исполнитель', 'admin.notif.task_updated': 'Изменение задания', 'admin.notif.deadline_reminder': 'Напоминание о дедлайне', 'admin.notif.task_archived': 'Автоснятие задания', 'admin.notif.referral_reward': 'Реферальная награда', // Шаблоны email для тарифов 'admin.email_template.plan_activated': 'Тарифы — активация тарифа', 'admin.email_template.plan_upgraded': 'Тарифы — повышение тарифа', 'admin.email_template.plan_downgrade_scheduled': 'Тарифы — запланированное понижение', 'admin.email_template.plan_downgrade_applied': 'Тарифы — применение понижения', 'admin.email_template.plan_renewal_reminder': 'Тарифы — напоминание о продлении', 'admin.email_template.plan_insufficient_funds': 'Тарифы — нехватка средств', // Модальное окно подтверждения тарифа 'pricing.confirm.title': 'Подтвердите выбор тарифа', 'pricing.confirm.plan': 'Тариф', 'pricing.confirm.prorated': 'Зачёт остатка', 'pricing.confirm.effective_price': 'К оплате', 'pricing.confirm.your_balance': 'Ваш баланс', 'pricing.confirm.downgrade_info': 'Переход на новый тариф произойдёт автоматически после окончания текущего периода.', 'pricing.confirm.insufficient': 'Недостаточно средств на балансе.', 'pricing.confirm.top_up': 'Пополнить', 'pricing.confirm.schedule_downgrade': 'Запланировать переход', 'pricing.confirm.pay': 'Оплатить', 'admin.user_edit.title': 'Редактирование пользователя', 'admin.user_edit.email': 'Email', 'admin.user_edit.email_verified': 'Email подтверждён', 'admin.user_edit.email_not_verified': 'Email не подтверждён', 'admin.user_edit.verify_email_btn': 'Подтвердить вручную', 'admin.user_edit.verify_email_done': 'Email подтверждён!', 'admin.user_edit.id': 'ID', 'admin.user_edit.registered': 'Регистрация', 'admin.user_edit.last_seen': 'Последний визит', 'admin.user_edit.lang': 'Язык', 'admin.user_edit.first_name': 'Имя', 'admin.user_edit.last_name': 'Фамилия', 'admin.user_edit.phone': 'Телефон', 'admin.user_edit.bio': 'О себе', 'admin.user_edit.role': 'Роль', 'admin.user_edit.plan': 'Тариф', 'admin.user_edit.no_plan': '— Без тарифа —', 'admin.user_edit.active': 'Активный аккаунт', 'admin.user_edit.published': 'Опубликована', 'admin.user_edit.balance': 'Баланс (EUR)', 'admin.user_edit.skills': 'Навыки', 'admin.user_edit.tab.profile': 'Профиль', 'admin.user_edit.tab.account': 'Аккаунт', 'admin.user_edit.tab.balance': 'Баланс', 'admin.user_edit.tab.settings': 'Настройки', 'admin.user_edit.tab.specialist': 'Предложения', 'admin.user_edit.tab.site': 'Сайт', 'admin.user_edit.plan_expires': 'Тариф истекает', 'admin.user_edit.interface_lang': 'Язык интерфейса', 'admin.user_edit.comm_languages': 'Языки общения', 'admin.user_edit.personal_site_slug': 'Персональная страница', 'admin.user_edit.show_contact_info': 'Показывать контакты', 'admin.user_edit.show_contact_info.hint': 'Видно заказчикам', 'admin.user_edit.notify_new_tasks': 'Уведомлять о новых задачах', 'admin.user_edit.notify_new_tasks.hint': 'Push и email уведомления', 'admin.user_edit.notif_messages': 'Уведомления о сообщениях', 'admin.user_edit.notif_messages.hint': 'Новые сообщения в чате', 'admin.user_edit.site_settings': 'Настройки персональной страницы', 'admin.user_edit.categories': 'Категории услуг', 'admin.user_edit.locations': 'Районы обслуживания', 'admin.user_edit.skill_placeholder': 'Новый навык...', 'admin.user_edit.add_category': '— Выберите категорию —', 'admin.user_edit.add_location': '— Выберите район —', 'admin.user_edit.specialist_cards': 'Предложения специалиста', 'admin.user_edit.no_cards': 'Предложения не найдены', 'admin.user_edit.card_title': 'Заголовок предложения', 'admin.user_edit.card_description': 'Описание', 'admin.balance.topup.btn': 'Пополнить', 'admin.balance.withdraw.btn': 'Списать', 'admin.balance.modal_hint': 'Изменения применяются сразу и фиксируются в истории', 'admin.balance.topup.title': 'Пополнение баланса', 'admin.balance.topup.amount': 'Сумма', 'admin.balance.topup.description': 'Комментарий', 'admin.balance.topup.description.placeholder': 'Например: бонус или ручное пополнение', 'admin.balance.topup.submit': 'Пополнить баланс', 'admin.balance.withdraw.title': 'Снятие баланса', 'admin.balance.withdraw.amount': 'Сумма', 'admin.balance.withdraw.description': 'Комментарий', 'admin.balance.withdraw.description.placeholder': 'Например: возврат или ручное списание', 'admin.balance.withdraw.submit': 'Списать баланс', 'admin.user_edit.role.customer': 'Заказчик', 'admin.user_edit.role.user': 'Пользователь', 'admin.user_edit.role.specialist': 'Помощник', 'admin.user_edit.role.admin': 'Администратор', 'common.refresh': 'Обновить', 'common.back_home': 'На главную', 'admin.loc.hint': 'Управление городами и районами', 'admin.loc.add_city': 'Новый город', 'admin.loc.add_district': 'Добавить район', 'admin.loc.new': 'Новая локация', 'admin.loc.edit': 'Редактировать локацию', 'admin.loc.district': 'район', 'admin.loc.empty': 'Нет локаций', 'admin.loc.delete.confirm': 'Удалить локацию? Все районы также будут удалены.', 'admin.cat.add_root': 'Новая категория', 'admin.cat.add_sub': 'Подкатегория', 'admin.cat.edit': 'Редактировать', 'admin.cat.delete': 'Удалить', 'admin.cat.delete.confirm': 'Удалить категорию? Все подкатегории также будут удалены.', 'admin.cat.slug': 'Slug', 'admin.cat.icon': 'Иконка', 'admin.cat.name_el': 'Греческий', 'admin.cat.name_en': 'Английский', 'admin.cat.name_ru': 'Русский', 'admin.cat.name_uk': 'Украинский', 'admin.cat.active': 'Активна', 'admin.cat.parent': 'Родительская категория', 'admin.cat.no_parent': 'Верхний уровень', 'admin.cat.save': 'Сохранить', 'admin.cat.cancel': 'Отмена', 'admin.cat.empty': 'Нет категорий', 'admin.cat.hint': 'Управление категориями с многоуровневой иерархией', 'admin.cat.new': 'Новая категория', 'admin.cat.subcategory': 'подкатегория', 'admin.cat.add_child': 'Добавить подкатегорию', 'admin.cat.inactive': 'Неактивна', 'admin.event.user_login': 'Вход', 'admin.event.user_register': 'Регистрация', 'admin.event.admin_user_deactivate': 'Блокировка юзера', 'admin.event.admin_user_activate': 'Разблокировка юзера', 'admin.event.admin_user_role_changed': 'Смена роли', 'admin.event.admin_task_cancelled': 'Отмена задачи', 'admin.event.admin_task_deleted': 'Удаление задачи', 'admin.event.admin_report_reviewed': 'Жалоба рассмотрена', 'admin.event.admin_report_dismissed': 'Жалоба отклонена', 'admin.event.task_created': 'Создана задача', // User status 'user.online': 'Онлайн', 'user.seen_minutes': 'был здесь {n} мин назад', 'user.seen_hours': 'был здесь {n} ч назад', 'user.seen_yesterday': 'был здесь вчера', 'user.seen_days': 'был здесь {n} дн назад', // Specialists 'specialists.title': 'Предложения', 'specialists.search': 'Поиск специалиста...', 'specialists.search.btn': 'Поиск', 'specialists.empty': 'Специалисты не найдены', 'specialists.no_bio': 'Без описания', 'specialists.view': 'Смотреть профиль', 'specialists.reviews': 'отзывов', 'specialist.favorite': 'Добавить в избранное', 'specialist.unfavorite': 'Убрать из избранного', 'specialist.site_link': 'Личный сайт', 'favorites.specialists.title': 'Избранные специалисты', 'favorites.specialists.empty': 'Вы ещё не добавили специалистов в избранное', 'nav.favorites': 'Избранное', 'nav.schedule': 'Расписание', 'nav.find_tasks': 'Поиск заказов', 'schedule.title': 'Моё расписание', 'schedule.subtitle': 'Отмечайте дни когда вы свободны или заняты — заказчики увидят вашу доступность', 'schedule.available': 'Свободен', 'schedule.busy': 'Занят', 'schedule.unset': 'Не указано', 'schedule.click_hint': '← клик меняет статус по кругу', 'schedule.range_mode': 'Выделить диапазон', 'schedule.range_from': 'С {date} — выберите конечную дату', 'schedule.click_to_set': 'Нажмите чтобы отметить', 'schedule.free': 'свободно', 'schedule.busy_count': 'занято', 'schedule.free_days': 'свободных дней', 'schedule.googleCalendar': 'Google Календарь', 'schedule.connectGoogle': 'Подключить Google Календарь', 'schedule.disconnectGoogle': 'Отключить', 'schedule.connectedAs': 'Подключено как', 'schedule.importFromGoogle': 'Синхр. из Google', 'schedule.gcalConnected': '\u2713 Google Календарь подключён', 'schedule.gcalError': 'Ошибка подключения Google Календарь', 'schedule.gcalImportDone': 'Импортировано {n} дней из Google Календарь', 'schedule.gcalAutoSyncNote': 'Изменения доступности автоматически отправляются в Google Календарь', 'schedule.gcalConnectDesc': 'Подключите Google Календарь для автоматической синхронизации расписания', 'schedule.gcalDisconnectConfirm': 'Отключить Google Календарь?', 'find_tasks.title': 'Поиск заказов', 'find_tasks.for_me': 'Для меня', 'find_tasks.all': 'Все заказы', 'find_tasks.by_category': 'По категориям', 'find_tasks.list': 'Списком', 'find_tasks.already_offered': 'Предложение отправлено', 'find_tasks.offer_now': 'Откликнуться', 'find_tasks.empty_for_me': 'Нет заказов в ваших категориях', 'find_tasks.banner_hint': 'Найдите заказы по категориям вашего портфолио', 'find_tasks.no_cards': 'Создайте портфолио специалиста, чтобы видеть подходящие заказы', 'find_tasks.add_card': 'Создать портфолио', 'find_tasks.search': 'Поиск заказов...', 'find_tasks.tasks_count': 'заданий', 'footer.tagline': 'Платформа задач для Греции', 'footer.rights': 'Все права защищены.', 'nav.privacy': 'Политика конфиденциальности', 'nav.delete_account': 'Удаление аккаунта', 'delete_account.title': 'Запрос на удаление аккаунта', 'delete_account.subtitle': 'После проверки вашего запроса мы навсегда удалим ваш аккаунт и данные в течение 30 дней.', 'delete_account.warning': 'Это действие нельзя отменить. Все ваши данные будут удалены безвозвратно.', 'delete_account.reason_label': 'Причина (необязательно)', 'delete_account.reason_placeholder': 'Расскажите, почему вы хотите удалить аккаунт...', 'delete_account.confirm_label': 'Подтверждаю, что хочу навсегда удалить свой аккаунт', 'delete_account.submit': 'Отправить запрос', 'delete_account.submitting': 'Отправка...', 'delete_account.success_title': 'Ваш запрос получен', 'delete_account.success_body': 'Мы обработаем ваш запрос в течение 30 дней и уведомим вас по email.', 'delete_account.login_required': 'Для отправки запроса на удаление необходимо войти в аккаунт.', 'delete_account.login_btn': 'Войти', // App download section 'app.download_title': 'Скачайте мобильное приложение CanHelp', 'app.download_desc': 'Всё CanHelp — всегда под рукой. Доступно для Android и iOS.', // Nav 'nav.pricing': 'Тарифы', // Pricing page 'pricing.title': 'Тарифы', 'pricing.subtitle': 'Выберите подходящий план', 'pricing.role.customer': 'Заказчик', 'pricing.role.specialist': 'Специалист', 'pricing.free': 'Бесплатно', 'pricing.per_month': 'мес', 'pricing.duration': 'Срок', 'pricing.days': 'дн.', 'pricing.current_plan': 'Ваш план', 'pricing.popular': 'Популярный', 'pricing.choose': 'Выбрать', 'pricing.your_plan': 'Активный план', 'pricing.free_default': 'По умолчанию', 'pricing.compare': 'Сравнение функций', 'pricing.feature': 'Функция', 'pricing.faq_note': 'Оплата списывается с баланса CanHelp. Пополнение доступно в разделе Оплата.', 'pricing.feat.messages': 'Сообщений / день', 'pricing.feat.orders': 'Заказов / день', 'pricing.feat.contact_all': 'Связь со всеми', 'pricing.feat.view_phone': 'Просмотр телефона', 'pricing.feat.show_contact': 'Показывать контакты', 'pricing.feat.favorites': 'Избранное', 'pricing.feat.verified_badge': 'Верифицированный бейдж', 'pricing.feat.google_calendar': 'Google Календарь', 'pricing.feat.personal_site': 'Персональный сайт', 'pricing.feat.auto_response': 'Авто-ответ', 'pricing.feat.auto_match': 'Авто-подбор', 'pricing.feat.highlighted_reviews': 'Выделенные отзывы', 'pricing.feat.portfolio': 'Элементов предложения', 'pricing.feat.cards': 'Количество предложений', 'pricing.feat.notify_tasks': 'Уведомления о новых задачах', 'pricing.feat.video': 'Видео в предложении', // Upgrade prompt 'upgrade.available_in': 'Доступно в', 'upgrade.cta': 'Улучшить', // Dashboard plan block 'dashboard.plan.title': 'Мой план', 'dashboard.plan.expires': 'Истекает через {n} дней', 'dashboard.plan.upgrade': 'Улучшить план', 'dashboard.plan.no_plan': 'Бесплатный план', 'dashboard.plan.messages': 'Сообщений сегодня', 'dashboard.plan.orders': 'Заказов сегодня', 'dashboard.plan.limits': 'Дневные лимиты', 'dashboard.plan.features': 'Функции', 'dashboard.plan.stats': 'Статистика', 'dashboard.stats.cards': 'Портфолио', 'dashboard.stats.maxCards': 'Макс. портфолио', 'dashboard.stats.portfolioItems': 'Элементы портфолио', 'dashboard.stats.maxPortfolioItems': 'Макс. элементы', 'dashboard.stats.activeOffers': 'Активные отклики', 'dashboard.stats.reviewsReceived': 'Отзывы', 'dashboard.stats.activeTasks': 'Активные задачи', 'dashboard.stats.completedTasks': 'Завершённые', 'status.need_help': 'Нужна помощь', 'status.active': 'Активен', 'status.toggle_on': 'Включить', 'status.toggle_off': 'Выключить', // FOMO 'fomo.missed_orders': 'Пропущено {n} заказов', 'fomo.missed_value': 'На сумму €{v}', 'fomo.upgrade_hint': 'Улучшите план — получайте больше заказов', 'fomo.conversion': 'Конверсия задач', 'fomo.active': 'Активные', 'fomo.with_offers': 'С офертами', 'fomo.completed': 'Завершённые', 'fomo.already_offered': '{n} специалистов уже откликнулись', 'fomo.specialist_missed': 'Вы пропустили {n} заказов', 'fomo.top_categories': 'Категории', 'fomo.offers_received': 'предложений получено', 'fomo.avg_offers': 'В среднем {n}/задача', 'fomo.completion_rate': 'завершено', // Task auto-match 'task.auto_match': 'Авто-матч', 'task.auto_match_results': 'Топ специалисты', 'task.no_offer_yet': 'Вы ещё не отправили предложение', 'task.make_offer': 'Отправить предложение', 'auto_response.title': 'Авто-ответ', 'auto_response.enabled': 'Включить авто-ответ', 'auto_response.min_budget': 'Мин. бюджет', 'auto_response.max_budget': 'Макс. бюджет', 'auto_response.default_price': 'Цена по умолчанию', 'auto_response.default_message': 'Сообщение по умолчанию', 'auto_response.max_per_day': 'Макс. авто-офертов в день', 'auto_response.save': 'Сохранить', 'auto_response.saved': 'Сохранено', 'auto_response.categories': 'Категории', 'auto_response.locations': 'Локации', // Personal site 'profile.personal_site': 'Персональный сайт', 'profile.site_slug': 'URL slug', 'profile.site_slug_hint': 'Только латинские буквы, цифры, - и _', 'profile.site_open': 'Открыть сайт', 'profile.site_preview': 'Ваш сайт', 'profile.show_contact': 'Показывать контакты', 'profile.show_contact_hint': 'Заказчики с Pro/Ultimate-планом увидят ваш телефон', // Google Calendar plan gate 'gcal.upgrade_required': 'Google Календарь требует план Pro или Ultimate', // Chat limits 'chat.limit_warning': 'Осталось {n} сообщений сегодня', 'chat.limit_reached': 'Лимит сообщений исчерпан. Улучшите план', 'chat.upgrade': 'Улучшить', // Site page 'site.member_since': 'С нами с', 'site.rating': 'Рейтинг', 'site.completed_tasks': 'Выполнено', 'site.languages': 'Языков', 'site.photos': 'фото', 'site.contact_form': 'Связаться', 'site.contact_sent': 'Сообщение отправлено!', 'site.contact_sent_desc': 'Специалист свяжется с вами в ближайшее время', 'site.contact_name': 'Имя', 'site.contact_name_ph': 'Ваше имя', 'site.contact_email_ph': 'your@email.com', 'site.contact_message': 'Сообщение', 'site.contact_message_ph': 'Опишите вашу задачу...', 'site.contact_send': 'Отправить', 'site.share': 'Поделиться', 'site.speaks_languages': 'Говорит на языках', 'site.message_sent': 'Сообщение отправлено!', 'site.message_sent_desc': 'Специалист получит его в чате', 'site.message_placeholder': 'Напишите сообщение...', 'site.write_to_chat': 'Написать в чат', 'site.auth_required_title': 'Нужна авторизация', 'site.auth_required_desc': 'Чтобы написать в чат, необходимо войти в аккаунт CanHelp.', 'site.auth_login_btn': 'Войти в аккаунт', 'site.auth_contact_form_btn': 'Написать через форму обратной связи', 'specialist.services': 'Услуги', 'portfolio.title': 'Портфолио', 'status.can_help_now': 'Готов помочь', 'common.not_found': 'Страница не найдена', 'common.anonymous': 'Анонимно', 'specialist_setup.page_title': 'Настройка профиля специалиста', 'specialist_setup.step_of': 'Шаг {current} из {total}', 'specialist_setup.next': 'Далее', 'specialist_setup.back': 'Назад', 'specialist_setup.skip': 'Пропустить', 'specialist_setup.finish': 'Завершить', 'specialist_setup.go_to_profile': 'Перейти в профиль', 'specialist_setup.browse_tasks': 'Найти задачи', 'specialist_setup.step1.title': 'Добро пожаловать!', 'specialist_setup.step1.subtitle': 'Давайте настроим ваш профиль', 'specialist_setup.step1.desc': 'Полный профиль помогает находить больше клиентов. Следуйте шагам, чтобы создать идеальный профиль специалиста.', 'specialist_setup.step1.what_next': 'Что мы сделаем:', 'specialist_setup.step1.item1': 'Заполним основную информацию', 'specialist_setup.step1.item2': 'Создадим карточку услуги', 'specialist_setup.step1.item3': 'Добавим навыки и категории', 'specialist_setup.step1.item4': 'Выберем географию обслуживания', 'specialist_setup.step1.item5': 'Загрузим фото портфолио', 'specialist_setup.step2.title': 'Базовый профиль', 'specialist_setup.step2.subtitle': 'Расскажите о себе', 'specialist_setup.step2.bio_label': 'О себе', 'specialist_setup.step2.bio_placeholder': 'Опишите ваш опыт, услуги которые вы предлагаете...', 'specialist_setup.step2.phone_label': 'Телефон', 'specialist_setup.step2.phone_placeholder': '+30 6900000000', 'specialist_setup.step2.photo_label': 'Фото профиля', 'specialist_setup.step2.photo_btn': 'Загрузить фото', 'specialist_setup.step2.photo_uploading': 'Загрузка...', 'specialist_setup.step2.photo_hint': 'Отображается в вашем профиле', 'specialist_setup.step3.title': 'Карточка услуги', 'specialist_setup.step3.subtitle': 'Создайте вашу первую карточку услуги', 'specialist_setup.step3.title_label': 'Название карточки', 'specialist_setup.step3.title_placeholder': 'Напр. Сантехник, Электрик, Уборка...', 'specialist_setup.step3.desc_label': 'Описание', 'specialist_setup.step3.desc_placeholder': 'Подробно опишите что вы предлагаете, опыт, преимущества...', 'specialist_setup.step3.title_required': 'Название обязательно', 'specialist_setup.step4.title': 'Навыки и категории', 'specialist_setup.step4.subtitle': 'Добавьте навыки и выберите категории', 'specialist_setup.step4.skills_label': 'Навыки', 'specialist_setup.step4.skills_placeholder': 'Напр. Монтаж труб...', 'specialist_setup.step4.skills_add': 'Добавить', 'specialist_setup.step4.categories_label': 'Категории', 'specialist_setup.step5.title': 'География обслуживания', 'specialist_setup.step5.subtitle': 'Где вы оказываете услуги?', 'specialist_setup.step5.hint': 'Выберите города или конкретные районы', 'specialist_setup.done.title': 'Ваш профиль готов!', 'specialist_setup.done.subtitle': 'Поздравляем! Профиль настроен', 'specialist_setup.done.desc': 'Теперь вы можете получать заказы от клиентов. Найдите задачи, которые соответствуют вашим навыкам.', // Support 'support.title': 'Поддержка', 'support.type.label': 'Тип обращения', 'support.type.bug': 'Ошибка', 'support.type.suggestion': 'Предложение', 'support.type.other': 'Другое', 'support.subject': 'Тема', 'support.subject.placeholder': 'Кратко опишите проблему...', 'support.body': 'Сообщение', 'support.body.placeholder': 'Подробно опишите проблему или предложение...', 'support.submit': 'Отправить', 'support.cancel': 'Отмена', 'support.error': 'Ошибка отправки. Попробуйте ещё раз.', 'support.sent.title': 'Запрос получен!', 'support.sent.body': 'Мы ответим на ваш email в ближайшее время.', 'support.sent.close': 'Закрыть', 'admin.tab.support': 'Поддержка', 'admin.tab.backup': 'Бэкап', 'admin.tab.translations': 'Переводы', 'admin.tab.dbcheck': 'Проверка БД', 'admin.tab.balances': 'Баланс', 'admin.tab.push': 'Push', 'admin.tab.referrals': 'Рефералы', 'admin.search': 'Поиск', 'admin.noData': 'Нет данных', 'admin.cat.order': 'Порядок', 'admin.cat.skills': 'Навыки', 'admin.plans.form.max_tasks': 'Макс. задач', 'admin.settings.referral.shared_section': 'Общие настройки рефералов', 'admin.settings.seo.title': 'SEO настройки', 'admin.backup.title': 'Бэкап', 'admin.backup.tables': 'Таблицы', 'admin.backup.exportAll': 'Экспорт всего', 'admin.backup.importAll': 'Импорт всего', 'admin.backup.exportTable': 'Экспорт таблицы', 'admin.backup.importTable': 'Импорт таблицы', 'admin.backup.exporting': 'Экспорт...', 'admin.backup.importing': 'Импорт...', 'admin.backup.exportSuccess': 'Экспорт завершён', 'admin.backup.importSuccess': 'Импорт завершён', 'admin.backup.autoBackup': 'Автобэкап', 'admin.backup.autoBackupDesc': 'Автоматический ежедневный бэкап', 'admin.backup.storedBackups': 'Сохранённые бэкапы', 'admin.backup.noStoredBackups': 'Сохранённых бэкапов нет', 'admin.backup.restore': 'Восстановить', 'admin.backup.restoreConfirm': 'Восстановить из бэкапа?', 'admin.backup.restoreSuccess': 'Восстановление завершено', 'admin.backup.restoring': 'Восстановление...', 'admin.backup.date': 'Дата', 'admin.backup.size': 'Размер', 'admin.backup.today': 'Сегодня', 'admin.backup.yesterday': 'Вчера', 'admin.balance.col.operation': 'Операция', 'admin.balance.col.amount': 'Сумма', 'admin.balance.col.result': 'Баланс', 'admin.balance.col.description': 'Описание', 'admin.balance.col.date': 'Дата', 'admin.balance.empty': 'Записей пока нет', 'admin.balance.filter.all': 'Все операции', 'admin.balance.filter.user_id': 'Фильтр по userId', 'admin.balance.kind.topup': 'Пополнение', 'admin.balance.kind.plan_purchase': 'Списание за тариф', 'admin.balance.kind.admin_topup': 'Пополнение админом', 'admin.balance.kind.admin_adjustment': 'Корректировка', 'admin.support.search': 'Поиск', 'admin.support.all_statuses': 'Все статусы', 'admin.support.all_types': 'Все типы', 'admin.support.none': 'Обращений нет', 'admin.support.reply': 'Ответить', 'admin.support.reply_placeholder': 'Введите ответ...', 'admin.support.send_reply': 'Отправить ответ', 'admin.support.cancel': 'Отмена', 'admin.support.close': 'Закрыть', 'admin.support.status.open': 'Открыто', 'admin.support.status.in_progress': 'В работе', 'admin.support.status.resolved': 'Решено', 'admin.support.status.closed': 'Закрыто', 'admin.support.your_reply': 'Ваш ответ', 'admin.user_edit.visibility_requirements.title': 'Профиль пока не попадает в «Предложения»', 'admin.user_edit.visibility_requirements.hint': 'Нужно выполнить условия видимости:', 'admin.user_edit.visibility_requirements.bio': 'Заполнить описание (bio)', 'admin.user_edit.visibility_requirements.published_card': 'Опубликовать хотя бы одну карточку', 'admin.user_edit.visibility_requirements.categories': 'Указать категорию в опубликованной карточке', 'admin.user_edit.visibility_requirements.locations': 'Указать локацию в опубликованной карточке', 'auto_response.desc': 'Автоматически отвечать на подходящие задачи', 'auto_response.budget_range': 'Бюджет задачи', 'auto_response.message_placeholder': 'Здравствуйте! Я могу помочь с этой задачей...', 'profile.background.title': 'Фон шапки профиля', 'profile.background.hint': 'Показывается в шапке публичного профиля на web и в мобильном приложении.', 'profile.photo.uploading': 'Загрузка...', 'profile.balance.history': 'Архив операций', 'profile.balance.history.last': 'Последние операции', 'profile.balance.history.empty': 'Операций пока нет', 'profile.balance.history.balance_after': 'Баланс после', 'profile.balance.history.kind.topup': 'Пополнение баланса', 'profile.balance.history.kind.plan_purchase': 'Списание за тариф', 'profile.balance.history.kind.admin_topup': 'Пополнение администратором', 'profile.balance.history.kind.admin_adjustment': 'Корректировка администратором', 'profile.plan_history.title': 'История тарифного плана', 'profile.plan_history.empty': 'История изменений тарифа пока пуста', 'profile.plan_history.expires': 'До', 'profile.plan_history.days': 'дней', 'profile.plan_history.event.activated': 'Активирован', 'profile.plan_history.event.renewed': 'Продлён', 'profile.plan_history.event.downgraded': 'Понижен', 'profile.plan_history.event.referral_reward': 'Реферальная награда', 'profile.plan_history.event.admin_change': 'Изменён администратором', 'profile.plan_history.event.expired': 'Истёк', 'profile.show_contact_desc': 'Позволяет клиентам связаться напрямую', 'profile.site.visible.price_list': 'Прайслист', 'site.pricelist': 'Прайслист', 'status.plan_required': 'Статус недоступен на текущем тарифе', 'status.admin_not_applicable': 'Для аккаунта администратора пользовательский статус не применяется' }, uk: { 'footer.slogan': 'Ваше завдання — наша турбота! Вирішуємо будь-які питання швидко і зручно.', 'footer.links': 'Посилання', 'footer.socials': 'Ми в соцмережах', 'nav.home': 'Головна', 'nav.tasks': 'Завдання', 'nav.post': '+ Опублікувати', 'nav.dashboard': 'Мої завдання', 'nav.chat': 'Повідомлення', 'nav.notifications': 'Сповіщення', 'nav.profile': 'Профіль', 'nav.admin': 'Адмінка', 'nav.specialists': 'Пропозиції', 'nav.new_task': 'Нове завдання', 'nav.login': 'Увійти', 'nav.register': 'Реєстрація', 'nav.logout': 'Вийти', 'hero.title': 'Кожен має навичку, яка може допомогти іншому', 'hero.subtitle': 'Знайди допомогу, запропонуй свої навички або заробляй, допомагаючи іншим', 'hero.cta.post': 'Знайти допомогу', 'hero.cta.browse': 'Запропонувати допомогу', 'hero.cta.specialists': 'Знайти роботу', 'hero.search.placeholder': 'Що потрібно? напр. електрик, прибирання...', 'hero.specialist.title': 'Знайдіть замовлення поруч з вами', 'hero.specialist.subtitle': 'Відкрийте замовлення у своїх категоріях і надішліть пропозицію', 'hero.specialist.cta': 'Знайти замовлення', 'hero.specialist.search.placeholder': 'Пошук замовлень... напр. електрика, прибирання', 'section.categories.specialist': 'Знайдіть замовлення за категорією', 'section.cities.specialist': 'Замовлення за містом', 'how.specialist.step1.title': 'Створіть картку спеціаліста', 'how.specialist.step1.desc': 'Вкажіть категорії, навички і райони — система знайде підходящі замовлення автоматично', 'how.specialist.step2.title': 'Знайдіть підходящі замовлення', 'how.specialist.step2.desc': 'Переглядайте замовлення у своїх категоріях і починайте роботу одразу', 'how.specialist.step3.title': 'Надішліть пропозицію і заробляйте', 'how.specialist.step3.desc': 'Подайте пропозицію з ціною і термінами, спілкуйтеся з клієнтами і виконуйте замовлення', 'stats.specialists': 'пропозиції', 'stats.tasks': 'завдань', 'stats.categories': 'категорій', 'stats.free': 'безкоштовна реєстрація', 'promo.title': 'Отримай Pro безкоштовно — тільки до кінця року', 'promo.subtitle': 'Зареєструйся зараз і користуйся тарифом Pro без оплати. Акція закінчується 31 грудня.', 'promo.cta': 'Зареєструватися', 'promo.days': 'днів', 'promo.hours': 'годин', 'promo.minutes': 'хвилин', 'promo.seconds': 'сек.', 'section.categories': 'Створи завдання у будь-якій категорії', 'section.how': 'Як це працює', 'section.recent': 'Останні завдання', 'section.all': 'Дивитись всі →', 'section.more': 'ще', 'section.cities': 'Міста і райони', 'section.community': 'Суспільний проект для всіх', 'community.subtitle': 'CanHelp — не просто маркетплейс, це спільнота взаємодопомоги. Будь-хто, хто має знання або навичку, може знайти клієнта. Будь-хто, у кого є завдання, може знайти спеціаліста.', 'community.point1.title': 'Вмієте щось робити?', 'community.point1.desc': 'Ремонт, репетиторство, дизайн, переклади, догляд — кожна навичка має цінність. Створіть профіль і знаходьте клієнтів поруч.', 'community.point2.title': 'Потрібна допомога?', 'community.point2.desc': 'Опублікуйте завдання за хвилину і отримуйте пропозиції від перевірених спеціалістів у вашому місті.', 'community.point3.title': 'Допоможіть проекту рости', 'community.point3.desc': 'CanHelp розвивається завдяки спільнотам. Поділіться посиланням з друзями і знайомими — разом ми будуємо щось корисне для всіх.', 'community.share': 'Поділитися з друзями', 'community.share.copied': 'Посилання скопійовано!', 'section.referral': 'Реферальна програма', 'referral.home.subtitle': 'Поділіться посиланням — кожен новий користувач, зареєстрований через нього, принесе вам нагороду.', 'referral.home.step1.title': 'Зареєструйтесь і отримайте посилання', 'referral.home.step1.desc': 'Створіть акаунт і знайдіть своє унікальне реферальне посилання в профілі.', 'referral.home.step2.title': 'Поділіться з друзями', 'referral.home.step2.desc': 'Надішліть посилання друзям, знайомим або опублікуйте в соціальних мережах.', 'referral.home.step3.title': 'Отримуйте нагороди', 'referral.home.step3.desc': 'Як тільки друг підтвердить email, ви автоматично отримаєте свою нагороду.', 'referral.home.cta': 'Отримати посилання', 'referral.home.badge': 'Реферальна програма', 'section.faq': 'Часті запитання', 'faq.q1': 'Як працює CanHelp?', 'faq.a1': 'Опублікуйте завдання, отримайте пропозиції від спеціалістів, виберіть найкращого і почніть співпрацю. Це швидко, просто і безкоштовно для клієнтів.', 'faq.q2': 'Скільки коштує використання платформи?', 'faq.a2': 'Реєстрація і публікація завдань повністю безкоштовні для клієнтів. Спеціалісти мають доступ до безкоштовного плану, а також до преміум-опцій.', 'faq.q3': 'Як стати спеціалістом?', 'faq.a3': 'Зареєструйтесь, перейдіть у «Стати спеціалістом», заповніть профіль навичками і категоріями і починайте отримувати завдання.', 'faq.q4': 'Як вибрати підходящого спеціаліста?', 'faq.a4': 'Оцініть відгуки, досвід, навички і портфоліо кожного спеціаліста. Спілкуйтеся через чат платформи і уточнюйте деталі до прийняття рішення.', 'faq.q5': 'Що якщо я не задоволений результатом?', 'faq.a5': 'Ви можете залишити відгук про спеціаліста і поставити оцінку від 1 до 5 зірок. Відгуки допомагають іншим користувачам вибирати перевірених професіоналів.', 'faq.q6': 'Чи можна зв\'язатись зі спеціалістом до прийняття пропозиції?', 'faq.a6': 'Так. Як тільки ви отримали пропозицію, можна відкрити чат зі спеціалістом, задати питання і уточнити всі деталі до прийняття рішення.', 'faq.q7': 'Скільки часу чекати пропозицій?', 'faq.a7': 'Як правило, протягом кількох годин. Спеціалісти отримують сповіщення про нові завдання і можуть швидко відповісти.', 'faq.q8': 'Чи можна розмістити завдання у будь-якому місті Греції?', 'faq.a8': 'Так! CanHelp охоплює всю Грецію — Афіни, Салоніки, Патри та інші міста.', 'faq.q9': 'Які види завдань є на CanHelp?', 'faq.a9': 'Ремонт, прибирання, електрика, репетиторство, дизайн, IT, переїзди, краса та багато іншого. Категорії постійно розширюються.', 'faq.q10': 'Чи є мобільний додаток?', 'faq.a10': 'Так! CanHelp доступний для Android та iOS. Завантажте додаток і керуйте всім зі свого телефону.', 'how.step1.title': 'Опублікуй завдання', 'how.step1.desc': 'Опиши що потрібно і встанови бюджет', 'how.step2.title': 'Отримай пропозиції', 'how.step2.desc': 'Спеціалісти надішлють пропозиції з ціною і термінами', 'how.step3.title': 'Обери і почни', 'how.step3.desc': 'Обери найкращого професіонала і почни співпрацю', 'tasks.title': 'завдань', 'tasks.filters': 'Фільтри', 'tasks.search': 'Пошук', 'tasks.search.placeholder': 'Назва або ключове слово...', 'tasks.search.btn': 'Пошук', 'tasks.publish': 'Опублікувати', 'tasks.category.all': 'Всі', 'tasks.category.all_in': 'Всі в', 'tasks.category.label': 'Категорія', 'tasks.location.label': 'Місто', 'tasks.location.placeholder': 'напр. Афіни', 'tasks.empty': 'Завдань не знайдено', 'tasks.empty.cta': 'Опублікуй перше', 'task.status.open': 'Відкрито', 'task.status.in_progress': 'В роботі', 'task.status.completed': 'Завершено', 'task.status.cancelled': 'Скасовано', 'task.status.draft': 'Чернетка', 'task.budget': 'Бюджет', 'task.location': 'Місцезнаходження', 'task.deadline': 'Дата початку', 'task.expires_at': 'Активно до', 'task.created_at': 'Створено', 'task.customer': 'Замовник', 'task.offer.btn': 'Надіслати пропозицію', 'task.invite.banner_title': 'Вас запросили на це завдання', 'task.invite.banner_hint': 'Замовник особисто запросив вас', 'task.invite.accept': 'Надіслати пропозицію', 'task.invite.decline': 'Відмовитися', 'offer.accept': 'Прийняти', 'offer.decline': 'Відхилити', 'task.complete': 'Завершити завдання', 'task.complete.confirm': 'Позначити завдання як виконане?', 'task.edit': 'Редагувати', 'task.status_label': 'Статус', 'task.yours': 'Ваше завдання', 'task.offer.yours': 'Ваша пропозиція', 'review.leave': 'Залишити відгук', 'review.rating': 'Оцінка', 'review.comment': 'Коментар', 'review.comment.placeholder': 'Розкажіть про свій досвід...', 'review.submit': 'Надіслати відгук', 'review.submitting': 'Надсилання...', 'review.done': 'Відгук надіслано!', 'profile.reviews': 'Відгуки', 'profile.no_reviews': 'Відгуків поки немає', 'profile.rating': 'Рейтинг', 'profile.skills.label': 'Навички', 'profile.member_since': 'Учасник з', 'task.offers': 'Пропозиції', 'task.offers.none': 'Пропозицій поки немає', 'create.title': 'Опублікувати завдання', 'create.field.title': 'Назва', 'create.field.description': 'Опис', 'create.field.category': 'Категорія', 'create.field.category.select': 'Оберіть...', 'create.field.location': 'Місцезнаходження', 'create.field.location.any': 'Де завгодно', 'create.field.location.all': 'Все місто', 'create.field.budget': 'Бюджет (€)', 'create.field.deadline': 'Дата початку', 'create.field.expires_at': 'Оголошення активне', 'create.field.expires_at.days': '{n} днів', 'create.field.budget_negotiable': 'Ціна обговорюється', 'create.field.time_slot': 'Час виконання', 'create.field.time_slot.any': 'У будь-який час', 'create.field.time_slot.morning': 'Вранці (08:00–13:00)', 'create.field.time_slot.afternoon': 'Вдень (13:00–18:00)', 'create.field.time_slot.evening': 'Ввечері (18:00–22:00)', 'create.field.time_slot.weekend': 'Вихідний', 'create.field.address': 'Адреса (необов\'язково)', 'create.field.address.district': 'Квартал', 'create.field.address.street': 'Вулиця', 'create.field.address.house': 'Будинок', 'create.field.confidential': 'Конфіденційна нотатка', 'create.field.confidential.placeholder': 'Деталі, видні тільки призначеному спеціалісту...', 'create.field.confidential.hint': 'Не відображається публічно', 'create.field.photos': 'Фотографії', 'create.field.photos.add': 'Додати фото', 'create.field.photos.uploading': 'Завантаження...', 'task.budget_negotiable': 'Ціна обговорюється', 'task.time_slot': 'Час', 'task.confidential': 'Конфід. нотатка', 'create.field.title.placeholder': 'напр. Прибирання квартири 80кв', 'create.field.description.placeholder': 'Детально опишіть що потрібно...', 'create.field.location.placeholder': 'напр. Афіни, Колонаки', 'create.field.budget.placeholder': 'напр. 100', 'create.submit': 'Опублікувати завдання', 'create.submitting': 'Публікація...', 'login.title': 'Ласкаво просимо', 'login.subtitle': 'Вхід до CanHelp', 'login.email': 'Email', 'login.password': 'Пароль', 'login.submit': 'Увійти', 'login.submitting': 'Вхід...', 'login.error': 'Невірний email або пароль', 'login.unverified.title': 'Підтвердіть ваш email', 'login.unverified.desc': 'Ми надіслали посилання для підтвердження на ваш email. Перевірте вхідні (або спам) і перейдіть за посиланням.', 'login.unverified.resend': 'Надіслати лист повторно', 'login.unverified.sending': 'Надсилання...', 'login.unverified.sent': '✓ Надіслано — перевірте вхідні', 'profile.email.verified': 'Email підтверджено', 'profile.email.not_verified': 'Email не підтверджено', 'login.no_account': 'Немає акаунту?', 'login.register_link': 'Зареєструватися', 'login.forgot_password': 'Забув пароль?', 'login.or_continue_with': 'або продовжте через', 'login.continue_google': 'Увійти через Google', 'forgot.title': 'Забув пароль', 'forgot.subtitle': 'Введіть email для отримання посилання відновлення', 'forgot.email': 'Email', 'forgot.submit': 'Надіслати посилання', 'forgot.submitting': 'Надсилання...', 'forgot.sent.title': 'Перевірте вхідні', 'forgot.sent.desc': 'Якщо акаунт з таким email існує, ми надішлемо посилання для скидання пароля.', 'forgot.back_to_login': 'Повернутися до входу', 'forgot.error': 'Не вдалося надіслати посилання. Перевірте адресу і спробуйте знову.', 'forgot.error.not_found': 'Акаунт з таким email не знайдено.', 'forgot.error.send_failed': 'Помилка надсилання листа. Спробуйте пізніше.', 'reset.title': 'Новий пароль', 'reset.subtitle': 'Введіть новий пароль', 'reset.password': 'Новий пароль', 'reset.confirm': 'Підтвердіть пароль', 'reset.submit': 'Змінити пароль', 'reset.submitting': 'Збереження...', 'reset.success': 'Пароль успішно змінено. Перенаправлення до входу...', 'reset.back_to_login': 'Повернутися до входу', 'reset.error.mismatch': 'Паролі не збігаються', 'reset.error.invalid': 'Недійсне або застаріле посилання. Запросіть нове.', 'register.title': 'Реєстрація', 'register.subtitle': 'Створити акаунт в CanHelp', 'register.first_name': 'Ім\'я', 'register.last_name': 'Прізвище', 'register.email': 'Email', 'register.password': 'Пароль (мін. 8 символів)', 'register.role': 'Роль', 'register.role.customer': 'Користувач', 'register.role.customer.desc': 'Публікую завдання', 'register.role.specialist': 'Спеціаліст', 'register.role.specialist.desc': 'Беру завдання', 'register.submit': 'Створити акаунт', 'register.submitting': 'Реєстрація...', 'register.has_account': 'Вже є акаунт?', 'register.login_link': 'Увійти', 'register.continue_google': 'Зареєструватися через Google', 'register.check_email.title': 'Перевірте пошту', 'register.check_email.desc': 'Ми надіслали посилання для підтвердження на ваш email. Перевірте вхідні (або спам) і перейдіть за посиланням.', 'register.check_email.login': 'Повернутися до входу', 'register.captcha_failed': 'Перевірка CAPTCHA не пройдена. Пройдіть перевірку безпеки та спробуйте знову.', 'dashboard.title': 'Панель управління', 'dashboard.new_task': '+ Нове завдання', 'dashboard.onboarding.title': 'Ласкаво просимо до CanHelp 👋', 'dashboard.onboarding.subtitle': 'Оберіть, з чого хочете почати.', 'dashboard.onboarding.helper.title': 'Запропонуйте свою допомогу', 'dashboard.onboarding.helper.desc': 'Заповніть анкету — навички, категорії та міста. Це займе кілька хвилин, і ви почнете отримувати замовлення.', 'dashboard.onboarding.helper.cta': 'Заповнити анкету', 'dashboard.onboarding.requester.title': 'Потрібна допомога?', 'dashboard.onboarding.requester.desc': 'Опублікуйте завдання — помічники надішлють вам свої пропозиції.', 'dashboard.onboarding.requester.cta': 'Опублікувати завдання', 'dashboard.my_tasks': 'Мої завдання', 'dashboard.my_offers': 'Мої пропозиції', 'dashboard.invitations': 'Запрошення на завдання', 'dashboard.offers_count': 'проп.', 'dashboard.declined_count': 'відх.', 'dashboard.completed_tasks': 'Завершені завдання', 'dashboard.completed_offers': 'Завершені пропозиції', 'dashboard.review_pending': 'Оцінка ще не залишена', 'tasks.new.top_specialists': 'Топ спеціалісти', 'tasks.new.select_category': 'Виберіть категорію, щоб побачити спеціалістів', 'tasks.new.invite': 'Запропонувати роботу', 'tasks.new.invited': 'Вибрано ✓', 'reviews.count': 'відгуків', 'filter.location': 'Локація', 'filter.language': 'Мови', 'filter.language.any': 'Будь-яка мова', 'filter.category.all': 'Всі категорії', 'user.categories': 'Категорії', 'user.work_area': 'Район роботи', 'user.specialist_cards': 'Картки послуг', 'card.skills': 'Навички', 'card.categories': 'Категорії', 'card.geography': 'Район роботи', 'card.portfolio': 'Портфоліо', 'card.close': 'Закрити', 'dashboard.tasks.empty': 'Ви не публікували завдання', 'dashboard.tasks.empty.cta': 'Опублікуйте перше', 'dashboard.tasks.add_new': 'Додати нове завдання', 'dashboard.offers.empty': 'Ви не надсилали пропозицій', 'dashboard.offers.empty.cta': 'Знайти завдання', 'dashboard.customer.specialists_title': 'Шукаєте виконавця?', 'dashboard.customer.specialists_hint': 'Переглядайте профілі спеціалістів, читайте відгуки і запрошуйте їх на свої завдання', 'dashboard.customer.specialists_cta': 'Знайти виконавця', 'dashboard.customer.how_title': 'Як це працює', 'dashboard.customer.step1': 'Створіть завдання з описом і бюджетом', 'dashboard.customer.step2': 'Спеціалісти надішлють пропозиції з ціною і термінами', 'dashboard.customer.step3': 'Оберіть підходящого і почніть роботу', 'notif.title': 'Сповіщення', 'notif.mark_all': 'Позначити всі як прочитані', 'notif.empty': 'Немає сповіщень', 'notif.type.generic': 'Сповіщення', 'notif.type.new_offer': 'Нова пропозиція', 'notif.type.offer_accepted': 'Вашу пропозицію прийнято', 'notif.type.offer_declined': 'Вашу пропозицію відхилено', 'notif.type.task_completed': 'Завдання виконано', 'notif.type.task_cancelled': 'Завдання скасовано', 'notif.type.new_message': 'Нове повідомлення', 'notif.type.new_review': 'Новий відгук', 'notif.type.task_invite': 'Запрошення на завдання', 'notif.type.referral_reward': 'Реферальна нагорода', 'notif.type.specialist_card_submitted': 'Картку надіслано на перевірку', 'notif.type.specialist_card_approved': 'Картку схвалено', 'notif.type.specialist_card_rejected': 'Картку відхилено', 'notif.body.new_offer': 'Нова пропозиція на «{title}»', 'notif.body.offer_accepted': 'Вашу пропозицію на «{title}» прийнято', 'notif.body.offer_declined': 'Вашу пропозицію на «{title}» відхилено', 'notif.body.task_invite': 'Вас запрошують на «{title}»', 'notif.body.new_review': 'Ви отримали оцінку {rating}★', 'notif.body.referral_reward': 'На ваш акаунт додано {days} днів доступу до плану «{plan}»!', 'notif.body.specialist_card_submitted': 'Картку «{title}» надіслано на перевірку', 'notif.body.specialist_card_approved': 'Картку «{title}» схвалено та опубліковано', 'notif.body.specialist_card_rejected': 'Картку «{title}» не було схвалено. Виправте її та надішліть знову.', 'offer.status.pending': 'Очікує', 'offer.status.accepted': 'Прийнято', 'offer.status.declined': 'Відхилено', 'offer.status.withdrawn': 'Відкликано', 'offer.status.other_accepted': 'Вибрано іншого виконавця', 'common.loading': 'Завантаження...', 'common.error': 'Помилка', 'common.save': 'Зберегти', 'common.saving': 'Збереження...', 'common.cancel': 'Скасувати', 'common.add': 'Додати', 'common.close': 'Закрити', 'common.edit': 'Редагувати', 'common.delete': 'Видалити', 'common.from': 'від', 'common.currency': '€', 'common.greece': 'Греція', 'chat.connected': 'Підключено', 'chat.disconnected': 'Відключено', 'chat.no_rooms': 'Переписок поки немає', 'chat.task_fallback': 'Завдання', 'chat.select': 'Виберіть переписку', 'chat.no_messages': 'Повідомлень поки немає', 'chat.placeholder': 'Напишіть повідомлення... (Enter для надсилання)', 'chat.conversation_fallback': 'Переписка', 'chat.direct_chat': 'Особистий чат', 'chat.linked_task': 'Прикріплене замовлення', 'chat.write_btn': 'Написати', 'chat.just_now': 'щойно', 'chat.min_ago': 'хв', 'chat.write_specialist': 'Написати спеціалісту', 'chat.write_customer': 'Написати замовнику', 'chat.notif_settings': 'Налаштування сповіщень', 'chat.notif_messages': 'Сповіщення про нові повідомлення', 'chat.toast_title': 'Нове повідомлення', 'chat.toast_open': 'Відкрити чат', 'offer.price': 'Ціна', 'offer.price.placeholder': 'напр. 80', 'offer.customer_budget': 'Бюджет замовника', 'offer.message': 'Повідомлення', 'offer.optional': 'необов\'язково', 'offer.message.placeholder': 'Представтеся, розкажіть про досвід і чому ви найкращий вибір...', 'offer.submitting': 'Надсилання...', 'profile.photo': 'Фото профілю', 'profile.photo.change': 'Змінити фото', 'profile.photo.hint': 'JPEG, PNG, WebP · до 5MB', 'profile.basic_info': 'Основна інформація', 'profile.phone': 'Телефон', 'profile.phone.placeholder': '+30 6901234567', 'profile.bio': 'Короткий опис', 'profile.bio.placeholder': 'Розкажіть трохи про себе...', 'profile.language': 'Мова', 'profile.language.hint': 'Мова інтерфейсу і email-сповіщень', 'profile.languages': 'Мови спілкування', 'profile.languages.hint': 'Виберіть усі мови, якими ви спілкуєтесь', 'profile.skills': 'Навички', 'profile.skills.subtitle': 'Додайте послуги, які ви пропонуєте', 'profile.skills.placeholder': 'напр. Прибирання, IT, Репетиторство...', 'profile.role': 'Роль акаунту', 'profile.role.specialist': '🔧 Помічник', 'profile.role.admin': '👑 Admin', 'profile.role.customer': '👤 Користувач', 'profile.role.user': '👤 Користувач', 'profile.role.change': 'Для зміни ролі зверніться до служби підтримки.', 'profile.become_specialist': 'Запропонувати допомогу', 'profile.become_specialist.desc': 'Створи профіль помічника, запропонуй свої навички та почни отримувати завдання.', 'become_specialist.hero.title': 'Запропонуй свої навички і почни заробляти', 'become_specialist.hero.subtitle': 'Створи профіль помічника та отримуй запити від людей, яким потрібна допомога', 'become_specialist.how.title': 'Як це працює', 'become_specialist.step1.title': 'Створи портфоліо спеціаліста', 'become_specialist.step1.desc': 'Вкажи категорії, навички і зону покриття — система автоматично підбере підходящі замовлення', 'become_specialist.step2.title': 'Шукай замовлення', 'become_specialist.step2.desc': 'Переглядай завдання по своїх категоріях у розділі «Пошук замовлень»', 'become_specialist.step3.title': 'Відгукуйся і заробляй', 'become_specialist.step3.desc': 'Надсилай пропозиції з ціною і термінами, спілкуйся з клієнтами і виконуй замовлення', 'become_specialist.benefits.title': 'Переваги профілю спеціаліста', 'become_specialist.benefit1': 'Пошук замовлень за категоріями і локацією', 'become_specialist.benefit2': 'Публічний профіль з відгуками клієнтів', 'become_specialist.benefit3': 'Розклад доступності, видимий клієнтам', 'become_specialist.benefit4': 'Додавання до обраного клієнтами', 'become_specialist.cta': 'Детальніше', 'become_specialist.free_badge': 'Безкоштовна реєстрація', 'profile.tab.notifications': 'Сповіщення', 'profile.tab.reviews': 'Відгуки', 'profile.tab.referral': 'Реферали', 'profile.tab.auto_response': 'Авто-відповідь', 'profile.tab.site': 'Сайт', 'profile.site.title': 'Персональна сторінка', 'profile.site.url_label': 'Особистий сайт', 'profile.site.copy': 'Копіювати', 'profile.site.copied': 'Скопійовано', 'profile.site.visible_title': 'Що відображається на вашій сторінці', 'profile.site.visible.name': 'Ім\'я і фото', 'profile.site.visible.bio': 'Біографія', 'profile.site.visible.rating': 'Рейтинг і відгуки', 'profile.site.visible.portfolio': 'Портфоліо / Картки', 'profile.site.visible.contacts': 'Контактні дані', 'profile.site.visible.full_last_name': 'Прізвище повністю', 'profile.site.visible.services': 'Картки послуг', 'profile.site.visible.reviews': 'Розділ з відгуками', 'profile.site.visible.status': 'Статус «Готовий допомогти»', 'profile.site.theme': 'Тема оформлення', 'profile.site.theme.dark': 'Темна', 'profile.site.theme.light': 'Світла', 'profile.site.slug_taken': 'Ця адреса вже зайнята', 'profile.site.stats.title': 'Аналітика сайту', 'profile.site.stats.days': 'останні 30 днів', 'profile.site.stats.views': 'Перегляди', 'profile.site.stats.unique': 'Унікальні відвідувачі', 'profile.site.stats.messages': 'Повідомлення', 'profile.site.stats.total_views': 'Перегляди', 'profile.site.stats.total_unique': 'Унік. відвідувачі', 'profile.site.stats.total_messages': 'Повідомлення', 'profile.site.stats.empty': 'Даних поки немає', 'profile.site.stats.loading': 'Завантаження аналітики...', 'profile.site.stats.no_slug': 'Вкажіть адресу сайту, щоб бачити статистику', 'profile.site.edit_bio_hint': 'Біографія і фото налаштовуються у вкладці «Основне».', 'profile.site.seo.title': 'SEO — мета-дані сайту', 'profile.site.seo.hint': 'Відображається в пошуковиках. При збереженні автоматично перекладається на всі мови.', 'profile.site.seo.site_title': 'Заголовок сторінки', 'profile.site.seo.site_title_placeholder': 'Іван Іванов — Електрик в Афінах', 'profile.site.seo.site_desc': 'Мета-опис', 'profile.site.seo.site_desc_placeholder': 'Короткий опис для пошуковиків...', 'status.title': 'Статус', 'status.can_help_now_hint': 'Ваша картка показується вище у пошуку', 'status.need_help_hint': 'Спеціалісти можуть запропонувати вам допомогу', 'profile.referral.title': 'Партнерська програма', 'profile.referral.desc': 'Поділіться посиланням і отримуйте нагороду за кожного залученого користувача.', 'profile.referral.link_label': 'Ваше реферальне посилання', 'profile.referral.copy': 'Копіювати', 'profile.referral.copied': 'Скопійовано!', 'profile.referral.invited_count': 'успішних запрошень', 'profile.referral.no_code': 'Реферальний код недоступний.', 'notifications.title': 'Налаштування сповіщень', 'notifications.email.new_tasks': 'Email про нові замовлення', 'notifications.email.new_tasks.desc': 'Отримувати email, коли у ваших категоріях публікується нове замовлення', 'notifications.messages.desc': 'Отримувати сповіщення при новому вхідному повідомленні', 'notifications.saved': 'Налаштування збережено', 'notifications.plan_required': 'Недоступно у вашому тарифі', 'profile.tab.info': 'Основне', 'profile.tab.finance': 'Фінанси', 'profile.tab.skills': 'Навички', 'profile.tab.categories': 'Категорії', 'profile.tab.geography': 'Географія', 'profile.specialist.categories': 'Категорії робіт', 'profile.specialist.categories.desc': 'Виберіть категорії, в яких ви працюєте', 'profile.specialist.geography': 'Міста покриття', 'profile.specialist.geography.desc': 'Виберіть міста / райони, де ви працюєте', 'profile.saving': 'Збереження...', 'profile.upload.error': 'Помилка завантаження фото', 'profile.saved': 'Збережено', 'profile.tab.cards': 'Пропозиції', 'profile.cards.count': 'Пропозиції', 'profile.cards.add': 'Додати пропозицію', 'profile.cards.new_title': 'Назва нової пропозиції', 'profile.cards.placeholder': 'Наприклад: Сантехніка', 'profile.cards.create': 'Створити', 'profile.cards.cancel': 'Скасувати', 'profile.cards.empty': 'У вас немає пропозицій', 'profile.cards.empty_hint': 'Створіть першу картку, щоб показати послуги клієнтам.', 'profile.cards.create_first': 'Створити першу пропозицію', 'profile.cards.delete_confirm': 'Видалити пропозицію?', 'profile.background.change': 'Змінити фон', 'profile.background.remove': 'Видалити фон', 'profile.listing_requirements.published_card': 'Опублікуйте хоча б одну картку', 'profile.listing_requirements.title': 'Ваш профіль поки не показується в розділі «Пропозиції»', 'profile.listing_requirements.hint': 'Щоб картка відображалась, виконайте умови:', 'profile.listing_requirements.bio': 'Додайте коротку інформацію про себе в «Основне»', 'profile.listing_requirements.categories': 'Укажіть хоча б одну категорію в активній картці', 'profile.listing_requirements.locations': 'Укажіть хоча б одну локацію в активній картці', 'profile.listing_requirements.card_inactive': 'Зробіть картку активною', 'profile.listing_requirements.review_pending': 'Картка на розгляді', 'profile.card.visibility_issue': 'Картка не відображається в розділі «Пропозиції»', 'profile.card.tab.main': 'Основне', 'profile.card.tab.skills': 'Навички', 'profile.card.tab.categories': 'Категорії', 'profile.card.tab.geography': 'Географія', 'profile.card.tab.portfolio': 'Галерея', 'profile.card.tab.pricelist': 'Прайс-лист', 'profile.card.pricelist.empty': 'Групи прайс-листа ще не додані.', 'profile.card.pricelist.add_group': 'Додати групу', 'profile.card.pricelist.group_title': 'Назва групи', 'profile.card.pricelist.add_item': 'Додати позицію', 'profile.card.pricelist.item_name': 'Послуга / робота', 'profile.card.pricelist.item_desc': 'Опис (необов\'язково)', 'profile.card.pricelist.item_price': 'Ціна', 'profile.card.pricelist.item_unit': 'Одиниця (наприклад /год)', 'profile.card.pricelist.save_group': 'Зберегти групу', 'profile.card.pricelist.save_item': 'Зберегти', 'profile.card.pricelist.delete_group': 'Видалити групу', 'profile.card.pricelist.delete_item': 'Видалити', 'profile.card.active': 'Активна', 'profile.card.review_pending': 'На розгляді', 'profile.card.review_pending_hint': 'Вашу картку зараз перевіряє адміністрація.', 'profile.card.review_submitted': 'Картку надіслано на перевірку', 'profile.card.review_approved': 'Картку схвалено', 'profile.card.review_approved_hint': 'Ваша картка тепер відображається в пропозиціях.', 'profile.card.review_rejected': 'Картку відхилено', 'profile.card.review_rejected_hint': 'Картку не було схвалено. Виправте її та надішліть знову.', 'profile.card.submit_review': 'Надіслати на розгляд', 'profile.card.withdraw_review': 'Відкликати заявку', 'profile.card.unpublish': 'Зняти з публікації', 'profile.card.save': 'Зберегти', 'profile.card.saved': 'Збережено', 'profile.card.delete': 'Видалити', 'profile.card.skill.add': 'Додати навичку', 'profile.card.photo.add': 'Додати фото', 'profile.card.photo.uploading': 'Завантаження...', 'profile.card.photo.empty': 'Немає фотографій', 'profile.card.item.title': 'Заголовок', 'profile.card.item.desc': 'Опис', 'profile.card.item.save': 'Зберегти', 'profile.card.item.cancel': 'Скасувати', 'profile.card.item.edit': 'Опис роботи', 'profile.card.description': 'Опис картки', 'profile.card.desc_auto_translate': 'При збереженні буде автоматично перекладено на інші мови', 'profile.card.desc_translated': 'Є переклади:', 'profile.upgrade.cards_limit': 'Ліміт портфоліо вичерпано', 'profile.upgrade.plan': 'Поточний тариф:', 'profile.upgrade.contact': 'Зверніться до адміністратора для зміни тарифу', 'profile.upgrade.ok': 'Зрозуміло', 'profile.plan.title': 'Тарифний план', 'profile.balance': 'Баланс', 'profile.balance.topup': 'Поповнити баланс', 'profile.balance.topup.title': 'Поповнити баланс', 'profile.balance.topup.amount': 'Сума (в EUR)', 'profile.balance.topup.hint': 'Виберіть суму або введіть вручну', 'profile.balance.topup.submit': 'Перейти до оплати', 'profile.balance.topup.loading': 'Перенаправлення...', 'profile.balance.topup.error': 'Помилка ініціалізації платежу. Спробуйте знову.', 'payment.success.title': 'Оплата пройшла успішно!', 'payment.success.desc': 'Ваш баланс оновлено.', 'payment.cancelled.title': 'Оплату скасовано', 'payment.cancelled.desc': 'Оплату було скасовано. Кошти не списано.', 'payment.pending.title': 'Обробляється...', 'payment.pending.desc': 'Ваш платіж в обробці.', 'payment.back_to_profile': 'Повернутися в профіль', 'profile.plan.basic': 'Базовий (безкоштовний)', 'profile.plan.contact_upgrade': 'Зверніться до адміністратора для підключення тарифу', 'profile.plan.cards_up_to': 'Портфоліо: до', 'profile.plan.cards_unlimited': 'Портфоліо: безліміт', 'profile.plan.tasks_up_to': 'Завдань: до', 'profile.plan.offers_up_to': 'Відгуків: до', 'profile.plan.valid_until': 'Дійсний до', 'profile.plan.no_expiry': 'Безстроково', 'create.error': 'Помилка при публікації', 'tasks.category.general': 'Загальне', 'tasks.budget.range': 'Діапазон:', 'tasks.budget.from': 'від', 'tasks.budget.to': 'до', 'tasks.filter.reset': 'Скинути фільтри', 'tasks.load_more': 'Завантажити ще', 'tasks.showing': 'Результатів:', 'tasks.field.budget': 'Бюджет, €', 'admin.title': 'Панель адміністратора', 'admin.tab.stats': 'Статистика', 'admin.tab.users': 'Користувачі', 'admin.tab.tasks': 'Завдання', 'admin.tab.reports': 'Скарги', 'admin.tab.moderation': 'Модерація', 'admin.stats.users': 'Користувачі', 'admin.stats.tasks': 'Завдання', 'admin.stats.offers': 'Пропозиції', 'admin.stats.reviews': 'Відгуки', 'admin.tasks.by_status': 'Завдання за статусом', 'admin.col.user': 'Користувач', 'admin.col.email': 'Email', 'admin.col.role': 'Роль', 'admin.col.registered': 'Реєстрація', 'admin.col.status': 'Статус', 'admin.col.title': 'Назва', 'admin.col.budget': 'Бюджет', 'admin.col.created': 'Створено', 'admin.users.active': 'Активний', 'admin.users.inactive': 'Неактивний', 'admin.users.deactivate': 'Деактивувати', 'admin.users.activate': 'Активувати', 'admin.tasks.cancel': 'Скасувати', 'admin.reports.none': 'Скарг немає', 'admin.moderation.none': 'Немає пропозицій для перевірки', 'admin.moderation.pending': 'В очікуванні', 'admin.moderation.active': 'Активно', 'admin.moderation.approve': 'Підтвердити', 'admin.moderation.block': 'Заблокувати', 'admin.moderation.pending_title': 'Пропозиції на підтвердження', 'admin.moderation.active_title': 'Активні пропозиції', 'admin.moderation.pending_count': 'В очікуванні', 'admin.moderation.active_count': 'Активні', 'admin.moderation.pending_hint': 'Нові пропозиції, які очікують підтвердження', 'admin.moderation.active_hint': 'Активні пропозиції, які можна заблокувати', 'admin.moderation.pending_empty': 'Немає нових пропозицій для підтвердження', 'admin.moderation.active_empty': 'Активних пропозицій не знайдено', 'admin.reports.reviewed': 'Розглянуто', 'admin.reports.dismiss': 'Відхилити', 'admin.pagination.total': 'Всього', 'admin.users.role.change': 'Змінити роль', 'admin.users.search.placeholder': 'Пошук за ім\'ям або email...', 'admin.tasks.delete': 'Видалити', 'admin.tasks.delete.confirm': 'Видалити це завдання назавжди?', 'admin.tasks.search.placeholder': 'Пошук за назвою...', 'admin.col.customer': 'Замовник', 'admin.col.reporter': 'Скаржник', 'admin.col.target': 'Ціль', 'admin.filter.all_roles': 'Всі ролі', 'admin.filter.all_statuses': 'Всі статуси', 'admin.reports.target.task': 'Завдання', 'admin.reports.target.user': 'Користувач', 'admin.tab.categories': 'Категорії', 'admin.tab.locations': 'Міста і райони', 'admin.tab.logs': 'Логи', 'admin.tab.plans': 'Тарифи', 'admin.tab.settings': 'Налаштування', 'admin.logs.subtab.ai': 'AI логи', 'admin.logs.subtab.activity': 'Активність', 'admin.logs.subtab.mail': 'Mail', 'admin.logs.subtab.notifications': 'Сповіщення', 'admin.notif_logs.type': 'Тип', 'admin.notif_logs.title': 'Заголовок', 'admin.notif_logs.read': 'Прочитано', 'admin.notif_logs.empty': 'Логи сповіщень порожні', 'admin.stats.notif_chart_title': 'Сповіщення по днях', 'admin.stats.notif_label': 'Сповіщення', 'admin.stats.mail_chart_title': 'Email по днях', 'admin.stats.mail_label': 'Emails', 'admin.filter.all': 'Всі', 'admin.stats.specialists': 'Помічники', 'admin.col.plan': 'Тариф', 'admin.back_home': 'На головну', 'admin.plans.title': 'Тарифні пакети', 'admin.plans.add': '+ Додати тариф', 'admin.plans.empty': 'Тарифи не створено', 'admin.plans.form.new': 'Новий тариф', 'admin.plans.form.edit': 'Редагувати тариф', 'admin.plans.form.name': 'Назва', 'admin.plans.form.price': 'Ціна (EUR)', 'admin.plans.form.old_price': 'Стара ціна (EUR, необов\'язково)', 'admin.plans.form.max_offers': 'Макс. відгуків (порожньо = без ліміту)', 'admin.plans.form.max_cards': 'Макс. пропозицій (порожньо = без ліміту)', 'admin.plans.form.duration_days': 'Термін (днів, порожньо = без закінчення)', 'admin.plans.form.description': 'Опис', 'admin.plans.form.features': 'Можливості (по одному на рядок)', 'admin.plans.form.notify': 'Сповіщення про нові замовлення', 'admin.plans.form.default': 'За замовчуванням', 'admin.plans.form.active': 'Активний', 'admin.plans.form.order': 'Порядок', 'admin.plans.form.role': 'Роль', 'admin.plans.form.tier': 'Рівень', 'admin.plans.form.role.customer': 'Замовник', 'admin.plans.form.role.specialist': 'Помічник', 'admin.plans.form.tier.free': 'Безкоштовний', 'admin.plans.form.tier.pro': 'Pro', 'admin.plans.form.tier.ultimate': 'Ultimate', 'admin.plans.form.section.limits': 'Ліміти (порожньо = без обмежень)', 'admin.plans.form.max_messages_day': 'Макс. повідомлень/день', 'admin.plans.form.max_orders_day': 'Макс. замовлень/день', 'admin.plans.form.max_skills': 'Макс. навичок', 'admin.plans.form.max_profiles': 'Макс. профілів', 'admin.plans.form.max_portfolio': 'Макс. елементів портфоліо', 'admin.plans.form.section.boost': 'Множники & Буст', 'admin.plans.form.search_boost': 'Буст у пошуку', 'admin.plans.form.offers_multiplier': 'Множник відгуків', 'admin.plans.form.section.contact': 'Права контактів', 'admin.plans.form.can_contact_free': 'Контакт з безкоштовними користувачами', 'admin.plans.form.can_contact_pro': 'Контакт з Pro користувачами', 'admin.plans.form.can_contact_all': 'Контакт з усіма', 'admin.plans.form.can_show_contact': 'Показувати контакти', 'admin.plans.form.can_view_phone': 'Перегляд телефону', 'admin.plans.form.section.features': 'Можливості', 'admin.plans.form.upload_video': 'Завантаження відео', 'admin.plans.form.favorites': 'Обране', 'admin.plans.form.google_calendar': 'Google Calendar', 'admin.plans.form.verified_badge': 'Знак верифікації', 'admin.plans.form.highlighted_reviews': 'Виділені відгуки', 'admin.plans.form.personal_site': 'Особистий сайт', 'admin.plans.form.can_help_now': 'Статус «Можу допомогти»', 'admin.plans.form.need_help': 'Статус «Потрібна допомога»', 'admin.plans.form.auto_response': 'Авто-відповідь', 'admin.plans.form.auto_match': 'Авто-підбір', 'admin.plans.form.price_list': 'Прайс-лист', 'admin.plans.form.instant_dispatch_free': 'Миттєва розсилка (безкоштовно)', 'admin.plans.form.instant_dispatch_pro': 'Миттєва розсилка (Pro)', 'admin.plans.badge.default': 'За замовчуванням', 'admin.plans.badge.inactive': 'Неактивний', 'admin.plans.make_default': 'Зробити за замовчуванням', 'admin.plans.tasks': 'Завдань', 'admin.plans.offers': 'Відгуків', 'admin.plans.cards': 'Пропозиції', 'admin.plans.notify_tasks': 'Сповіщення про замовлення', 'admin.plans.delete.confirm': 'Видалити тариф', 'admin.activity.title': 'Журнал активності', 'admin.activity.event': 'Подія', 'admin.activity.all_events': 'Всі події', 'admin.activity.from': 'Від', 'admin.activity.to': 'До', 'admin.activity.reset': 'Скинути', 'admin.activity.total': 'Всього', 'admin.activity.empty': 'Немає записів', 'admin.mail.event': 'Email подія', 'admin.mail.all_events': 'Всі email події', 'admin.mail.from': 'Від', 'admin.mail.to': 'До', 'admin.mail.reset': 'Скинути', 'admin.mail.total': 'Всього', 'admin.mail.empty': 'Немає email логів', 'admin.mail.recipient': 'Отримувач', 'admin.mail.provider': 'Провайдер', 'admin.mail.details': 'Деталі', 'admin.mail.status': 'Статус', 'admin.mail.success': 'Успішно', 'admin.mail.failed': 'Помилка', 'admin.event.email_sent': 'Email надіслано', 'admin.event.email_failed': 'Email не надіслано', 'admin.event.email_dev': 'Email DEV fallback', 'admin.event.admin_email_test_sent': 'Тестовий email надіслано', 'admin.event.admin_email_test_failed': 'Тестовий email не надіслано', 'admin.logs.empty': 'Немає записів', 'admin.logs.date': 'Дата', 'admin.logs.provider': 'Провайдер', 'admin.logs.model': 'Модель', 'admin.logs.action': 'Дія', 'admin.logs.langs': 'Мови', 'admin.logs.in': 'Вхід', 'admin.logs.out': 'Вихід', 'admin.logs.total': 'Разом', 'admin.logs.ms': 'мс', 'admin.logs.status': 'Статус', 'admin.stats.activity_30d': 'Активність за 30 днів', 'admin.stats.tasks_label': 'Заявки', 'admin.stats.users_label': 'Користувачі', 'admin.stats.specialists_label': 'Помічники', 'admin.stats.tokens_title': 'Витрата токенів (по місяцях)', 'admin.stats.tokens_out': 'Вихідні', 'admin.stats.tokens_in': 'Вхідні', 'admin.stats.tokens_out_label': 'Вихідні токени', 'admin.stats.tokens_in_label': 'Вхідні токени', 'admin.stats.cost_label': 'Вартість (USD)', 'admin.stats.tasks_by_status': 'Заявки за статусами', 'admin.task_status.open': 'Відкриті', 'admin.task_status.in_progress': 'В роботі', 'admin.task_status.completed': 'Завершені', 'admin.task_status.cancelled': 'Скасовані', 'admin.task_status.draft': 'Чернетки', 'admin.settings.tab.general': 'Загальні', 'admin.settings.tab.smtp': 'E-Mail', 'admin.settings.tab.notifications': 'Сповіщення', 'admin.settings.tab.payment': 'Оплата', 'admin.settings.tab.referral': 'Реферальна', 'admin.settings.tab.seo': 'SEO', 'admin.settings.tab.socials': 'Соцмережі', 'admin.settings.tab.telegram': 'Telegram Bot', 'admin.settings.telegram.title': 'Налаштування Telegram Bot', 'admin.settings.telegram.help': 'Створіть бота через @BotFather. ID чату дізнайтесь через @userinfobot.', 'admin.settings.telegram.bot_token': 'Bot Token', 'admin.settings.telegram.admin_chat_id': 'Chat ID адміністратора', 'admin.settings.telegram.admin_chat_hint': 'Спочатку надішліть /start своєму боту, потім дізнайтесь chat ID через @userinfobot', 'admin.settings.telegram.channel_id': 'невикористовується', 'admin.settings.telegram.channels_title': 'Канали за мовами', 'admin.settings.telegram.channel_hint': 'Username публічного каналу (@канал) або числовий ID', 'admin.settings.telegram.notify_registrations': 'Сповіщати про нові реєстрації', 'admin.settings.telegram.notify_registrations_hint': 'Надсилати повідомлення при реєстрації нового користувача', 'admin.settings.telegram.post_new_tasks': 'Публікувати нові завдання в канал', 'admin.settings.telegram.post_new_tasks_hint': 'Автоматично публікувати нові завдання в Telegram-канал', 'admin.settings.telegram.test': 'Тест', 'admin.settings.telegram.verify': 'Перевірити токен', 'admin.settings.telegram.test_fail': 'Помилка з\'єднання', 'admin.settings.socials.title': 'Посилання на соціальні мережі', 'admin.settings.socials.hint': 'Заповнені посилання відображаються у підвалі сайту', 'admin.settings.seo.maintenance_label': 'Режим обслуговування', 'admin.settings.seo.maintenance_hint': 'Показувати сторінку обслуговування всім відвідувачам', 'admin.settings.seo.indexing_label': 'Індексація пошуковими системами', 'admin.settings.seo.indexing_hint': 'Дозволити пошуковим системам індексувати сайт', 'admin.settings.seo.head_scripts_label': 'Скрипти в (JS)', 'admin.settings.seo.head_scripts_hint': 'Виконується на кожній сторінці (Google Tag Manager, аналітика тощо)', 'admin.settings.seo.site_title_label': 'Заголовок сайту', 'admin.settings.seo.site_description_label': 'Опис сайту (meta description)', 'admin.settings.referral.title': 'Партнерська програма', 'admin.settings.referral.hint': 'Нагороджуйте користувачів, що приводять нових учасників.', 'admin.settings.referral.enabled_label': 'Увімкнено', 'admin.settings.referral.enabled_hint': 'Увімкнути / вимкнути видачу нагород', 'admin.settings.referral.customer_section': 'Для клієнтів', 'admin.settings.referral.specialist_section': 'Для помічників', 'admin.settings.referral.plan_label': 'Тарифний план за реферала', 'admin.settings.referral.no_plan': '— без плану —', 'admin.settings.referral.plan_hint': 'Цей план буде призначений тому, хто запросив. Якщо його поточний план вищий — додадуться тільки дні.', 'admin.settings.referral.days_label': 'Днів нагороди', 'admin.settings.referral.days_hint': 'Кількість днів, що додаються до терміну дії плану.', 'admin.settings.general.title': 'Загальні налаштування', 'admin.settings.general.site_name': 'Назва сайту', 'admin.settings.general.site_url': 'URL сайту', 'admin.settings.general.contact_email': 'Email для зв\'язку', 'admin.settings.general.support_phone': 'Телефон підтримки', 'admin.settings.smtp.title': 'Налаштування SMTP сервера', 'admin.settings.smtp.hint': 'Використовується для надсилання email-сповіщень.', 'admin.settings.smtp.host': 'SMTP Хост', 'admin.settings.smtp.port': 'Порт', 'admin.settings.smtp.encryption': 'Шифрування', 'admin.settings.smtp.enc.none': 'Немає', 'admin.settings.smtp.enc.tls': 'STARTTLS (порт 587)', 'admin.settings.smtp.enc.ssl': 'SSL/TLS (порт 465)', 'admin.settings.smtp.username': 'Ім\'я користувача', 'admin.settings.smtp.password': 'Пароль / App Password', 'admin.settings.smtp.from_name': 'Ім\'я відправника', 'admin.settings.smtp.from_email': 'Email відправника', 'admin.settings.smtp.test': 'Надіслати тестовий email', 'admin.settings.smtp.sending': 'Надсилання...', 'admin.settings.payment.hint': 'Дані для підключення до ePay Piraeus Bank.', 'admin.settings.env.test': 'Тест (sandbox)', 'admin.settings.env.prod': 'Бойовий режим', 'admin.settings.env.label': 'Середовище', 'admin.settings.merchant_id': 'Merchant ID', 'admin.settings.api_user': 'API User', 'admin.settings.api_password': 'API Password', 'admin.settings.confirm_url': 'Confirmation URL (webhook)', 'admin.settings.cancel_url': 'Cancel URL', 'admin.settings.active': 'Активний', 'admin.settings.saving': 'Збереження...', 'admin.settings.saved': 'Збережено', 'admin.notif.vars_hint': 'Доступні змінні в шаблонах', 'admin.notif.tmpl.not_set': 'Шаблон не налаштовано', 'admin.notif.tmpl.subject_label': 'Тема листа', 'admin.notif.tmpl.body_label': 'Текст листа (HTML)', 'admin.notif.tmpl.save': 'Зберегти', 'admin.notif.tmpl.close': 'Закрити', 'admin.notif.tmpl.translate': 'Авто-переклад на інші мови', 'admin.notif.tmpl.translating': 'Переклад...', 'admin.notif.tmpl.saving': 'Збереження...', 'admin.notif.email_verification': 'Підтвердження email адреси', 'admin.notif.registration_success': 'Успішна реєстрація', 'admin.notif.password_reset': 'Відновлення пароля', 'admin.notif.new_offer': 'Нова пропозиція', 'admin.notif.new_task': 'Нове завдання', 'admin.notif.offer_accepted': 'Пропозицію прийнято', 'admin.notif.new_message': 'Нове повідомлення', 'admin.notif.offer_declined': 'Відхилення пропозиції', 'admin.notif.offer_other_accepted': 'Вибрано іншого виконавця', 'admin.notif.task_updated': 'Зміна завдання', 'admin.notif.deadline_reminder': 'Нагадування про дедлайн', 'admin.notif.task_archived': 'Автознняття завдання', 'admin.notif.referral_reward': 'Реферальна нагорода', 'admin.email_template.plan_activated': 'Тарифи — активація тарифу', 'admin.email_template.plan_upgraded': 'Тарифи — підвищення тарифу', 'admin.email_template.plan_downgrade_scheduled': 'Тарифи — запланований перехід', 'admin.email_template.plan_downgrade_applied': 'Тарифи — застосування переходу', 'admin.email_template.plan_renewal_reminder': 'Тарифи — нагадування про продовження', 'admin.email_template.plan_insufficient_funds': 'Тарифи — недостатньо коштів', 'pricing.confirm.title': 'Підтвердіть вибір тарифу', 'pricing.confirm.plan': 'Тариф', 'pricing.confirm.prorated': 'Залік залишку', 'pricing.confirm.effective_price': 'До оплати', 'pricing.confirm.your_balance': 'Ваш баланс', 'pricing.confirm.downgrade_info': 'Перехід на новий тариф відбудеться автоматично після закінчення поточного періоду.', 'pricing.confirm.insufficient': 'Недостатньо коштів на балансі.', 'pricing.confirm.top_up': 'Поповнити', 'pricing.confirm.schedule_downgrade': 'Запланувати перехід', 'pricing.confirm.pay': 'Оплатити', 'admin.user_edit.title': 'Редагування користувача', 'admin.user_edit.email': 'Email', 'admin.user_edit.email_verified': 'Email підтверджено', 'admin.user_edit.email_not_verified': 'Email не підтверджено', 'admin.user_edit.verify_email_btn': 'Підтвердити вручну', 'admin.user_edit.verify_email_done': 'Email підтверджено!', 'admin.user_edit.id': 'ID', 'admin.user_edit.registered': 'Реєстрація', 'admin.user_edit.last_seen': 'Останній візит', 'admin.user_edit.lang': 'Мова', 'admin.user_edit.first_name': 'Ім\'я', 'admin.user_edit.last_name': 'Прізвище', 'admin.user_edit.phone': 'Телефон', 'admin.user_edit.bio': 'Про себе', 'admin.user_edit.role': 'Роль', 'admin.user_edit.plan': 'Тариф', 'admin.user_edit.no_plan': '— Без тарифу —', 'admin.user_edit.active': 'Активний акаунт', 'admin.user_edit.published': 'Опублікована', 'admin.user_edit.balance': 'Баланс (EUR)', 'admin.user_edit.skills': 'Навички', 'admin.user_edit.tab.profile': 'Профіль', 'admin.user_edit.tab.account': 'Акаунт', 'admin.user_edit.tab.balance': 'Баланс', 'admin.user_edit.tab.settings': 'Налаштування', 'admin.user_edit.tab.specialist': 'Пропозиції', 'admin.user_edit.tab.site': 'Сайт', 'admin.user_edit.plan_expires': 'Тариф закінчується', 'admin.user_edit.interface_lang': 'Мова інтерфейсу', 'admin.user_edit.comm_languages': 'Мови спілкування', 'admin.user_edit.personal_site_slug': 'Персональна сторінка', 'admin.user_edit.show_contact_info': 'Показувати контакти', 'admin.user_edit.show_contact_info.hint': 'Видно замовникам', 'admin.user_edit.notify_new_tasks': 'Сповіщати про нові завдання', 'admin.user_edit.notify_new_tasks.hint': 'Push і email сповіщення', 'admin.user_edit.notif_messages': 'Сповіщення про повідомлення', 'admin.user_edit.notif_messages.hint': 'Нові повідомлення в чаті', 'admin.user_edit.site_settings': 'Налаштування персональної сторінки', 'admin.user_edit.categories': 'Категорії послуг', 'admin.user_edit.locations': 'Райони обслуговування', 'admin.user_edit.skill_placeholder': 'Нова навичка...', 'admin.user_edit.add_category': '— Виберіть категорію —', 'admin.user_edit.add_location': '— Виберіть район —', 'admin.user_edit.specialist_cards': 'Пропозиції спеціаліста', 'admin.user_edit.no_cards': 'Пропозиції не знайдено', 'admin.user_edit.card_title': 'Заголовок пропозиції', 'admin.user_edit.card_description': 'Опис', 'admin.balance.topup.btn': 'Поповнити', 'admin.balance.withdraw.btn': 'Списати', 'admin.balance.modal_hint': 'Зміни застосовуються одразу і фіксуються в історії', 'admin.balance.topup.title': 'Поповнення балансу', 'admin.balance.topup.amount': 'Сума', 'admin.balance.topup.description': 'Коментар', 'admin.balance.topup.description.placeholder': 'Наприклад: бонус або ручне поповнення', 'admin.balance.topup.submit': 'Поповнити баланс', 'admin.balance.withdraw.title': 'Зняття балансу', 'admin.balance.withdraw.amount': 'Сума', 'admin.balance.withdraw.description': 'Коментар', 'admin.balance.withdraw.description.placeholder': 'Наприклад: повернення або ручне списання', 'admin.balance.withdraw.submit': 'Списати баланс', 'admin.user_edit.role.customer': 'Замовник', 'admin.user_edit.role.user': 'Користувач', 'admin.user_edit.role.specialist': 'Помічник', 'admin.user_edit.role.admin': 'Адміністратор', 'common.refresh': 'Оновити', 'common.back_home': 'На головну', 'admin.loc.hint': 'Управління містами і районами', 'admin.loc.add_city': 'Нове місто', 'admin.loc.add_district': 'Додати район', 'admin.loc.new': 'Нова локація', 'admin.loc.edit': 'Редагувати локацію', 'admin.loc.district': 'район', 'admin.loc.empty': 'Немає локацій', 'admin.loc.delete.confirm': 'Видалити локацію? Всі райони також будуть видалені.', 'admin.cat.add_root': 'Нова категорія', 'admin.cat.add_sub': 'Підкатегорія', 'admin.cat.edit': 'Редагувати', 'admin.cat.delete': 'Видалити', 'admin.cat.delete.confirm': 'Видалити категорію? Всі підкатегорії також будуть видалені.', 'admin.cat.slug': 'Slug', 'admin.cat.icon': 'Іконка', 'admin.cat.name_el': 'Грецька', 'admin.cat.name_en': 'Англійська', 'admin.cat.name_ru': 'Російська', 'admin.cat.name_uk': 'Українська', 'admin.cat.active': 'Активна', 'admin.cat.parent': 'Батьківська категорія', 'admin.cat.no_parent': 'Верхній рівень', 'admin.cat.save': 'Зберегти', 'admin.cat.cancel': 'Скасувати', 'admin.cat.empty': 'Немає категорій', 'admin.cat.hint': 'Управління категоріями з багаторівневою ієрархією', 'admin.cat.new': 'Нова категорія', 'admin.cat.subcategory': 'підкатегорія', 'admin.cat.add_child': 'Додати підкатегорію', 'admin.cat.inactive': 'Неактивна', 'admin.event.user_login': 'Вхід', 'admin.event.user_register': 'Реєстрація', 'admin.event.admin_user_deactivate': 'Блокування юзера', 'admin.event.admin_user_activate': 'Розблокування юзера', 'admin.event.admin_user_role_changed': 'Зміна ролі', 'admin.event.admin_task_cancelled': 'Скасування завдання', 'admin.event.admin_task_deleted': 'Видалення завдання', 'admin.event.admin_report_reviewed': 'Скаргу розглянуто', 'admin.event.admin_report_dismissed': 'Скаргу відхилено', 'admin.event.task_created': 'Створено завдання', 'user.online': 'Онлайн', 'user.seen_minutes': 'був тут {n} хв тому', 'user.seen_hours': 'був тут {n} год тому', 'user.seen_yesterday': 'був тут вчора', 'user.seen_days': 'був тут {n} дн тому', 'specialists.title': 'Пропозиції', 'specialists.search': 'Пошук спеціаліста...', 'specialists.search.btn': 'Пошук', 'specialists.empty': 'Спеціалістів не знайдено', 'specialists.no_bio': 'Без опису', 'specialists.view': 'Дивитись профіль', 'specialists.reviews': 'відгуків', 'specialist.favorite': 'Додати до обраного', 'specialist.unfavorite': 'Прибрати з обраного', 'specialist.site_link': 'Особистий сайт', 'favorites.specialists.title': 'Обрані спеціалісти', 'favorites.specialists.empty': 'Ви ще не додали спеціалістів до обраного', 'nav.favorites': 'Обране', 'nav.schedule': 'Розклад', 'nav.find_tasks': 'Пошук замовлень', 'schedule.title': 'Мій розклад', 'schedule.subtitle': 'Позначайте дні коли ви вільні або зайняті — замовники побачать вашу доступність', 'schedule.available': 'Вільний', 'schedule.busy': 'Зайнятий', 'schedule.unset': 'Не вказано', 'schedule.click_hint': '← клік змінює статус по колу', 'schedule.range_mode': 'Виділити діапазон', 'schedule.range_from': 'З {date} — оберіть кінцеву дату', 'schedule.click_to_set': 'Натисніть щоб позначити', 'schedule.free': 'вільно', 'schedule.busy_count': 'зайнято', 'schedule.free_days': 'вільних днів', 'schedule.googleCalendar': 'Google Календар', 'schedule.connectGoogle': 'Підключити Google Календар', 'schedule.disconnectGoogle': 'Відключити', 'schedule.connectedAs': 'Підключено як', 'schedule.importFromGoogle': 'Синхр. з Google', 'schedule.gcalConnected': '✓ Google Календар підключено', 'schedule.gcalError': 'Помилка підключення Google Календар', 'schedule.gcalImportDone': 'Імпортовано {n} днів з Google Календар', 'schedule.gcalAutoSyncNote': 'Зміни доступності автоматично надсилаються в Google Календар', 'schedule.gcalConnectDesc': 'Підключіть Google Календар для автоматичної синхронізації розкладу', 'schedule.gcalDisconnectConfirm': 'Відключити Google Календар?', 'find_tasks.title': 'Пошук замовлень', 'find_tasks.for_me': 'Для мене', 'find_tasks.all': 'Всі замовлення', 'find_tasks.by_category': 'За категоріями', 'find_tasks.list': 'Списком', 'find_tasks.already_offered': 'Пропозицію надіслано', 'find_tasks.offer_now': 'Відгукнутися', 'find_tasks.empty_for_me': 'Немає замовлень у ваших категоріях', 'find_tasks.banner_hint': 'Знайдіть замовлення за категоріями вашого портфоліо', 'find_tasks.no_cards': 'Створіть портфоліо спеціаліста, щоб бачити підходящі замовлення', 'find_tasks.add_card': 'Створити портфоліо', 'find_tasks.search': 'Пошук замовлень...', 'find_tasks.tasks_count': 'завдань', 'footer.tagline': 'Платформа завдань для Греції', 'footer.rights': 'Всі права захищені.', 'nav.privacy': 'Політика конфіденційності', 'nav.delete_account': 'Видалення акаунту', 'delete_account.title': 'Запит на видалення акаунту', 'delete_account.subtitle': 'Після перевірки вашого запиту ми назавжди видалимо ваш акаунт і дані протягом 30 днів.', 'delete_account.warning': 'Цю дію не можна скасувати. Всі ваші дані будуть видалені безповоротно.', 'delete_account.reason_label': 'Причина (необов\'язково)', 'delete_account.reason_placeholder': 'Розкажіть, чому ви хочете видалити акаунт...', 'delete_account.confirm_label': 'Підтверджую, що хочу назавжди видалити свій акаунт', 'delete_account.submit': 'Надіслати запит', 'delete_account.submitting': 'Надсилання...', 'delete_account.success_title': 'Ваш запит отримано', 'delete_account.success_body': 'Ми опрацюємо ваш запит протягом 30 днів і повідомимо вас електронною поштою.', 'delete_account.login_required': 'Для надсилання запиту на видалення необхідно увійти в акаунт.', 'delete_account.login_btn': 'Увійти', 'app.download_title': 'Завантажте мобільний додаток CanHelp', 'app.download_desc': 'Все CanHelp — завжди під рукою. Доступно для Android та iOS.', 'nav.pricing': 'Тарифи', 'pricing.title': 'Тарифи', 'pricing.subtitle': 'Виберіть підходящий план', 'pricing.role.customer': 'Замовник', 'pricing.role.specialist': 'Спеціаліст', 'pricing.free': 'Безкоштовно', 'pricing.per_month': 'міс', 'pricing.duration': 'Термін', 'pricing.days': 'дн.', 'pricing.current_plan': 'Ваш план', 'pricing.popular': 'Популярний', 'pricing.choose': 'Вибрати', 'pricing.your_plan': 'Активний план', 'pricing.free_default': 'За замовчуванням', 'pricing.compare': 'Порівняння функцій', 'pricing.feature': 'Функція', 'pricing.faq_note': 'Оплата списується з балансу CanHelp. Поповнення доступне в розділі Оплата.', 'pricing.feat.messages': 'Повідомлень / день', 'pricing.feat.orders': 'Замовлень / день', 'pricing.feat.contact_all': 'Зв\'язок з усіма', 'pricing.feat.view_phone': 'Перегляд телефону', 'pricing.feat.show_contact': 'Показувати контакти', 'pricing.feat.favorites': 'Обране', 'pricing.feat.verified_badge': 'Верифікований бейдж', 'pricing.feat.google_calendar': 'Google Календар', 'pricing.feat.personal_site': 'Персональний сайт', 'pricing.feat.auto_response': 'Авто-відповідь', 'pricing.feat.auto_match': 'Авто-підбір', 'pricing.feat.highlighted_reviews': 'Виділені відгуки', 'pricing.feat.portfolio': 'Елементів пропозиції', 'pricing.feat.cards': 'Кількість пропозицій', 'pricing.feat.notify_tasks': 'Сповіщення про нові завдання', 'pricing.feat.video': 'Відео в пропозиції', 'upgrade.available_in': 'Доступно в', 'upgrade.cta': 'Покращити', 'dashboard.plan.title': 'Мій план', 'dashboard.plan.expires': 'Закінчується через {n} днів', 'dashboard.plan.upgrade': 'Покращити план', 'dashboard.plan.no_plan': 'Безкоштовний план', 'dashboard.plan.messages': 'Повідомлень сьогодні', 'dashboard.plan.orders': 'Замовлень сьогодні', 'dashboard.plan.limits': 'Денні ліміти', 'dashboard.plan.features': 'Функції', 'dashboard.plan.stats': 'Статистика', 'dashboard.stats.cards': 'Портфоліо', 'dashboard.stats.maxCards': 'Макс. портфоліо', 'dashboard.stats.portfolioItems': 'Елементи портфоліо', 'dashboard.stats.maxPortfolioItems': 'Макс. елементи', 'dashboard.stats.activeOffers': 'Активні відгуки', 'dashboard.stats.reviewsReceived': 'Відгуки', 'dashboard.stats.activeTasks': 'Активні завдання', 'dashboard.stats.completedTasks': 'Завершені', 'status.need_help': 'Потрібна допомога', 'status.active': 'Активний', 'status.toggle_on': 'Увімкнути', 'status.toggle_off': 'Вимкнути', 'fomo.missed_orders': 'Пропущено {n} замовлень', 'fomo.missed_value': 'На суму €{v}', 'fomo.upgrade_hint': 'Покращте план — отримуйте більше замовлень', 'fomo.conversion': 'Конверсія завдань', 'fomo.active': 'Активні', 'fomo.with_offers': 'З офертами', 'fomo.completed': 'Завершені', 'fomo.already_offered': '{n} спеціалістів вже відгукнулися', 'fomo.specialist_missed': 'Ви пропустили {n} замовлень', 'fomo.top_categories': 'Категорії', 'fomo.offers_received': 'пропозицій отримано', 'fomo.avg_offers': 'В середньому {n}/завдання', 'fomo.completion_rate': 'завершено', 'task.auto_match': 'Авто-матч', 'task.auto_match_results': 'Топ спеціалісти', 'task.no_offer_yet': 'Ви ще не надіслали пропозицію', 'task.make_offer': 'Надіслати пропозицію', 'auto_response.title': 'Авто-відповідь', 'auto_response.enabled': 'Увімкнути авто-відповідь', 'auto_response.min_budget': 'Мін. бюджет', 'auto_response.max_budget': 'Макс. бюджет', 'auto_response.default_price': 'Ціна за замовчуванням', 'auto_response.default_message': 'Повідомлення за замовчуванням', 'auto_response.max_per_day': 'Макс. авто-офертів на день', 'auto_response.save': 'Зберегти', 'auto_response.saved': 'Збережено', 'auto_response.categories': 'Категорії', 'auto_response.locations': 'Локації', 'profile.personal_site': 'Персональний сайт', 'profile.site_slug': 'URL slug', 'profile.site_slug_hint': 'Тільки латинські букви, цифри, - і _', 'profile.site_open': 'Відкрити сайт', 'profile.site_preview': 'Ваш сайт', 'profile.show_contact': 'Показувати контакти', 'profile.show_contact_hint': 'Замовники з Pro/Ultimate-планом побачать ваш телефон', 'gcal.upgrade_required': 'Google Календар вимагає план Pro або Ultimate', 'chat.limit_warning': 'Залишилось {n} повідомлень сьогодні', 'chat.limit_reached': 'Ліміт повідомлень вичерпано. Покращте план', 'chat.upgrade': 'Покращити', 'site.member_since': 'З нами з', 'site.rating': 'Рейтинг', 'site.completed_tasks': 'Виконано', 'site.languages': 'Мов', 'site.photos': 'фото', 'site.contact_form': 'Зв\'язатися', 'site.contact_sent': 'Повідомлення надіслано!', 'site.contact_sent_desc': 'Спеціаліст зв\'яжеться з вами найближчим часом', 'site.contact_name': 'Ім\'я', 'site.contact_name_ph': 'Ваше ім\'я', 'site.contact_email_ph': 'your@email.com', 'site.contact_message': 'Повідомлення', 'site.contact_message_ph': 'Опишіть ваше завдання...', 'site.contact_send': 'Надіслати', 'site.share': 'Поділитися', 'site.speaks_languages': 'Розмовляє мовами', 'site.message_sent': 'Повідомлення надіслано!', 'site.message_sent_desc': 'Спеціаліст отримає його в чаті', 'site.message_placeholder': 'Напишіть повідомлення...', 'site.write_to_chat': 'Написати в чат', 'site.auth_required_title': 'Потрібна авторизація', 'site.auth_required_desc': 'Щоб написати в чат, необхідно увійти в акаунт CanHelp.', 'site.auth_login_btn': 'Увійти в акаунт', 'site.auth_contact_form_btn': 'Написати через форму зворотного зв\'язку', 'specialist.services': 'Послуги', 'portfolio.title': 'Портфоліо', 'status.can_help_now': 'Готовий допомогти', 'common.not_found': 'Сторінку не знайдено', 'common.anonymous': 'Анонімно', 'specialist_setup.page_title': 'Налаштування профілю спеціаліста', 'specialist_setup.step_of': 'Крок {current} з {total}', 'specialist_setup.next': 'Далі', 'specialist_setup.back': 'Назад', 'specialist_setup.skip': 'Пропустити', 'specialist_setup.finish': 'Завершити', 'specialist_setup.go_to_profile': 'Перейти в профіль', 'specialist_setup.browse_tasks': 'Знайти завдання', 'specialist_setup.step1.title': 'Ласкаво просимо!', 'specialist_setup.step1.subtitle': 'Давайте налаштуємо ваш профіль', 'specialist_setup.step1.desc': 'Повний профіль допомагає знаходити більше клієнтів. Слідуйте крокам, щоб створити ідеальний профіль спеціаліста.', 'specialist_setup.step1.what_next': 'Що ми зробимо:', 'specialist_setup.step1.item1': 'Заповнимо основну інформацію', 'specialist_setup.step1.item2': 'Створимо картку послуги', 'specialist_setup.step1.item3': 'Додамо навички і категорії', 'specialist_setup.step1.item4': 'Оберемо географію обслуговування', 'specialist_setup.step1.item5': 'Завантажимо фото портфоліо', 'specialist_setup.step2.title': 'Базовий профіль', 'specialist_setup.step2.subtitle': 'Розкажіть про себе', 'specialist_setup.step2.bio_label': 'Про себе', 'specialist_setup.step2.bio_placeholder': 'Опишіть ваш досвід, послуги які ви пропонуєте...', 'specialist_setup.step2.phone_label': 'Телефон', 'specialist_setup.step2.phone_placeholder': '+30 6900000000', 'specialist_setup.step2.photo_label': 'Фото профілю', 'specialist_setup.step2.photo_btn': 'Завантажити фото', 'specialist_setup.step2.photo_uploading': 'Завантаження...', 'specialist_setup.step2.photo_hint': 'Відображається у вашому профілі', 'specialist_setup.step3.title': 'Картка послуги', 'specialist_setup.step3.subtitle': 'Створіть вашу першу картку послуги', 'specialist_setup.step3.title_label': 'Назва картки', 'specialist_setup.step3.title_placeholder': 'Напр. Сантехнік, Електрик, Прибирання...', 'specialist_setup.step3.desc_label': 'Опис', 'specialist_setup.step3.desc_placeholder': 'Детально опишіть що ви пропонуєте, досвід, переваги...', 'specialist_setup.step3.title_required': 'Назва обов\'язкова', 'specialist_setup.step4.title': 'Навички і категорії', 'specialist_setup.step4.subtitle': 'Додайте навички і виберіть категорії', 'specialist_setup.step4.skills_label': 'Навички', 'specialist_setup.step4.skills_placeholder': 'Напр. Монтаж труб...', 'specialist_setup.step4.skills_add': 'Додати', 'specialist_setup.step4.categories_label': 'Категорії', 'specialist_setup.step5.title': 'Географія обслуговування', 'specialist_setup.step5.subtitle': 'Де ви надаєте послуги?', 'specialist_setup.step5.hint': 'Виберіть міста або конкретні райони', 'specialist_setup.done.title': 'Ваш профіль готовий!', 'specialist_setup.done.subtitle': 'Вітаємо! Профіль налаштовано', 'specialist_setup.done.desc': 'Тепер ви можете отримувати замовлення від клієнтів. Знайдіть завдання, що відповідають вашим навичкам.', 'support.title': 'Підтримка', 'support.type.label': 'Тип звернення', 'support.type.bug': 'Помилка', 'support.type.suggestion': 'Пропозиція', 'support.type.other': 'Інше', 'support.subject': 'Тема', 'support.subject.placeholder': 'Коротко опишіть проблему...', 'support.body': 'Повідомлення', 'support.body.placeholder': 'Детально опишіть проблему або пропозицію...', 'support.submit': 'Надіслати', 'support.cancel': 'Скасувати', 'support.error': 'Помилка надсилання. Спробуйте ще раз.', 'support.sent.title': 'Запит отримано!', 'support.sent.body': 'Ми відповімо на ваш email якнайшвидше.', 'support.sent.close': 'Закрити', 'admin.tab.support': 'Підтримка', 'admin.tab.backup': 'Резервні копії', 'admin.tab.translations': 'Переклади', 'admin.tab.dbcheck': 'Перевірка БД', 'admin.tab.balances': 'Баланс', 'admin.tab.push': 'Push', 'admin.tab.referrals': 'Реферали', 'admin.search': 'Пошук', 'admin.noData': 'Немає даних', 'admin.cat.order': 'Порядок', 'admin.cat.skills': 'Навички', 'admin.plans.form.max_tasks': 'Макс. завдань', 'admin.settings.referral.shared_section': 'Спільні налаштування рефералів', 'admin.settings.seo.title': 'SEO налаштування', 'admin.backup.title': 'Резервні копії', 'admin.backup.tables': 'Таблиці', 'admin.backup.exportAll': 'Експорт всього', 'admin.backup.importAll': 'Імпорт всього', 'admin.backup.exportTable': 'Експорт таблиці', 'admin.backup.importTable': 'Імпорт таблиці', 'admin.backup.exporting': 'Експорт...', 'admin.backup.importing': 'Імпорт...', 'admin.backup.exportSuccess': 'Експорт завершено', 'admin.backup.importSuccess': 'Імпорт завершено', 'admin.backup.autoBackup': 'Автобекап', 'admin.backup.autoBackupDesc': 'Автоматичний щоденний бекап', 'admin.backup.storedBackups': 'Збережені бекапи', 'admin.backup.noStoredBackups': 'Збережених бекапів немає', 'admin.backup.restore': 'Відновити', 'admin.backup.restoreConfirm': 'Відновити з бекапу?', 'admin.backup.restoreSuccess': 'Відновлення завершено', 'admin.backup.restoring': 'Відновлення...', 'admin.backup.date': 'Дата', 'admin.backup.size': 'Розмір', 'admin.backup.today': 'Сьогодні', 'admin.backup.yesterday': 'Вчора', 'admin.balance.col.operation': 'Операція', 'admin.balance.col.amount': 'Сума', 'admin.balance.col.result': 'Баланс', 'admin.balance.col.description': 'Опис', 'admin.balance.col.date': 'Дата', 'admin.balance.empty': 'Записів поки немає', 'admin.balance.filter.all': 'Всі операції', 'admin.balance.filter.user_id': 'Фільтр за userId', 'admin.balance.kind.topup': 'Поповнення', 'admin.balance.kind.plan_purchase': 'Списання за тариф', 'admin.balance.kind.admin_topup': 'Поповнення адміном', 'admin.balance.kind.admin_adjustment': 'Коригування', 'admin.support.search': 'Пошук', 'admin.support.all_statuses': 'Всі статуси', 'admin.support.all_types': 'Всі типи', 'admin.support.none': 'Звернень немає', 'admin.support.reply': 'Відповісти', 'admin.support.reply_placeholder': 'Введіть відповідь...', 'admin.support.send_reply': 'Надіслати відповідь', 'admin.support.cancel': 'Скасувати', 'admin.support.close': 'Закрити', 'admin.support.status.open': 'Відкрито', 'admin.support.status.in_progress': 'В роботі', 'admin.support.status.resolved': 'Вирішено', 'admin.support.status.closed': 'Закрито', 'admin.support.your_reply': 'Ваша відповідь', 'admin.user_edit.visibility_requirements.title': 'Профіль поки не потрапляє в «Пропозиції»', 'admin.user_edit.visibility_requirements.hint': 'Потрібно виконати умови видимості:', 'admin.user_edit.visibility_requirements.bio': 'Заповнити опис (bio)', 'admin.user_edit.visibility_requirements.published_card': 'Опублікувати хоча б одну картку', 'admin.user_edit.visibility_requirements.categories': 'Вказати категорію в опублікованій картці', 'admin.user_edit.visibility_requirements.locations': 'Вказати локацію в опублікованій картці', 'auto_response.desc': 'Автоматично відповідати на відповідні завдання', 'auto_response.budget_range': 'Бюджет завдання', 'auto_response.message_placeholder': 'Вітаю! Я можу допомогти з цим завданням...', 'profile.background.title': 'Фон шапки профілю', 'profile.background.hint': 'Показується в шапці публічного профілю на web і в мобільному застосунку.', 'profile.photo.uploading': 'Завантаження...', 'profile.balance.history': 'Архів операцій', 'profile.balance.history.last': 'Останні операції', 'profile.balance.history.empty': 'Операцій поки немає', 'profile.balance.history.balance_after': 'Баланс після', 'profile.balance.history.kind.topup': 'Поповнення балансу', 'profile.balance.history.kind.plan_purchase': 'Списання за тариф', 'profile.balance.history.kind.admin_topup': 'Поповнення адміністратором', 'profile.balance.history.kind.admin_adjustment': 'Коригування адміністратором', 'profile.plan_history.title': 'Історія тарифного плану', 'profile.plan_history.empty': 'Історія змін тарифу поки порожня', 'profile.plan_history.expires': 'До', 'profile.plan_history.days': 'днів', 'profile.plan_history.event.activated': 'Активовано', 'profile.plan_history.event.renewed': 'Продовжено', 'profile.plan_history.event.downgraded': 'Понижено', 'profile.plan_history.event.referral_reward': 'Реферальна нагорода', 'profile.plan_history.event.admin_change': 'Змінено адміністратором', 'profile.plan_history.event.expired': 'Закінчився', 'profile.show_contact_desc': 'Дозволяє клієнтам зв’язатися напряму', 'profile.site.visible.price_list': 'Прайслист', 'site.pricelist': 'Прайслист', 'status.plan_required': 'Статус недоступний на поточному тарифі', 'status.admin_not_applicable': 'Для акаунта адміністратора користувацький статус не застосовується' } }; export function getTranslations(locale) { const t = translations[locale] ?? translations.el; return (key, fallback)=>t[key] ?? translations.el[key] ?? fallback ?? key; } /06undefined351357undefined315903315909undefined /***/ }) /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ $: () => (/* binding */ getTranslations), /* harmony export */ YZ: () => (/* binding */ LOCALES) /* harmony export */ }); /* unused harmony export translations */ const LOCALES = [ { code: 'el', label: 'Ελληνικά', flag: '🇬🇷' }, { code: 'en', label: 'English', flag: '🇬🇧' }, { code: 'uk', label: 'Українська', flag: '🇺🇦' }, { code: 'ru', label: 'Русский', flag: '🇷🇺' } ]; const translations = { el: { 'footer.slogan': 'Η εργασία σου — η φροντίδα μας! Λύνουμε κάθε ζήτημα γρήγορα και εύκολα.', 'footer.links': 'Σύνδεσμοι', 'footer.socials': 'Στα κοινωνικά δίκτυα', // Nav 'nav.home': 'Αρχική', 'nav.tasks': 'Εργασίες', 'nav.post': '+ Δημοσίευση', 'nav.dashboard': 'Οι εργασίες μου', 'nav.chat': 'Μηνύματα', 'nav.notifications': 'Ειδοποιήσεις', 'nav.profile': 'Προφίλ', 'nav.admin': 'Διαχείριση', 'nav.specialists': 'Προσφορές', 'nav.new_task': 'Νέα εργασία', 'nav.login': 'Σύνδεση', 'nav.register': 'Εγγραφή', 'nav.logout': 'Έξοδος', // Hero 'hero.title': 'Κάθε άνθρωπος έχει κάτι να προσφέρει', 'hero.subtitle': 'Βρες βοήθεια, πρόσφερε τις δεξιότητές σου ή κέρδισε χρήματα βοηθώντας άλλους', 'hero.cta.post': 'Ζήτησε βοήθεια', 'hero.cta.browse': 'Πρόσφερε βοήθεια', 'hero.cta.specialists': 'Βρες εργασία', 'hero.search.placeholder': 'Τι χρειάζεσαι; π.χ. ηλεκτρολόγος, καθαρισμός...', 'hero.specialist.title': 'Βρες εργασίες κοντά σου', 'hero.specialist.subtitle': 'Ανακάλυψε εργασίες στις κατηγορίες σου και στείλε προσφορά', 'hero.specialist.cta': 'Βρες εργασίες', 'hero.specialist.search.placeholder': 'Αναζήτηση εργασιών... π.χ. ηλεκτρολογία, καθαρισμός', 'section.categories.specialist': 'Βρες εργασίες ανά κατηγορία', 'section.cities.specialist': 'Εργασίες ανά πόλη', 'how.specialist.step1.title': 'Δημιούργησε κάρτα ειδικού', 'how.specialist.step1.desc': 'Δήλωσε κατηγορίες, δεξιότητες και περιοχές — το σύστημα βρίσκει εργασίες αυτόματα', 'how.specialist.step2.title': 'Βρες σχετικές εργασίες', 'how.specialist.step2.desc': 'Ανακάλυψε εργασίες στις κατηγορίες σου και ξεκίνα αμέσως', 'how.specialist.step3.title': 'Στείλε προσφορά & κέρδισε', 'how.specialist.step3.desc': 'Υποβάλε προσφορά με τιμή και χρόνο, επικοινωνήσε και ολοκλήρωσε εργασίες', 'stats.specialists': 'προσφορές', 'stats.tasks': 'εργασίες', 'stats.categories': 'κατηγορίες', 'stats.free': 'δωρεάν εγγραφή', 'promo.title': 'Αποκτήσε Pro δωρεάν — μόνο μέχρι το τέλος του χρόνου', 'promo.subtitle': 'Εγγράψου τώρα και απόλαυσε το πλάνο Pro χωρίς χρέωση. Η προσφορά λήγει στις 31 Δεκεμβρίου.', 'promo.cta': 'Εγγραφή δωρεάν', 'promo.days': 'μέρες', 'promo.hours': 'ώρες', 'promo.minutes': 'λεπτά', 'promo.seconds': 'δευτ.', // Sections 'section.categories': 'Δημιούργησε εργασία σε οποιαδήποτε κατηγορία', 'section.how': 'Πώς λειτουργεί', 'section.recent': 'Πρόσφατες εργασίες', 'section.all': 'Δες όλες →', 'section.more': 'ακόμα', 'section.cities': 'Πόλεις & Περιοχές', 'section.community': 'Ένα κοινοτικό έργο για όλους', 'community.subtitle': 'Το CanHelp δεν είναι απλώς μια αγορά — είναι μια κοινότητα αμοιβαίας βοήθειας. Οποιοσδήποτε έχει γνώση ή δεξιότητα μπορεί να βρει έναν πελάτη. Οποιοσδήποτε έχει ένα πρόβλημα μπορεί να βρει έναν ειδικό.', 'community.point1.title': 'Είσαι ειδικός σε κάτι;', 'community.point1.desc': 'Επισκευές, μαθήματα, σχεδιασμός, μεταφράσεις, φροντίδα — κάθε δεξιότητα αξίζει. Δημιούργησε προφίλ και βρες πελάτες κοντά σου.', 'community.point2.title': 'Χρειάζεσαι βοήθεια;', 'community.point2.desc': 'Δημοσίευσε εργασία σε λιγότερο από ένα λεπτό και λάβε προσφορές από επαληθευμένους ειδικούς στην πόλη σου.', 'community.point3.title': 'Βοήθησε το έργο να αναπτυχθεί', 'community.point3.desc': 'Το CanHelp αναπτύσσεται χάρη στις κοινότητες. Μοιράσου το σύνδεσμο με φίλους και γνωστούς — μαζί χτίζουμε κάτι χρήσιμο για όλους.', 'community.share': 'Μοιράσου με φίλους', 'community.share.copied': 'Σύνδεσμος αντιγράφηκε!', // Referral section on home page 'section.referral': 'Πρόγραμμα παραπομπών', 'referral.home.subtitle': 'Μοιράσου τον σύνδεσμό σου — κάθε νέος χρήστης που εγγράφεται μέσα από αυτόν σου αποφέρει ανταμοιβή.', 'referral.home.step1.title': 'Εγγραφείσε και λάβε σύνδεσμο', 'referral.home.step1.desc': 'Δημιούργησε λογαριασμό και βρες τον μοναδικό σου σύνδεσμο παραπομπής στο προφίλ σου.', 'referral.home.step2.title': 'Μοιράσου με φίλους', 'referral.home.step2.desc': 'Στείλε τον σύνδεσμο σε φίλους, γνωστούς ή δημοσίευσέ τον στα social media.', 'referral.home.step3.title': 'Κέρδισε ανταμοιβές', 'referral.home.step3.desc': 'Μόλις ο φίλος σου επαληθεύσει το email του, λαμβάνεις αυτόματα την ανταμοιβή σου.', 'referral.home.cta': 'Πάρε τον σύνδεσμό σου', 'referral.home.badge': 'Πρόγραμμα παραπομπών', // FAQ section 'section.faq': 'Συχνές Ερωτήσεις', 'faq.q1': 'Πώς λειτουργεί το CanHelp;', 'faq.a1': 'Δημοσίευσε μια εργασία, λάβε προσφορές από ειδικούς, επέλεξε τον καλύτερο και ξεκίνα τη συνεργασία. Είναι γρήγορο, απλό και δωρεάν για πελάτες.', 'faq.q2': 'Πόσο κοστίζει η χρήση της πλατφόρμας;', 'faq.a2': 'Η εγγραφή και η δημοσίευση εργασιών είναι εντελώς δωρεάν για πελάτες. Οι ειδικοί έχουν στη διάθεσή τους δωρεάν πλάνο καθώς και premium επιλογές.', 'faq.q3': 'Πώς μπορώ να γίνω ειδικός;', 'faq.a3': 'Κάνε εγγραφή, πήγαινε στο «Γίνε Ειδικός», συμπλήρωσε το προφίλ σου με δεξιότητες και κατηγορίες και αρχίνισε να λαμβάνεις εργασίες.', 'faq.q4': 'Πώς επιλέγω τον κατάλληλο ειδικό;', 'faq.a4': 'Δες τις αξιολογήσεις, την εμπειρία, τις δεξιότητες και το χαρτοφυλάκιο κάθε ειδικού. Επικοινώνησε μαζί του μέσω chat και συζήτα τις λεπτομέρειες πριν αποφασίσεις.', 'faq.q5': 'Τι γίνεται αν δεν είμαι ικανοποιημένος;', 'faq.a5': 'Μπορείς να αφήσεις αξιολόγηση για τον ειδικό και να τον βαθμολογήσεις από 1 έως 5 αστέρια. Οι αξιολογήσεις βοηθούν άλλους χρήστες να επιλέξουν έμπιστους επαγγελματίες.', 'faq.q6': 'Μπορώ να επικοινωνήσω με τον ειδικό πριν την αποδοχή;', 'faq.a6': 'Ναι. Μόλις λάβεις μια προσφορά, μπορείς να ανοίξεις chat με τον ειδικό, να κάνεις ερωτήσεις και να συντονίσεις τις λεπτομέρειες πριν αποφασίσεις.', 'faq.q7': 'Πόσος χρόνος χρειάζεται για να λάβω προσφορές;', 'faq.a7': 'Συνήθως μέσα σε λίγες ώρες. Οι ειδικοί λαμβάνουν ειδοποίηση για νέες εργασίες και μπορούν να απαντήσουν γρήγορα.', 'faq.q8': 'Μπορώ να δημοσιεύσω εργασία σε οποιαδήποτε πόλη της Ελλάδας;', 'faq.a8': 'Ναι! Το CanHelp καλύπτει όλη την Ελλάδα. Μπορείς να βρεις ειδικούς στην Αθήνα, στη Θεσσαλονίκη, στην Πάτρα και αλλού.', 'faq.q9': 'Τι είδη εργασιών μπορώ να βρω στο CanHelp;', 'faq.a9': 'Επισκευές, καθαρισμό, ηλεκτρολόγους, μαθήματα, σχεδιασμό, IT, μετακομίσεις, ομορφιά και πολλά άλλα. Οι κατηγορίες αυξάνονται συνεχώς.', 'faq.q10': 'Υπάρχει εφαρμογή για κινητό;', 'faq.a10': 'Ναι! Το CanHelp διατίθεται για Android και iOS. Κατέβασε την εφαρμογή και διαχειρίσου τα πάντα από το τηλέφωνό σου.', // How it works 'how.step1.title': 'Δημοσίευσε εργασία', 'how.step1.desc': 'Περίγραψε τι χρειάζεσαι και ορίζε τον προϋπολογισμό σου', 'how.step2.title': 'Λάβε προσφορές', 'how.step2.desc': 'Ειδικοί θα σου στείλουν προσφορές με τιμή και χρόνο', 'how.step3.title': 'Επίλεξε & ξεκίνα', 'how.step3.desc': 'Επέλεξε τον καλύτερο επαγγελματία και ξεκίνα τη συνεργασία', // Tasks page 'tasks.title': 'εργασίες', 'tasks.filters': 'Φίλτρα', 'tasks.search': 'Αναζήτηση', 'tasks.search.placeholder': 'Τίτλος ή λέξη κλειδί...', 'tasks.search.btn': 'Αναζήτηση', 'tasks.publish': 'Δημοσίευση', 'tasks.category.all': 'Όλες', 'tasks.category.all_in': 'Όλα στην', 'tasks.category.label': 'Κατηγορία', 'tasks.location.label': 'Πόλη', 'tasks.location.placeholder': 'π.χ. Αθήνα', 'tasks.empty': 'Δεν βρέθηκαν εργασίες', 'tasks.empty.cta': 'Δημοσίευσε την πρώτη', // Task detail 'task.status.open': 'Ανοιχτή', 'task.status.in_progress': 'Σε εξέλιξη', 'task.status.completed': 'Ολοκληρωμένη', 'task.status.cancelled': 'Ακυρωμένη', 'task.status.draft': 'Πρόχειρο', 'task.budget': 'Προϋπολογισμός', 'task.location': 'Τοποθεσία', 'task.deadline': 'Ημερομηνία έναρξης', 'task.expires_at': 'Ενεργό έως', 'task.created_at': 'Δημιουργήθηκε', 'task.customer': 'Πελάτης', 'task.offer.btn': 'Υποβολή προσφοράς', 'task.invite.banner_title': 'Σας προσκαλούν σε αυτήν την εργασία', 'task.invite.banner_hint': 'Ο πελάτης σας πρόσκαλεσε προσωπικά', 'task.invite.accept': 'Αποστολή προσφοράς', 'task.invite.decline': 'Άρνηση', 'offer.accept': 'Αποδοχή', 'offer.decline': 'Απόρριψη', 'task.complete': 'Ολοκλήρωση εργασίας', 'task.complete.confirm': 'Να ολοκληρωθεί η εργασία;', 'task.edit': 'Επεξεργασία', 'task.status_label': 'Κατάσταση', 'task.yours': 'Η εργασία σου', 'task.offer.yours': 'Η προσφορά σου', 'review.leave': 'Άφησε αξιολόγηση', 'review.rating': 'Βαθμολογία', 'review.comment': 'Σχόλιο', 'review.comment.placeholder': 'Πες μας για την εμπειρία σου...', 'review.submit': 'Υποβολή αξιολόγησης', 'review.submitting': 'Αποστολή...', 'review.done': 'Η αξιολόγηση καταχωρήθηκε!', 'profile.reviews': 'Αξιολογήσεις', 'profile.no_reviews': 'Δεν υπάρχουν αξιολογήσεις ακόμα', 'profile.rating': 'Βαθμολογία', 'profile.skills.label': 'Δεξιότητες', 'profile.member_since': 'Μέλος από', 'task.offers': 'Προσφορές', 'task.offers.none': 'Δεν υπάρχουν ακόμα προσφορές', // Create task 'create.title': 'Δημοσίευση εργασίας', 'create.field.title': 'Τίτλος', 'create.field.description': 'Περιγραφή', 'create.field.category': 'Κατηγορία', 'create.field.category.select': 'Επιλέξτε...', 'create.field.location': 'Τοποθεσία', 'create.field.location.any': 'Οπουδήποτε', 'create.field.location.all': 'Ολόκληρη η πόλη', 'create.field.budget': 'Προϋπολογισμός (€)', 'create.field.deadline': 'Ημερομηνία έναρξης', 'create.field.expires_at': 'Αγγελία ενεργή έως', 'create.field.expires_at.days': '{n} ημέρες', 'create.field.budget_negotiable': 'Η τιμή είναι διαπραγματεύσιμη', 'create.field.time_slot': 'Χρόνος εκτέλεσης', 'create.field.time_slot.any': 'Οποιαδήποτε', 'create.field.time_slot.morning': 'Πρωινό (08:00–13:00)', 'create.field.time_slot.afternoon': 'Μεσημέρι (13:00–18:00)', 'create.field.time_slot.evening': 'Βράδυ (18:00–22:00)', 'create.field.time_slot.weekend': 'Σαββατοκύριακο', 'create.field.address': 'Διεύθυνση (προαιρετικά)', 'create.field.address.district': 'Συνοικία', 'create.field.address.street': 'Οδός', 'create.field.address.house': 'Αριθμός', 'create.field.confidential': 'Εμπιστευτική σημείωση', 'create.field.confidential.placeholder': 'Λεπτομέρειες που θα δει μόνο ο αναδοχόμενος...', 'create.field.confidential.hint': 'Δεν εμφανίζεται δημόσια', 'create.field.photos': 'Φωτογραφίες', 'create.field.photos.add': 'Προσθήκη φωτογραφίας', 'create.field.photos.uploading': 'Ανέβασμα...', 'task.budget_negotiable': 'Τιμή διαπραγματεύσιμη', 'task.time_slot': 'Χρόνος', 'task.confidential': 'Εμπιστευτική σημείωση', 'create.field.title.placeholder': 'π.χ. Καθαρισμός διαμερίσματος 80τμ', 'create.field.description.placeholder': 'Περίγραψε λεπτομερώς τι χρειάζεσαι...', 'create.field.location.placeholder': 'π.χ. Αθήνα, Κολωνάκι', 'create.field.budget.placeholder': 'π.χ. 100', 'create.submit': 'Δημοσίευση εργασίας', 'create.submitting': 'Δημοσίευση...', // Auth 'login.title': 'Καλωσόρισες', 'login.subtitle': 'Σύνδεση στο CanHelp', 'login.email': 'Email', 'login.password': 'Κωδικός', 'login.submit': 'Σύνδεση', 'login.submitting': 'Σύνδεση...', 'login.error': 'Λάθος email ή κωδικός', 'login.unverified.title': 'Επιβεβαιώστε το email σας', 'login.unverified.desc': 'Στείλαμε σύνδεσμο επαλήθευσης στο email σας. Ελέγξτε τα εισερχόμενα (ή spam) και πατήστε το σύνδεσμο.', 'login.unverified.resend': 'Αποστολή νέου email επαλήθευσης', 'login.unverified.sending': 'Αποστολή...', 'login.unverified.sent': '✓ Εστάλη — ελέγξτε τα εισερχόμενα', 'profile.email.verified': 'Email επαληθεύτηκε', 'profile.email.not_verified': 'Email δεν επαληθεύτηκε', 'login.no_account': 'Δεν έχεις λογαριασμό;', 'login.register_link': 'Εγγραφή', 'login.forgot_password': 'Ξέχασα τον κωδικό', 'login.or_continue_with': 'ή συνεχίστε με', 'login.continue_google': 'Σύνδεση με Google', 'forgot.title': 'Ξέχασα τον κωδικό', 'forgot.subtitle': 'Εισάγετε το email σας για να λάβετε σύνδεσμο ανάκτησης', 'forgot.email': 'Email', 'forgot.submit': 'Αποστολή', 'forgot.submitting': 'Αποστολή...', 'forgot.sent.title': 'Ελέγξτε τα εισερχόμενά σας', 'forgot.sent.desc': 'Αν υπάρχει λογαριασμός με αυτό το email, θα σας στείλουμε σύνδεσμο ανάκτησης κωδικού.', 'forgot.back_to_login': 'Επιστροφή στη σύνδεση', 'forgot.error': 'Αποτυχία αποστολής. Ελέγξτε το email σας ή δοκιμάστε ξανά.', 'forgot.error.not_found': 'Δεν βρέθηκε λογαριασμός με αυτό το email.', 'forgot.error.send_failed': 'Αποτυχία αποστολής email. Δοκιμάστε ξανά αργότερα', 'reset.title': 'Νέος κωδικός', 'reset.subtitle': 'Εισάγετε τον νέο σας κωδικό', 'reset.password': 'Νέος κωδικός', 'reset.confirm': 'Επιβεβαίωση κωδικού', 'reset.submit': 'Αλλαγή κωδικού', 'reset.submitting': 'Αποθήκευση...', 'reset.success': 'Ο κωδικός άλλαξε επιτυχώς. Ανακατεύθυνση στη σύνδεση...', 'reset.back_to_login': 'Επιστροφή στη σύνδεση', 'reset.error.mismatch': 'Οι κωδικοί δεν ταιριάζουν', 'reset.error.invalid': 'Μη έγκυρος σύνδεσμος. Παρακαλώ ζητήστε νέο.', 'register.title': 'Εγγραφή', 'register.subtitle': 'Δημιουργία λογαριασμού στο CanHelp', 'register.first_name': 'Όνομα', 'register.last_name': 'Επώνυμο', 'register.email': 'Email', 'register.password': 'Κωδικός (min 8 χαρακτήρες)', 'register.role': 'Ρόλος', 'register.role.customer': 'Χρήστης', 'register.role.customer.desc': 'Δημοσιεύω εργασίες', 'register.role.specialist': 'Ειδικός', 'register.role.specialist.desc': 'Αναλαμβάνω εργασίες', 'register.submit': 'Δημιουργία λογαριασμού', 'register.submitting': 'Εγγραφή...', 'register.has_account': 'Έχεις ήδη λογαριασμό;', 'register.login_link': 'Σύνδεση', 'register.continue_google': 'Εγγραφή με Google', 'register.check_email.title': 'Ελέγξτε το email σας', 'register.check_email.desc': 'Στείλαμε σύνδεσμο επαλήθευσης στη διεύθυνση email σας. Ελέγξτε τα εισερχόμενα (ή spam) και πατήστε τον σύνδεσμο.', 'register.check_email.login': 'Επιστροφή στη σύνδεση', 'register.captcha_failed': 'Η επαλήθευση CAPTCHA απέτυχε. Παρακαλώ δοκιμάστε ξανά.', // Dashboard 'dashboard.title': 'Πίνακας ελέγχου', 'dashboard.new_task': '+ Νέα εργασία', 'dashboard.onboarding.title': 'Καλωσήλθατε στο CanHelp 👋', 'dashboard.onboarding.subtitle': 'Διαλέξτε πώς θέλετε να ξεκινήσετε.', 'dashboard.onboarding.helper.title': 'Πρόσφερε τη βοήθειά σου', 'dashboard.onboarding.helper.desc': 'Συμπλήρωσε το προφίλ σου — δεξιότητες, κατηγορίες και περιοχές. Παίρνει μόνο λίγα λεπτά και αρχίζεις να δέχεσαι παραγγελίες.', 'dashboard.onboarding.helper.cta': 'Συμπλήρωσε το προφίλ', 'dashboard.onboarding.requester.title': 'Χρειάζεσαι βοήθεια;', 'dashboard.onboarding.requester.desc': 'Δημοσίευσε μια εργασία και οι βοηθοί θα σου στείλουν προσφορές.', 'dashboard.onboarding.requester.cta': 'Δημοσίευσε εργασία', 'dashboard.my_tasks': 'Οι εργασίες μου', 'dashboard.my_offers': 'Οι προσφορές μου', 'dashboard.invitations': 'Προσκλήσεις για εργασία', 'dashboard.offers_count': 'προσφορές', 'dashboard.declined_count': 'απορρίφθηκαν', 'dashboard.completed_tasks': 'Ολοκληρωμένες εργασίες', 'dashboard.completed_offers': 'Ολοκληρωμένες προσφορές', 'dashboard.review_pending': 'Η αξιολόγηση δεν έχει υποβληθεί ακόμα', 'tasks.new.top_specialists': 'Κορυφαίοι ειδικοί', 'tasks.new.select_category': 'Επιλέξτε κατηγορία για να δείτε ειδικούς', 'tasks.new.invite': 'Πρόσκληση', 'tasks.new.invited': 'Επιλέχθηκε ✓', 'reviews.count': 'αξιολογήσεις', 'filter.location': 'Τοποθεσία', 'filter.language': 'Γλώσσες', 'filter.language.any': 'Οποιαδήποτε γλώσσα', 'filter.category.all': 'Όλες οι κατηγορίες', 'user.categories': 'Κατηγορίες', 'user.work_area': 'Περιοχή εργασίας', 'user.specialist_cards': 'Κάρτες υπηρεσιών', 'card.skills': 'Δεξιότητες', 'card.categories': 'Κατηγορίες', 'card.geography': 'Περιοχή εργασίας', 'card.portfolio': 'Χαρτοφυλάκιο', 'card.close': 'Κλείσιμο', 'dashboard.tasks.empty': 'Δεν έχεις δημοσιεύσει εργασίες', 'dashboard.tasks.empty.cta': 'Δημοσίευσε την πρώτη σου', 'dashboard.tasks.add_new': 'Πρόσθεσε νέα εργασία', 'dashboard.offers.empty': 'Δεν έχεις υποβάλλει προσφορές', 'dashboard.offers.empty.cta': 'Βρες εργασίες', 'dashboard.customer.specialists_title': 'Ψάχνεις εκτελεστή;', 'dashboard.customer.specialists_hint': 'Δες προφίλ ειδικών, διάβασε αξιολογήσεις και κάλεσέ τους στις εργασίες σου', 'dashboard.customer.specialists_cta': 'Βρες ειδικό', 'dashboard.customer.how_title': 'Πώς λειτουργεί', 'dashboard.customer.step1': 'Δημιούργησε εργασία με περιγραφή και προϋπολογισμό', 'dashboard.customer.step2': 'Οι ειδικοί θα στείλουν προσφορές με τιμή και χρόνο', 'dashboard.customer.step3': 'Επίλεξε τον κατάλληλο και ξεκίνα τη συνεργασία', // Notifications 'notif.title': 'Ειδοποιήσεις', 'notif.mark_all': 'Σήμανση όλων ως αναγνωσμένα', 'notif.empty': 'Δεν υπάρχουν ειδοποιήσεις', 'notif.type.generic': 'Ειδοποίηση', 'notif.type.new_offer': 'Νέα προσφορά', 'notif.type.offer_accepted': 'Η προσφορά σας έγινε δεκτή', 'notif.type.offer_declined': 'Η προσφορά σας απορρίφθηκε', 'notif.type.task_completed': 'Η εργασία ολοκληρώθηκε', 'notif.type.task_cancelled': 'Η εργασία ακυρώθηκε', 'notif.type.new_message': 'Νέο μήνυμα', 'notif.type.new_review': 'Νέα αξιολόγηση', 'notif.type.task_invite': 'Πρόσκληση σε εργασία', 'notif.type.referral_reward': 'Ανταμοιβή παραπομπής', 'notif.type.specialist_card_submitted': 'Η κάρτα στάλθηκε για έλεγχο', 'notif.type.specialist_card_approved': 'Η κάρτα εγκρίθηκε', 'notif.type.specialist_card_rejected': 'Η κάρτα απορρίφθηκε', 'notif.body.new_offer': 'Νέα προσφορά για «{title}»', 'notif.body.offer_accepted': 'Η προσφορά σας για «{title}» έγινε δεκτή', 'notif.body.offer_declined': 'Η προσφορά σας για «{title}» απορρίφθηκε', 'notif.body.task_invite': 'Σας προσκαλούν για «{title}»', 'notif.body.new_review': 'Λάβατε αξιολόγηση {rating}★', 'notif.body.referral_reward': 'Προστέθηκαν {days} ημέρες πρόσβασης στο πλάνο «{plan}» στον λογαριασμό σας!', 'notif.body.specialist_card_submitted': 'Η κάρτα «{title}» στάλθηκε για έλεγχο', 'notif.body.specialist_card_approved': 'Η κάρτα «{title}» εγκρίθηκε και δημοσιεύτηκε', 'notif.body.specialist_card_rejected': 'Η κάρτα «{title}» δεν εγκρίθηκε. Διορθώστε την και στείλτε την ξανά.', // Offer status 'offer.status.pending': 'Εκκρεμεί', 'offer.status.accepted': 'Αποδεκτή', 'offer.status.declined': 'Απορρίφθηκε', 'offer.status.withdrawn': 'Αποσύρθηκε', 'offer.status.other_accepted': 'Επιλέχθηκε άλλος ειδικός', // Common 'common.loading': 'Φόρτωση...', 'common.error': 'Σφάλμα', 'common.save': 'Αποθήκευση', 'common.saving': 'Αποθήκευση...', 'common.cancel': 'Ακύρωση', 'common.add': 'Προσθήκη', 'common.close': 'Κλείσιμο', 'common.edit': 'Επεξεργασία', 'common.delete': 'Διαγραφή', 'common.from': 'από', 'common.currency': '€', 'common.greece': 'Ελλάδα', // Chat 'chat.connected': 'Συνδεδεμένος', 'chat.disconnected': 'Αποσυνδεδεμένος', 'chat.no_rooms': 'Δεν υπάρχουν συνομιλίες ακόμα', 'chat.task_fallback': 'Εργασία', 'chat.select': 'Επίλεξε συνομιλία', 'chat.no_messages': 'Δεν υπάρχουν μηνύματα', 'chat.placeholder': 'Γράψε μήνυμα... (Enter για αποστολή)', 'chat.conversation_fallback': 'Συνομιλία', 'chat.direct_chat': 'Απευθείας συνομιλία', 'chat.linked_task': 'Συνδεδεμένη εργασία', 'chat.write_btn': 'Μήνυμα', 'chat.just_now': 'μόλις τώρα', 'chat.min_ago': 'λ', 'chat.write_specialist': 'Γράψε στον ειδικό', 'chat.write_customer': 'Γράψε στον πελάτη', 'chat.notif_settings': 'Ρυθμίσεις ειδοποιήσεων', 'chat.notif_messages': 'Ειδοποιήσεις για νέα μηνύματα', 'chat.toast_title': 'Νέο μήνυμα', 'chat.toast_open': 'Άνοιγμα συνομιλίας', // Offer form 'offer.price': 'Τιμή', 'offer.price.placeholder': 'π.χ. 80', 'offer.customer_budget': 'Προϋπολογισμός πελάτη', 'offer.message': 'Μήνυμα', 'offer.optional': 'προαιρετικό', 'offer.message.placeholder': 'Παρουσίασε τον εαυτό σου, την εμπειρία σου και γιατί είσαι η καλύτερη επιλογή...', 'offer.submitting': 'Αποστολή...', // Profile 'profile.photo': 'Φωτογραφία προφίλ', 'profile.photo.change': 'Αλλαγή φωτογραφίας', 'profile.photo.hint': 'JPEG, PNG, WebP · έως 5MB', 'profile.basic_info': 'Βασικά στοιχεία', 'profile.phone': 'Τηλέφωνο', 'profile.phone.placeholder': '+30 6901234567', 'profile.bio': 'Σύντομη περιγραφή', 'profile.bio.placeholder': 'Πες μας λίγα λόγια για εσένα...', 'profile.language': 'Γλώσσα', 'profile.language.hint': 'Γλώσσα διεπαφής και email ειδοποιήσεων', 'profile.languages': 'Γλώσσες επικοινωνίας', 'profile.languages.hint': 'Επιλέξτε όλες τις γλώσσες που μιλάτε', 'profile.skills': 'Δεξιότητες', 'profile.skills.subtitle': 'Προσθέσε τις υπηρεσίες που προσφέρεις', 'profile.skills.placeholder': 'π.χ. Καθαρισμός, IT, Μαθήματα...', 'profile.role': 'Ρόλος λογαριασμού', 'profile.role.specialist': '🔧 Βοηθός', 'profile.role.admin': '👑 Admin', 'profile.role.customer': '👤 Χρήστης', 'profile.role.user': '👤 Χρήστης', 'profile.role.change': 'Για αλλαγή ρόλου επικοινωνήστε με την υποστήριξη.', 'profile.become_specialist': 'Πρόσφερε βοήθεια', 'profile.become_specialist.desc': 'Δημιούργησε το προφίλ βοηθού σου, πρόσφερε τις δεξιότητές σου και αρχίνισε να λαμβάνεις εργασίες.', 'become_specialist.hero.title': 'Πρόσφερε τις δεξιότητές σου', 'become_specialist.hero.subtitle': 'Δημιούργησε προφίλ βοηθού και λάβε αιτήματα από ανθρώπους που χρειάζονται βοήθεια', 'become_specialist.how.title': 'Πώς λειτουργεί', 'become_specialist.step1.title': 'Δημιούργησε κάρτα ειδικού', 'become_specialist.step1.desc': 'Δήλωσε κατηγορίες, δεξιότητες και περιοχές κάλυψης — το σύστημα θα βρει τις κατάλληλες εργασίες για σένα αυτόματα', 'become_specialist.step2.title': 'Βρες εργασίες', 'become_specialist.step2.desc': 'Ανακάλυψε εργασίες στις κατηγορίες σου στην ενότητα «Αναζήτηση εργασιών»', 'become_specialist.step3.title': 'Στείλε προσφορά & κέρδισε', 'become_specialist.step3.desc': 'Υποβάλε προσφορές με τιμή και χρόνο, επικοινωνήσε με πελάτες και ολοκλήρωσε εργασίες', 'become_specialist.benefits.title': 'Πλεονεκτήματα προφίλ ειδικού', 'become_specialist.benefit1': 'Αναζήτηση εργασιών ανά κατηγορία και τοποθεσία', 'become_specialist.benefit2': 'Δημόσιο προφίλ με αξιολογήσεις πελατών', 'become_specialist.benefit3': 'Πρόγραμμα διαθεσιμότητας ορατό στους πελάτες', 'become_specialist.benefit4': 'Προσθήκη σε αγαπημένα από πελάτες', 'become_specialist.cta': 'Περισσότερα', 'become_specialist.free_badge': 'Δωρεάν εγγραφή', 'profile.tab.notifications': 'Ειδοποιήσεις', 'profile.tab.reviews': 'Αξιολογήσεις', 'profile.tab.referral': 'Παραπομπές', 'profile.tab.auto_response': 'Αυτόματη απάντηση', 'profile.tab.site': 'Site', 'profile.site.title': 'Προσωπική σελίδα', 'profile.site.url_label': 'Προσωπικό site', 'profile.site.copy': 'Αντιγραφή', 'profile.site.copied': 'Αντιγράφηκε', 'profile.site.visible_title': 'Τι εμφανίζεται στη σελίδα σας', 'profile.site.visible.name': 'Όνομα και φωτογραφία', 'profile.site.visible.bio': 'Βιογραφικό', 'profile.site.visible.rating': 'Αξιολόγηση και κριτικές', 'profile.site.visible.portfolio': 'Χαρτοφυλάκιο / Κάρτες', 'profile.site.visible.contacts': 'Στοιχεία επικοινωνίας', 'profile.site.visible.full_last_name': 'Πλήρες επώνυμο', 'profile.site.visible.services': 'Κάρτες υπηρεσιών', 'profile.site.visible.reviews': 'Ενότητα κριτικών', 'profile.site.visible.status': 'Κατάσταση «Έτοιμος να βοηθήσω»', 'profile.site.theme': 'Θέμα εμφάνισης', 'profile.site.theme.dark': 'Σκοτεινό', 'profile.site.theme.light': 'Φωτεινό', 'profile.site.slug_taken': 'Αυτή η διεύθυνση είναι ήδη κατειλημμένη', 'profile.site.stats.title': 'Στατιστικά επισκεψιμότητας', 'profile.site.stats.days': 'τελευταίες 30 ημέρες', 'profile.site.stats.views': 'Προβολές', 'profile.site.stats.unique': 'Μοναδικοί επισκέπτες', 'profile.site.stats.messages': 'Μηνύματα', 'profile.site.stats.total_views': 'Συνολικές προβολές', 'profile.site.stats.total_unique': 'Μοναδικοί επισκέπτες', 'profile.site.stats.total_messages': 'Μηνύματα', 'profile.site.stats.empty': 'Δεν υπάρχουν δεδομένα ακόμη', 'profile.site.stats.loading': 'Φόρτωση στατιστικών...', 'profile.site.stats.no_slug': 'Ορίστε τη διεύθυνση του site για να δείτε στατιστικά', 'profile.site.edit_bio_hint': 'Το βιογραφικό και η φωτογραφία ρυθμίζονται στην καρτέλα «Βασικά».', 'profile.site.seo.title': 'SEO — μεταδεδομένα σελίδας', 'profile.site.seo.hint': 'Εμφανίζεται στα αποτελέσματα αναζήτησης. Αποθηκεύστε για αυτόματη μετάφραση σε όλες τις γλώσσες.', 'profile.site.seo.site_title': 'Τίτλος σελίδας', 'profile.site.seo.site_title_placeholder': 'Γιάννης Παπαδόπουλος — Υδραυλικός στην Αθήνα', 'profile.site.seo.site_desc': 'Μετα-περιγραφή', 'profile.site.seo.site_desc_placeholder': 'Σύντομη περιγραφή για τις μηχανές αναζήτησης...', 'status.can_help_now_hint': 'Η κάρτα σου εμφανίζεται ψηλότερα', 'status.need_help_hint': 'Οι ειδικοί μπορούν να σε βοηθήσουν', 'profile.referral.title': 'Πρόγραμμα παραπομπών', 'profile.referral.desc': 'Μοιράσου τον σύνδεσμο σου και κέρδισε ανταμοιβές για κάθε νέο χρήστη.', 'profile.referral.link_label': 'Ο σύνδεσμος παραπομπής σου', 'profile.referral.copy': 'Αντιγραφή', 'profile.referral.copied': 'Αντιγράφηκε!', 'profile.referral.invited_count': 'επιτυχείς παραπομπές', 'profile.referral.no_code': 'Ο κωδικός παραπομπής δεν είναι διαθέσιμος.', 'notifications.title': 'Ρυθμίσεις ειδοποιήσεων', 'notifications.email.new_tasks': 'Email για νέες εργασίες', 'notifications.email.new_tasks.desc': 'Λάβε email όταν δημοσιευτεί νέα εργασία στις κατηγορίες σου', 'notifications.messages.desc': 'Λαμβάνεις ειδοποίηση όταν έρθει νέο μήνυμα', 'notifications.saved': 'Ρυθμίσεις αποθηκεύτηκαν', 'notifications.plan_required': 'Συνδρομή απαιτείται για αυτή τη λειτουργία', 'profile.tab.info': 'Βασικά στοιχεία', 'profile.tab.finance': 'Οικονομικά', 'profile.tab.skills': 'Δεξιότητες', 'profile.tab.categories': 'Κατηγορίες', 'profile.tab.geography': 'Γεωγραφία', 'profile.specialist.categories': 'Κατηγορίες εργασιών', 'profile.specialist.categories.desc': 'Επίλεξε τις κατηγορίες στις οποίες εργάζεσαι', 'profile.specialist.geography': 'Περιοχές κάλυψης', 'profile.specialist.geography.desc': 'Επίλεξε τις πόλεις / περιοχές όπου δραστηριοποιείσαι', 'profile.saving': 'Αποθήκευση...', 'profile.upload.error': 'Σφάλμα κατά την αναφόρτωση', 'profile.saved': 'Αποθηκεύτηκε', 'profile.tab.cards': 'Προσφορές', 'profile.cards.count': 'Προσφορές', 'profile.cards.add': 'Νέα προσφορά', 'profile.cards.new_title': 'Τίτλος νέας προσφοράς', 'profile.cards.placeholder': 'π.χ. Υδραυλικά', 'profile.cards.create': 'Δημιουργία', 'profile.cards.cancel': 'Ακύρωση', 'profile.cards.empty': 'Δεν έχετε προσφορές', 'profile.cards.empty_hint': 'Δημιουργήστε την πρώτη σας κάρτα για να προβάλετε τις υπηρεσίες σας στους πελάτες.', 'profile.cards.create_first': 'Δημιουργήστε την πρώτη σας προσφορά', 'profile.cards.delete_confirm': 'Διαγραφή προσφοράς;', 'profile.listing_requirements.published_card': 'Δημοσιεύστε τουλάχιστον μία κάρτα', 'profile.listing_requirements.title': 'Το προφίλ σας δεν εμφανίζεται ακόμη στις προσφορές', 'profile.listing_requirements.hint': 'Για να γίνει ορατή η κάρτα, ολοκληρώστε αυτές τις προϋποθέσεις:', 'profile.listing_requirements.bio': 'Προσθέστε ένα σύντομο βιογραφικό στην ενότητα προφίλ', 'profile.listing_requirements.categories': 'Προσθέστε τουλάχιστον μία κατηγορία στην ενεργή κάρτα', 'profile.listing_requirements.locations': 'Προσθέστε τουλάχιστον μία τοποθεσία στην ενεργή κάρτα', 'profile.listing_requirements.card_inactive': 'Κάντε την κάρτα ενεργή', 'profile.listing_requirements.review_pending': 'Η κάρτα είναι υπό έλεγχο', 'profile.card.visibility_issue': 'Η κάρτα δεν εμφανίζεται στις προσφορές', 'profile.card.tab.main': 'Γενικά', 'profile.card.tab.skills': 'Δεξιότητες', 'profile.card.tab.categories': 'Κατηγορίες', 'profile.card.tab.geography': 'Γεωγραφία', 'profile.card.tab.portfolio': 'Γκαλερί', 'profile.card.tab.pricelist': 'Τιμοκατάλογος', 'profile.card.pricelist.empty': 'Δεν έχουν οριστεί ομάδες τιμοκαταλόγου.', 'profile.card.pricelist.add_group': 'Προσθήκη ομάδας', 'profile.card.pricelist.group_title': 'Τίτλος ομάδας', 'profile.card.pricelist.add_item': 'Προσθήκη στοιχείου', 'profile.card.pricelist.item_name': 'Υπηρεσία / εργασία', 'profile.card.pricelist.item_desc': 'Περιγραφή (προαιρετικό)', 'profile.card.pricelist.item_price': 'Τιμή', 'profile.card.pricelist.item_unit': 'Μονάδα (π.χ. /ώρα)', 'profile.card.pricelist.save_group': 'Αποθήκευση ομάδας', 'profile.card.pricelist.save_item': 'Αποθήκευση', 'profile.card.pricelist.delete_group': 'Διαγραφή ομάδας', 'profile.card.pricelist.delete_item': 'Διαγραφή', 'profile.card.active': 'Ενεργή', 'profile.card.review_pending': 'Σε αναμονή έγκρισης', 'profile.card.review_pending_hint': 'Η κάρτα σας ελέγχεται τώρα από τη διαχείριση.', 'profile.card.review_submitted': 'Η κάρτα στάλθηκε για έλεγχο', 'profile.card.review_approved': 'Η κάρτα εγκρίθηκε', 'profile.card.review_approved_hint': 'Η κάρτα σας εμφανίζεται τώρα στις προσφορές.', 'profile.card.review_rejected': 'Η κάρτα απορρίφθηκε', 'profile.card.review_rejected_hint': 'Η κάρτα σας δεν εγκρίθηκε. Διορθώστε την και στείλτε την ξανά.', 'profile.card.submit_review': 'Αποστολή για έλεγχο', 'profile.card.withdraw_review': 'Ανάκληση αίτησης', 'profile.card.unpublish': 'Αφαίρεση από δημοσίευση', 'profile.card.save': 'Αποθήκευση', 'profile.card.saved': 'Αποθηκεύτηκε', 'profile.card.delete': 'Διαγραφή', 'profile.card.skill.add': 'Προσθήκη δεξιότητας', 'profile.card.photo.add': 'Προσθήκη φωτογραφίας', 'profile.card.photo.uploading': 'Μεταφόρτωση...', 'profile.card.photo.empty': 'Δεν υπάρχουν φωτογραφίες', 'profile.card.item.title': 'Τίτλος', 'profile.card.item.desc': 'Περιγραφή', 'profile.card.item.save': 'Αποθήκευση', 'profile.card.item.cancel': 'Ακύρωση', 'profile.card.item.edit': 'Επεξεργασία', 'profile.card.description': 'Περιγραφή κάρτας', 'profile.card.desc_auto_translate': 'Κατά την αποθήκευση θα μεταφραστεί αυτόματα σε άλλες γλώσσες', 'profile.card.desc_translated': 'Υπάρχουν μεταφράσεις:', 'profile.upgrade.cards_limit': 'Όριο χαρτοφυλακίων εξαντλήθηκε', 'profile.upgrade.plan': 'Τρέχον πλάνο:', 'profile.upgrade.contact': 'Επικοινωνήστε με τον διαχειριστή για αλλαγή πλάνου', 'profile.upgrade.ok': 'Εντάξει', 'profile.plan.title': 'Πλάνο συνδρομής', 'profile.balance': 'Υπόλοιπο', 'profile.balance.topup': 'Αναπλήρωση υπολοίπου', 'profile.balance.topup.title': 'Αναπλήρωση υπολοίπου', 'profile.balance.topup.amount': 'Ποσό (σε EUR)', 'profile.balance.topup.hint': 'Επιλέξτε ποσό ή εισαγάγετε μανούαλα', 'profile.balance.topup.submit': 'Πληρωμή', 'profile.balance.topup.loading': 'Ρεδιρεκτάρισμα...', 'profile.balance.topup.error': 'Σφάλμα μετάβασης στην πληρωμή. Προσπαθήστε ξανά.', 'payment.success.title': 'Πληρωμή επιτυχής!', 'payment.success.desc': 'Το υπόλοιπό σας ενημερώθηκε.', 'payment.cancelled.title': 'Ακύρωση πληρωμής', 'payment.cancelled.desc': 'Η πληρωμή ακυρώθηκε. Κανένα χρήμα δεν χρεώθηκε.', 'payment.pending.title': 'Σε εξέλιξη...', 'payment.pending.desc': 'Επεξεργαζόμαστε την πληρωμή σας.', 'payment.back_to_profile': 'Επιστροφή στο προφίλ', 'profile.plan.basic': 'Βασικό (δωρεάν)', 'profile.plan.contact_upgrade': 'Επικοινωνήστε με τον διαχειριστή για αναβάθμιση', 'profile.plan.cards_up_to': 'Χαρτοφυλάκια: έως', 'profile.plan.cards_unlimited': 'Χαρτοφυλάκια: απεριόριστα', 'profile.plan.tasks_up_to': 'Εργασίες: έως', 'profile.plan.offers_up_to': 'Προσφορές: έως', 'profile.plan.valid_until': 'Ισχύει έως', 'profile.plan.no_expiry': 'Δεν λήγει', // Create task 'create.error': 'Σφάλμα κατά τη δημοσίευση', // Tasks list extras 'tasks.category.general': 'Γενικά', 'tasks.budget.range': 'Εύρος:', 'tasks.budget.from': 'από', 'tasks.budget.to': 'έως', 'tasks.filter.reset': 'Εκκαθάριση φίλτρων', 'tasks.load_more': 'Φόρτωση ακόμα', 'tasks.showing': 'Αποτελέσματα:', 'tasks.field.budget': 'Προϋπολογισμός, €', // Admin 'admin.title': 'Πίνακας Διαχείρισης', 'admin.tab.stats': 'Στατιστικά', 'admin.tab.users': 'Χρήστες', 'admin.tab.tasks': 'Εργασίες', 'admin.tab.reports': 'Αναφορές', 'admin.tab.moderation': 'Μονάδα ελέγχου', 'admin.stats.users': 'Χρήστες', 'admin.stats.tasks': 'Εργασίες', 'admin.stats.offers': 'Προσφορές', 'admin.stats.reviews': 'Αξιολογήσεις', 'admin.tasks.by_status': 'Εργασίες ανά κατάσταση', 'admin.col.user': 'Χρήστης', 'admin.col.email': 'Email', 'admin.col.role': 'Ρόλος', 'admin.col.registered': 'Εγγραφή', 'admin.col.status': 'Κατάσταση', 'admin.col.title': 'Τίτλος', 'admin.col.budget': 'Προϋπολογισμός', 'admin.col.created': 'Δημιουργία', 'admin.users.active': 'Ενεργός', 'admin.users.inactive': 'Ανενεργός', 'admin.users.deactivate': 'Απενεργοποίηση', 'admin.users.activate': 'Ενεργοποίηση', 'admin.tasks.cancel': 'Ακύρωση', 'admin.reports.none': 'Δεν υπάρχουν αναφορές', 'admin.moderation.none': 'Δεν βρέθηκαν προσφορές για έλεγχο', 'admin.moderation.pending': 'Σε αναμονή', 'admin.moderation.active': 'Ενεργό', 'admin.moderation.approve': 'Έγκριση', 'admin.moderation.block': 'Μπλοκάρισμα', 'admin.moderation.pending_title': 'Προσφορές προς έγκριση', 'admin.moderation.active_title': 'Ενεργές προσφορές', 'admin.moderation.pending_count': 'Σε αναμονή', 'admin.moderation.active_count': 'Ενεργές', 'admin.moderation.pending_hint': 'Νέες προσφορές που περιμένουν έγκριση', 'admin.moderation.active_hint': 'Ενεργές προσφορές που μπορείτε να μπλοκάρετε', 'admin.moderation.pending_empty': 'Δεν υπάρχουν νέες προσφορές προς έγκριση', 'admin.moderation.active_empty': 'Δεν βρέθηκαν ενεργές προσφορές', 'admin.reports.reviewed': 'Αναθεωρήθηκε', 'admin.reports.dismiss': 'Απόρριψη', 'admin.pagination.total': 'Σύνολο', 'admin.users.role.change': 'Αλλαγή ρόλου', 'admin.users.search.placeholder': 'Αναζήτηση ονόματος ή email...', 'admin.tasks.delete': 'Διαγραφή', 'admin.tasks.delete.confirm': 'Διαγραφή αυτής της εργασίας μόνιμα;', 'admin.tasks.search.placeholder': 'Αναζήτηση τίτλου...', 'admin.col.customer': 'Πελάτης', 'admin.col.reporter': 'Καταγγέλλων', 'admin.col.target': 'Στόχος', 'admin.filter.all_roles': 'Όλοι οι ρόλοι', 'admin.filter.all_statuses': 'Όλες οι καταστάσεις', 'admin.reports.target.task': 'Εργασία', 'admin.reports.target.user': 'Χρήστης', 'admin.tab.categories': 'Κατηγορίες', 'admin.tab.locations': 'Πόλεις & Περιοχές', 'admin.tab.logs': 'Αρχεία', 'admin.tab.plans': 'Πακέτα', 'admin.tab.settings': 'Ρυθμίσεις', 'admin.logs.subtab.ai': 'AI Logs', 'admin.logs.subtab.activity': 'Δραστηριότητα', 'admin.logs.subtab.mail': 'Mail', 'admin.logs.subtab.notifications': 'Ειδοποιήσεις', 'admin.notif_logs.type': 'Τύπος', 'admin.notif_logs.title': 'Τίτλος', 'admin.notif_logs.read': 'Διαβασμένο', 'admin.notif_logs.empty': 'Δεν υπάρχουν αρχεία ειδοποιήσεων', 'admin.stats.notif_chart_title': 'Ειδοποιήσεις ανά ημέρα', 'admin.stats.notif_label': 'Ειδοποιήσεις', 'admin.stats.mail_chart_title': 'Emails ανά ημέρα', 'admin.stats.mail_label': 'Emails', 'admin.filter.all': 'Όλα', 'admin.stats.specialists': 'Βοηθοί', 'admin.col.plan': 'Πακέτο', 'admin.back_home': 'Αρχική', 'admin.plans.title': 'Πακέτα συνδρομής', 'admin.plans.add': '+ Νέο πακέτο', 'admin.plans.empty': 'Δεν υπάρχουν πακέτα', 'admin.plans.form.new': 'Νέο πακέτο', 'admin.plans.form.edit': 'Επεξεργασία πακέτου', 'admin.plans.form.name': 'Όνομα', 'admin.plans.form.price': 'Τιμή (EUR)', 'admin.plans.form.old_price': 'Παλιά τιμή (EUR, προαιρετικό)', 'admin.plans.form.max_offers': 'Μέγ. προσφορές (κενό = χωρίς όριο)', 'admin.plans.form.max_cards': 'Μέγ. προσφορές (κενό = χωρίς όριο)', 'admin.plans.form.duration_days': 'Διάρκεια (ημέρες, κενό = χωρίς λήξη)', 'admin.plans.form.description': 'Περιγραφή', 'admin.plans.form.features': 'Δυνατότητες (μία ανά γραμμή)', 'admin.plans.form.notify': 'Ειδοποιήσεις νέων εργασιών', 'admin.plans.form.default': 'Προεπιλογή', 'admin.plans.form.active': 'Ενεργό', 'admin.plans.form.order': 'Σειρά', 'admin.plans.form.role': 'Ρόλος', 'admin.plans.form.tier': 'Επίπεδο', 'admin.plans.form.role.customer': 'Πελάτης', 'admin.plans.form.role.specialist': 'Βοηθός', 'admin.plans.form.tier.free': 'Δωρεάν', 'admin.plans.form.tier.pro': 'Pro', 'admin.plans.form.tier.ultimate': 'Ultimate', 'admin.plans.form.section.limits': 'Όρια (κενό = χωρίς όριο)', 'admin.plans.form.max_messages_day': 'Μέγ. μηνύματα/ημέρα', 'admin.plans.form.max_orders_day': 'Μέγ. παραγγελίες/ημέρα', 'admin.plans.form.max_skills': 'Μέγ. δεξιότητες', 'admin.plans.form.max_profiles': 'Μέγ. προφίλ', 'admin.plans.form.max_portfolio': 'Μέγ. στοιχεία χαρτοφυλακίου', 'admin.plans.form.section.boost': 'Πολλαπλασιαστές & Ενίσχυση', 'admin.plans.form.search_boost': 'Ενίσχυση αναζήτησης', 'admin.plans.form.offers_multiplier': 'Πολλαπλασιαστής προσφορών', 'admin.plans.form.section.contact': 'Δικαιώματα επικοινωνίας', 'admin.plans.form.can_contact_free': 'Επικοινωνία με δωρεάν χρήστες', 'admin.plans.form.can_contact_pro': 'Επικοινωνία με Pro χρήστες', 'admin.plans.form.can_contact_all': 'Επικοινωνία με όλους', 'admin.plans.form.can_show_contact': 'Εμφάνιση στοιχείων επικοινωνίας', 'admin.plans.form.can_view_phone': 'Προβολή τηλεφώνου', 'admin.plans.form.section.features': 'Λειτουργίες', 'admin.plans.form.upload_video': 'Μεταφόρτωση βίντεο', 'admin.plans.form.favorites': 'Αγαπημένα', 'admin.plans.form.google_calendar': 'Google Calendar', 'admin.plans.form.verified_badge': 'Σήμα επαλήθευσης', 'admin.plans.form.highlighted_reviews': 'Προβεβλημένες κριτικές', 'admin.plans.form.personal_site': 'Προσωπική σελίδα', 'admin.plans.form.can_help_now': 'Κατάσταση «Μπορώ να βοηθήσω»', 'admin.plans.form.need_help': 'Κατάσταση «Χρειάζομαι βοήθεια»', 'admin.plans.form.auto_response': 'Αυτόματη απάντηση', 'admin.plans.form.auto_match': 'Αυτόματη αντιστοίχιση', 'admin.plans.form.price_list': 'Τιμοκατάλογος', 'admin.plans.form.instant_dispatch_free': 'Άμεση αποστολή (δωρεάν)', 'admin.plans.form.instant_dispatch_pro': 'Άμεση αποστολή (Pro)', 'admin.plans.badge.default': 'Προεπιλογή', 'admin.plans.badge.inactive': 'Ανενεργό', 'admin.plans.make_default': 'Ορισμός ως προεπιλογή', 'admin.plans.tasks': 'Εργασίες', 'admin.plans.offers': 'Προσφορές', 'admin.plans.cards': 'Προσφορές', 'admin.plans.notify_tasks': 'Ειδοποιήσεις εργασιών', 'admin.plans.delete.confirm': 'Διαγραφή πακέτου', 'admin.activity.title': 'Αρχείο δραστηριότητας', 'admin.activity.event': 'Γεγονός', 'admin.activity.all_events': 'Όλα τα γεγονότα', 'admin.activity.from': 'Από', 'admin.activity.to': 'Έως', 'admin.activity.reset': 'Επαναφορά', 'admin.activity.total': 'Σύνολο', 'admin.activity.empty': 'Δεν υπάρχουν εγγραφές', 'admin.mail.event': 'Συμβάν email', 'admin.mail.all_events': 'Όλα τα email συμβάντα', 'admin.mail.from': 'Από', 'admin.mail.to': 'Έως', 'admin.mail.reset': 'Επαναφορά', 'admin.mail.total': 'Σύνολο', 'admin.mail.empty': 'Δεν υπάρχουν email logs', 'admin.mail.recipient': 'Παραλήπτης', 'admin.mail.provider': 'Πάροχος', 'admin.mail.details': 'Λεπτομέρειες', 'admin.mail.status': 'Κατάσταση', 'admin.mail.success': 'Επιτυχία', 'admin.mail.failed': 'Σφάλμα', 'admin.event.email_sent': 'Email sent', 'admin.event.email_failed': 'Email failed', 'admin.event.email_dev': 'Email DEV fallback', 'admin.event.admin_email_test_sent': 'Admin test email sent', 'admin.event.admin_email_test_failed': 'Admin test email failed', 'admin.logs.empty': 'Δεν υπάρχουν εγγραφές', 'admin.logs.date': 'Ημερομηνία', 'admin.logs.provider': 'Πάροχος', 'admin.logs.model': 'Μοντέλο', 'admin.logs.action': 'Ενέργεια', 'admin.logs.langs': 'Γλώσσες', 'admin.logs.in': 'Είσοδος', 'admin.logs.out': 'Έξοδος', 'admin.logs.total': 'Σύνολο', 'admin.logs.ms': 'ms', 'admin.logs.status': 'Κατάσταση', 'admin.stats.activity_30d': 'Δραστηριότητα 30 ημερών', 'admin.stats.tasks_label': 'Εργασίες', 'admin.stats.users_label': 'Χρήστες', 'admin.stats.specialists_label': 'Βοηθοί', 'admin.stats.tokens_title': 'Χρήση tokens (ανά μήνα)', 'admin.stats.tokens_out': 'Εξερχόμενα', 'admin.stats.tokens_in': 'Εισερχόμενα', 'admin.stats.tokens_out_label': 'Εξερχόμενα tokens', 'admin.stats.tokens_in_label': 'Εισερχόμενα tokens', 'admin.stats.cost_label': 'Κόστος (USD)', 'admin.stats.tasks_by_status': 'Εργασίες ανά κατάσταση', 'admin.task_status.open': 'Ανοιχτές', 'admin.task_status.in_progress': 'Σε εξέλιξη', 'admin.task_status.completed': 'Ολοκληρωμένες', 'admin.task_status.cancelled': 'Ακυρωμένες', 'admin.task_status.draft': 'Προσχέδια', 'admin.settings.tab.general': 'Γενικά', 'admin.settings.tab.smtp': 'E-Mail', 'admin.settings.tab.notifications': 'Ειδοποιήσεις', 'admin.settings.tab.payment': 'Πληρωμή', 'admin.settings.tab.referral': 'Παραπομπές', 'admin.settings.tab.seo': 'SEO', 'admin.settings.tab.socials': 'Κοινωνικά δίκτυα', 'admin.settings.tab.telegram': 'Telegram Bot', 'admin.settings.telegram.title': 'Ρυθμίσεις Telegram Bot', 'admin.settings.telegram.help': 'Δημιουργήστε bot μέσω @BotFather. Για chat ID χρησιμοποιήστε @userinfobot.', 'admin.settings.telegram.bot_token': 'Bot Token', 'admin.settings.telegram.admin_chat_id': 'Admin Chat ID', 'admin.settings.telegram.admin_chat_hint': 'Γράψτε /start στο bot σας, μετά στείλτε μήνυμα μέσω @userinfobot για να λάβετε το chat ID', 'admin.settings.telegram.channel_id': 'Channel ID', 'admin.settings.telegram.channels_title': 'Κανάλια ανά γλώσσα', 'admin.settings.telegram.channel_hint': 'Αναγνωριστικό δημόσιου καναλιού ή @όνομα καναλιού', 'admin.settings.telegram.notify_registrations': 'Ειδοποίηση νέων εγγραφών', 'admin.settings.telegram.notify_registrations_hint': 'Αποστολή μηνύματος στον admin κατά την εγγραφή νέου χρήστη', 'admin.settings.telegram.post_new_tasks': 'Δημοσίευση νέων εργασιών', 'admin.settings.telegram.post_new_tasks_hint': 'Αυτόματη δημοσίευση νέων εργασιών στο κανάλι', 'admin.settings.telegram.test': 'Δοκιμή', 'admin.settings.telegram.verify': 'Επαλήθευση', 'admin.settings.telegram.test_ok': 'Η σύνδεση λειτουργεί', 'admin.settings.telegram.test_fail': 'Σφάλμα σύνδεσης', 'admin.settings.socials.title': 'Σύνδεσμοι κοινωνικών δικτύων', 'admin.settings.socials.hint': 'Συμπληρωμένες εγγραφές εμφανίζονται στο υπόγειο', 'admin.settings.seo.maintenance_label': 'Λειτουργία συντήρησης', 'admin.settings.seo.maintenance_hint': 'Εμφάνιση σελίδας συντήρησης σε όλους τους επισκέπτες', 'admin.settings.seo.indexing_label': 'Ευρετηρίαση από μηχανές αναζήτησης', 'admin.settings.seo.indexing_hint': 'Επιτρέπει στις μηχανές αναζήτησης να ευρετηριάσουν τον ιστότοπο', 'admin.settings.seo.head_scripts_label': 'Scripts στο (JS)', 'admin.settings.seo.head_scripts_hint': 'Εκτελείται σε κάθε σελίδα (Google Tag Manager, analytics κ.λπ.)', 'admin.settings.seo.site_title_label': 'Τίτλος ιστότοπου', 'admin.settings.seo.site_description_label': 'Περιγραφή ιστότοπου (meta description)', 'admin.settings.referral.title': 'Πρόγραμμα παραπομπών', 'admin.settings.referral.hint': 'Επιβράβευσε χρήστες που φέρνουν νέους εγγεγραμμένους.', 'admin.settings.referral.enabled_label': 'Ενεργό', 'admin.settings.referral.enabled_hint': 'Ενεργοποίηση / απενεργοποίηση εφαρμογής ανταμοιβών', 'admin.settings.referral.customer_section': 'Για πελάτες', 'admin.settings.referral.specialist_section': 'Για βοηθούς', 'admin.settings.referral.plan_label': 'Πλάνο ανταμοιβής', 'admin.settings.referral.no_plan': '— χωρίς πλάνο —', 'admin.settings.referral.plan_hint': 'Αυτό το πλάνο θα ανατεθεί στον χρήστη που έφερε νέους. Εάν το τρέχον πλάνο του είναι υψηλότερο, θα προστεθούν μόνο οι μέρες.', 'admin.settings.referral.days_label': 'Ημέρες ανταμοιβής', 'admin.settings.referral.days_hint': 'Αριθμός ημερών που θα προστεθούν στη λήξη του πλάνου.', 'admin.settings.general.title': 'Γενικές ρυθμίσεις', 'admin.settings.general.site_name': 'Όνομα ιστότοπου', 'admin.settings.general.site_url': 'URL ιστότοπου', 'admin.settings.general.contact_email': 'Email επικοινωνίας', 'admin.settings.general.support_phone': 'Τηλέφωνο υποστήριξης', 'admin.settings.smtp.title': 'Ρυθμίσεις SMTP', 'admin.settings.smtp.hint': 'Χρησιμοποιείται για αποστολή ειδοποιήσεων email.', 'admin.settings.smtp.host': 'SMTP Host', 'admin.settings.smtp.port': 'Θύρα', 'admin.settings.smtp.encryption': 'Κρυπτογράφηση', 'admin.settings.smtp.enc.none': 'Χωρίς', 'admin.settings.smtp.enc.tls': 'STARTTLS (θύρα 587)', 'admin.settings.smtp.enc.ssl': 'SSL/TLS (θύρα 465)', 'admin.settings.smtp.username': 'Όνομα χρήστη', 'admin.settings.smtp.password': 'Κωδικός / App Password', 'admin.settings.smtp.from_name': 'Όνομα αποστολέα', 'admin.settings.smtp.from_email': 'Email αποστολέα', 'admin.settings.smtp.test': 'Αποστολή δοκιμαστικού email', 'admin.settings.smtp.sending': 'Αποστολή...', 'admin.settings.payment.hint': 'Τα στοιχεία για ePay Piraeus Bank.', 'admin.settings.env.test': 'Δοκιμαστικό (sandbox)', 'admin.settings.env.prod': 'Παραγωγή', 'admin.settings.env.label': 'Περιβάλλον', 'admin.settings.merchant_id': 'Merchant ID', 'admin.settings.api_user': 'API User', 'admin.settings.api_password': 'API Password', 'admin.settings.confirm_url': 'Confirmation URL (webhook)', 'admin.settings.cancel_url': 'Cancel URL', 'admin.settings.active': 'Ενεργό', 'admin.settings.saving': 'Αποθήκευση...', 'admin.settings.saved': '✓ Αποθηκεύτηκε', 'admin.notif.vars_hint': 'Διαθέσιμες μεταβλητές στα πρότυπα', 'admin.notif.tmpl.not_set': 'Πρότυπο δεν έχει οριστεί', 'admin.notif.tmpl.subject_label': 'Θέμα email', 'admin.notif.tmpl.body_label': 'Κείμενο email (HTML)', 'admin.notif.tmpl.save': 'Αποθήκευση', 'admin.notif.tmpl.close': 'Κλείσιμο', 'admin.notif.tmpl.translate': 'Αυτόματη μετάφραση', 'admin.notif.tmpl.translating': 'Μετάφραση...', 'admin.notif.tmpl.saving': 'Αποθήκευση...', 'admin.notif.email_verification': 'Επαλήθευση email', 'admin.notif.registration_success': 'Επιτυχής εγγραφή', 'admin.notif.password_reset': 'Επαναφορά κωδικού', 'admin.notif.new_offer': 'Νέα προσφορά', 'admin.notif.new_task': 'Νέα εργασία', 'admin.notif.offer_accepted': 'Προσφορά αποδεκτή', 'admin.notif.new_message': 'Νέο μήνυμα', 'admin.notif.offer_declined': 'Απόρριψη προσφοράς', 'admin.notif.offer_other_accepted': 'Επιλέχθηκε άλλος ειδικός', 'admin.notif.task_updated': 'Ενημέρωση εργασίας', 'admin.notif.deadline_reminder': 'Υπενθύμιση προθεσμίας', 'admin.notif.task_archived': 'Αυτόματη απόσυρση εργασίας', 'admin.notif.referral_reward': 'Ανταμοιβή παραπομπής', // Plan lifecycle email templates 'admin.email_template.plan_activated': 'Τιμολόγιο — ενεργοποίηση πλάνου', 'admin.email_template.plan_upgraded': 'Τιμολόγιο — αναβάθμιση πλάνου', 'admin.email_template.plan_downgrade_scheduled': 'Τιμολόγιο — προγραμματισμένη υποβάθμιση', 'admin.email_template.plan_downgrade_applied': 'Τιμολόγιο — εφαρμογή υποβάθμισης', 'admin.email_template.plan_renewal_reminder': 'Τιμολόγιο — υπενθύμιση ανανέωσης', 'admin.email_template.plan_insufficient_funds': 'Τιμολόγιο — ανεπαρκές υπόλοιπο', // Pricing confirm modal 'pricing.confirm.title': 'Επιβεβαίωση επιλογής πλάνου', 'pricing.confirm.plan': 'Πλάνο', 'pricing.confirm.prorated': 'Αναλογική έκπτωση', 'pricing.confirm.effective_price': 'Προς πληρωμή', 'pricing.confirm.your_balance': 'Το υπόλοιπό σας', 'pricing.confirm.downgrade_info': 'Η μετάβαση στο νέο πλάνο θα γίνει αυτόματα μετά τη λήξη της τρέχουσας περιόδου.', 'pricing.confirm.insufficient': 'Ανεπαρκές υπόλοιπο.', 'pricing.confirm.top_up': 'Ανανέωση', 'pricing.confirm.schedule_downgrade': 'Προγραμματισμός μετάβασης', 'pricing.confirm.pay': 'Πληρωμή', 'admin.user_edit.title': 'Επεξεργασία χρήστη', 'admin.user_edit.email': 'Email', 'admin.user_edit.email_verified': 'Διευθυνση email επαληθεύτηκε', 'admin.user_edit.email_not_verified': 'Email δεν έχει επαληθευτεί', 'admin.user_edit.verify_email_btn': 'Χειροκίνητη επαλήθευση', 'admin.user_edit.verify_email_done': 'Email επαληθεύτηκε!', 'admin.user_edit.id': 'ID', 'admin.user_edit.registered': 'Εγγραφή', 'admin.user_edit.last_seen': 'Τελευταία σύνδεση', 'admin.user_edit.lang': 'Γλώσσα', 'admin.user_edit.first_name': 'Όνομα', 'admin.user_edit.last_name': 'Επώνυμο', 'admin.user_edit.phone': 'Τηλέφωνο', 'admin.user_edit.bio': 'Βιογραφικό', 'admin.user_edit.role': 'Ρόλος', 'admin.user_edit.plan': 'Πακέτο', 'admin.user_edit.no_plan': '— Χωρίς πακέτο —', 'admin.user_edit.active': 'Ενεργός λογαριασμός', 'admin.user_edit.published': 'Δημοσιευμένη', 'admin.user_edit.balance': 'Υπόλοιπο (EUR)', 'admin.user_edit.skills': 'Δεξιότητες', 'admin.user_edit.tab.profile': 'Προφίλ', 'admin.user_edit.tab.account': 'Λογαριασμός', 'admin.user_edit.tab.balance': 'Υπόλοιπο', 'admin.user_edit.tab.settings': 'Ρυθμίσεις', 'admin.user_edit.tab.specialist': 'Προσφορές', 'admin.user_edit.tab.site': 'Ιστοσελίδα', 'admin.user_edit.plan_expires': 'Λήξη πλάνου', 'admin.user_edit.interface_lang': 'Γλώσσα διεπαφής', 'admin.user_edit.comm_languages': 'Γλώσσες επικοινωνίας', 'admin.user_edit.personal_site_slug': 'Προσωπική σελίδα', 'admin.user_edit.show_contact_info': 'Εμφάνιση στοιχείων επικοινωνίας', 'admin.user_edit.show_contact_info.hint': 'Ορατό στους πελάτες', 'admin.user_edit.notify_new_tasks': 'Ειδοποίηση για νέες εργασίες', 'admin.user_edit.notify_new_tasks.hint': 'Push και email ειδοποιήσεις', 'admin.user_edit.notif_messages': 'Ειδοποιήσεις μηνυμάτων', 'admin.user_edit.notif_messages.hint': 'Νέα μηνύματα στη συνομιλία', 'admin.user_edit.site_settings': 'Ρυθμίσεις προσωπικής σελίδας', 'admin.user_edit.categories': 'Κατηγορίες υπηρεσιών', 'admin.user_edit.locations': 'Περιοχές εξυπηρέτησης', 'admin.user_edit.skill_placeholder': 'Νέα δεξιότητα...', 'admin.user_edit.add_category': '— Επιλέξτε κατηγορία —', 'admin.user_edit.add_location': '— Επιλέξτε περιοχή —', 'admin.user_edit.specialist_cards': 'Προσφορές ειδικού', 'admin.user_edit.no_cards': 'Δεν βρέθηκαν προσφορές', 'admin.user_edit.card_title': 'Τίτλος προσφοράς', 'admin.user_edit.card_description': 'Περιγραφή', 'admin.balance.topup.btn': 'Αναπλήρωση', 'admin.balance.withdraw.btn': 'Αφαίρεση', 'admin.balance.modal_hint': 'Οι αλλαγές ισχύουν άμεσα και καταγράφονται στο ιστορικό', 'admin.balance.topup.title': 'Αναπλήρωση υπολοίπου', 'admin.balance.topup.amount': 'Ποσό', 'admin.balance.topup.description': 'Σχόλιο', 'admin.balance.topup.description.placeholder': 'Για παράδειγμα: bonus ή χειροκίνητη αναπλήρωση', 'admin.balance.topup.submit': 'Αναπλήρωση υπολοίπου', 'admin.balance.withdraw.title': 'Αφαίρεση υπολοίπου', 'admin.balance.withdraw.amount': 'Ποσό', 'admin.balance.withdraw.description': 'Σχόλιο', 'admin.balance.withdraw.description.placeholder': 'Για παράδειγμα: επιστροφή ή χειροκίνητη χρέωση', 'admin.balance.withdraw.submit': 'Αφαίρεση από το υπόλοιπο', 'admin.user_edit.role.customer': 'Πελάτης', 'admin.user_edit.role.user': 'Χρήστης', 'admin.user_edit.role.specialist': 'Βοηθός', 'admin.user_edit.role.admin': 'Διαχειριστής', 'common.refresh': 'Ανανέωση', 'common.back_home': 'Αρχική', 'admin.loc.hint': 'Διαχείριση πόλεων και συνοικιών', 'admin.loc.add_city': 'Νέα πόλη', 'admin.loc.add_district': 'Προσθήκη συνοικίας', 'admin.loc.new': 'Νέα τοποθεσία', 'admin.loc.edit': 'Επεξεργασία τοποθεσίας', 'admin.loc.district': 'συνοικία', 'admin.loc.empty': 'Δεν υπάρχουν τοποθεσίες', 'admin.loc.delete.confirm': 'Διαγραφή τοποθεσίας; Όλες οι συνοικίες θα διαγραφούν επίσης.', 'admin.cat.add_root': 'Νέα κατηγορία', 'admin.cat.add_sub': 'Υποκατηγορία', 'admin.cat.edit': 'Επεξεργασία', 'admin.cat.delete': 'Διαγραφή', 'admin.cat.delete.confirm': 'Διαγραφή κατηγορίας; Όλες οι υποκατηγορίες θα διαγραφούν επίσης.', 'admin.cat.slug': 'Slug', 'admin.cat.icon': 'Εικονίδιο', 'admin.cat.name_el': 'Ελληνικά', 'admin.cat.name_en': 'Αγγλικά', 'admin.cat.name_ru': 'Ρωσικά', 'admin.cat.name_uk': 'Ουκρανικά', 'admin.cat.active': 'Ενεργή', 'admin.cat.parent': 'Γονική κατηγορία', 'admin.cat.no_parent': 'Κορυφαίο επίπεδο', 'admin.cat.save': 'Αποθήκευση', 'admin.cat.cancel': 'Ακύρωση', 'admin.cat.empty': 'Δεν υπάρχουν κατηγορίες', 'admin.cat.hint': 'Διαχείριση κατηγοριών με πολυεπίπεδη ιεραρχία', 'admin.cat.new': 'Νέα κατηγορία', 'admin.cat.subcategory': 'υποκατηγορία', 'admin.cat.add_child': 'Προσθήκη υποκατηγορίας', 'admin.cat.inactive': 'Ανενεργή', 'admin.event.user_login': 'Σύνδεση', 'admin.event.user_register': 'Εγγραφή', 'admin.event.admin_user_deactivate': 'Αποκλεισμός χρήστη', 'admin.event.admin_user_activate': 'Ενεργοποίηση χρήστη', 'admin.event.admin_user_role_changed': 'Αλλαγή ρόλου', 'admin.event.admin_task_cancelled': 'Ακύρωση εργασίας', 'admin.event.admin_task_deleted': 'Διαγραφή εργασίας', 'admin.event.admin_report_reviewed': 'Αναφορά εξετάστηκε', 'admin.event.admin_report_dismissed': 'Αναφορά απορρίφθηκε', 'admin.event.task_created': 'Δημιουργία εργασίας', 'user.online': 'Σε σύνδεση', 'user.seen_minutes': 'ήταν εδώ πριν {n} λεπτά', 'user.seen_hours': 'ήταν εδώ πριν {n} ώρες', 'user.seen_yesterday': 'ήταν εδώ χθες', 'user.seen_days': 'ήταν εδώ πριν {n} μέρες', // Specialists 'specialists.title': 'Προσφορές', 'specialists.search': 'Αναζήτηση ειδικού...', 'specialists.search.btn': 'Αναζήτηση', 'specialists.empty': 'Δεν βρέθηκαν ειδικοί', 'specialists.no_bio': 'Χωρίς περιγραφή', 'specialists.view': 'Προβολή προφίλ', 'specialists.reviews': 'αξιολογήσεις', 'specialist.favorite': 'Προσθήκη στα αγαπημένα', 'specialist.unfavorite': 'Αφαίρεση από αγαπημένα', 'specialist.site_link': 'Προσωπικό site', 'favorites.specialists.title': 'Αγαπημένοι ειδικοί', 'favorites.specialists.empty': 'Δεν έχετε αγαπημένους ειδικούς', 'nav.favorites': 'Αγαπημένα', 'nav.schedule': 'Πρόγραμμα', 'nav.find_tasks': 'Αναζήτηση εργασιών', 'schedule.title': 'Το πρόγραμμά μου', 'schedule.subtitle': 'Σημειώστε τις ημέρες που είστε ελεύθεροι ή απασχολημένοι — οι πελάτες θα δουν τη διαθεσιμότητά σας', 'schedule.available': 'Ελεύθερος', 'schedule.busy': 'Απασχολημένος', 'schedule.unset': 'Μη ορισμένο', 'schedule.click_hint': '← κλικ για εναλλαγή κατάστασης', 'schedule.range_mode': 'Επιλογή εύρους', 'schedule.range_from': 'Από {date} — επιλέξτε τελική ημερομηνία', 'schedule.click_to_set': 'Κλικ για ορισμό', 'schedule.free': 'ελεύθερα', 'schedule.busy_count': 'απασχολημένα', 'schedule.free_days': 'ελεύθερες ημέρες', 'schedule.googleCalendar': 'Google Calendar', 'schedule.connectGoogle': 'Σύνδεση με Google Calendar', 'schedule.disconnectGoogle': 'Αποσύνδεση', 'schedule.connectedAs': 'Συνδεδεμένο ως', 'schedule.importFromGoogle': 'Συγχρονισμός από Google', 'schedule.gcalConnected': '✓ Google Calendar συνδέθηκε', 'schedule.gcalError': 'Σφάλμα σύνδεσης Google Calendar', 'schedule.gcalImportDone': 'Εισήχθησαν {n} ημερ. από Google Calendar', 'schedule.gcalAutoSyncNote': 'Οι αλλαγές αποστέλλονται αυτόματα στο Google Calendar', 'schedule.gcalConnectDesc': 'Συνδέστε το Google Calendar για αυτόματο συγχρονισμό', 'schedule.gcalDisconnectConfirm': 'Αποσύνδεση Google Calendar;', 'find_tasks.title': 'Αναζήτηση εργασιών', 'find_tasks.for_me': 'Για μένα', 'find_tasks.all': 'Όλες οι εργασίες', 'find_tasks.by_category': 'Ανά κατηγορία', 'find_tasks.list': 'Λίστα', 'find_tasks.already_offered': 'Προσφορά υποβλήθηκε', 'find_tasks.offer_now': 'Υποβολή προσφοράς', 'find_tasks.empty_for_me': 'Δεν βρέθηκαν εργασίες στις κατηγορίες σας', 'find_tasks.banner_hint': 'Βρείτε εργασίες που ταιριάζουν με το χαρτοφυλάκιό σας', 'find_tasks.no_cards': 'Δημιουργήστε ένα χαρτοφυλάκιο ειδικού για να δείτε εργασίες για εσάς', 'find_tasks.add_card': 'Δημιουργία χαρτοφυλακίου', 'find_tasks.search': 'Αναζήτηση εργασιών...', 'find_tasks.tasks_count': 'εργασίες', // Footer 'footer.tagline': 'Η πλατφόρμα εργασιών για την Ελλάδα', 'footer.rights': 'Όλα τα δικαιώματα διατηρούνται.', 'nav.privacy': 'Πολιτική απορρήτου', 'nav.delete_account': 'Διαγραφή λογαριασμού', 'delete_account.title': 'Αίτηση διαγραφής λογαριασμού', 'delete_account.subtitle': 'Αφού επαληθεύσουμε την αίτησή σας, θα διαγράψουμε μόνιμα τον λογαριασμό και τα δεδομένα σας εντός 30 ημερών.', 'delete_account.warning': 'Αυτή η ενέργεια δεν μπορεί να αναιρεθεί. Όλα τα δεδομένα σας θα διαγραφούν μόνιμα.', 'delete_account.reason_label': 'Αιτία (προαιρετικό)', 'delete_account.reason_placeholder': 'Πείτε μας γιατί θέλετε να διαγράψετε τον λογαριασμό σας...', 'delete_account.confirm_label': 'Επιβεβαιώνω ότι θέλω να διαγράψω μόνιμα τον λογαριασμό μου', 'delete_account.submit': 'Υποβολή αίτησης', 'delete_account.submitting': 'Αποστολή...', 'delete_account.success_title': 'Η αίτησή σας ελήφθη', 'delete_account.success_body': 'Θα επεξεργαστούμε την αίτησή σας εντός 30 ημερών και θα σας ειδοποιήσουμε μέσω email.', 'delete_account.login_required': 'Πρέπει να συνδεθείτε για να υποβάλετε αίτηση διαγραφής.', 'delete_account.login_btn': 'Σύνδεση', // App download section 'app.download_title': 'Κατεβάστε την εφαρμογή CanHelp', 'app.download_desc': 'Όλο το CanHelp — πάντα μαζί σας. Διαθέσιμο για Android και iOS.', // Nav 'nav.pricing': 'Τιμές', // Pricing page 'pricing.title': 'Τιμολόγηση', 'pricing.subtitle': 'Επιλέξτε το κατάλληλο πρόγραμμα', 'pricing.role.customer': 'Πελάτης', 'pricing.role.specialist': 'Ειδικός', 'pricing.free': 'Δωρεάν', 'pricing.per_month': 'μήνα', 'pricing.duration': 'Διάρκεια', 'pricing.days': 'ημ.', 'pricing.current_plan': 'Το πρόγραμμά σας', 'pricing.popular': 'Δημοφιλές', 'pricing.choose': 'Επιλογή', 'pricing.your_plan': 'Ενεργό πρόγραμμα', 'pricing.free_default': 'Προεπιλογή', 'pricing.compare': 'Σύγκριση λειτουργιών', 'pricing.feature': 'Λειτουργία', 'pricing.faq_note': 'Η πληρωμή γίνεται από το υπόλοιπο CanHelp. Ανατροφοδότηση διαθέσιμη στην Πληρωμή.', 'pricing.feat.messages': 'Μηνύματα / ημέρα', 'pricing.feat.orders': 'Παραγγελίες / ημέρα', 'pricing.feat.contact_all': 'Επικοινωνία με όλους', 'pricing.feat.view_phone': 'Εμφάνιση τηλεφώνου', 'pricing.feat.show_contact': 'Εμφάνιση στοιχείων επαφής', 'pricing.feat.favorites': 'Αγαπημένα', 'pricing.feat.verified_badge': 'Επαληθευμένο badge', 'pricing.feat.google_calendar': 'Google Calendar', 'pricing.feat.personal_site': 'Προσωπικό site', 'pricing.feat.auto_response': 'Αυτόματη απάντηση', 'pricing.feat.auto_match': 'Αυτόματη αντιστοίχιση', 'pricing.feat.highlighted_reviews': 'Επισημασμένες αξιολογήσεις', 'pricing.feat.portfolio': 'Στοιχεία προσφοράς', 'pricing.feat.cards': 'Αριθμός προσφορών', 'pricing.feat.notify_tasks': 'Ειδοποιήσεις νέων εργασιών', 'pricing.feat.video': 'Βίντεο στην προσφορά', // Upgrade prompt 'upgrade.available_in': 'Διαθέσιμο στο', 'upgrade.cta': 'Αναβάθμιση', // Dashboard plan block 'dashboard.plan.title': 'Το πρόγραμμά μου', 'dashboard.plan.expires': 'Λήγει σε {n} ημέρες', 'dashboard.plan.upgrade': 'Αναβάθμιση προγράμματος', 'dashboard.plan.no_plan': 'Δωρεάν πρόγραμμα', 'dashboard.plan.messages': 'Μηνύματα σήμερα', 'dashboard.plan.orders': 'Παραγγελίες σήμερα', 'dashboard.plan.limits': 'Ημερήσια όρια', 'dashboard.plan.features': 'Λειτουργίες', 'dashboard.plan.stats': 'Στατιστικά', 'dashboard.stats.cards': 'Χαρτοφυλάκια', 'dashboard.stats.maxCards': 'Μέγ. χαρτοφυλάκια', 'dashboard.stats.portfolioItems': 'Στοιχεία portfolio', 'dashboard.stats.maxPortfolioItems': 'Μέγ. στοιχεία', 'dashboard.stats.activeOffers': 'Ενεργές προσφορές', 'dashboard.stats.reviewsReceived': 'Αξιολογήσεις', 'dashboard.stats.activeTasks': 'Ενεργές εργασίες', 'dashboard.stats.completedTasks': 'Ολοκληρωμένες', 'status.can_help_now': 'Είμαι διαθέσιμος τώρα', 'status.need_help': 'Χρειάζομαι βοήθεια', 'status.active': 'Ενεργό', 'status.toggle_on': 'Ενεργοποίηση', 'status.toggle_off': 'Απενεργοποίηση', // FOMO 'fomo.missed_orders': 'Χάσατε {n} παραγγελίες', 'fomo.missed_value': 'Αξία €{v}', 'fomo.upgrade_hint': 'Αναβαθμίστε για να λαμβάνετε περισσότερες παραγγελίες', 'fomo.conversion': 'Μετατροπές εργασιών', 'fomo.active': 'Ενεργές', 'fomo.with_offers': 'Με προσφορές', 'fomo.completed': 'Ολοκληρωμένες', 'fomo.already_offered': '{n} ειδικοί έχουν ήδη απαντήσει', 'fomo.specialist_missed': 'Χάσατε {n} παραγγελίες', 'fomo.top_categories': 'Κατηγορίες', 'fomo.offers_received': 'προσφορές ελήφθησαν', 'fomo.avg_offers': 'Μέσο {n}/εργασία', 'fomo.completion_rate': 'ολοκληρωμένες', // Task auto-match 'task.auto_match': 'Αυτόματη αντιστοίχιση', 'task.auto_match_results': 'Κορυφαίοι ειδικοί', 'task.no_offer_yet': 'Δεν έχετε στείλει προσφορά ακόμα', 'task.make_offer': 'Αποστολή προσφοράς', 'auto_response.title': 'Αυτόματη Απάντηση', 'auto_response.enabled': 'Ενεργοποίηση αυτόματης απάντησης', 'auto_response.min_budget': 'Ελάχ. προϋπολογισμός', 'auto_response.max_budget': 'Μέγ. προϋπολογισμός', 'auto_response.default_price': 'Προεπιλεγμένη τιμή', 'auto_response.default_message': 'Προεπιλεγμένο μήνυμα', 'auto_response.max_per_day': 'Μέγ. αυτόματες προσφορές/ημέρα', 'auto_response.save': 'Αποθήκευση', 'auto_response.saved': 'Αποθηκεύτηκε', 'auto_response.categories': 'Κατηγορίες', 'auto_response.locations': 'Τοποθεσίες', // Personal site 'profile.personal_site': 'Προσωπικό Site', 'profile.site_slug': 'Slug URL', 'profile.site_slug_hint': 'Μόνο λατινικοί χαρακτήρες, αριθμοί, - και _', 'profile.site_open': 'Άνοιγμα site', 'profile.site_preview': 'Το site σας', 'profile.show_contact': 'Εμφάνιση στοιχείων επαφής', 'profile.show_contact_hint': 'Πελάτες με Pro/Ultimate πρόγραμμα θα βλέπουν το τηλέφωνό σας', // Google Calendar plan gate 'gcal.upgrade_required': 'Το Google Calendar απαιτεί Pro ή Ultimate πρόγραμμα', // Chat limits 'chat.limit_warning': 'Απομένουν {n} μηνύματα σήμερα', 'chat.limit_reached': 'Εξαντλήθηκαν τα μηνύματα. Αναβαθμίστε το πρόγραμμά σας', 'chat.upgrade': 'Αναβάθμιση', // Site page 'site.member_since': 'Μαζί μας από', 'site.rating': 'Βαθμολογία', 'site.completed_tasks': 'Ολοκληρώθηκαν', 'site.languages': 'Γλώσσες', 'site.photos': 'φωτ.', 'site.contact_form': 'Επικοινωνία', 'site.contact_sent': 'Το μήνυμα στάλθηκε!', 'site.contact_sent_desc': 'Ο ειδικός θα επικοινωνήσει μαζί σας σύντομα', 'site.contact_name': 'Όνομα', 'site.contact_name_ph': 'Το όνομά σας', 'site.contact_email_ph': 'your@email.com', 'site.contact_message': 'Μήνυμα', 'site.contact_message_ph': 'Περιγράψτε την εργασία σας...', 'site.contact_send': 'Αποστολή', 'site.share': 'Κοινοποίηση', 'site.speaks_languages': 'Μιλάει', 'site.message_sent': 'Το μήνυμα εστάλη!', 'site.message_sent_desc': 'Ο ειδικός θα το λάβει στη συνομιλία', 'site.message_placeholder': 'Γράψτε το μήνυμά σας...', 'site.write_to_chat': 'Γράψτε στο chat', 'site.auth_required_title': 'Απαιτείται σύνδεση', 'site.auth_required_desc': 'Για να γράψετε στο chat, χρειάζεται να συνδεθείτε στο λογαριασμό σας.', 'site.auth_login_btn': 'Σύνδεση', 'site.auth_contact_form_btn': 'Επικοινωνία μέσω φόρμας', 'specialist.services': 'Υπηρεσίες', 'portfolio.title': 'Χαρτοφυλάκιο', 'common.not_found': 'Η σελίδα δεν βρέθηκε', 'common.anonymous': 'Ανώνυμα', 'specialist_setup.page_title': 'Ρύθμιση προφίλ ειδικού', 'specialist_setup.step_of': 'Βήμα {current} από {total}', 'specialist_setup.next': 'Επόμενο', 'specialist_setup.back': 'Πίσω', 'specialist_setup.skip': 'Παράλειψη', 'specialist_setup.finish': 'Ολοκλήρωση', 'specialist_setup.go_to_profile': 'Μεταβείτε στο προφίλ', 'specialist_setup.browse_tasks': 'Εξερεύνηση εργασιών', 'specialist_setup.step1.title': 'Καλωσήλθατε!', 'specialist_setup.step1.subtitle': 'Ας ρυθμίσουμε το προφίλ σας', 'specialist_setup.step1.desc': 'Ένα πλήρες προφίλ σας βοηθά να βρείτε περισσότερους πελάτες. Ακολουθήστε τα βήματα για να δημιουργήσετε το τέλειο προφίλ ειδικού.', 'specialist_setup.step1.what_next': 'Τι θα κάνουμε:', 'specialist_setup.step1.item1': 'Συμπλήρωση βασικών πληροφοριών', 'specialist_setup.step1.item2': 'Δημιουργία κάρτας υπηρεσίας', 'specialist_setup.step1.item3': 'Προσθήκη δεξιοτήτων και κατηγοριών', 'specialist_setup.step1.item4': 'Επιλογή γεωγραφικής περιοχής', 'specialist_setup.step1.item5': 'Μεταφόρτωση φωτογραφιών χαρτοφυλακίου', 'specialist_setup.step2.title': 'Βασικό προφίλ', 'specialist_setup.step2.subtitle': 'Πείτε μας για σας', 'specialist_setup.step2.bio_label': 'Σχετικά με εμένα', 'specialist_setup.step2.bio_placeholder': 'Περιγράψτε την εμπειρία σας, τις υπηρεσίες που προσφέρετε...', 'specialist_setup.step2.phone_label': 'Τηλέφωνο', 'specialist_setup.step2.phone_placeholder': '+30 6900000000', 'specialist_setup.step2.photo_label': 'Φωτογραφία προφίλ', 'specialist_setup.step2.photo_btn': 'Μεταφόρτωση φωτογραφίας', 'specialist_setup.step2.photo_uploading': 'Μεταφόρτωση...', 'specialist_setup.step2.photo_hint': 'Εμφανίζεται στο προφίλ σας', 'specialist_setup.step3.title': 'Κάρτα υπηρεσίας', 'specialist_setup.step3.subtitle': 'Δημιουργήστε την πρώτη σας κάρτα υπηρεσίας', 'specialist_setup.step3.title_label': 'Τίτλος κάρτας', 'specialist_setup.step3.title_placeholder': 'Π.χ. Υδραυλικός, Ηλεκτρολόγος, Καθαρισμός...', 'specialist_setup.step3.desc_label': 'Περιγραφή', 'specialist_setup.step3.desc_placeholder': 'Περιγράψτε λεπτομερώς τι προσφέρετε, εμπειρία, πλεονεκτήματα...', 'specialist_setup.step3.title_required': 'Απαιτείται τίτλος', 'specialist_setup.step4.title': 'Δεξιότητες & Κατηγορίες', 'specialist_setup.step4.subtitle': 'Προσθέστε δεξιότητες και επιλέξτε κατηγορίες', 'specialist_setup.step4.skills_label': 'Δεξιότητες', 'specialist_setup.step4.skills_placeholder': 'Π.χ. Εγκατάσταση σωληνώσεων...', 'specialist_setup.step4.skills_add': 'Προσθήκη', 'specialist_setup.step4.categories_label': 'Κατηγορίες', 'specialist_setup.step5.title': 'Γεωγραφική περιοχή', 'specialist_setup.step5.subtitle': 'Πού παρέχετε υπηρεσίες;', 'specialist_setup.step5.hint': 'Επιλέξτε πόλεις ή συγκεκριμένες περιοχές', 'specialist_setup.done.title': 'Το προφίλ σας είναι έτοιμο!', 'specialist_setup.done.subtitle': 'Συγχαρητήρια! Το προφίλ σας έχει ρυθμιστεί', 'specialist_setup.done.desc': 'Τώρα μπορείτε να λαμβάνετε παραγγελίες από πελάτες. Αναζητήστε εργασίες που ταιριάζουν με τις δεξιότητές σας.', // Support 'support.title': 'Υποστήριξη', 'support.type.label': 'Τύπος αιτήματος', 'support.type.bug': 'Σφάλμα', 'support.type.suggestion': 'Πρόταση', 'support.type.other': 'Άλλο', 'support.subject': 'Θέμα', 'support.subject.placeholder': 'Σύντομη περιγραφή...', 'support.body': 'Μήνυμα', 'support.body.placeholder': 'Περιγράψτε λεπτομερώς το πρόβλημα ή την πρότασή σας...', 'support.submit': 'Αποστολή', 'support.cancel': 'Ακύρωση', 'support.error': 'Σφάλμα αποστολής. Παρακαλώ δοκιμάστε ξανά.', 'support.sent.title': 'Λάβαμε το αίτημά σας!', 'support.sent.body': 'Θα σας απαντήσουμε στο email σας το συντομότερο δυνατόν.', 'support.sent.close': 'Κλείσιμο', 'admin.tab.support': 'Υποστήριξη', 'admin.tab.backup': 'Αντίγραφα ασφαλείας', 'admin.tab.translations': 'Μεταφράσεις', 'admin.tab.dbcheck': 'Έλεγχος ΒΔ', 'admin.tab.balances': 'Υπόλοιπα', 'admin.tab.push': 'Push', 'admin.tab.referrals': 'Παραπομπές', 'admin.search': 'Αναζήτηση', 'admin.noData': 'Δεν υπάρχουν δεδομένα', 'admin.cat.order': 'Σειρά', 'admin.cat.skills': 'Δεξιότητες', 'admin.plans.form.max_tasks': 'Μέγιστες εργασίες', 'admin.settings.referral.shared_section': 'Κοινές ρυθμίσεις referral', 'admin.settings.seo.title': 'Ρυθμίσεις SEO', 'admin.backup.title': 'Αντίγραφα ασφαλείας', 'admin.backup.tables': 'Πίνακες', 'admin.backup.exportAll': 'Εξαγωγή όλων', 'admin.backup.importAll': 'Εισαγωγή όλων', 'admin.backup.exportTable': 'Εξαγωγή πίνακα', 'admin.backup.importTable': 'Εισαγωγή πίνακα', 'admin.backup.exporting': 'Εξαγωγή...', 'admin.backup.importing': 'Εισαγωγή...', 'admin.backup.exportSuccess': 'Η εξαγωγή ολοκληρώθηκε', 'admin.backup.importSuccess': 'Η εισαγωγή ολοκληρώθηκε', 'admin.backup.autoBackup': 'Αυτόματο backup', 'admin.backup.autoBackupDesc': 'Καθημερινό αυτόματο backup', 'admin.backup.storedBackups': 'Αποθηκευμένα backups', 'admin.backup.noStoredBackups': 'Δεν υπάρχουν αποθηκευμένα backups', 'admin.backup.restore': 'Επαναφορά', 'admin.backup.restoreConfirm': 'Επαναφορά από backup;', 'admin.backup.restoreSuccess': 'Η επαναφορά ολοκληρώθηκε', 'admin.backup.restoring': 'Επαναφορά...', 'admin.backup.date': 'Ημερομηνία', 'admin.backup.size': 'Μέγεθος', 'admin.backup.today': 'Σήμερα', 'admin.backup.yesterday': 'Χθες', 'admin.balance.col.operation': 'Ενέργεια', 'admin.balance.col.amount': 'Ποσό', 'admin.balance.col.result': 'Υπόλοιπο', 'admin.balance.col.description': 'Περιγραφή', 'admin.balance.col.date': 'Ημερομηνία', 'admin.balance.empty': 'Δεν υπάρχουν εγγραφές', 'admin.balance.filter.all': 'Όλες οι ενέργειες', 'admin.balance.filter.user_id': 'Φίλτρο ανά userId', 'admin.balance.kind.topup': 'Αναπλήρωση', 'admin.balance.kind.plan_purchase': 'Χρέωση πλάνου', 'admin.balance.kind.admin_topup': 'Αναπλήρωση από διαχειριστή', 'admin.balance.kind.admin_adjustment': 'Διόρθωση', 'admin.support.search': 'Αναζήτηση', 'admin.support.all_statuses': 'Όλες οι καταστάσεις', 'admin.support.all_types': 'Όλοι οι τύποι', 'admin.support.none': 'Δεν υπάρχουν αιτήματα', 'admin.support.reply': 'Απάντηση', 'admin.support.reply_placeholder': 'Πληκτρολογήστε απάντηση...', 'admin.support.send_reply': 'Αποστολή απάντησης', 'admin.support.cancel': 'Ακύρωση', 'admin.support.close': 'Κλείσιμο', 'admin.support.status.open': 'Ανοιχτό', 'admin.support.status.in_progress': 'Σε εξέλιξη', 'admin.support.status.resolved': 'Επιλύθηκε', 'admin.support.status.closed': 'Κλειστό', 'admin.support.your_reply': 'Η απάντησή σας', 'admin.user_edit.visibility_requirements.title': 'Το προφίλ δεν εμφανίζεται ακόμη στις Προσφορές', 'admin.user_edit.visibility_requirements.hint': 'Απαιτήσεις ορατότητας:', 'admin.user_edit.visibility_requirements.bio': 'Συμπληρώστε το βιογραφικό', 'admin.user_edit.visibility_requirements.published_card': 'Δημοσιεύστε τουλάχιστον μία κάρτα', 'admin.user_edit.visibility_requirements.categories': 'Προσθέστε κατηγορία σε δημοσιευμένη κάρτα', 'admin.user_edit.visibility_requirements.locations': 'Προσθέστε τοποθεσία σε δημοσιευμένη κάρτα', 'auto_response.desc': 'Αυτόματη απάντηση σε κατάλληλες εργασίες', 'auto_response.budget_range': 'Προϋπολογισμός εργασίας', 'auto_response.message_placeholder': 'Γεια σας! Μπορώ να βοηθήσω με αυτήν την εργασία...', 'profile.background.title': 'Φόντο κεφαλίδας προφίλ', 'profile.background.hint': 'Εμφανίζεται στην κεφαλίδα του δημόσιου προφίλ σε web και mobile.', 'profile.photo.uploading': 'Μεταφόρτωση...', 'profile.balance.history': 'Ιστορικό ενεργειών', 'profile.balance.history.last': 'Τελευταίες ενέργειες', 'profile.balance.history.empty': 'Δεν υπάρχουν ενέργειες', 'profile.balance.history.balance_after': 'Υπόλοιπο μετά', 'profile.balance.history.kind.topup': 'Αναπλήρωση υπολοίπου', 'profile.balance.history.kind.plan_purchase': 'Χρέωση πλάνου', 'profile.balance.history.kind.admin_topup': 'Αναπλήρωση από διαχειριστή', 'profile.balance.history.kind.admin_adjustment': 'Διόρθωση από διαχειριστή', 'profile.plan_history.title': 'Ιστορικό πλάνου', 'profile.plan_history.empty': 'Το ιστορικό πλάνου είναι άδειο', 'profile.plan_history.expires': 'Έως', 'profile.plan_history.days': 'ημέρες', 'profile.plan_history.event.activated': 'Ενεργοποιήθηκε', 'profile.plan_history.event.renewed': 'Ανανεώθηκε', 'profile.plan_history.event.downgraded': 'Υποβαθμίστηκε', 'profile.plan_history.event.referral_reward': 'Ανταμοιβή referral', 'profile.plan_history.event.admin_change': 'Αλλαγή από διαχειριστή', 'profile.plan_history.event.expired': 'Έληξε', 'profile.show_contact_desc': 'Επιτρέπει στους πελάτες να επικοινωνούν απευθείας', 'profile.site.visible.price_list': 'Τιμοκατάλογος', 'site.pricelist': 'Τιμοκατάλογος', 'status.plan_required': 'Η κατάσταση δεν είναι διαθέσιμη στο τρέχον πλάνο', 'status.admin_not_applicable': 'Η κατάσταση χρήστη δεν ισχύει για διαχειριστές' }, en: { 'footer.slogan': 'Your task — our care! We solve any issue quickly and easily.', 'footer.links': 'Links', 'footer.socials': 'Socials', 'nav.home': 'Home', 'nav.tasks': 'Tasks', 'nav.post': '+ Post task', 'nav.dashboard': 'My Tasks', 'nav.chat': 'Messages', 'nav.notifications': 'Notifications', 'nav.profile': 'Profile', 'nav.admin': 'Admin Panel', 'nav.specialists': 'Offers', 'nav.new_task': 'New task', 'nav.login': 'Login', 'nav.register': 'Register', 'nav.logout': 'Logout', 'hero.title': 'Everyone has something valuable to offer', 'hero.subtitle': 'Find help, offer your skills, or earn money helping others', 'hero.cta.post': 'Find help', 'hero.cta.browse': 'Offer your help', 'hero.cta.specialists': 'Find a job', 'hero.search.placeholder': 'What do you need? e.g. electrician, cleaning...', 'hero.specialist.title': 'Find tasks near you', 'hero.specialist.subtitle': 'Discover tasks in your categories and send your offer', 'hero.specialist.cta': 'Browse tasks', 'hero.specialist.search.placeholder': 'Search tasks... e.g. electrical, cleaning', 'section.categories.specialist': 'Find tasks by category', 'section.cities.specialist': 'Tasks by city', 'how.specialist.step1.title': 'Create a specialist card', 'how.specialist.step1.desc': 'Set your categories, skills and areas — the system finds tasks automatically', 'how.specialist.step2.title': 'Find relevant tasks', 'how.specialist.step2.desc': 'Discover tasks in your categories and get started right away', 'how.specialist.step3.title': 'Send an offer & earn', 'how.specialist.step3.desc': 'Submit an offer with price and timeline, communicate with clients and complete tasks', 'stats.specialists': 'offers', 'stats.tasks': 'tasks', 'stats.categories': 'categories', 'stats.free': 'free sign-up', 'promo.title': 'Get Pro for free — until end of year', 'promo.subtitle': 'Sign up now and enjoy the Pro plan at no cost. Offer ends December 31.', 'promo.cta': 'Sign up free', 'promo.days': 'days', 'promo.hours': 'hrs', 'promo.minutes': 'min', 'promo.seconds': 'sec', 'section.categories': 'Create a task in any category', 'section.how': 'How it works', 'section.recent': 'Recent tasks', 'section.all': 'See all →', 'section.more': 'more', 'section.cities': 'Cities & Districts', 'section.community': 'A community project for everyone', 'community.subtitle': 'CanHelp is not just a marketplace — it\'s a community of mutual help. Anyone with knowledge or a skill can find a client. Anyone with a problem can find a specialist.', 'community.point1.title': 'Are you good at something?', 'community.point1.desc': 'Repairs, tutoring, design, translation, care — every skill has value. Create a profile and find clients near you.', 'community.point2.title': 'Need help with something?', 'community.point2.desc': 'Post a task in under a minute and receive offers from verified specialists in your city.', 'community.point3.title': 'Help the project grow', 'community.point3.desc': 'CanHelp grows through communities. Share the link with friends and acquaintances — together we build something useful for everyone.', 'community.share': 'Share with friends', 'community.share.copied': 'Link copied!', // Referral section on home page 'section.referral': 'Referral Program', 'referral.home.subtitle': 'Share your link — every new user who signs up through it earns you a reward.', 'referral.home.step1.title': 'Sign up and get your link', 'referral.home.step1.desc': 'Create an account and find your unique referral link in your profile.', 'referral.home.step2.title': 'Share with friends', 'referral.home.step2.desc': 'Send the link to friends, acquaintances, or post it on social media.', 'referral.home.step3.title': 'Earn rewards', 'referral.home.step3.desc': 'Once your friend verifies their email, you automatically receive your reward.', 'referral.home.cta': 'Get your link', 'referral.home.badge': 'Referral Program', // FAQ section 'section.faq': 'Frequently Asked Questions', 'faq.q1': 'How does CanHelp work?', 'faq.a1': 'Post a task, receive offers from specialists, choose the best one and start working together. It\'s fast, simple and free for customers.', 'faq.q2': 'How much does it cost to use the platform?', 'faq.a2': 'Registration and task posting is completely free for customers. Specialists have access to a free plan as well as premium options.', 'faq.q3': 'How can I become a specialist?', 'faq.a3': 'Register, go to «Become a Specialist», fill in your profile with skills and categories, and start receiving tasks.', 'faq.q4': 'How do I choose the right specialist?', 'faq.a4': 'Check their reviews, experience, skills and portfolio. Chat with them through the platform and discuss the details before deciding.', 'faq.q5': 'What if I am not satisfied?', 'faq.a5': 'You can leave a review about the specialist and rate them from 1 to 5 stars. Reviews help other users find trusted professionals.', 'faq.q6': 'Can I contact a specialist before accepting their offer?', 'faq.a6': 'Yes. Once you receive an offer, you can open a chat with the specialist, ask questions and discuss all the details before making a decision.', 'faq.q7': 'How long does it take to receive offers?', 'faq.a7': 'Usually within a few hours. Specialists get notified about new tasks and can respond quickly.', 'faq.q8': 'Can I post a task in any city in Greece?', 'faq.a8': 'Yes! CanHelp covers all of Greece — Athens, Thessaloniki, Patras and more.', 'faq.q9': 'What types of tasks can I find on CanHelp?', 'faq.a9': 'Repairs, cleaning, electricians, tutoring, design, IT, moving, beauty and much more. Categories are constantly expanding.', 'faq.q10': 'Is there a mobile app?', 'faq.a10': 'Yes! CanHelp is available for Android and iOS. Download the app and manage everything from your phone.', 'how.step1.title': 'Post a task', 'how.step1.desc': 'Describe what you need and set your budget', 'how.step2.title': 'Receive offers', 'how.step2.desc': 'Specialists will send you offers with price and timeline', 'how.step3.title': 'Choose & start', 'how.step3.desc': 'Pick the best professional and start the collaboration', 'tasks.title': 'tasks', 'tasks.filters': 'Filters', 'tasks.search': 'Search', 'tasks.search.placeholder': 'Title or keyword...', 'tasks.search.btn': 'Search', 'tasks.publish': 'Post', 'tasks.category.all': 'All', 'tasks.category.all_in': 'All in', 'tasks.category.label': 'Category', 'tasks.location.label': 'City', 'tasks.location.placeholder': 'e.g. Athens', 'tasks.empty': 'No tasks found', 'tasks.empty.cta': 'Post the first one', 'task.status.open': 'Open', 'task.status.in_progress': 'In progress', 'task.status.completed': 'Completed', 'task.status.cancelled': 'Cancelled', 'task.status.draft': 'Draft', 'task.budget': 'Budget', 'task.location': 'Location', 'task.deadline': 'Start date', 'task.expires_at': 'Active until', 'task.created_at': 'Created', 'task.customer': 'Customer', 'task.offer.btn': 'Submit offer', 'task.invite.banner_title': "You've been invited to this task", 'task.invite.banner_hint': 'The customer personally invited you', 'task.invite.accept': 'Send offer', 'task.invite.decline': 'Decline', 'offer.accept': 'Accept', 'offer.decline': 'Decline', 'task.complete': 'Complete task', 'task.complete.confirm': 'Mark this task as complete?', 'task.edit': 'Edit', 'task.status_label': 'Status', 'task.yours': 'Your task', 'task.offer.yours': 'Your offer', 'review.leave': 'Leave a review', 'review.rating': 'Rating', 'review.comment': 'Comment', 'review.comment.placeholder': 'Tell us about your experience...', 'review.submit': 'Submit review', 'review.submitting': 'Submitting...', 'review.done': 'Review submitted!', 'profile.reviews': 'Reviews', 'profile.no_reviews': 'No reviews yet', 'profile.rating': 'Rating', 'profile.skills.label': 'Skills', 'profile.member_since': 'Member since', 'task.offers': 'Offers', 'task.offers.none': 'No offers yet', 'create.title': 'Post a task', 'create.field.title': 'Title', 'create.field.description': 'Description', 'create.field.category': 'Category', 'create.field.category.select': 'Select...', 'create.field.location': 'Location', 'create.field.location.any': 'Anywhere', 'create.field.location.all': 'Entire city', 'create.field.budget': 'Budget (€)', 'create.field.deadline': 'Start date', 'create.field.expires_at': 'Listing active for', 'create.field.expires_at.days': '{n} days', 'create.field.budget_negotiable': 'Price is negotiable', 'create.field.time_slot': 'Time slot', 'create.field.time_slot.any': 'Anytime', 'create.field.time_slot.morning': 'Morning (08:00–13:00)', 'create.field.time_slot.afternoon': 'Afternoon (13:00–18:00)', 'create.field.time_slot.evening': 'Evening (18:00–22:00)', 'create.field.time_slot.weekend': 'Weekend', 'create.field.address': 'Address (optional)', 'create.field.address.district': 'District', 'create.field.address.street': 'Street', 'create.field.address.house': 'Number', 'create.field.confidential': 'Confidential note', 'create.field.confidential.placeholder': 'Details visible only to the assigned specialist...', 'create.field.confidential.hint': 'Not shown publicly', 'create.field.photos': 'Photos', 'create.field.photos.add': 'Add photo', 'create.field.photos.uploading': 'Uploading...', 'task.budget_negotiable': 'Price negotiable', 'task.time_slot': 'Time slot', 'task.confidential': 'Confidential note', 'create.field.title.placeholder': 'e.g. Clean 80sqm apartment', 'create.field.description.placeholder': 'Describe in detail what you need...', 'create.field.location.placeholder': 'e.g. Athens, Kolonaki', 'create.field.budget.placeholder': 'e.g. 100', 'create.submit': 'Post task', 'create.submitting': 'Posting...', 'login.title': 'Welcome back', 'login.subtitle': 'Sign in to CanHelp', 'login.email': 'Email', 'login.password': 'Password', 'login.submit': 'Sign in', 'login.submitting': 'Signing in...', 'login.error': 'Invalid email or password', 'login.unverified.title': 'Verify your email address', 'login.unverified.desc': 'We sent a verification link to your email. Check your inbox (or spam) and click the link.', 'login.unverified.resend': 'Resend verification email', 'login.unverified.sending': 'Sending...', 'login.unverified.sent': '✓ Sent — check your inbox', 'profile.email.verified': 'Email verified', 'profile.email.not_verified': 'Email not verified', 'login.no_account': "Don't have an account?", 'login.register_link': 'Register', 'login.forgot_password': 'Forgot password?', 'login.or_continue_with': 'or continue with', 'login.continue_google': 'Continue with Google', 'forgot.title': 'Forgot password', 'forgot.subtitle': 'Enter your email to receive a reset link', 'forgot.email': 'Email', 'forgot.submit': 'Send reset link', 'forgot.submitting': 'Sending...', 'forgot.sent.title': 'Check your inbox', 'forgot.sent.desc': 'If an account exists with that email, we\'ll send you a password reset link.', 'forgot.back_to_login': 'Back to sign in', 'forgot.error': 'Could not send reset link. Check the email address and try again.', 'forgot.error.not_found': 'No account found with this email address.', 'forgot.error.send_failed': 'Failed to send email. Please try again later.', 'reset.title': 'New password', 'reset.subtitle': 'Enter your new password', 'reset.password': 'New password', 'reset.confirm': 'Confirm password', 'reset.submit': 'Change password', 'reset.submitting': 'Saving...', 'reset.success': 'Password changed successfully. Redirecting to sign in...', 'reset.back_to_login': 'Back to sign in', 'reset.error.mismatch': 'Passwords do not match', 'reset.error.invalid': 'Invalid or expired link. Please request a new one.', 'register.title': 'Register', 'register.subtitle': 'Create a CanHelp account', 'register.first_name': 'First name', 'register.last_name': 'Last name', 'register.email': 'Email', 'register.password': 'Password (min 8 characters)', 'register.role': 'Role', 'register.role.customer': 'User', 'register.role.customer.desc': 'I post tasks', 'register.role.specialist': 'Specialist', 'register.role.specialist.desc': 'I take on tasks', 'register.submit': 'Create account', 'register.submitting': 'Registering...', 'register.has_account': 'Already have an account?', 'register.login_link': 'Sign in', 'register.continue_google': 'Continue with Google', 'register.check_email.title': 'Check your email', 'register.check_email.desc': 'We sent a verification link to your email address. Check your inbox (or spam) and click the link.', 'register.check_email.login': 'Back to sign in', 'register.captcha_failed': 'CAPTCHA verification failed. Please complete the security check and try again.', 'dashboard.title': 'Dashboard', 'dashboard.new_task': '+ New task', 'dashboard.onboarding.title': 'Welcome to CanHelp 👋', 'dashboard.onboarding.subtitle': 'Choose how you want to get started.', 'dashboard.onboarding.helper.title': 'Offer your help', 'dashboard.onboarding.helper.desc': 'Complete your profile — skills, categories and areas. It takes a couple of minutes and you start receiving orders.', 'dashboard.onboarding.helper.cta': 'Complete your profile', 'dashboard.onboarding.requester.title': 'Need help?', 'dashboard.onboarding.requester.desc': 'Post a task and helpers will send you their offers.', 'dashboard.onboarding.requester.cta': 'Post a task', 'dashboard.my_tasks': 'My tasks', 'dashboard.my_offers': 'My offers', 'dashboard.invitations': 'Job invitations', 'dashboard.offers_count': 'offers', 'dashboard.declined_count': 'declined', 'dashboard.completed_tasks': 'Completed tasks', 'dashboard.completed_offers': 'Completed offers', 'dashboard.review_pending': 'Review not yet submitted', 'tasks.new.top_specialists': 'Top specialists', 'tasks.new.select_category': 'Select a category to see matching specialists', 'tasks.new.invite': 'Offer work', 'tasks.new.invited': 'Selected ✓', 'reviews.count': 'reviews', 'filter.location': 'Location', 'filter.language': 'Languages', 'filter.language.any': 'Any language', 'filter.category.all': 'All categories', 'user.categories': 'Categories', 'user.work_area': 'Work area', 'user.specialist_cards': 'Service cards', 'card.skills': 'Skills', 'card.categories': 'Categories', 'card.geography': 'Work area', 'card.portfolio': 'Portfolio', 'card.close': 'Close', 'dashboard.tasks.empty': "You haven't posted any tasks", 'dashboard.tasks.empty.cta': 'Post your first one', 'dashboard.tasks.add_new': 'Add a new task', 'dashboard.offers.empty': "You haven't submitted any offers", 'dashboard.offers.empty.cta': 'Find tasks', 'dashboard.customer.specialists_title': 'Looking for a specialist?', 'dashboard.customer.specialists_hint': 'Browse specialist profiles, read reviews and invite them to your tasks', 'dashboard.customer.specialists_cta': 'Find a specialist', 'dashboard.customer.how_title': 'How it works', 'dashboard.customer.step1': 'Create a task with a description and budget', 'dashboard.customer.step2': 'Specialists will send offers with price and timeline', 'dashboard.customer.step3': 'Choose the right one and start working', 'notif.title': 'Notifications', 'notif.mark_all': 'Mark all as read', 'notif.empty': 'No notifications', 'notif.type.generic': 'Notification', 'notif.type.new_offer': 'New offer', 'notif.type.offer_accepted': 'Your offer was accepted', 'notif.type.offer_declined': 'Your offer was declined', 'notif.type.task_completed': 'Task completed', 'notif.type.task_cancelled': 'Task cancelled', 'notif.type.new_message': 'New message', 'notif.type.new_review': 'New review', 'notif.type.task_invite': 'Job invitation', 'notif.type.referral_reward': 'Referral reward', 'notif.type.specialist_card_submitted': 'Card submitted for review', 'notif.type.specialist_card_approved': 'Card approved', 'notif.type.specialist_card_rejected': 'Card rejected', 'notif.body.new_offer': 'New offer for «{title}»', 'notif.body.offer_accepted': 'Your offer for «{title}» was accepted', 'notif.body.offer_declined': 'Your offer for «{title}» was declined', 'notif.body.task_invite': 'You\'ve been invited for «{title}»', 'notif.body.new_review': 'You received a {rating}★ review', 'notif.body.referral_reward': '{days} days of «{plan}» plan access have been added to your account!', 'notif.body.specialist_card_submitted': 'The card «{title}» was sent for review', 'notif.body.specialist_card_approved': 'The card «{title}» was approved and published', 'notif.body.specialist_card_rejected': 'The card «{title}» was not approved. You can fix it and submit again.', 'offer.status.pending': 'Pending', 'offer.status.accepted': 'Accepted', 'offer.status.declined': 'Declined', 'offer.status.withdrawn': 'Withdrawn', 'offer.status.other_accepted': 'Another specialist was chosen', 'common.loading': 'Loading...', 'common.error': 'Error', 'common.save': 'Save', 'common.saving': 'Saving...', 'common.cancel': 'Cancel', 'common.add': 'Add', 'common.close': 'Close', 'common.edit': 'Edit', 'common.delete': 'Delete', 'common.from': 'by', 'common.currency': '€', 'common.greece': 'Greece', // Chat 'chat.connected': 'Connected', 'chat.disconnected': 'Disconnected', 'chat.no_rooms': 'No conversations yet', 'chat.task_fallback': 'Task', 'chat.select': 'Select a conversation', 'chat.no_messages': 'No messages yet', 'chat.placeholder': 'Write a message... (Enter to send)', 'chat.conversation_fallback': 'Conversation', 'chat.direct_chat': 'Direct chat', 'chat.linked_task': 'Linked task', 'chat.write_btn': 'Message', 'chat.just_now': 'just now', 'chat.min_ago': 'm', 'chat.write_specialist': 'Write to specialist', 'chat.write_customer': 'Write to customer', 'chat.notif_settings': 'Notification settings', 'chat.notif_messages': 'Notifications for new messages', 'chat.toast_title': 'New message', 'chat.toast_open': 'Open chat', // Offer form 'offer.price': 'Price', 'offer.price.placeholder': 'e.g. 80', 'offer.customer_budget': 'Client budget', 'offer.message': 'Message', 'offer.optional': 'optional', 'offer.message.placeholder': 'Introduce yourself, your experience and why you are the best choice...', 'offer.submitting': 'Sending...', // Profile 'profile.photo': 'Profile photo', 'profile.photo.change': 'Change photo', 'profile.photo.hint': 'JPEG, PNG, WebP · up to 5MB', 'profile.basic_info': 'Basic info', 'profile.phone': 'Phone', 'profile.phone.placeholder': '+30 6901234567', 'profile.bio': 'Short bio', 'profile.bio.placeholder': 'Tell us a bit about yourself...', 'profile.language': 'Language', 'profile.language.hint': 'App interface and email notification language', 'profile.languages': 'Languages spoken', 'profile.languages.hint': 'Select all languages you speak', 'profile.skills': 'Skills', 'profile.skills.subtitle': 'Add the services you offer', 'profile.skills.placeholder': 'e.g. Cleaning, IT, Tutoring...', 'profile.role': 'Account role', 'profile.role.specialist': '🔧 Helper', 'profile.role.admin': '👑 Admin', 'profile.role.customer': '👤 User', 'profile.role.user': '👤 User', 'profile.role.change': 'To change your role please contact support.', 'profile.become_specialist': 'Offer your help', 'profile.become_specialist.desc': 'Create your helper profile, offer your skills and start receiving tasks.', 'become_specialist.hero.title': 'Offer your skills and start earning', 'become_specialist.hero.subtitle': 'Create a helper profile and receive requests from people who need help', 'become_specialist.how.title': 'How it works', 'become_specialist.step1.title': 'Create a specialist portfolio', 'become_specialist.step1.desc': 'Set your categories, skills and coverage areas — the system will automatically match you with relevant tasks', 'become_specialist.step2.title': 'Find tasks', 'become_specialist.step2.desc': 'Discover tasks in your categories in the "Find Orders" section', 'become_specialist.step3.title': 'Send an offer & earn', 'become_specialist.step3.desc': 'Submit offers with price and timeline, chat with clients and complete tasks', 'become_specialist.benefits.title': 'Specialist profile advantages', 'become_specialist.benefit1': 'Task search filtered by your categories and location', 'become_specialist.benefit2': 'Public profile with client reviews', 'become_specialist.benefit3': 'Availability schedule visible to clients', 'become_specialist.benefit4': 'Saved to favourites by clients', 'become_specialist.cta': 'Learn more', 'become_specialist.free_badge': 'Free registration', 'profile.tab.notifications': 'Notifications', 'profile.tab.reviews': 'Reviews', 'profile.tab.referral': 'Referrals', 'profile.tab.auto_response': 'Auto-response', 'profile.tab.site': 'Site', 'profile.site.title': 'Personal page', 'profile.site.url_label': 'Personal site', 'profile.site.copy': 'Copy', 'profile.site.copied': 'Copied', 'profile.site.visible_title': "What's on your page", 'profile.site.visible.name': 'Name and photo', 'profile.site.visible.bio': 'Bio', 'profile.site.visible.rating': 'Rating and reviews', 'profile.site.visible.portfolio': 'Portfolio / Cards', 'profile.site.visible.contacts': 'Contact info', 'profile.site.visible.full_last_name': 'Full last name', 'profile.site.visible.services': 'Service cards', 'profile.site.visible.reviews': 'Reviews section', 'profile.site.visible.status': '"Ready to help" status', 'profile.site.theme': 'Appearance theme', 'profile.site.theme.dark': 'Dark', 'profile.site.theme.light': 'Light', 'profile.site.slug_taken': 'This address is already taken', 'profile.site.stats.title': 'Site analytics', 'profile.site.stats.days': 'last 30 days', 'profile.site.stats.views': 'Views', 'profile.site.stats.unique': 'Unique visitors', 'profile.site.stats.messages': 'Messages', 'profile.site.stats.total_views': 'Total views', 'profile.site.stats.total_unique': 'Unique visitors', 'profile.site.stats.total_messages': 'Messages', 'profile.site.stats.empty': 'No data yet', 'profile.site.stats.loading': 'Loading analytics...', 'profile.site.stats.no_slug': 'Set your site URL to see analytics', 'profile.site.edit_bio_hint': 'Bio and photo are edited in the "Basic info" tab.', 'profile.site.seo.title': 'SEO — Page Metadata', 'profile.site.seo.hint': 'Shown in search results. Saved values are auto-translated into all languages.', 'profile.site.seo.site_title': 'Page title', 'profile.site.seo.site_title_placeholder': 'John Doe — Plumber in Athens', 'profile.site.seo.site_desc': 'Meta description', 'profile.site.seo.site_desc_placeholder': 'Brief description for search engines...', 'status.title': 'Status', 'status.can_help_now_hint': 'Your card is shown higher in search', 'status.need_help_hint': 'Specialists can offer you help', 'profile.referral.title': 'Referral program', 'profile.referral.desc': 'Share your link and earn rewards for every new user you invite.', 'profile.referral.link_label': 'Your referral link', 'profile.referral.copy': 'Copy', 'profile.referral.copied': 'Copied!', 'profile.referral.invited_count': 'successful referrals', 'profile.referral.no_code': 'Referral code is not available.', 'notifications.title': 'Notification settings', 'notifications.email.new_tasks': 'Email for new tasks', 'notifications.email.new_tasks.desc': 'Receive an email when a new task is posted in your categories', 'notifications.messages.desc': 'Receive a notification when a new message arrives', 'notifications.saved': 'Settings saved', 'notifications.plan_required': 'Not available in your plan', 'profile.tab.info': 'Basic info', 'profile.tab.finance': 'Finance', 'profile.tab.skills': 'Skills', 'profile.tab.categories': 'Categories', 'profile.tab.geography': 'Geography', 'profile.specialist.categories': 'Work categories', 'profile.specialist.categories.desc': 'Select the categories you work in', 'profile.specialist.geography': 'Coverage areas', 'profile.specialist.geography.desc': 'Select the cities / districts where you are active', 'profile.saving': 'Saving...', 'profile.upload.error': 'Error uploading photo', 'profile.saved': 'Saved', 'profile.tab.cards': 'Offers', 'profile.cards.count': 'Offers', 'profile.cards.add': 'Add offer', 'profile.cards.new_title': 'New offer title', 'profile.cards.placeholder': 'e.g. Plumbing', 'profile.cards.create': 'Create', 'profile.cards.cancel': 'Cancel', 'profile.cards.empty': 'No offers yet', 'profile.cards.empty_hint': 'Create your first card to show your services to clients.', 'profile.cards.create_first': 'Create your first offer', 'profile.cards.delete_confirm': 'Delete offer?', 'profile.background.change': 'Change background', 'profile.background.remove': 'Remove background', 'profile.listing_requirements.published_card': 'Publish at least one card', 'profile.listing_requirements.title': 'Your profile is not shown yet in offers', 'profile.listing_requirements.hint': 'To make the card visible, complete these conditions:', 'profile.listing_requirements.bio': 'Add a short bio in the main profile section', 'profile.listing_requirements.categories': 'Add at least one category to the active card', 'profile.listing_requirements.locations': 'Add at least one location to the active card', 'profile.listing_requirements.card_inactive': 'Make the card active', 'profile.listing_requirements.review_pending': 'Card is under review', 'profile.card.visibility_issue': 'Card is not shown in offers', 'profile.card.tab.main': 'General', 'profile.card.tab.skills': 'Skills', 'profile.card.tab.categories': 'Categories', 'profile.card.tab.geography': 'Geography', 'profile.card.tab.portfolio': 'Portfolio', 'profile.card.tab.pricelist': 'Price list', 'profile.card.pricelist.empty': 'No price list groups yet.', 'profile.card.pricelist.add_group': 'Add group', 'profile.card.pricelist.group_title': 'Group title', 'profile.card.pricelist.add_item': 'Add item', 'profile.card.pricelist.item_name': 'Service / work', 'profile.card.pricelist.item_desc': 'Description (optional)', 'profile.card.pricelist.item_price': 'Price', 'profile.card.pricelist.item_unit': 'Unit (e.g. /hour)', 'profile.card.pricelist.save_group': 'Save group', 'profile.card.pricelist.save_item': 'Save', 'profile.card.pricelist.delete_group': 'Delete group', 'profile.card.pricelist.delete_item': 'Delete', 'profile.card.active': 'Active', 'profile.card.review_pending': 'Pending approval', 'profile.card.review_pending_hint': 'Your card is being reviewed by the admin team.', 'profile.card.review_submitted': 'Card submitted for review', 'profile.card.review_approved': 'Card approved', 'profile.card.review_approved_hint': 'Your card is now visible in offers.', 'profile.card.review_rejected': 'Card rejected', 'profile.card.review_rejected_hint': 'Your card was not approved. Please update it and submit again.', 'profile.card.submit_review': 'Submit for review', 'profile.card.withdraw_review': 'Withdraw request', 'profile.card.unpublish': 'Unpublish', 'profile.card.save': 'Save', 'profile.card.saved': 'Saved', 'profile.card.delete': 'Delete', 'profile.card.skill.add': 'Add skill', 'profile.card.photo.add': 'Add photo', 'profile.card.photo.uploading': 'Uploading...', 'profile.card.photo.empty': 'No photos yet', 'profile.card.item.title': 'Title', 'profile.card.item.desc': 'Description', 'profile.card.item.save': 'Save', 'profile.card.item.cancel': 'Cancel', 'profile.card.item.edit': 'Edit', 'profile.card.description': 'Card description', 'profile.card.desc_auto_translate': 'Will be automatically translated into other languages on save', 'profile.card.desc_translated': 'Translations available:', 'profile.upgrade.cards_limit': 'Portfolio limit reached', 'profile.upgrade.plan': 'Current plan:', 'profile.upgrade.contact': 'Contact the administrator to change your plan', 'profile.upgrade.ok': 'Got it', 'profile.plan.title': 'Subscription plan', 'profile.balance': 'Balance', 'profile.balance.topup': 'Top Up Balance', 'profile.balance.topup.title': 'Top Up Balance', 'profile.balance.topup.amount': 'Amount (EUR)', 'profile.balance.topup.hint': 'Choose a preset or enter a custom amount', 'profile.balance.topup.submit': 'Proceed to Payment', 'profile.balance.topup.loading': 'Redirecting...', 'profile.balance.topup.error': 'Payment initiation failed. Please try again.', 'payment.success.title': 'Payment Successful!', 'payment.success.desc': 'Your balance has been updated.', 'payment.cancelled.title': 'Payment Cancelled', 'payment.cancelled.desc': 'Payment was cancelled. No charges were made.', 'payment.pending.title': 'Processing...', 'payment.pending.desc': 'Your payment is being processed.', 'payment.back_to_profile': 'Back to Profile', 'profile.plan.basic': 'Basic (free)', 'profile.plan.contact_upgrade': 'Contact admin to upgrade your plan', 'profile.plan.cards_up_to': 'Portfolio: up to', 'profile.plan.cards_unlimited': 'Portfolio: unlimited', 'profile.plan.tasks_up_to': 'Tasks: up to', 'profile.plan.offers_up_to': 'Offers: up to', 'profile.plan.valid_until': 'Valid until', 'profile.plan.no_expiry': 'No expiry', // Create task 'create.error': 'Error posting task', // Tasks list extras 'tasks.category.general': 'General', 'tasks.budget.range': 'Range:', 'tasks.budget.from': 'from', 'tasks.budget.to': 'to', 'tasks.filter.reset': 'Reset filters', 'tasks.load_more': 'Load more', 'tasks.showing': 'Results:', 'tasks.field.budget': 'Budget, €', // Admin 'admin.title': 'Admin Panel', 'admin.tab.stats': 'Statistics', 'admin.tab.users': 'Users', 'admin.tab.tasks': 'Tasks', 'admin.tab.reports': 'Reports', 'admin.tab.moderation': 'Moderation', 'admin.stats.users': 'Users', 'admin.stats.tasks': 'Tasks', 'admin.stats.offers': 'Offers', 'admin.stats.reviews': 'Reviews', 'admin.tasks.by_status': 'Tasks by status', 'admin.col.user': 'User', 'admin.col.email': 'Email', 'admin.col.role': 'Role', 'admin.col.registered': 'Registered', 'admin.col.status': 'Status', 'admin.col.title': 'Title', 'admin.col.budget': 'Budget', 'admin.col.created': 'Created', 'admin.users.active': 'Active', 'admin.users.inactive': 'Inactive', 'admin.users.deactivate': 'Deactivate', 'admin.users.activate': 'Activate', 'admin.tasks.cancel': 'Cancel', 'admin.reports.none': 'No reports', 'admin.moderation.none': 'No offers to review', 'admin.moderation.pending': 'Pending', 'admin.moderation.active': 'Active', 'admin.moderation.approve': 'Approve', 'admin.moderation.block': 'Block', 'admin.moderation.pending_title': 'Offers pending approval', 'admin.moderation.active_title': 'Active offers', 'admin.moderation.pending_count': 'Pending', 'admin.moderation.active_count': 'Active', 'admin.moderation.pending_hint': 'New offers waiting for approval', 'admin.moderation.active_hint': 'Visible offers you can block', 'admin.moderation.pending_empty': 'No new offers to approve', 'admin.moderation.active_empty': 'No active offers found', 'admin.reports.reviewed': 'Reviewed', 'admin.reports.dismiss': 'Dismiss', 'admin.pagination.total': 'Total', 'admin.users.role.change': 'Change role', 'admin.users.search.placeholder': 'Search name or email...', 'admin.tasks.delete': 'Delete', 'admin.tasks.delete.confirm': 'Permanently delete this task?', 'admin.tasks.search.placeholder': 'Search title...', 'admin.col.customer': 'Customer', 'admin.col.reporter': 'Reporter', 'admin.col.target': 'Target', 'admin.filter.all_roles': 'All roles', 'admin.filter.all_statuses': 'All statuses', 'admin.reports.target.task': 'Task', 'admin.reports.target.user': 'User', 'admin.tab.categories': 'Categories', 'admin.tab.locations': 'Cities & Districts', 'admin.tab.logs': 'Logs', 'admin.tab.plans': 'Plans', 'admin.tab.settings': 'Settings', 'admin.logs.subtab.ai': 'AI Logs', 'admin.logs.subtab.activity': 'Activity', 'admin.logs.subtab.mail': 'Mail', 'admin.logs.subtab.notifications': 'Notifications', 'admin.notif_logs.type': 'Type', 'admin.notif_logs.title': 'Title', 'admin.notif_logs.read': 'Read', 'admin.notif_logs.empty': 'No notification logs', 'admin.stats.notif_chart_title': 'Notifications per day', 'admin.stats.notif_label': 'Notifications', 'admin.stats.mail_chart_title': 'Emails per day', 'admin.stats.mail_label': 'Emails', 'admin.filter.all': 'All', 'admin.stats.specialists': 'Helpers', 'admin.col.plan': 'Plan', 'admin.back_home': 'Home', 'admin.plans.title': 'Subscription plans', 'admin.plans.add': '+ New plan', 'admin.plans.empty': 'No plans created', 'admin.plans.form.new': 'New plan', 'admin.plans.form.edit': 'Edit plan', 'admin.plans.form.name': 'Name', 'admin.plans.form.price': 'Price (EUR)', 'admin.plans.form.old_price': 'Old price (EUR, optional)', 'admin.plans.form.max_offers': 'Max offers (empty = no limit)', 'admin.plans.form.max_cards': 'Max offers (empty = no limit)', 'admin.plans.form.duration_days': 'Duration (days, empty = no expiry)', 'admin.plans.form.description': 'Description', 'admin.plans.form.features': 'Features (one per line)', 'admin.plans.form.notify': 'Notify about new tasks', 'admin.plans.form.default': 'Default', 'admin.plans.form.active': 'Active', 'admin.plans.form.order': 'Order', 'admin.plans.form.role': 'Role', 'admin.plans.form.tier': 'Tier', 'admin.plans.form.role.customer': 'Customer', 'admin.plans.form.role.specialist': 'Helper', 'admin.plans.form.tier.free': 'Free', 'admin.plans.form.tier.pro': 'Pro', 'admin.plans.form.tier.ultimate': 'Ultimate', 'admin.plans.form.section.limits': 'Limits (empty = unlimited)', 'admin.plans.form.max_messages_day': 'Max Messages/Day', 'admin.plans.form.max_orders_day': 'Max Orders/Day', 'admin.plans.form.max_skills': 'Max Skills', 'admin.plans.form.max_profiles': 'Max Profiles', 'admin.plans.form.max_portfolio': 'Max Portfolio Items', 'admin.plans.form.section.boost': 'Multipliers & Boost', 'admin.plans.form.search_boost': 'Search Boost', 'admin.plans.form.offers_multiplier': 'Offers Multiplier', 'admin.plans.form.section.contact': 'Contact Permissions', 'admin.plans.form.can_contact_free': 'Contact Free Plan users', 'admin.plans.form.can_contact_pro': 'Contact Pro Plan users', 'admin.plans.form.can_contact_all': 'Contact All users', 'admin.plans.form.can_show_contact': 'Show Contact Info', 'admin.plans.form.can_view_phone': 'View Phone', 'admin.plans.form.section.features': 'Feature Flags', 'admin.plans.form.upload_video': 'Upload Video', 'admin.plans.form.favorites': 'Favorites', 'admin.plans.form.google_calendar': 'Google Calendar', 'admin.plans.form.verified_badge': 'Verified Badge', 'admin.plans.form.highlighted_reviews': 'Highlighted Reviews', 'admin.plans.form.personal_site': 'Personal Site', 'admin.plans.form.can_help_now': 'Can Help Now Status', 'admin.plans.form.need_help': 'Need Help Status', 'admin.plans.form.auto_response': 'Auto Response', 'admin.plans.form.auto_match': 'Auto Match', 'admin.plans.form.price_list': 'Price List', 'admin.plans.form.instant_dispatch_free': 'Instant Dispatch (Free)', 'admin.plans.form.instant_dispatch_pro': 'Instant Dispatch (Pro)', 'admin.plans.badge.default': 'Default', 'admin.plans.badge.inactive': 'Inactive', 'admin.plans.make_default': 'Set as default', 'admin.plans.tasks': 'Tasks', 'admin.plans.offers': 'Offers', 'admin.plans.cards': 'Offers', 'admin.plans.notify_tasks': 'Task notifications', 'admin.plans.delete.confirm': 'Delete plan', 'admin.activity.title': 'Activity log', 'admin.activity.event': 'Event', 'admin.activity.all_events': 'All events', 'admin.activity.from': 'From', 'admin.activity.to': 'To', 'admin.activity.reset': 'Reset', 'admin.activity.total': 'Total', 'admin.activity.empty': 'No records', 'admin.mail.event': 'Email event', 'admin.mail.all_events': 'All email events', 'admin.mail.from': 'From', 'admin.mail.to': 'To', 'admin.mail.reset': 'Reset', 'admin.mail.total': 'Total', 'admin.mail.empty': 'No email logs', 'admin.mail.recipient': 'Recipient', 'admin.mail.provider': 'Provider', 'admin.mail.details': 'Details', 'admin.mail.status': 'Status', 'admin.mail.success': 'Success', 'admin.mail.failed': 'Failed', 'admin.event.email_sent': 'Email sent', 'admin.event.email_failed': 'Email failed', 'admin.event.email_dev': 'Email DEV fallback', 'admin.event.admin_email_test_sent': 'Admin test email sent', 'admin.event.admin_email_test_failed': 'Admin test email failed', 'admin.logs.empty': 'No records', 'admin.logs.date': 'Date', 'admin.logs.provider': 'Provider', 'admin.logs.model': 'Model', 'admin.logs.action': 'Action', 'admin.logs.langs': 'Languages', 'admin.logs.in': 'In', 'admin.logs.out': 'Out', 'admin.logs.total': 'Total', 'admin.logs.ms': 'ms', 'admin.logs.status': 'Status', 'admin.stats.activity_30d': 'Activity over 30 days', 'admin.stats.tasks_label': 'Tasks', 'admin.stats.users_label': 'Users', 'admin.stats.specialists_label': 'Helpers', 'admin.stats.tokens_title': 'Token usage (by month)', 'admin.stats.tokens_out': 'Output', 'admin.stats.tokens_in': 'Input', 'admin.stats.tokens_out_label': 'Output tokens', 'admin.stats.tokens_in_label': 'Input tokens', 'admin.stats.cost_label': 'Cost (USD)', 'admin.stats.tasks_by_status': 'Tasks by status', 'admin.task_status.open': 'Open', 'admin.task_status.in_progress': 'In progress', 'admin.task_status.completed': 'Completed', 'admin.task_status.cancelled': 'Cancelled', 'admin.task_status.draft': 'Drafts', 'admin.settings.tab.general': 'General', 'admin.settings.tab.smtp': 'E-Mail', 'admin.settings.tab.notifications': 'Notifications', 'admin.settings.tab.payment': 'Payment', 'admin.settings.tab.referral': 'Referrals', 'admin.settings.tab.seo': 'SEO', 'admin.settings.tab.socials': 'Socials', 'admin.settings.tab.telegram': 'Telegram Bot', 'admin.settings.telegram.title': 'Telegram Bot Settings', 'admin.settings.telegram.help': 'Create a bot via @BotFather. Use @userinfobot to get chat IDs.', 'admin.settings.telegram.bot_token': 'Bot Token', 'admin.settings.telegram.admin_chat_id': 'Admin Chat ID', 'admin.settings.telegram.admin_chat_hint': 'First send /start to your bot, then use @userinfobot to get your chat ID', 'admin.settings.telegram.channel_id': 'Channel ID', 'admin.settings.telegram.channels_title': 'Language Channels', 'admin.settings.telegram.channel_hint': 'Public channel @username or numeric ID', 'admin.settings.telegram.notify_registrations': 'Notify on new registrations', 'admin.settings.telegram.notify_registrations_hint': 'Send admin a message when a new user registers', 'admin.settings.telegram.post_new_tasks': 'Post new tasks to channel', 'admin.settings.telegram.post_new_tasks_hint': 'Automatically publish new tasks to the Telegram channel', 'admin.settings.telegram.test': 'Test', 'admin.settings.telegram.verify': 'Verify', 'admin.settings.telegram.test_ok': 'Connection successful', 'admin.settings.telegram.test_fail': 'Connection failed', 'admin.settings.socials.title': 'Social Network Links', 'admin.settings.socials.hint': 'Filled links are displayed in the site footer', 'admin.settings.seo.maintenance_label': 'Maintenance Mode', 'admin.settings.seo.maintenance_hint': 'Show a maintenance page to all visitors', 'admin.settings.seo.indexing_label': 'Search Engine Indexing', 'admin.settings.seo.indexing_hint': 'Allow search engines to index the site', 'admin.settings.seo.head_scripts_label': ' Scripts (JS)', 'admin.settings.seo.head_scripts_hint': 'Runs on every page (Google Tag Manager, analytics, etc.)', 'admin.settings.seo.site_title_label': 'Site Title', 'admin.settings.seo.site_description_label': 'Site Description (meta description)', 'admin.settings.referral.title': 'Referral program', 'admin.settings.referral.hint': 'Reward users who bring new registrations.', 'admin.settings.referral.enabled_label': 'Enabled', 'admin.settings.referral.enabled_hint': 'Enable / disable reward application', 'admin.settings.referral.customer_section': 'For customers', 'admin.settings.referral.specialist_section': 'For helpers', 'admin.settings.referral.plan_label': 'Reward plan', 'admin.settings.referral.no_plan': '— no plan —', 'admin.settings.referral.plan_hint': 'This plan will be assigned to the referrer. If their current plan is higher, only days will be added.', 'admin.settings.referral.days_label': 'Reward days', 'admin.settings.referral.days_hint': 'Number of days added to the plan expiry.', 'admin.settings.general.title': 'General settings', 'admin.settings.general.site_name': 'Site name', 'admin.settings.general.site_url': 'Site URL', 'admin.settings.general.contact_email': 'Contact email', 'admin.settings.general.support_phone': 'Support phone', 'admin.settings.smtp.title': 'SMTP settings', 'admin.settings.smtp.hint': 'Used to send email notifications.', 'admin.settings.smtp.host': 'SMTP Host', 'admin.settings.smtp.port': 'Port', 'admin.settings.smtp.encryption': 'Encryption', 'admin.settings.smtp.enc.none': 'None', 'admin.settings.smtp.enc.tls': 'STARTTLS (port 587)', 'admin.settings.smtp.enc.ssl': 'SSL/TLS (port 465)', 'admin.settings.smtp.username': 'Username', 'admin.settings.smtp.password': 'Password / App Password', 'admin.settings.smtp.from_name': 'Sender name', 'admin.settings.smtp.from_email': 'Sender email', 'admin.settings.smtp.test': 'Send test email', 'admin.settings.smtp.sending': 'Sending...', 'admin.settings.payment.hint': 'ePay Piraeus Bank credentials.', 'admin.settings.env.test': 'Test (sandbox)', 'admin.settings.env.prod': 'Production', 'admin.settings.env.label': 'Environment', 'admin.settings.merchant_id': 'Merchant ID', 'admin.settings.api_user': 'API User', 'admin.settings.api_password': 'API Password', 'admin.settings.confirm_url': 'Confirmation URL (webhook)', 'admin.settings.cancel_url': 'Cancel URL', 'admin.settings.active': 'Active', 'admin.settings.saving': 'Saving...', 'admin.settings.saved': 'Saved', 'admin.notif.vars_hint': 'Available variables in templates', 'admin.notif.tmpl.not_set': 'Template not configured', 'admin.notif.tmpl.subject_label': 'Email subject', 'admin.notif.tmpl.body_label': 'Email body (HTML)', 'admin.notif.tmpl.save': 'Save', 'admin.notif.tmpl.close': 'Close', 'admin.notif.tmpl.translate': 'Auto-translate to other languages', 'admin.notif.tmpl.translating': 'Translating...', 'admin.notif.tmpl.saving': 'Saving...', 'admin.notif.email_verification': 'Email verification', 'admin.notif.registration_success': 'Successful registration', 'admin.notif.password_reset': 'Password reset', 'admin.notif.new_offer': 'New offer', 'admin.notif.new_task': 'New task', 'admin.notif.offer_accepted': 'Offer accepted', 'admin.notif.new_message': 'New message', 'admin.notif.offer_declined': 'Offer declined', 'admin.notif.offer_other_accepted': 'Another specialist chosen', 'admin.notif.task_updated': 'Task updated', 'admin.notif.deadline_reminder': 'Deadline reminder', 'admin.notif.task_archived': 'Task unpublished automatically', 'admin.notif.referral_reward': 'Referral reward', // Plan lifecycle email templates 'admin.email_template.plan_activated': 'Plan activated', 'admin.email_template.plan_upgraded': 'Plan upgraded', 'admin.email_template.plan_downgrade_scheduled': 'Downgrade scheduled', 'admin.email_template.plan_downgrade_applied': 'Downgrade applied', 'admin.email_template.plan_renewal_reminder': 'Renewal reminder', 'admin.email_template.plan_insufficient_funds': 'Insufficient funds warning', // Pricing confirm modal 'pricing.confirm.title': 'Confirm plan selection', 'pricing.confirm.plan': 'Plan', 'pricing.confirm.prorated': 'Prorated credit', 'pricing.confirm.effective_price': 'Amount due', 'pricing.confirm.your_balance': 'Your balance', 'pricing.confirm.downgrade_info': 'The switch to the new plan will happen automatically after the current period ends.', 'pricing.confirm.insufficient': 'Insufficient balance.', 'pricing.confirm.top_up': 'Top up', 'pricing.confirm.schedule_downgrade': 'Schedule downgrade', 'pricing.confirm.pay': 'Pay', 'admin.user_edit.title': 'Edit user', 'admin.user_edit.email': 'Email', 'admin.user_edit.email_verified': 'Email verified', 'admin.user_edit.email_not_verified': 'Email not verified', 'admin.user_edit.verify_email_btn': 'Verify manually', 'admin.user_edit.verify_email_done': 'Email verified!', 'admin.user_edit.id': 'ID', 'admin.user_edit.registered': 'Registered', 'admin.user_edit.last_seen': 'Last seen', 'admin.user_edit.lang': 'Language', 'admin.user_edit.first_name': 'First name', 'admin.user_edit.last_name': 'Last name', 'admin.user_edit.phone': 'Phone', 'admin.user_edit.bio': 'Bio', 'admin.user_edit.role': 'Role', 'admin.user_edit.plan': 'Plan', 'admin.user_edit.no_plan': '— No plan —', 'admin.user_edit.active': 'Active account', 'admin.user_edit.published': 'Published', 'admin.user_edit.balance': 'Balance (EUR)', 'admin.user_edit.skills': 'Skills', 'admin.user_edit.tab.profile': 'Profile', 'admin.user_edit.tab.account': 'Account', 'admin.user_edit.tab.balance': 'Balance', 'admin.user_edit.tab.settings': 'Settings', 'admin.user_edit.tab.specialist': 'Offers', 'admin.user_edit.tab.site': 'Website', 'admin.user_edit.plan_expires': 'Plan expires', 'admin.user_edit.interface_lang': 'Interface language', 'admin.user_edit.comm_languages': 'Communication languages', 'admin.user_edit.personal_site_slug': 'Personal page', 'admin.user_edit.show_contact_info': 'Show contact info', 'admin.user_edit.show_contact_info.hint': 'Visible to customers', 'admin.user_edit.notify_new_tasks': 'Notify about new tasks', 'admin.user_edit.notify_new_tasks.hint': 'Push and email notifications', 'admin.user_edit.notif_messages': 'Message notifications', 'admin.user_edit.notif_messages.hint': 'New messages in chat', 'admin.user_edit.site_settings': 'Personal page settings', 'admin.user_edit.categories': 'Service categories', 'admin.user_edit.locations': 'Service areas', 'admin.user_edit.skill_placeholder': 'New skill...', 'admin.user_edit.add_category': '— Select category —', 'admin.user_edit.add_location': '— Select location —', 'admin.user_edit.specialist_cards': 'Offers', 'admin.user_edit.no_cards': 'No offers found', 'admin.user_edit.card_title': 'Offer title', 'admin.user_edit.card_description': 'Description', 'admin.balance.topup.btn': 'Top up', 'admin.balance.withdraw.btn': 'Withdraw', 'admin.balance.modal_hint': 'Changes take effect immediately and are recorded in history', 'admin.balance.topup.title': 'Top up balance', 'admin.balance.topup.amount': 'Amount', 'admin.balance.topup.description': 'Comment', 'admin.balance.topup.description.placeholder': 'For example: bonus or manual top-up', 'admin.balance.topup.submit': 'Top up balance', 'admin.balance.withdraw.title': 'Withdraw balance', 'admin.balance.withdraw.amount': 'Amount', 'admin.balance.withdraw.description': 'Comment', 'admin.balance.withdraw.description.placeholder': 'For example: refund or manual debit', 'admin.balance.withdraw.submit': 'Withdraw from balance', 'admin.user_edit.role.customer': 'Customer', 'admin.user_edit.role.user': 'User', 'admin.user_edit.role.specialist': 'Helper', 'admin.user_edit.role.admin': 'Administrator', 'common.refresh': 'Refresh', 'common.back_home': 'Home', 'admin.loc.hint': 'Manage cities and districts', 'admin.loc.add_city': 'New city', 'admin.loc.add_district': 'Add district', 'admin.loc.new': 'New location', 'admin.loc.edit': 'Edit location', 'admin.loc.district': 'district', 'admin.loc.empty': 'No locations', 'admin.loc.delete.confirm': 'Delete location? All districts will also be deleted.', 'admin.cat.add_root': 'New category', 'admin.cat.add_sub': 'Subcategory', 'admin.cat.edit': 'Edit', 'admin.cat.delete': 'Delete', 'admin.cat.delete.confirm': 'Delete category? All subcategories will also be deleted.', 'admin.cat.slug': 'Slug', 'admin.cat.icon': 'Icon', 'admin.cat.name_el': 'Greek', 'admin.cat.name_en': 'English', 'admin.cat.name_ru': 'Russian', 'admin.cat.name_uk': 'Ukrainian', 'admin.cat.active': 'Active', 'admin.cat.parent': 'Parent category', 'admin.cat.no_parent': 'Top level', 'admin.cat.save': 'Save', 'admin.cat.cancel': 'Cancel', 'admin.cat.empty': 'No categories', 'admin.cat.hint': 'Manage categories with multi-level hierarchy', 'admin.cat.new': 'New category', 'admin.cat.subcategory': 'subcategory', 'admin.cat.add_child': 'Add subcategory', 'admin.cat.inactive': 'Inactive', 'admin.event.user_login': 'Login', 'admin.event.user_register': 'Registration', 'admin.event.admin_user_deactivate': 'User blocked', 'admin.event.admin_user_activate': 'User activated', 'admin.event.admin_user_role_changed': 'Role changed', 'admin.event.admin_task_cancelled': 'Task cancelled', 'admin.event.admin_task_deleted': 'Task deleted', 'admin.event.admin_report_reviewed': 'Report reviewed', 'admin.event.admin_report_dismissed': 'Report dismissed', 'admin.event.task_created': 'Task created', // User status 'user.online': 'Online', 'user.seen_minutes': 'was here {n} min ago', 'user.seen_hours': 'was here {n} hr ago', 'user.seen_yesterday': 'was here yesterday', 'user.seen_days': 'was here {n} days ago', // Specialists 'specialists.title': 'Offers', 'specialists.search': 'Search specialist...', 'specialists.search.btn': 'Search', 'specialists.empty': 'No specialists found', 'specialists.no_bio': 'No description', 'specialists.view': 'View profile', 'specialists.reviews': 'reviews', 'specialist.favorite': 'Add to favorites', 'specialist.unfavorite': 'Remove from favorites', 'specialist.site_link': 'Personal site', 'favorites.specialists.title': 'Favourite specialists', 'favorites.specialists.empty': 'No favourite specialists yet', 'nav.favorites': 'Favourites', 'nav.schedule': 'Schedule', 'nav.find_tasks': 'Find Orders', 'schedule.title': 'My Schedule', 'schedule.subtitle': 'Mark the days when you are free or busy — clients will see your availability', 'schedule.available': 'Available', 'schedule.busy': 'Busy', 'schedule.unset': 'Not set', 'schedule.click_hint': '← click to cycle status', 'schedule.range_mode': 'Select range', 'schedule.range_from': 'From {date} — select end date', 'schedule.click_to_set': 'Click to set', 'schedule.free': 'free', 'schedule.busy_count': 'busy', 'schedule.free_days': 'free days', 'schedule.googleCalendar': 'Google Calendar', 'schedule.connectGoogle': 'Connect Google Calendar', 'schedule.disconnectGoogle': 'Disconnect', 'schedule.connectedAs': 'Connected as', 'schedule.importFromGoogle': 'Sync from Google', 'schedule.gcalConnected': '\u2713 Google Calendar connected', 'schedule.gcalError': 'Google Calendar connection error', 'schedule.gcalImportDone': 'Imported {n} days from Google Calendar', 'schedule.gcalAutoSyncNote': 'Availability changes are automatically synced to Google Calendar', 'schedule.gcalConnectDesc': 'Connect Google Calendar to automatically sync your availability', 'schedule.gcalDisconnectConfirm': 'Disconnect Google Calendar?', 'find_tasks.title': 'Find Orders', 'find_tasks.for_me': 'For me', 'find_tasks.all': 'All orders', 'find_tasks.by_category': 'By category', 'find_tasks.list': 'List', 'find_tasks.already_offered': 'Offer sent', 'find_tasks.offer_now': 'Make an offer', 'find_tasks.empty_for_me': 'No tasks found in your categories', 'find_tasks.banner_hint': 'Find tasks matching your portfolio categories', 'find_tasks.no_cards': 'Create a specialist portfolio to see tasks matched to you', 'find_tasks.add_card': 'Create portfolio', 'find_tasks.search': 'Search tasks...', 'find_tasks.tasks_count': 'tasks', 'footer.tagline': 'The task platform for Greece', 'footer.rights': 'All rights reserved.', 'nav.privacy': 'Privacy Policy', 'nav.delete_account': 'Delete Account', 'delete_account.title': 'Request Account Deletion', 'delete_account.subtitle': 'Once we verify your request, we will permanently delete your account and data within 30 days.', 'delete_account.warning': 'This action cannot be undone. All your data will be permanently deleted.', 'delete_account.reason_label': 'Reason (optional)', 'delete_account.reason_placeholder': 'Tell us why you want to delete your account...', 'delete_account.confirm_label': 'I confirm that I want to permanently delete my account', 'delete_account.submit': 'Submit request', 'delete_account.submitting': 'Submitting...', 'delete_account.success_title': 'Your request has been received', 'delete_account.success_body': 'We will process your request within 30 days and notify you by email.', 'delete_account.login_required': 'You must be logged in to submit a deletion request.', 'delete_account.login_btn': 'Log in', // App download section 'app.download_title': 'Download the CanHelp mobile app', 'app.download_desc': 'All of CanHelp — always at your fingertips. Available for Android and iOS.', // Nav 'nav.pricing': 'Pricing', // Pricing page 'pricing.title': 'Pricing', 'pricing.subtitle': 'Choose the right plan for you', 'pricing.role.customer': 'Customer', 'pricing.role.specialist': 'Specialist', 'pricing.free': 'Free', 'pricing.per_month': 'mo', 'pricing.duration': 'Duration', 'pricing.days': 'days', 'pricing.current_plan': 'Your plan', 'pricing.popular': 'Popular', 'pricing.choose': 'Choose', 'pricing.your_plan': 'Active plan', 'pricing.free_default': 'Default', 'pricing.compare': 'Compare features', 'pricing.feature': 'Feature', 'pricing.faq_note': 'Payment is deducted from your CanHelp balance. Top up available in Payments.', 'pricing.feat.messages': 'Messages / day', 'pricing.feat.orders': 'Orders / day', 'pricing.feat.contact_all': 'Contact everyone', 'pricing.feat.view_phone': 'View phone number', 'pricing.feat.show_contact': 'Show contact info', 'pricing.feat.favorites': 'Favorites', 'pricing.feat.verified_badge': 'Verified badge', 'pricing.feat.google_calendar': 'Google Calendar', 'pricing.feat.personal_site': 'Personal site', 'pricing.feat.auto_response': 'Auto-response', 'pricing.feat.auto_match': 'Auto-match', 'pricing.feat.highlighted_reviews': 'Highlighted reviews', 'pricing.feat.portfolio': 'Offer items', 'pricing.feat.cards': 'Number of offers', 'pricing.feat.notify_tasks': 'New task notifications', 'pricing.feat.video': 'Video in offer', // Upgrade prompt 'upgrade.available_in': 'Available in', 'upgrade.cta': 'Upgrade', // Dashboard plan block 'dashboard.plan.title': 'My Plan', 'dashboard.plan.expires': 'Expires in {n} days', 'dashboard.plan.upgrade': 'Upgrade plan', 'dashboard.plan.no_plan': 'Free plan', 'dashboard.plan.messages': 'Messages today', 'dashboard.plan.orders': 'Orders today', 'dashboard.plan.limits': 'Daily limits', 'dashboard.plan.features': 'Features', 'dashboard.plan.stats': 'Stats', 'dashboard.stats.cards': 'Portfolios', 'dashboard.stats.maxCards': 'Max portfolios', 'dashboard.stats.portfolioItems': 'Portfolio items', 'dashboard.stats.maxPortfolioItems': 'Max items', 'dashboard.stats.activeOffers': 'Active offers', 'dashboard.stats.reviewsReceived': 'Reviews', 'dashboard.stats.activeTasks': 'Active tasks', 'dashboard.stats.completedTasks': 'Completed', 'status.need_help': 'I need help', 'status.active': 'Active', 'status.toggle_on': 'Enable', 'status.toggle_off': 'Disable', // FOMO 'fomo.missed_orders': 'Missed {n} orders', 'fomo.missed_value': 'Worth €{v}', 'fomo.upgrade_hint': 'Upgrade to receive more orders', 'fomo.conversion': 'Task conversion', 'fomo.active': 'Active', 'fomo.with_offers': 'With offers', 'fomo.completed': 'Completed', 'fomo.already_offered': '{n} specialists have already responded', 'fomo.specialist_missed': 'You missed {n} orders', 'fomo.top_categories': 'Categories', 'fomo.offers_received': 'offers received', 'fomo.avg_offers': 'Avg {n}/task', 'fomo.completion_rate': 'completed', // Task auto-match 'task.auto_match': 'Auto-match', 'task.auto_match_results': 'Top specialists', 'task.no_offer_yet': 'You haven\'t sent an offer yet', 'task.make_offer': 'Send offer', 'auto_response.title': 'Auto-Response', 'auto_response.enabled': 'Enable auto-response', 'auto_response.min_budget': 'Min budget', 'auto_response.max_budget': 'Max budget', 'auto_response.default_price': 'Default price', 'auto_response.default_message': 'Default message', 'auto_response.max_per_day': 'Max auto-offers per day', 'auto_response.save': 'Save', 'auto_response.saved': 'Saved', 'auto_response.categories': 'Categories', 'auto_response.locations': 'Locations', // Personal site 'profile.personal_site': 'Personal Site', 'profile.site_slug': 'URL slug', 'profile.site_slug_hint': 'Only latin letters, numbers, - and _', 'profile.site_open': 'Open site', 'profile.site_preview': 'Your site', 'profile.show_contact': 'Show contact info', 'profile.show_contact_hint': 'Customers with Pro/Ultimate plans will see your phone number', // Google Calendar plan gate 'gcal.upgrade_required': 'Google Calendar requires a Pro or Ultimate plan', // Chat limits 'chat.limit_warning': '{n} messages left today', 'chat.limit_reached': 'Message limit reached. Upgrade your plan', 'chat.upgrade': 'Upgrade', // Site page 'site.member_since': 'Member since', 'site.rating': 'Rating', 'site.completed_tasks': 'Completed', 'site.languages': 'Languages', 'site.photos': 'photos', 'site.contact_form': 'Get in touch', 'site.contact_sent': 'Message sent!', 'site.contact_sent_desc': 'The specialist will contact you soon', 'site.contact_name': 'Name', 'site.contact_name_ph': 'Your name', 'site.contact_email_ph': 'your@email.com', 'site.contact_message': 'Message', 'site.contact_message_ph': 'Describe your task...', 'site.contact_send': 'Send', 'site.share': 'Share', 'site.speaks_languages': 'Speaks', 'site.message_sent': 'Message sent!', 'site.message_sent_desc': 'The specialist will receive it in the chat', 'site.message_placeholder': 'Write your message...', 'site.write_to_chat': 'Write to chat', 'site.auth_required_title': 'Sign in required', 'site.auth_required_desc': 'To write in the chat, you need to sign in to your CanHelp account.', 'site.auth_login_btn': 'Sign in', 'site.auth_contact_form_btn': 'Contact via feedback form', 'specialist.services': 'Services', 'portfolio.title': 'Portfolio', 'status.can_help_now': 'Available now', 'common.not_found': 'Page not found', 'common.anonymous': 'Anonymous', 'specialist_setup.page_title': 'Specialist profile setup', 'specialist_setup.step_of': 'Step {current} of {total}', 'specialist_setup.next': 'Next', 'specialist_setup.back': 'Back', 'specialist_setup.skip': 'Skip', 'specialist_setup.finish': 'Finish', 'specialist_setup.go_to_profile': 'Go to profile', 'specialist_setup.browse_tasks': 'Browse tasks', 'specialist_setup.step1.title': 'Welcome!', 'specialist_setup.step1.subtitle': "Let's set up your profile", 'specialist_setup.step1.desc': 'A complete profile helps you find more clients. Follow the steps to create the perfect specialist profile.', 'specialist_setup.step1.what_next': 'What we will do:', 'specialist_setup.step1.item1': 'Fill in basic information', 'specialist_setup.step1.item2': 'Create a service card', 'specialist_setup.step1.item3': 'Add skills and categories', 'specialist_setup.step1.item4': 'Select service area', 'specialist_setup.step1.item5': 'Upload portfolio photos', 'specialist_setup.step2.title': 'Basic profile', 'specialist_setup.step2.subtitle': 'Tell us about yourself', 'specialist_setup.step2.bio_label': 'About me', 'specialist_setup.step2.bio_placeholder': 'Describe your experience, services you offer...', 'specialist_setup.step2.phone_label': 'Phone', 'specialist_setup.step2.phone_placeholder': '+30 6900000000', 'specialist_setup.step2.photo_label': 'Profile photo', 'specialist_setup.step2.photo_btn': 'Upload photo', 'specialist_setup.step2.photo_uploading': 'Uploading...', 'specialist_setup.step2.photo_hint': 'Shown on your profile', 'specialist_setup.step3.title': 'Service card', 'specialist_setup.step3.subtitle': 'Create your first service card', 'specialist_setup.step3.title_label': 'Card title', 'specialist_setup.step3.title_placeholder': 'E.g. Plumber, Electrician, Cleaning...', 'specialist_setup.step3.desc_label': 'Description', 'specialist_setup.step3.desc_placeholder': 'Describe in detail what you offer, your experience, advantages...', 'specialist_setup.step3.title_required': 'Title is required', 'specialist_setup.step4.title': 'Skills & Categories', 'specialist_setup.step4.subtitle': 'Add skills and select categories', 'specialist_setup.step4.skills_label': 'Skills', 'specialist_setup.step4.skills_placeholder': 'E.g. Pipe installation...', 'specialist_setup.step4.skills_add': 'Add', 'specialist_setup.step4.categories_label': 'Categories', 'specialist_setup.step5.title': 'Service area', 'specialist_setup.step5.subtitle': 'Where do you provide services?', 'specialist_setup.step5.hint': 'Select cities or specific areas', 'specialist_setup.done.title': 'Your profile is ready!', 'specialist_setup.done.subtitle': 'Congratulations! Your profile has been set up', 'specialist_setup.done.desc': 'You can now receive orders from clients. Browse tasks that match your skills.', // Support 'support.title': 'Support', 'support.type.label': 'Request type', 'support.type.bug': 'Bug report', 'support.type.suggestion': 'Suggestion', 'support.type.other': 'Other', 'support.subject': 'Subject', 'support.subject.placeholder': 'Brief description...', 'support.body': 'Message', 'support.body.placeholder': 'Describe the issue or suggestion in detail...', 'support.submit': 'Submit', 'support.cancel': 'Cancel', 'support.error': 'Failed to send. Please try again.', 'support.sent.title': 'Request received!', 'support.sent.body': 'We will reply to your email as soon as possible.', 'support.sent.close': 'Close', 'admin.tab.support': 'Support', 'admin.tab.backup': 'Backup', 'admin.tab.translations': 'Translations', 'admin.tab.dbcheck': 'DB Check', 'admin.tab.balances': 'Balances', 'admin.tab.push': 'Push', 'admin.tab.referrals': 'Referrals', 'admin.search': 'Search', 'admin.noData': 'No data', 'admin.cat.order': 'Order', 'admin.cat.skills': 'Skills', 'admin.plans.form.max_tasks': 'Max tasks', 'admin.settings.referral.shared_section': 'Shared referral settings', 'admin.settings.seo.title': 'SEO settings', 'admin.backup.title': 'Backup', 'admin.backup.tables': 'Tables', 'admin.backup.exportAll': 'Export all', 'admin.backup.importAll': 'Import all', 'admin.backup.exportTable': 'Export table', 'admin.backup.importTable': 'Import table', 'admin.backup.exporting': 'Exporting...', 'admin.backup.importing': 'Importing...', 'admin.backup.exportSuccess': 'Export completed', 'admin.backup.importSuccess': 'Import completed', 'admin.backup.autoBackup': 'Auto backup', 'admin.backup.autoBackupDesc': 'Automatic daily backup', 'admin.backup.storedBackups': 'Stored backups', 'admin.backup.noStoredBackups': 'No stored backups', 'admin.backup.restore': 'Restore', 'admin.backup.restoreConfirm': 'Restore from backup?', 'admin.backup.restoreSuccess': 'Restore completed', 'admin.backup.restoring': 'Restoring...', 'admin.backup.date': 'Date', 'admin.backup.size': 'Size', 'admin.backup.today': 'Today', 'admin.backup.yesterday': 'Yesterday', 'admin.balance.col.operation': 'Operation', 'admin.balance.col.amount': 'Amount', 'admin.balance.col.result': 'Balance', 'admin.balance.col.description': 'Description', 'admin.balance.col.date': 'Date', 'admin.balance.empty': 'No records yet', 'admin.balance.filter.all': 'All operations', 'admin.balance.filter.user_id': 'Filter by userId', 'admin.balance.kind.topup': 'Top-up', 'admin.balance.kind.plan_purchase': 'Plan charge', 'admin.balance.kind.admin_topup': 'Admin top-up', 'admin.balance.kind.admin_adjustment': 'Adjustment', 'admin.support.search': 'Search', 'admin.support.all_statuses': 'All statuses', 'admin.support.all_types': 'All types', 'admin.support.none': 'No tickets', 'admin.support.reply': 'Reply', 'admin.support.reply_placeholder': 'Type your reply...', 'admin.support.send_reply': 'Send reply', 'admin.support.cancel': 'Cancel', 'admin.support.close': 'Close', 'admin.support.status.open': 'Open', 'admin.support.status.in_progress': 'In progress', 'admin.support.status.resolved': 'Resolved', 'admin.support.status.closed': 'Closed', 'admin.support.your_reply': 'Your reply', 'admin.user_edit.visibility_requirements.title': 'Profile is not yet visible in Offers', 'admin.user_edit.visibility_requirements.hint': 'Visibility requirements:', 'admin.user_edit.visibility_requirements.bio': 'Fill in bio', 'admin.user_edit.visibility_requirements.published_card': 'Publish at least one card', 'admin.user_edit.visibility_requirements.categories': 'Add a category to a published card', 'admin.user_edit.visibility_requirements.locations': 'Add a location to a published card', 'auto_response.desc': 'Automatically respond to matching tasks', 'auto_response.budget_range': 'Task budget', 'auto_response.message_placeholder': 'Hello! I can help with this task...', 'profile.background.title': 'Profile header background', 'profile.background.hint': 'Shown in the public profile header on web and mobile app.', 'profile.photo.uploading': 'Uploading...', 'profile.balance.history': 'Operation history', 'profile.balance.history.last': 'Latest operations', 'profile.balance.history.empty': 'No operations yet', 'profile.balance.history.balance_after': 'Balance after', 'profile.balance.history.kind.topup': 'Balance top-up', 'profile.balance.history.kind.plan_purchase': 'Plan charge', 'profile.balance.history.kind.admin_topup': 'Admin top-up', 'profile.balance.history.kind.admin_adjustment': 'Admin adjustment', 'profile.plan_history.title': 'Plan history', 'profile.plan_history.empty': 'Plan change history is empty', 'profile.plan_history.expires': 'Until', 'profile.plan_history.days': 'days', 'profile.plan_history.event.activated': 'Activated', 'profile.plan_history.event.renewed': 'Renewed', 'profile.plan_history.event.downgraded': 'Downgraded', 'profile.plan_history.event.referral_reward': 'Referral reward', 'profile.plan_history.event.admin_change': 'Changed by admin', 'profile.plan_history.event.expired': 'Expired', 'profile.show_contact_desc': 'Lets clients contact you directly', 'profile.site.visible.price_list': 'Price list', 'site.pricelist': 'Price list', 'status.plan_required': 'Status is unavailable on your current plan', 'status.admin_not_applicable': 'User status is not applicable to admin accounts' }, ru: { 'footer.slogan': 'Ваша задача — наша забота! Решаем любые вопросы быстро и удобно.', 'footer.links': 'Ссылки', 'footer.socials': 'Мы в соцсетях', 'nav.home': 'Главная', 'nav.tasks': 'Задачи', 'nav.post': '+ Опубликовать', 'nav.dashboard': 'Мои задачи', 'nav.chat': 'Сообщения', 'nav.notifications': 'Уведомления', 'nav.profile': 'Профиль', 'nav.admin': 'Админка', 'nav.specialists': 'Предложения', 'nav.new_task': 'Новая задача', 'nav.login': 'Войти', 'nav.register': 'Регистрация', 'nav.logout': 'Выйти', 'hero.title': 'Каждый человек может чем-то помочь', 'hero.subtitle': 'Найди помощь, предложи свои навыки или зарабатывай, помогая другим', 'hero.cta.post': 'Найти помощь', 'hero.cta.browse': 'Предложить помощь', 'hero.cta.specialists': 'Найти работу', 'hero.search.placeholder': 'Что нужно? напр. электрик, уборка...', 'hero.specialist.title': 'Найдите заказы рядом с вами', 'hero.specialist.subtitle': 'Откройте заказы в своих категориях и отправьте предложение', 'hero.specialist.cta': 'Найти заказы', 'hero.specialist.search.placeholder': 'Поиск заказов... напр. электрика, уборка', 'section.categories.specialist': 'Найдите заказы по категории', 'section.cities.specialist': 'Заказы по городу', 'how.specialist.step1.title': 'Создайте карточку специалиста', 'how.specialist.step1.desc': 'Укажите категории, навыки и районы — система найдёт подходящие заказы автоматически', 'how.specialist.step2.title': 'Найдите подходящие заказы', 'how.specialist.step2.desc': 'Просматривайте заказы в своих категориях и начните работу сразу', 'how.specialist.step3.title': 'Отправьте предложение и зарабатывайте', 'how.specialist.step3.desc': 'Подайте предложение с ценой и сроками, общайтесь с клиентами и выполняйте заказы', 'stats.specialists': 'предложений', 'stats.tasks': 'задач', 'stats.categories': 'категорий', 'stats.free': 'бесплатная регистрация', 'promo.title': 'Получи Pro бесплатно — только до конца года', 'promo.subtitle': 'Зарегистрируйся сейчас и пользуйся тарифом Pro без оплаты. Акция заканчивается 31 декабря.', 'promo.cta': 'Зарегистрироваться', 'promo.days': 'дней', 'promo.hours': 'часов', 'promo.minutes': 'минут', 'promo.seconds': 'сек.', 'section.categories': 'Создай задачу в любой категории', 'section.how': 'Как это работает', 'section.recent': 'Последние задачи', 'section.all': 'Смотреть все →', 'section.more': 'ещё', 'section.cities': 'Города и районы', 'section.community': 'Общественный проект для всех', 'community.subtitle': 'CanHelp — не просто маркетплейс, это сообщество взаимопомощи. Любой, у кого есть знания или навык, может найти клиента. Любой, у кого есть задача, может найти специалиста.', 'community.point1.title': 'Умеете что-то делать?', 'community.point1.desc': 'Ремонт, репетиторство, дизайн, переводы, уход — каждый навык имеет ценность. Создайте профиль и находите клиентов рядом с вами.', 'community.point2.title': 'Нужна помощь?', 'community.point2.desc': 'Опубликуйте задачу за минуту и получайте предложения от проверенных специалистов в вашем городе.', 'community.point3.title': 'Помогите проекту расти', 'community.point3.desc': 'CanHelp развивается благодаря сообществам. Поделитесь ссылкой с друзьями и знакомыми — вместе мы строим что-то полезное для всех.', 'community.share': 'Поделиться с друзьями', 'community.share.copied': 'Ссылка скопирована!', // Referral section on home page 'section.referral': 'Реферальная программа', 'referral.home.subtitle': 'Поделитесь ссылкой — каждый новый пользователь, зарегистрировавшийся по ней, принесёт вам награду.', 'referral.home.step1.title': 'Зарегистрируйтесь и получите ссылку', 'referral.home.step1.desc': 'Создайте аккаунт и найдите свою уникальную реферальную ссылку в профиле.', 'referral.home.step2.title': 'Поделитесь с друзьями', 'referral.home.step2.desc': 'Отправьте ссылку друзьям, знакомым или опубликуйте в социальных сетях.', 'referral.home.step3.title': 'Получайте награды', 'referral.home.step3.desc': 'Как только друг подтвердит email, вы автоматически получите свою награду.', 'referral.home.cta': 'Получить ссылку', 'referral.home.badge': 'Реферальная программа', // FAQ section 'section.faq': 'Частые вопросы', 'faq.q1': 'Как работает CanHelp?', 'faq.a1': 'Опубликуйте задачу, получите предложения от специалистов, выберите лучшего и начните сотрудничество. Это быстро, просто и бесплатно для клиентов.', 'faq.q2': 'Сколько стоит использование платформы?', 'faq.a2': 'Регистрация и публикация задач полностью бесплатны для клиентов. Специалисты имеют доступ к бесплатному плану, а также к премиум-опциям.', 'faq.q3': 'Как стать специалистом?', 'faq.a3': 'Зарегистрируйтесь, перейдите в «Стать специалистом», заполните профиль навыками и категориями и начните получать задачи.', 'faq.q4': 'Как выбрать подходящего специалиста?', 'faq.a4': 'Оцените отзывы, опыт, навыки и портфолио каждого специалиста. Общайтесь через чат платформы и уточняйте детали до принятия решения.', 'faq.q5': 'Что если я не доволен результатом?', 'faq.a5': 'Вы можете оставить отзыв о специалисте и поставить оценку от 1 до 5 звёзд. Отзывы помогают другим пользователям выбирать проверенных профессионалов.', 'faq.q6': 'Можно ли связаться со специалистом до принятия предложения?', 'faq.a6': 'Да. Как только вы получили предложение, можно открыть чат со специалистом, задать вопросы и уточнить все детали до принятия решения.', 'faq.q7': 'Сколько времени ждать предложений?', 'faq.a7': 'Как правило, в течение нескольких часов. Специалисты получают уведомление о новых задачах и могут быстро ответить.', 'faq.q8': 'Можно ли разместить задачу в любом городе Греции?', 'faq.a8': 'Да! CanHelp охватывает всю Грецию — Афины, Фессалоники, Патры и другие города.', 'faq.q9': 'Какие виды задач есть на CanHelp?', 'faq.a9': 'Ремонт, уборка, электрики, репетиторство, дизайн, IT, переезды, красота и многое другое. Категории постоянно расширяются.', 'faq.q10': 'Есть ли мобильное приложение?', 'faq.a10': 'Да! CanHelp доступно для Android и iOS. Скачайте приложение и управляйте всем со своего телефона.', 'how.step1.title': 'Опубликуй задачу', 'how.step1.desc': 'Опиши что нужно и установи бюджет', 'how.step2.title': 'Получи предложения', 'how.step2.desc': 'Специалисты пришлют предложения с ценой и сроками', 'how.step3.title': 'Выбери и начни', 'how.step3.desc': 'Выбери лучшего профессионала и начни сотрудничество', 'tasks.title': 'задач', 'tasks.filters': 'Фильтры', 'tasks.search': 'Поиск', 'tasks.search.placeholder': 'Название или ключевое слово...', 'tasks.search.btn': 'Поиск', 'tasks.publish': 'Опубликовать', 'tasks.category.all': 'Все', 'tasks.category.all_in': 'Все в', 'tasks.category.label': 'Категория', 'tasks.location.label': 'Город', 'tasks.location.placeholder': 'напр. Афины', 'tasks.empty': 'Задачи не найдены', 'tasks.empty.cta': 'Опубликуй первую', 'task.status.open': 'Открыта', 'task.status.in_progress': 'В работе', 'task.status.completed': 'Завершена', 'task.status.cancelled': 'Отменена', 'task.status.draft': 'Черновик', 'task.budget': 'Бюджет', 'task.location': 'Местоположение', 'task.deadline': 'Дата начала', 'task.expires_at': 'Активно до', 'task.created_at': 'Создано', 'task.customer': 'Заказчик', 'task.offer.btn': 'Отправить предложение', 'task.invite.banner_title': 'Вас пригласили на это задание', 'task.invite.banner_hint': 'Заказчик лично пригласил вас', 'task.invite.accept': 'Отправить предложение', 'task.invite.decline': 'Отказаться', 'offer.accept': 'Принять', 'offer.decline': 'Отклонить', 'task.complete': 'Завершить задачу', 'task.complete.confirm': 'Отметить задачу как выполненную?', 'task.edit': 'Редактировать', 'task.status_label': 'Статус', 'task.yours': 'Ваша задача', 'task.offer.yours': 'Ваше предложение', 'review.leave': 'Оставить отзыв', 'review.rating': 'Оценка', 'review.comment': 'Комментарий', 'review.comment.placeholder': 'Расскажите о своём опыте...', 'review.submit': 'Отправить отзыв', 'review.submitting': 'Отправка...', 'review.done': 'Отзыв отправлен!', 'profile.reviews': 'Отзывы', 'profile.no_reviews': 'Отзывов пока нет', 'profile.rating': 'Рейтинг', 'profile.skills.label': 'Навыки', 'profile.member_since': 'Участник с', 'task.offers': 'Предложения', 'task.offers.none': 'Предложений пока нет', 'create.title': 'Опубликовать задачу', 'create.field.title': 'Название', 'create.field.description': 'Описание', 'create.field.category': 'Категория', 'create.field.category.select': 'Выберите...', 'create.field.location': 'Местоположение', 'create.field.location.any': 'Где угодно', 'create.field.location.all': 'Весь город', 'create.field.budget': 'Бюджет (€)', 'create.field.deadline': 'Дата начала', 'create.field.expires_at': 'Объявление активно', 'create.field.expires_at.days': '{n} дней', 'create.field.budget_negotiable': 'Цена обсуждается', 'create.field.time_slot': 'Время выполнения', 'create.field.time_slot.any': 'В любое время', 'create.field.time_slot.morning': 'Утром (08:00–13:00)', 'create.field.time_slot.afternoon': 'Днём (13:00–18:00)', 'create.field.time_slot.evening': 'Вечером (18:00–22:00)', 'create.field.time_slot.weekend': 'Выходной', 'create.field.address': 'Адрес (необязательно)', 'create.field.address.district': 'Квартал', 'create.field.address.street': 'Улица', 'create.field.address.house': 'Дом', 'create.field.confidential': 'Конфиденциальная заметка', 'create.field.confidential.placeholder': 'Детали, видные только назначенному специалисту...', 'create.field.confidential.hint': 'Не отображается публично', 'create.field.photos': 'Фотографии', 'create.field.photos.add': 'Добавить фото', 'create.field.photos.uploading': 'Загрузка...', 'task.budget_negotiable': 'Цена обсуждается', 'task.time_slot': 'Время', 'task.confidential': 'Конфид. заметка', 'create.field.title.placeholder': 'напр. Уборка квартиры 80кв', 'create.field.description.placeholder': 'Подробно опишите что нужно...', 'create.field.location.placeholder': 'напр. Афины, Колонаки', 'create.field.budget.placeholder': 'напр. 100', 'create.submit': 'Опубликовать задачу', 'create.submitting': 'Публикация...', 'login.title': 'Добро пожаловать', 'login.subtitle': 'Вход в CanHelp', 'login.email': 'Email', 'login.password': 'Пароль', 'login.submit': 'Войти', 'login.submitting': 'Вход...', 'login.error': 'Неверный email или пароль', 'login.unverified.title': 'Подтвердите ваш email', 'login.unverified.desc': 'Мы отправили ссылку для подтверждения на ваш email. Проверьте входящие (или спам) и перейдите по ссылке.', 'login.unverified.resend': 'Отправить письмо повторно', 'login.unverified.sending': 'Отправка...', 'login.unverified.sent': '✓ Отправлено — проверьте входящие', 'profile.email.verified': 'Email подтверждён', 'profile.email.not_verified': 'Email не подтверждён', 'login.no_account': 'Нет аккаунта?', 'login.register_link': 'Зарегистрироваться', 'login.forgot_password': 'Забыл пароль?', 'login.or_continue_with': 'или продолжите через', 'login.continue_google': 'Войти через Google', 'forgot.title': 'Забыл пароль', 'forgot.subtitle': 'Введите email для получения ссылки восстановления', 'forgot.email': 'Email', 'forgot.submit': 'Отправить ссылку', 'forgot.submitting': 'Отправка...', 'forgot.sent.title': 'Проверьте входящие', 'forgot.sent.desc': 'Если аккаунт с таким email существует, мы отправим ссылку для сброса пароля.', 'forgot.back_to_login': 'Вернуться ко входу', 'forgot.error': 'Не удалось отправить ссылку. Проверьте адрес и попробуйте снова.', 'forgot.error.not_found': 'Аккаунт с таким email не найден.', 'forgot.error.send_failed': 'Ошибка отправки письма. Попробуйте позже.', 'reset.title': 'Новый пароль', 'reset.subtitle': 'Введите новый пароль', 'reset.password': 'Новый пароль', 'reset.confirm': 'Подтвердите пароль', 'reset.submit': 'Изменить пароль', 'reset.submitting': 'Сохранение...', 'reset.success': 'Пароль успешно изменён. Перенаправление ко входу...', 'reset.back_to_login': 'Вернуться ко входу', 'reset.error.mismatch': 'Пароли не совпадают', 'reset.error.invalid': 'Недействительная или устаревшая ссылка. Запросите новую.', 'register.title': 'Регистрация', 'register.subtitle': 'Создать аккаунт в CanHelp', 'register.first_name': 'Имя', 'register.last_name': 'Фамилия', 'register.email': 'Email', 'register.password': 'Пароль (мин. 8 символов)', 'register.role': 'Роль', 'register.role.customer': 'Пользователь', 'register.role.customer.desc': 'Публикую задачи', 'register.role.specialist': 'Специалист', 'register.role.specialist.desc': 'Беру задачи', 'register.submit': 'Создать аккаунт', 'register.submitting': 'Регистрация...', 'register.has_account': 'Уже есть аккаунт?', 'register.login_link': 'Войти', 'register.continue_google': 'Зарегистрироваться через Google', 'register.check_email.title': 'Проверьте почту', 'register.check_email.desc': 'Мы отправили ссылку для подтверждения на ваш email. Проверьте входящие (или спам) и перейдите по ссылке.', 'register.check_email.login': 'Вернуться к входу', 'register.captcha_failed': 'Проверка CAPTCHA не пройдена. Пройдите проверку безопасности и попробуйте снова.', 'dashboard.title': 'Панель управления', 'dashboard.new_task': '+ Новая задача', 'dashboard.onboarding.title': 'Добро пожаловать в CanHelp 👋', 'dashboard.onboarding.subtitle': 'Выберите, с чего хотите начать.', 'dashboard.onboarding.helper.title': 'Предложите свою помощь', 'dashboard.onboarding.helper.desc': 'Заполните анкету — навыки, категории и города. Это займёт пару минут, и вы начнёте получать заказы.', 'dashboard.onboarding.helper.cta': 'Заполнить анкету', 'dashboard.onboarding.requester.title': 'Нужна помощь?', 'dashboard.onboarding.requester.desc': 'Опубликуйте задачу — помощники пришлют вам свои предложения.', 'dashboard.onboarding.requester.cta': 'Опубликовать задачу', 'dashboard.my_tasks': 'Мои задачи', 'dashboard.my_offers': 'Мои предложения', 'dashboard.invitations': 'Приглашения на задания', 'dashboard.offers_count': 'предл.', 'dashboard.declined_count': 'откл.', 'dashboard.completed_tasks': 'Завершённые задачи', 'dashboard.completed_offers': 'Завершённые предложения', 'dashboard.review_pending': 'Оценка ещё не оставлена', 'tasks.new.top_specialists': 'Топ специалисты', 'tasks.new.select_category': 'Выберите категорию, чтобы увидеть специалистов', 'tasks.new.invite': 'Предложить работу', 'tasks.new.invited': 'Выбран ✓', 'reviews.count': 'отзывов', 'filter.location': 'Локация', 'filter.language': 'Языки', 'filter.language.any': 'Любой язык', 'filter.category.all': 'Все категории', 'user.categories': 'Категории', 'user.work_area': 'Район работы', 'user.specialist_cards': 'Карточки услуг', 'card.skills': 'Навыки', 'card.categories': 'Категории', 'card.geography': 'Район работы', 'card.portfolio': 'Галерея работ', 'card.close': 'Закрыть', 'dashboard.tasks.empty': 'Вы не публиковали задачи', 'dashboard.tasks.empty.cta': 'Опубликуйте первую', 'dashboard.tasks.add_new': 'Добавить новую задачу', 'dashboard.offers.empty': 'Вы не отправляли предложений', 'dashboard.offers.empty.cta': 'Найти задачи', 'dashboard.customer.specialists_title': 'Ищете исполнителя?', 'dashboard.customer.specialists_hint': 'Просматривайте профили специалистов, читайте отзывы и приглашайте их на свои задачи', 'dashboard.customer.specialists_cta': 'Найти исполнителя', 'dashboard.customer.how_title': 'Как это работает', 'dashboard.customer.step1': 'Создайте задачу с описанием и бюджетом', 'dashboard.customer.step2': 'Специалисты пришлют предложения с ценой и сроками', 'dashboard.customer.step3': 'Выберите подходящего и начните работу', 'notif.title': 'Уведомления', 'notif.mark_all': 'Отметить все как прочитанные', 'notif.empty': 'Нет уведомлений', 'notif.type.generic': 'Уведомление', 'notif.type.new_offer': 'Новое предложение', 'notif.type.offer_accepted': 'Ваше предложение принято', 'notif.type.offer_declined': 'Ваше предложение отклонено', 'notif.type.task_completed': 'Задание выполнено', 'notif.type.task_cancelled': 'Задание отменено', 'notif.type.new_message': 'Новое сообщение', 'notif.type.new_review': 'Новый отзыв', 'notif.type.task_invite': 'Приглашение на задание', 'notif.type.referral_reward': 'Реферальная награда', 'notif.type.specialist_card_submitted': 'Карточка отправлена на проверку', 'notif.type.specialist_card_approved': 'Карточка одобрена', 'notif.type.specialist_card_rejected': 'Карточка отклонена', 'notif.body.new_offer': 'Новое предложение на «{title}»', 'notif.body.offer_accepted': 'Ваше предложение на «{title}» принято', 'notif.body.offer_declined': 'Ваше предложение на «{title}» отклонено', 'notif.body.task_invite': 'Вас приглашают на «{title}»', 'notif.body.new_review': 'Вы получили оценку {rating}★', 'notif.body.referral_reward': 'На ваш аккаунт добавлено {days} дней доступа к плану «{plan}»!', 'notif.body.specialist_card_submitted': 'Карточка «{title}» отправлена на проверку', 'notif.body.specialist_card_approved': 'Карточка «{title}» одобрена и опубликована', 'notif.body.specialist_card_rejected': 'Карточка «{title}» не была одобрена. Исправьте её и отправьте снова.', 'offer.status.pending': 'Ожидает', 'offer.status.accepted': 'Принято', 'offer.status.declined': 'Отклонено', 'offer.status.withdrawn': 'Отозвано', 'offer.status.other_accepted': 'Выбран другой исполнитель', 'common.loading': 'Загрузка...', 'common.error': 'Ошибка', 'common.save': 'Сохранить', 'common.saving': 'Сохранение...', 'common.cancel': 'Отмена', 'common.add': 'Добавить', 'common.close': 'Закрыть', 'common.edit': 'Редактировать', 'common.delete': 'Удалить', 'common.from': 'от', 'common.currency': '€', 'common.greece': 'Греция', // Chat 'chat.connected': 'Подключено', 'chat.disconnected': 'Отключено', 'chat.no_rooms': 'Переписок пока нет', 'chat.task_fallback': 'Задача', 'chat.select': 'Выберите переписку', 'chat.no_messages': 'Сообщений пока нет', 'chat.placeholder': 'Напишите сообщение... (Enter для отправки)', 'chat.conversation_fallback': 'Переписка', 'chat.direct_chat': 'Личный чат', 'chat.linked_task': 'Прикреплённый заказ', 'chat.write_btn': 'Написать', 'chat.just_now': 'только что', 'chat.min_ago': 'м', 'chat.write_specialist': 'Написать специалисту', 'chat.write_customer': 'Написать заказчику', 'chat.notif_settings': 'Настройки уведомлений', 'chat.notif_messages': 'Уведомления о новых сообщениях', 'chat.toast_title': 'Новое сообщение', 'chat.toast_open': 'Открыть чат', // Offer form 'offer.price': 'Цена', 'offer.price.placeholder': 'напр. 80', 'offer.customer_budget': 'Бюджет заказчика', 'offer.message': 'Сообщение', 'offer.optional': 'необязательно', 'offer.message.placeholder': 'Представьтесь, расскажите об опыте и почему вы лучший выбор...', 'offer.submitting': 'Отправка...', // Profile 'profile.photo': 'Фото профиля', 'profile.photo.change': 'Изменить фото', 'profile.photo.hint': 'JPEG, PNG, WebP · до 5MB', 'profile.basic_info': 'Основная информация', 'profile.phone': 'Телефон', 'profile.phone.placeholder': '+30 6901234567', 'profile.bio': 'Краткое описание', 'profile.bio.placeholder': 'Расскажите немного о себе...', 'profile.language': 'Язык', 'profile.language.hint': 'Язык интерфейса и email-уведомлений', 'profile.languages': 'Языки общения', 'profile.languages.hint': 'Выберите все языки, на которых вы общаетесь', 'profile.skills': 'Навыки', 'profile.skills.subtitle': 'Добавьте услуги, которые вы предлагаете', 'profile.skills.placeholder': 'напр. Уборка, IT, Репетиторство...', 'profile.role': 'Роль аккаунта', 'profile.role.specialist': '🔧 Помощник', 'profile.role.admin': '👑 Admin', 'profile.role.customer': '👤 Пользователь', 'profile.role.user': '👤 Пользователь', 'profile.role.change': 'Для смены роли обратитесь в службу поддержки.', 'profile.become_specialist': 'Предложить помощь', 'profile.become_specialist.desc': 'Создай профиль помощника, предложи свои навыки и начни получать задачи.', 'become_specialist.hero.title': 'Предложи свои навыки и начни зарабатывать', 'become_specialist.hero.subtitle': 'Создай профиль помощника и получай запросы от людей, которым нужна помощь', 'become_specialist.how.title': 'Как это работает', 'become_specialist.step1.title': 'Создай портфолио специалиста', 'become_specialist.step1.desc': 'Укажи категории, навыки и зону покрытия — система автоматически подберёт подходящие заказы', 'become_specialist.step2.title': 'Ищи заказы', 'become_specialist.step2.desc': 'Просматривай задачи по своим категориям в разделе «Поиск заказов»', 'become_specialist.step3.title': 'Откликайся и зарабатывай', 'become_specialist.step3.desc': 'Отправляй предложения с ценой и сроками, общайся с клиентами и выполняй заказы', 'become_specialist.benefits.title': 'Преимущества профиля специалиста', 'become_specialist.benefit1': 'Поиск заказов по вашим категориям и локации', 'become_specialist.benefit2': 'Публичный профиль с отзывами клиентов', 'become_specialist.benefit3': 'Расписание доступности, видимое клиентам', 'become_specialist.benefit4': 'Добавление в избранное клиентами', 'become_specialist.cta': 'Подробнее', 'become_specialist.free_badge': 'Бесплатная регистрация', 'profile.tab.notifications': 'Уведомления', 'profile.tab.reviews': 'Отзывы', 'profile.tab.referral': 'Рефералы', 'profile.tab.auto_response': 'Авто-ответ', 'profile.tab.site': 'Сайт', 'profile.site.title': 'Персональная страница', 'profile.site.url_label': 'Личный сайт', 'profile.site.copy': 'Копировать', 'profile.site.copied': 'Скопировано', 'profile.site.visible_title': 'Что отображается на вашей странице', 'profile.site.visible.name': 'Имя и фото', 'profile.site.visible.bio': 'Биография', 'profile.site.visible.rating': 'Рейтинг и отзывы', 'profile.site.visible.portfolio': 'Портфолио / Карточки', 'profile.site.visible.contacts': 'Контактные данные', 'profile.site.visible.full_last_name': 'Фамилия полностью', 'profile.site.visible.services': 'Карточки услуг', 'profile.site.visible.reviews': 'Раздел с отзывами', 'profile.site.visible.status': 'Статус «Готов помочь»', 'profile.site.theme': 'Тема оформления', 'profile.site.theme.dark': 'Тёмная', 'profile.site.theme.light': 'Светлая', 'profile.site.slug_taken': 'Этот адрес уже занят', 'profile.site.stats.title': 'Аналитика сайта', 'profile.site.stats.days': 'последние 30 дней', 'profile.site.stats.views': 'Просмотры', 'profile.site.stats.unique': 'Уникальные посетители', 'profile.site.stats.messages': 'Сообщения', 'profile.site.stats.total_views': 'Просмотры', 'profile.site.stats.total_unique': 'Уник. посетители', 'profile.site.stats.total_messages': 'Сообщения', 'profile.site.stats.empty': 'Данных пока нет', 'profile.site.stats.loading': 'Загрузка аналитики...', 'profile.site.stats.no_slug': 'Укажите адрес сайта, чтобы видеть статистику', 'profile.site.edit_bio_hint': 'Биография и фото настраиваются во вкладке «Основное».', 'profile.site.seo.title': 'SEO — мета-данные сайта', 'profile.site.seo.hint': 'Отображается в поисковиках. При сохранении автоматически переводится на все языки.', 'profile.site.seo.site_title': 'Заголовок страницы', 'profile.site.seo.site_title_placeholder': 'Иван Иванов — Электрик в Афинах', 'profile.site.seo.site_desc': 'Мета-описание', 'profile.site.seo.site_desc_placeholder': 'Краткое описание для поисковиков...', 'status.title': 'Статус', 'status.can_help_now_hint': 'Ваша карточка показывается выше в поиске', 'status.need_help_hint': 'Специалисты могут предложить вам помощь', 'profile.referral.title': 'Партнёрская программа', 'profile.referral.desc': 'Поделитесь ссылкой и получайте награду за каждого привлечённого пользователя.', 'profile.referral.link_label': 'Ваша реферальная ссылка', 'profile.referral.copy': 'Копировать', 'profile.referral.copied': 'Скопировано!', 'profile.referral.invited_count': 'успешных приглашений', 'profile.referral.no_code': 'Реферальный код недоступен.', 'notifications.title': 'Настройки уведомлений', 'notifications.email.new_tasks': 'Email о новых заказах', 'notifications.email.new_tasks.desc': 'Получать email, когда в ваших категориях публикуется новый заказ', 'notifications.messages.desc': 'Получать уведомление при новом входящем сообщении', 'notifications.saved': 'Настройки сохранены', 'notifications.plan_required': 'Недоступно в вашем тарифе', 'profile.tab.info': 'Основное', 'profile.tab.finance': 'Финансы', 'profile.tab.skills': 'Навыки', 'profile.tab.categories': 'Категории', 'profile.tab.geography': 'География', 'profile.specialist.categories': 'Категории работ', 'profile.specialist.categories.desc': 'Выберите категории, в которых вы работаете', 'profile.specialist.geography': 'Города покрытия', 'profile.specialist.geography.desc': 'Выберите города / районы, где вы работаете', 'profile.saving': 'Сохранение...', 'profile.upload.error': 'Ошибка загрузки фото', 'profile.saved': 'Сохранено', 'profile.tab.cards': 'Предложения', 'profile.cards.count': 'Предложения', 'profile.cards.add': 'Добавить предложение', 'profile.cards.new_title': 'Название нового предложения', 'profile.cards.placeholder': 'Например: Сантехника', 'profile.cards.create': 'Создать', 'profile.cards.cancel': 'Отмена', 'profile.cards.empty': 'У вас нет предложений', 'profile.cards.empty_hint': 'Создайте первую карточку, чтобы показать услуги клиентам.', 'profile.cards.create_first': 'Создать первое предложение', 'profile.cards.delete_confirm': 'Удалить предложение?', 'profile.background.change': 'Изменить фон', 'profile.background.remove': 'Удалить фон', 'profile.listing_requirements.published_card': 'Опубликуйте хотя бы одну карточку', 'profile.listing_requirements.title': 'Ваш профиль пока не показывается в разделе «Предложения»', 'profile.listing_requirements.hint': 'Чтобы карточка отображалась, выполните условия:', 'profile.listing_requirements.bio': 'Добавьте краткую информацию о себе в «Основное»', 'profile.listing_requirements.categories': 'Укажите хотя бы одну категорию в активной карточке', 'profile.listing_requirements.locations': 'Укажите хотя бы одну локацию в активной карточке', 'profile.listing_requirements.card_inactive': 'Сделайте карточку активной', 'profile.listing_requirements.review_pending': 'Карточка на рассмотрении', 'profile.card.visibility_issue': 'Карточка не отображается в разделе «Предложения»', 'profile.card.tab.main': 'Основное', 'profile.card.tab.skills': 'Навыки', 'profile.card.tab.categories': 'Категории', 'profile.card.tab.geography': 'География', 'profile.card.tab.portfolio': 'Галерея', 'profile.card.tab.pricelist': 'Прайс-лист', 'profile.card.pricelist.empty': 'Группы прайс-листа ещё не добавлены.', 'profile.card.pricelist.add_group': 'Добавить группу', 'profile.card.pricelist.group_title': 'Название группы', 'profile.card.pricelist.add_item': 'Добавить позицию', 'profile.card.pricelist.item_name': 'Услуга / работа', 'profile.card.pricelist.item_desc': 'Описание (необязательно)', 'profile.card.pricelist.item_price': 'Цена', 'profile.card.pricelist.item_unit': 'Единица (например /час)', 'profile.card.pricelist.save_group': 'Сохранить группу', 'profile.card.pricelist.save_item': 'Сохранить', 'profile.card.pricelist.delete_group': 'Удалить группу', 'profile.card.pricelist.delete_item': 'Удалить', 'profile.card.active': 'Активна', 'profile.card.review_pending': 'На рассмотрении', 'profile.card.review_pending_hint': 'Ваша карточка сейчас проверяется администрацией.', 'profile.card.review_submitted': 'Карточка отправлена на проверку', 'profile.card.review_approved': 'Карточка одобрена', 'profile.card.review_approved_hint': 'Ваша карточка теперь отображается в предложениях.', 'profile.card.review_rejected': 'Карточка отклонена', 'profile.card.review_rejected_hint': 'Карточка не была одобрена. Исправьте её и отправьте снова.', 'profile.card.submit_review': 'Отправить на рассмотрение', 'profile.card.withdraw_review': 'Отозвать заявку', 'profile.card.unpublish': 'Снять с публикации', 'profile.card.save': 'Сохранить', 'profile.card.saved': 'Сохранено', 'profile.card.delete': 'Удалить', 'profile.card.skill.add': 'Добавить навык', 'profile.card.photo.add': 'Добавить фото', 'profile.card.photo.uploading': 'Загрузка...', 'profile.card.photo.empty': 'Нет фотографий', 'profile.card.item.title': 'Заголовок', 'profile.card.item.desc': 'Описание', 'profile.card.item.save': 'Сохранить', 'profile.card.item.cancel': 'Отмена', 'profile.card.item.edit': 'Описание работы', 'profile.card.description': 'Описание карточки', 'profile.card.desc_auto_translate': 'При сохранении будет автоматически переведено на другие языки', 'profile.card.desc_translated': 'Есть переводы:', 'profile.upgrade.cards_limit': 'Лимит портфолио исчерпан', 'profile.upgrade.plan': 'Текущий тариф:', 'profile.upgrade.contact': 'Обратитесь к администратору для смены тарифа', 'profile.upgrade.ok': 'Понятно', 'profile.plan.title': 'Тарифный план', 'profile.balance': 'Баланс', 'profile.balance.topup': 'Пополнить баланс', 'profile.balance.topup.title': 'Пополнить баланс', 'profile.balance.topup.amount': 'Сумма (в EUR)', 'profile.balance.topup.hint': 'Выберите сумму или введите вручную', 'profile.balance.topup.submit': 'Перейти к оплате', 'profile.balance.topup.loading': 'Перенаправление...', 'profile.balance.topup.error': 'Ошибка инициализации платежа. Попробуйте снова.', 'payment.success.title': 'Оплата прошла успешно!', 'payment.success.desc': 'Ваш баланс обновлён.', 'payment.cancelled.title': 'Оплата отменена', 'payment.cancelled.desc': 'Оплата была отменена. Средства не списаны.', 'payment.pending.title': 'Обрабатывается...', 'payment.pending.desc': 'Ваш платёж в обработке.', 'payment.back_to_profile': 'Вернуться в профиль', 'profile.plan.basic': 'Базовый (бесплатный)', 'profile.plan.contact_upgrade': 'Обратитесь к администратору для подключения тарифа', 'profile.plan.cards_up_to': 'Портфолио: до', 'profile.plan.cards_unlimited': 'Портфолио: безлимитно', 'profile.plan.tasks_up_to': 'Задач: до', 'profile.plan.offers_up_to': 'Откликов: до', 'profile.plan.valid_until': 'Действителен до', 'profile.plan.no_expiry': 'Бессрочно', // Create task 'create.error': 'Ошибка при публикации', // Tasks list extras 'tasks.category.general': 'Общее', 'tasks.budget.range': 'Диапазон:', 'tasks.budget.from': 'от', 'tasks.budget.to': 'до', 'tasks.filter.reset': 'Сбросить фильтры', 'tasks.load_more': 'Загрузить ещё', 'tasks.showing': 'Результатов:', 'tasks.field.budget': 'Бюджет, €', // Admin 'admin.title': 'Панель администратора', 'admin.tab.stats': 'Статистика', 'admin.tab.users': 'Пользователи', 'admin.tab.tasks': 'Задачи', 'admin.tab.reports': 'Жалобы', 'admin.tab.moderation': 'Модерация', 'admin.stats.users': 'Пользователи', 'admin.stats.tasks': 'Задачи', 'admin.stats.offers': 'Предложения', 'admin.stats.reviews': 'Отзывы', 'admin.tasks.by_status': 'Задачи по статусу', 'admin.col.user': 'Пользователь', 'admin.col.email': 'Email', 'admin.col.role': 'Роль', 'admin.col.registered': 'Регистрация', 'admin.col.status': 'Статус', 'admin.col.title': 'Название', 'admin.col.budget': 'Бюджет', 'admin.col.created': 'Создано', 'admin.users.active': 'Активен', 'admin.users.inactive': 'Неактивен', 'admin.users.deactivate': 'Деактивировать', 'admin.users.activate': 'Активировать', 'admin.tasks.cancel': 'Отменить', 'admin.reports.none': 'Жалоб нет', 'admin.moderation.none': 'Нет предложений для проверки', 'admin.moderation.pending': 'В ожидании', 'admin.moderation.active': 'Активно', 'admin.moderation.approve': 'Одобрить', 'admin.moderation.block': 'Заблокировать', 'admin.moderation.pending_title': 'Предложения на одобрение', 'admin.moderation.active_title': 'Активные предложения', 'admin.moderation.pending_count': 'В ожидании', 'admin.moderation.active_count': 'Активные', 'admin.moderation.pending_hint': 'Новые предложения, ожидающие проверки', 'admin.moderation.active_hint': 'Активные предложения, которые можно заблокировать', 'admin.moderation.pending_empty': 'Новых предложений для одобрения нет', 'admin.moderation.active_empty': 'Активных предложений не найдено', 'admin.reports.reviewed': 'Рассмотрено', 'admin.reports.dismiss': 'Отклонить', 'admin.pagination.total': 'Всего', 'admin.users.role.change': 'Изменить роль', 'admin.users.search.placeholder': 'Поиск по имени или email...', 'admin.tasks.delete': 'Удалить', 'admin.tasks.delete.confirm': 'Удалить эту задачу навсегда?', 'admin.tasks.search.placeholder': 'Поиск по названию...', 'admin.col.customer': 'Заказчик', 'admin.col.reporter': 'Жалобщик', 'admin.col.target': 'Цель', 'admin.filter.all_roles': 'Все роли', 'admin.filter.all_statuses': 'Все статусы', 'admin.reports.target.task': 'Задача', 'admin.reports.target.user': 'Пользователь', 'admin.tab.categories': 'Категории', 'admin.tab.locations': 'Города и районы', 'admin.tab.logs': 'Логи', 'admin.tab.plans': 'Тарифы', 'admin.tab.settings': 'Настройки', 'admin.logs.subtab.ai': 'AI логи', 'admin.logs.subtab.activity': 'Активность', 'admin.logs.subtab.mail': 'Mail', 'admin.logs.subtab.notifications': 'Уведомления', 'admin.notif_logs.type': 'Тип', 'admin.notif_logs.title': 'Заголовок', 'admin.notif_logs.read': 'Прочитано', 'admin.notif_logs.empty': 'Логи уведомлений пусты', 'admin.stats.notif_chart_title': 'Уведомления по дням', 'admin.stats.notif_label': 'Уведомления', 'admin.stats.mail_chart_title': 'Email по дням', 'admin.stats.mail_label': 'Emails', 'admin.filter.all': 'Все', 'admin.stats.specialists': 'Помощники', 'admin.col.plan': 'Тариф', 'admin.back_home': 'На главную', 'admin.plans.title': 'Тарифные пакеты', 'admin.plans.add': '+ Добавить тариф', 'admin.plans.empty': 'Тарифы не созданы', 'admin.plans.form.new': 'Новый тариф', 'admin.plans.form.edit': 'Редактировать тариф', 'admin.plans.form.name': 'Название', 'admin.plans.form.price': 'Цена (EUR)', 'admin.plans.form.old_price': 'Старая цена (EUR, необязательно)', 'admin.plans.form.max_offers': 'Макс. откликов (пусто = без лимита)', 'admin.plans.form.max_cards': 'Макс. предложений (пусто = без лимита)', 'admin.plans.form.duration_days': 'Срок (дней, пусто = без истечения)', 'admin.plans.form.description': 'Описание', 'admin.plans.form.features': 'Возможности (по одной на строку)', 'admin.plans.form.notify': 'Уведомления о новых заказах', 'admin.plans.form.default': 'По умолчанию', 'admin.plans.form.active': 'Активен', 'admin.plans.form.order': 'Порядок', 'admin.plans.form.role': 'Роль', 'admin.plans.form.tier': 'Уровень', 'admin.plans.form.role.customer': 'Заказчик', 'admin.plans.form.role.specialist': 'Помощник', 'admin.plans.form.tier.free': 'Бесплатный', 'admin.plans.form.tier.pro': 'Pro', 'admin.plans.form.tier.ultimate': 'Ultimate', 'admin.plans.form.section.limits': 'Лимиты (пусто = без ограничений)', 'admin.plans.form.max_messages_day': 'Макс. сообщений/день', 'admin.plans.form.max_orders_day': 'Макс. заказов/день', 'admin.plans.form.max_skills': 'Макс. навыков', 'admin.plans.form.max_profiles': 'Макс. профилей', 'admin.plans.form.max_portfolio': 'Макс. элементов портфолио', 'admin.plans.form.section.boost': 'Множители & Буст', 'admin.plans.form.search_boost': 'Буст в поиске', 'admin.plans.form.offers_multiplier': 'Множитель откликов', 'admin.plans.form.section.contact': 'Права контактов', 'admin.plans.form.can_contact_free': 'Контакт с бесплатными пользователями', 'admin.plans.form.can_contact_pro': 'Контакт с Pro пользователями', 'admin.plans.form.can_contact_all': 'Контакт со всеми', 'admin.plans.form.can_show_contact': 'Показывать контакты', 'admin.plans.form.can_view_phone': 'Просмотр телефона', 'admin.plans.form.section.features': 'Возможности', 'admin.plans.form.upload_video': 'Загрузка видео', 'admin.plans.form.favorites': 'Избранное', 'admin.plans.form.google_calendar': 'Google Calendar', 'admin.plans.form.verified_badge': 'Знак верификации', 'admin.plans.form.highlighted_reviews': 'Выделенные отзывы', 'admin.plans.form.personal_site': 'Личный сайт', 'admin.plans.form.can_help_now': 'Статус «Могу помочь»', 'admin.plans.form.need_help': 'Статус «Нужна помощь»', 'admin.plans.form.auto_response': 'Автоответ', 'admin.plans.form.auto_match': 'Автоподбор', 'admin.plans.form.price_list': 'Прайс-лист', 'admin.plans.form.instant_dispatch_free': 'Мгновенная рассылка (бесплатно)', 'admin.plans.form.instant_dispatch_pro': 'Мгновенная рассылка (Pro)', 'admin.plans.badge.default': 'По умолчанию', 'admin.plans.badge.inactive': 'Неактивен', 'admin.plans.make_default': 'Сделать по умолчанию', 'admin.plans.tasks': 'Задач', 'admin.plans.offers': 'Откликов', 'admin.plans.cards': 'Предложения', 'admin.plans.notify_tasks': 'Уведомления о заказах', 'admin.plans.delete.confirm': 'Удалить тариф', 'admin.activity.title': 'Журнал активности', 'admin.activity.event': 'Событие', 'admin.activity.all_events': 'Все события', 'admin.activity.from': 'От', 'admin.activity.to': 'До', 'admin.activity.reset': 'Сбросить', 'admin.activity.total': 'Всего', 'admin.activity.empty': 'Нет записей', 'admin.mail.event': 'Email событие', 'admin.mail.all_events': 'Все email события', 'admin.mail.from': 'От', 'admin.mail.to': 'До', 'admin.mail.reset': 'Сбросить', 'admin.mail.total': 'Всего', 'admin.mail.empty': 'Нет email логов', 'admin.mail.recipient': 'Получатель', 'admin.mail.provider': 'Провайдер', 'admin.mail.details': 'Детали', 'admin.mail.status': 'Статус', 'admin.mail.success': 'Успешно', 'admin.mail.failed': 'Ошибка', 'admin.event.email_sent': 'Email отправлен', 'admin.event.email_failed': 'Email не отправлен', 'admin.event.email_dev': 'Email DEV fallback', 'admin.event.admin_email_test_sent': 'Тестовый email отправлен', 'admin.event.admin_email_test_failed': 'Тестовый email не отправлен', 'admin.logs.empty': 'Нет записей', 'admin.logs.date': 'Дата', 'admin.logs.provider': 'Провайдер', 'admin.logs.model': 'Модель', 'admin.logs.action': 'Действие', 'admin.logs.langs': 'Языки', 'admin.logs.in': 'Вход', 'admin.logs.out': 'Выход', 'admin.logs.total': 'Итого', 'admin.logs.ms': 'мс', 'admin.logs.status': 'Статус', 'admin.stats.activity_30d': 'Активность за 30 дней', 'admin.stats.tasks_label': 'Заявки', 'admin.stats.users_label': 'Пользователи', 'admin.stats.specialists_label': 'Помощники', 'admin.stats.tokens_title': 'Расход токенов (по месяцам)', 'admin.stats.tokens_out': 'Исходящие', 'admin.stats.tokens_in': 'Входящие', 'admin.stats.tokens_out_label': 'Исходящие токены', 'admin.stats.tokens_in_label': 'Входящие токены', 'admin.stats.cost_label': 'Стоимость (USD)', 'admin.stats.tasks_by_status': 'Заявки по статусам', 'admin.task_status.open': 'Открытые', 'admin.task_status.in_progress': 'В работе', 'admin.task_status.completed': 'Завершённые', 'admin.task_status.cancelled': 'Отменённые', 'admin.task_status.draft': 'Черновики', 'admin.settings.tab.general': 'Общие', 'admin.settings.tab.smtp': 'E-Mail', 'admin.settings.tab.notifications': 'Уведомления', 'admin.settings.tab.payment': 'Оплата', 'admin.settings.tab.referral': 'Реферальная', 'admin.settings.tab.seo': 'SEO', 'admin.settings.tab.socials': 'Соцсети', 'admin.settings.tab.telegram': 'Telegram Bot', 'admin.settings.telegram.title': 'Настройки Telegram Bot', 'admin.settings.telegram.help': 'Создайте бота через @BotFather. ID чата узнайте через @userinfobot.', 'admin.settings.telegram.bot_token': 'Bot Token', 'admin.settings.telegram.admin_chat_id': 'Chat ID администратора', 'admin.settings.telegram.admin_chat_hint': 'Сначала отправьте /start своему боту, затем узнайте chat ID через @userinfobot', 'admin.settings.telegram.channel_id': 'неиспользуется', 'admin.settings.telegram.channels_title': 'Каналы по языкам', 'admin.settings.telegram.channel_hint': 'Username публичного канала (@канал) или числовой ID', 'admin.settings.telegram.notify_registrations': 'Уведомлять о новых регистрациях', 'admin.settings.telegram.notify_registrations_hint': 'Отправлять сообщение при регистрации нового пользователя', 'admin.settings.telegram.post_new_tasks': 'Публиковать новые задания в канал', 'admin.settings.telegram.post_new_tasks_hint': 'Автоматически публиковать новые задания в Telegram-канал', 'admin.settings.telegram.test': 'Тест', 'admin.settings.telegram.verify': 'Проверить токен', 'admin.settings.telegram.test_ok': 'Соединение работает', 'admin.settings.telegram.test_fail': 'Ошибка соединения', 'admin.settings.socials.title': 'Ссылки на социальные сети', 'admin.settings.socials.hint': 'Заполненные ссылки отображаются в подвале сайта', 'admin.settings.seo.maintenance_label': 'Режим обслуживания', 'admin.settings.seo.maintenance_hint': 'Показывать страницу обслуживания всем посетителям', 'admin.settings.seo.indexing_label': 'Индексация поисковыми системами', 'admin.settings.seo.indexing_hint': 'Разрешить поисковым системам индексировать сайт', 'admin.settings.seo.head_scripts_label': 'Скрипты в (JS)', 'admin.settings.seo.head_scripts_hint': 'Выполняется на каждой странице (Google Tag Manager, аналитика и т.д.)', 'admin.settings.seo.site_title_label': 'Заголовок сайта', 'admin.settings.seo.site_description_label': 'Описание сайта (meta description)', 'admin.settings.referral.title': 'Партнёрская программа', 'admin.settings.referral.hint': 'Награждайте пользователей, приводящих новых участников.', 'admin.settings.referral.enabled_label': 'Включено', 'admin.settings.referral.enabled_hint': 'Включить / отключить выдачу наград', 'admin.settings.referral.customer_section': 'Для клиентов', 'admin.settings.referral.specialist_section': 'Для помощников', 'admin.settings.referral.plan_label': 'Тарифный план за реферала', 'admin.settings.referral.no_plan': '— без плана —', 'admin.settings.referral.plan_hint': 'Этот план будет назначен пригласившему. Если его текущий план выше — добавятся только дни.', 'admin.settings.referral.days_label': 'Дней награды', 'admin.settings.referral.days_hint': 'Количество дней, добавляемых к сроку действия плана.', 'admin.settings.general.title': 'Общие настройки', 'admin.settings.general.site_name': 'Название сайта', 'admin.settings.general.site_url': 'URL сайта', 'admin.settings.general.contact_email': 'Email для связи', 'admin.settings.general.support_phone': 'Телефон поддержки', 'admin.settings.smtp.title': 'Настройки SMTP сервера', 'admin.settings.smtp.hint': 'Используется для отправки email-уведомлений.', 'admin.settings.smtp.host': 'SMTP Хост', 'admin.settings.smtp.port': 'Порт', 'admin.settings.smtp.encryption': 'Шифрование', 'admin.settings.smtp.enc.none': 'Нет', 'admin.settings.smtp.enc.tls': 'STARTTLS (порт 587)', 'admin.settings.smtp.enc.ssl': 'SSL/TLS (порт 465)', 'admin.settings.smtp.username': 'Имя пользователя', 'admin.settings.smtp.password': 'Пароль / App Password', 'admin.settings.smtp.from_name': 'Имя отправителя', 'admin.settings.smtp.from_email': 'Email отправителя', 'admin.settings.smtp.test': 'Отправить тестовый email', 'admin.settings.smtp.sending': 'Отправка...', 'admin.settings.payment.hint': 'Данные для подключения к ePay Piraeus Bank.', 'admin.settings.env.test': 'Тест (sandbox)', 'admin.settings.env.prod': 'Боевой режим', 'admin.settings.env.label': 'Среда', 'admin.settings.merchant_id': 'Merchant ID', 'admin.settings.api_user': 'API User', 'admin.settings.api_password': 'API Password', 'admin.settings.confirm_url': 'Confirmation URL (webhook)', 'admin.settings.cancel_url': 'Cancel URL', 'admin.settings.active': 'Активен', 'admin.settings.saving': 'Сохранение...', 'admin.settings.saved': 'Сохранено', 'admin.notif.vars_hint': 'Доступные переменные в шаблонах', 'admin.notif.tmpl.not_set': 'Шаблон не настроен', 'admin.notif.tmpl.subject_label': 'Тема письма', 'admin.notif.tmpl.body_label': 'Текст письма (HTML)', 'admin.notif.tmpl.save': 'Сохранить', 'admin.notif.tmpl.close': 'Закрыть', 'admin.notif.tmpl.translate': 'Авто-перевод на другие языки', 'admin.notif.tmpl.translating': 'Перевод...', 'admin.notif.tmpl.saving': 'Сохранение...', 'admin.notif.email_verification': 'Подтверждение email адреса', 'admin.notif.registration_success': 'Успешная регистрация', 'admin.notif.password_reset': 'Восстановление пароля', 'admin.notif.new_offer': 'Новое предложение', 'admin.notif.new_task': 'Новая задача', 'admin.notif.offer_accepted': 'Предложение принято', 'admin.notif.new_message': 'Новое сообщение', 'admin.notif.offer_declined': 'Отклонение предложения', 'admin.notif.offer_other_accepted': 'Выбран другой исполнитель', 'admin.notif.task_updated': 'Изменение задания', 'admin.notif.deadline_reminder': 'Напоминание о дедлайне', 'admin.notif.task_archived': 'Автоснятие задания', 'admin.notif.referral_reward': 'Реферальная награда', // Шаблоны email для тарифов 'admin.email_template.plan_activated': 'Тарифы — активация тарифа', 'admin.email_template.plan_upgraded': 'Тарифы — повышение тарифа', 'admin.email_template.plan_downgrade_scheduled': 'Тарифы — запланированное понижение', 'admin.email_template.plan_downgrade_applied': 'Тарифы — применение понижения', 'admin.email_template.plan_renewal_reminder': 'Тарифы — напоминание о продлении', 'admin.email_template.plan_insufficient_funds': 'Тарифы — нехватка средств', // Модальное окно подтверждения тарифа 'pricing.confirm.title': 'Подтвердите выбор тарифа', 'pricing.confirm.plan': 'Тариф', 'pricing.confirm.prorated': 'Зачёт остатка', 'pricing.confirm.effective_price': 'К оплате', 'pricing.confirm.your_balance': 'Ваш баланс', 'pricing.confirm.downgrade_info': 'Переход на новый тариф произойдёт автоматически после окончания текущего периода.', 'pricing.confirm.insufficient': 'Недостаточно средств на балансе.', 'pricing.confirm.top_up': 'Пополнить', 'pricing.confirm.schedule_downgrade': 'Запланировать переход', 'pricing.confirm.pay': 'Оплатить', 'admin.user_edit.title': 'Редактирование пользователя', 'admin.user_edit.email': 'Email', 'admin.user_edit.email_verified': 'Email подтверждён', 'admin.user_edit.email_not_verified': 'Email не подтверждён', 'admin.user_edit.verify_email_btn': 'Подтвердить вручную', 'admin.user_edit.verify_email_done': 'Email подтверждён!', 'admin.user_edit.id': 'ID', 'admin.user_edit.registered': 'Регистрация', 'admin.user_edit.last_seen': 'Последний визит', 'admin.user_edit.lang': 'Язык', 'admin.user_edit.first_name': 'Имя', 'admin.user_edit.last_name': 'Фамилия', 'admin.user_edit.phone': 'Телефон', 'admin.user_edit.bio': 'О себе', 'admin.user_edit.role': 'Роль', 'admin.user_edit.plan': 'Тариф', 'admin.user_edit.no_plan': '— Без тарифа —', 'admin.user_edit.active': 'Активный аккаунт', 'admin.user_edit.published': 'Опубликована', 'admin.user_edit.balance': 'Баланс (EUR)', 'admin.user_edit.skills': 'Навыки', 'admin.user_edit.tab.profile': 'Профиль', 'admin.user_edit.tab.account': 'Аккаунт', 'admin.user_edit.tab.balance': 'Баланс', 'admin.user_edit.tab.settings': 'Настройки', 'admin.user_edit.tab.specialist': 'Предложения', 'admin.user_edit.tab.site': 'Сайт', 'admin.user_edit.plan_expires': 'Тариф истекает', 'admin.user_edit.interface_lang': 'Язык интерфейса', 'admin.user_edit.comm_languages': 'Языки общения', 'admin.user_edit.personal_site_slug': 'Персональная страница', 'admin.user_edit.show_contact_info': 'Показывать контакты', 'admin.user_edit.show_contact_info.hint': 'Видно заказчикам', 'admin.user_edit.notify_new_tasks': 'Уведомлять о новых задачах', 'admin.user_edit.notify_new_tasks.hint': 'Push и email уведомления', 'admin.user_edit.notif_messages': 'Уведомления о сообщениях', 'admin.user_edit.notif_messages.hint': 'Новые сообщения в чате', 'admin.user_edit.site_settings': 'Настройки персональной страницы', 'admin.user_edit.categories': 'Категории услуг', 'admin.user_edit.locations': 'Районы обслуживания', 'admin.user_edit.skill_placeholder': 'Новый навык...', 'admin.user_edit.add_category': '— Выберите категорию —', 'admin.user_edit.add_location': '— Выберите район —', 'admin.user_edit.specialist_cards': 'Предложения специалиста', 'admin.user_edit.no_cards': 'Предложения не найдены', 'admin.user_edit.card_title': 'Заголовок предложения', 'admin.user_edit.card_description': 'Описание', 'admin.balance.topup.btn': 'Пополнить', 'admin.balance.withdraw.btn': 'Списать', 'admin.balance.modal_hint': 'Изменения применяются сразу и фиксируются в истории', 'admin.balance.topup.title': 'Пополнение баланса', 'admin.balance.topup.amount': 'Сумма', 'admin.balance.topup.description': 'Комментарий', 'admin.balance.topup.description.placeholder': 'Например: бонус или ручное пополнение', 'admin.balance.topup.submit': 'Пополнить баланс', 'admin.balance.withdraw.title': 'Снятие баланса', 'admin.balance.withdraw.amount': 'Сумма', 'admin.balance.withdraw.description': 'Комментарий', 'admin.balance.withdraw.description.placeholder': 'Например: возврат или ручное списание', 'admin.balance.withdraw.submit': 'Списать баланс', 'admin.user_edit.role.customer': 'Заказчик', 'admin.user_edit.role.user': 'Пользователь', 'admin.user_edit.role.specialist': 'Помощник', 'admin.user_edit.role.admin': 'Администратор', 'common.refresh': 'Обновить', 'common.back_home': 'На главную', 'admin.loc.hint': 'Управление городами и районами', 'admin.loc.add_city': 'Новый город', 'admin.loc.add_district': 'Добавить район', 'admin.loc.new': 'Новая локация', 'admin.loc.edit': 'Редактировать локацию', 'admin.loc.district': 'район', 'admin.loc.empty': 'Нет локаций', 'admin.loc.delete.confirm': 'Удалить локацию? Все районы также будут удалены.', 'admin.cat.add_root': 'Новая категория', 'admin.cat.add_sub': 'Подкатегория', 'admin.cat.edit': 'Редактировать', 'admin.cat.delete': 'Удалить', 'admin.cat.delete.confirm': 'Удалить категорию? Все подкатегории также будут удалены.', 'admin.cat.slug': 'Slug', 'admin.cat.icon': 'Иконка', 'admin.cat.name_el': 'Греческий', 'admin.cat.name_en': 'Английский', 'admin.cat.name_ru': 'Русский', 'admin.cat.name_uk': 'Украинский', 'admin.cat.active': 'Активна', 'admin.cat.parent': 'Родительская категория', 'admin.cat.no_parent': 'Верхний уровень', 'admin.cat.save': 'Сохранить', 'admin.cat.cancel': 'Отмена', 'admin.cat.empty': 'Нет категорий', 'admin.cat.hint': 'Управление категориями с многоуровневой иерархией', 'admin.cat.new': 'Новая категория', 'admin.cat.subcategory': 'подкатегория', 'admin.cat.add_child': 'Добавить подкатегорию', 'admin.cat.inactive': 'Неактивна', 'admin.event.user_login': 'Вход', 'admin.event.user_register': 'Регистрация', 'admin.event.admin_user_deactivate': 'Блокировка юзера', 'admin.event.admin_user_activate': 'Разблокировка юзера', 'admin.event.admin_user_role_changed': 'Смена роли', 'admin.event.admin_task_cancelled': 'Отмена задачи', 'admin.event.admin_task_deleted': 'Удаление задачи', 'admin.event.admin_report_reviewed': 'Жалоба рассмотрена', 'admin.event.admin_report_dismissed': 'Жалоба отклонена', 'admin.event.task_created': 'Создана задача', // User status 'user.online': 'Онлайн', 'user.seen_minutes': 'был здесь {n} мин назад', 'user.seen_hours': 'был здесь {n} ч назад', 'user.seen_yesterday': 'был здесь вчера', 'user.seen_days': 'был здесь {n} дн назад', // Specialists 'specialists.title': 'Предложения', 'specialists.search': 'Поиск специалиста...', 'specialists.search.btn': 'Поиск', 'specialists.empty': 'Специалисты не найдены', 'specialists.no_bio': 'Без описания', 'specialists.view': 'Смотреть профиль', 'specialists.reviews': 'отзывов', 'specialist.favorite': 'Добавить в избранное', 'specialist.unfavorite': 'Убрать из избранного', 'specialist.site_link': 'Личный сайт', 'favorites.specialists.title': 'Избранные специалисты', 'favorites.specialists.empty': 'Вы ещё не добавили специалистов в избранное', 'nav.favorites': 'Избранное', 'nav.schedule': 'Расписание', 'nav.find_tasks': 'Поиск заказов', 'schedule.title': 'Моё расписание', 'schedule.subtitle': 'Отмечайте дни когда вы свободны или заняты — заказчики увидят вашу доступность', 'schedule.available': 'Свободен', 'schedule.busy': 'Занят', 'schedule.unset': 'Не указано', 'schedule.click_hint': '← клик меняет статус по кругу', 'schedule.range_mode': 'Выделить диапазон', 'schedule.range_from': 'С {date} — выберите конечную дату', 'schedule.click_to_set': 'Нажмите чтобы отметить', 'schedule.free': 'свободно', 'schedule.busy_count': 'занято', 'schedule.free_days': 'свободных дней', 'schedule.googleCalendar': 'Google Календарь', 'schedule.connectGoogle': 'Подключить Google Календарь', 'schedule.disconnectGoogle': 'Отключить', 'schedule.connectedAs': 'Подключено как', 'schedule.importFromGoogle': 'Синхр. из Google', 'schedule.gcalConnected': '\u2713 Google Календарь подключён', 'schedule.gcalError': 'Ошибка подключения Google Календарь', 'schedule.gcalImportDone': 'Импортировано {n} дней из Google Календарь', 'schedule.gcalAutoSyncNote': 'Изменения доступности автоматически отправляются в Google Календарь', 'schedule.gcalConnectDesc': 'Подключите Google Календарь для автоматической синхронизации расписания', 'schedule.gcalDisconnectConfirm': 'Отключить Google Календарь?', 'find_tasks.title': 'Поиск заказов', 'find_tasks.for_me': 'Для меня', 'find_tasks.all': 'Все заказы', 'find_tasks.by_category': 'По категориям', 'find_tasks.list': 'Списком', 'find_tasks.already_offered': 'Предложение отправлено', 'find_tasks.offer_now': 'Откликнуться', 'find_tasks.empty_for_me': 'Нет заказов в ваших категориях', 'find_tasks.banner_hint': 'Найдите заказы по категориям вашего портфолио', 'find_tasks.no_cards': 'Создайте портфолио специалиста, чтобы видеть подходящие заказы', 'find_tasks.add_card': 'Создать портфолио', 'find_tasks.search': 'Поиск заказов...', 'find_tasks.tasks_count': 'заданий', 'footer.tagline': 'Платформа задач для Греции', 'footer.rights': 'Все права защищены.', 'nav.privacy': 'Политика конфиденциальности', 'nav.delete_account': 'Удаление аккаунта', 'delete_account.title': 'Запрос на удаление аккаунта', 'delete_account.subtitle': 'После проверки вашего запроса мы навсегда удалим ваш аккаунт и данные в течение 30 дней.', 'delete_account.warning': 'Это действие нельзя отменить. Все ваши данные будут удалены безвозвратно.', 'delete_account.reason_label': 'Причина (необязательно)', 'delete_account.reason_placeholder': 'Расскажите, почему вы хотите удалить аккаунт...', 'delete_account.confirm_label': 'Подтверждаю, что хочу навсегда удалить свой аккаунт', 'delete_account.submit': 'Отправить запрос', 'delete_account.submitting': 'Отправка...', 'delete_account.success_title': 'Ваш запрос получен', 'delete_account.success_body': 'Мы обработаем ваш запрос в течение 30 дней и уведомим вас по email.', 'delete_account.login_required': 'Для отправки запроса на удаление необходимо войти в аккаунт.', 'delete_account.login_btn': 'Войти', // App download section 'app.download_title': 'Скачайте мобильное приложение CanHelp', 'app.download_desc': 'Всё CanHelp — всегда под рукой. Доступно для Android и iOS.', // Nav 'nav.pricing': 'Тарифы', // Pricing page 'pricing.title': 'Тарифы', 'pricing.subtitle': 'Выберите подходящий план', 'pricing.role.customer': 'Заказчик', 'pricing.role.specialist': 'Специалист', 'pricing.free': 'Бесплатно', 'pricing.per_month': 'мес', 'pricing.duration': 'Срок', 'pricing.days': 'дн.', 'pricing.current_plan': 'Ваш план', 'pricing.popular': 'Популярный', 'pricing.choose': 'Выбрать', 'pricing.your_plan': 'Активный план', 'pricing.free_default': 'По умолчанию', 'pricing.compare': 'Сравнение функций', 'pricing.feature': 'Функция', 'pricing.faq_note': 'Оплата списывается с баланса CanHelp. Пополнение доступно в разделе Оплата.', 'pricing.feat.messages': 'Сообщений / день', 'pricing.feat.orders': 'Заказов / день', 'pricing.feat.contact_all': 'Связь со всеми', 'pricing.feat.view_phone': 'Просмотр телефона', 'pricing.feat.show_contact': 'Показывать контакты', 'pricing.feat.favorites': 'Избранное', 'pricing.feat.verified_badge': 'Верифицированный бейдж', 'pricing.feat.google_calendar': 'Google Календарь', 'pricing.feat.personal_site': 'Персональный сайт', 'pricing.feat.auto_response': 'Авто-ответ', 'pricing.feat.auto_match': 'Авто-подбор', 'pricing.feat.highlighted_reviews': 'Выделенные отзывы', 'pricing.feat.portfolio': 'Элементов предложения', 'pricing.feat.cards': 'Количество предложений', 'pricing.feat.notify_tasks': 'Уведомления о новых задачах', 'pricing.feat.video': 'Видео в предложении', // Upgrade prompt 'upgrade.available_in': 'Доступно в', 'upgrade.cta': 'Улучшить', // Dashboard plan block 'dashboard.plan.title': 'Мой план', 'dashboard.plan.expires': 'Истекает через {n} дней', 'dashboard.plan.upgrade': 'Улучшить план', 'dashboard.plan.no_plan': 'Бесплатный план', 'dashboard.plan.messages': 'Сообщений сегодня', 'dashboard.plan.orders': 'Заказов сегодня', 'dashboard.plan.limits': 'Дневные лимиты', 'dashboard.plan.features': 'Функции', 'dashboard.plan.stats': 'Статистика', 'dashboard.stats.cards': 'Портфолио', 'dashboard.stats.maxCards': 'Макс. портфолио', 'dashboard.stats.portfolioItems': 'Элементы портфолио', 'dashboard.stats.maxPortfolioItems': 'Макс. элементы', 'dashboard.stats.activeOffers': 'Активные отклики', 'dashboard.stats.reviewsReceived': 'Отзывы', 'dashboard.stats.activeTasks': 'Активные задачи', 'dashboard.stats.completedTasks': 'Завершённые', 'status.need_help': 'Нужна помощь', 'status.active': 'Активен', 'status.toggle_on': 'Включить', 'status.toggle_off': 'Выключить', // FOMO 'fomo.missed_orders': 'Пропущено {n} заказов', 'fomo.missed_value': 'На сумму €{v}', 'fomo.upgrade_hint': 'Улучшите план — получайте больше заказов', 'fomo.conversion': 'Конверсия задач', 'fomo.active': 'Активные', 'fomo.with_offers': 'С офертами', 'fomo.completed': 'Завершённые', 'fomo.already_offered': '{n} специалистов уже откликнулись', 'fomo.specialist_missed': 'Вы пропустили {n} заказов', 'fomo.top_categories': 'Категории', 'fomo.offers_received': 'предложений получено', 'fomo.avg_offers': 'В среднем {n}/задача', 'fomo.completion_rate': 'завершено', // Task auto-match 'task.auto_match': 'Авто-матч', 'task.auto_match_results': 'Топ специалисты', 'task.no_offer_yet': 'Вы ещё не отправили предложение', 'task.make_offer': 'Отправить предложение', 'auto_response.title': 'Авто-ответ', 'auto_response.enabled': 'Включить авто-ответ', 'auto_response.min_budget': 'Мин. бюджет', 'auto_response.max_budget': 'Макс. бюджет', 'auto_response.default_price': 'Цена по умолчанию', 'auto_response.default_message': 'Сообщение по умолчанию', 'auto_response.max_per_day': 'Макс. авто-офертов в день', 'auto_response.save': 'Сохранить', 'auto_response.saved': 'Сохранено', 'auto_response.categories': 'Категории', 'auto_response.locations': 'Локации', // Personal site 'profile.personal_site': 'Персональный сайт', 'profile.site_slug': 'URL slug', 'profile.site_slug_hint': 'Только латинские буквы, цифры, - и _', 'profile.site_open': 'Открыть сайт', 'profile.site_preview': 'Ваш сайт', 'profile.show_contact': 'Показывать контакты', 'profile.show_contact_hint': 'Заказчики с Pro/Ultimate-планом увидят ваш телефон', // Google Calendar plan gate 'gcal.upgrade_required': 'Google Календарь требует план Pro или Ultimate', // Chat limits 'chat.limit_warning': 'Осталось {n} сообщений сегодня', 'chat.limit_reached': 'Лимит сообщений исчерпан. Улучшите план', 'chat.upgrade': 'Улучшить', // Site page 'site.member_since': 'С нами с', 'site.rating': 'Рейтинг', 'site.completed_tasks': 'Выполнено', 'site.languages': 'Языков', 'site.photos': 'фото', 'site.contact_form': 'Связаться', 'site.contact_sent': 'Сообщение отправлено!', 'site.contact_sent_desc': 'Специалист свяжется с вами в ближайшее время', 'site.contact_name': 'Имя', 'site.contact_name_ph': 'Ваше имя', 'site.contact_email_ph': 'your@email.com', 'site.contact_message': 'Сообщение', 'site.contact_message_ph': 'Опишите вашу задачу...', 'site.contact_send': 'Отправить', 'site.share': 'Поделиться', 'site.speaks_languages': 'Говорит на языках', 'site.message_sent': 'Сообщение отправлено!', 'site.message_sent_desc': 'Специалист получит его в чате', 'site.message_placeholder': 'Напишите сообщение...', 'site.write_to_chat': 'Написать в чат', 'site.auth_required_title': 'Нужна авторизация', 'site.auth_required_desc': 'Чтобы написать в чат, необходимо войти в аккаунт CanHelp.', 'site.auth_login_btn': 'Войти в аккаунт', 'site.auth_contact_form_btn': 'Написать через форму обратной связи', 'specialist.services': 'Услуги', 'portfolio.title': 'Портфолио', 'status.can_help_now': 'Готов помочь', 'common.not_found': 'Страница не найдена', 'common.anonymous': 'Анонимно', 'specialist_setup.page_title': 'Настройка профиля специалиста', 'specialist_setup.step_of': 'Шаг {current} из {total}', 'specialist_setup.next': 'Далее', 'specialist_setup.back': 'Назад', 'specialist_setup.skip': 'Пропустить', 'specialist_setup.finish': 'Завершить', 'specialist_setup.go_to_profile': 'Перейти в профиль', 'specialist_setup.browse_tasks': 'Найти задачи', 'specialist_setup.step1.title': 'Добро пожаловать!', 'specialist_setup.step1.subtitle': 'Давайте настроим ваш профиль', 'specialist_setup.step1.desc': 'Полный профиль помогает находить больше клиентов. Следуйте шагам, чтобы создать идеальный профиль специалиста.', 'specialist_setup.step1.what_next': 'Что мы сделаем:', 'specialist_setup.step1.item1': 'Заполним основную информацию', 'specialist_setup.step1.item2': 'Создадим карточку услуги', 'specialist_setup.step1.item3': 'Добавим навыки и категории', 'specialist_setup.step1.item4': 'Выберем географию обслуживания', 'specialist_setup.step1.item5': 'Загрузим фото портфолио', 'specialist_setup.step2.title': 'Базовый профиль', 'specialist_setup.step2.subtitle': 'Расскажите о себе', 'specialist_setup.step2.bio_label': 'О себе', 'specialist_setup.step2.bio_placeholder': 'Опишите ваш опыт, услуги которые вы предлагаете...', 'specialist_setup.step2.phone_label': 'Телефон', 'specialist_setup.step2.phone_placeholder': '+30 6900000000', 'specialist_setup.step2.photo_label': 'Фото профиля', 'specialist_setup.step2.photo_btn': 'Загрузить фото', 'specialist_setup.step2.photo_uploading': 'Загрузка...', 'specialist_setup.step2.photo_hint': 'Отображается в вашем профиле', 'specialist_setup.step3.title': 'Карточка услуги', 'specialist_setup.step3.subtitle': 'Создайте вашу первую карточку услуги', 'specialist_setup.step3.title_label': 'Название карточки', 'specialist_setup.step3.title_placeholder': 'Напр. Сантехник, Электрик, Уборка...', 'specialist_setup.step3.desc_label': 'Описание', 'specialist_setup.step3.desc_placeholder': 'Подробно опишите что вы предлагаете, опыт, преимущества...', 'specialist_setup.step3.title_required': 'Название обязательно', 'specialist_setup.step4.title': 'Навыки и категории', 'specialist_setup.step4.subtitle': 'Добавьте навыки и выберите категории', 'specialist_setup.step4.skills_label': 'Навыки', 'specialist_setup.step4.skills_placeholder': 'Напр. Монтаж труб...', 'specialist_setup.step4.skills_add': 'Добавить', 'specialist_setup.step4.categories_label': 'Категории', 'specialist_setup.step5.title': 'География обслуживания', 'specialist_setup.step5.subtitle': 'Где вы оказываете услуги?', 'specialist_setup.step5.hint': 'Выберите города или конкретные районы', 'specialist_setup.done.title': 'Ваш профиль готов!', 'specialist_setup.done.subtitle': 'Поздравляем! Профиль настроен', 'specialist_setup.done.desc': 'Теперь вы можете получать заказы от клиентов. Найдите задачи, которые соответствуют вашим навыкам.', // Support 'support.title': 'Поддержка', 'support.type.label': 'Тип обращения', 'support.type.bug': 'Ошибка', 'support.type.suggestion': 'Предложение', 'support.type.other': 'Другое', 'support.subject': 'Тема', 'support.subject.placeholder': 'Кратко опишите проблему...', 'support.body': 'Сообщение', 'support.body.placeholder': 'Подробно опишите проблему или предложение...', 'support.submit': 'Отправить', 'support.cancel': 'Отмена', 'support.error': 'Ошибка отправки. Попробуйте ещё раз.', 'support.sent.title': 'Запрос получен!', 'support.sent.body': 'Мы ответим на ваш email в ближайшее время.', 'support.sent.close': 'Закрыть', 'admin.tab.support': 'Поддержка', 'admin.tab.backup': 'Бэкап', 'admin.tab.translations': 'Переводы', 'admin.tab.dbcheck': 'Проверка БД', 'admin.tab.balances': 'Баланс', 'admin.tab.push': 'Push', 'admin.tab.referrals': 'Рефералы', 'admin.search': 'Поиск', 'admin.noData': 'Нет данных', 'admin.cat.order': 'Порядок', 'admin.cat.skills': 'Навыки', 'admin.plans.form.max_tasks': 'Макс. задач', 'admin.settings.referral.shared_section': 'Общие настройки рефералов', 'admin.settings.seo.title': 'SEO настройки', 'admin.backup.title': 'Бэкап', 'admin.backup.tables': 'Таблицы', 'admin.backup.exportAll': 'Экспорт всего', 'admin.backup.importAll': 'Импорт всего', 'admin.backup.exportTable': 'Экспорт таблицы', 'admin.backup.importTable': 'Импорт таблицы', 'admin.backup.exporting': 'Экспорт...', 'admin.backup.importing': 'Импорт...', 'admin.backup.exportSuccess': 'Экспорт завершён', 'admin.backup.importSuccess': 'Импорт завершён', 'admin.backup.autoBackup': 'Автобэкап', 'admin.backup.autoBackupDesc': 'Автоматический ежедневный бэкап', 'admin.backup.storedBackups': 'Сохранённые бэкапы', 'admin.backup.noStoredBackups': 'Сохранённых бэкапов нет', 'admin.backup.restore': 'Восстановить', 'admin.backup.restoreConfirm': 'Восстановить из бэкапа?', 'admin.backup.restoreSuccess': 'Восстановление завершено', 'admin.backup.restoring': 'Восстановление...', 'admin.backup.date': 'Дата', 'admin.backup.size': 'Размер', 'admin.backup.today': 'Сегодня', 'admin.backup.yesterday': 'Вчера', 'admin.balance.col.operation': 'Операция', 'admin.balance.col.amount': 'Сумма', 'admin.balance.col.result': 'Баланс', 'admin.balance.col.description': 'Описание', 'admin.balance.col.date': 'Дата', 'admin.balance.empty': 'Записей пока нет', 'admin.balance.filter.all': 'Все операции', 'admin.balance.filter.user_id': 'Фильтр по userId', 'admin.balance.kind.topup': 'Пополнение', 'admin.balance.kind.plan_purchase': 'Списание за тариф', 'admin.balance.kind.admin_topup': 'Пополнение админом', 'admin.balance.kind.admin_adjustment': 'Корректировка', 'admin.support.search': 'Поиск', 'admin.support.all_statuses': 'Все статусы', 'admin.support.all_types': 'Все типы', 'admin.support.none': 'Обращений нет', 'admin.support.reply': 'Ответить', 'admin.support.reply_placeholder': 'Введите ответ...', 'admin.support.send_reply': 'Отправить ответ', 'admin.support.cancel': 'Отмена', 'admin.support.close': 'Закрыть', 'admin.support.status.open': 'Открыто', 'admin.support.status.in_progress': 'В работе', 'admin.support.status.resolved': 'Решено', 'admin.support.status.closed': 'Закрыто', 'admin.support.your_reply': 'Ваш ответ', 'admin.user_edit.visibility_requirements.title': 'Профиль пока не попадает в «Предложения»', 'admin.user_edit.visibility_requirements.hint': 'Нужно выполнить условия видимости:', 'admin.user_edit.visibility_requirements.bio': 'Заполнить описание (bio)', 'admin.user_edit.visibility_requirements.published_card': 'Опубликовать хотя бы одну карточку', 'admin.user_edit.visibility_requirements.categories': 'Указать категорию в опубликованной карточке', 'admin.user_edit.visibility_requirements.locations': 'Указать локацию в опубликованной карточке', 'auto_response.desc': 'Автоматически отвечать на подходящие задачи', 'auto_response.budget_range': 'Бюджет задачи', 'auto_response.message_placeholder': 'Здравствуйте! Я могу помочь с этой задачей...', 'profile.background.title': 'Фон шапки профиля', 'profile.background.hint': 'Показывается в шапке публичного профиля на web и в мобильном приложении.', 'profile.photo.uploading': 'Загрузка...', 'profile.balance.history': 'Архив операций', 'profile.balance.history.last': 'Последние операции', 'profile.balance.history.empty': 'Операций пока нет', 'profile.balance.history.balance_after': 'Баланс после', 'profile.balance.history.kind.topup': 'Пополнение баланса', 'profile.balance.history.kind.plan_purchase': 'Списание за тариф', 'profile.balance.history.kind.admin_topup': 'Пополнение администратором', 'profile.balance.history.kind.admin_adjustment': 'Корректировка администратором', 'profile.plan_history.title': 'История тарифного плана', 'profile.plan_history.empty': 'История изменений тарифа пока пуста', 'profile.plan_history.expires': 'До', 'profile.plan_history.days': 'дней', 'profile.plan_history.event.activated': 'Активирован', 'profile.plan_history.event.renewed': 'Продлён', 'profile.plan_history.event.downgraded': 'Понижен', 'profile.plan_history.event.referral_reward': 'Реферальная награда', 'profile.plan_history.event.admin_change': 'Изменён администратором', 'profile.plan_history.event.expired': 'Истёк', 'profile.show_contact_desc': 'Позволяет клиентам связаться напрямую', 'profile.site.visible.price_list': 'Прайслист', 'site.pricelist': 'Прайслист', 'status.plan_required': 'Статус недоступен на текущем тарифе', 'status.admin_not_applicable': 'Для аккаунта администратора пользовательский статус не применяется' }, uk: { 'footer.slogan': 'Ваше завдання — наша турбота! Вирішуємо будь-які питання швидко і зручно.', 'footer.links': 'Посилання', 'footer.socials': 'Ми в соцмережах', 'nav.home': 'Головна', 'nav.tasks': 'Завдання', 'nav.post': '+ Опублікувати', 'nav.dashboard': 'Мої завдання', 'nav.chat': 'Повідомлення', 'nav.notifications': 'Сповіщення', 'nav.profile': 'Профіль', 'nav.admin': 'Адмінка', 'nav.specialists': 'Пропозиції', 'nav.new_task': 'Нове завдання', 'nav.login': 'Увійти', 'nav.register': 'Реєстрація', 'nav.logout': 'Вийти', 'hero.title': 'Кожен має навичку, яка може допомогти іншому', 'hero.subtitle': 'Знайди допомогу, запропонуй свої навички або заробляй, допомагаючи іншим', 'hero.cta.post': 'Знайти допомогу', 'hero.cta.browse': 'Запропонувати допомогу', 'hero.cta.specialists': 'Знайти роботу', 'hero.search.placeholder': 'Що потрібно? напр. електрик, прибирання...', 'hero.specialist.title': 'Знайдіть замовлення поруч з вами', 'hero.specialist.subtitle': 'Відкрийте замовлення у своїх категоріях і надішліть пропозицію', 'hero.specialist.cta': 'Знайти замовлення', 'hero.specialist.search.placeholder': 'Пошук замовлень... напр. електрика, прибирання', 'section.categories.specialist': 'Знайдіть замовлення за категорією', 'section.cities.specialist': 'Замовлення за містом', 'how.specialist.step1.title': 'Створіть картку спеціаліста', 'how.specialist.step1.desc': 'Вкажіть категорії, навички і райони — система знайде підходящі замовлення автоматично', 'how.specialist.step2.title': 'Знайдіть підходящі замовлення', 'how.specialist.step2.desc': 'Переглядайте замовлення у своїх категоріях і починайте роботу одразу', 'how.specialist.step3.title': 'Надішліть пропозицію і заробляйте', 'how.specialist.step3.desc': 'Подайте пропозицію з ціною і термінами, спілкуйтеся з клієнтами і виконуйте замовлення', 'stats.specialists': 'пропозиції', 'stats.tasks': 'завдань', 'stats.categories': 'категорій', 'stats.free': 'безкоштовна реєстрація', 'promo.title': 'Отримай Pro безкоштовно — тільки до кінця року', 'promo.subtitle': 'Зареєструйся зараз і користуйся тарифом Pro без оплати. Акція закінчується 31 грудня.', 'promo.cta': 'Зареєструватися', 'promo.days': 'днів', 'promo.hours': 'годин', 'promo.minutes': 'хвилин', 'promo.seconds': 'сек.', 'section.categories': 'Створи завдання у будь-якій категорії', 'section.how': 'Як це працює', 'section.recent': 'Останні завдання', 'section.all': 'Дивитись всі →', 'section.more': 'ще', 'section.cities': 'Міста і райони', 'section.community': 'Суспільний проект для всіх', 'community.subtitle': 'CanHelp — не просто маркетплейс, це спільнота взаємодопомоги. Будь-хто, хто має знання або навичку, може знайти клієнта. Будь-хто, у кого є завдання, може знайти спеціаліста.', 'community.point1.title': 'Вмієте щось робити?', 'community.point1.desc': 'Ремонт, репетиторство, дизайн, переклади, догляд — кожна навичка має цінність. Створіть профіль і знаходьте клієнтів поруч.', 'community.point2.title': 'Потрібна допомога?', 'community.point2.desc': 'Опублікуйте завдання за хвилину і отримуйте пропозиції від перевірених спеціалістів у вашому місті.', 'community.point3.title': 'Допоможіть проекту рости', 'community.point3.desc': 'CanHelp розвивається завдяки спільнотам. Поділіться посиланням з друзями і знайомими — разом ми будуємо щось корисне для всіх.', 'community.share': 'Поділитися з друзями', 'community.share.copied': 'Посилання скопійовано!', 'section.referral': 'Реферальна програма', 'referral.home.subtitle': 'Поділіться посиланням — кожен новий користувач, зареєстрований через нього, принесе вам нагороду.', 'referral.home.step1.title': 'Зареєструйтесь і отримайте посилання', 'referral.home.step1.desc': 'Створіть акаунт і знайдіть своє унікальне реферальне посилання в профілі.', 'referral.home.step2.title': 'Поділіться з друзями', 'referral.home.step2.desc': 'Надішліть посилання друзям, знайомим або опублікуйте в соціальних мережах.', 'referral.home.step3.title': 'Отримуйте нагороди', 'referral.home.step3.desc': 'Як тільки друг підтвердить email, ви автоматично отримаєте свою нагороду.', 'referral.home.cta': 'Отримати посилання', 'referral.home.badge': 'Реферальна програма', 'section.faq': 'Часті запитання', 'faq.q1': 'Як працює CanHelp?', 'faq.a1': 'Опублікуйте завдання, отримайте пропозиції від спеціалістів, виберіть найкращого і почніть співпрацю. Це швидко, просто і безкоштовно для клієнтів.', 'faq.q2': 'Скільки коштує використання платформи?', 'faq.a2': 'Реєстрація і публікація завдань повністю безкоштовні для клієнтів. Спеціалісти мають доступ до безкоштовного плану, а також до преміум-опцій.', 'faq.q3': 'Як стати спеціалістом?', 'faq.a3': 'Зареєструйтесь, перейдіть у «Стати спеціалістом», заповніть профіль навичками і категоріями і починайте отримувати завдання.', 'faq.q4': 'Як вибрати підходящого спеціаліста?', 'faq.a4': 'Оцініть відгуки, досвід, навички і портфоліо кожного спеціаліста. Спілкуйтеся через чат платформи і уточнюйте деталі до прийняття рішення.', 'faq.q5': 'Що якщо я не задоволений результатом?', 'faq.a5': 'Ви можете залишити відгук про спеціаліста і поставити оцінку від 1 до 5 зірок. Відгуки допомагають іншим користувачам вибирати перевірених професіоналів.', 'faq.q6': 'Чи можна зв\'язатись зі спеціалістом до прийняття пропозиції?', 'faq.a6': 'Так. Як тільки ви отримали пропозицію, можна відкрити чат зі спеціалістом, задати питання і уточнити всі деталі до прийняття рішення.', 'faq.q7': 'Скільки часу чекати пропозицій?', 'faq.a7': 'Як правило, протягом кількох годин. Спеціалісти отримують сповіщення про нові завдання і можуть швидко відповісти.', 'faq.q8': 'Чи можна розмістити завдання у будь-якому місті Греції?', 'faq.a8': 'Так! CanHelp охоплює всю Грецію — Афіни, Салоніки, Патри та інші міста.', 'faq.q9': 'Які види завдань є на CanHelp?', 'faq.a9': 'Ремонт, прибирання, електрика, репетиторство, дизайн, IT, переїзди, краса та багато іншого. Категорії постійно розширюються.', 'faq.q10': 'Чи є мобільний додаток?', 'faq.a10': 'Так! CanHelp доступний для Android та iOS. Завантажте додаток і керуйте всім зі свого телефону.', 'how.step1.title': 'Опублікуй завдання', 'how.step1.desc': 'Опиши що потрібно і встанови бюджет', 'how.step2.title': 'Отримай пропозиції', 'how.step2.desc': 'Спеціалісти надішлють пропозиції з ціною і термінами', 'how.step3.title': 'Обери і почни', 'how.step3.desc': 'Обери найкращого професіонала і почни співпрацю', 'tasks.title': 'завдань', 'tasks.filters': 'Фільтри', 'tasks.search': 'Пошук', 'tasks.search.placeholder': 'Назва або ключове слово...', 'tasks.search.btn': 'Пошук', 'tasks.publish': 'Опублікувати', 'tasks.category.all': 'Всі', 'tasks.category.all_in': 'Всі в', 'tasks.category.label': 'Категорія', 'tasks.location.label': 'Місто', 'tasks.location.placeholder': 'напр. Афіни', 'tasks.empty': 'Завдань не знайдено', 'tasks.empty.cta': 'Опублікуй перше', 'task.status.open': 'Відкрито', 'task.status.in_progress': 'В роботі', 'task.status.completed': 'Завершено', 'task.status.cancelled': 'Скасовано', 'task.status.draft': 'Чернетка', 'task.budget': 'Бюджет', 'task.location': 'Місцезнаходження', 'task.deadline': 'Дата початку', 'task.expires_at': 'Активно до', 'task.created_at': 'Створено', 'task.customer': 'Замовник', 'task.offer.btn': 'Надіслати пропозицію', 'task.invite.banner_title': 'Вас запросили на це завдання', 'task.invite.banner_hint': 'Замовник особисто запросив вас', 'task.invite.accept': 'Надіслати пропозицію', 'task.invite.decline': 'Відмовитися', 'offer.accept': 'Прийняти', 'offer.decline': 'Відхилити', 'task.complete': 'Завершити завдання', 'task.complete.confirm': 'Позначити завдання як виконане?', 'task.edit': 'Редагувати', 'task.status_label': 'Статус', 'task.yours': 'Ваше завдання', 'task.offer.yours': 'Ваша пропозиція', 'review.leave': 'Залишити відгук', 'review.rating': 'Оцінка', 'review.comment': 'Коментар', 'review.comment.placeholder': 'Розкажіть про свій досвід...', 'review.submit': 'Надіслати відгук', 'review.submitting': 'Надсилання...', 'review.done': 'Відгук надіслано!', 'profile.reviews': 'Відгуки', 'profile.no_reviews': 'Відгуків поки немає', 'profile.rating': 'Рейтинг', 'profile.skills.label': 'Навички', 'profile.member_since': 'Учасник з', 'task.offers': 'Пропозиції', 'task.offers.none': 'Пропозицій поки немає', 'create.title': 'Опублікувати завдання', 'create.field.title': 'Назва', 'create.field.description': 'Опис', 'create.field.category': 'Категорія', 'create.field.category.select': 'Оберіть...', 'create.field.location': 'Місцезнаходження', 'create.field.location.any': 'Де завгодно', 'create.field.location.all': 'Все місто', 'create.field.budget': 'Бюджет (€)', 'create.field.deadline': 'Дата початку', 'create.field.expires_at': 'Оголошення активне', 'create.field.expires_at.days': '{n} днів', 'create.field.budget_negotiable': 'Ціна обговорюється', 'create.field.time_slot': 'Час виконання', 'create.field.time_slot.any': 'У будь-який час', 'create.field.time_slot.morning': 'Вранці (08:00–13:00)', 'create.field.time_slot.afternoon': 'Вдень (13:00–18:00)', 'create.field.time_slot.evening': 'Ввечері (18:00–22:00)', 'create.field.time_slot.weekend': 'Вихідний', 'create.field.address': 'Адреса (необов\'язково)', 'create.field.address.district': 'Квартал', 'create.field.address.street': 'Вулиця', 'create.field.address.house': 'Будинок', 'create.field.confidential': 'Конфіденційна нотатка', 'create.field.confidential.placeholder': 'Деталі, видні тільки призначеному спеціалісту...', 'create.field.confidential.hint': 'Не відображається публічно', 'create.field.photos': 'Фотографії', 'create.field.photos.add': 'Додати фото', 'create.field.photos.uploading': 'Завантаження...', 'task.budget_negotiable': 'Ціна обговорюється', 'task.time_slot': 'Час', 'task.confidential': 'Конфід. нотатка', 'create.field.title.placeholder': 'напр. Прибирання квартири 80кв', 'create.field.description.placeholder': 'Детально опишіть що потрібно...', 'create.field.location.placeholder': 'напр. Афіни, Колонаки', 'create.field.budget.placeholder': 'напр. 100', 'create.submit': 'Опублікувати завдання', 'create.submitting': 'Публікація...', 'login.title': 'Ласкаво просимо', 'login.subtitle': 'Вхід до CanHelp', 'login.email': 'Email', 'login.password': 'Пароль', 'login.submit': 'Увійти', 'login.submitting': 'Вхід...', 'login.error': 'Невірний email або пароль', 'login.unverified.title': 'Підтвердіть ваш email', 'login.unverified.desc': 'Ми надіслали посилання для підтвердження на ваш email. Перевірте вхідні (або спам) і перейдіть за посиланням.', 'login.unverified.resend': 'Надіслати лист повторно', 'login.unverified.sending': 'Надсилання...', 'login.unverified.sent': '✓ Надіслано — перевірте вхідні', 'profile.email.verified': 'Email підтверджено', 'profile.email.not_verified': 'Email не підтверджено', 'login.no_account': 'Немає акаунту?', 'login.register_link': 'Зареєструватися', 'login.forgot_password': 'Забув пароль?', 'login.or_continue_with': 'або продовжте через', 'login.continue_google': 'Увійти через Google', 'forgot.title': 'Забув пароль', 'forgot.subtitle': 'Введіть email для отримання посилання відновлення', 'forgot.email': 'Email', 'forgot.submit': 'Надіслати посилання', 'forgot.submitting': 'Надсилання...', 'forgot.sent.title': 'Перевірте вхідні', 'forgot.sent.desc': 'Якщо акаунт з таким email існує, ми надішлемо посилання для скидання пароля.', 'forgot.back_to_login': 'Повернутися до входу', 'forgot.error': 'Не вдалося надіслати посилання. Перевірте адресу і спробуйте знову.', 'forgot.error.not_found': 'Акаунт з таким email не знайдено.', 'forgot.error.send_failed': 'Помилка надсилання листа. Спробуйте пізніше.', 'reset.title': 'Новий пароль', 'reset.subtitle': 'Введіть новий пароль', 'reset.password': 'Новий пароль', 'reset.confirm': 'Підтвердіть пароль', 'reset.submit': 'Змінити пароль', 'reset.submitting': 'Збереження...', 'reset.success': 'Пароль успішно змінено. Перенаправлення до входу...', 'reset.back_to_login': 'Повернутися до входу', 'reset.error.mismatch': 'Паролі не збігаються', 'reset.error.invalid': 'Недійсне або застаріле посилання. Запросіть нове.', 'register.title': 'Реєстрація', 'register.subtitle': 'Створити акаунт в CanHelp', 'register.first_name': 'Ім\'я', 'register.last_name': 'Прізвище', 'register.email': 'Email', 'register.password': 'Пароль (мін. 8 символів)', 'register.role': 'Роль', 'register.role.customer': 'Користувач', 'register.role.customer.desc': 'Публікую завдання', 'register.role.specialist': 'Спеціаліст', 'register.role.specialist.desc': 'Беру завдання', 'register.submit': 'Створити акаунт', 'register.submitting': 'Реєстрація...', 'register.has_account': 'Вже є акаунт?', 'register.login_link': 'Увійти', 'register.continue_google': 'Зареєструватися через Google', 'register.check_email.title': 'Перевірте пошту', 'register.check_email.desc': 'Ми надіслали посилання для підтвердження на ваш email. Перевірте вхідні (або спам) і перейдіть за посиланням.', 'register.check_email.login': 'Повернутися до входу', 'register.captcha_failed': 'Перевірка CAPTCHA не пройдена. Пройдіть перевірку безпеки та спробуйте знову.', 'dashboard.title': 'Панель управління', 'dashboard.new_task': '+ Нове завдання', 'dashboard.onboarding.title': 'Ласкаво просимо до CanHelp 👋', 'dashboard.onboarding.subtitle': 'Оберіть, з чого хочете почати.', 'dashboard.onboarding.helper.title': 'Запропонуйте свою допомогу', 'dashboard.onboarding.helper.desc': 'Заповніть анкету — навички, категорії та міста. Це займе кілька хвилин, і ви почнете отримувати замовлення.', 'dashboard.onboarding.helper.cta': 'Заповнити анкету', 'dashboard.onboarding.requester.title': 'Потрібна допомога?', 'dashboard.onboarding.requester.desc': 'Опублікуйте завдання — помічники надішлють вам свої пропозиції.', 'dashboard.onboarding.requester.cta': 'Опублікувати завдання', 'dashboard.my_tasks': 'Мої завдання', 'dashboard.my_offers': 'Мої пропозиції', 'dashboard.invitations': 'Запрошення на завдання', 'dashboard.offers_count': 'проп.', 'dashboard.declined_count': 'відх.', 'dashboard.completed_tasks': 'Завершені завдання', 'dashboard.completed_offers': 'Завершені пропозиції', 'dashboard.review_pending': 'Оцінка ще не залишена', 'tasks.new.top_specialists': 'Топ спеціалісти', 'tasks.new.select_category': 'Виберіть категорію, щоб побачити спеціалістів', 'tasks.new.invite': 'Запропонувати роботу', 'tasks.new.invited': 'Вибрано ✓', 'reviews.count': 'відгуків', 'filter.location': 'Локація', 'filter.language': 'Мови', 'filter.language.any': 'Будь-яка мова', 'filter.category.all': 'Всі категорії', 'user.categories': 'Категорії', 'user.work_area': 'Район роботи', 'user.specialist_cards': 'Картки послуг', 'card.skills': 'Навички', 'card.categories': 'Категорії', 'card.geography': 'Район роботи', 'card.portfolio': 'Портфоліо', 'card.close': 'Закрити', 'dashboard.tasks.empty': 'Ви не публікували завдання', 'dashboard.tasks.empty.cta': 'Опублікуйте перше', 'dashboard.tasks.add_new': 'Додати нове завдання', 'dashboard.offers.empty': 'Ви не надсилали пропозицій', 'dashboard.offers.empty.cta': 'Знайти завдання', 'dashboard.customer.specialists_title': 'Шукаєте виконавця?', 'dashboard.customer.specialists_hint': 'Переглядайте профілі спеціалістів, читайте відгуки і запрошуйте їх на свої завдання', 'dashboard.customer.specialists_cta': 'Знайти виконавця', 'dashboard.customer.how_title': 'Як це працює', 'dashboard.customer.step1': 'Створіть завдання з описом і бюджетом', 'dashboard.customer.step2': 'Спеціалісти надішлють пропозиції з ціною і термінами', 'dashboard.customer.step3': 'Оберіть підходящого і почніть роботу', 'notif.title': 'Сповіщення', 'notif.mark_all': 'Позначити всі як прочитані', 'notif.empty': 'Немає сповіщень', 'notif.type.generic': 'Сповіщення', 'notif.type.new_offer': 'Нова пропозиція', 'notif.type.offer_accepted': 'Вашу пропозицію прийнято', 'notif.type.offer_declined': 'Вашу пропозицію відхилено', 'notif.type.task_completed': 'Завдання виконано', 'notif.type.task_cancelled': 'Завдання скасовано', 'notif.type.new_message': 'Нове повідомлення', 'notif.type.new_review': 'Новий відгук', 'notif.type.task_invite': 'Запрошення на завдання', 'notif.type.referral_reward': 'Реферальна нагорода', 'notif.type.specialist_card_submitted': 'Картку надіслано на перевірку', 'notif.type.specialist_card_approved': 'Картку схвалено', 'notif.type.specialist_card_rejected': 'Картку відхилено', 'notif.body.new_offer': 'Нова пропозиція на «{title}»', 'notif.body.offer_accepted': 'Вашу пропозицію на «{title}» прийнято', 'notif.body.offer_declined': 'Вашу пропозицію на «{title}» відхилено', 'notif.body.task_invite': 'Вас запрошують на «{title}»', 'notif.body.new_review': 'Ви отримали оцінку {rating}★', 'notif.body.referral_reward': 'На ваш акаунт додано {days} днів доступу до плану «{plan}»!', 'notif.body.specialist_card_submitted': 'Картку «{title}» надіслано на перевірку', 'notif.body.specialist_card_approved': 'Картку «{title}» схвалено та опубліковано', 'notif.body.specialist_card_rejected': 'Картку «{title}» не було схвалено. Виправте її та надішліть знову.', 'offer.status.pending': 'Очікує', 'offer.status.accepted': 'Прийнято', 'offer.status.declined': 'Відхилено', 'offer.status.withdrawn': 'Відкликано', 'offer.status.other_accepted': 'Вибрано іншого виконавця', 'common.loading': 'Завантаження...', 'common.error': 'Помилка', 'common.save': 'Зберегти', 'common.saving': 'Збереження...', 'common.cancel': 'Скасувати', 'common.add': 'Додати', 'common.close': 'Закрити', 'common.edit': 'Редагувати', 'common.delete': 'Видалити', 'common.from': 'від', 'common.currency': '€', 'common.greece': 'Греція', 'chat.connected': 'Підключено', 'chat.disconnected': 'Відключено', 'chat.no_rooms': 'Переписок поки немає', 'chat.task_fallback': 'Завдання', 'chat.select': 'Виберіть переписку', 'chat.no_messages': 'Повідомлень поки немає', 'chat.placeholder': 'Напишіть повідомлення... (Enter для надсилання)', 'chat.conversation_fallback': 'Переписка', 'chat.direct_chat': 'Особистий чат', 'chat.linked_task': 'Прикріплене замовлення', 'chat.write_btn': 'Написати', 'chat.just_now': 'щойно', 'chat.min_ago': 'хв', 'chat.write_specialist': 'Написати спеціалісту', 'chat.write_customer': 'Написати замовнику', 'chat.notif_settings': 'Налаштування сповіщень', 'chat.notif_messages': 'Сповіщення про нові повідомлення', 'chat.toast_title': 'Нове повідомлення', 'chat.toast_open': 'Відкрити чат', 'offer.price': 'Ціна', 'offer.price.placeholder': 'напр. 80', 'offer.customer_budget': 'Бюджет замовника', 'offer.message': 'Повідомлення', 'offer.optional': 'необов\'язково', 'offer.message.placeholder': 'Представтеся, розкажіть про досвід і чому ви найкращий вибір...', 'offer.submitting': 'Надсилання...', 'profile.photo': 'Фото профілю', 'profile.photo.change': 'Змінити фото', 'profile.photo.hint': 'JPEG, PNG, WebP · до 5MB', 'profile.basic_info': 'Основна інформація', 'profile.phone': 'Телефон', 'profile.phone.placeholder': '+30 6901234567', 'profile.bio': 'Короткий опис', 'profile.bio.placeholder': 'Розкажіть трохи про себе...', 'profile.language': 'Мова', 'profile.language.hint': 'Мова інтерфейсу і email-сповіщень', 'profile.languages': 'Мови спілкування', 'profile.languages.hint': 'Виберіть усі мови, якими ви спілкуєтесь', 'profile.skills': 'Навички', 'profile.skills.subtitle': 'Додайте послуги, які ви пропонуєте', 'profile.skills.placeholder': 'напр. Прибирання, IT, Репетиторство...', 'profile.role': 'Роль акаунту', 'profile.role.specialist': '🔧 Помічник', 'profile.role.admin': '👑 Admin', 'profile.role.customer': '👤 Користувач', 'profile.role.user': '👤 Користувач', 'profile.role.change': 'Для зміни ролі зверніться до служби підтримки.', 'profile.become_specialist': 'Запропонувати допомогу', 'profile.become_specialist.desc': 'Створи профіль помічника, запропонуй свої навички та почни отримувати завдання.', 'become_specialist.hero.title': 'Запропонуй свої навички і почни заробляти', 'become_specialist.hero.subtitle': 'Створи профіль помічника та отримуй запити від людей, яким потрібна допомога', 'become_specialist.how.title': 'Як це працює', 'become_specialist.step1.title': 'Створи портфоліо спеціаліста', 'become_specialist.step1.desc': 'Вкажи категорії, навички і зону покриття — система автоматично підбере підходящі замовлення', 'become_specialist.step2.title': 'Шукай замовлення', 'become_specialist.step2.desc': 'Переглядай завдання по своїх категоріях у розділі «Пошук замовлень»', 'become_specialist.step3.title': 'Відгукуйся і заробляй', 'become_specialist.step3.desc': 'Надсилай пропозиції з ціною і термінами, спілкуйся з клієнтами і виконуй замовлення', 'become_specialist.benefits.title': 'Переваги профілю спеціаліста', 'become_specialist.benefit1': 'Пошук замовлень за категоріями і локацією', 'become_specialist.benefit2': 'Публічний профіль з відгуками клієнтів', 'become_specialist.benefit3': 'Розклад доступності, видимий клієнтам', 'become_specialist.benefit4': 'Додавання до обраного клієнтами', 'become_specialist.cta': 'Детальніше', 'become_specialist.free_badge': 'Безкоштовна реєстрація', 'profile.tab.notifications': 'Сповіщення', 'profile.tab.reviews': 'Відгуки', 'profile.tab.referral': 'Реферали', 'profile.tab.auto_response': 'Авто-відповідь', 'profile.tab.site': 'Сайт', 'profile.site.title': 'Персональна сторінка', 'profile.site.url_label': 'Особистий сайт', 'profile.site.copy': 'Копіювати', 'profile.site.copied': 'Скопійовано', 'profile.site.visible_title': 'Що відображається на вашій сторінці', 'profile.site.visible.name': 'Ім\'я і фото', 'profile.site.visible.bio': 'Біографія', 'profile.site.visible.rating': 'Рейтинг і відгуки', 'profile.site.visible.portfolio': 'Портфоліо / Картки', 'profile.site.visible.contacts': 'Контактні дані', 'profile.site.visible.full_last_name': 'Прізвище повністю', 'profile.site.visible.services': 'Картки послуг', 'profile.site.visible.reviews': 'Розділ з відгуками', 'profile.site.visible.status': 'Статус «Готовий допомогти»', 'profile.site.theme': 'Тема оформлення', 'profile.site.theme.dark': 'Темна', 'profile.site.theme.light': 'Світла', 'profile.site.slug_taken': 'Ця адреса вже зайнята', 'profile.site.stats.title': 'Аналітика сайту', 'profile.site.stats.days': 'останні 30 днів', 'profile.site.stats.views': 'Перегляди', 'profile.site.stats.unique': 'Унікальні відвідувачі', 'profile.site.stats.messages': 'Повідомлення', 'profile.site.stats.total_views': 'Перегляди', 'profile.site.stats.total_unique': 'Унік. відвідувачі', 'profile.site.stats.total_messages': 'Повідомлення', 'profile.site.stats.empty': 'Даних поки немає', 'profile.site.stats.loading': 'Завантаження аналітики...', 'profile.site.stats.no_slug': 'Вкажіть адресу сайту, щоб бачити статистику', 'profile.site.edit_bio_hint': 'Біографія і фото налаштовуються у вкладці «Основне».', 'profile.site.seo.title': 'SEO — мета-дані сайту', 'profile.site.seo.hint': 'Відображається в пошуковиках. При збереженні автоматично перекладається на всі мови.', 'profile.site.seo.site_title': 'Заголовок сторінки', 'profile.site.seo.site_title_placeholder': 'Іван Іванов — Електрик в Афінах', 'profile.site.seo.site_desc': 'Мета-опис', 'profile.site.seo.site_desc_placeholder': 'Короткий опис для пошуковиків...', 'status.title': 'Статус', 'status.can_help_now_hint': 'Ваша картка показується вище у пошуку', 'status.need_help_hint': 'Спеціалісти можуть запропонувати вам допомогу', 'profile.referral.title': 'Партнерська програма', 'profile.referral.desc': 'Поділіться посиланням і отримуйте нагороду за кожного залученого користувача.', 'profile.referral.link_label': 'Ваше реферальне посилання', 'profile.referral.copy': 'Копіювати', 'profile.referral.copied': 'Скопійовано!', 'profile.referral.invited_count': 'успішних запрошень', 'profile.referral.no_code': 'Реферальний код недоступний.', 'notifications.title': 'Налаштування сповіщень', 'notifications.email.new_tasks': 'Email про нові замовлення', 'notifications.email.new_tasks.desc': 'Отримувати email, коли у ваших категоріях публікується нове замовлення', 'notifications.messages.desc': 'Отримувати сповіщення при новому вхідному повідомленні', 'notifications.saved': 'Налаштування збережено', 'notifications.plan_required': 'Недоступно у вашому тарифі', 'profile.tab.info': 'Основне', 'profile.tab.finance': 'Фінанси', 'profile.tab.skills': 'Навички', 'profile.tab.categories': 'Категорії', 'profile.tab.geography': 'Географія', 'profile.specialist.categories': 'Категорії робіт', 'profile.specialist.categories.desc': 'Виберіть категорії, в яких ви працюєте', 'profile.specialist.geography': 'Міста покриття', 'profile.specialist.geography.desc': 'Виберіть міста / райони, де ви працюєте', 'profile.saving': 'Збереження...', 'profile.upload.error': 'Помилка завантаження фото', 'profile.saved': 'Збережено', 'profile.tab.cards': 'Пропозиції', 'profile.cards.count': 'Пропозиції', 'profile.cards.add': 'Додати пропозицію', 'profile.cards.new_title': 'Назва нової пропозиції', 'profile.cards.placeholder': 'Наприклад: Сантехніка', 'profile.cards.create': 'Створити', 'profile.cards.cancel': 'Скасувати', 'profile.cards.empty': 'У вас немає пропозицій', 'profile.cards.empty_hint': 'Створіть першу картку, щоб показати послуги клієнтам.', 'profile.cards.create_first': 'Створити першу пропозицію', 'profile.cards.delete_confirm': 'Видалити пропозицію?', 'profile.background.change': 'Змінити фон', 'profile.background.remove': 'Видалити фон', 'profile.listing_requirements.published_card': 'Опублікуйте хоча б одну картку', 'profile.listing_requirements.title': 'Ваш профіль поки не показується в розділі «Пропозиції»', 'profile.listing_requirements.hint': 'Щоб картка відображалась, виконайте умови:', 'profile.listing_requirements.bio': 'Додайте коротку інформацію про себе в «Основне»', 'profile.listing_requirements.categories': 'Укажіть хоча б одну категорію в активній картці', 'profile.listing_requirements.locations': 'Укажіть хоча б одну локацію в активній картці', 'profile.listing_requirements.card_inactive': 'Зробіть картку активною', 'profile.listing_requirements.review_pending': 'Картка на розгляді', 'profile.card.visibility_issue': 'Картка не відображається в розділі «Пропозиції»', 'profile.card.tab.main': 'Основне', 'profile.card.tab.skills': 'Навички', 'profile.card.tab.categories': 'Категорії', 'profile.card.tab.geography': 'Географія', 'profile.card.tab.portfolio': 'Галерея', 'profile.card.tab.pricelist': 'Прайс-лист', 'profile.card.pricelist.empty': 'Групи прайс-листа ще не додані.', 'profile.card.pricelist.add_group': 'Додати групу', 'profile.card.pricelist.group_title': 'Назва групи', 'profile.card.pricelist.add_item': 'Додати позицію', 'profile.card.pricelist.item_name': 'Послуга / робота', 'profile.card.pricelist.item_desc': 'Опис (необов\'язково)', 'profile.card.pricelist.item_price': 'Ціна', 'profile.card.pricelist.item_unit': 'Одиниця (наприклад /год)', 'profile.card.pricelist.save_group': 'Зберегти групу', 'profile.card.pricelist.save_item': 'Зберегти', 'profile.card.pricelist.delete_group': 'Видалити групу', 'profile.card.pricelist.delete_item': 'Видалити', 'profile.card.active': 'Активна', 'profile.card.review_pending': 'На розгляді', 'profile.card.review_pending_hint': 'Вашу картку зараз перевіряє адміністрація.', 'profile.card.review_submitted': 'Картку надіслано на перевірку', 'profile.card.review_approved': 'Картку схвалено', 'profile.card.review_approved_hint': 'Ваша картка тепер відображається в пропозиціях.', 'profile.card.review_rejected': 'Картку відхилено', 'profile.card.review_rejected_hint': 'Картку не було схвалено. Виправте її та надішліть знову.', 'profile.card.submit_review': 'Надіслати на розгляд', 'profile.card.withdraw_review': 'Відкликати заявку', 'profile.card.unpublish': 'Зняти з публікації', 'profile.card.save': 'Зберегти', 'profile.card.saved': 'Збережено', 'profile.card.delete': 'Видалити', 'profile.card.skill.add': 'Додати навичку', 'profile.card.photo.add': 'Додати фото', 'profile.card.photo.uploading': 'Завантаження...', 'profile.card.photo.empty': 'Немає фотографій', 'profile.card.item.title': 'Заголовок', 'profile.card.item.desc': 'Опис', 'profile.card.item.save': 'Зберегти', 'profile.card.item.cancel': 'Скасувати', 'profile.card.item.edit': 'Опис роботи', 'profile.card.description': 'Опис картки', 'profile.card.desc_auto_translate': 'При збереженні буде автоматично перекладено на інші мови', 'profile.card.desc_translated': 'Є переклади:', 'profile.upgrade.cards_limit': 'Ліміт портфоліо вичерпано', 'profile.upgrade.plan': 'Поточний тариф:', 'profile.upgrade.contact': 'Зверніться до адміністратора для зміни тарифу', 'profile.upgrade.ok': 'Зрозуміло', 'profile.plan.title': 'Тарифний план', 'profile.balance': 'Баланс', 'profile.balance.topup': 'Поповнити баланс', 'profile.balance.topup.title': 'Поповнити баланс', 'profile.balance.topup.amount': 'Сума (в EUR)', 'profile.balance.topup.hint': 'Виберіть суму або введіть вручну', 'profile.balance.topup.submit': 'Перейти до оплати', 'profile.balance.topup.loading': 'Перенаправлення...', 'profile.balance.topup.error': 'Помилка ініціалізації платежу. Спробуйте знову.', 'payment.success.title': 'Оплата пройшла успішно!', 'payment.success.desc': 'Ваш баланс оновлено.', 'payment.cancelled.title': 'Оплату скасовано', 'payment.cancelled.desc': 'Оплату було скасовано. Кошти не списано.', 'payment.pending.title': 'Обробляється...', 'payment.pending.desc': 'Ваш платіж в обробці.', 'payment.back_to_profile': 'Повернутися в профіль', 'profile.plan.basic': 'Базовий (безкоштовний)', 'profile.plan.contact_upgrade': 'Зверніться до адміністратора для підключення тарифу', 'profile.plan.cards_up_to': 'Портфоліо: до', 'profile.plan.cards_unlimited': 'Портфоліо: безліміт', 'profile.plan.tasks_up_to': 'Завдань: до', 'profile.plan.offers_up_to': 'Відгуків: до', 'profile.plan.valid_until': 'Дійсний до', 'profile.plan.no_expiry': 'Безстроково', 'create.error': 'Помилка при публікації', 'tasks.category.general': 'Загальне', 'tasks.budget.range': 'Діапазон:', 'tasks.budget.from': 'від', 'tasks.budget.to': 'до', 'tasks.filter.reset': 'Скинути фільтри', 'tasks.load_more': 'Завантажити ще', 'tasks.showing': 'Результатів:', 'tasks.field.budget': 'Бюджет, €', 'admin.title': 'Панель адміністратора', 'admin.tab.stats': 'Статистика', 'admin.tab.users': 'Користувачі', 'admin.tab.tasks': 'Завдання', 'admin.tab.reports': 'Скарги', 'admin.tab.moderation': 'Модерація', 'admin.stats.users': 'Користувачі', 'admin.stats.tasks': 'Завдання', 'admin.stats.offers': 'Пропозиції', 'admin.stats.reviews': 'Відгуки', 'admin.tasks.by_status': 'Завдання за статусом', 'admin.col.user': 'Користувач', 'admin.col.email': 'Email', 'admin.col.role': 'Роль', 'admin.col.registered': 'Реєстрація', 'admin.col.status': 'Статус', 'admin.col.title': 'Назва', 'admin.col.budget': 'Бюджет', 'admin.col.created': 'Створено', 'admin.users.active': 'Активний', 'admin.users.inactive': 'Неактивний', 'admin.users.deactivate': 'Деактивувати', 'admin.users.activate': 'Активувати', 'admin.tasks.cancel': 'Скасувати', 'admin.reports.none': 'Скарг немає', 'admin.moderation.none': 'Немає пропозицій для перевірки', 'admin.moderation.pending': 'В очікуванні', 'admin.moderation.active': 'Активно', 'admin.moderation.approve': 'Підтвердити', 'admin.moderation.block': 'Заблокувати', 'admin.moderation.pending_title': 'Пропозиції на підтвердження', 'admin.moderation.active_title': 'Активні пропозиції', 'admin.moderation.pending_count': 'В очікуванні', 'admin.moderation.active_count': 'Активні', 'admin.moderation.pending_hint': 'Нові пропозиції, які очікують підтвердження', 'admin.moderation.active_hint': 'Активні пропозиції, які можна заблокувати', 'admin.moderation.pending_empty': 'Немає нових пропозицій для підтвердження', 'admin.moderation.active_empty': 'Активних пропозицій не знайдено', 'admin.reports.reviewed': 'Розглянуто', 'admin.reports.dismiss': 'Відхилити', 'admin.pagination.total': 'Всього', 'admin.users.role.change': 'Змінити роль', 'admin.users.search.placeholder': 'Пошук за ім\'ям або email...', 'admin.tasks.delete': 'Видалити', 'admin.tasks.delete.confirm': 'Видалити це завдання назавжди?', 'admin.tasks.search.placeholder': 'Пошук за назвою...', 'admin.col.customer': 'Замовник', 'admin.col.reporter': 'Скаржник', 'admin.col.target': 'Ціль', 'admin.filter.all_roles': 'Всі ролі', 'admin.filter.all_statuses': 'Всі статуси', 'admin.reports.target.task': 'Завдання', 'admin.reports.target.user': 'Користувач', 'admin.tab.categories': 'Категорії', 'admin.tab.locations': 'Міста і райони', 'admin.tab.logs': 'Логи', 'admin.tab.plans': 'Тарифи', 'admin.tab.settings': 'Налаштування', 'admin.logs.subtab.ai': 'AI логи', 'admin.logs.subtab.activity': 'Активність', 'admin.logs.subtab.mail': 'Mail', 'admin.logs.subtab.notifications': 'Сповіщення', 'admin.notif_logs.type': 'Тип', 'admin.notif_logs.title': 'Заголовок', 'admin.notif_logs.read': 'Прочитано', 'admin.notif_logs.empty': 'Логи сповіщень порожні', 'admin.stats.notif_chart_title': 'Сповіщення по днях', 'admin.stats.notif_label': 'Сповіщення', 'admin.stats.mail_chart_title': 'Email по днях', 'admin.stats.mail_label': 'Emails', 'admin.filter.all': 'Всі', 'admin.stats.specialists': 'Помічники', 'admin.col.plan': 'Тариф', 'admin.back_home': 'На головну', 'admin.plans.title': 'Тарифні пакети', 'admin.plans.add': '+ Додати тариф', 'admin.plans.empty': 'Тарифи не створено', 'admin.plans.form.new': 'Новий тариф', 'admin.plans.form.edit': 'Редагувати тариф', 'admin.plans.form.name': 'Назва', 'admin.plans.form.price': 'Ціна (EUR)', 'admin.plans.form.old_price': 'Стара ціна (EUR, необов\'язково)', 'admin.plans.form.max_offers': 'Макс. відгуків (порожньо = без ліміту)', 'admin.plans.form.max_cards': 'Макс. пропозицій (порожньо = без ліміту)', 'admin.plans.form.duration_days': 'Термін (днів, порожньо = без закінчення)', 'admin.plans.form.description': 'Опис', 'admin.plans.form.features': 'Можливості (по одному на рядок)', 'admin.plans.form.notify': 'Сповіщення про нові замовлення', 'admin.plans.form.default': 'За замовчуванням', 'admin.plans.form.active': 'Активний', 'admin.plans.form.order': 'Порядок', 'admin.plans.form.role': 'Роль', 'admin.plans.form.tier': 'Рівень', 'admin.plans.form.role.customer': 'Замовник', 'admin.plans.form.role.specialist': 'Помічник', 'admin.plans.form.tier.free': 'Безкоштовний', 'admin.plans.form.tier.pro': 'Pro', 'admin.plans.form.tier.ultimate': 'Ultimate', 'admin.plans.form.section.limits': 'Ліміти (порожньо = без обмежень)', 'admin.plans.form.max_messages_day': 'Макс. повідомлень/день', 'admin.plans.form.max_orders_day': 'Макс. замовлень/день', 'admin.plans.form.max_skills': 'Макс. навичок', 'admin.plans.form.max_profiles': 'Макс. профілів', 'admin.plans.form.max_portfolio': 'Макс. елементів портфоліо', 'admin.plans.form.section.boost': 'Множники & Буст', 'admin.plans.form.search_boost': 'Буст у пошуку', 'admin.plans.form.offers_multiplier': 'Множник відгуків', 'admin.plans.form.section.contact': 'Права контактів', 'admin.plans.form.can_contact_free': 'Контакт з безкоштовними користувачами', 'admin.plans.form.can_contact_pro': 'Контакт з Pro користувачами', 'admin.plans.form.can_contact_all': 'Контакт з усіма', 'admin.plans.form.can_show_contact': 'Показувати контакти', 'admin.plans.form.can_view_phone': 'Перегляд телефону', 'admin.plans.form.section.features': 'Можливості', 'admin.plans.form.upload_video': 'Завантаження відео', 'admin.plans.form.favorites': 'Обране', 'admin.plans.form.google_calendar': 'Google Calendar', 'admin.plans.form.verified_badge': 'Знак верифікації', 'admin.plans.form.highlighted_reviews': 'Виділені відгуки', 'admin.plans.form.personal_site': 'Особистий сайт', 'admin.plans.form.can_help_now': 'Статус «Можу допомогти»', 'admin.plans.form.need_help': 'Статус «Потрібна допомога»', 'admin.plans.form.auto_response': 'Авто-відповідь', 'admin.plans.form.auto_match': 'Авто-підбір', 'admin.plans.form.price_list': 'Прайс-лист', 'admin.plans.form.instant_dispatch_free': 'Миттєва розсилка (безкоштовно)', 'admin.plans.form.instant_dispatch_pro': 'Миттєва розсилка (Pro)', 'admin.plans.badge.default': 'За замовчуванням', 'admin.plans.badge.inactive': 'Неактивний', 'admin.plans.make_default': 'Зробити за замовчуванням', 'admin.plans.tasks': 'Завдань', 'admin.plans.offers': 'Відгуків', 'admin.plans.cards': 'Пропозиції', 'admin.plans.notify_tasks': 'Сповіщення про замовлення', 'admin.plans.delete.confirm': 'Видалити тариф', 'admin.activity.title': 'Журнал активності', 'admin.activity.event': 'Подія', 'admin.activity.all_events': 'Всі події', 'admin.activity.from': 'Від', 'admin.activity.to': 'До', 'admin.activity.reset': 'Скинути', 'admin.activity.total': 'Всього', 'admin.activity.empty': 'Немає записів', 'admin.mail.event': 'Email подія', 'admin.mail.all_events': 'Всі email події', 'admin.mail.from': 'Від', 'admin.mail.to': 'До', 'admin.mail.reset': 'Скинути', 'admin.mail.total': 'Всього', 'admin.mail.empty': 'Немає email логів', 'admin.mail.recipient': 'Отримувач', 'admin.mail.provider': 'Провайдер', 'admin.mail.details': 'Деталі', 'admin.mail.status': 'Статус', 'admin.mail.success': 'Успішно', 'admin.mail.failed': 'Помилка', 'admin.event.email_sent': 'Email надіслано', 'admin.event.email_failed': 'Email не надіслано', 'admin.event.email_dev': 'Email DEV fallback', 'admin.event.admin_email_test_sent': 'Тестовий email надіслано', 'admin.event.admin_email_test_failed': 'Тестовий email не надіслано', 'admin.logs.empty': 'Немає записів', 'admin.logs.date': 'Дата', 'admin.logs.provider': 'Провайдер', 'admin.logs.model': 'Модель', 'admin.logs.action': 'Дія', 'admin.logs.langs': 'Мови', 'admin.logs.in': 'Вхід', 'admin.logs.out': 'Вихід', 'admin.logs.total': 'Разом', 'admin.logs.ms': 'мс', 'admin.logs.status': 'Статус', 'admin.stats.activity_30d': 'Активність за 30 днів', 'admin.stats.tasks_label': 'Заявки', 'admin.stats.users_label': 'Користувачі', 'admin.stats.specialists_label': 'Помічники', 'admin.stats.tokens_title': 'Витрата токенів (по місяцях)', 'admin.stats.tokens_out': 'Вихідні', 'admin.stats.tokens_in': 'Вхідні', 'admin.stats.tokens_out_label': 'Вихідні токени', 'admin.stats.tokens_in_label': 'Вхідні токени', 'admin.stats.cost_label': 'Вартість (USD)', 'admin.stats.tasks_by_status': 'Заявки за статусами', 'admin.task_status.open': 'Відкриті', 'admin.task_status.in_progress': 'В роботі', 'admin.task_status.completed': 'Завершені', 'admin.task_status.cancelled': 'Скасовані', 'admin.task_status.draft': 'Чернетки', 'admin.settings.tab.general': 'Загальні', 'admin.settings.tab.smtp': 'E-Mail', 'admin.settings.tab.notifications': 'Сповіщення', 'admin.settings.tab.payment': 'Оплата', 'admin.settings.tab.referral': 'Реферальна', 'admin.settings.tab.seo': 'SEO', 'admin.settings.tab.socials': 'Соцмережі', 'admin.settings.tab.telegram': 'Telegram Bot', 'admin.settings.telegram.title': 'Налаштування Telegram Bot', 'admin.settings.telegram.help': 'Створіть бота через @BotFather. ID чату дізнайтесь через @userinfobot.', 'admin.settings.telegram.bot_token': 'Bot Token', 'admin.settings.telegram.admin_chat_id': 'Chat ID адміністратора', 'admin.settings.telegram.admin_chat_hint': 'Спочатку надішліть /start своєму боту, потім дізнайтесь chat ID через @userinfobot', 'admin.settings.telegram.channel_id': 'невикористовується', 'admin.settings.telegram.channels_title': 'Канали за мовами', 'admin.settings.telegram.channel_hint': 'Username публічного каналу (@канал) або числовий ID', 'admin.settings.telegram.notify_registrations': 'Сповіщати про нові реєстрації', 'admin.settings.telegram.notify_registrations_hint': 'Надсилати повідомлення при реєстрації нового користувача', 'admin.settings.telegram.post_new_tasks': 'Публікувати нові завдання в канал', 'admin.settings.telegram.post_new_tasks_hint': 'Автоматично публікувати нові завдання в Telegram-канал', 'admin.settings.telegram.test': 'Тест', 'admin.settings.telegram.verify': 'Перевірити токен', 'admin.settings.telegram.test_fail': 'Помилка з\'єднання', 'admin.settings.socials.title': 'Посилання на соціальні мережі', 'admin.settings.socials.hint': 'Заповнені посилання відображаються у підвалі сайту', 'admin.settings.seo.maintenance_label': 'Режим обслуговування', 'admin.settings.seo.maintenance_hint': 'Показувати сторінку обслуговування всім відвідувачам', 'admin.settings.seo.indexing_label': 'Індексація пошуковими системами', 'admin.settings.seo.indexing_hint': 'Дозволити пошуковим системам індексувати сайт', 'admin.settings.seo.head_scripts_label': 'Скрипти в (JS)', 'admin.settings.seo.head_scripts_hint': 'Виконується на кожній сторінці (Google Tag Manager, аналітика тощо)', 'admin.settings.seo.site_title_label': 'Заголовок сайту', 'admin.settings.seo.site_description_label': 'Опис сайту (meta description)', 'admin.settings.referral.title': 'Партнерська програма', 'admin.settings.referral.hint': 'Нагороджуйте користувачів, що приводять нових учасників.', 'admin.settings.referral.enabled_label': 'Увімкнено', 'admin.settings.referral.enabled_hint': 'Увімкнути / вимкнути видачу нагород', 'admin.settings.referral.customer_section': 'Для клієнтів', 'admin.settings.referral.specialist_section': 'Для помічників', 'admin.settings.referral.plan_label': 'Тарифний план за реферала', 'admin.settings.referral.no_plan': '— без плану —', 'admin.settings.referral.plan_hint': 'Цей план буде призначений тому, хто запросив. Якщо його поточний план вищий — додадуться тільки дні.', 'admin.settings.referral.days_label': 'Днів нагороди', 'admin.settings.referral.days_hint': 'Кількість днів, що додаються до терміну дії плану.', 'admin.settings.general.title': 'Загальні налаштування', 'admin.settings.general.site_name': 'Назва сайту', 'admin.settings.general.site_url': 'URL сайту', 'admin.settings.general.contact_email': 'Email для зв\'язку', 'admin.settings.general.support_phone': 'Телефон підтримки', 'admin.settings.smtp.title': 'Налаштування SMTP сервера', 'admin.settings.smtp.hint': 'Використовується для надсилання email-сповіщень.', 'admin.settings.smtp.host': 'SMTP Хост', 'admin.settings.smtp.port': 'Порт', 'admin.settings.smtp.encryption': 'Шифрування', 'admin.settings.smtp.enc.none': 'Немає', 'admin.settings.smtp.enc.tls': 'STARTTLS (порт 587)', 'admin.settings.smtp.enc.ssl': 'SSL/TLS (порт 465)', 'admin.settings.smtp.username': 'Ім\'я користувача', 'admin.settings.smtp.password': 'Пароль / App Password', 'admin.settings.smtp.from_name': 'Ім\'я відправника', 'admin.settings.smtp.from_email': 'Email відправника', 'admin.settings.smtp.test': 'Надіслати тестовий email', 'admin.settings.smtp.sending': 'Надсилання...', 'admin.settings.payment.hint': 'Дані для підключення до ePay Piraeus Bank.', 'admin.settings.env.test': 'Тест (sandbox)', 'admin.settings.env.prod': 'Бойовий режим', 'admin.settings.env.label': 'Середовище', 'admin.settings.merchant_id': 'Merchant ID', 'admin.settings.api_user': 'API User', 'admin.settings.api_password': 'API Password', 'admin.settings.confirm_url': 'Confirmation URL (webhook)', 'admin.settings.cancel_url': 'Cancel URL', 'admin.settings.active': 'Активний', 'admin.settings.saving': 'Збереження...', 'admin.settings.saved': 'Збережено', 'admin.notif.vars_hint': 'Доступні змінні в шаблонах', 'admin.notif.tmpl.not_set': 'Шаблон не налаштовано', 'admin.notif.tmpl.subject_label': 'Тема листа', 'admin.notif.tmpl.body_label': 'Текст листа (HTML)', 'admin.notif.tmpl.save': 'Зберегти', 'admin.notif.tmpl.close': 'Закрити', 'admin.notif.tmpl.translate': 'Авто-переклад на інші мови', 'admin.notif.tmpl.translating': 'Переклад...', 'admin.notif.tmpl.saving': 'Збереження...', 'admin.notif.email_verification': 'Підтвердження email адреси', 'admin.notif.registration_success': 'Успішна реєстрація', 'admin.notif.password_reset': 'Відновлення пароля', 'admin.notif.new_offer': 'Нова пропозиція', 'admin.notif.new_task': 'Нове завдання', 'admin.notif.offer_accepted': 'Пропозицію прийнято', 'admin.notif.new_message': 'Нове повідомлення', 'admin.notif.offer_declined': 'Відхилення пропозиції', 'admin.notif.offer_other_accepted': 'Вибрано іншого виконавця', 'admin.notif.task_updated': 'Зміна завдання', 'admin.notif.deadline_reminder': 'Нагадування про дедлайн', 'admin.notif.task_archived': 'Автознняття завдання', 'admin.notif.referral_reward': 'Реферальна нагорода', 'admin.email_template.plan_activated': 'Тарифи — активація тарифу', 'admin.email_template.plan_upgraded': 'Тарифи — підвищення тарифу', 'admin.email_template.plan_downgrade_scheduled': 'Тарифи — запланований перехід', 'admin.email_template.plan_downgrade_applied': 'Тарифи — застосування переходу', 'admin.email_template.plan_renewal_reminder': 'Тарифи — нагадування про продовження', 'admin.email_template.plan_insufficient_funds': 'Тарифи — недостатньо коштів', 'pricing.confirm.title': 'Підтвердіть вибір тарифу', 'pricing.confirm.plan': 'Тариф', 'pricing.confirm.prorated': 'Залік залишку', 'pricing.confirm.effective_price': 'До оплати', 'pricing.confirm.your_balance': 'Ваш баланс', 'pricing.confirm.downgrade_info': 'Перехід на новий тариф відбудеться автоматично після закінчення поточного періоду.', 'pricing.confirm.insufficient': 'Недостатньо коштів на балансі.', 'pricing.confirm.top_up': 'Поповнити', 'pricing.confirm.schedule_downgrade': 'Запланувати перехід', 'pricing.confirm.pay': 'Оплатити', 'admin.user_edit.title': 'Редагування користувача', 'admin.user_edit.email': 'Email', 'admin.user_edit.email_verified': 'Email підтверджено', 'admin.user_edit.email_not_verified': 'Email не підтверджено', 'admin.user_edit.verify_email_btn': 'Підтвердити вручну', 'admin.user_edit.verify_email_done': 'Email підтверджено!', 'admin.user_edit.id': 'ID', 'admin.user_edit.registered': 'Реєстрація', 'admin.user_edit.last_seen': 'Останній візит', 'admin.user_edit.lang': 'Мова', 'admin.user_edit.first_name': 'Ім\'я', 'admin.user_edit.last_name': 'Прізвище', 'admin.user_edit.phone': 'Телефон', 'admin.user_edit.bio': 'Про себе', 'admin.user_edit.role': 'Роль', 'admin.user_edit.plan': 'Тариф', 'admin.user_edit.no_plan': '— Без тарифу —', 'admin.user_edit.active': 'Активний акаунт', 'admin.user_edit.published': 'Опублікована', 'admin.user_edit.balance': 'Баланс (EUR)', 'admin.user_edit.skills': 'Навички', 'admin.user_edit.tab.profile': 'Профіль', 'admin.user_edit.tab.account': 'Акаунт', 'admin.user_edit.tab.balance': 'Баланс', 'admin.user_edit.tab.settings': 'Налаштування', 'admin.user_edit.tab.specialist': 'Пропозиції', 'admin.user_edit.tab.site': 'Сайт', 'admin.user_edit.plan_expires': 'Тариф закінчується', 'admin.user_edit.interface_lang': 'Мова інтерфейсу', 'admin.user_edit.comm_languages': 'Мови спілкування', 'admin.user_edit.personal_site_slug': 'Персональна сторінка', 'admin.user_edit.show_contact_info': 'Показувати контакти', 'admin.user_edit.show_contact_info.hint': 'Видно замовникам', 'admin.user_edit.notify_new_tasks': 'Сповіщати про нові завдання', 'admin.user_edit.notify_new_tasks.hint': 'Push і email сповіщення', 'admin.user_edit.notif_messages': 'Сповіщення про повідомлення', 'admin.user_edit.notif_messages.hint': 'Нові повідомлення в чаті', 'admin.user_edit.site_settings': 'Налаштування персональної сторінки', 'admin.user_edit.categories': 'Категорії послуг', 'admin.user_edit.locations': 'Райони обслуговування', 'admin.user_edit.skill_placeholder': 'Нова навичка...', 'admin.user_edit.add_category': '— Виберіть категорію —', 'admin.user_edit.add_location': '— Виберіть район —', 'admin.user_edit.specialist_cards': 'Пропозиції спеціаліста', 'admin.user_edit.no_cards': 'Пропозиції не знайдено', 'admin.user_edit.card_title': 'Заголовок пропозиції', 'admin.user_edit.card_description': 'Опис', 'admin.balance.topup.btn': 'Поповнити', 'admin.balance.withdraw.btn': 'Списати', 'admin.balance.modal_hint': 'Зміни застосовуються одразу і фіксуються в історії', 'admin.balance.topup.title': 'Поповнення балансу', 'admin.balance.topup.amount': 'Сума', 'admin.balance.topup.description': 'Коментар', 'admin.balance.topup.description.placeholder': 'Наприклад: бонус або ручне поповнення', 'admin.balance.topup.submit': 'Поповнити баланс', 'admin.balance.withdraw.title': 'Зняття балансу', 'admin.balance.withdraw.amount': 'Сума', 'admin.balance.withdraw.description': 'Коментар', 'admin.balance.withdraw.description.placeholder': 'Наприклад: повернення або ручне списання', 'admin.balance.withdraw.submit': 'Списати баланс', 'admin.user_edit.role.customer': 'Замовник', 'admin.user_edit.role.user': 'Користувач', 'admin.user_edit.role.specialist': 'Помічник', 'admin.user_edit.role.admin': 'Адміністратор', 'common.refresh': 'Оновити', 'common.back_home': 'На головну', 'admin.loc.hint': 'Управління містами і районами', 'admin.loc.add_city': 'Нове місто', 'admin.loc.add_district': 'Додати район', 'admin.loc.new': 'Нова локація', 'admin.loc.edit': 'Редагувати локацію', 'admin.loc.district': 'район', 'admin.loc.empty': 'Немає локацій', 'admin.loc.delete.confirm': 'Видалити локацію? Всі райони також будуть видалені.', 'admin.cat.add_root': 'Нова категорія', 'admin.cat.add_sub': 'Підкатегорія', 'admin.cat.edit': 'Редагувати', 'admin.cat.delete': 'Видалити', 'admin.cat.delete.confirm': 'Видалити категорію? Всі підкатегорії також будуть видалені.', 'admin.cat.slug': 'Slug', 'admin.cat.icon': 'Іконка', 'admin.cat.name_el': 'Грецька', 'admin.cat.name_en': 'Англійська', 'admin.cat.name_ru': 'Російська', 'admin.cat.name_uk': 'Українська', 'admin.cat.active': 'Активна', 'admin.cat.parent': 'Батьківська категорія', 'admin.cat.no_parent': 'Верхній рівень', 'admin.cat.save': 'Зберегти', 'admin.cat.cancel': 'Скасувати', 'admin.cat.empty': 'Немає категорій', 'admin.cat.hint': 'Управління категоріями з багаторівневою ієрархією', 'admin.cat.new': 'Нова категорія', 'admin.cat.subcategory': 'підкатегорія', 'admin.cat.add_child': 'Додати підкатегорію', 'admin.cat.inactive': 'Неактивна', 'admin.event.user_login': 'Вхід', 'admin.event.user_register': 'Реєстрація', 'admin.event.admin_user_deactivate': 'Блокування юзера', 'admin.event.admin_user_activate': 'Розблокування юзера', 'admin.event.admin_user_role_changed': 'Зміна ролі', 'admin.event.admin_task_cancelled': 'Скасування завдання', 'admin.event.admin_task_deleted': 'Видалення завдання', 'admin.event.admin_report_reviewed': 'Скаргу розглянуто', 'admin.event.admin_report_dismissed': 'Скаргу відхилено', 'admin.event.task_created': 'Створено завдання', 'user.online': 'Онлайн', 'user.seen_minutes': 'був тут {n} хв тому', 'user.seen_hours': 'був тут {n} год тому', 'user.seen_yesterday': 'був тут вчора', 'user.seen_days': 'був тут {n} дн тому', 'specialists.title': 'Пропозиції', 'specialists.search': 'Пошук спеціаліста...', 'specialists.search.btn': 'Пошук', 'specialists.empty': 'Спеціалістів не знайдено', 'specialists.no_bio': 'Без опису', 'specialists.view': 'Дивитись профіль', 'specialists.reviews': 'відгуків', 'specialist.favorite': 'Додати до обраного', 'specialist.unfavorite': 'Прибрати з обраного', 'specialist.site_link': 'Особистий сайт', 'favorites.specialists.title': 'Обрані спеціалісти', 'favorites.specialists.empty': 'Ви ще не додали спеціалістів до обраного', 'nav.favorites': 'Обране', 'nav.schedule': 'Розклад', 'nav.find_tasks': 'Пошук замовлень', 'schedule.title': 'Мій розклад', 'schedule.subtitle': 'Позначайте дні коли ви вільні або зайняті — замовники побачать вашу доступність', 'schedule.available': 'Вільний', 'schedule.busy': 'Зайнятий', 'schedule.unset': 'Не вказано', 'schedule.click_hint': '← клік змінює статус по колу', 'schedule.range_mode': 'Виділити діапазон', 'schedule.range_from': 'З {date} — оберіть кінцеву дату', 'schedule.click_to_set': 'Натисніть щоб позначити', 'schedule.free': 'вільно', 'schedule.busy_count': 'зайнято', 'schedule.free_days': 'вільних днів', 'schedule.googleCalendar': 'Google Календар', 'schedule.connectGoogle': 'Підключити Google Календар', 'schedule.disconnectGoogle': 'Відключити', 'schedule.connectedAs': 'Підключено як', 'schedule.importFromGoogle': 'Синхр. з Google', 'schedule.gcalConnected': '✓ Google Календар підключено', 'schedule.gcalError': 'Помилка підключення Google Календар', 'schedule.gcalImportDone': 'Імпортовано {n} днів з Google Календар', 'schedule.gcalAutoSyncNote': 'Зміни доступності автоматично надсилаються в Google Календар', 'schedule.gcalConnectDesc': 'Підключіть Google Календар для автоматичної синхронізації розкладу', 'schedule.gcalDisconnectConfirm': 'Відключити Google Календар?', 'find_tasks.title': 'Пошук замовлень', 'find_tasks.for_me': 'Для мене', 'find_tasks.all': 'Всі замовлення', 'find_tasks.by_category': 'За категоріями', 'find_tasks.list': 'Списком', 'find_tasks.already_offered': 'Пропозицію надіслано', 'find_tasks.offer_now': 'Відгукнутися', 'find_tasks.empty_for_me': 'Немає замовлень у ваших категоріях', 'find_tasks.banner_hint': 'Знайдіть замовлення за категоріями вашого портфоліо', 'find_tasks.no_cards': 'Створіть портфоліо спеціаліста, щоб бачити підходящі замовлення', 'find_tasks.add_card': 'Створити портфоліо', 'find_tasks.search': 'Пошук замовлень...', 'find_tasks.tasks_count': 'завдань', 'footer.tagline': 'Платформа завдань для Греції', 'footer.rights': 'Всі права захищені.', 'nav.privacy': 'Політика конфіденційності', 'nav.delete_account': 'Видалення акаунту', 'delete_account.title': 'Запит на видалення акаунту', 'delete_account.subtitle': 'Після перевірки вашого запиту ми назавжди видалимо ваш акаунт і дані протягом 30 днів.', 'delete_account.warning': 'Цю дію не можна скасувати. Всі ваші дані будуть видалені безповоротно.', 'delete_account.reason_label': 'Причина (необов\'язково)', 'delete_account.reason_placeholder': 'Розкажіть, чому ви хочете видалити акаунт...', 'delete_account.confirm_label': 'Підтверджую, що хочу назавжди видалити свій акаунт', 'delete_account.submit': 'Надіслати запит', 'delete_account.submitting': 'Надсилання...', 'delete_account.success_title': 'Ваш запит отримано', 'delete_account.success_body': 'Ми опрацюємо ваш запит протягом 30 днів і повідомимо вас електронною поштою.', 'delete_account.login_required': 'Для надсилання запиту на видалення необхідно увійти в акаунт.', 'delete_account.login_btn': 'Увійти', 'app.download_title': 'Завантажте мобільний додаток CanHelp', 'app.download_desc': 'Все CanHelp — завжди під рукою. Доступно для Android та iOS.', 'nav.pricing': 'Тарифи', 'pricing.title': 'Тарифи', 'pricing.subtitle': 'Виберіть підходящий план', 'pricing.role.customer': 'Замовник', 'pricing.role.specialist': 'Спеціаліст', 'pricing.free': 'Безкоштовно', 'pricing.per_month': 'міс', 'pricing.duration': 'Термін', 'pricing.days': 'дн.', 'pricing.current_plan': 'Ваш план', 'pricing.popular': 'Популярний', 'pricing.choose': 'Вибрати', 'pricing.your_plan': 'Активний план', 'pricing.free_default': 'За замовчуванням', 'pricing.compare': 'Порівняння функцій', 'pricing.feature': 'Функція', 'pricing.faq_note': 'Оплата списується з балансу CanHelp. Поповнення доступне в розділі Оплата.', 'pricing.feat.messages': 'Повідомлень / день', 'pricing.feat.orders': 'Замовлень / день', 'pricing.feat.contact_all': 'Зв\'язок з усіма', 'pricing.feat.view_phone': 'Перегляд телефону', 'pricing.feat.show_contact': 'Показувати контакти', 'pricing.feat.favorites': 'Обране', 'pricing.feat.verified_badge': 'Верифікований бейдж', 'pricing.feat.google_calendar': 'Google Календар', 'pricing.feat.personal_site': 'Персональний сайт', 'pricing.feat.auto_response': 'Авто-відповідь', 'pricing.feat.auto_match': 'Авто-підбір', 'pricing.feat.highlighted_reviews': 'Виділені відгуки', 'pricing.feat.portfolio': 'Елементів пропозиції', 'pricing.feat.cards': 'Кількість пропозицій', 'pricing.feat.notify_tasks': 'Сповіщення про нові завдання', 'pricing.feat.video': 'Відео в пропозиції', 'upgrade.available_in': 'Доступно в', 'upgrade.cta': 'Покращити', 'dashboard.plan.title': 'Мій план', 'dashboard.plan.expires': 'Закінчується через {n} днів', 'dashboard.plan.upgrade': 'Покращити план', 'dashboard.plan.no_plan': 'Безкоштовний план', 'dashboard.plan.messages': 'Повідомлень сьогодні', 'dashboard.plan.orders': 'Замовлень сьогодні', 'dashboard.plan.limits': 'Денні ліміти', 'dashboard.plan.features': 'Функції', 'dashboard.plan.stats': 'Статистика', 'dashboard.stats.cards': 'Портфоліо', 'dashboard.stats.maxCards': 'Макс. портфоліо', 'dashboard.stats.portfolioItems': 'Елементи портфоліо', 'dashboard.stats.maxPortfolioItems': 'Макс. елементи', 'dashboard.stats.activeOffers': 'Активні відгуки', 'dashboard.stats.reviewsReceived': 'Відгуки', 'dashboard.stats.activeTasks': 'Активні завдання', 'dashboard.stats.completedTasks': 'Завершені', 'status.need_help': 'Потрібна допомога', 'status.active': 'Активний', 'status.toggle_on': 'Увімкнути', 'status.toggle_off': 'Вимкнути', 'fomo.missed_orders': 'Пропущено {n} замовлень', 'fomo.missed_value': 'На суму €{v}', 'fomo.upgrade_hint': 'Покращте план — отримуйте більше замовлень', 'fomo.conversion': 'Конверсія завдань', 'fomo.active': 'Активні', 'fomo.with_offers': 'З офертами', 'fomo.completed': 'Завершені', 'fomo.already_offered': '{n} спеціалістів вже відгукнулися', 'fomo.specialist_missed': 'Ви пропустили {n} замовлень', 'fomo.top_categories': 'Категорії', 'fomo.offers_received': 'пропозицій отримано', 'fomo.avg_offers': 'В середньому {n}/завдання', 'fomo.completion_rate': 'завершено', 'task.auto_match': 'Авто-матч', 'task.auto_match_results': 'Топ спеціалісти', 'task.no_offer_yet': 'Ви ще не надіслали пропозицію', 'task.make_offer': 'Надіслати пропозицію', 'auto_response.title': 'Авто-відповідь', 'auto_response.enabled': 'Увімкнути авто-відповідь', 'auto_response.min_budget': 'Мін. бюджет', 'auto_response.max_budget': 'Макс. бюджет', 'auto_response.default_price': 'Ціна за замовчуванням', 'auto_response.default_message': 'Повідомлення за замовчуванням', 'auto_response.max_per_day': 'Макс. авто-офертів на день', 'auto_response.save': 'Зберегти', 'auto_response.saved': 'Збережено', 'auto_response.categories': 'Категорії', 'auto_response.locations': 'Локації', 'profile.personal_site': 'Персональний сайт', 'profile.site_slug': 'URL slug', 'profile.site_slug_hint': 'Тільки латинські букви, цифри, - і _', 'profile.site_open': 'Відкрити сайт', 'profile.site_preview': 'Ваш сайт', 'profile.show_contact': 'Показувати контакти', 'profile.show_contact_hint': 'Замовники з Pro/Ultimate-планом побачать ваш телефон', 'gcal.upgrade_required': 'Google Календар вимагає план Pro або Ultimate', 'chat.limit_warning': 'Залишилось {n} повідомлень сьогодні', 'chat.limit_reached': 'Ліміт повідомлень вичерпано. Покращте план', 'chat.upgrade': 'Покращити', 'site.member_since': 'З нами з', 'site.rating': 'Рейтинг', 'site.completed_tasks': 'Виконано', 'site.languages': 'Мов', 'site.photos': 'фото', 'site.contact_form': 'Зв\'язатися', 'site.contact_sent': 'Повідомлення надіслано!', 'site.contact_sent_desc': 'Спеціаліст зв\'яжеться з вами найближчим часом', 'site.contact_name': 'Ім\'я', 'site.contact_name_ph': 'Ваше ім\'я', 'site.contact_email_ph': 'your@email.com', 'site.contact_message': 'Повідомлення', 'site.contact_message_ph': 'Опишіть ваше завдання...', 'site.contact_send': 'Надіслати', 'site.share': 'Поділитися', 'site.speaks_languages': 'Розмовляє мовами', 'site.message_sent': 'Повідомлення надіслано!', 'site.message_sent_desc': 'Спеціаліст отримає його в чаті', 'site.message_placeholder': 'Напишіть повідомлення...', 'site.write_to_chat': 'Написати в чат', 'site.auth_required_title': 'Потрібна авторизація', 'site.auth_required_desc': 'Щоб написати в чат, необхідно увійти в акаунт CanHelp.', 'site.auth_login_btn': 'Увійти в акаунт', 'site.auth_contact_form_btn': 'Написати через форму зворотного зв\'язку', 'specialist.services': 'Послуги', 'portfolio.title': 'Портфоліо', 'status.can_help_now': 'Готовий допомогти', 'common.not_found': 'Сторінку не знайдено', 'common.anonymous': 'Анонімно', 'specialist_setup.page_title': 'Налаштування профілю спеціаліста', 'specialist_setup.step_of': 'Крок {current} з {total}', 'specialist_setup.next': 'Далі', 'specialist_setup.back': 'Назад', 'specialist_setup.skip': 'Пропустити', 'specialist_setup.finish': 'Завершити', 'specialist_setup.go_to_profile': 'Перейти в профіль', 'specialist_setup.browse_tasks': 'Знайти завдання', 'specialist_setup.step1.title': 'Ласкаво просимо!', 'specialist_setup.step1.subtitle': 'Давайте налаштуємо ваш профіль', 'specialist_setup.step1.desc': 'Повний профіль допомагає знаходити більше клієнтів. Слідуйте крокам, щоб створити ідеальний профіль спеціаліста.', 'specialist_setup.step1.what_next': 'Що ми зробимо:', 'specialist_setup.step1.item1': 'Заповнимо основну інформацію', 'specialist_setup.step1.item2': 'Створимо картку послуги', 'specialist_setup.step1.item3': 'Додамо навички і категорії', 'specialist_setup.step1.item4': 'Оберемо географію обслуговування', 'specialist_setup.step1.item5': 'Завантажимо фото портфоліо', 'specialist_setup.step2.title': 'Базовий профіль', 'specialist_setup.step2.subtitle': 'Розкажіть про себе', 'specialist_setup.step2.bio_label': 'Про себе', 'specialist_setup.step2.bio_placeholder': 'Опишіть ваш досвід, послуги які ви пропонуєте...', 'specialist_setup.step2.phone_label': 'Телефон', 'specialist_setup.step2.phone_placeholder': '+30 6900000000', 'specialist_setup.step2.photo_label': 'Фото профілю', 'specialist_setup.step2.photo_btn': 'Завантажити фото', 'specialist_setup.step2.photo_uploading': 'Завантаження...', 'specialist_setup.step2.photo_hint': 'Відображається у вашому профілі', 'specialist_setup.step3.title': 'Картка послуги', 'specialist_setup.step3.subtitle': 'Створіть вашу першу картку послуги', 'specialist_setup.step3.title_label': 'Назва картки', 'specialist_setup.step3.title_placeholder': 'Напр. Сантехнік, Електрик, Прибирання...', 'specialist_setup.step3.desc_label': 'Опис', 'specialist_setup.step3.desc_placeholder': 'Детально опишіть що ви пропонуєте, досвід, переваги...', 'specialist_setup.step3.title_required': 'Назва обов\'язкова', 'specialist_setup.step4.title': 'Навички і категорії', 'specialist_setup.step4.subtitle': 'Додайте навички і виберіть категорії', 'specialist_setup.step4.skills_label': 'Навички', 'specialist_setup.step4.skills_placeholder': 'Напр. Монтаж труб...', 'specialist_setup.step4.skills_add': 'Додати', 'specialist_setup.step4.categories_label': 'Категорії', 'specialist_setup.step5.title': 'Географія обслуговування', 'specialist_setup.step5.subtitle': 'Де ви надаєте послуги?', 'specialist_setup.step5.hint': 'Виберіть міста або конкретні райони', 'specialist_setup.done.title': 'Ваш профіль готовий!', 'specialist_setup.done.subtitle': 'Вітаємо! Профіль налаштовано', 'specialist_setup.done.desc': 'Тепер ви можете отримувати замовлення від клієнтів. Знайдіть завдання, що відповідають вашим навичкам.', 'support.title': 'Підтримка', 'support.type.label': 'Тип звернення', 'support.type.bug': 'Помилка', 'support.type.suggestion': 'Пропозиція', 'support.type.other': 'Інше', 'support.subject': 'Тема', 'support.subject.placeholder': 'Коротко опишіть проблему...', 'support.body': 'Повідомлення', 'support.body.placeholder': 'Детально опишіть проблему або пропозицію...', 'support.submit': 'Надіслати', 'support.cancel': 'Скасувати', 'support.error': 'Помилка надсилання. Спробуйте ще раз.', 'support.sent.title': 'Запит отримано!', 'support.sent.body': 'Ми відповімо на ваш email якнайшвидше.', 'support.sent.close': 'Закрити', 'admin.tab.support': 'Підтримка', 'admin.tab.backup': 'Резервні копії', 'admin.tab.translations': 'Переклади', 'admin.tab.dbcheck': 'Перевірка БД', 'admin.tab.balances': 'Баланс', 'admin.tab.push': 'Push', 'admin.tab.referrals': 'Реферали', 'admin.search': 'Пошук', 'admin.noData': 'Немає даних', 'admin.cat.order': 'Порядок', 'admin.cat.skills': 'Навички', 'admin.plans.form.max_tasks': 'Макс. завдань', 'admin.settings.referral.shared_section': 'Спільні налаштування рефералів', 'admin.settings.seo.title': 'SEO налаштування', 'admin.backup.title': 'Резервні копії', 'admin.backup.tables': 'Таблиці', 'admin.backup.exportAll': 'Експорт всього', 'admin.backup.importAll': 'Імпорт всього', 'admin.backup.exportTable': 'Експорт таблиці', 'admin.backup.importTable': 'Імпорт таблиці', 'admin.backup.exporting': 'Експорт...', 'admin.backup.importing': 'Імпорт...', 'admin.backup.exportSuccess': 'Експорт завершено', 'admin.backup.importSuccess': 'Імпорт завершено', 'admin.backup.autoBackup': 'Автобекап', 'admin.backup.autoBackupDesc': 'Автоматичний щоденний бекап', 'admin.backup.storedBackups': 'Збережені бекапи', 'admin.backup.noStoredBackups': 'Збережених бекапів немає', 'admin.backup.restore': 'Відновити', 'admin.backup.restoreConfirm': 'Відновити з бекапу?', 'admin.backup.restoreSuccess': 'Відновлення завершено', 'admin.backup.restoring': 'Відновлення...', 'admin.backup.date': 'Дата', 'admin.backup.size': 'Розмір', 'admin.backup.today': 'Сьогодні', 'admin.backup.yesterday': 'Вчора', 'admin.balance.col.operation': 'Операція', 'admin.balance.col.amount': 'Сума', 'admin.balance.col.result': 'Баланс', 'admin.balance.col.description': 'Опис', 'admin.balance.col.date': 'Дата', 'admin.balance.empty': 'Записів поки немає', 'admin.balance.filter.all': 'Всі операції', 'admin.balance.filter.user_id': 'Фільтр за userId', 'admin.balance.kind.topup': 'Поповнення', 'admin.balance.kind.plan_purchase': 'Списання за тариф', 'admin.balance.kind.admin_topup': 'Поповнення адміном', 'admin.balance.kind.admin_adjustment': 'Коригування', 'admin.support.search': 'Пошук', 'admin.support.all_statuses': 'Всі статуси', 'admin.support.all_types': 'Всі типи', 'admin.support.none': 'Звернень немає', 'admin.support.reply': 'Відповісти', 'admin.support.reply_placeholder': 'Введіть відповідь...', 'admin.support.send_reply': 'Надіслати відповідь', 'admin.support.cancel': 'Скасувати', 'admin.support.close': 'Закрити', 'admin.support.status.open': 'Відкрито', 'admin.support.status.in_progress': 'В роботі', 'admin.support.status.resolved': 'Вирішено', 'admin.support.status.closed': 'Закрито', 'admin.support.your_reply': 'Ваша відповідь', 'admin.user_edit.visibility_requirements.title': 'Профіль поки не потрапляє в «Пропозиції»', 'admin.user_edit.visibility_requirements.hint': 'Потрібно виконати умови видимості:', 'admin.user_edit.visibility_requirements.bio': 'Заповнити опис (bio)', 'admin.user_edit.visibility_requirements.published_card': 'Опублікувати хоча б одну картку', 'admin.user_edit.visibility_requirements.categories': 'Вказати категорію в опублікованій картці', 'admin.user_edit.visibility_requirements.locations': 'Вказати локацію в опублікованій картці', 'auto_response.desc': 'Автоматично відповідати на відповідні завдання', 'auto_response.budget_range': 'Бюджет завдання', 'auto_response.message_placeholder': 'Вітаю! Я можу допомогти з цим завданням...', 'profile.background.title': 'Фон шапки профілю', 'profile.background.hint': 'Показується в шапці публічного профілю на web і в мобільному застосунку.', 'profile.photo.uploading': 'Завантаження...', 'profile.balance.history': 'Архів операцій', 'profile.balance.history.last': 'Останні операції', 'profile.balance.history.empty': 'Операцій поки немає', 'profile.balance.history.balance_after': 'Баланс після', 'profile.balance.history.kind.topup': 'Поповнення балансу', 'profile.balance.history.kind.plan_purchase': 'Списання за тариф', 'profile.balance.history.kind.admin_topup': 'Поповнення адміністратором', 'profile.balance.history.kind.admin_adjustment': 'Коригування адміністратором', 'profile.plan_history.title': 'Історія тарифного плану', 'profile.plan_history.empty': 'Історія змін тарифу поки порожня', 'profile.plan_history.expires': 'До', 'profile.plan_history.days': 'днів', 'profile.plan_history.event.activated': 'Активовано', 'profile.plan_history.event.renewed': 'Продовжено', 'profile.plan_history.event.downgraded': 'Понижено', 'profile.plan_history.event.referral_reward': 'Реферальна нагорода', 'profile.plan_history.event.admin_change': 'Змінено адміністратором', 'profile.plan_history.event.expired': 'Закінчився', 'profile.show_contact_desc': 'Дозволяє клієнтам зв’язатися напряму', 'profile.site.visible.price_list': 'Прайслист', 'site.pricelist': 'Прайслист', 'status.plan_required': 'Статус недоступний на поточному тарифі', 'status.admin_not_applicable': 'Для акаунта адміністратора користувацький статус не застосовується' } }; function getTranslations(locale) { const t = translations[locale] ?? translations.el; return (key, fallback)=>t[key] ?? translations.el[key] ?? fallback ?? key; } /***/ })   /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ $: () => (/* binding */ getTranslations), /* harmony export */ YZ: () => (/* binding */ LOCALES) /* harmony export */ }); /* unused harmony export translations */ Sexport const LOCALES = [ { code: 'el', label: 'Ελληνικά', flag: '🇬🇷' }, { code: 'en', label: 'English', flag: '🇬🇧' }, { code: 'uk', label: 'Українська', flag: '🇺🇦' }, { code: 'ru', label: 'Русский', flag: '🇷🇺' } ]; export const translations = { el: { 'footer.slogan': 'Η εργασία σου — η φροντίδα μας! Λύνουμε κάθε ζήτημα γρήγορα και εύκολα.', 'footer.links': 'Σύνδεσμοι', 'footer.socials': 'Στα κοινωνικά δίκτυα', // Nav 'nav.home': 'Αρχική', 'nav.tasks': 'Εργασίες', 'nav.post': '+ Δημοσίευση', 'nav.dashboard': 'Οι εργασίες μου', 'nav.chat': 'Μηνύματα', 'nav.notifications': 'Ειδοποιήσεις', 'nav.profile': 'Προφίλ', 'nav.admin': 'Διαχείριση', 'nav.specialists': 'Προσφορές', 'nav.new_task': 'Νέα εργασία', 'nav.login': 'Σύνδεση', 'nav.register': 'Εγγραφή', 'nav.logout': 'Έξοδος', // Hero 'hero.title': 'Κάθε άνθρωπος έχει κάτι να προσφέρει', 'hero.subtitle': 'Βρες βοήθεια, πρόσφερε τις δεξιότητές σου ή κέρδισε χρήματα βοηθώντας άλλους', 'hero.cta.post': 'Ζήτησε βοήθεια', 'hero.cta.browse': 'Πρόσφερε βοήθεια', 'hero.cta.specialists': 'Βρες εργασία', 'hero.search.placeholder': 'Τι χρειάζεσαι; π.χ. ηλεκτρολόγος, καθαρισμός...', 'hero.specialist.title': 'Βρες εργασίες κοντά σου', 'hero.specialist.subtitle': 'Ανακάλυψε εργασίες στις κατηγορίες σου και στείλε προσφορά', 'hero.specialist.cta': 'Βρες εργασίες', 'hero.specialist.search.placeholder': 'Αναζήτηση εργασιών... π.χ. ηλεκτρολογία, καθαρισμός', 'section.categories.specialist': 'Βρες εργασίες ανά κατηγορία', 'section.cities.specialist': 'Εργασίες ανά πόλη', 'how.specialist.step1.title': 'Δημιούργησε κάρτα ειδικού', 'how.specialist.step1.desc': 'Δήλωσε κατηγορίες, δεξιότητες και περιοχές — το σύστημα βρίσκει εργασίες αυτόματα', 'how.specialist.step2.title': 'Βρες σχετικές εργασίες', 'how.specialist.step2.desc': 'Ανακάλυψε εργασίες στις κατηγορίες σου και ξεκίνα αμέσως', 'how.specialist.step3.title': 'Στείλε προσφορά & κέρδισε', 'how.specialist.step3.desc': 'Υποβάλε προσφορά με τιμή και χρόνο, επικοινωνήσε και ολοκλήρωσε εργασίες', 'stats.specialists': 'προσφορές', 'stats.tasks': 'εργασίες', 'stats.categories': 'κατηγορίες', 'stats.free': 'δωρεάν εγγραφή', 'promo.title': 'Αποκτήσε Pro δωρεάν — μόνο μέχρι το τέλος του χρόνου', 'promo.subtitle': 'Εγγράψου τώρα και απόλαυσε το πλάνο Pro χωρίς χρέωση. Η προσφορά λήγει στις 31 Δεκεμβρίου.', 'promo.cta': 'Εγγραφή δωρεάν', 'promo.days': 'μέρες', 'promo.hours': 'ώρες', 'promo.minutes': 'λεπτά', 'promo.seconds': 'δευτ.', // Sections 'section.categories': 'Δημιούργησε εργασία σε οποιαδήποτε κατηγορία', 'section.how': 'Πώς λειτουργεί', 'section.recent': 'Πρόσφατες εργασίες', 'section.all': 'Δες όλες →', 'section.more': 'ακόμα', 'section.cities': 'Πόλεις & Περιοχές', 'section.community': 'Ένα κοινοτικό έργο για όλους', 'community.subtitle': 'Το CanHelp δεν είναι απλώς μια αγορά — είναι μια κοινότητα αμοιβαίας βοήθειας. Οποιοσδήποτε έχει γνώση ή δεξιότητα μπορεί να βρει έναν πελάτη. Οποιοσδήποτε έχει ένα πρόβλημα μπορεί να βρει έναν ειδικό.', 'community.point1.title': 'Είσαι ειδικός σε κάτι;', 'community.point1.desc': 'Επισκευές, μαθήματα, σχεδιασμός, μεταφράσεις, φροντίδα — κάθε δεξιότητα αξίζει. Δημιούργησε προφίλ και βρες πελάτες κοντά σου.', 'community.point2.title': 'Χρειάζεσαι βοήθεια;', 'community.point2.desc': 'Δημοσίευσε εργασία σε λιγότερο από ένα λεπτό και λάβε προσφορές από επαληθευμένους ειδικούς στην πόλη σου.', 'community.point3.title': 'Βοήθησε το έργο να αναπτυχθεί', 'community.point3.desc': 'Το CanHelp αναπτύσσεται χάρη στις κοινότητες. Μοιράσου το σύνδεσμο με φίλους και γνωστούς — μαζί χτίζουμε κάτι χρήσιμο για όλους.', 'community.share': 'Μοιράσου με φίλους', 'community.share.copied': 'Σύνδεσμος αντιγράφηκε!', // Referral section on home page 'section.referral': 'Πρόγραμμα παραπομπών', 'referral.home.subtitle': 'Μοιράσου τον σύνδεσμό σου — κάθε νέος χρήστης που εγγράφεται μέσα από αυτόν σου αποφέρει ανταμοιβή.', 'referral.home.step1.title': 'Εγγραφείσε και λάβε σύνδεσμο', 'referral.home.step1.desc': 'Δημιούργησε λογαριασμό και βρες τον μοναδικό σου σύνδεσμο παραπομπής στο προφίλ σου.', 'referral.home.step2.title': 'Μοιράσου με φίλους', 'referral.home.step2.desc': 'Στείλε τον σύνδεσμο σε φίλους, γνωστούς ή δημοσίευσέ τον στα social media.', 'referral.home.step3.title': 'Κέρδισε ανταμοιβές', 'referral.home.step3.desc': 'Μόλις ο φίλος σου επαληθεύσει το email του, λαμβάνεις αυτόματα την ανταμοιβή σου.', 'referral.home.cta': 'Πάρε τον σύνδεσμό σου', 'referral.home.badge': 'Πρόγραμμα παραπομπών', // FAQ section 'section.faq': 'Συχνές Ερωτήσεις', 'faq.q1': 'Πώς λειτουργεί το CanHelp;', 'faq.a1': 'Δημοσίευσε μια εργασία, λάβε προσφορές από ειδικούς, επέλεξε τον καλύτερο και ξεκίνα τη συνεργασία. Είναι γρήγορο, απλό και δωρεάν για πελάτες.', 'faq.q2': 'Πόσο κοστίζει η χρήση της πλατφόρμας;', 'faq.a2': 'Η εγγραφή και η δημοσίευση εργασιών είναι εντελώς δωρεάν για πελάτες. Οι ειδικοί έχουν στη διάθεσή τους δωρεάν πλάνο καθώς και premium επιλογές.', 'faq.q3': 'Πώς μπορώ να γίνω ειδικός;', 'faq.a3': 'Κάνε εγγραφή, πήγαινε στο «Γίνε Ειδικός», συμπλήρωσε το προφίλ σου με δεξιότητες και κατηγορίες και αρχίνισε να λαμβάνεις εργασίες.', 'faq.q4': 'Πώς επιλέγω τον κατάλληλο ειδικό;', 'faq.a4': 'Δες τις αξιολογήσεις, την εμπειρία, τις δεξιότητες και το χαρτοφυλάκιο κάθε ειδικού. Επικοινώνησε μαζί του μέσω chat και συζήτα τις λεπτομέρειες πριν αποφασίσεις.', 'faq.q5': 'Τι γίνεται αν δεν είμαι ικανοποιημένος;', 'faq.a5': 'Μπορείς να αφήσεις αξιολόγηση για τον ειδικό και να τον βαθμολογήσεις από 1 έως 5 αστέρια. Οι αξιολογήσεις βοηθούν άλλους χρήστες να επιλέξουν έμπιστους επαγγελματίες.', 'faq.q6': 'Μπορώ να επικοινωνήσω με τον ειδικό πριν την αποδοχή;', 'faq.a6': 'Ναι. Μόλις λάβεις μια προσφορά, μπορείς να ανοίξεις chat με τον ειδικό, να κάνεις ερωτήσεις και να συντονίσεις τις λεπτομέρειες πριν αποφασίσεις.', 'faq.q7': 'Πόσος χρόνος χρειάζεται για να λάβω προσφορές;', 'faq.a7': 'Συνήθως μέσα σε λίγες ώρες. Οι ειδικοί λαμβάνουν ειδοποίηση για νέες εργασίες και μπορούν να απαντήσουν γρήγορα.', 'faq.q8': 'Μπορώ να δημοσιεύσω εργασία σε οποιαδήποτε πόλη της Ελλάδας;', 'faq.a8': 'Ναι! Το CanHelp καλύπτει όλη την Ελλάδα. Μπορείς να βρεις ειδικούς στην Αθήνα, στη Θεσσαλονίκη, στην Πάτρα και αλλού.', 'faq.q9': 'Τι είδη εργασιών μπορώ να βρω στο CanHelp;', 'faq.a9': 'Επισκευές, καθαρισμό, ηλεκτρολόγους, μαθήματα, σχεδιασμό, IT, μετακομίσεις, ομορφιά και πολλά άλλα. Οι κατηγορίες αυξάνονται συνεχώς.', 'faq.q10': 'Υπάρχει εφαρμογή για κινητό;', 'faq.a10': 'Ναι! Το CanHelp διατίθεται για Android και iOS. Κατέβασε την εφαρμογή και διαχειρίσου τα πάντα από το τηλέφωνό σου.', // How it works 'how.step1.title': 'Δημοσίευσε εργασία', 'how.step1.desc': 'Περίγραψε τι χρειάζεσαι και ορίζε τον προϋπολογισμό σου', 'how.step2.title': 'Λάβε προσφορές', 'how.step2.desc': 'Ειδικοί θα σου στείλουν προσφορές με τιμή και χρόνο', 'how.step3.title': 'Επίλεξε & ξεκίνα', 'how.step3.desc': 'Επέλεξε τον καλύτερο επαγγελματία και ξεκίνα τη συνεργασία', // Tasks page 'tasks.title': 'εργασίες', 'tasks.filters': 'Φίλτρα', 'tasks.search': 'Αναζήτηση', 'tasks.search.placeholder': 'Τίτλος ή λέξη κλειδί...', 'tasks.search.btn': 'Αναζήτηση', 'tasks.publish': 'Δημοσίευση', 'tasks.category.all': 'Όλες', 'tasks.category.all_in': 'Όλα στην', 'tasks.category.label': 'Κατηγορία', 'tasks.location.label': 'Πόλη', 'tasks.location.placeholder': 'π.χ. Αθήνα', 'tasks.empty': 'Δεν βρέθηκαν εργασίες', 'tasks.empty.cta': 'Δημοσίευσε την πρώτη', // Task detail 'task.status.open': 'Ανοιχτή', 'task.status.in_progress': 'Σε εξέλιξη', 'task.status.completed': 'Ολοκληρωμένη', 'task.status.cancelled': 'Ακυρωμένη', 'task.status.draft': 'Πρόχειρο', 'task.budget': 'Προϋπολογισμός', 'task.location': 'Τοποθεσία', 'task.deadline': 'Ημερομηνία έναρξης', 'task.expires_at': 'Ενεργό έως', 'task.created_at': 'Δημιουργήθηκε', 'task.customer': 'Πελάτης', 'task.offer.btn': 'Υποβολή προσφοράς', 'task.invite.banner_title': 'Σας προσκαλούν σε αυτήν την εργασία', 'task.invite.banner_hint': 'Ο πελάτης σας πρόσκαλεσε προσωπικά', 'task.invite.accept': 'Αποστολή προσφοράς', 'task.invite.decline': 'Άρνηση', 'offer.accept': 'Αποδοχή', 'offer.decline': 'Απόρριψη', 'task.complete': 'Ολοκλήρωση εργασίας', 'task.complete.confirm': 'Να ολοκληρωθεί η εργασία;', 'task.edit': 'Επεξεργασία', 'task.status_label': 'Κατάσταση', 'task.yours': 'Η εργασία σου', 'task.offer.yours': 'Η προσφορά σου', 'review.leave': 'Άφησε αξιολόγηση', 'review.rating': 'Βαθμολογία', 'review.comment': 'Σχόλιο', 'review.comment.placeholder': 'Πες μας για την εμπειρία σου...', 'review.submit': 'Υποβολή αξιολόγησης', 'review.submitting': 'Αποστολή...', 'review.done': 'Η αξιολόγηση καταχωρήθηκε!', 'profile.reviews': 'Αξιολογήσεις', 'profile.no_reviews': 'Δεν υπάρχουν αξιολογήσεις ακόμα', 'profile.rating': 'Βαθμολογία', 'profile.skills.label': 'Δεξιότητες', 'profile.member_since': 'Μέλος από', 'task.offers': 'Προσφορές', 'task.offers.none': 'Δεν υπάρχουν ακόμα προσφορές', // Create task 'create.title': 'Δημοσίευση εργασίας', 'create.field.title': 'Τίτλος', 'create.field.description': 'Περιγραφή', 'create.field.category': 'Κατηγορία', 'create.field.category.select': 'Επιλέξτε...', 'create.field.location': 'Τοποθεσία', 'create.field.location.any': 'Οπουδήποτε', 'create.field.location.all': 'Ολόκληρη η πόλη', 'create.field.budget': 'Προϋπολογισμός (€)', 'create.field.deadline': 'Ημερομηνία έναρξης', 'create.field.expires_at': 'Αγγελία ενεργή έως', 'create.field.expires_at.days': '{n} ημέρες', 'create.field.budget_negotiable': 'Η τιμή είναι διαπραγματεύσιμη', 'create.field.time_slot': 'Χρόνος εκτέλεσης', 'create.field.time_slot.any': 'Οποιαδήποτε', 'create.field.time_slot.morning': 'Πρωινό (08:00–13:00)', 'create.field.time_slot.afternoon': 'Μεσημέρι (13:00–18:00)', 'create.field.time_slot.evening': 'Βράδυ (18:00–22:00)', 'create.field.time_slot.weekend': 'Σαββατοκύριακο', 'create.field.address': 'Διεύθυνση (προαιρετικά)', 'create.field.address.district': 'Συνοικία', 'create.field.address.street': 'Οδός', 'create.field.address.house': 'Αριθμός', 'create.field.confidential': 'Εμπιστευτική σημείωση', 'create.field.confidential.placeholder': 'Λεπτομέρειες που θα δει μόνο ο αναδοχόμενος...', 'create.field.confidential.hint': 'Δεν εμφανίζεται δημόσια', 'create.field.photos': 'Φωτογραφίες', 'create.field.photos.add': 'Προσθήκη φωτογραφίας', 'create.field.photos.uploading': 'Ανέβασμα...', 'task.budget_negotiable': 'Τιμή διαπραγματεύσιμη', 'task.time_slot': 'Χρόνος', 'task.confidential': 'Εμπιστευτική σημείωση', 'create.field.title.placeholder': 'π.χ. Καθαρισμός διαμερίσματος 80τμ', 'create.field.description.placeholder': 'Περίγραψε λεπτομερώς τι χρειάζεσαι...', 'create.field.location.placeholder': 'π.χ. Αθήνα, Κολωνάκι', 'create.field.budget.placeholder': 'π.χ. 100', 'create.submit': 'Δημοσίευση εργασίας', 'create.submitting': 'Δημοσίευση...', // Auth 'login.title': 'Καλωσόρισες', 'login.subtitle': 'Σύνδεση στο CanHelp', 'login.email': 'Email', 'login.password': 'Κωδικός', 'login.submit': 'Σύνδεση', 'login.submitting': 'Σύνδεση...', 'login.error': 'Λάθος email ή κωδικός', 'login.unverified.title': 'Επιβεβαιώστε το email σας', 'login.unverified.desc': 'Στείλαμε σύνδεσμο επαλήθευσης στο email σας. Ελέγξτε τα εισερχόμενα (ή spam) και πατήστε το σύνδεσμο.', 'login.unverified.resend': 'Αποστολή νέου email επαλήθευσης', 'login.unverified.sending': 'Αποστολή...', 'login.unverified.sent': '✓ Εστάλη — ελέγξτε τα εισερχόμενα', 'profile.email.verified': 'Email επαληθεύτηκε', 'profile.email.not_verified': 'Email δεν επαληθεύτηκε', 'login.no_account': 'Δεν έχεις λογαριασμό;', 'login.register_link': 'Εγγραφή', 'login.forgot_password': 'Ξέχασα τον κωδικό', 'login.or_continue_with': 'ή συνεχίστε με', 'login.continue_google': 'Σύνδεση με Google', 'forgot.title': 'Ξέχασα τον κωδικό', 'forgot.subtitle': 'Εισάγετε το email σας για να λάβετε σύνδεσμο ανάκτησης', 'forgot.email': 'Email', 'forgot.submit': 'Αποστολή', 'forgot.submitting': 'Αποστολή...', 'forgot.sent.title': 'Ελέγξτε τα εισερχόμενά σας', 'forgot.sent.desc': 'Αν υπάρχει λογαριασμός με αυτό το email, θα σας στείλουμε σύνδεσμο ανάκτησης κωδικού.', 'forgot.back_to_login': 'Επιστροφή στη σύνδεση', 'forgot.error': 'Αποτυχία αποστολής. Ελέγξτε το email σας ή δοκιμάστε ξανά.', 'forgot.error.not_found': 'Δεν βρέθηκε λογαριασμός με αυτό το email.', 'forgot.error.send_failed': 'Αποτυχία αποστολής email. Δοκιμάστε ξανά αργότερα', 'reset.title': 'Νέος κωδικός', 'reset.subtitle': 'Εισάγετε τον νέο σας κωδικό', 'reset.password': 'Νέος κωδικός', 'reset.confirm': 'Επιβεβαίωση κωδικού', 'reset.submit': 'Αλλαγή κωδικού', 'reset.submitting': 'Αποθήκευση...', 'reset.success': 'Ο κωδικός άλλαξε επιτυχώς. Ανακατεύθυνση στη σύνδεση...', 'reset.back_to_login': 'Επιστροφή στη σύνδεση', 'reset.error.mismatch': 'Οι κωδικοί δεν ταιριάζουν', 'reset.error.invalid': 'Μη έγκυρος σύνδεσμος. Παρακαλώ ζητήστε νέο.', 'register.title': 'Εγγραφή', 'register.subtitle': 'Δημιουργία λογαριασμού στο CanHelp', 'register.first_name': 'Όνομα', 'register.last_name': 'Επώνυμο', 'register.email': 'Email', 'register.password': 'Κωδικός (min 8 χαρακτήρες)', 'register.role': 'Ρόλος', 'register.role.customer': 'Χρήστης', 'register.role.customer.desc': 'Δημοσιεύω εργασίες', 'register.role.specialist': 'Ειδικός', 'register.role.specialist.desc': 'Αναλαμβάνω εργασίες', 'register.submit': 'Δημιουργία λογαριασμού', 'register.submitting': 'Εγγραφή...', 'register.has_account': 'Έχεις ήδη λογαριασμό;', 'register.login_link': 'Σύνδεση', 'register.continue_google': 'Εγγραφή με Google', 'register.check_email.title': 'Ελέγξτε το email σας', 'register.check_email.desc': 'Στείλαμε σύνδεσμο επαλήθευσης στη διεύθυνση email σας. Ελέγξτε τα εισερχόμενα (ή spam) και πατήστε τον σύνδεσμο.', 'register.check_email.login': 'Επιστροφή στη σύνδεση', 'register.captcha_failed': 'Η επαλήθευση CAPTCHA απέτυχε. Παρακαλώ δοκιμάστε ξανά.', // Dashboard 'dashboard.title': 'Πίνακας ελέγχου', 'dashboard.new_task': '+ Νέα εργασία', 'dashboard.onboarding.title': 'Καλωσήλθατε στο CanHelp 👋', 'dashboard.onboarding.subtitle': 'Διαλέξτε πώς θέλετε να ξεκινήσετε.', 'dashboard.onboarding.helper.title': 'Πρόσφερε τη βοήθειά σου', 'dashboard.onboarding.helper.desc': 'Συμπλήρωσε το προφίλ σου — δεξιότητες, κατηγορίες και περιοχές. Παίρνει μόνο λίγα λεπτά και αρχίζεις να δέχεσαι παραγγελίες.', 'dashboard.onboarding.helper.cta': 'Συμπλήρωσε το προφίλ', 'dashboard.onboarding.requester.title': 'Χρειάζεσαι βοήθεια;', 'dashboard.onboarding.requester.desc': 'Δημοσίευσε μια εργασία και οι βοηθοί θα σου στείλουν προσφορές.', 'dashboard.onboarding.requester.cta': 'Δημοσίευσε εργασία', 'dashboard.my_tasks': 'Οι εργασίες μου', 'dashboard.my_offers': 'Οι προσφορές μου', 'dashboard.invitations': 'Προσκλήσεις για εργασία', 'dashboard.offers_count': 'προσφορές', 'dashboard.declined_count': 'απορρίφθηκαν', 'dashboard.completed_tasks': 'Ολοκληρωμένες εργασίες', 'dashboard.completed_offers': 'Ολοκληρωμένες προσφορές', 'dashboard.review_pending': 'Η αξιολόγηση δεν έχει υποβληθεί ακόμα', 'tasks.new.top_specialists': 'Κορυφαίοι ειδικοί', 'tasks.new.select_category': 'Επιλέξτε κατηγορία για να δείτε ειδικούς', 'tasks.new.invite': 'Πρόσκληση', 'tasks.new.invited': 'Επιλέχθηκε ✓', 'reviews.count': 'αξιολογήσεις', 'filter.location': 'Τοποθεσία', 'filter.language': 'Γλώσσες', 'filter.language.any': 'Οποιαδήποτε γλώσσα', 'filter.category.all': 'Όλες οι κατηγορίες', 'user.categories': 'Κατηγορίες', 'user.work_area': 'Περιοχή εργασίας', 'user.specialist_cards': 'Κάρτες υπηρεσιών', 'card.skills': 'Δεξιότητες', 'card.categories': 'Κατηγορίες', 'card.geography': 'Περιοχή εργασίας', 'card.portfolio': 'Χαρτοφυλάκιο', 'card.close': 'Κλείσιμο', 'dashboard.tasks.empty': 'Δεν έχεις δημοσιεύσει εργασίες', 'dashboard.tasks.empty.cta': 'Δημοσίευσε την πρώτη σου', 'dashboard.tasks.add_new': 'Πρόσθεσε νέα εργασία', 'dashboard.offers.empty': 'Δεν έχεις υποβάλλει προσφορές', 'dashboard.offers.empty.cta': 'Βρες εργασίες', 'dashboard.customer.specialists_title': 'Ψάχνεις εκτελεστή;', 'dashboard.customer.specialists_hint': 'Δες προφίλ ειδικών, διάβασε αξιολογήσεις και κάλεσέ τους στις εργασίες σου', 'dashboard.customer.specialists_cta': 'Βρες ειδικό', 'dashboard.customer.how_title': 'Πώς λειτουργεί', 'dashboard.customer.step1': 'Δημιούργησε εργασία με περιγραφή και προϋπολογισμό', 'dashboard.customer.step2': 'Οι ειδικοί θα στείλουν προσφορές με τιμή και χρόνο', 'dashboard.customer.step3': 'Επίλεξε τον κατάλληλο και ξεκίνα τη συνεργασία', // Notifications 'notif.title': 'Ειδοποιήσεις', 'notif.mark_all': 'Σήμανση όλων ως αναγνωσμένα', 'notif.empty': 'Δεν υπάρχουν ειδοποιήσεις', 'notif.type.generic': 'Ειδοποίηση', 'notif.type.new_offer': 'Νέα προσφορά', 'notif.type.offer_accepted': 'Η προσφορά σας έγινε δεκτή', 'notif.type.offer_declined': 'Η προσφορά σας απορρίφθηκε', 'notif.type.task_completed': 'Η εργασία ολοκληρώθηκε', 'notif.type.task_cancelled': 'Η εργασία ακυρώθηκε', 'notif.type.new_message': 'Νέο μήνυμα', 'notif.type.new_review': 'Νέα αξιολόγηση', 'notif.type.task_invite': 'Πρόσκληση σε εργασία', 'notif.type.referral_reward': 'Ανταμοιβή παραπομπής', 'notif.type.specialist_card_submitted': 'Η κάρτα στάλθηκε για έλεγχο', 'notif.type.specialist_card_approved': 'Η κάρτα εγκρίθηκε', 'notif.type.specialist_card_rejected': 'Η κάρτα απορρίφθηκε', 'notif.body.new_offer': 'Νέα προσφορά για «{title}»', 'notif.body.offer_accepted': 'Η προσφορά σας για «{title}» έγινε δεκτή', 'notif.body.offer_declined': 'Η προσφορά σας για «{title}» απορρίφθηκε', 'notif.body.task_invite': 'Σας προσκαλούν για «{title}»', 'notif.body.new_review': 'Λάβατε αξιολόγηση {rating}★', 'notif.body.referral_reward': 'Προστέθηκαν {days} ημέρες πρόσβασης στο πλάνο «{plan}» στον λογαριασμό σας!', 'notif.body.specialist_card_submitted': 'Η κάρτα «{title}» στάλθηκε για έλεγχο', 'notif.body.specialist_card_approved': 'Η κάρτα «{title}» εγκρίθηκε και δημοσιεύτηκε', 'notif.body.specialist_card_rejected': 'Η κάρτα «{title}» δεν εγκρίθηκε. Διορθώστε την και στείλτε την ξανά.', // Offer status 'offer.status.pending': 'Εκκρεμεί', 'offer.status.accepted': 'Αποδεκτή', 'offer.status.declined': 'Απορρίφθηκε', 'offer.status.withdrawn': 'Αποσύρθηκε', 'offer.status.other_accepted': 'Επιλέχθηκε άλλος ειδικός', // Common 'common.loading': 'Φόρτωση...', 'common.error': 'Σφάλμα', 'common.save': 'Αποθήκευση', 'common.saving': 'Αποθήκευση...', 'common.cancel': 'Ακύρωση', 'common.add': 'Προσθήκη', 'common.close': 'Κλείσιμο', 'common.edit': 'Επεξεργασία', 'common.delete': 'Διαγραφή', 'common.from': 'από', 'common.currency': '€', 'common.greece': 'Ελλάδα', // Chat 'chat.connected': 'Συνδεδεμένος', 'chat.disconnected': 'Αποσυνδεδεμένος', 'chat.no_rooms': 'Δεν υπάρχουν συνομιλίες ακόμα', 'chat.task_fallback': 'Εργασία', 'chat.select': 'Επίλεξε συνομιλία', 'chat.no_messages': 'Δεν υπάρχουν μηνύματα', 'chat.placeholder': 'Γράψε μήνυμα... (Enter για αποστολή)', 'chat.conversation_fallback': 'Συνομιλία', 'chat.direct_chat': 'Απευθείας συνομιλία', 'chat.linked_task': 'Συνδεδεμένη εργασία', 'chat.write_btn': 'Μήνυμα', 'chat.just_now': 'μόλις τώρα', 'chat.min_ago': 'λ', 'chat.write_specialist': 'Γράψε στον ειδικό', 'chat.write_customer': 'Γράψε στον πελάτη', 'chat.notif_settings': 'Ρυθμίσεις ειδοποιήσεων', 'chat.notif_messages': 'Ειδοποιήσεις για νέα μηνύματα', 'chat.toast_title': 'Νέο μήνυμα', 'chat.toast_open': 'Άνοιγμα συνομιλίας', // Offer form 'offer.price': 'Τιμή', 'offer.price.placeholder': 'π.χ. 80', 'offer.customer_budget': 'Προϋπολογισμός πελάτη', 'offer.message': 'Μήνυμα', 'offer.optional': 'προαιρετικό', 'offer.message.placeholder': 'Παρουσίασε τον εαυτό σου, την εμπειρία σου και γιατί είσαι η καλύτερη επιλογή...', 'offer.submitting': 'Αποστολή...', // Profile 'profile.photo': 'Φωτογραφία προφίλ', 'profile.photo.change': 'Αλλαγή φωτογραφίας', 'profile.photo.hint': 'JPEG, PNG, WebP · έως 5MB', 'profile.basic_info': 'Βασικά στοιχεία', 'profile.phone': 'Τηλέφωνο', 'profile.phone.placeholder': '+30 6901234567', 'profile.bio': 'Σύντομη περιγραφή', 'profile.bio.placeholder': 'Πες μας λίγα λόγια για εσένα...', 'profile.language': 'Γλώσσα', 'profile.language.hint': 'Γλώσσα διεπαφής και email ειδοποιήσεων', 'profile.languages': 'Γλώσσες επικοινωνίας', 'profile.languages.hint': 'Επιλέξτε όλες τις γλώσσες που μιλάτε', 'profile.skills': 'Δεξιότητες', 'profile.skills.subtitle': 'Προσθέσε τις υπηρεσίες που προσφέρεις', 'profile.skills.placeholder': 'π.χ. Καθαρισμός, IT, Μαθήματα...', 'profile.role': 'Ρόλος λογαριασμού', 'profile.role.specialist': '🔧 Βοηθός', 'profile.role.admin': '👑 Admin', 'profile.role.customer': '👤 Χρήστης', 'profile.role.user': '👤 Χρήστης', 'profile.role.change': 'Για αλλαγή ρόλου επικοινωνήστε με την υποστήριξη.', 'profile.become_specialist': 'Πρόσφερε βοήθεια', 'profile.become_specialist.desc': 'Δημιούργησε το προφίλ βοηθού σου, πρόσφερε τις δεξιότητές σου και αρχίνισε να λαμβάνεις εργασίες.', 'become_specialist.hero.title': 'Πρόσφερε τις δεξιότητές σου', 'become_specialist.hero.subtitle': 'Δημιούργησε προφίλ βοηθού και λάβε αιτήματα από ανθρώπους που χρειάζονται βοήθεια', 'become_specialist.how.title': 'Πώς λειτουργεί', 'become_specialist.step1.title': 'Δημιούργησε κάρτα ειδικού', 'become_specialist.step1.desc': 'Δήλωσε κατηγορίες, δεξιότητες και περιοχές κάλυψης — το σύστημα θα βρει τις κατάλληλες εργασίες για σένα αυτόματα', 'become_specialist.step2.title': 'Βρες εργασίες', 'become_specialist.step2.desc': 'Ανακάλυψε εργασίες στις κατηγορίες σου στην ενότητα «Αναζήτηση εργασιών»', 'become_specialist.step3.title': 'Στείλε προσφορά & κέρδισε', 'become_specialist.step3.desc': 'Υποβάλε προσφορές με τιμή και χρόνο, επικοινωνήσε με πελάτες και ολοκλήρωσε εργασίες', 'become_specialist.benefits.title': 'Πλεονεκτήματα προφίλ ειδικού', 'become_specialist.benefit1': 'Αναζήτηση εργασιών ανά κατηγορία και τοποθεσία', 'become_specialist.benefit2': 'Δημόσιο προφίλ με αξιολογήσεις πελατών', 'become_specialist.benefit3': 'Πρόγραμμα διαθεσιμότητας ορατό στους πελάτες', 'become_specialist.benefit4': 'Προσθήκη σε αγαπημένα από πελάτες', 'become_specialist.cta': 'Περισσότερα', 'become_specialist.free_badge': 'Δωρεάν εγγραφή', 'profile.tab.notifications': 'Ειδοποιήσεις', 'profile.tab.reviews': 'Αξιολογήσεις', 'profile.tab.referral': 'Παραπομπές', 'profile.tab.auto_response': 'Αυτόματη απάντηση', 'profile.tab.site': 'Site', 'profile.site.title': 'Προσωπική σελίδα', 'profile.site.url_label': 'Προσωπικό site', 'profile.site.copy': 'Αντιγραφή', 'profile.site.copied': 'Αντιγράφηκε', 'profile.site.visible_title': 'Τι εμφανίζεται στη σελίδα σας', 'profile.site.visible.name': 'Όνομα και φωτογραφία', 'profile.site.visible.bio': 'Βιογραφικό', 'profile.site.visible.rating': 'Αξιολόγηση και κριτικές', 'profile.site.visible.portfolio': 'Χαρτοφυλάκιο / Κάρτες', 'profile.site.visible.contacts': 'Στοιχεία επικοινωνίας', 'profile.site.visible.full_last_name': 'Πλήρες επώνυμο', 'profile.site.visible.services': 'Κάρτες υπηρεσιών', 'profile.site.visible.reviews': 'Ενότητα κριτικών', 'profile.site.visible.status': 'Κατάσταση «Έτοιμος να βοηθήσω»', 'profile.site.theme': 'Θέμα εμφάνισης', 'profile.site.theme.dark': 'Σκοτεινό', 'profile.site.theme.light': 'Φωτεινό', 'profile.site.slug_taken': 'Αυτή η διεύθυνση είναι ήδη κατειλημμένη', 'profile.site.stats.title': 'Στατιστικά επισκεψιμότητας', 'profile.site.stats.days': 'τελευταίες 30 ημέρες', 'profile.site.stats.views': 'Προβολές', 'profile.site.stats.unique': 'Μοναδικοί επισκέπτες', 'profile.site.stats.messages': 'Μηνύματα', 'profile.site.stats.total_views': 'Συνολικές προβολές', 'profile.site.stats.total_unique': 'Μοναδικοί επισκέπτες', 'profile.site.stats.total_messages': 'Μηνύματα', 'profile.site.stats.empty': 'Δεν υπάρχουν δεδομένα ακόμη', 'profile.site.stats.loading': 'Φόρτωση στατιστικών...', 'profile.site.stats.no_slug': 'Ορίστε τη διεύθυνση του site για να δείτε στατιστικά', 'profile.site.edit_bio_hint': 'Το βιογραφικό και η φωτογραφία ρυθμίζονται στην καρτέλα «Βασικά».', 'profile.site.seo.title': 'SEO — μεταδεδομένα σελίδας', 'profile.site.seo.hint': 'Εμφανίζεται στα αποτελέσματα αναζήτησης. Αποθηκεύστε για αυτόματη μετάφραση σε όλες τις γλώσσες.', 'profile.site.seo.site_title': 'Τίτλος σελίδας', 'profile.site.seo.site_title_placeholder': 'Γιάννης Παπαδόπουλος — Υδραυλικός στην Αθήνα', 'profile.site.seo.site_desc': 'Μετα-περιγραφή', 'profile.site.seo.site_desc_placeholder': 'Σύντομη περιγραφή για τις μηχανές αναζήτησης...', 'status.can_help_now_hint': 'Η κάρτα σου εμφανίζεται ψηλότερα', 'status.need_help_hint': 'Οι ειδικοί μπορούν να σε βοηθήσουν', 'profile.referral.title': 'Πρόγραμμα παραπομπών', 'profile.referral.desc': 'Μοιράσου τον σύνδεσμο σου και κέρδισε ανταμοιβές για κάθε νέο χρήστη.', 'profile.referral.link_label': 'Ο σύνδεσμος παραπομπής σου', 'profile.referral.copy': 'Αντιγραφή', 'profile.referral.copied': 'Αντιγράφηκε!', 'profile.referral.invited_count': 'επιτυχείς παραπομπές', 'profile.referral.no_code': 'Ο κωδικός παραπομπής δεν είναι διαθέσιμος.', 'notifications.title': 'Ρυθμίσεις ειδοποιήσεων', 'notifications.email.new_tasks': 'Email για νέες εργασίες', 'notifications.email.new_tasks.desc': 'Λάβε email όταν δημοσιευτεί νέα εργασία στις κατηγορίες σου', 'notifications.messages.desc': 'Λαμβάνεις ειδοποίηση όταν έρθει νέο μήνυμα', 'notifications.saved': 'Ρυθμίσεις αποθηκεύτηκαν', 'notifications.plan_required': 'Συνδρομή απαιτείται για αυτή τη λειτουργία', 'profile.tab.info': 'Βασικά στοιχεία', 'profile.tab.finance': 'Οικονομικά', 'profile.tab.skills': 'Δεξιότητες', 'profile.tab.categories': 'Κατηγορίες', 'profile.tab.geography': 'Γεωγραφία', 'profile.specialist.categories': 'Κατηγορίες εργασιών', 'profile.specialist.categories.desc': 'Επίλεξε τις κατηγορίες στις οποίες εργάζεσαι', 'profile.specialist.geography': 'Περιοχές κάλυψης', 'profile.specialist.geography.desc': 'Επίλεξε τις πόλεις / περιοχές όπου δραστηριοποιείσαι', 'profile.saving': 'Αποθήκευση...', 'profile.upload.error': 'Σφάλμα κατά την αναφόρτωση', 'profile.saved': 'Αποθηκεύτηκε', 'profile.tab.cards': 'Προσφορές', 'profile.cards.count': 'Προσφορές', 'profile.cards.add': 'Νέα προσφορά', 'profile.cards.new_title': 'Τίτλος νέας προσφοράς', 'profile.cards.placeholder': 'π.χ. Υδραυλικά', 'profile.cards.create': 'Δημιουργία', 'profile.cards.cancel': 'Ακύρωση', 'profile.cards.empty': 'Δεν έχετε προσφορές', 'profile.cards.empty_hint': 'Δημιουργήστε την πρώτη σας κάρτα για να προβάλετε τις υπηρεσίες σας στους πελάτες.', 'profile.cards.create_first': 'Δημιουργήστε την πρώτη σας προσφορά', 'profile.cards.delete_confirm': 'Διαγραφή προσφοράς;', 'profile.listing_requirements.published_card': 'Δημοσιεύστε τουλάχιστον μία κάρτα', 'profile.listing_requirements.title': 'Το προφίλ σας δεν εμφανίζεται ακόμη στις προσφορές', 'profile.listing_requirements.hint': 'Για να γίνει ορατή η κάρτα, ολοκληρώστε αυτές τις προϋποθέσεις:', 'profile.listing_requirements.bio': 'Προσθέστε ένα σύντομο βιογραφικό στην ενότητα προφίλ', 'profile.listing_requirements.categories': 'Προσθέστε τουλάχιστον μία κατηγορία στην ενεργή κάρτα', 'profile.listing_requirements.locations': 'Προσθέστε τουλάχιστον μία τοποθεσία στην ενεργή κάρτα', 'profile.listing_requirements.card_inactive': 'Κάντε την κάρτα ενεργή', 'profile.listing_requirements.review_pending': 'Η κάρτα είναι υπό έλεγχο', 'profile.card.visibility_issue': 'Η κάρτα δεν εμφανίζεται στις προσφορές', 'profile.card.tab.main': 'Γενικά', 'profile.card.tab.skills': 'Δεξιότητες', 'profile.card.tab.categories': 'Κατηγορίες', 'profile.card.tab.geography': 'Γεωγραφία', 'profile.card.tab.portfolio': 'Γκαλερί', 'profile.card.tab.pricelist': 'Τιμοκατάλογος', 'profile.card.pricelist.empty': 'Δεν έχουν οριστεί ομάδες τιμοκαταλόγου.', 'profile.card.pricelist.add_group': 'Προσθήκη ομάδας', 'profile.card.pricelist.group_title': 'Τίτλος ομάδας', 'profile.card.pricelist.add_item': 'Προσθήκη στοιχείου', 'profile.card.pricelist.item_name': 'Υπηρεσία / εργασία', 'profile.card.pricelist.item_desc': 'Περιγραφή (προαιρετικό)', 'profile.card.pricelist.item_price': 'Τιμή', 'profile.card.pricelist.item_unit': 'Μονάδα (π.χ. /ώρα)', 'profile.card.pricelist.save_group': 'Αποθήκευση ομάδας', 'profile.card.pricelist.save_item': 'Αποθήκευση', 'profile.card.pricelist.delete_group': 'Διαγραφή ομάδας', 'profile.card.pricelist.delete_item': 'Διαγραφή', 'profile.card.active': 'Ενεργή', 'profile.card.review_pending': 'Σε αναμονή έγκρισης', 'profile.card.review_pending_hint': 'Η κάρτα σας ελέγχεται τώρα από τη διαχείριση.', 'profile.card.review_submitted': 'Η κάρτα στάλθηκε για έλεγχο', 'profile.card.review_approved': 'Η κάρτα εγκρίθηκε', 'profile.card.review_approved_hint': 'Η κάρτα σας εμφανίζεται τώρα στις προσφορές.', 'profile.card.review_rejected': 'Η κάρτα απορρίφθηκε', 'profile.card.review_rejected_hint': 'Η κάρτα σας δεν εγκρίθηκε. Διορθώστε την και στείλτε την ξανά.', 'profile.card.submit_review': 'Αποστολή για έλεγχο', 'profile.card.withdraw_review': 'Ανάκληση αίτησης', 'profile.card.unpublish': 'Αφαίρεση από δημοσίευση', 'profile.card.save': 'Αποθήκευση', 'profile.card.saved': 'Αποθηκεύτηκε', 'profile.card.delete': 'Διαγραφή', 'profile.card.skill.add': 'Προσθήκη δεξιότητας', 'profile.card.photo.add': 'Προσθήκη φωτογραφίας', 'profile.card.photo.uploading': 'Μεταφόρτωση...', 'profile.card.photo.empty': 'Δεν υπάρχουν φωτογραφίες', 'profile.card.item.title': 'Τίτλος', 'profile.card.item.desc': 'Περιγραφή', 'profile.card.item.save': 'Αποθήκευση', 'profile.card.item.cancel': 'Ακύρωση', 'profile.card.item.edit': 'Επεξεργασία', 'profile.card.description': 'Περιγραφή κάρτας', 'profile.card.desc_auto_translate': 'Κατά την αποθήκευση θα μεταφραστεί αυτόματα σε άλλες γλώσσες', 'profile.card.desc_translated': 'Υπάρχουν μεταφράσεις:', 'profile.upgrade.cards_limit': 'Όριο χαρτοφυλακίων εξαντλήθηκε', 'profile.upgrade.plan': 'Τρέχον πλάνο:', 'profile.upgrade.contact': 'Επικοινωνήστε με τον διαχειριστή για αλλαγή πλάνου', 'profile.upgrade.ok': 'Εντάξει', 'profile.plan.title': 'Πλάνο συνδρομής', 'profile.balance': 'Υπόλοιπο', 'profile.balance.topup': 'Αναπλήρωση υπολοίπου', 'profile.balance.topup.title': 'Αναπλήρωση υπολοίπου', 'profile.balance.topup.amount': 'Ποσό (σε EUR)', 'profile.balance.topup.hint': 'Επιλέξτε ποσό ή εισαγάγετε μανούαλα', 'profile.balance.topup.submit': 'Πληρωμή', 'profile.balance.topup.loading': 'Ρεδιρεκτάρισμα...', 'profile.balance.topup.error': 'Σφάλμα μετάβασης στην πληρωμή. Προσπαθήστε ξανά.', 'payment.success.title': 'Πληρωμή επιτυχής!', 'payment.success.desc': 'Το υπόλοιπό σας ενημερώθηκε.', 'payment.cancelled.title': 'Ακύρωση πληρωμής', 'payment.cancelled.desc': 'Η πληρωμή ακυρώθηκε. Κανένα χρήμα δεν χρεώθηκε.', 'payment.pending.title': 'Σε εξέλιξη...', 'payment.pending.desc': 'Επεξεργαζόμαστε την πληρωμή σας.', 'payment.back_to_profile': 'Επιστροφή στο προφίλ', 'profile.plan.basic': 'Βασικό (δωρεάν)', 'profile.plan.contact_upgrade': 'Επικοινωνήστε με τον διαχειριστή για αναβάθμιση', 'profile.plan.cards_up_to': 'Χαρτοφυλάκια: έως', 'profile.plan.cards_unlimited': 'Χαρτοφυλάκια: απεριόριστα', 'profile.plan.tasks_up_to': 'Εργασίες: έως', 'profile.plan.offers_up_to': 'Προσφορές: έως', 'profile.plan.valid_until': 'Ισχύει έως', 'profile.plan.no_expiry': 'Δεν λήγει', // Create task 'create.error': 'Σφάλμα κατά τη δημοσίευση', // Tasks list extras 'tasks.category.general': 'Γενικά', 'tasks.budget.range': 'Εύρος:', 'tasks.budget.from': 'από', 'tasks.budget.to': 'έως', 'tasks.filter.reset': 'Εκκαθάριση φίλτρων', 'tasks.load_more': 'Φόρτωση ακόμα', 'tasks.showing': 'Αποτελέσματα:', 'tasks.field.budget': 'Προϋπολογισμός, €', // Admin 'admin.title': 'Πίνακας Διαχείρισης', 'admin.tab.stats': 'Στατιστικά', 'admin.tab.users': 'Χρήστες', 'admin.tab.tasks': 'Εργασίες', 'admin.tab.reports': 'Αναφορές', 'admin.tab.moderation': 'Μονάδα ελέγχου', 'admin.stats.users': 'Χρήστες', 'admin.stats.tasks': 'Εργασίες', 'admin.stats.offers': 'Προσφορές', 'admin.stats.reviews': 'Αξιολογήσεις', 'admin.tasks.by_status': 'Εργασίες ανά κατάσταση', 'admin.col.user': 'Χρήστης', 'admin.col.email': 'Email', 'admin.col.role': 'Ρόλος', 'admin.col.registered': 'Εγγραφή', 'admin.col.status': 'Κατάσταση', 'admin.col.title': 'Τίτλος', 'admin.col.budget': 'Προϋπολογισμός', 'admin.col.created': 'Δημιουργία', 'admin.users.active': 'Ενεργός', 'admin.users.inactive': 'Ανενεργός', 'admin.users.deactivate': 'Απενεργοποίηση', 'admin.users.activate': 'Ενεργοποίηση', 'admin.tasks.cancel': 'Ακύρωση', 'admin.reports.none': 'Δεν υπάρχουν αναφορές', 'admin.moderation.none': 'Δεν βρέθηκαν προσφορές για έλεγχο', 'admin.moderation.pending': 'Σε αναμονή', 'admin.moderation.active': 'Ενεργό', 'admin.moderation.approve': 'Έγκριση', 'admin.moderation.block': 'Μπλοκάρισμα', 'admin.moderation.pending_title': 'Προσφορές προς έγκριση', 'admin.moderation.active_title': 'Ενεργές προσφορές', 'admin.moderation.pending_count': 'Σε αναμονή', 'admin.moderation.active_count': 'Ενεργές', 'admin.moderation.pending_hint': 'Νέες προσφορές που περιμένουν έγκριση', 'admin.moderation.active_hint': 'Ενεργές προσφορές που μπορείτε να μπλοκάρετε', 'admin.moderation.pending_empty': 'Δεν υπάρχουν νέες προσφορές προς έγκριση', 'admin.moderation.active_empty': 'Δεν βρέθηκαν ενεργές προσφορές', 'admin.reports.reviewed': 'Αναθεωρήθηκε', 'admin.reports.dismiss': 'Απόρριψη', 'admin.pagination.total': 'Σύνολο', 'admin.users.role.change': 'Αλλαγή ρόλου', 'admin.users.search.placeholder': 'Αναζήτηση ονόματος ή email...', 'admin.tasks.delete': 'Διαγραφή', 'admin.tasks.delete.confirm': 'Διαγραφή αυτής της εργασίας μόνιμα;', 'admin.tasks.search.placeholder': 'Αναζήτηση τίτλου...', 'admin.col.customer': 'Πελάτης', 'admin.col.reporter': 'Καταγγέλλων', 'admin.col.target': 'Στόχος', 'admin.filter.all_roles': 'Όλοι οι ρόλοι', 'admin.filter.all_statuses': 'Όλες οι καταστάσεις', 'admin.reports.target.task': 'Εργασία', 'admin.reports.target.user': 'Χρήστης', 'admin.tab.categories': 'Κατηγορίες', 'admin.tab.locations': 'Πόλεις & Περιοχές', 'admin.tab.logs': 'Αρχεία', 'admin.tab.plans': 'Πακέτα', 'admin.tab.settings': 'Ρυθμίσεις', 'admin.logs.subtab.ai': 'AI Logs', 'admin.logs.subtab.activity': 'Δραστηριότητα', 'admin.logs.subtab.mail': 'Mail', 'admin.logs.subtab.notifications': 'Ειδοποιήσεις', 'admin.notif_logs.type': 'Τύπος', 'admin.notif_logs.title': 'Τίτλος', 'admin.notif_logs.read': 'Διαβασμένο', 'admin.notif_logs.empty': 'Δεν υπάρχουν αρχεία ειδοποιήσεων', 'admin.stats.notif_chart_title': 'Ειδοποιήσεις ανά ημέρα', 'admin.stats.notif_label': 'Ειδοποιήσεις', 'admin.stats.mail_chart_title': 'Emails ανά ημέρα', 'admin.stats.mail_label': 'Emails', 'admin.filter.all': 'Όλα', 'admin.stats.specialists': 'Βοηθοί', 'admin.col.plan': 'Πακέτο', 'admin.back_home': 'Αρχική', 'admin.plans.title': 'Πακέτα συνδρομής', 'admin.plans.add': '+ Νέο πακέτο', 'admin.plans.empty': 'Δεν υπάρχουν πακέτα', 'admin.plans.form.new': 'Νέο πακέτο', 'admin.plans.form.edit': 'Επεξεργασία πακέτου', 'admin.plans.form.name': 'Όνομα', 'admin.plans.form.price': 'Τιμή (EUR)', 'admin.plans.form.old_price': 'Παλιά τιμή (EUR, προαιρετικό)', 'admin.plans.form.max_offers': 'Μέγ. προσφορές (κενό = χωρίς όριο)', 'admin.plans.form.max_cards': 'Μέγ. προσφορές (κενό = χωρίς όριο)', 'admin.plans.form.duration_days': 'Διάρκεια (ημέρες, κενό = χωρίς λήξη)', 'admin.plans.form.description': 'Περιγραφή', 'admin.plans.form.features': 'Δυνατότητες (μία ανά γραμμή)', 'admin.plans.form.notify': 'Ειδοποιήσεις νέων εργασιών', 'admin.plans.form.default': 'Προεπιλογή', 'admin.plans.form.active': 'Ενεργό', 'admin.plans.form.order': 'Σειρά', 'admin.plans.form.role': 'Ρόλος', 'admin.plans.form.tier': 'Επίπεδο', 'admin.plans.form.role.customer': 'Πελάτης', 'admin.plans.form.role.specialist': 'Βοηθός', 'admin.plans.form.tier.free': 'Δωρεάν', 'admin.plans.form.tier.pro': 'Pro', 'admin.plans.form.tier.ultimate': 'Ultimate', 'admin.plans.form.section.limits': 'Όρια (κενό = χωρίς όριο)', 'admin.plans.form.max_messages_day': 'Μέγ. μηνύματα/ημέρα', 'admin.plans.form.max_orders_day': 'Μέγ. παραγγελίες/ημέρα', 'admin.plans.form.max_skills': 'Μέγ. δεξιότητες', 'admin.plans.form.max_profiles': 'Μέγ. προφίλ', 'admin.plans.form.max_portfolio': 'Μέγ. στοιχεία χαρτοφυλακίου', 'admin.plans.form.section.boost': 'Πολλαπλασιαστές & Ενίσχυση', 'admin.plans.form.search_boost': 'Ενίσχυση αναζήτησης', 'admin.plans.form.offers_multiplier': 'Πολλαπλασιαστής προσφορών', 'admin.plans.form.section.contact': 'Δικαιώματα επικοινωνίας', 'admin.plans.form.can_contact_free': 'Επικοινωνία με δωρεάν χρήστες', 'admin.plans.form.can_contact_pro': 'Επικοινωνία με Pro χρήστες', 'admin.plans.form.can_contact_all': 'Επικοινωνία με όλους', 'admin.plans.form.can_show_contact': 'Εμφάνιση στοιχείων επικοινωνίας', 'admin.plans.form.can_view_phone': 'Προβολή τηλεφώνου', 'admin.plans.form.section.features': 'Λειτουργίες', 'admin.plans.form.upload_video': 'Μεταφόρτωση βίντεο', 'admin.plans.form.favorites': 'Αγαπημένα', 'admin.plans.form.google_calendar': 'Google Calendar', 'admin.plans.form.verified_badge': 'Σήμα επαλήθευσης', 'admin.plans.form.highlighted_reviews': 'Προβεβλημένες κριτικές', 'admin.plans.form.personal_site': 'Προσωπική σελίδα', 'admin.plans.form.can_help_now': 'Κατάσταση «Μπορώ να βοηθήσω»', 'admin.plans.form.need_help': 'Κατάσταση «Χρειάζομαι βοήθεια»', 'admin.plans.form.auto_response': 'Αυτόματη απάντηση', 'admin.plans.form.auto_match': 'Αυτόματη αντιστοίχιση', 'admin.plans.form.price_list': 'Τιμοκατάλογος', 'admin.plans.form.instant_dispatch_free': 'Άμεση αποστολή (δωρεάν)', 'admin.plans.form.instant_dispatch_pro': 'Άμεση αποστολή (Pro)', 'admin.plans.badge.default': 'Προεπιλογή', 'admin.plans.badge.inactive': 'Ανενεργό', 'admin.plans.make_default': 'Ορισμός ως προεπιλογή', 'admin.plans.tasks': 'Εργασίες', 'admin.plans.offers': 'Προσφορές', 'admin.plans.cards': 'Προσφορές', 'admin.plans.notify_tasks': 'Ειδοποιήσεις εργασιών', 'admin.plans.delete.confirm': 'Διαγραφή πακέτου', 'admin.activity.title': 'Αρχείο δραστηριότητας', 'admin.activity.event': 'Γεγονός', 'admin.activity.all_events': 'Όλα τα γεγονότα', 'admin.activity.from': 'Από', 'admin.activity.to': 'Έως', 'admin.activity.reset': 'Επαναφορά', 'admin.activity.total': 'Σύνολο', 'admin.activity.empty': 'Δεν υπάρχουν εγγραφές', 'admin.mail.event': 'Συμβάν email', 'admin.mail.all_events': 'Όλα τα email συμβάντα', 'admin.mail.from': 'Από', 'admin.mail.to': 'Έως', 'admin.mail.reset': 'Επαναφορά', 'admin.mail.total': 'Σύνολο', 'admin.mail.empty': 'Δεν υπάρχουν email logs', 'admin.mail.recipient': 'Παραλήπτης', 'admin.mail.provider': 'Πάροχος', 'admin.mail.details': 'Λεπτομέρειες', 'admin.mail.status': 'Κατάσταση', 'admin.mail.success': 'Επιτυχία', 'admin.mail.failed': 'Σφάλμα', 'admin.event.email_sent': 'Email sent', 'admin.event.email_failed': 'Email failed', 'admin.event.email_dev': 'Email DEV fallback', 'admin.event.admin_email_test_sent': 'Admin test email sent', 'admin.event.admin_email_test_failed': 'Admin test email failed', 'admin.logs.empty': 'Δεν υπάρχουν εγγραφές', 'admin.logs.date': 'Ημερομηνία', 'admin.logs.provider': 'Πάροχος', 'admin.logs.model': 'Μοντέλο', 'admin.logs.action': 'Ενέργεια', 'admin.logs.langs': 'Γλώσσες', 'admin.logs.in': 'Είσοδος', 'admin.logs.out': 'Έξοδος', 'admin.logs.total': 'Σύνολο', 'admin.logs.ms': 'ms', 'admin.logs.status': 'Κατάσταση', 'admin.stats.activity_30d': 'Δραστηριότητα 30 ημερών', 'admin.stats.tasks_label': 'Εργασίες', 'admin.stats.users_label': 'Χρήστες', 'admin.stats.specialists_label': 'Βοηθοί', 'admin.stats.tokens_title': 'Χρήση tokens (ανά μήνα)', 'admin.stats.tokens_out': 'Εξερχόμενα', 'admin.stats.tokens_in': 'Εισερχόμενα', 'admin.stats.tokens_out_label': 'Εξερχόμενα tokens', 'admin.stats.tokens_in_label': 'Εισερχόμενα tokens', 'admin.stats.cost_label': 'Κόστος (USD)', 'admin.stats.tasks_by_status': 'Εργασίες ανά κατάσταση', 'admin.task_status.open': 'Ανοιχτές', 'admin.task_status.in_progress': 'Σε εξέλιξη', 'admin.task_status.completed': 'Ολοκληρωμένες', 'admin.task_status.cancelled': 'Ακυρωμένες', 'admin.task_status.draft': 'Προσχέδια', 'admin.settings.tab.general': 'Γενικά', 'admin.settings.tab.smtp': 'E-Mail', 'admin.settings.tab.notifications': 'Ειδοποιήσεις', 'admin.settings.tab.payment': 'Πληρωμή', 'admin.settings.tab.referral': 'Παραπομπές', 'admin.settings.tab.seo': 'SEO', 'admin.settings.tab.socials': 'Κοινωνικά δίκτυα', 'admin.settings.tab.telegram': 'Telegram Bot', 'admin.settings.telegram.title': 'Ρυθμίσεις Telegram Bot', 'admin.settings.telegram.help': 'Δημιουργήστε bot μέσω @BotFather. Για chat ID χρησιμοποιήστε @userinfobot.', 'admin.settings.telegram.bot_token': 'Bot Token', 'admin.settings.telegram.admin_chat_id': 'Admin Chat ID', 'admin.settings.telegram.admin_chat_hint': 'Γράψτε /start στο bot σας, μετά στείλτε μήνυμα μέσω @userinfobot για να λάβετε το chat ID', 'admin.settings.telegram.channel_id': 'Channel ID', 'admin.settings.telegram.channels_title': 'Κανάλια ανά γλώσσα', 'admin.settings.telegram.channel_hint': 'Αναγνωριστικό δημόσιου καναλιού ή @όνομα καναλιού', 'admin.settings.telegram.notify_registrations': 'Ειδοποίηση νέων εγγραφών', 'admin.settings.telegram.notify_registrations_hint': 'Αποστολή μηνύματος στον admin κατά την εγγραφή νέου χρήστη', 'admin.settings.telegram.post_new_tasks': 'Δημοσίευση νέων εργασιών', 'admin.settings.telegram.post_new_tasks_hint': 'Αυτόματη δημοσίευση νέων εργασιών στο κανάλι', 'admin.settings.telegram.test': 'Δοκιμή', 'admin.settings.telegram.verify': 'Επαλήθευση', 'admin.settings.telegram.test_ok': 'Η σύνδεση λειτουργεί', 'admin.settings.telegram.test_fail': 'Σφάλμα σύνδεσης', 'admin.settings.socials.title': 'Σύνδεσμοι κοινωνικών δικτύων', 'admin.settings.socials.hint': 'Συμπληρωμένες εγγραφές εμφανίζονται στο υπόγειο', 'admin.settings.seo.maintenance_label': 'Λειτουργία συντήρησης', 'admin.settings.seo.maintenance_hint': 'Εμφάνιση σελίδας συντήρησης σε όλους τους επισκέπτες', 'admin.settings.seo.indexing_label': 'Ευρετηρίαση από μηχανές αναζήτησης', 'admin.settings.seo.indexing_hint': 'Επιτρέπει στις μηχανές αναζήτησης να ευρετηριάσουν τον ιστότοπο', 'admin.settings.seo.head_scripts_label': 'Scripts στο (JS)', 'admin.settings.seo.head_scripts_hint': 'Εκτελείται σε κάθε σελίδα (Google Tag Manager, analytics κ.λπ.)', 'admin.settings.seo.site_title_label': 'Τίτλος ιστότοπου', 'admin.settings.seo.site_description_label': 'Περιγραφή ιστότοπου (meta description)', 'admin.settings.referral.title': 'Πρόγραμμα παραπομπών', 'admin.settings.referral.hint': 'Επιβράβευσε χρήστες που φέρνουν νέους εγγεγραμμένους.', 'admin.settings.referral.enabled_label': 'Ενεργό', 'admin.settings.referral.enabled_hint': 'Ενεργοποίηση / απενεργοποίηση εφαρμογής ανταμοιβών', 'admin.settings.referral.customer_section': 'Για πελάτες', 'admin.settings.referral.specialist_section': 'Για βοηθούς', 'admin.settings.referral.plan_label': 'Πλάνο ανταμοιβής', 'admin.settings.referral.no_plan': '— χωρίς πλάνο —', 'admin.settings.referral.plan_hint': 'Αυτό το πλάνο θα ανατεθεί στον χρήστη που έφερε νέους. Εάν το τρέχον πλάνο του είναι υψηλότερο, θα προστεθούν μόνο οι μέρες.', 'admin.settings.referral.days_label': 'Ημέρες ανταμοιβής', 'admin.settings.referral.days_hint': 'Αριθμός ημερών που θα προστεθούν στη λήξη του πλάνου.', 'admin.settings.general.title': 'Γενικές ρυθμίσεις', 'admin.settings.general.site_name': 'Όνομα ιστότοπου', 'admin.settings.general.site_url': 'URL ιστότοπου', 'admin.settings.general.contact_email': 'Email επικοινωνίας', 'admin.settings.general.support_phone': 'Τηλέφωνο υποστήριξης', 'admin.settings.smtp.title': 'Ρυθμίσεις SMTP', 'admin.settings.smtp.hint': 'Χρησιμοποιείται για αποστολή ειδοποιήσεων email.', 'admin.settings.smtp.host': 'SMTP Host', 'admin.settings.smtp.port': 'Θύρα', 'admin.settings.smtp.encryption': 'Κρυπτογράφηση', 'admin.settings.smtp.enc.none': 'Χωρίς', 'admin.settings.smtp.enc.tls': 'STARTTLS (θύρα 587)', 'admin.settings.smtp.enc.ssl': 'SSL/TLS (θύρα 465)', 'admin.settings.smtp.username': 'Όνομα χρήστη', 'admin.settings.smtp.password': 'Κωδικός / App Password', 'admin.settings.smtp.from_name': 'Όνομα αποστολέα', 'admin.settings.smtp.from_email': 'Email αποστολέα', 'admin.settings.smtp.test': 'Αποστολή δοκιμαστικού email', 'admin.settings.smtp.sending': 'Αποστολή...', 'admin.settings.payment.hint': 'Τα στοιχεία για ePay Piraeus Bank.', 'admin.settings.env.test': 'Δοκιμαστικό (sandbox)', 'admin.settings.env.prod': 'Παραγωγή', 'admin.settings.env.label': 'Περιβάλλον', 'admin.settings.merchant_id': 'Merchant ID', 'admin.settings.api_user': 'API User', 'admin.settings.api_password': 'API Password', 'admin.settings.confirm_url': 'Confirmation URL (webhook)', 'admin.settings.cancel_url': 'Cancel URL', 'admin.settings.active': 'Ενεργό', 'admin.settings.saving': 'Αποθήκευση...', 'admin.settings.saved': '✓ Αποθηκεύτηκε', 'admin.notif.vars_hint': 'Διαθέσιμες μεταβλητές στα πρότυπα', 'admin.notif.tmpl.not_set': 'Πρότυπο δεν έχει οριστεί', 'admin.notif.tmpl.subject_label': 'Θέμα email', 'admin.notif.tmpl.body_label': 'Κείμενο email (HTML)', 'admin.notif.tmpl.save': 'Αποθήκευση', 'admin.notif.tmpl.close': 'Κλείσιμο', 'admin.notif.tmpl.translate': 'Αυτόματη μετάφραση', 'admin.notif.tmpl.translating': 'Μετάφραση...', 'admin.notif.tmpl.saving': 'Αποθήκευση...', 'admin.notif.email_verification': 'Επαλήθευση email', 'admin.notif.registration_success': 'Επιτυχής εγγραφή', 'admin.notif.password_reset': 'Επαναφορά κωδικού', 'admin.notif.new_offer': 'Νέα προσφορά', 'admin.notif.new_task': 'Νέα εργασία', 'admin.notif.offer_accepted': 'Προσφορά αποδεκτή', 'admin.notif.new_message': 'Νέο μήνυμα', 'admin.notif.offer_declined': 'Απόρριψη προσφοράς', 'admin.notif.offer_other_accepted': 'Επιλέχθηκε άλλος ειδικός', 'admin.notif.task_updated': 'Ενημέρωση εργασίας', 'admin.notif.deadline_reminder': 'Υπενθύμιση προθεσμίας', 'admin.notif.task_archived': 'Αυτόματη απόσυρση εργασίας', 'admin.notif.referral_reward': 'Ανταμοιβή παραπομπής', // Plan lifecycle email templates 'admin.email_template.plan_activated': 'Τιμολόγιο — ενεργοποίηση πλάνου', 'admin.email_template.plan_upgraded': 'Τιμολόγιο — αναβάθμιση πλάνου', 'admin.email_template.plan_downgrade_scheduled': 'Τιμολόγιο — προγραμματισμένη υποβάθμιση', 'admin.email_template.plan_downgrade_applied': 'Τιμολόγιο — εφαρμογή υποβάθμισης', 'admin.email_template.plan_renewal_reminder': 'Τιμολόγιο — υπενθύμιση ανανέωσης', 'admin.email_template.plan_insufficient_funds': 'Τιμολόγιο — ανεπαρκές υπόλοιπο', // Pricing confirm modal 'pricing.confirm.title': 'Επιβεβαίωση επιλογής πλάνου', 'pricing.confirm.plan': 'Πλάνο', 'pricing.confirm.prorated': 'Αναλογική έκπτωση', 'pricing.confirm.effective_price': 'Προς πληρωμή', 'pricing.confirm.your_balance': 'Το υπόλοιπό σας', 'pricing.confirm.downgrade_info': 'Η μετάβαση στο νέο πλάνο θα γίνει αυτόματα μετά τη λήξη της τρέχουσας περιόδου.', 'pricing.confirm.insufficient': 'Ανεπαρκές υπόλοιπο.', 'pricing.confirm.top_up': 'Ανανέωση', 'pricing.confirm.schedule_downgrade': 'Προγραμματισμός μετάβασης', 'pricing.confirm.pay': 'Πληρωμή', 'admin.user_edit.title': 'Επεξεργασία χρήστη', 'admin.user_edit.email': 'Email', 'admin.user_edit.email_verified': 'Διευθυνση email επαληθεύτηκε', 'admin.user_edit.email_not_verified': 'Email δεν έχει επαληθευτεί', 'admin.user_edit.verify_email_btn': 'Χειροκίνητη επαλήθευση', 'admin.user_edit.verify_email_done': 'Email επαληθεύτηκε!', 'admin.user_edit.id': 'ID', 'admin.user_edit.registered': 'Εγγραφή', 'admin.user_edit.last_seen': 'Τελευταία σύνδεση', 'admin.user_edit.lang': 'Γλώσσα', 'admin.user_edit.first_name': 'Όνομα', 'admin.user_edit.last_name': 'Επώνυμο', 'admin.user_edit.phone': 'Τηλέφωνο', 'admin.user_edit.bio': 'Βιογραφικό', 'admin.user_edit.role': 'Ρόλος', 'admin.user_edit.plan': 'Πακέτο', 'admin.user_edit.no_plan': '— Χωρίς πακέτο —', 'admin.user_edit.active': 'Ενεργός λογαριασμός', 'admin.user_edit.published': 'Δημοσιευμένη', 'admin.user_edit.balance': 'Υπόλοιπο (EUR)', 'admin.user_edit.skills': 'Δεξιότητες', 'admin.user_edit.tab.profile': 'Προφίλ', 'admin.user_edit.tab.account': 'Λογαριασμός', 'admin.user_edit.tab.balance': 'Υπόλοιπο', 'admin.user_edit.tab.settings': 'Ρυθμίσεις', 'admin.user_edit.tab.specialist': 'Προσφορές', 'admin.user_edit.tab.site': 'Ιστοσελίδα', 'admin.user_edit.plan_expires': 'Λήξη πλάνου', 'admin.user_edit.interface_lang': 'Γλώσσα διεπαφής', 'admin.user_edit.comm_languages': 'Γλώσσες επικοινωνίας', 'admin.user_edit.personal_site_slug': 'Προσωπική σελίδα', 'admin.user_edit.show_contact_info': 'Εμφάνιση στοιχείων επικοινωνίας', 'admin.user_edit.show_contact_info.hint': 'Ορατό στους πελάτες', 'admin.user_edit.notify_new_tasks': 'Ειδοποίηση για νέες εργασίες', 'admin.user_edit.notify_new_tasks.hint': 'Push και email ειδοποιήσεις', 'admin.user_edit.notif_messages': 'Ειδοποιήσεις μηνυμάτων', 'admin.user_edit.notif_messages.hint': 'Νέα μηνύματα στη συνομιλία', 'admin.user_edit.site_settings': 'Ρυθμίσεις προσωπικής σελίδας', 'admin.user_edit.categories': 'Κατηγορίες υπηρεσιών', 'admin.user_edit.locations': 'Περιοχές εξυπηρέτησης', 'admin.user_edit.skill_placeholder': 'Νέα δεξιότητα...', 'admin.user_edit.add_category': '— Επιλέξτε κατηγορία —', 'admin.user_edit.add_location': '— Επιλέξτε περιοχή —', 'admin.user_edit.specialist_cards': 'Προσφορές ειδικού', 'admin.user_edit.no_cards': 'Δεν βρέθηκαν προσφορές', 'admin.user_edit.card_title': 'Τίτλος προσφοράς', 'admin.user_edit.card_description': 'Περιγραφή', 'admin.balance.topup.btn': 'Αναπλήρωση', 'admin.balance.withdraw.btn': 'Αφαίρεση', 'admin.balance.modal_hint': 'Οι αλλαγές ισχύουν άμεσα και καταγράφονται στο ιστορικό', 'admin.balance.topup.title': 'Αναπλήρωση υπολοίπου', 'admin.balance.topup.amount': 'Ποσό', 'admin.balance.topup.description': 'Σχόλιο', 'admin.balance.topup.description.placeholder': 'Για παράδειγμα: bonus ή χειροκίνητη αναπλήρωση', 'admin.balance.topup.submit': 'Αναπλήρωση υπολοίπου', 'admin.balance.withdraw.title': 'Αφαίρεση υπολοίπου', 'admin.balance.withdraw.amount': 'Ποσό', 'admin.balance.withdraw.description': 'Σχόλιο', 'admin.balance.withdraw.description.placeholder': 'Για παράδειγμα: επιστροφή ή χειροκίνητη χρέωση', 'admin.balance.withdraw.submit': 'Αφαίρεση από το υπόλοιπο', 'admin.user_edit.role.customer': 'Πελάτης', 'admin.user_edit.role.user': 'Χρήστης', 'admin.user_edit.role.specialist': 'Βοηθός', 'admin.user_edit.role.admin': 'Διαχειριστής', 'common.refresh': 'Ανανέωση', 'common.back_home': 'Αρχική', 'admin.loc.hint': 'Διαχείριση πόλεων και συνοικιών', 'admin.loc.add_city': 'Νέα πόλη', 'admin.loc.add_district': 'Προσθήκη συνοικίας', 'admin.loc.new': 'Νέα τοποθεσία', 'admin.loc.edit': 'Επεξεργασία τοποθεσίας', 'admin.loc.district': 'συνοικία', 'admin.loc.empty': 'Δεν υπάρχουν τοποθεσίες', 'admin.loc.delete.confirm': 'Διαγραφή τοποθεσίας; Όλες οι συνοικίες θα διαγραφούν επίσης.', 'admin.cat.add_root': 'Νέα κατηγορία', 'admin.cat.add_sub': 'Υποκατηγορία', 'admin.cat.edit': 'Επεξεργασία', 'admin.cat.delete': 'Διαγραφή', 'admin.cat.delete.confirm': 'Διαγραφή κατηγορίας; Όλες οι υποκατηγορίες θα διαγραφούν επίσης.', 'admin.cat.slug': 'Slug', 'admin.cat.icon': 'Εικονίδιο', 'admin.cat.name_el': 'Ελληνικά', 'admin.cat.name_en': 'Αγγλικά', 'admin.cat.name_ru': 'Ρωσικά', 'admin.cat.name_uk': 'Ουκρανικά', 'admin.cat.active': 'Ενεργή', 'admin.cat.parent': 'Γονική κατηγορία', 'admin.cat.no_parent': 'Κορυφαίο επίπεδο', 'admin.cat.save': 'Αποθήκευση', 'admin.cat.cancel': 'Ακύρωση', 'admin.cat.empty': 'Δεν υπάρχουν κατηγορίες', 'admin.cat.hint': 'Διαχείριση κατηγοριών με πολυεπίπεδη ιεραρχία', 'admin.cat.new': 'Νέα κατηγορία', 'admin.cat.subcategory': 'υποκατηγορία', 'admin.cat.add_child': 'Προσθήκη υποκατηγορίας', 'admin.cat.inactive': 'Ανενεργή', 'admin.event.user_login': 'Σύνδεση', 'admin.event.user_register': 'Εγγραφή', 'admin.event.admin_user_deactivate': 'Αποκλεισμός χρήστη', 'admin.event.admin_user_activate': 'Ενεργοποίηση χρήστη', 'admin.event.admin_user_role_changed': 'Αλλαγή ρόλου', 'admin.event.admin_task_cancelled': 'Ακύρωση εργασίας', 'admin.event.admin_task_deleted': 'Διαγραφή εργασίας', 'admin.event.admin_report_reviewed': 'Αναφορά εξετάστηκε', 'admin.event.admin_report_dismissed': 'Αναφορά απορρίφθηκε', 'admin.event.task_created': 'Δημιουργία εργασίας', 'user.online': 'Σε σύνδεση', 'user.seen_minutes': 'ήταν εδώ πριν {n} λεπτά', 'user.seen_hours': 'ήταν εδώ πριν {n} ώρες', 'user.seen_yesterday': 'ήταν εδώ χθες', 'user.seen_days': 'ήταν εδώ πριν {n} μέρες', // Specialists 'specialists.title': 'Προσφορές', 'specialists.search': 'Αναζήτηση ειδικού...', 'specialists.search.btn': 'Αναζήτηση', 'specialists.empty': 'Δεν βρέθηκαν ειδικοί', 'specialists.no_bio': 'Χωρίς περιγραφή', 'specialists.view': 'Προβολή προφίλ', 'specialists.reviews': 'αξιολογήσεις', 'specialist.favorite': 'Προσθήκη στα αγαπημένα', 'specialist.unfavorite': 'Αφαίρεση από αγαπημένα', 'specialist.site_link': 'Προσωπικό site', 'favorites.specialists.title': 'Αγαπημένοι ειδικοί', 'favorites.specialists.empty': 'Δεν έχετε αγαπημένους ειδικούς', 'nav.favorites': 'Αγαπημένα', 'nav.schedule': 'Πρόγραμμα', 'nav.find_tasks': 'Αναζήτηση εργασιών', 'schedule.title': 'Το πρόγραμμά μου', 'schedule.subtitle': 'Σημειώστε τις ημέρες που είστε ελεύθεροι ή απασχολημένοι — οι πελάτες θα δουν τη διαθεσιμότητά σας', 'schedule.available': 'Ελεύθερος', 'schedule.busy': 'Απασχολημένος', 'schedule.unset': 'Μη ορισμένο', 'schedule.click_hint': '← κλικ για εναλλαγή κατάστασης', 'schedule.range_mode': 'Επιλογή εύρους', 'schedule.range_from': 'Από {date} — επιλέξτε τελική ημερομηνία', 'schedule.click_to_set': 'Κλικ για ορισμό', 'schedule.free': 'ελεύθερα', 'schedule.busy_count': 'απασχολημένα', 'schedule.free_days': 'ελεύθερες ημέρες', 'schedule.googleCalendar': 'Google Calendar', 'schedule.connectGoogle': 'Σύνδεση με Google Calendar', 'schedule.disconnectGoogle': 'Αποσύνδεση', 'schedule.connectedAs': 'Συνδεδεμένο ως', 'schedule.importFromGoogle': 'Συγχρονισμός από Google', 'schedule.gcalConnected': '✓ Google Calendar συνδέθηκε', 'schedule.gcalError': 'Σφάλμα σύνδεσης Google Calendar', 'schedule.gcalImportDone': 'Εισήχθησαν {n} ημερ. από Google Calendar', 'schedule.gcalAutoSyncNote': 'Οι αλλαγές αποστέλλονται αυτόματα στο Google Calendar', 'schedule.gcalConnectDesc': 'Συνδέστε το Google Calendar για αυτόματο συγχρονισμό', 'schedule.gcalDisconnectConfirm': 'Αποσύνδεση Google Calendar;', 'find_tasks.title': 'Αναζήτηση εργασιών', 'find_tasks.for_me': 'Για μένα', 'find_tasks.all': 'Όλες οι εργασίες', 'find_tasks.by_category': 'Ανά κατηγορία', 'find_tasks.list': 'Λίστα', 'find_tasks.already_offered': 'Προσφορά υποβλήθηκε', 'find_tasks.offer_now': 'Υποβολή προσφοράς', 'find_tasks.empty_for_me': 'Δεν βρέθηκαν εργασίες στις κατηγορίες σας', 'find_tasks.banner_hint': 'Βρείτε εργασίες που ταιριάζουν με το χαρτοφυλάκιό σας', 'find_tasks.no_cards': 'Δημιουργήστε ένα χαρτοφυλάκιο ειδικού για να δείτε εργασίες για εσάς', 'find_tasks.add_card': 'Δημιουργία χαρτοφυλακίου', 'find_tasks.search': 'Αναζήτηση εργασιών...', 'find_tasks.tasks_count': 'εργασίες', // Footer 'footer.tagline': 'Η πλατφόρμα εργασιών για την Ελλάδα', 'footer.rights': 'Όλα τα δικαιώματα διατηρούνται.', 'nav.privacy': 'Πολιτική απορρήτου', 'nav.delete_account': 'Διαγραφή λογαριασμού', 'delete_account.title': 'Αίτηση διαγραφής λογαριασμού', 'delete_account.subtitle': 'Αφού επαληθεύσουμε την αίτησή σας, θα διαγράψουμε μόνιμα τον λογαριασμό και τα δεδομένα σας εντός 30 ημερών.', 'delete_account.warning': 'Αυτή η ενέργεια δεν μπορεί να αναιρεθεί. Όλα τα δεδομένα σας θα διαγραφούν μόνιμα.', 'delete_account.reason_label': 'Αιτία (προαιρετικό)', 'delete_account.reason_placeholder': 'Πείτε μας γιατί θέλετε να διαγράψετε τον λογαριασμό σας...', 'delete_account.confirm_label': 'Επιβεβαιώνω ότι θέλω να διαγράψω μόνιμα τον λογαριασμό μου', 'delete_account.submit': 'Υποβολή αίτησης', 'delete_account.submitting': 'Αποστολή...', 'delete_account.success_title': 'Η αίτησή σας ελήφθη', 'delete_account.success_body': 'Θα επεξεργαστούμε την αίτησή σας εντός 30 ημερών και θα σας ειδοποιήσουμε μέσω email.', 'delete_account.login_required': 'Πρέπει να συνδεθείτε για να υποβάλετε αίτηση διαγραφής.', 'delete_account.login_btn': 'Σύνδεση', // App download section 'app.download_title': 'Κατεβάστε την εφαρμογή CanHelp', 'app.download_desc': 'Όλο το CanHelp — πάντα μαζί σας. Διαθέσιμο για Android και iOS.', // Nav 'nav.pricing': 'Τιμές', // Pricing page 'pricing.title': 'Τιμολόγηση', 'pricing.subtitle': 'Επιλέξτε το κατάλληλο πρόγραμμα', 'pricing.role.customer': 'Πελάτης', 'pricing.role.specialist': 'Ειδικός', 'pricing.free': 'Δωρεάν', 'pricing.per_month': 'μήνα', 'pricing.duration': 'Διάρκεια', 'pricing.days': 'ημ.', 'pricing.current_plan': 'Το πρόγραμμά σας', 'pricing.popular': 'Δημοφιλές', 'pricing.choose': 'Επιλογή', 'pricing.your_plan': 'Ενεργό πρόγραμμα', 'pricing.free_default': 'Προεπιλογή', 'pricing.compare': 'Σύγκριση λειτουργιών', 'pricing.feature': 'Λειτουργία', 'pricing.faq_note': 'Η πληρωμή γίνεται από το υπόλοιπο CanHelp. Ανατροφοδότηση διαθέσιμη στην Πληρωμή.', 'pricing.feat.messages': 'Μηνύματα / ημέρα', 'pricing.feat.orders': 'Παραγγελίες / ημέρα', 'pricing.feat.contact_all': 'Επικοινωνία με όλους', 'pricing.feat.view_phone': 'Εμφάνιση τηλεφώνου', 'pricing.feat.show_contact': 'Εμφάνιση στοιχείων επαφής', 'pricing.feat.favorites': 'Αγαπημένα', 'pricing.feat.verified_badge': 'Επαληθευμένο badge', 'pricing.feat.google_calendar': 'Google Calendar', 'pricing.feat.personal_site': 'Προσωπικό site', 'pricing.feat.auto_response': 'Αυτόματη απάντηση', 'pricing.feat.auto_match': 'Αυτόματη αντιστοίχιση', 'pricing.feat.highlighted_reviews': 'Επισημασμένες αξιολογήσεις', 'pricing.feat.portfolio': 'Στοιχεία προσφοράς', 'pricing.feat.cards': 'Αριθμός προσφορών', 'pricing.feat.notify_tasks': 'Ειδοποιήσεις νέων εργασιών', 'pricing.feat.video': 'Βίντεο στην προσφορά', // Upgrade prompt 'upgrade.available_in': 'Διαθέσιμο στο', 'upgrade.cta': 'Αναβάθμιση', // Dashboard plan block 'dashboard.plan.title': 'Το πρόγραμμά μου', 'dashboard.plan.expires': 'Λήγει σε {n} ημέρες', 'dashboard.plan.upgrade': 'Αναβάθμιση προγράμματος', 'dashboard.plan.no_plan': 'Δωρεάν πρόγραμμα', 'dashboard.plan.messages': 'Μηνύματα σήμερα', 'dashboard.plan.orders': 'Παραγγελίες σήμερα', 'dashboard.plan.limits': 'Ημερήσια όρια', 'dashboard.plan.features': 'Λειτουργίες', 'dashboard.plan.stats': 'Στατιστικά', 'dashboard.stats.cards': 'Χαρτοφυλάκια', 'dashboard.stats.maxCards': 'Μέγ. χαρτοφυλάκια', 'dashboard.stats.portfolioItems': 'Στοιχεία portfolio', 'dashboard.stats.maxPortfolioItems': 'Μέγ. στοιχεία', 'dashboard.stats.activeOffers': 'Ενεργές προσφορές', 'dashboard.stats.reviewsReceived': 'Αξιολογήσεις', 'dashboard.stats.activeTasks': 'Ενεργές εργασίες', 'dashboard.stats.completedTasks': 'Ολοκληρωμένες', 'status.can_help_now': 'Είμαι διαθέσιμος τώρα', 'status.need_help': 'Χρειάζομαι βοήθεια', 'status.active': 'Ενεργό', 'status.toggle_on': 'Ενεργοποίηση', 'status.toggle_off': 'Απενεργοποίηση', // FOMO 'fomo.missed_orders': 'Χάσατε {n} παραγγελίες', 'fomo.missed_value': 'Αξία €{v}', 'fomo.upgrade_hint': 'Αναβαθμίστε για να λαμβάνετε περισσότερες παραγγελίες', 'fomo.conversion': 'Μετατροπές εργασιών', 'fomo.active': 'Ενεργές', 'fomo.with_offers': 'Με προσφορές', 'fomo.completed': 'Ολοκληρωμένες', 'fomo.already_offered': '{n} ειδικοί έχουν ήδη απαντήσει', 'fomo.specialist_missed': 'Χάσατε {n} παραγγελίες', 'fomo.top_categories': 'Κατηγορίες', 'fomo.offers_received': 'προσφορές ελήφθησαν', 'fomo.avg_offers': 'Μέσο {n}/εργασία', 'fomo.completion_rate': 'ολοκληρωμένες', // Task auto-match 'task.auto_match': 'Αυτόματη αντιστοίχιση', 'task.auto_match_results': 'Κορυφαίοι ειδικοί', 'task.no_offer_yet': 'Δεν έχετε στείλει προσφορά ακόμα', 'task.make_offer': 'Αποστολή προσφοράς', 'auto_response.title': 'Αυτόματη Απάντηση', 'auto_response.enabled': 'Ενεργοποίηση αυτόματης απάντησης', 'auto_response.min_budget': 'Ελάχ. προϋπολογισμός', 'auto_response.max_budget': 'Μέγ. προϋπολογισμός', 'auto_response.default_price': 'Προεπιλεγμένη τιμή', 'auto_response.default_message': 'Προεπιλεγμένο μήνυμα', 'auto_response.max_per_day': 'Μέγ. αυτόματες προσφορές/ημέρα', 'auto_response.save': 'Αποθήκευση', 'auto_response.saved': 'Αποθηκεύτηκε', 'auto_response.categories': 'Κατηγορίες', 'auto_response.locations': 'Τοποθεσίες', // Personal site 'profile.personal_site': 'Προσωπικό Site', 'profile.site_slug': 'Slug URL', 'profile.site_slug_hint': 'Μόνο λατινικοί χαρακτήρες, αριθμοί, - και _', 'profile.site_open': 'Άνοιγμα site', 'profile.site_preview': 'Το site σας', 'profile.show_contact': 'Εμφάνιση στοιχείων επαφής', 'profile.show_contact_hint': 'Πελάτες με Pro/Ultimate πρόγραμμα θα βλέπουν το τηλέφωνό σας', // Google Calendar plan gate 'gcal.upgrade_required': 'Το Google Calendar απαιτεί Pro ή Ultimate πρόγραμμα', // Chat limits 'chat.limit_warning': 'Απομένουν {n} μηνύματα σήμερα', 'chat.limit_reached': 'Εξαντλήθηκαν τα μηνύματα. Αναβαθμίστε το πρόγραμμά σας', 'chat.upgrade': 'Αναβάθμιση', // Site page 'site.member_since': 'Μαζί μας από', 'site.rating': 'Βαθμολογία', 'site.completed_tasks': 'Ολοκληρώθηκαν', 'site.languages': 'Γλώσσες', 'site.photos': 'φωτ.', 'site.contact_form': 'Επικοινωνία', 'site.contact_sent': 'Το μήνυμα στάλθηκε!', 'site.contact_sent_desc': 'Ο ειδικός θα επικοινωνήσει μαζί σας σύντομα', 'site.contact_name': 'Όνομα', 'site.contact_name_ph': 'Το όνομά σας', 'site.contact_email_ph': 'your@email.com', 'site.contact_message': 'Μήνυμα', 'site.contact_message_ph': 'Περιγράψτε την εργασία σας...', 'site.contact_send': 'Αποστολή', 'site.share': 'Κοινοποίηση', 'site.speaks_languages': 'Μιλάει', 'site.message_sent': 'Το μήνυμα εστάλη!', 'site.message_sent_desc': 'Ο ειδικός θα το λάβει στη συνομιλία', 'site.message_placeholder': 'Γράψτε το μήνυμά σας...', 'site.write_to_chat': 'Γράψτε στο chat', 'site.auth_required_title': 'Απαιτείται σύνδεση', 'site.auth_required_desc': 'Για να γράψετε στο chat, χρειάζεται να συνδεθείτε στο λογαριασμό σας.', 'site.auth_login_btn': 'Σύνδεση', 'site.auth_contact_form_btn': 'Επικοινωνία μέσω φόρμας', 'specialist.services': 'Υπηρεσίες', 'portfolio.title': 'Χαρτοφυλάκιο', 'common.not_found': 'Η σελίδα δεν βρέθηκε', 'common.anonymous': 'Ανώνυμα', 'specialist_setup.page_title': 'Ρύθμιση προφίλ ειδικού', 'specialist_setup.step_of': 'Βήμα {current} από {total}', 'specialist_setup.next': 'Επόμενο', 'specialist_setup.back': 'Πίσω', 'specialist_setup.skip': 'Παράλειψη', 'specialist_setup.finish': 'Ολοκλήρωση', 'specialist_setup.go_to_profile': 'Μεταβείτε στο προφίλ', 'specialist_setup.browse_tasks': 'Εξερεύνηση εργασιών', 'specialist_setup.step1.title': 'Καλωσήλθατε!', 'specialist_setup.step1.subtitle': 'Ας ρυθμίσουμε το προφίλ σας', 'specialist_setup.step1.desc': 'Ένα πλήρες προφίλ σας βοηθά να βρείτε περισσότερους πελάτες. Ακολουθήστε τα βήματα για να δημιουργήσετε το τέλειο προφίλ ειδικού.', 'specialist_setup.step1.what_next': 'Τι θα κάνουμε:', 'specialist_setup.step1.item1': 'Συμπλήρωση βασικών πληροφοριών', 'specialist_setup.step1.item2': 'Δημιουργία κάρτας υπηρεσίας', 'specialist_setup.step1.item3': 'Προσθήκη δεξιοτήτων και κατηγοριών', 'specialist_setup.step1.item4': 'Επιλογή γεωγραφικής περιοχής', 'specialist_setup.step1.item5': 'Μεταφόρτωση φωτογραφιών χαρτοφυλακίου', 'specialist_setup.step2.title': 'Βασικό προφίλ', 'specialist_setup.step2.subtitle': 'Πείτε μας για σας', 'specialist_setup.step2.bio_label': 'Σχετικά με εμένα', 'specialist_setup.step2.bio_placeholder': 'Περιγράψτε την εμπειρία σας, τις υπηρεσίες που προσφέρετε...', 'specialist_setup.step2.phone_label': 'Τηλέφωνο', 'specialist_setup.step2.phone_placeholder': '+30 6900000000', 'specialist_setup.step2.photo_label': 'Φωτογραφία προφίλ', 'specialist_setup.step2.photo_btn': 'Μεταφόρτωση φωτογραφίας', 'specialist_setup.step2.photo_uploading': 'Μεταφόρτωση...', 'specialist_setup.step2.photo_hint': 'Εμφανίζεται στο προφίλ σας', 'specialist_setup.step3.title': 'Κάρτα υπηρεσίας', 'specialist_setup.step3.subtitle': 'Δημιουργήστε την πρώτη σας κάρτα υπηρεσίας', 'specialist_setup.step3.title_label': 'Τίτλος κάρτας', 'specialist_setup.step3.title_placeholder': 'Π.χ. Υδραυλικός, Ηλεκτρολόγος, Καθαρισμός...', 'specialist_setup.step3.desc_label': 'Περιγραφή', 'specialist_setup.step3.desc_placeholder': 'Περιγράψτε λεπτομερώς τι προσφέρετε, εμπειρία, πλεονεκτήματα...', 'specialist_setup.step3.title_required': 'Απαιτείται τίτλος', 'specialist_setup.step4.title': 'Δεξιότητες & Κατηγορίες', 'specialist_setup.step4.subtitle': 'Προσθέστε δεξιότητες και επιλέξτε κατηγορίες', 'specialist_setup.step4.skills_label': 'Δεξιότητες', 'specialist_setup.step4.skills_placeholder': 'Π.χ. Εγκατάσταση σωληνώσεων...', 'specialist_setup.step4.skills_add': 'Προσθήκη', 'specialist_setup.step4.categories_label': 'Κατηγορίες', 'specialist_setup.step5.title': 'Γεωγραφική περιοχή', 'specialist_setup.step5.subtitle': 'Πού παρέχετε υπηρεσίες;', 'specialist_setup.step5.hint': 'Επιλέξτε πόλεις ή συγκεκριμένες περιοχές', 'specialist_setup.done.title': 'Το προφίλ σας είναι έτοιμο!', 'specialist_setup.done.subtitle': 'Συγχαρητήρια! Το προφίλ σας έχει ρυθμιστεί', 'specialist_setup.done.desc': 'Τώρα μπορείτε να λαμβάνετε παραγγελίες από πελάτες. Αναζητήστε εργασίες που ταιριάζουν με τις δεξιότητές σας.', // Support 'support.title': 'Υποστήριξη', 'support.type.label': 'Τύπος αιτήματος', 'support.type.bug': 'Σφάλμα', 'support.type.suggestion': 'Πρόταση', 'support.type.other': 'Άλλο', 'support.subject': 'Θέμα', 'support.subject.placeholder': 'Σύντομη περιγραφή...', 'support.body': 'Μήνυμα', 'support.body.placeholder': 'Περιγράψτε λεπτομερώς το πρόβλημα ή την πρότασή σας...', 'support.submit': 'Αποστολή', 'support.cancel': 'Ακύρωση', 'support.error': 'Σφάλμα αποστολής. Παρακαλώ δοκιμάστε ξανά.', 'support.sent.title': 'Λάβαμε το αίτημά σας!', 'support.sent.body': 'Θα σας απαντήσουμε στο email σας το συντομότερο δυνατόν.', 'support.sent.close': 'Κλείσιμο', 'admin.tab.support': 'Υποστήριξη', 'admin.tab.backup': 'Αντίγραφα ασφαλείας', 'admin.tab.translations': 'Μεταφράσεις', 'admin.tab.dbcheck': 'Έλεγχος ΒΔ', 'admin.tab.balances': 'Υπόλοιπα', 'admin.tab.push': 'Push', 'admin.tab.referrals': 'Παραπομπές', 'admin.search': 'Αναζήτηση', 'admin.noData': 'Δεν υπάρχουν δεδομένα', 'admin.cat.order': 'Σειρά', 'admin.cat.skills': 'Δεξιότητες', 'admin.plans.form.max_tasks': 'Μέγιστες εργασίες', 'admin.settings.referral.shared_section': 'Κοινές ρυθμίσεις referral', 'admin.settings.seo.title': 'Ρυθμίσεις SEO', 'admin.backup.title': 'Αντίγραφα ασφαλείας', 'admin.backup.tables': 'Πίνακες', 'admin.backup.exportAll': 'Εξαγωγή όλων', 'admin.backup.importAll': 'Εισαγωγή όλων', 'admin.backup.exportTable': 'Εξαγωγή πίνακα', 'admin.backup.importTable': 'Εισαγωγή πίνακα', 'admin.backup.exporting': 'Εξαγωγή...', 'admin.backup.importing': 'Εισαγωγή...', 'admin.backup.exportSuccess': 'Η εξαγωγή ολοκληρώθηκε', 'admin.backup.importSuccess': 'Η εισαγωγή ολοκληρώθηκε', 'admin.backup.autoBackup': 'Αυτόματο backup', 'admin.backup.autoBackupDesc': 'Καθημερινό αυτόματο backup', 'admin.backup.storedBackups': 'Αποθηκευμένα backups', 'admin.backup.noStoredBackups': 'Δεν υπάρχουν αποθηκευμένα backups', 'admin.backup.restore': 'Επαναφορά', 'admin.backup.restoreConfirm': 'Επαναφορά από backup;', 'admin.backup.restoreSuccess': 'Η επαναφορά ολοκληρώθηκε', 'admin.backup.restoring': 'Επαναφορά...', 'admin.backup.date': 'Ημερομηνία', 'admin.backup.size': 'Μέγεθος', 'admin.backup.today': 'Σήμερα', 'admin.backup.yesterday': 'Χθες', 'admin.balance.col.operation': 'Ενέργεια', 'admin.balance.col.amount': 'Ποσό', 'admin.balance.col.result': 'Υπόλοιπο', 'admin.balance.col.description': 'Περιγραφή', 'admin.balance.col.date': 'Ημερομηνία', 'admin.balance.empty': 'Δεν υπάρχουν εγγραφές', 'admin.balance.filter.all': 'Όλες οι ενέργειες', 'admin.balance.filter.user_id': 'Φίλτρο ανά userId', 'admin.balance.kind.topup': 'Αναπλήρωση', 'admin.balance.kind.plan_purchase': 'Χρέωση πλάνου', 'admin.balance.kind.admin_topup': 'Αναπλήρωση από διαχειριστή', 'admin.balance.kind.admin_adjustment': 'Διόρθωση', 'admin.support.search': 'Αναζήτηση', 'admin.support.all_statuses': 'Όλες οι καταστάσεις', 'admin.support.all_types': 'Όλοι οι τύποι', 'admin.support.none': 'Δεν υπάρχουν αιτήματα', 'admin.support.reply': 'Απάντηση', 'admin.support.reply_placeholder': 'Πληκτρολογήστε απάντηση...', 'admin.support.send_reply': 'Αποστολή απάντησης', 'admin.support.cancel': 'Ακύρωση', 'admin.support.close': 'Κλείσιμο', 'admin.support.status.open': 'Ανοιχτό', 'admin.support.status.in_progress': 'Σε εξέλιξη', 'admin.support.status.resolved': 'Επιλύθηκε', 'admin.support.status.closed': 'Κλειστό', 'admin.support.your_reply': 'Η απάντησή σας', 'admin.user_edit.visibility_requirements.title': 'Το προφίλ δεν εμφανίζεται ακόμη στις Προσφορές', 'admin.user_edit.visibility_requirements.hint': 'Απαιτήσεις ορατότητας:', 'admin.user_edit.visibility_requirements.bio': 'Συμπληρώστε το βιογραφικό', 'admin.user_edit.visibility_requirements.published_card': 'Δημοσιεύστε τουλάχιστον μία κάρτα', 'admin.user_edit.visibility_requirements.categories': 'Προσθέστε κατηγορία σε δημοσιευμένη κάρτα', 'admin.user_edit.visibility_requirements.locations': 'Προσθέστε τοποθεσία σε δημοσιευμένη κάρτα', 'auto_response.desc': 'Αυτόματη απάντηση σε κατάλληλες εργασίες', 'auto_response.budget_range': 'Προϋπολογισμός εργασίας', 'auto_response.message_placeholder': 'Γεια σας! Μπορώ να βοηθήσω με αυτήν την εργασία...', 'profile.background.title': 'Φόντο κεφαλίδας προφίλ', 'profile.background.hint': 'Εμφανίζεται στην κεφαλίδα του δημόσιου προφίλ σε web και mobile.', 'profile.photo.uploading': 'Μεταφόρτωση...', 'profile.balance.history': 'Ιστορικό ενεργειών', 'profile.balance.history.last': 'Τελευταίες ενέργειες', 'profile.balance.history.empty': 'Δεν υπάρχουν ενέργειες', 'profile.balance.history.balance_after': 'Υπόλοιπο μετά', 'profile.balance.history.kind.topup': 'Αναπλήρωση υπολοίπου', 'profile.balance.history.kind.plan_purchase': 'Χρέωση πλάνου', 'profile.balance.history.kind.admin_topup': 'Αναπλήρωση από διαχειριστή', 'profile.balance.history.kind.admin_adjustment': 'Διόρθωση από διαχειριστή', 'profile.plan_history.title': 'Ιστορικό πλάνου', 'profile.plan_history.empty': 'Το ιστορικό πλάνου είναι άδειο', 'profile.plan_history.expires': 'Έως', 'profile.plan_history.days': 'ημέρες', 'profile.plan_history.event.activated': 'Ενεργοποιήθηκε', 'profile.plan_history.event.renewed': 'Ανανεώθηκε', 'profile.plan_history.event.downgraded': 'Υποβαθμίστηκε', 'profile.plan_history.event.referral_reward': 'Ανταμοιβή referral', 'profile.plan_history.event.admin_change': 'Αλλαγή από διαχειριστή', 'profile.plan_history.event.expired': 'Έληξε', 'profile.show_contact_desc': 'Επιτρέπει στους πελάτες να επικοινωνούν απευθείας', 'profile.site.visible.price_list': 'Τιμοκατάλογος', 'site.pricelist': 'Τιμοκατάλογος', 'status.plan_required': 'Η κατάσταση δεν είναι διαθέσιμη στο τρέχον πλάνο', 'status.admin_not_applicable': 'Η κατάσταση χρήστη δεν ισχύει για διαχειριστές' }, en: { 'footer.slogan': 'Your task — our care! We solve any issue quickly and easily.', 'footer.links': 'Links', 'footer.socials': 'Socials', 'nav.home': 'Home', 'nav.tasks': 'Tasks', 'nav.post': '+ Post task', 'nav.dashboard': 'My Tasks', 'nav.chat': 'Messages', 'nav.notifications': 'Notifications', 'nav.profile': 'Profile', 'nav.admin': 'Admin Panel', 'nav.specialists': 'Offers', 'nav.new_task': 'New task', 'nav.login': 'Login', 'nav.register': 'Register', 'nav.logout': 'Logout', 'hero.title': 'Everyone has something valuable to offer', 'hero.subtitle': 'Find help, offer your skills, or earn money helping others', 'hero.cta.post': 'Find help', 'hero.cta.browse': 'Offer your help', 'hero.cta.specialists': 'Find a job', 'hero.search.placeholder': 'What do you need? e.g. electrician, cleaning...', 'hero.specialist.title': 'Find tasks near you', 'hero.specialist.subtitle': 'Discover tasks in your categories and send your offer', 'hero.specialist.cta': 'Browse tasks', 'hero.specialist.search.placeholder': 'Search tasks... e.g. electrical, cleaning', 'section.categories.specialist': 'Find tasks by category', 'section.cities.specialist': 'Tasks by city', 'how.specialist.step1.title': 'Create a specialist card', 'how.specialist.step1.desc': 'Set your categories, skills and areas — the system finds tasks automatically', 'how.specialist.step2.title': 'Find relevant tasks', 'how.specialist.step2.desc': 'Discover tasks in your categories and get started right away', 'how.specialist.step3.title': 'Send an offer & earn', 'how.specialist.step3.desc': 'Submit an offer with price and timeline, communicate with clients and complete tasks', 'stats.specialists': 'offers', 'stats.tasks': 'tasks', 'stats.categories': 'categories', 'stats.free': 'free sign-up', 'promo.title': 'Get Pro for free — until end of year', 'promo.subtitle': 'Sign up now and enjoy the Pro plan at no cost. Offer ends December 31.', 'promo.cta': 'Sign up free', 'promo.days': 'days', 'promo.hours': 'hrs', 'promo.minutes': 'min', 'promo.seconds': 'sec', 'section.categories': 'Create a task in any category', 'section.how': 'How it works', 'section.recent': 'Recent tasks', 'section.all': 'See all →', 'section.more': 'more', 'section.cities': 'Cities & Districts', 'section.community': 'A community project for everyone', 'community.subtitle': 'CanHelp is not just a marketplace — it\'s a community of mutual help. Anyone with knowledge or a skill can find a client. Anyone with a problem can find a specialist.', 'community.point1.title': 'Are you good at something?', 'community.point1.desc': 'Repairs, tutoring, design, translation, care — every skill has value. Create a profile and find clients near you.', 'community.point2.title': 'Need help with something?', 'community.point2.desc': 'Post a task in under a minute and receive offers from verified specialists in your city.', 'community.point3.title': 'Help the project grow', 'community.point3.desc': 'CanHelp grows through communities. Share the link with friends and acquaintances — together we build something useful for everyone.', 'community.share': 'Share with friends', 'community.share.copied': 'Link copied!', // Referral section on home page 'section.referral': 'Referral Program', 'referral.home.subtitle': 'Share your link — every new user who signs up through it earns you a reward.', 'referral.home.step1.title': 'Sign up and get your link', 'referral.home.step1.desc': 'Create an account and find your unique referral link in your profile.', 'referral.home.step2.title': 'Share with friends', 'referral.home.step2.desc': 'Send the link to friends, acquaintances, or post it on social media.', 'referral.home.step3.title': 'Earn rewards', 'referral.home.step3.desc': 'Once your friend verifies their email, you automatically receive your reward.', 'referral.home.cta': 'Get your link', 'referral.home.badge': 'Referral Program', // FAQ section 'section.faq': 'Frequently Asked Questions', 'faq.q1': 'How does CanHelp work?', 'faq.a1': 'Post a task, receive offers from specialists, choose the best one and start working together. It\'s fast, simple and free for customers.', 'faq.q2': 'How much does it cost to use the platform?', 'faq.a2': 'Registration and task posting is completely free for customers. Specialists have access to a free plan as well as premium options.', 'faq.q3': 'How can I become a specialist?', 'faq.a3': 'Register, go to «Become a Specialist», fill in your profile with skills and categories, and start receiving tasks.', 'faq.q4': 'How do I choose the right specialist?', 'faq.a4': 'Check their reviews, experience, skills and portfolio. Chat with them through the platform and discuss the details before deciding.', 'faq.q5': 'What if I am not satisfied?', 'faq.a5': 'You can leave a review about the specialist and rate them from 1 to 5 stars. Reviews help other users find trusted professionals.', 'faq.q6': 'Can I contact a specialist before accepting their offer?', 'faq.a6': 'Yes. Once you receive an offer, you can open a chat with the specialist, ask questions and discuss all the details before making a decision.', 'faq.q7': 'How long does it take to receive offers?', 'faq.a7': 'Usually within a few hours. Specialists get notified about new tasks and can respond quickly.', 'faq.q8': 'Can I post a task in any city in Greece?', 'faq.a8': 'Yes! CanHelp covers all of Greece — Athens, Thessaloniki, Patras and more.', 'faq.q9': 'What types of tasks can I find on CanHelp?', 'faq.a9': 'Repairs, cleaning, electricians, tutoring, design, IT, moving, beauty and much more. Categories are constantly expanding.', 'faq.q10': 'Is there a mobile app?', 'faq.a10': 'Yes! CanHelp is available for Android and iOS. Download the app and manage everything from your phone.', 'how.step1.title': 'Post a task', 'how.step1.desc': 'Describe what you need and set your budget', 'how.step2.title': 'Receive offers', 'how.step2.desc': 'Specialists will send you offers with price and timeline', 'how.step3.title': 'Choose & start', 'how.step3.desc': 'Pick the best professional and start the collaboration', 'tasks.title': 'tasks', 'tasks.filters': 'Filters', 'tasks.search': 'Search', 'tasks.search.placeholder': 'Title or keyword...', 'tasks.search.btn': 'Search', 'tasks.publish': 'Post', 'tasks.category.all': 'All', 'tasks.category.all_in': 'All in', 'tasks.category.label': 'Category', 'tasks.location.label': 'City', 'tasks.location.placeholder': 'e.g. Athens', 'tasks.empty': 'No tasks found', 'tasks.empty.cta': 'Post the first one', 'task.status.open': 'Open', 'task.status.in_progress': 'In progress', 'task.status.completed': 'Completed', 'task.status.cancelled': 'Cancelled', 'task.status.draft': 'Draft', 'task.budget': 'Budget', 'task.location': 'Location', 'task.deadline': 'Start date', 'task.expires_at': 'Active until', 'task.created_at': 'Created', 'task.customer': 'Customer', 'task.offer.btn': 'Submit offer', 'task.invite.banner_title': "You've been invited to this task", 'task.invite.banner_hint': 'The customer personally invited you', 'task.invite.accept': 'Send offer', 'task.invite.decline': 'Decline', 'offer.accept': 'Accept', 'offer.decline': 'Decline', 'task.complete': 'Complete task', 'task.complete.confirm': 'Mark this task as complete?', 'task.edit': 'Edit', 'task.status_label': 'Status', 'task.yours': 'Your task', 'task.offer.yours': 'Your offer', 'review.leave': 'Leave a review', 'review.rating': 'Rating', 'review.comment': 'Comment', 'review.comment.placeholder': 'Tell us about your experience...', 'review.submit': 'Submit review', 'review.submitting': 'Submitting...', 'review.done': 'Review submitted!', 'profile.reviews': 'Reviews', 'profile.no_reviews': 'No reviews yet', 'profile.rating': 'Rating', 'profile.skills.label': 'Skills', 'profile.member_since': 'Member since', 'task.offers': 'Offers', 'task.offers.none': 'No offers yet', 'create.title': 'Post a task', 'create.field.title': 'Title', 'create.field.description': 'Description', 'create.field.category': 'Category', 'create.field.category.select': 'Select...', 'create.field.location': 'Location', 'create.field.location.any': 'Anywhere', 'create.field.location.all': 'Entire city', 'create.field.budget': 'Budget (€)', 'create.field.deadline': 'Start date', 'create.field.expires_at': 'Listing active for', 'create.field.expires_at.days': '{n} days', 'create.field.budget_negotiable': 'Price is negotiable', 'create.field.time_slot': 'Time slot', 'create.field.time_slot.any': 'Anytime', 'create.field.time_slot.morning': 'Morning (08:00–13:00)', 'create.field.time_slot.afternoon': 'Afternoon (13:00–18:00)', 'create.field.time_slot.evening': 'Evening (18:00–22:00)', 'create.field.time_slot.weekend': 'Weekend', 'create.field.address': 'Address (optional)', 'create.field.address.district': 'District', 'create.field.address.street': 'Street', 'create.field.address.house': 'Number', 'create.field.confidential': 'Confidential note', 'create.field.confidential.placeholder': 'Details visible only to the assigned specialist...', 'create.field.confidential.hint': 'Not shown publicly', 'create.field.photos': 'Photos', 'create.field.photos.add': 'Add photo', 'create.field.photos.uploading': 'Uploading...', 'task.budget_negotiable': 'Price negotiable', 'task.time_slot': 'Time slot', 'task.confidential': 'Confidential note', 'create.field.title.placeholder': 'e.g. Clean 80sqm apartment', 'create.field.description.placeholder': 'Describe in detail what you need...', 'create.field.location.placeholder': 'e.g. Athens, Kolonaki', 'create.field.budget.placeholder': 'e.g. 100', 'create.submit': 'Post task', 'create.submitting': 'Posting...', 'login.title': 'Welcome back', 'login.subtitle': 'Sign in to CanHelp', 'login.email': 'Email', 'login.password': 'Password', 'login.submit': 'Sign in', 'login.submitting': 'Signing in...', 'login.error': 'Invalid email or password', 'login.unverified.title': 'Verify your email address', 'login.unverified.desc': 'We sent a verification link to your email. Check your inbox (or spam) and click the link.', 'login.unverified.resend': 'Resend verification email', 'login.unverified.sending': 'Sending...', 'login.unverified.sent': '✓ Sent — check your inbox', 'profile.email.verified': 'Email verified', 'profile.email.not_verified': 'Email not verified', 'login.no_account': "Don't have an account?", 'login.register_link': 'Register', 'login.forgot_password': 'Forgot password?', 'login.or_continue_with': 'or continue with', 'login.continue_google': 'Continue with Google', 'forgot.title': 'Forgot password', 'forgot.subtitle': 'Enter your email to receive a reset link', 'forgot.email': 'Email', 'forgot.submit': 'Send reset link', 'forgot.submitting': 'Sending...', 'forgot.sent.title': 'Check your inbox', 'forgot.sent.desc': 'If an account exists with that email, we\'ll send you a password reset link.', 'forgot.back_to_login': 'Back to sign in', 'forgot.error': 'Could not send reset link. Check the email address and try again.', 'forgot.error.not_found': 'No account found with this email address.', 'forgot.error.send_failed': 'Failed to send email. Please try again later.', 'reset.title': 'New password', 'reset.subtitle': 'Enter your new password', 'reset.password': 'New password', 'reset.confirm': 'Confirm password', 'reset.submit': 'Change password', 'reset.submitting': 'Saving...', 'reset.success': 'Password changed successfully. Redirecting to sign in...', 'reset.back_to_login': 'Back to sign in', 'reset.error.mismatch': 'Passwords do not match', 'reset.error.invalid': 'Invalid or expired link. Please request a new one.', 'register.title': 'Register', 'register.subtitle': 'Create a CanHelp account', 'register.first_name': 'First name', 'register.last_name': 'Last name', 'register.email': 'Email', 'register.password': 'Password (min 8 characters)', 'register.role': 'Role', 'register.role.customer': 'User', 'register.role.customer.desc': 'I post tasks', 'register.role.specialist': 'Specialist', 'register.role.specialist.desc': 'I take on tasks', 'register.submit': 'Create account', 'register.submitting': 'Registering...', 'register.has_account': 'Already have an account?', 'register.login_link': 'Sign in', 'register.continue_google': 'Continue with Google', 'register.check_email.title': 'Check your email', 'register.check_email.desc': 'We sent a verification link to your email address. Check your inbox (or spam) and click the link.', 'register.check_email.login': 'Back to sign in', 'register.captcha_failed': 'CAPTCHA verification failed. Please complete the security check and try again.', 'dashboard.title': 'Dashboard', 'dashboard.new_task': '+ New task', 'dashboard.onboarding.title': 'Welcome to CanHelp 👋', 'dashboard.onboarding.subtitle': 'Choose how you want to get started.', 'dashboard.onboarding.helper.title': 'Offer your help', 'dashboard.onboarding.helper.desc': 'Complete your profile — skills, categories and areas. It takes a couple of minutes and you start receiving orders.', 'dashboard.onboarding.helper.cta': 'Complete your profile', 'dashboard.onboarding.requester.title': 'Need help?', 'dashboard.onboarding.requester.desc': 'Post a task and helpers will send you their offers.', 'dashboard.onboarding.requester.cta': 'Post a task', 'dashboard.my_tasks': 'My tasks', 'dashboard.my_offers': 'My offers', 'dashboard.invitations': 'Job invitations', 'dashboard.offers_count': 'offers', 'dashboard.declined_count': 'declined', 'dashboard.completed_tasks': 'Completed tasks', 'dashboard.completed_offers': 'Completed offers', 'dashboard.review_pending': 'Review not yet submitted', 'tasks.new.top_specialists': 'Top specialists', 'tasks.new.select_category': 'Select a category to see matching specialists', 'tasks.new.invite': 'Offer work', 'tasks.new.invited': 'Selected ✓', 'reviews.count': 'reviews', 'filter.location': 'Location', 'filter.language': 'Languages', 'filter.language.any': 'Any language', 'filter.category.all': 'All categories', 'user.categories': 'Categories', 'user.work_area': 'Work area', 'user.specialist_cards': 'Service cards', 'card.skills': 'Skills', 'card.categories': 'Categories', 'card.geography': 'Work area', 'card.portfolio': 'Portfolio', 'card.close': 'Close', 'dashboard.tasks.empty': "You haven't posted any tasks", 'dashboard.tasks.empty.cta': 'Post your first one', 'dashboard.tasks.add_new': 'Add a new task', 'dashboard.offers.empty': "You haven't submitted any offers", 'dashboard.offers.empty.cta': 'Find tasks', 'dashboard.customer.specialists_title': 'Looking for a specialist?', 'dashboard.customer.specialists_hint': 'Browse specialist profiles, read reviews and invite them to your tasks', 'dashboard.customer.specialists_cta': 'Find a specialist', 'dashboard.customer.how_title': 'How it works', 'dashboard.customer.step1': 'Create a task with a description and budget', 'dashboard.customer.step2': 'Specialists will send offers with price and timeline', 'dashboard.customer.step3': 'Choose the right one and start working', 'notif.title': 'Notifications', 'notif.mark_all': 'Mark all as read', 'notif.empty': 'No notifications', 'notif.type.generic': 'Notification', 'notif.type.new_offer': 'New offer', 'notif.type.offer_accepted': 'Your offer was accepted', 'notif.type.offer_declined': 'Your offer was declined', 'notif.type.task_completed': 'Task completed', 'notif.type.task_cancelled': 'Task cancelled', 'notif.type.new_message': 'New message', 'notif.type.new_review': 'New review', 'notif.type.task_invite': 'Job invitation', 'notif.type.referral_reward': 'Referral reward', 'notif.type.specialist_card_submitted': 'Card submitted for review', 'notif.type.specialist_card_approved': 'Card approved', 'notif.type.specialist_card_rejected': 'Card rejected', 'notif.body.new_offer': 'New offer for «{title}»', 'notif.body.offer_accepted': 'Your offer for «{title}» was accepted', 'notif.body.offer_declined': 'Your offer for «{title}» was declined', 'notif.body.task_invite': 'You\'ve been invited for «{title}»', 'notif.body.new_review': 'You received a {rating}★ review', 'notif.body.referral_reward': '{days} days of «{plan}» plan access have been added to your account!', 'notif.body.specialist_card_submitted': 'The card «{title}» was sent for review', 'notif.body.specialist_card_approved': 'The card «{title}» was approved and published', 'notif.body.specialist_card_rejected': 'The card «{title}» was not approved. You can fix it and submit again.', 'offer.status.pending': 'Pending', 'offer.status.accepted': 'Accepted', 'offer.status.declined': 'Declined', 'offer.status.withdrawn': 'Withdrawn', 'offer.status.other_accepted': 'Another specialist was chosen', 'common.loading': 'Loading...', 'common.error': 'Error', 'common.save': 'Save', 'common.saving': 'Saving...', 'common.cancel': 'Cancel', 'common.add': 'Add', 'common.close': 'Close', 'common.edit': 'Edit', 'common.delete': 'Delete', 'common.from': 'by', 'common.currency': '€', 'common.greece': 'Greece', // Chat 'chat.connected': 'Connected', 'chat.disconnected': 'Disconnected', 'chat.no_rooms': 'No conversations yet', 'chat.task_fallback': 'Task', 'chat.select': 'Select a conversation', 'chat.no_messages': 'No messages yet', 'chat.placeholder': 'Write a message... (Enter to send)', 'chat.conversation_fallback': 'Conversation', 'chat.direct_chat': 'Direct chat', 'chat.linked_task': 'Linked task', 'chat.write_btn': 'Message', 'chat.just_now': 'just now', 'chat.min_ago': 'm', 'chat.write_specialist': 'Write to specialist', 'chat.write_customer': 'Write to customer', 'chat.notif_settings': 'Notification settings', 'chat.notif_messages': 'Notifications for new messages', 'chat.toast_title': 'New message', 'chat.toast_open': 'Open chat', // Offer form 'offer.price': 'Price', 'offer.price.placeholder': 'e.g. 80', 'offer.customer_budget': 'Client budget', 'offer.message': 'Message', 'offer.optional': 'optional', 'offer.message.placeholder': 'Introduce yourself, your experience and why you are the best choice...', 'offer.submitting': 'Sending...', // Profile 'profile.photo': 'Profile photo', 'profile.photo.change': 'Change photo', 'profile.photo.hint': 'JPEG, PNG, WebP · up to 5MB', 'profile.basic_info': 'Basic info', 'profile.phone': 'Phone', 'profile.phone.placeholder': '+30 6901234567', 'profile.bio': 'Short bio', 'profile.bio.placeholder': 'Tell us a bit about yourself...', 'profile.language': 'Language', 'profile.language.hint': 'App interface and email notification language', 'profile.languages': 'Languages spoken', 'profile.languages.hint': 'Select all languages you speak', 'profile.skills': 'Skills', 'profile.skills.subtitle': 'Add the services you offer', 'profile.skills.placeholder': 'e.g. Cleaning, IT, Tutoring...', 'profile.role': 'Account role', 'profile.role.specialist': '🔧 Helper', 'profile.role.admin': '👑 Admin', 'profile.role.customer': '👤 User', 'profile.role.user': '👤 User', 'profile.role.change': 'To change your role please contact support.', 'profile.become_specialist': 'Offer your help', 'profile.become_specialist.desc': 'Create your helper profile, offer your skills and start receiving tasks.', 'become_specialist.hero.title': 'Offer your skills and start earning', 'become_specialist.hero.subtitle': 'Create a helper profile and receive requests from people who need help', 'become_specialist.how.title': 'How it works', 'become_specialist.step1.title': 'Create a specialist portfolio', 'become_specialist.step1.desc': 'Set your categories, skills and coverage areas — the system will automatically match you with relevant tasks', 'become_specialist.step2.title': 'Find tasks', 'become_specialist.step2.desc': 'Discover tasks in your categories in the "Find Orders" section', 'become_specialist.step3.title': 'Send an offer & earn', 'become_specialist.step3.desc': 'Submit offers with price and timeline, chat with clients and complete tasks', 'become_specialist.benefits.title': 'Specialist profile advantages', 'become_specialist.benefit1': 'Task search filtered by your categories and location', 'become_specialist.benefit2': 'Public profile with client reviews', 'become_specialist.benefit3': 'Availability schedule visible to clients', 'become_specialist.benefit4': 'Saved to favourites by clients', 'become_specialist.cta': 'Learn more', 'become_specialist.free_badge': 'Free registration', 'profile.tab.notifications': 'Notifications', 'profile.tab.reviews': 'Reviews', 'profile.tab.referral': 'Referrals', 'profile.tab.auto_response': 'Auto-response', 'profile.tab.site': 'Site', 'profile.site.title': 'Personal page', 'profile.site.url_label': 'Personal site', 'profile.site.copy': 'Copy', 'profile.site.copied': 'Copied', 'profile.site.visible_title': "What's on your page", 'profile.site.visible.name': 'Name and photo', 'profile.site.visible.bio': 'Bio', 'profile.site.visible.rating': 'Rating and reviews', 'profile.site.visible.portfolio': 'Portfolio / Cards', 'profile.site.visible.contacts': 'Contact info', 'profile.site.visible.full_last_name': 'Full last name', 'profile.site.visible.services': 'Service cards', 'profile.site.visible.reviews': 'Reviews section', 'profile.site.visible.status': '"Ready to help" status', 'profile.site.theme': 'Appearance theme', 'profile.site.theme.dark': 'Dark', 'profile.site.theme.light': 'Light', 'profile.site.slug_taken': 'This address is already taken', 'profile.site.stats.title': 'Site analytics', 'profile.site.stats.days': 'last 30 days', 'profile.site.stats.views': 'Views', 'profile.site.stats.unique': 'Unique visitors', 'profile.site.stats.messages': 'Messages', 'profile.site.stats.total_views': 'Total views', 'profile.site.stats.total_unique': 'Unique visitors', 'profile.site.stats.total_messages': 'Messages', 'profile.site.stats.empty': 'No data yet', 'profile.site.stats.loading': 'Loading analytics...', 'profile.site.stats.no_slug': 'Set your site URL to see analytics', 'profile.site.edit_bio_hint': 'Bio and photo are edited in the "Basic info" tab.', 'profile.site.seo.title': 'SEO — Page Metadata', 'profile.site.seo.hint': 'Shown in search results. Saved values are auto-translated into all languages.', 'profile.site.seo.site_title': 'Page title', 'profile.site.seo.site_title_placeholder': 'John Doe — Plumber in Athens', 'profile.site.seo.site_desc': 'Meta description', 'profile.site.seo.site_desc_placeholder': 'Brief description for search engines...', 'status.title': 'Status', 'status.can_help_now_hint': 'Your card is shown higher in search', 'status.need_help_hint': 'Specialists can offer you help', 'profile.referral.title': 'Referral program', 'profile.referral.desc': 'Share your link and earn rewards for every new user you invite.', 'profile.referral.link_label': 'Your referral link', 'profile.referral.copy': 'Copy', 'profile.referral.copied': 'Copied!', 'profile.referral.invited_count': 'successful referrals', 'profile.referral.no_code': 'Referral code is not available.', 'notifications.title': 'Notification settings', 'notifications.email.new_tasks': 'Email for new tasks', 'notifications.email.new_tasks.desc': 'Receive an email when a new task is posted in your categories', 'notifications.messages.desc': 'Receive a notification when a new message arrives', 'notifications.saved': 'Settings saved', 'notifications.plan_required': 'Not available in your plan', 'profile.tab.info': 'Basic info', 'profile.tab.finance': 'Finance', 'profile.tab.skills': 'Skills', 'profile.tab.categories': 'Categories', 'profile.tab.geography': 'Geography', 'profile.specialist.categories': 'Work categories', 'profile.specialist.categories.desc': 'Select the categories you work in', 'profile.specialist.geography': 'Coverage areas', 'profile.specialist.geography.desc': 'Select the cities / districts where you are active', 'profile.saving': 'Saving...', 'profile.upload.error': 'Error uploading photo', 'profile.saved': 'Saved', 'profile.tab.cards': 'Offers', 'profile.cards.count': 'Offers', 'profile.cards.add': 'Add offer', 'profile.cards.new_title': 'New offer title', 'profile.cards.placeholder': 'e.g. Plumbing', 'profile.cards.create': 'Create', 'profile.cards.cancel': 'Cancel', 'profile.cards.empty': 'No offers yet', 'profile.cards.empty_hint': 'Create your first card to show your services to clients.', 'profile.cards.create_first': 'Create your first offer', 'profile.cards.delete_confirm': 'Delete offer?', 'profile.background.change': 'Change background', 'profile.background.remove': 'Remove background', 'profile.listing_requirements.published_card': 'Publish at least one card', 'profile.listing_requirements.title': 'Your profile is not shown yet in offers', 'profile.listing_requirements.hint': 'To make the card visible, complete these conditions:', 'profile.listing_requirements.bio': 'Add a short bio in the main profile section', 'profile.listing_requirements.categories': 'Add at least one category to the active card', 'profile.listing_requirements.locations': 'Add at least one location to the active card', 'profile.listing_requirements.card_inactive': 'Make the card active', 'profile.listing_requirements.review_pending': 'Card is under review', 'profile.card.visibility_issue': 'Card is not shown in offers', 'profile.card.tab.main': 'General', 'profile.card.tab.skills': 'Skills', 'profile.card.tab.categories': 'Categories', 'profile.card.tab.geography': 'Geography', 'profile.card.tab.portfolio': 'Portfolio', 'profile.card.tab.pricelist': 'Price list', 'profile.card.pricelist.empty': 'No price list groups yet.', 'profile.card.pricelist.add_group': 'Add group', 'profile.card.pricelist.group_title': 'Group title', 'profile.card.pricelist.add_item': 'Add item', 'profile.card.pricelist.item_name': 'Service / work', 'profile.card.pricelist.item_desc': 'Description (optional)', 'profile.card.pricelist.item_price': 'Price', 'profile.card.pricelist.item_unit': 'Unit (e.g. /hour)', 'profile.card.pricelist.save_group': 'Save group', 'profile.card.pricelist.save_item': 'Save', 'profile.card.pricelist.delete_group': 'Delete group', 'profile.card.pricelist.delete_item': 'Delete', 'profile.card.active': 'Active', 'profile.card.review_pending': 'Pending approval', 'profile.card.review_pending_hint': 'Your card is being reviewed by the admin team.', 'profile.card.review_submitted': 'Card submitted for review', 'profile.card.review_approved': 'Card approved', 'profile.card.review_approved_hint': 'Your card is now visible in offers.', 'profile.card.review_rejected': 'Card rejected', 'profile.card.review_rejected_hint': 'Your card was not approved. Please update it and submit again.', 'profile.card.submit_review': 'Submit for review', 'profile.card.withdraw_review': 'Withdraw request', 'profile.card.unpublish': 'Unpublish', 'profile.card.save': 'Save', 'profile.card.saved': 'Saved', 'profile.card.delete': 'Delete', 'profile.card.skill.add': 'Add skill', 'profile.card.photo.add': 'Add photo', 'profile.card.photo.uploading': 'Uploading...', 'profile.card.photo.empty': 'No photos yet', 'profile.card.item.title': 'Title', 'profile.card.item.desc': 'Description', 'profile.card.item.save': 'Save', 'profile.card.item.cancel': 'Cancel', 'profile.card.item.edit': 'Edit', 'profile.card.description': 'Card description', 'profile.card.desc_auto_translate': 'Will be automatically translated into other languages on save', 'profile.card.desc_translated': 'Translations available:', 'profile.upgrade.cards_limit': 'Portfolio limit reached', 'profile.upgrade.plan': 'Current plan:', 'profile.upgrade.contact': 'Contact the administrator to change your plan', 'profile.upgrade.ok': 'Got it', 'profile.plan.title': 'Subscription plan', 'profile.balance': 'Balance', 'profile.balance.topup': 'Top Up Balance', 'profile.balance.topup.title': 'Top Up Balance', 'profile.balance.topup.amount': 'Amount (EUR)', 'profile.balance.topup.hint': 'Choose a preset or enter a custom amount', 'profile.balance.topup.submit': 'Proceed to Payment', 'profile.balance.topup.loading': 'Redirecting...', 'profile.balance.topup.error': 'Payment initiation failed. Please try again.', 'payment.success.title': 'Payment Successful!', 'payment.success.desc': 'Your balance has been updated.', 'payment.cancelled.title': 'Payment Cancelled', 'payment.cancelled.desc': 'Payment was cancelled. No charges were made.', 'payment.pending.title': 'Processing...', 'payment.pending.desc': 'Your payment is being processed.', 'payment.back_to_profile': 'Back to Profile', 'profile.plan.basic': 'Basic (free)', 'profile.plan.contact_upgrade': 'Contact admin to upgrade your plan', 'profile.plan.cards_up_to': 'Portfolio: up to', 'profile.plan.cards_unlimited': 'Portfolio: unlimited', 'profile.plan.tasks_up_to': 'Tasks: up to', 'profile.plan.offers_up_to': 'Offers: up to', 'profile.plan.valid_until': 'Valid until', 'profile.plan.no_expiry': 'No expiry', // Create task 'create.error': 'Error posting task', // Tasks list extras 'tasks.category.general': 'General', 'tasks.budget.range': 'Range:', 'tasks.budget.from': 'from', 'tasks.budget.to': 'to', 'tasks.filter.reset': 'Reset filters', 'tasks.load_more': 'Load more', 'tasks.showing': 'Results:', 'tasks.field.budget': 'Budget, €', // Admin 'admin.title': 'Admin Panel', 'admin.tab.stats': 'Statistics', 'admin.tab.users': 'Users', 'admin.tab.tasks': 'Tasks', 'admin.tab.reports': 'Reports', 'admin.tab.moderation': 'Moderation', 'admin.stats.users': 'Users', 'admin.stats.tasks': 'Tasks', 'admin.stats.offers': 'Offers', 'admin.stats.reviews': 'Reviews', 'admin.tasks.by_status': 'Tasks by status', 'admin.col.user': 'User', 'admin.col.email': 'Email', 'admin.col.role': 'Role', 'admin.col.registered': 'Registered', 'admin.col.status': 'Status', 'admin.col.title': 'Title', 'admin.col.budget': 'Budget', 'admin.col.created': 'Created', 'admin.users.active': 'Active', 'admin.users.inactive': 'Inactive', 'admin.users.deactivate': 'Deactivate', 'admin.users.activate': 'Activate', 'admin.tasks.cancel': 'Cancel', 'admin.reports.none': 'No reports', 'admin.moderation.none': 'No offers to review', 'admin.moderation.pending': 'Pending', 'admin.moderation.active': 'Active', 'admin.moderation.approve': 'Approve', 'admin.moderation.block': 'Block', 'admin.moderation.pending_title': 'Offers pending approval', 'admin.moderation.active_title': 'Active offers', 'admin.moderation.pending_count': 'Pending', 'admin.moderation.active_count': 'Active', 'admin.moderation.pending_hint': 'New offers waiting for approval', 'admin.moderation.active_hint': 'Visible offers you can block', 'admin.moderation.pending_empty': 'No new offers to approve', 'admin.moderation.active_empty': 'No active offers found', 'admin.reports.reviewed': 'Reviewed', 'admin.reports.dismiss': 'Dismiss', 'admin.pagination.total': 'Total', 'admin.users.role.change': 'Change role', 'admin.users.search.placeholder': 'Search name or email...', 'admin.tasks.delete': 'Delete', 'admin.tasks.delete.confirm': 'Permanently delete this task?', 'admin.tasks.search.placeholder': 'Search title...', 'admin.col.customer': 'Customer', 'admin.col.reporter': 'Reporter', 'admin.col.target': 'Target', 'admin.filter.all_roles': 'All roles', 'admin.filter.all_statuses': 'All statuses', 'admin.reports.target.task': 'Task', 'admin.reports.target.user': 'User', 'admin.tab.categories': 'Categories', 'admin.tab.locations': 'Cities & Districts', 'admin.tab.logs': 'Logs', 'admin.tab.plans': 'Plans', 'admin.tab.settings': 'Settings', 'admin.logs.subtab.ai': 'AI Logs', 'admin.logs.subtab.activity': 'Activity', 'admin.logs.subtab.mail': 'Mail', 'admin.logs.subtab.notifications': 'Notifications', 'admin.notif_logs.type': 'Type', 'admin.notif_logs.title': 'Title', 'admin.notif_logs.read': 'Read', 'admin.notif_logs.empty': 'No notification logs', 'admin.stats.notif_chart_title': 'Notifications per day', 'admin.stats.notif_label': 'Notifications', 'admin.stats.mail_chart_title': 'Emails per day', 'admin.stats.mail_label': 'Emails', 'admin.filter.all': 'All', 'admin.stats.specialists': 'Helpers', 'admin.col.plan': 'Plan', 'admin.back_home': 'Home', 'admin.plans.title': 'Subscription plans', 'admin.plans.add': '+ New plan', 'admin.plans.empty': 'No plans created', 'admin.plans.form.new': 'New plan', 'admin.plans.form.edit': 'Edit plan', 'admin.plans.form.name': 'Name', 'admin.plans.form.price': 'Price (EUR)', 'admin.plans.form.old_price': 'Old price (EUR, optional)', 'admin.plans.form.max_offers': 'Max offers (empty = no limit)', 'admin.plans.form.max_cards': 'Max offers (empty = no limit)', 'admin.plans.form.duration_days': 'Duration (days, empty = no expiry)', 'admin.plans.form.description': 'Description', 'admin.plans.form.features': 'Features (one per line)', 'admin.plans.form.notify': 'Notify about new tasks', 'admin.plans.form.default': 'Default', 'admin.plans.form.active': 'Active', 'admin.plans.form.order': 'Order', 'admin.plans.form.role': 'Role', 'admin.plans.form.tier': 'Tier', 'admin.plans.form.role.customer': 'Customer', 'admin.plans.form.role.specialist': 'Helper', 'admin.plans.form.tier.free': 'Free', 'admin.plans.form.tier.pro': 'Pro', 'admin.plans.form.tier.ultimate': 'Ultimate', 'admin.plans.form.section.limits': 'Limits (empty = unlimited)', 'admin.plans.form.max_messages_day': 'Max Messages/Day', 'admin.plans.form.max_orders_day': 'Max Orders/Day', 'admin.plans.form.max_skills': 'Max Skills', 'admin.plans.form.max_profiles': 'Max Profiles', 'admin.plans.form.max_portfolio': 'Max Portfolio Items', 'admin.plans.form.section.boost': 'Multipliers & Boost', 'admin.plans.form.search_boost': 'Search Boost', 'admin.plans.form.offers_multiplier': 'Offers Multiplier', 'admin.plans.form.section.contact': 'Contact Permissions', 'admin.plans.form.can_contact_free': 'Contact Free Plan users', 'admin.plans.form.can_contact_pro': 'Contact Pro Plan users', 'admin.plans.form.can_contact_all': 'Contact All users', 'admin.plans.form.can_show_contact': 'Show Contact Info', 'admin.plans.form.can_view_phone': 'View Phone', 'admin.plans.form.section.features': 'Feature Flags', 'admin.plans.form.upload_video': 'Upload Video', 'admin.plans.form.favorites': 'Favorites', 'admin.plans.form.google_calendar': 'Google Calendar', 'admin.plans.form.verified_badge': 'Verified Badge', 'admin.plans.form.highlighted_reviews': 'Highlighted Reviews', 'admin.plans.form.personal_site': 'Personal Site', 'admin.plans.form.can_help_now': 'Can Help Now Status', 'admin.plans.form.need_help': 'Need Help Status', 'admin.plans.form.auto_response': 'Auto Response', 'admin.plans.form.auto_match': 'Auto Match', 'admin.plans.form.price_list': 'Price List', 'admin.plans.form.instant_dispatch_free': 'Instant Dispatch (Free)', 'admin.plans.form.instant_dispatch_pro': 'Instant Dispatch (Pro)', 'admin.plans.badge.default': 'Default', 'admin.plans.badge.inactive': 'Inactive', 'admin.plans.make_default': 'Set as default', 'admin.plans.tasks': 'Tasks', 'admin.plans.offers': 'Offers', 'admin.plans.cards': 'Offers', 'admin.plans.notify_tasks': 'Task notifications', 'admin.plans.delete.confirm': 'Delete plan', 'admin.activity.title': 'Activity log', 'admin.activity.event': 'Event', 'admin.activity.all_events': 'All events', 'admin.activity.from': 'From', 'admin.activity.to': 'To', 'admin.activity.reset': 'Reset', 'admin.activity.total': 'Total', 'admin.activity.empty': 'No records', 'admin.mail.event': 'Email event', 'admin.mail.all_events': 'All email events', 'admin.mail.from': 'From', 'admin.mail.to': 'To', 'admin.mail.reset': 'Reset', 'admin.mail.total': 'Total', 'admin.mail.empty': 'No email logs', 'admin.mail.recipient': 'Recipient', 'admin.mail.provider': 'Provider', 'admin.mail.details': 'Details', 'admin.mail.status': 'Status', 'admin.mail.success': 'Success', 'admin.mail.failed': 'Failed', 'admin.event.email_sent': 'Email sent', 'admin.event.email_failed': 'Email failed', 'admin.event.email_dev': 'Email DEV fallback', 'admin.event.admin_email_test_sent': 'Admin test email sent', 'admin.event.admin_email_test_failed': 'Admin test email failed', 'admin.logs.empty': 'No records', 'admin.logs.date': 'Date', 'admin.logs.provider': 'Provider', 'admin.logs.model': 'Model', 'admin.logs.action': 'Action', 'admin.logs.langs': 'Languages', 'admin.logs.in': 'In', 'admin.logs.out': 'Out', 'admin.logs.total': 'Total', 'admin.logs.ms': 'ms', 'admin.logs.status': 'Status', 'admin.stats.activity_30d': 'Activity over 30 days', 'admin.stats.tasks_label': 'Tasks', 'admin.stats.users_label': 'Users', 'admin.stats.specialists_label': 'Helpers', 'admin.stats.tokens_title': 'Token usage (by month)', 'admin.stats.tokens_out': 'Output', 'admin.stats.tokens_in': 'Input', 'admin.stats.tokens_out_label': 'Output tokens', 'admin.stats.tokens_in_label': 'Input tokens', 'admin.stats.cost_label': 'Cost (USD)', 'admin.stats.tasks_by_status': 'Tasks by status', 'admin.task_status.open': 'Open', 'admin.task_status.in_progress': 'In progress', 'admin.task_status.completed': 'Completed', 'admin.task_status.cancelled': 'Cancelled', 'admin.task_status.draft': 'Drafts', 'admin.settings.tab.general': 'General', 'admin.settings.tab.smtp': 'E-Mail', 'admin.settings.tab.notifications': 'Notifications', 'admin.settings.tab.payment': 'Payment', 'admin.settings.tab.referral': 'Referrals', 'admin.settings.tab.seo': 'SEO', 'admin.settings.tab.socials': 'Socials', 'admin.settings.tab.telegram': 'Telegram Bot', 'admin.settings.telegram.title': 'Telegram Bot Settings', 'admin.settings.telegram.help': 'Create a bot via @BotFather. Use @userinfobot to get chat IDs.', 'admin.settings.telegram.bot_token': 'Bot Token', 'admin.settings.telegram.admin_chat_id': 'Admin Chat ID', 'admin.settings.telegram.admin_chat_hint': 'First send /start to your bot, then use @userinfobot to get your chat ID', 'admin.settings.telegram.channel_id': 'Channel ID', 'admin.settings.telegram.channels_title': 'Language Channels', 'admin.settings.telegram.channel_hint': 'Public channel @username or numeric ID', 'admin.settings.telegram.notify_registrations': 'Notify on new registrations', 'admin.settings.telegram.notify_registrations_hint': 'Send admin a message when a new user registers', 'admin.settings.telegram.post_new_tasks': 'Post new tasks to channel', 'admin.settings.telegram.post_new_tasks_hint': 'Automatically publish new tasks to the Telegram channel', 'admin.settings.telegram.test': 'Test', 'admin.settings.telegram.verify': 'Verify', 'admin.settings.telegram.test_ok': 'Connection successful', 'admin.settings.telegram.test_fail': 'Connection failed', 'admin.settings.socials.title': 'Social Network Links', 'admin.settings.socials.hint': 'Filled links are displayed in the site footer', 'admin.settings.seo.maintenance_label': 'Maintenance Mode', 'admin.settings.seo.maintenance_hint': 'Show a maintenance page to all visitors', 'admin.settings.seo.indexing_label': 'Search Engine Indexing', 'admin.settings.seo.indexing_hint': 'Allow search engines to index the site', 'admin.settings.seo.head_scripts_label': ' Scripts (JS)', 'admin.settings.seo.head_scripts_hint': 'Runs on every page (Google Tag Manager, analytics, etc.)', 'admin.settings.seo.site_title_label': 'Site Title', 'admin.settings.seo.site_description_label': 'Site Description (meta description)', 'admin.settings.referral.title': 'Referral program', 'admin.settings.referral.hint': 'Reward users who bring new registrations.', 'admin.settings.referral.enabled_label': 'Enabled', 'admin.settings.referral.enabled_hint': 'Enable / disable reward application', 'admin.settings.referral.customer_section': 'For customers', 'admin.settings.referral.specialist_section': 'For helpers', 'admin.settings.referral.plan_label': 'Reward plan', 'admin.settings.referral.no_plan': '— no plan —', 'admin.settings.referral.plan_hint': 'This plan will be assigned to the referrer. If their current plan is higher, only days will be added.', 'admin.settings.referral.days_label': 'Reward days', 'admin.settings.referral.days_hint': 'Number of days added to the plan expiry.', 'admin.settings.general.title': 'General settings', 'admin.settings.general.site_name': 'Site name', 'admin.settings.general.site_url': 'Site URL', 'admin.settings.general.contact_email': 'Contact email', 'admin.settings.general.support_phone': 'Support phone', 'admin.settings.smtp.title': 'SMTP settings', 'admin.settings.smtp.hint': 'Used to send email notifications.', 'admin.settings.smtp.host': 'SMTP Host', 'admin.settings.smtp.port': 'Port', 'admin.settings.smtp.encryption': 'Encryption', 'admin.settings.smtp.enc.none': 'None', 'admin.settings.smtp.enc.tls': 'STARTTLS (port 587)', 'admin.settings.smtp.enc.ssl': 'SSL/TLS (port 465)', 'admin.settings.smtp.username': 'Username', 'admin.settings.smtp.password': 'Password / App Password', 'admin.settings.smtp.from_name': 'Sender name', 'admin.settings.smtp.from_email': 'Sender email', 'admin.settings.smtp.test': 'Send test email', 'admin.settings.smtp.sending': 'Sending...', 'admin.settings.payment.hint': 'ePay Piraeus Bank credentials.', 'admin.settings.env.test': 'Test (sandbox)', 'admin.settings.env.prod': 'Production', 'admin.settings.env.label': 'Environment', 'admin.settings.merchant_id': 'Merchant ID', 'admin.settings.api_user': 'API User', 'admin.settings.api_password': 'API Password', 'admin.settings.confirm_url': 'Confirmation URL (webhook)', 'admin.settings.cancel_url': 'Cancel URL', 'admin.settings.active': 'Active', 'admin.settings.saving': 'Saving...', 'admin.settings.saved': 'Saved', 'admin.notif.vars_hint': 'Available variables in templates', 'admin.notif.tmpl.not_set': 'Template not configured', 'admin.notif.tmpl.subject_label': 'Email subject', 'admin.notif.tmpl.body_label': 'Email body (HTML)', 'admin.notif.tmpl.save': 'Save', 'admin.notif.tmpl.close': 'Close', 'admin.notif.tmpl.translate': 'Auto-translate to other languages', 'admin.notif.tmpl.translating': 'Translating...', 'admin.notif.tmpl.saving': 'Saving...', 'admin.notif.email_verification': 'Email verification', 'admin.notif.registration_success': 'Successful registration', 'admin.notif.password_reset': 'Password reset', 'admin.notif.new_offer': 'New offer', 'admin.notif.new_task': 'New task', 'admin.notif.offer_accepted': 'Offer accepted', 'admin.notif.new_message': 'New message', 'admin.notif.offer_declined': 'Offer declined', 'admin.notif.offer_other_accepted': 'Another specialist chosen', 'admin.notif.task_updated': 'Task updated', 'admin.notif.deadline_reminder': 'Deadline reminder', 'admin.notif.task_archived': 'Task unpublished automatically', 'admin.notif.referral_reward': 'Referral reward', // Plan lifecycle email templates 'admin.email_template.plan_activated': 'Plan activated', 'admin.email_template.plan_upgraded': 'Plan upgraded', 'admin.email_template.plan_downgrade_scheduled': 'Downgrade scheduled', 'admin.email_template.plan_downgrade_applied': 'Downgrade applied', 'admin.email_template.plan_renewal_reminder': 'Renewal reminder', 'admin.email_template.plan_insufficient_funds': 'Insufficient funds warning', // Pricing confirm modal 'pricing.confirm.title': 'Confirm plan selection', 'pricing.confirm.plan': 'Plan', 'pricing.confirm.prorated': 'Prorated credit', 'pricing.confirm.effective_price': 'Amount due', 'pricing.confirm.your_balance': 'Your balance', 'pricing.confirm.downgrade_info': 'The switch to the new plan will happen automatically after the current period ends.', 'pricing.confirm.insufficient': 'Insufficient balance.', 'pricing.confirm.top_up': 'Top up', 'pricing.confirm.schedule_downgrade': 'Schedule downgrade', 'pricing.confirm.pay': 'Pay', 'admin.user_edit.title': 'Edit user', 'admin.user_edit.email': 'Email', 'admin.user_edit.email_verified': 'Email verified', 'admin.user_edit.email_not_verified': 'Email not verified', 'admin.user_edit.verify_email_btn': 'Verify manually', 'admin.user_edit.verify_email_done': 'Email verified!', 'admin.user_edit.id': 'ID', 'admin.user_edit.registered': 'Registered', 'admin.user_edit.last_seen': 'Last seen', 'admin.user_edit.lang': 'Language', 'admin.user_edit.first_name': 'First name', 'admin.user_edit.last_name': 'Last name', 'admin.user_edit.phone': 'Phone', 'admin.user_edit.bio': 'Bio', 'admin.user_edit.role': 'Role', 'admin.user_edit.plan': 'Plan', 'admin.user_edit.no_plan': '— No plan —', 'admin.user_edit.active': 'Active account', 'admin.user_edit.published': 'Published', 'admin.user_edit.balance': 'Balance (EUR)', 'admin.user_edit.skills': 'Skills', 'admin.user_edit.tab.profile': 'Profile', 'admin.user_edit.tab.account': 'Account', 'admin.user_edit.tab.balance': 'Balance', 'admin.user_edit.tab.settings': 'Settings', 'admin.user_edit.tab.specialist': 'Offers', 'admin.user_edit.tab.site': 'Website', 'admin.user_edit.plan_expires': 'Plan expires', 'admin.user_edit.interface_lang': 'Interface language', 'admin.user_edit.comm_languages': 'Communication languages', 'admin.user_edit.personal_site_slug': 'Personal page', 'admin.user_edit.show_contact_info': 'Show contact info', 'admin.user_edit.show_contact_info.hint': 'Visible to customers', 'admin.user_edit.notify_new_tasks': 'Notify about new tasks', 'admin.user_edit.notify_new_tasks.hint': 'Push and email notifications', 'admin.user_edit.notif_messages': 'Message notifications', 'admin.user_edit.notif_messages.hint': 'New messages in chat', 'admin.user_edit.site_settings': 'Personal page settings', 'admin.user_edit.categories': 'Service categories', 'admin.user_edit.locations': 'Service areas', 'admin.user_edit.skill_placeholder': 'New skill...', 'admin.user_edit.add_category': '— Select category —', 'admin.user_edit.add_location': '— Select location —', 'admin.user_edit.specialist_cards': 'Offers', 'admin.user_edit.no_cards': 'No offers found', 'admin.user_edit.card_title': 'Offer title', 'admin.user_edit.card_description': 'Description', 'admin.balance.topup.btn': 'Top up', 'admin.balance.withdraw.btn': 'Withdraw', 'admin.balance.modal_hint': 'Changes take effect immediately and are recorded in history', 'admin.balance.topup.title': 'Top up balance', 'admin.balance.topup.amount': 'Amount', 'admin.balance.topup.description': 'Comment', 'admin.balance.topup.description.placeholder': 'For example: bonus or manual top-up', 'admin.balance.topup.submit': 'Top up balance', 'admin.balance.withdraw.title': 'Withdraw balance', 'admin.balance.withdraw.amount': 'Amount', 'admin.balance.withdraw.description': 'Comment', 'admin.balance.withdraw.description.placeholder': 'For example: refund or manual debit', 'admin.balance.withdraw.submit': 'Withdraw from balance', 'admin.user_edit.role.customer': 'Customer', 'admin.user_edit.role.user': 'User', 'admin.user_edit.role.specialist': 'Helper', 'admin.user_edit.role.admin': 'Administrator', 'common.refresh': 'Refresh', 'common.back_home': 'Home', 'admin.loc.hint': 'Manage cities and districts', 'admin.loc.add_city': 'New city', 'admin.loc.add_district': 'Add district', 'admin.loc.new': 'New location', 'admin.loc.edit': 'Edit location', 'admin.loc.district': 'district', 'admin.loc.empty': 'No locations', 'admin.loc.delete.confirm': 'Delete location? All districts will also be deleted.', 'admin.cat.add_root': 'New category', 'admin.cat.add_sub': 'Subcategory', 'admin.cat.edit': 'Edit', 'admin.cat.delete': 'Delete', 'admin.cat.delete.confirm': 'Delete category? All subcategories will also be deleted.', 'admin.cat.slug': 'Slug', 'admin.cat.icon': 'Icon', 'admin.cat.name_el': 'Greek', 'admin.cat.name_en': 'English', 'admin.cat.name_ru': 'Russian', 'admin.cat.name_uk': 'Ukrainian', 'admin.cat.active': 'Active', 'admin.cat.parent': 'Parent category', 'admin.cat.no_parent': 'Top level', 'admin.cat.save': 'Save', 'admin.cat.cancel': 'Cancel', 'admin.cat.empty': 'No categories', 'admin.cat.hint': 'Manage categories with multi-level hierarchy', 'admin.cat.new': 'New category', 'admin.cat.subcategory': 'subcategory', 'admin.cat.add_child': 'Add subcategory', 'admin.cat.inactive': 'Inactive', 'admin.event.user_login': 'Login', 'admin.event.user_register': 'Registration', 'admin.event.admin_user_deactivate': 'User blocked', 'admin.event.admin_user_activate': 'User activated', 'admin.event.admin_user_role_changed': 'Role changed', 'admin.event.admin_task_cancelled': 'Task cancelled', 'admin.event.admin_task_deleted': 'Task deleted', 'admin.event.admin_report_reviewed': 'Report reviewed', 'admin.event.admin_report_dismissed': 'Report dismissed', 'admin.event.task_created': 'Task created', // User status 'user.online': 'Online', 'user.seen_minutes': 'was here {n} min ago', 'user.seen_hours': 'was here {n} hr ago', 'user.seen_yesterday': 'was here yesterday', 'user.seen_days': 'was here {n} days ago', // Specialists 'specialists.title': 'Offers', 'specialists.search': 'Search specialist...', 'specialists.search.btn': 'Search', 'specialists.empty': 'No specialists found', 'specialists.no_bio': 'No description', 'specialists.view': 'View profile', 'specialists.reviews': 'reviews', 'specialist.favorite': 'Add to favorites', 'specialist.unfavorite': 'Remove from favorites', 'specialist.site_link': 'Personal site', 'favorites.specialists.title': 'Favourite specialists', 'favorites.specialists.empty': 'No favourite specialists yet', 'nav.favorites': 'Favourites', 'nav.schedule': 'Schedule', 'nav.find_tasks': 'Find Orders', 'schedule.title': 'My Schedule', 'schedule.subtitle': 'Mark the days when you are free or busy — clients will see your availability', 'schedule.available': 'Available', 'schedule.busy': 'Busy', 'schedule.unset': 'Not set', 'schedule.click_hint': '← click to cycle status', 'schedule.range_mode': 'Select range', 'schedule.range_from': 'From {date} — select end date', 'schedule.click_to_set': 'Click to set', 'schedule.free': 'free', 'schedule.busy_count': 'busy', 'schedule.free_days': 'free days', 'schedule.googleCalendar': 'Google Calendar', 'schedule.connectGoogle': 'Connect Google Calendar', 'schedule.disconnectGoogle': 'Disconnect', 'schedule.connectedAs': 'Connected as', 'schedule.importFromGoogle': 'Sync from Google', 'schedule.gcalConnected': '\u2713 Google Calendar connected', 'schedule.gcalError': 'Google Calendar connection error', 'schedule.gcalImportDone': 'Imported {n} days from Google Calendar', 'schedule.gcalAutoSyncNote': 'Availability changes are automatically synced to Google Calendar', 'schedule.gcalConnectDesc': 'Connect Google Calendar to automatically sync your availability', 'schedule.gcalDisconnectConfirm': 'Disconnect Google Calendar?', 'find_tasks.title': 'Find Orders', 'find_tasks.for_me': 'For me', 'find_tasks.all': 'All orders', 'find_tasks.by_category': 'By category', 'find_tasks.list': 'List', 'find_tasks.already_offered': 'Offer sent', 'find_tasks.offer_now': 'Make an offer', 'find_tasks.empty_for_me': 'No tasks found in your categories', 'find_tasks.banner_hint': 'Find tasks matching your portfolio categories', 'find_tasks.no_cards': 'Create a specialist portfolio to see tasks matched to you', 'find_tasks.add_card': 'Create portfolio', 'find_tasks.search': 'Search tasks...', 'find_tasks.tasks_count': 'tasks', 'footer.tagline': 'The task platform for Greece', 'footer.rights': 'All rights reserved.', 'nav.privacy': 'Privacy Policy', 'nav.delete_account': 'Delete Account', 'delete_account.title': 'Request Account Deletion', 'delete_account.subtitle': 'Once we verify your request, we will permanently delete your account and data within 30 days.', 'delete_account.warning': 'This action cannot be undone. All your data will be permanently deleted.', 'delete_account.reason_label': 'Reason (optional)', 'delete_account.reason_placeholder': 'Tell us why you want to delete your account...', 'delete_account.confirm_label': 'I confirm that I want to permanently delete my account', 'delete_account.submit': 'Submit request', 'delete_account.submitting': 'Submitting...', 'delete_account.success_title': 'Your request has been received', 'delete_account.success_body': 'We will process your request within 30 days and notify you by email.', 'delete_account.login_required': 'You must be logged in to submit a deletion request.', 'delete_account.login_btn': 'Log in', // App download section 'app.download_title': 'Download the CanHelp mobile app', 'app.download_desc': 'All of CanHelp — always at your fingertips. Available for Android and iOS.', // Nav 'nav.pricing': 'Pricing', // Pricing page 'pricing.title': 'Pricing', 'pricing.subtitle': 'Choose the right plan for you', 'pricing.role.customer': 'Customer', 'pricing.role.specialist': 'Specialist', 'pricing.free': 'Free', 'pricing.per_month': 'mo', 'pricing.duration': 'Duration', 'pricing.days': 'days', 'pricing.current_plan': 'Your plan', 'pricing.popular': 'Popular', 'pricing.choose': 'Choose', 'pricing.your_plan': 'Active plan', 'pricing.free_default': 'Default', 'pricing.compare': 'Compare features', 'pricing.feature': 'Feature', 'pricing.faq_note': 'Payment is deducted from your CanHelp balance. Top up available in Payments.', 'pricing.feat.messages': 'Messages / day', 'pricing.feat.orders': 'Orders / day', 'pricing.feat.contact_all': 'Contact everyone', 'pricing.feat.view_phone': 'View phone number', 'pricing.feat.show_contact': 'Show contact info', 'pricing.feat.favorites': 'Favorites', 'pricing.feat.verified_badge': 'Verified badge', 'pricing.feat.google_calendar': 'Google Calendar', 'pricing.feat.personal_site': 'Personal site', 'pricing.feat.auto_response': 'Auto-response', 'pricing.feat.auto_match': 'Auto-match', 'pricing.feat.highlighted_reviews': 'Highlighted reviews', 'pricing.feat.portfolio': 'Offer items', 'pricing.feat.cards': 'Number of offers', 'pricing.feat.notify_tasks': 'New task notifications', 'pricing.feat.video': 'Video in offer', // Upgrade prompt 'upgrade.available_in': 'Available in', 'upgrade.cta': 'Upgrade', // Dashboard plan block 'dashboard.plan.title': 'My Plan', 'dashboard.plan.expires': 'Expires in {n} days', 'dashboard.plan.upgrade': 'Upgrade plan', 'dashboard.plan.no_plan': 'Free plan', 'dashboard.plan.messages': 'Messages today', 'dashboard.plan.orders': 'Orders today', 'dashboard.plan.limits': 'Daily limits', 'dashboard.plan.features': 'Features', 'dashboard.plan.stats': 'Stats', 'dashboard.stats.cards': 'Portfolios', 'dashboard.stats.maxCards': 'Max portfolios', 'dashboard.stats.portfolioItems': 'Portfolio items', 'dashboard.stats.maxPortfolioItems': 'Max items', 'dashboard.stats.activeOffers': 'Active offers', 'dashboard.stats.reviewsReceived': 'Reviews', 'dashboard.stats.activeTasks': 'Active tasks', 'dashboard.stats.completedTasks': 'Completed', 'status.need_help': 'I need help', 'status.active': 'Active', 'status.toggle_on': 'Enable', 'status.toggle_off': 'Disable', // FOMO 'fomo.missed_orders': 'Missed {n} orders', 'fomo.missed_value': 'Worth €{v}', 'fomo.upgrade_hint': 'Upgrade to receive more orders', 'fomo.conversion': 'Task conversion', 'fomo.active': 'Active', 'fomo.with_offers': 'With offers', 'fomo.completed': 'Completed', 'fomo.already_offered': '{n} specialists have already responded', 'fomo.specialist_missed': 'You missed {n} orders', 'fomo.top_categories': 'Categories', 'fomo.offers_received': 'offers received', 'fomo.avg_offers': 'Avg {n}/task', 'fomo.completion_rate': 'completed', // Task auto-match 'task.auto_match': 'Auto-match', 'task.auto_match_results': 'Top specialists', 'task.no_offer_yet': 'You haven\'t sent an offer yet', 'task.make_offer': 'Send offer', 'auto_response.title': 'Auto-Response', 'auto_response.enabled': 'Enable auto-response', 'auto_response.min_budget': 'Min budget', 'auto_response.max_budget': 'Max budget', 'auto_response.default_price': 'Default price', 'auto_response.default_message': 'Default message', 'auto_response.max_per_day': 'Max auto-offers per day', 'auto_response.save': 'Save', 'auto_response.saved': 'Saved', 'auto_response.categories': 'Categories', 'auto_response.locations': 'Locations', // Personal site 'profile.personal_site': 'Personal Site', 'profile.site_slug': 'URL slug', 'profile.site_slug_hint': 'Only latin letters, numbers, - and _', 'profile.site_open': 'Open site', 'profile.site_preview': 'Your site', 'profile.show_contact': 'Show contact info', 'profile.show_contact_hint': 'Customers with Pro/Ultimate plans will see your phone number', // Google Calendar plan gate 'gcal.upgrade_required': 'Google Calendar requires a Pro or Ultimate plan', // Chat limits 'chat.limit_warning': '{n} messages left today', 'chat.limit_reached': 'Message limit reached. Upgrade your plan', 'chat.upgrade': 'Upgrade', // Site page 'site.member_since': 'Member since', 'site.rating': 'Rating', 'site.completed_tasks': 'Completed', 'site.languages': 'Languages', 'site.photos': 'photos', 'site.contact_form': 'Get in touch', 'site.contact_sent': 'Message sent!', 'site.contact_sent_desc': 'The specialist will contact you soon', 'site.contact_name': 'Name', 'site.contact_name_ph': 'Your name', 'site.contact_email_ph': 'your@email.com', 'site.contact_message': 'Message', 'site.contact_message_ph': 'Describe your task...', 'site.contact_send': 'Send', 'site.share': 'Share', 'site.speaks_languages': 'Speaks', 'site.message_sent': 'Message sent!', 'site.message_sent_desc': 'The specialist will receive it in the chat', 'site.message_placeholder': 'Write your message...', 'site.write_to_chat': 'Write to chat', 'site.auth_required_title': 'Sign in required', 'site.auth_required_desc': 'To write in the chat, you need to sign in to your CanHelp account.', 'site.auth_login_btn': 'Sign in', 'site.auth_contact_form_btn': 'Contact via feedback form', 'specialist.services': 'Services', 'portfolio.title': 'Portfolio', 'status.can_help_now': 'Available now', 'common.not_found': 'Page not found', 'common.anonymous': 'Anonymous', 'specialist_setup.page_title': 'Specialist profile setup', 'specialist_setup.step_of': 'Step {current} of {total}', 'specialist_setup.next': 'Next', 'specialist_setup.back': 'Back', 'specialist_setup.skip': 'Skip', 'specialist_setup.finish': 'Finish', 'specialist_setup.go_to_profile': 'Go to profile', 'specialist_setup.browse_tasks': 'Browse tasks', 'specialist_setup.step1.title': 'Welcome!', 'specialist_setup.step1.subtitle': "Let's set up your profile", 'specialist_setup.step1.desc': 'A complete profile helps you find more clients. Follow the steps to create the perfect specialist profile.', 'specialist_setup.step1.what_next': 'What we will do:', 'specialist_setup.step1.item1': 'Fill in basic information', 'specialist_setup.step1.item2': 'Create a service card', 'specialist_setup.step1.item3': 'Add skills and categories', 'specialist_setup.step1.item4': 'Select service area', 'specialist_setup.step1.item5': 'Upload portfolio photos', 'specialist_setup.step2.title': 'Basic profile', 'specialist_setup.step2.subtitle': 'Tell us about yourself', 'specialist_setup.step2.bio_label': 'About me', 'specialist_setup.step2.bio_placeholder': 'Describe your experience, services you offer...', 'specialist_setup.step2.phone_label': 'Phone', 'specialist_setup.step2.phone_placeholder': '+30 6900000000', 'specialist_setup.step2.photo_label': 'Profile photo', 'specialist_setup.step2.photo_btn': 'Upload photo', 'specialist_setup.step2.photo_uploading': 'Uploading...', 'specialist_setup.step2.photo_hint': 'Shown on your profile', 'specialist_setup.step3.title': 'Service card', 'specialist_setup.step3.subtitle': 'Create your first service card', 'specialist_setup.step3.title_label': 'Card title', 'specialist_setup.step3.title_placeholder': 'E.g. Plumber, Electrician, Cleaning...', 'specialist_setup.step3.desc_label': 'Description', 'specialist_setup.step3.desc_placeholder': 'Describe in detail what you offer, your experience, advantages...', 'specialist_setup.step3.title_required': 'Title is required', 'specialist_setup.step4.title': 'Skills & Categories', 'specialist_setup.step4.subtitle': 'Add skills and select categories', 'specialist_setup.step4.skills_label': 'Skills', 'specialist_setup.step4.skills_placeholder': 'E.g. Pipe installation...', 'specialist_setup.step4.skills_add': 'Add', 'specialist_setup.step4.categories_label': 'Categories', 'specialist_setup.step5.title': 'Service area', 'specialist_setup.step5.subtitle': 'Where do you provide services?', 'specialist_setup.step5.hint': 'Select cities or specific areas', 'specialist_setup.done.title': 'Your profile is ready!', 'specialist_setup.done.subtitle': 'Congratulations! Your profile has been set up', 'specialist_setup.done.desc': 'You can now receive orders from clients. Browse tasks that match your skills.', // Support 'support.title': 'Support', 'support.type.label': 'Request type', 'support.type.bug': 'Bug report', 'support.type.suggestion': 'Suggestion', 'support.type.other': 'Other', 'support.subject': 'Subject', 'support.subject.placeholder': 'Brief description...', 'support.body': 'Message', 'support.body.placeholder': 'Describe the issue or suggestion in detail...', 'support.submit': 'Submit', 'support.cancel': 'Cancel', 'support.error': 'Failed to send. Please try again.', 'support.sent.title': 'Request received!', 'support.sent.body': 'We will reply to your email as soon as possible.', 'support.sent.close': 'Close', 'admin.tab.support': 'Support', 'admin.tab.backup': 'Backup', 'admin.tab.translations': 'Translations', 'admin.tab.dbcheck': 'DB Check', 'admin.tab.balances': 'Balances', 'admin.tab.push': 'Push', 'admin.tab.referrals': 'Referrals', 'admin.search': 'Search', 'admin.noData': 'No data', 'admin.cat.order': 'Order', 'admin.cat.skills': 'Skills', 'admin.plans.form.max_tasks': 'Max tasks', 'admin.settings.referral.shared_section': 'Shared referral settings', 'admin.settings.seo.title': 'SEO settings', 'admin.backup.title': 'Backup', 'admin.backup.tables': 'Tables', 'admin.backup.exportAll': 'Export all', 'admin.backup.importAll': 'Import all', 'admin.backup.exportTable': 'Export table', 'admin.backup.importTable': 'Import table', 'admin.backup.exporting': 'Exporting...', 'admin.backup.importing': 'Importing...', 'admin.backup.exportSuccess': 'Export completed', 'admin.backup.importSuccess': 'Import completed', 'admin.backup.autoBackup': 'Auto backup', 'admin.backup.autoBackupDesc': 'Automatic daily backup', 'admin.backup.storedBackups': 'Stored backups', 'admin.backup.noStoredBackups': 'No stored backups', 'admin.backup.restore': 'Restore', 'admin.backup.restoreConfirm': 'Restore from backup?', 'admin.backup.restoreSuccess': 'Restore completed', 'admin.backup.restoring': 'Restoring...', 'admin.backup.date': 'Date', 'admin.backup.size': 'Size', 'admin.backup.today': 'Today', 'admin.backup.yesterday': 'Yesterday', 'admin.balance.col.operation': 'Operation', 'admin.balance.col.amount': 'Amount', 'admin.balance.col.result': 'Balance', 'admin.balance.col.description': 'Description', 'admin.balance.col.date': 'Date', 'admin.balance.empty': 'No records yet', 'admin.balance.filter.all': 'All operations', 'admin.balance.filter.user_id': 'Filter by userId', 'admin.balance.kind.topup': 'Top-up', 'admin.balance.kind.plan_purchase': 'Plan charge', 'admin.balance.kind.admin_topup': 'Admin top-up', 'admin.balance.kind.admin_adjustment': 'Adjustment', 'admin.support.search': 'Search', 'admin.support.all_statuses': 'All statuses', 'admin.support.all_types': 'All types', 'admin.support.none': 'No tickets', 'admin.support.reply': 'Reply', 'admin.support.reply_placeholder': 'Type your reply...', 'admin.support.send_reply': 'Send reply', 'admin.support.cancel': 'Cancel', 'admin.support.close': 'Close', 'admin.support.status.open': 'Open', 'admin.support.status.in_progress': 'In progress', 'admin.support.status.resolved': 'Resolved', 'admin.support.status.closed': 'Closed', 'admin.support.your_reply': 'Your reply', 'admin.user_edit.visibility_requirements.title': 'Profile is not yet visible in Offers', 'admin.user_edit.visibility_requirements.hint': 'Visibility requirements:', 'admin.user_edit.visibility_requirements.bio': 'Fill in bio', 'admin.user_edit.visibility_requirements.published_card': 'Publish at least one card', 'admin.user_edit.visibility_requirements.categories': 'Add a category to a published card', 'admin.user_edit.visibility_requirements.locations': 'Add a location to a published card', 'auto_response.desc': 'Automatically respond to matching tasks', 'auto_response.budget_range': 'Task budget', 'auto_response.message_placeholder': 'Hello! I can help with this task...', 'profile.background.title': 'Profile header background', 'profile.background.hint': 'Shown in the public profile header on web and mobile app.', 'profile.photo.uploading': 'Uploading...', 'profile.balance.history': 'Operation history', 'profile.balance.history.last': 'Latest operations', 'profile.balance.history.empty': 'No operations yet', 'profile.balance.history.balance_after': 'Balance after', 'profile.balance.history.kind.topup': 'Balance top-up', 'profile.balance.history.kind.plan_purchase': 'Plan charge', 'profile.balance.history.kind.admin_topup': 'Admin top-up', 'profile.balance.history.kind.admin_adjustment': 'Admin adjustment', 'profile.plan_history.title': 'Plan history', 'profile.plan_history.empty': 'Plan change history is empty', 'profile.plan_history.expires': 'Until', 'profile.plan_history.days': 'days', 'profile.plan_history.event.activated': 'Activated', 'profile.plan_history.event.renewed': 'Renewed', 'profile.plan_history.event.downgraded': 'Downgraded', 'profile.plan_history.event.referral_reward': 'Referral reward', 'profile.plan_history.event.admin_change': 'Changed by admin', 'profile.plan_history.event.expired': 'Expired', 'profile.show_contact_desc': 'Lets clients contact you directly', 'profile.site.visible.price_list': 'Price list', 'site.pricelist': 'Price list', 'status.plan_required': 'Status is unavailable on your current plan', 'status.admin_not_applicable': 'User status is not applicable to admin accounts' }, ru: { 'footer.slogan': 'Ваша задача — наша забота! Решаем любые вопросы быстро и удобно.', 'footer.links': 'Ссылки', 'footer.socials': 'Мы в соцсетях', 'nav.home': 'Главная', 'nav.tasks': 'Задачи', 'nav.post': '+ Опубликовать', 'nav.dashboard': 'Мои задачи', 'nav.chat': 'Сообщения', 'nav.notifications': 'Уведомления', 'nav.profile': 'Профиль', 'nav.admin': 'Админка', 'nav.specialists': 'Предложения', 'nav.new_task': 'Новая задача', 'nav.login': 'Войти', 'nav.register': 'Регистрация', 'nav.logout': 'Выйти', 'hero.title': 'Каждый человек может чем-то помочь', 'hero.subtitle': 'Найди помощь, предложи свои навыки или зарабатывай, помогая другим', 'hero.cta.post': 'Найти помощь', 'hero.cta.browse': 'Предложить помощь', 'hero.cta.specialists': 'Найти работу', 'hero.search.placeholder': 'Что нужно? напр. электрик, уборка...', 'hero.specialist.title': 'Найдите заказы рядом с вами', 'hero.specialist.subtitle': 'Откройте заказы в своих категориях и отправьте предложение', 'hero.specialist.cta': 'Найти заказы', 'hero.specialist.search.placeholder': 'Поиск заказов... напр. электрика, уборка', 'section.categories.specialist': 'Найдите заказы по категории', 'section.cities.specialist': 'Заказы по городу', 'how.specialist.step1.title': 'Создайте карточку специалиста', 'how.specialist.step1.desc': 'Укажите категории, навыки и районы — система найдёт подходящие заказы автоматически', 'how.specialist.step2.title': 'Найдите подходящие заказы', 'how.specialist.step2.desc': 'Просматривайте заказы в своих категориях и начните работу сразу', 'how.specialist.step3.title': 'Отправьте предложение и зарабатывайте', 'how.specialist.step3.desc': 'Подайте предложение с ценой и сроками, общайтесь с клиентами и выполняйте заказы', 'stats.specialists': 'предложений', 'stats.tasks': 'задач', 'stats.categories': 'категорий', 'stats.free': 'бесплатная регистрация', 'promo.title': 'Получи Pro бесплатно — только до конца года', 'promo.subtitle': 'Зарегистрируйся сейчас и пользуйся тарифом Pro без оплаты. Акция заканчивается 31 декабря.', 'promo.cta': 'Зарегистрироваться', 'promo.days': 'дней', 'promo.hours': 'часов', 'promo.minutes': 'минут', 'promo.seconds': 'сек.', 'section.categories': 'Создай задачу в любой категории', 'section.how': 'Как это работает', 'section.recent': 'Последние задачи', 'section.all': 'Смотреть все →', 'section.more': 'ещё', 'section.cities': 'Города и районы', 'section.community': 'Общественный проект для всех', 'community.subtitle': 'CanHelp — не просто маркетплейс, это сообщество взаимопомощи. Любой, у кого есть знания или навык, может найти клиента. Любой, у кого есть задача, может найти специалиста.', 'community.point1.title': 'Умеете что-то делать?', 'community.point1.desc': 'Ремонт, репетиторство, дизайн, переводы, уход — каждый навык имеет ценность. Создайте профиль и находите клиентов рядом с вами.', 'community.point2.title': 'Нужна помощь?', 'community.point2.desc': 'Опубликуйте задачу за минуту и получайте предложения от проверенных специалистов в вашем городе.', 'community.point3.title': 'Помогите проекту расти', 'community.point3.desc': 'CanHelp развивается благодаря сообществам. Поделитесь ссылкой с друзьями и знакомыми — вместе мы строим что-то полезное для всех.', 'community.share': 'Поделиться с друзьями', 'community.share.copied': 'Ссылка скопирована!', // Referral section on home page 'section.referral': 'Реферальная программа', 'referral.home.subtitle': 'Поделитесь ссылкой — каждый новый пользователь, зарегистрировавшийся по ней, принесёт вам награду.', 'referral.home.step1.title': 'Зарегистрируйтесь и получите ссылку', 'referral.home.step1.desc': 'Создайте аккаунт и найдите свою уникальную реферальную ссылку в профиле.', 'referral.home.step2.title': 'Поделитесь с друзьями', 'referral.home.step2.desc': 'Отправьте ссылку друзьям, знакомым или опубликуйте в социальных сетях.', 'referral.home.step3.title': 'Получайте награды', 'referral.home.step3.desc': 'Как только друг подтвердит email, вы автоматически получите свою награду.', 'referral.home.cta': 'Получить ссылку', 'referral.home.badge': 'Реферальная программа', // FAQ section 'section.faq': 'Частые вопросы', 'faq.q1': 'Как работает CanHelp?', 'faq.a1': 'Опубликуйте задачу, получите предложения от специалистов, выберите лучшего и начните сотрудничество. Это быстро, просто и бесплатно для клиентов.', 'faq.q2': 'Сколько стоит использование платформы?', 'faq.a2': 'Регистрация и публикация задач полностью бесплатны для клиентов. Специалисты имеют доступ к бесплатному плану, а также к премиум-опциям.', 'faq.q3': 'Как стать специалистом?', 'faq.a3': 'Зарегистрируйтесь, перейдите в «Стать специалистом», заполните профиль навыками и категориями и начните получать задачи.', 'faq.q4': 'Как выбрать подходящего специалиста?', 'faq.a4': 'Оцените отзывы, опыт, навыки и портфолио каждого специалиста. Общайтесь через чат платформы и уточняйте детали до принятия решения.', 'faq.q5': 'Что если я не доволен результатом?', 'faq.a5': 'Вы можете оставить отзыв о специалисте и поставить оценку от 1 до 5 звёзд. Отзывы помогают другим пользователям выбирать проверенных профессионалов.', 'faq.q6': 'Можно ли связаться со специалистом до принятия предложения?', 'faq.a6': 'Да. Как только вы получили предложение, можно открыть чат со специалистом, задать вопросы и уточнить все детали до принятия решения.', 'faq.q7': 'Сколько времени ждать предложений?', 'faq.a7': 'Как правило, в течение нескольких часов. Специалисты получают уведомление о новых задачах и могут быстро ответить.', 'faq.q8': 'Можно ли разместить задачу в любом городе Греции?', 'faq.a8': 'Да! CanHelp охватывает всю Грецию — Афины, Фессалоники, Патры и другие города.', 'faq.q9': 'Какие виды задач есть на CanHelp?', 'faq.a9': 'Ремонт, уборка, электрики, репетиторство, дизайн, IT, переезды, красота и многое другое. Категории постоянно расширяются.', 'faq.q10': 'Есть ли мобильное приложение?', 'faq.a10': 'Да! CanHelp доступно для Android и iOS. Скачайте приложение и управляйте всем со своего телефона.', 'how.step1.title': 'Опубликуй задачу', 'how.step1.desc': 'Опиши что нужно и установи бюджет', 'how.step2.title': 'Получи предложения', 'how.step2.desc': 'Специалисты пришлют предложения с ценой и сроками', 'how.step3.title': 'Выбери и начни', 'how.step3.desc': 'Выбери лучшего профессионала и начни сотрудничество', 'tasks.title': 'задач', 'tasks.filters': 'Фильтры', 'tasks.search': 'Поиск', 'tasks.search.placeholder': 'Название или ключевое слово...', 'tasks.search.btn': 'Поиск', 'tasks.publish': 'Опубликовать', 'tasks.category.all': 'Все', 'tasks.category.all_in': 'Все в', 'tasks.category.label': 'Категория', 'tasks.location.label': 'Город', 'tasks.location.placeholder': 'напр. Афины', 'tasks.empty': 'Задачи не найдены', 'tasks.empty.cta': 'Опубликуй первую', 'task.status.open': 'Открыта', 'task.status.in_progress': 'В работе', 'task.status.completed': 'Завершена', 'task.status.cancelled': 'Отменена', 'task.status.draft': 'Черновик', 'task.budget': 'Бюджет', 'task.location': 'Местоположение', 'task.deadline': 'Дата начала', 'task.expires_at': 'Активно до', 'task.created_at': 'Создано', 'task.customer': 'Заказчик', 'task.offer.btn': 'Отправить предложение', 'task.invite.banner_title': 'Вас пригласили на это задание', 'task.invite.banner_hint': 'Заказчик лично пригласил вас', 'task.invite.accept': 'Отправить предложение', 'task.invite.decline': 'Отказаться', 'offer.accept': 'Принять', 'offer.decline': 'Отклонить', 'task.complete': 'Завершить задачу', 'task.complete.confirm': 'Отметить задачу как выполненную?', 'task.edit': 'Редактировать', 'task.status_label': 'Статус', 'task.yours': 'Ваша задача', 'task.offer.yours': 'Ваше предложение', 'review.leave': 'Оставить отзыв', 'review.rating': 'Оценка', 'review.comment': 'Комментарий', 'review.comment.placeholder': 'Расскажите о своём опыте...', 'review.submit': 'Отправить отзыв', 'review.submitting': 'Отправка...', 'review.done': 'Отзыв отправлен!', 'profile.reviews': 'Отзывы', 'profile.no_reviews': 'Отзывов пока нет', 'profile.rating': 'Рейтинг', 'profile.skills.label': 'Навыки', 'profile.member_since': 'Участник с', 'task.offers': 'Предложения', 'task.offers.none': 'Предложений пока нет', 'create.title': 'Опубликовать задачу', 'create.field.title': 'Название', 'create.field.description': 'Описание', 'create.field.category': 'Категория', 'create.field.category.select': 'Выберите...', 'create.field.location': 'Местоположение', 'create.field.location.any': 'Где угодно', 'create.field.location.all': 'Весь город', 'create.field.budget': 'Бюджет (€)', 'create.field.deadline': 'Дата начала', 'create.field.expires_at': 'Объявление активно', 'create.field.expires_at.days': '{n} дней', 'create.field.budget_negotiable': 'Цена обсуждается', 'create.field.time_slot': 'Время выполнения', 'create.field.time_slot.any': 'В любое время', 'create.field.time_slot.morning': 'Утром (08:00–13:00)', 'create.field.time_slot.afternoon': 'Днём (13:00–18:00)', 'create.field.time_slot.evening': 'Вечером (18:00–22:00)', 'create.field.time_slot.weekend': 'Выходной', 'create.field.address': 'Адрес (необязательно)', 'create.field.address.district': 'Квартал', 'create.field.address.street': 'Улица', 'create.field.address.house': 'Дом', 'create.field.confidential': 'Конфиденциальная заметка', 'create.field.confidential.placeholder': 'Детали, видные только назначенному специалисту...', 'create.field.confidential.hint': 'Не отображается публично', 'create.field.photos': 'Фотографии', 'create.field.photos.add': 'Добавить фото', 'create.field.photos.uploading': 'Загрузка...', 'task.budget_negotiable': 'Цена обсуждается', 'task.time_slot': 'Время', 'task.confidential': 'Конфид. заметка', 'create.field.title.placeholder': 'напр. Уборка квартиры 80кв', 'create.field.description.placeholder': 'Подробно опишите что нужно...', 'create.field.location.placeholder': 'напр. Афины, Колонаки', 'create.field.budget.placeholder': 'напр. 100', 'create.submit': 'Опубликовать задачу', 'create.submitting': 'Публикация...', 'login.title': 'Добро пожаловать', 'login.subtitle': 'Вход в CanHelp', 'login.email': 'Email', 'login.password': 'Пароль', 'login.submit': 'Войти', 'login.submitting': 'Вход...', 'login.error': 'Неверный email или пароль', 'login.unverified.title': 'Подтвердите ваш email', 'login.unverified.desc': 'Мы отправили ссылку для подтверждения на ваш email. Проверьте входящие (или спам) и перейдите по ссылке.', 'login.unverified.resend': 'Отправить письмо повторно', 'login.unverified.sending': 'Отправка...', 'login.unverified.sent': '✓ Отправлено — проверьте входящие', 'profile.email.verified': 'Email подтверждён', 'profile.email.not_verified': 'Email не подтверждён', 'login.no_account': 'Нет аккаунта?', 'login.register_link': 'Зарегистрироваться', 'login.forgot_password': 'Забыл пароль?', 'login.or_continue_with': 'или продолжите через', 'login.continue_google': 'Войти через Google', 'forgot.title': 'Забыл пароль', 'forgot.subtitle': 'Введите email для получения ссылки восстановления', 'forgot.email': 'Email', 'forgot.submit': 'Отправить ссылку', 'forgot.submitting': 'Отправка...', 'forgot.sent.title': 'Проверьте входящие', 'forgot.sent.desc': 'Если аккаунт с таким email существует, мы отправим ссылку для сброса пароля.', 'forgot.back_to_login': 'Вернуться ко входу', 'forgot.error': 'Не удалось отправить ссылку. Проверьте адрес и попробуйте снова.', 'forgot.error.not_found': 'Аккаунт с таким email не найден.', 'forgot.error.send_failed': 'Ошибка отправки письма. Попробуйте позже.', 'reset.title': 'Новый пароль', 'reset.subtitle': 'Введите новый пароль', 'reset.password': 'Новый пароль', 'reset.confirm': 'Подтвердите пароль', 'reset.submit': 'Изменить пароль', 'reset.submitting': 'Сохранение...', 'reset.success': 'Пароль успешно изменён. Перенаправление ко входу...', 'reset.back_to_login': 'Вернуться ко входу', 'reset.error.mismatch': 'Пароли не совпадают', 'reset.error.invalid': 'Недействительная или устаревшая ссылка. Запросите новую.', 'register.title': 'Регистрация', 'register.subtitle': 'Создать аккаунт в CanHelp', 'register.first_name': 'Имя', 'register.last_name': 'Фамилия', 'register.email': 'Email', 'register.password': 'Пароль (мин. 8 символов)', 'register.role': 'Роль', 'register.role.customer': 'Пользователь', 'register.role.customer.desc': 'Публикую задачи', 'register.role.specialist': 'Специалист', 'register.role.specialist.desc': 'Беру задачи', 'register.submit': 'Создать аккаунт', 'register.submitting': 'Регистрация...', 'register.has_account': 'Уже есть аккаунт?', 'register.login_link': 'Войти', 'register.continue_google': 'Зарегистрироваться через Google', 'register.check_email.title': 'Проверьте почту', 'register.check_email.desc': 'Мы отправили ссылку для подтверждения на ваш email. Проверьте входящие (или спам) и перейдите по ссылке.', 'register.check_email.login': 'Вернуться к входу', 'register.captcha_failed': 'Проверка CAPTCHA не пройдена. Пройдите проверку безопасности и попробуйте снова.', 'dashboard.title': 'Панель управления', 'dashboard.new_task': '+ Новая задача', 'dashboard.onboarding.title': 'Добро пожаловать в CanHelp 👋', 'dashboard.onboarding.subtitle': 'Выберите, с чего хотите начать.', 'dashboard.onboarding.helper.title': 'Предложите свою помощь', 'dashboard.onboarding.helper.desc': 'Заполните анкету — навыки, категории и города. Это займёт пару минут, и вы начнёте получать заказы.', 'dashboard.onboarding.helper.cta': 'Заполнить анкету', 'dashboard.onboarding.requester.title': 'Нужна помощь?', 'dashboard.onboarding.requester.desc': 'Опубликуйте задачу — помощники пришлют вам свои предложения.', 'dashboard.onboarding.requester.cta': 'Опубликовать задачу', 'dashboard.my_tasks': 'Мои задачи', 'dashboard.my_offers': 'Мои предложения', 'dashboard.invitations': 'Приглашения на задания', 'dashboard.offers_count': 'предл.', 'dashboard.declined_count': 'откл.', 'dashboard.completed_tasks': 'Завершённые задачи', 'dashboard.completed_offers': 'Завершённые предложения', 'dashboard.review_pending': 'Оценка ещё не оставлена', 'tasks.new.top_specialists': 'Топ специалисты', 'tasks.new.select_category': 'Выберите категорию, чтобы увидеть специалистов', 'tasks.new.invite': 'Предложить работу', 'tasks.new.invited': 'Выбран ✓', 'reviews.count': 'отзывов', 'filter.location': 'Локация', 'filter.language': 'Языки', 'filter.language.any': 'Любой язык', 'filter.category.all': 'Все категории', 'user.categories': 'Категории', 'user.work_area': 'Район работы', 'user.specialist_cards': 'Карточки услуг', 'card.skills': 'Навыки', 'card.categories': 'Категории', 'card.geography': 'Район работы', 'card.portfolio': 'Галерея работ', 'card.close': 'Закрыть', 'dashboard.tasks.empty': 'Вы не публиковали задачи', 'dashboard.tasks.empty.cta': 'Опубликуйте первую', 'dashboard.tasks.add_new': 'Добавить новую задачу', 'dashboard.offers.empty': 'Вы не отправляли предложений', 'dashboard.offers.empty.cta': 'Найти задачи', 'dashboard.customer.specialists_title': 'Ищете исполнителя?', 'dashboard.customer.specialists_hint': 'Просматривайте профили специалистов, читайте отзывы и приглашайте их на свои задачи', 'dashboard.customer.specialists_cta': 'Найти исполнителя', 'dashboard.customer.how_title': 'Как это работает', 'dashboard.customer.step1': 'Создайте задачу с описанием и бюджетом', 'dashboard.customer.step2': 'Специалисты пришлют предложения с ценой и сроками', 'dashboard.customer.step3': 'Выберите подходящего и начните работу', 'notif.title': 'Уведомления', 'notif.mark_all': 'Отметить все как прочитанные', 'notif.empty': 'Нет уведомлений', 'notif.type.generic': 'Уведомление', 'notif.type.new_offer': 'Новое предложение', 'notif.type.offer_accepted': 'Ваше предложение принято', 'notif.type.offer_declined': 'Ваше предложение отклонено', 'notif.type.task_completed': 'Задание выполнено', 'notif.type.task_cancelled': 'Задание отменено', 'notif.type.new_message': 'Новое сообщение', 'notif.type.new_review': 'Новый отзыв', 'notif.type.task_invite': 'Приглашение на задание', 'notif.type.referral_reward': 'Реферальная награда', 'notif.type.specialist_card_submitted': 'Карточка отправлена на проверку', 'notif.type.specialist_card_approved': 'Карточка одобрена', 'notif.type.specialist_card_rejected': 'Карточка отклонена', 'notif.body.new_offer': 'Новое предложение на «{title}»', 'notif.body.offer_accepted': 'Ваше предложение на «{title}» принято', 'notif.body.offer_declined': 'Ваше предложение на «{title}» отклонено', 'notif.body.task_invite': 'Вас приглашают на «{title}»', 'notif.body.new_review': 'Вы получили оценку {rating}★', 'notif.body.referral_reward': 'На ваш аккаунт добавлено {days} дней доступа к плану «{plan}»!', 'notif.body.specialist_card_submitted': 'Карточка «{title}» отправлена на проверку', 'notif.body.specialist_card_approved': 'Карточка «{title}» одобрена и опубликована', 'notif.body.specialist_card_rejected': 'Карточка «{title}» не была одобрена. Исправьте её и отправьте снова.', 'offer.status.pending': 'Ожидает', 'offer.status.accepted': 'Принято', 'offer.status.declined': 'Отклонено', 'offer.status.withdrawn': 'Отозвано', 'offer.status.other_accepted': 'Выбран другой исполнитель', 'common.loading': 'Загрузка...', 'common.error': 'Ошибка', 'common.save': 'Сохранить', 'common.saving': 'Сохранение...', 'common.cancel': 'Отмена', 'common.add': 'Добавить', 'common.close': 'Закрыть', 'common.edit': 'Редактировать', 'common.delete': 'Удалить', 'common.from': 'от', 'common.currency': '€', 'common.greece': 'Греция', // Chat 'chat.connected': 'Подключено', 'chat.disconnected': 'Отключено', 'chat.no_rooms': 'Переписок пока нет', 'chat.task_fallback': 'Задача', 'chat.select': 'Выберите переписку', 'chat.no_messages': 'Сообщений пока нет', 'chat.placeholder': 'Напишите сообщение... (Enter для отправки)', 'chat.conversation_fallback': 'Переписка', 'chat.direct_chat': 'Личный чат', 'chat.linked_task': 'Прикреплённый заказ', 'chat.write_btn': 'Написать', 'chat.just_now': 'только что', 'chat.min_ago': 'м', 'chat.write_specialist': 'Написать специалисту', 'chat.write_customer': 'Написать заказчику', 'chat.notif_settings': 'Настройки уведомлений', 'chat.notif_messages': 'Уведомления о новых сообщениях', 'chat.toast_title': 'Новое сообщение', 'chat.toast_open': 'Открыть чат', // Offer form 'offer.price': 'Цена', 'offer.price.placeholder': 'напр. 80', 'offer.customer_budget': 'Бюджет заказчика', 'offer.message': 'Сообщение', 'offer.optional': 'необязательно', 'offer.message.placeholder': 'Представьтесь, расскажите об опыте и почему вы лучший выбор...', 'offer.submitting': 'Отправка...', // Profile 'profile.photo': 'Фото профиля', 'profile.photo.change': 'Изменить фото', 'profile.photo.hint': 'JPEG, PNG, WebP · до 5MB', 'profile.basic_info': 'Основная информация', 'profile.phone': 'Телефон', 'profile.phone.placeholder': '+30 6901234567', 'profile.bio': 'Краткое описание', 'profile.bio.placeholder': 'Расскажите немного о себе...', 'profile.language': 'Язык', 'profile.language.hint': 'Язык интерфейса и email-уведомлений', 'profile.languages': 'Языки общения', 'profile.languages.hint': 'Выберите все языки, на которых вы общаетесь', 'profile.skills': 'Навыки', 'profile.skills.subtitle': 'Добавьте услуги, которые вы предлагаете', 'profile.skills.placeholder': 'напр. Уборка, IT, Репетиторство...', 'profile.role': 'Роль аккаунта', 'profile.role.specialist': '🔧 Помощник', 'profile.role.admin': '👑 Admin', 'profile.role.customer': '👤 Пользователь', 'profile.role.user': '👤 Пользователь', 'profile.role.change': 'Для смены роли обратитесь в службу поддержки.', 'profile.become_specialist': 'Предложить помощь', 'profile.become_specialist.desc': 'Создай профиль помощника, предложи свои навыки и начни получать задачи.', 'become_specialist.hero.title': 'Предложи свои навыки и начни зарабатывать', 'become_specialist.hero.subtitle': 'Создай профиль помощника и получай запросы от людей, которым нужна помощь', 'become_specialist.how.title': 'Как это работает', 'become_specialist.step1.title': 'Создай портфолио специалиста', 'become_specialist.step1.desc': 'Укажи категории, навыки и зону покрытия — система автоматически подберёт подходящие заказы', 'become_specialist.step2.title': 'Ищи заказы', 'become_specialist.step2.desc': 'Просматривай задачи по своим категориям в разделе «Поиск заказов»', 'become_specialist.step3.title': 'Откликайся и зарабатывай', 'become_specialist.step3.desc': 'Отправляй предложения с ценой и сроками, общайся с клиентами и выполняй заказы', 'become_specialist.benefits.title': 'Преимущества профиля специалиста', 'become_specialist.benefit1': 'Поиск заказов по вашим категориям и локации', 'become_specialist.benefit2': 'Публичный профиль с отзывами клиентов', 'become_specialist.benefit3': 'Расписание доступности, видимое клиентам', 'become_specialist.benefit4': 'Добавление в избранное клиентами', 'become_specialist.cta': 'Подробнее', 'become_specialist.free_badge': 'Бесплатная регистрация', 'profile.tab.notifications': 'Уведомления', 'profile.tab.reviews': 'Отзывы', 'profile.tab.referral': 'Рефералы', 'profile.tab.auto_response': 'Авто-ответ', 'profile.tab.site': 'Сайт', 'profile.site.title': 'Персональная страница', 'profile.site.url_label': 'Личный сайт', 'profile.site.copy': 'Копировать', 'profile.site.copied': 'Скопировано', 'profile.site.visible_title': 'Что отображается на вашей странице', 'profile.site.visible.name': 'Имя и фото', 'profile.site.visible.bio': 'Биография', 'profile.site.visible.rating': 'Рейтинг и отзывы', 'profile.site.visible.portfolio': 'Портфолио / Карточки', 'profile.site.visible.contacts': 'Контактные данные', 'profile.site.visible.full_last_name': 'Фамилия полностью', 'profile.site.visible.services': 'Карточки услуг', 'profile.site.visible.reviews': 'Раздел с отзывами', 'profile.site.visible.status': 'Статус «Готов помочь»', 'profile.site.theme': 'Тема оформления', 'profile.site.theme.dark': 'Тёмная', 'profile.site.theme.light': 'Светлая', 'profile.site.slug_taken': 'Этот адрес уже занят', 'profile.site.stats.title': 'Аналитика сайта', 'profile.site.stats.days': 'последние 30 дней', 'profile.site.stats.views': 'Просмотры', 'profile.site.stats.unique': 'Уникальные посетители', 'profile.site.stats.messages': 'Сообщения', 'profile.site.stats.total_views': 'Просмотры', 'profile.site.stats.total_unique': 'Уник. посетители', 'profile.site.stats.total_messages': 'Сообщения', 'profile.site.stats.empty': 'Данных пока нет', 'profile.site.stats.loading': 'Загрузка аналитики...', 'profile.site.stats.no_slug': 'Укажите адрес сайта, чтобы видеть статистику', 'profile.site.edit_bio_hint': 'Биография и фото настраиваются во вкладке «Основное».', 'profile.site.seo.title': 'SEO — мета-данные сайта', 'profile.site.seo.hint': 'Отображается в поисковиках. При сохранении автоматически переводится на все языки.', 'profile.site.seo.site_title': 'Заголовок страницы', 'profile.site.seo.site_title_placeholder': 'Иван Иванов — Электрик в Афинах', 'profile.site.seo.site_desc': 'Мета-описание', 'profile.site.seo.site_desc_placeholder': 'Краткое описание для поисковиков...', 'status.title': 'Статус', 'status.can_help_now_hint': 'Ваша карточка показывается выше в поиске', 'status.need_help_hint': 'Специалисты могут предложить вам помощь', 'profile.referral.title': 'Партнёрская программа', 'profile.referral.desc': 'Поделитесь ссылкой и получайте награду за каждого привлечённого пользователя.', 'profile.referral.link_label': 'Ваша реферальная ссылка', 'profile.referral.copy': 'Копировать', 'profile.referral.copied': 'Скопировано!', 'profile.referral.invited_count': 'успешных приглашений', 'profile.referral.no_code': 'Реферальный код недоступен.', 'notifications.title': 'Настройки уведомлений', 'notifications.email.new_tasks': 'Email о новых заказах', 'notifications.email.new_tasks.desc': 'Получать email, когда в ваших категориях публикуется новый заказ', 'notifications.messages.desc': 'Получать уведомление при новом входящем сообщении', 'notifications.saved': 'Настройки сохранены', 'notifications.plan_required': 'Недоступно в вашем тарифе', 'profile.tab.info': 'Основное', 'profile.tab.finance': 'Финансы', 'profile.tab.skills': 'Навыки', 'profile.tab.categories': 'Категории', 'profile.tab.geography': 'География', 'profile.specialist.categories': 'Категории работ', 'profile.specialist.categories.desc': 'Выберите категории, в которых вы работаете', 'profile.specialist.geography': 'Города покрытия', 'profile.specialist.geography.desc': 'Выберите города / районы, где вы работаете', 'profile.saving': 'Сохранение...', 'profile.upload.error': 'Ошибка загрузки фото', 'profile.saved': 'Сохранено', 'profile.tab.cards': 'Предложения', 'profile.cards.count': 'Предложения', 'profile.cards.add': 'Добавить предложение', 'profile.cards.new_title': 'Название нового предложения', 'profile.cards.placeholder': 'Например: Сантехника', 'profile.cards.create': 'Создать', 'profile.cards.cancel': 'Отмена', 'profile.cards.empty': 'У вас нет предложений', 'profile.cards.empty_hint': 'Создайте первую карточку, чтобы показать услуги клиентам.', 'profile.cards.create_first': 'Создать первое предложение', 'profile.cards.delete_confirm': 'Удалить предложение?', 'profile.background.change': 'Изменить фон', 'profile.background.remove': 'Удалить фон', 'profile.listing_requirements.published_card': 'Опубликуйте хотя бы одну карточку', 'profile.listing_requirements.title': 'Ваш профиль пока не показывается в разделе «Предложения»', 'profile.listing_requirements.hint': 'Чтобы карточка отображалась, выполните условия:', 'profile.listing_requirements.bio': 'Добавьте краткую информацию о себе в «Основное»', 'profile.listing_requirements.categories': 'Укажите хотя бы одну категорию в активной карточке', 'profile.listing_requirements.locations': 'Укажите хотя бы одну локацию в активной карточке', 'profile.listing_requirements.card_inactive': 'Сделайте карточку активной', 'profile.listing_requirements.review_pending': 'Карточка на рассмотрении', 'profile.card.visibility_issue': 'Карточка не отображается в разделе «Предложения»', 'profile.card.tab.main': 'Основное', 'profile.card.tab.skills': 'Навыки', 'profile.card.tab.categories': 'Категории', 'profile.card.tab.geography': 'География', 'profile.card.tab.portfolio': 'Галерея', 'profile.card.tab.pricelist': 'Прайс-лист', 'profile.card.pricelist.empty': 'Группы прайс-листа ещё не добавлены.', 'profile.card.pricelist.add_group': 'Добавить группу', 'profile.card.pricelist.group_title': 'Название группы', 'profile.card.pricelist.add_item': 'Добавить позицию', 'profile.card.pricelist.item_name': 'Услуга / работа', 'profile.card.pricelist.item_desc': 'Описание (необязательно)', 'profile.card.pricelist.item_price': 'Цена', 'profile.card.pricelist.item_unit': 'Единица (например /час)', 'profile.card.pricelist.save_group': 'Сохранить группу', 'profile.card.pricelist.save_item': 'Сохранить', 'profile.card.pricelist.delete_group': 'Удалить группу', 'profile.card.pricelist.delete_item': 'Удалить', 'profile.card.active': 'Активна', 'profile.card.review_pending': 'На рассмотрении', 'profile.card.review_pending_hint': 'Ваша карточка сейчас проверяется администрацией.', 'profile.card.review_submitted': 'Карточка отправлена на проверку', 'profile.card.review_approved': 'Карточка одобрена', 'profile.card.review_approved_hint': 'Ваша карточка теперь отображается в предложениях.', 'profile.card.review_rejected': 'Карточка отклонена', 'profile.card.review_rejected_hint': 'Карточка не была одобрена. Исправьте её и отправьте снова.', 'profile.card.submit_review': 'Отправить на рассмотрение', 'profile.card.withdraw_review': 'Отозвать заявку', 'profile.card.unpublish': 'Снять с публикации', 'profile.card.save': 'Сохранить', 'profile.card.saved': 'Сохранено', 'profile.card.delete': 'Удалить', 'profile.card.skill.add': 'Добавить навык', 'profile.card.photo.add': 'Добавить фото', 'profile.card.photo.uploading': 'Загрузка...', 'profile.card.photo.empty': 'Нет фотографий', 'profile.card.item.title': 'Заголовок', 'profile.card.item.desc': 'Описание', 'profile.card.item.save': 'Сохранить', 'profile.card.item.cancel': 'Отмена', 'profile.card.item.edit': 'Описание работы', 'profile.card.description': 'Описание карточки', 'profile.card.desc_auto_translate': 'При сохранении будет автоматически переведено на другие языки', 'profile.card.desc_translated': 'Есть переводы:', 'profile.upgrade.cards_limit': 'Лимит портфолио исчерпан', 'profile.upgrade.plan': 'Текущий тариф:', 'profile.upgrade.contact': 'Обратитесь к администратору для смены тарифа', 'profile.upgrade.ok': 'Понятно', 'profile.plan.title': 'Тарифный план', 'profile.balance': 'Баланс', 'profile.balance.topup': 'Пополнить баланс', 'profile.balance.topup.title': 'Пополнить баланс', 'profile.balance.topup.amount': 'Сумма (в EUR)', 'profile.balance.topup.hint': 'Выберите сумму или введите вручную', 'profile.balance.topup.submit': 'Перейти к оплате', 'profile.balance.topup.loading': 'Перенаправление...', 'profile.balance.topup.error': 'Ошибка инициализации платежа. Попробуйте снова.', 'payment.success.title': 'Оплата прошла успешно!', 'payment.success.desc': 'Ваш баланс обновлён.', 'payment.cancelled.title': 'Оплата отменена', 'payment.cancelled.desc': 'Оплата была отменена. Средства не списаны.', 'payment.pending.title': 'Обрабатывается...', 'payment.pending.desc': 'Ваш платёж в обработке.', 'payment.back_to_profile': 'Вернуться в профиль', 'profile.plan.basic': 'Базовый (бесплатный)', 'profile.plan.contact_upgrade': 'Обратитесь к администратору для подключения тарифа', 'profile.plan.cards_up_to': 'Портфолио: до', 'profile.plan.cards_unlimited': 'Портфолио: безлимитно', 'profile.plan.tasks_up_to': 'Задач: до', 'profile.plan.offers_up_to': 'Откликов: до', 'profile.plan.valid_until': 'Действителен до', 'profile.plan.no_expiry': 'Бессрочно', // Create task 'create.error': 'Ошибка при публикации', // Tasks list extras 'tasks.category.general': 'Общее', 'tasks.budget.range': 'Диапазон:', 'tasks.budget.from': 'от', 'tasks.budget.to': 'до', 'tasks.filter.reset': 'Сбросить фильтры', 'tasks.load_more': 'Загрузить ещё', 'tasks.showing': 'Результатов:', 'tasks.field.budget': 'Бюджет, €', // Admin 'admin.title': 'Панель администратора', 'admin.tab.stats': 'Статистика', 'admin.tab.users': 'Пользователи', 'admin.tab.tasks': 'Задачи', 'admin.tab.reports': 'Жалобы', 'admin.tab.moderation': 'Модерация', 'admin.stats.users': 'Пользователи', 'admin.stats.tasks': 'Задачи', 'admin.stats.offers': 'Предложения', 'admin.stats.reviews': 'Отзывы', 'admin.tasks.by_status': 'Задачи по статусу', 'admin.col.user': 'Пользователь', 'admin.col.email': 'Email', 'admin.col.role': 'Роль', 'admin.col.registered': 'Регистрация', 'admin.col.status': 'Статус', 'admin.col.title': 'Название', 'admin.col.budget': 'Бюджет', 'admin.col.created': 'Создано', 'admin.users.active': 'Активен', 'admin.users.inactive': 'Неактивен', 'admin.users.deactivate': 'Деактивировать', 'admin.users.activate': 'Активировать', 'admin.tasks.cancel': 'Отменить', 'admin.reports.none': 'Жалоб нет', 'admin.moderation.none': 'Нет предложений для проверки', 'admin.moderation.pending': 'В ожидании', 'admin.moderation.active': 'Активно', 'admin.moderation.approve': 'Одобрить', 'admin.moderation.block': 'Заблокировать', 'admin.moderation.pending_title': 'Предложения на одобрение', 'admin.moderation.active_title': 'Активные предложения', 'admin.moderation.pending_count': 'В ожидании', 'admin.moderation.active_count': 'Активные', 'admin.moderation.pending_hint': 'Новые предложения, ожидающие проверки', 'admin.moderation.active_hint': 'Активные предложения, которые можно заблокировать', 'admin.moderation.pending_empty': 'Новых предложений для одобрения нет', 'admin.moderation.active_empty': 'Активных предложений не найдено', 'admin.reports.reviewed': 'Рассмотрено', 'admin.reports.dismiss': 'Отклонить', 'admin.pagination.total': 'Всего', 'admin.users.role.change': 'Изменить роль', 'admin.users.search.placeholder': 'Поиск по имени или email...', 'admin.tasks.delete': 'Удалить', 'admin.tasks.delete.confirm': 'Удалить эту задачу навсегда?', 'admin.tasks.search.placeholder': 'Поиск по названию...', 'admin.col.customer': 'Заказчик', 'admin.col.reporter': 'Жалобщик', 'admin.col.target': 'Цель', 'admin.filter.all_roles': 'Все роли', 'admin.filter.all_statuses': 'Все статусы', 'admin.reports.target.task': 'Задача', 'admin.reports.target.user': 'Пользователь', 'admin.tab.categories': 'Категории', 'admin.tab.locations': 'Города и районы', 'admin.tab.logs': 'Логи', 'admin.tab.plans': 'Тарифы', 'admin.tab.settings': 'Настройки', 'admin.logs.subtab.ai': 'AI логи', 'admin.logs.subtab.activity': 'Активность', 'admin.logs.subtab.mail': 'Mail', 'admin.logs.subtab.notifications': 'Уведомления', 'admin.notif_logs.type': 'Тип', 'admin.notif_logs.title': 'Заголовок', 'admin.notif_logs.read': 'Прочитано', 'admin.notif_logs.empty': 'Логи уведомлений пусты', 'admin.stats.notif_chart_title': 'Уведомления по дням', 'admin.stats.notif_label': 'Уведомления', 'admin.stats.mail_chart_title': 'Email по дням', 'admin.stats.mail_label': 'Emails', 'admin.filter.all': 'Все', 'admin.stats.specialists': 'Помощники', 'admin.col.plan': 'Тариф', 'admin.back_home': 'На главную', 'admin.plans.title': 'Тарифные пакеты', 'admin.plans.add': '+ Добавить тариф', 'admin.plans.empty': 'Тарифы не созданы', 'admin.plans.form.new': 'Новый тариф', 'admin.plans.form.edit': 'Редактировать тариф', 'admin.plans.form.name': 'Название', 'admin.plans.form.price': 'Цена (EUR)', 'admin.plans.form.old_price': 'Старая цена (EUR, необязательно)', 'admin.plans.form.max_offers': 'Макс. откликов (пусто = без лимита)', 'admin.plans.form.max_cards': 'Макс. предложений (пусто = без лимита)', 'admin.plans.form.duration_days': 'Срок (дней, пусто = без истечения)', 'admin.plans.form.description': 'Описание', 'admin.plans.form.features': 'Возможности (по одной на строку)', 'admin.plans.form.notify': 'Уведомления о новых заказах', 'admin.plans.form.default': 'По умолчанию', 'admin.plans.form.active': 'Активен', 'admin.plans.form.order': 'Порядок', 'admin.plans.form.role': 'Роль', 'admin.plans.form.tier': 'Уровень', 'admin.plans.form.role.customer': 'Заказчик', 'admin.plans.form.role.specialist': 'Помощник', 'admin.plans.form.tier.free': 'Бесплатный', 'admin.plans.form.tier.pro': 'Pro', 'admin.plans.form.tier.ultimate': 'Ultimate', 'admin.plans.form.section.limits': 'Лимиты (пусто = без ограничений)', 'admin.plans.form.max_messages_day': 'Макс. сообщений/день', 'admin.plans.form.max_orders_day': 'Макс. заказов/день', 'admin.plans.form.max_skills': 'Макс. навыков', 'admin.plans.form.max_profiles': 'Макс. профилей', 'admin.plans.form.max_portfolio': 'Макс. элементов портфолио', 'admin.plans.form.section.boost': 'Множители & Буст', 'admin.plans.form.search_boost': 'Буст в поиске', 'admin.plans.form.offers_multiplier': 'Множитель откликов', 'admin.plans.form.section.contact': 'Права контактов', 'admin.plans.form.can_contact_free': 'Контакт с бесплатными пользователями', 'admin.plans.form.can_contact_pro': 'Контакт с Pro пользователями', 'admin.plans.form.can_contact_all': 'Контакт со всеми', 'admin.plans.form.can_show_contact': 'Показывать контакты', 'admin.plans.form.can_view_phone': 'Просмотр телефона', 'admin.plans.form.section.features': 'Возможности', 'admin.plans.form.upload_video': 'Загрузка видео', 'admin.plans.form.favorites': 'Избранное', 'admin.plans.form.google_calendar': 'Google Calendar', 'admin.plans.form.verified_badge': 'Знак верификации', 'admin.plans.form.highlighted_reviews': 'Выделенные отзывы', 'admin.plans.form.personal_site': 'Личный сайт', 'admin.plans.form.can_help_now': 'Статус «Могу помочь»', 'admin.plans.form.need_help': 'Статус «Нужна помощь»', 'admin.plans.form.auto_response': 'Автоответ', 'admin.plans.form.auto_match': 'Автоподбор', 'admin.plans.form.price_list': 'Прайс-лист', 'admin.plans.form.instant_dispatch_free': 'Мгновенная рассылка (бесплатно)', 'admin.plans.form.instant_dispatch_pro': 'Мгновенная рассылка (Pro)', 'admin.plans.badge.default': 'По умолчанию', 'admin.plans.badge.inactive': 'Неактивен', 'admin.plans.make_default': 'Сделать по умолчанию', 'admin.plans.tasks': 'Задач', 'admin.plans.offers': 'Откликов', 'admin.plans.cards': 'Предложения', 'admin.plans.notify_tasks': 'Уведомления о заказах', 'admin.plans.delete.confirm': 'Удалить тариф', 'admin.activity.title': 'Журнал активности', 'admin.activity.event': 'Событие', 'admin.activity.all_events': 'Все события', 'admin.activity.from': 'От', 'admin.activity.to': 'До', 'admin.activity.reset': 'Сбросить', 'admin.activity.total': 'Всего', 'admin.activity.empty': 'Нет записей', 'admin.mail.event': 'Email событие', 'admin.mail.all_events': 'Все email события', 'admin.mail.from': 'От', 'admin.mail.to': 'До', 'admin.mail.reset': 'Сбросить', 'admin.mail.total': 'Всего', 'admin.mail.empty': 'Нет email логов', 'admin.mail.recipient': 'Получатель', 'admin.mail.provider': 'Провайдер', 'admin.mail.details': 'Детали', 'admin.mail.status': 'Статус', 'admin.mail.success': 'Успешно', 'admin.mail.failed': 'Ошибка', 'admin.event.email_sent': 'Email отправлен', 'admin.event.email_failed': 'Email не отправлен', 'admin.event.email_dev': 'Email DEV fallback', 'admin.event.admin_email_test_sent': 'Тестовый email отправлен', 'admin.event.admin_email_test_failed': 'Тестовый email не отправлен', 'admin.logs.empty': 'Нет записей', 'admin.logs.date': 'Дата', 'admin.logs.provider': 'Провайдер', 'admin.logs.model': 'Модель', 'admin.logs.action': 'Действие', 'admin.logs.langs': 'Языки', 'admin.logs.in': 'Вход', 'admin.logs.out': 'Выход', 'admin.logs.total': 'Итого', 'admin.logs.ms': 'мс', 'admin.logs.status': 'Статус', 'admin.stats.activity_30d': 'Активность за 30 дней', 'admin.stats.tasks_label': 'Заявки', 'admin.stats.users_label': 'Пользователи', 'admin.stats.specialists_label': 'Помощники', 'admin.stats.tokens_title': 'Расход токенов (по месяцам)', 'admin.stats.tokens_out': 'Исходящие', 'admin.stats.tokens_in': 'Входящие', 'admin.stats.tokens_out_label': 'Исходящие токены', 'admin.stats.tokens_in_label': 'Входящие токены', 'admin.stats.cost_label': 'Стоимость (USD)', 'admin.stats.tasks_by_status': 'Заявки по статусам', 'admin.task_status.open': 'Открытые', 'admin.task_status.in_progress': 'В работе', 'admin.task_status.completed': 'Завершённые', 'admin.task_status.cancelled': 'Отменённые', 'admin.task_status.draft': 'Черновики', 'admin.settings.tab.general': 'Общие', 'admin.settings.tab.smtp': 'E-Mail', 'admin.settings.tab.notifications': 'Уведомления', 'admin.settings.tab.payment': 'Оплата', 'admin.settings.tab.referral': 'Реферальная', 'admin.settings.tab.seo': 'SEO', 'admin.settings.tab.socials': 'Соцсети', 'admin.settings.tab.telegram': 'Telegram Bot', 'admin.settings.telegram.title': 'Настройки Telegram Bot', 'admin.settings.telegram.help': 'Создайте бота через @BotFather. ID чата узнайте через @userinfobot.', 'admin.settings.telegram.bot_token': 'Bot Token', 'admin.settings.telegram.admin_chat_id': 'Chat ID администратора', 'admin.settings.telegram.admin_chat_hint': 'Сначала отправьте /start своему боту, затем узнайте chat ID через @userinfobot', 'admin.settings.telegram.channel_id': 'неиспользуется', 'admin.settings.telegram.channels_title': 'Каналы по языкам', 'admin.settings.telegram.channel_hint': 'Username публичного канала (@канал) или числовой ID', 'admin.settings.telegram.notify_registrations': 'Уведомлять о новых регистрациях', 'admin.settings.telegram.notify_registrations_hint': 'Отправлять сообщение при регистрации нового пользователя', 'admin.settings.telegram.post_new_tasks': 'Публиковать новые задания в канал', 'admin.settings.telegram.post_new_tasks_hint': 'Автоматически публиковать новые задания в Telegram-канал', 'admin.settings.telegram.test': 'Тест', 'admin.settings.telegram.verify': 'Проверить токен', 'admin.settings.telegram.test_ok': 'Соединение работает', 'admin.settings.telegram.test_fail': 'Ошибка соединения', 'admin.settings.socials.title': 'Ссылки на социальные сети', 'admin.settings.socials.hint': 'Заполненные ссылки отображаются в подвале сайта', 'admin.settings.seo.maintenance_label': 'Режим обслуживания', 'admin.settings.seo.maintenance_hint': 'Показывать страницу обслуживания всем посетителям', 'admin.settings.seo.indexing_label': 'Индексация поисковыми системами', 'admin.settings.seo.indexing_hint': 'Разрешить поисковым системам индексировать сайт', 'admin.settings.seo.head_scripts_label': 'Скрипты в (JS)', 'admin.settings.seo.head_scripts_hint': 'Выполняется на каждой странице (Google Tag Manager, аналитика и т.д.)', 'admin.settings.seo.site_title_label': 'Заголовок сайта', 'admin.settings.seo.site_description_label': 'Описание сайта (meta description)', 'admin.settings.referral.title': 'Партнёрская программа', 'admin.settings.referral.hint': 'Награждайте пользователей, приводящих новых участников.', 'admin.settings.referral.enabled_label': 'Включено', 'admin.settings.referral.enabled_hint': 'Включить / отключить выдачу наград', 'admin.settings.referral.customer_section': 'Для клиентов', 'admin.settings.referral.specialist_section': 'Для помощников', 'admin.settings.referral.plan_label': 'Тарифный план за реферала', 'admin.settings.referral.no_plan': '— без плана —', 'admin.settings.referral.plan_hint': 'Этот план будет назначен пригласившему. Если его текущий план выше — добавятся только дни.', 'admin.settings.referral.days_label': 'Дней награды', 'admin.settings.referral.days_hint': 'Количество дней, добавляемых к сроку действия плана.', 'admin.settings.general.title': 'Общие настройки', 'admin.settings.general.site_name': 'Название сайта', 'admin.settings.general.site_url': 'URL сайта', 'admin.settings.general.contact_email': 'Email для связи', 'admin.settings.general.support_phone': 'Телефон поддержки', 'admin.settings.smtp.title': 'Настройки SMTP сервера', 'admin.settings.smtp.hint': 'Используется для отправки email-уведомлений.', 'admin.settings.smtp.host': 'SMTP Хост', 'admin.settings.smtp.port': 'Порт', 'admin.settings.smtp.encryption': 'Шифрование', 'admin.settings.smtp.enc.none': 'Нет', 'admin.settings.smtp.enc.tls': 'STARTTLS (порт 587)', 'admin.settings.smtp.enc.ssl': 'SSL/TLS (порт 465)', 'admin.settings.smtp.username': 'Имя пользователя', 'admin.settings.smtp.password': 'Пароль / App Password', 'admin.settings.smtp.from_name': 'Имя отправителя', 'admin.settings.smtp.from_email': 'Email отправителя', 'admin.settings.smtp.test': 'Отправить тестовый email', 'admin.settings.smtp.sending': 'Отправка...', 'admin.settings.payment.hint': 'Данные для подключения к ePay Piraeus Bank.', 'admin.settings.env.test': 'Тест (sandbox)', 'admin.settings.env.prod': 'Боевой режим', 'admin.settings.env.label': 'Среда', 'admin.settings.merchant_id': 'Merchant ID', 'admin.settings.api_user': 'API User', 'admin.settings.api_password': 'API Password', 'admin.settings.confirm_url': 'Confirmation URL (webhook)', 'admin.settings.cancel_url': 'Cancel URL', 'admin.settings.active': 'Активен', 'admin.settings.saving': 'Сохранение...', 'admin.settings.saved': 'Сохранено', 'admin.notif.vars_hint': 'Доступные переменные в шаблонах', 'admin.notif.tmpl.not_set': 'Шаблон не настроен', 'admin.notif.tmpl.subject_label': 'Тема письма', 'admin.notif.tmpl.body_label': 'Текст письма (HTML)', 'admin.notif.tmpl.save': 'Сохранить', 'admin.notif.tmpl.close': 'Закрыть', 'admin.notif.tmpl.translate': 'Авто-перевод на другие языки', 'admin.notif.tmpl.translating': 'Перевод...', 'admin.notif.tmpl.saving': 'Сохранение...', 'admin.notif.email_verification': 'Подтверждение email адреса', 'admin.notif.registration_success': 'Успешная регистрация', 'admin.notif.password_reset': 'Восстановление пароля', 'admin.notif.new_offer': 'Новое предложение', 'admin.notif.new_task': 'Новая задача', 'admin.notif.offer_accepted': 'Предложение принято', 'admin.notif.new_message': 'Новое сообщение', 'admin.notif.offer_declined': 'Отклонение предложения', 'admin.notif.offer_other_accepted': 'Выбран другой исполнитель', 'admin.notif.task_updated': 'Изменение задания', 'admin.notif.deadline_reminder': 'Напоминание о дедлайне', 'admin.notif.task_archived': 'Автоснятие задания', 'admin.notif.referral_reward': 'Реферальная награда', // Шаблоны email для тарифов 'admin.email_template.plan_activated': 'Тарифы — активация тарифа', 'admin.email_template.plan_upgraded': 'Тарифы — повышение тарифа', 'admin.email_template.plan_downgrade_scheduled': 'Тарифы — запланированное понижение', 'admin.email_template.plan_downgrade_applied': 'Тарифы — применение понижения', 'admin.email_template.plan_renewal_reminder': 'Тарифы — напоминание о продлении', 'admin.email_template.plan_insufficient_funds': 'Тарифы — нехватка средств', // Модальное окно подтверждения тарифа 'pricing.confirm.title': 'Подтвердите выбор тарифа', 'pricing.confirm.plan': 'Тариф', 'pricing.confirm.prorated': 'Зачёт остатка', 'pricing.confirm.effective_price': 'К оплате', 'pricing.confirm.your_balance': 'Ваш баланс', 'pricing.confirm.downgrade_info': 'Переход на новый тариф произойдёт автоматически после окончания текущего периода.', 'pricing.confirm.insufficient': 'Недостаточно средств на балансе.', 'pricing.confirm.top_up': 'Пополнить', 'pricing.confirm.schedule_downgrade': 'Запланировать переход', 'pricing.confirm.pay': 'Оплатить', 'admin.user_edit.title': 'Редактирование пользователя', 'admin.user_edit.email': 'Email', 'admin.user_edit.email_verified': 'Email подтверждён', 'admin.user_edit.email_not_verified': 'Email не подтверждён', 'admin.user_edit.verify_email_btn': 'Подтвердить вручную', 'admin.user_edit.verify_email_done': 'Email подтверждён!', 'admin.user_edit.id': 'ID', 'admin.user_edit.registered': 'Регистрация', 'admin.user_edit.last_seen': 'Последний визит', 'admin.user_edit.lang': 'Язык', 'admin.user_edit.first_name': 'Имя', 'admin.user_edit.last_name': 'Фамилия', 'admin.user_edit.phone': 'Телефон', 'admin.user_edit.bio': 'О себе', 'admin.user_edit.role': 'Роль', 'admin.user_edit.plan': 'Тариф', 'admin.user_edit.no_plan': '— Без тарифа —', 'admin.user_edit.active': 'Активный аккаунт', 'admin.user_edit.published': 'Опубликована', 'admin.user_edit.balance': 'Баланс (EUR)', 'admin.user_edit.skills': 'Навыки', 'admin.user_edit.tab.profile': 'Профиль', 'admin.user_edit.tab.account': 'Аккаунт', 'admin.user_edit.tab.balance': 'Баланс', 'admin.user_edit.tab.settings': 'Настройки', 'admin.user_edit.tab.specialist': 'Предложения', 'admin.user_edit.tab.site': 'Сайт', 'admin.user_edit.plan_expires': 'Тариф истекает', 'admin.user_edit.interface_lang': 'Язык интерфейса', 'admin.user_edit.comm_languages': 'Языки общения', 'admin.user_edit.personal_site_slug': 'Персональная страница', 'admin.user_edit.show_contact_info': 'Показывать контакты', 'admin.user_edit.show_contact_info.hint': 'Видно заказчикам', 'admin.user_edit.notify_new_tasks': 'Уведомлять о новых задачах', 'admin.user_edit.notify_new_tasks.hint': 'Push и email уведомления', 'admin.user_edit.notif_messages': 'Уведомления о сообщениях', 'admin.user_edit.notif_messages.hint': 'Новые сообщения в чате', 'admin.user_edit.site_settings': 'Настройки персональной страницы', 'admin.user_edit.categories': 'Категории услуг', 'admin.user_edit.locations': 'Районы обслуживания', 'admin.user_edit.skill_placeholder': 'Новый навык...', 'admin.user_edit.add_category': '— Выберите категорию —', 'admin.user_edit.add_location': '— Выберите район —', 'admin.user_edit.specialist_cards': 'Предложения специалиста', 'admin.user_edit.no_cards': 'Предложения не найдены', 'admin.user_edit.card_title': 'Заголовок предложения', 'admin.user_edit.card_description': 'Описание', 'admin.balance.topup.btn': 'Пополнить', 'admin.balance.withdraw.btn': 'Списать', 'admin.balance.modal_hint': 'Изменения применяются сразу и фиксируются в истории', 'admin.balance.topup.title': 'Пополнение баланса', 'admin.balance.topup.amount': 'Сумма', 'admin.balance.topup.description': 'Комментарий', 'admin.balance.topup.description.placeholder': 'Например: бонус или ручное пополнение', 'admin.balance.topup.submit': 'Пополнить баланс', 'admin.balance.withdraw.title': 'Снятие баланса', 'admin.balance.withdraw.amount': 'Сумма', 'admin.balance.withdraw.description': 'Комментарий', 'admin.balance.withdraw.description.placeholder': 'Например: возврат или ручное списание', 'admin.balance.withdraw.submit': 'Списать баланс', 'admin.user_edit.role.customer': 'Заказчик', 'admin.user_edit.role.user': 'Пользователь', 'admin.user_edit.role.specialist': 'Помощник', 'admin.user_edit.role.admin': 'Администратор', 'common.refresh': 'Обновить', 'common.back_home': 'На главную', 'admin.loc.hint': 'Управление городами и районами', 'admin.loc.add_city': 'Новый город', 'admin.loc.add_district': 'Добавить район', 'admin.loc.new': 'Новая локация', 'admin.loc.edit': 'Редактировать локацию', 'admin.loc.district': 'район', 'admin.loc.empty': 'Нет локаций', 'admin.loc.delete.confirm': 'Удалить локацию? Все районы также будут удалены.', 'admin.cat.add_root': 'Новая категория', 'admin.cat.add_sub': 'Подкатегория', 'admin.cat.edit': 'Редактировать', 'admin.cat.delete': 'Удалить', 'admin.cat.delete.confirm': 'Удалить категорию? Все подкатегории также будут удалены.', 'admin.cat.slug': 'Slug', 'admin.cat.icon': 'Иконка', 'admin.cat.name_el': 'Греческий', 'admin.cat.name_en': 'Английский', 'admin.cat.name_ru': 'Русский', 'admin.cat.name_uk': 'Украинский', 'admin.cat.active': 'Активна', 'admin.cat.parent': 'Родительская категория', 'admin.cat.no_parent': 'Верхний уровень', 'admin.cat.save': 'Сохранить', 'admin.cat.cancel': 'Отмена', 'admin.cat.empty': 'Нет категорий', 'admin.cat.hint': 'Управление категориями с многоуровневой иерархией', 'admin.cat.new': 'Новая категория', 'admin.cat.subcategory': 'подкатегория', 'admin.cat.add_child': 'Добавить подкатегорию', 'admin.cat.inactive': 'Неактивна', 'admin.event.user_login': 'Вход', 'admin.event.user_register': 'Регистрация', 'admin.event.admin_user_deactivate': 'Блокировка юзера', 'admin.event.admin_user_activate': 'Разблокировка юзера', 'admin.event.admin_user_role_changed': 'Смена роли', 'admin.event.admin_task_cancelled': 'Отмена задачи', 'admin.event.admin_task_deleted': 'Удаление задачи', 'admin.event.admin_report_reviewed': 'Жалоба рассмотрена', 'admin.event.admin_report_dismissed': 'Жалоба отклонена', 'admin.event.task_created': 'Создана задача', // User status 'user.online': 'Онлайн', 'user.seen_minutes': 'был здесь {n} мин назад', 'user.seen_hours': 'был здесь {n} ч назад', 'user.seen_yesterday': 'был здесь вчера', 'user.seen_days': 'был здесь {n} дн назад', // Specialists 'specialists.title': 'Предложения', 'specialists.search': 'Поиск специалиста...', 'specialists.search.btn': 'Поиск', 'specialists.empty': 'Специалисты не найдены', 'specialists.no_bio': 'Без описания', 'specialists.view': 'Смотреть профиль', 'specialists.reviews': 'отзывов', 'specialist.favorite': 'Добавить в избранное', 'specialist.unfavorite': 'Убрать из избранного', 'specialist.site_link': 'Личный сайт', 'favorites.specialists.title': 'Избранные специалисты', 'favorites.specialists.empty': 'Вы ещё не добавили специалистов в избранное', 'nav.favorites': 'Избранное', 'nav.schedule': 'Расписание', 'nav.find_tasks': 'Поиск заказов', 'schedule.title': 'Моё расписание', 'schedule.subtitle': 'Отмечайте дни когда вы свободны или заняты — заказчики увидят вашу доступность', 'schedule.available': 'Свободен', 'schedule.busy': 'Занят', 'schedule.unset': 'Не указано', 'schedule.click_hint': '← клик меняет статус по кругу', 'schedule.range_mode': 'Выделить диапазон', 'schedule.range_from': 'С {date} — выберите конечную дату', 'schedule.click_to_set': 'Нажмите чтобы отметить', 'schedule.free': 'свободно', 'schedule.busy_count': 'занято', 'schedule.free_days': 'свободных дней', 'schedule.googleCalendar': 'Google Календарь', 'schedule.connectGoogle': 'Подключить Google Календарь', 'schedule.disconnectGoogle': 'Отключить', 'schedule.connectedAs': 'Подключено как', 'schedule.importFromGoogle': 'Синхр. из Google', 'schedule.gcalConnected': '\u2713 Google Календарь подключён', 'schedule.gcalError': 'Ошибка подключения Google Календарь', 'schedule.gcalImportDone': 'Импортировано {n} дней из Google Календарь', 'schedule.gcalAutoSyncNote': 'Изменения доступности автоматически отправляются в Google Календарь', 'schedule.gcalConnectDesc': 'Подключите Google Календарь для автоматической синхронизации расписания', 'schedule.gcalDisconnectConfirm': 'Отключить Google Календарь?', 'find_tasks.title': 'Поиск заказов', 'find_tasks.for_me': 'Для меня', 'find_tasks.all': 'Все заказы', 'find_tasks.by_category': 'По категориям', 'find_tasks.list': 'Списком', 'find_tasks.already_offered': 'Предложение отправлено', 'find_tasks.offer_now': 'Откликнуться', 'find_tasks.empty_for_me': 'Нет заказов в ваших категориях', 'find_tasks.banner_hint': 'Найдите заказы по категориям вашего портфолио', 'find_tasks.no_cards': 'Создайте портфолио специалиста, чтобы видеть подходящие заказы', 'find_tasks.add_card': 'Создать портфолио', 'find_tasks.search': 'Поиск заказов...', 'find_tasks.tasks_count': 'заданий', 'footer.tagline': 'Платформа задач для Греции', 'footer.rights': 'Все права защищены.', 'nav.privacy': 'Политика конфиденциальности', 'nav.delete_account': 'Удаление аккаунта', 'delete_account.title': 'Запрос на удаление аккаунта', 'delete_account.subtitle': 'После проверки вашего запроса мы навсегда удалим ваш аккаунт и данные в течение 30 дней.', 'delete_account.warning': 'Это действие нельзя отменить. Все ваши данные будут удалены безвозвратно.', 'delete_account.reason_label': 'Причина (необязательно)', 'delete_account.reason_placeholder': 'Расскажите, почему вы хотите удалить аккаунт...', 'delete_account.confirm_label': 'Подтверждаю, что хочу навсегда удалить свой аккаунт', 'delete_account.submit': 'Отправить запрос', 'delete_account.submitting': 'Отправка...', 'delete_account.success_title': 'Ваш запрос получен', 'delete_account.success_body': 'Мы обработаем ваш запрос в течение 30 дней и уведомим вас по email.', 'delete_account.login_required': 'Для отправки запроса на удаление необходимо войти в аккаунт.', 'delete_account.login_btn': 'Войти', // App download section 'app.download_title': 'Скачайте мобильное приложение CanHelp', 'app.download_desc': 'Всё CanHelp — всегда под рукой. Доступно для Android и iOS.', // Nav 'nav.pricing': 'Тарифы', // Pricing page 'pricing.title': 'Тарифы', 'pricing.subtitle': 'Выберите подходящий план', 'pricing.role.customer': 'Заказчик', 'pricing.role.specialist': 'Специалист', 'pricing.free': 'Бесплатно', 'pricing.per_month': 'мес', 'pricing.duration': 'Срок', 'pricing.days': 'дн.', 'pricing.current_plan': 'Ваш план', 'pricing.popular': 'Популярный', 'pricing.choose': 'Выбрать', 'pricing.your_plan': 'Активный план', 'pricing.free_default': 'По умолчанию', 'pricing.compare': 'Сравнение функций', 'pricing.feature': 'Функция', 'pricing.faq_note': 'Оплата списывается с баланса CanHelp. Пополнение доступно в разделе Оплата.', 'pricing.feat.messages': 'Сообщений / день', 'pricing.feat.orders': 'Заказов / день', 'pricing.feat.contact_all': 'Связь со всеми', 'pricing.feat.view_phone': 'Просмотр телефона', 'pricing.feat.show_contact': 'Показывать контакты', 'pricing.feat.favorites': 'Избранное', 'pricing.feat.verified_badge': 'Верифицированный бейдж', 'pricing.feat.google_calendar': 'Google Календарь', 'pricing.feat.personal_site': 'Персональный сайт', 'pricing.feat.auto_response': 'Авто-ответ', 'pricing.feat.auto_match': 'Авто-подбор', 'pricing.feat.highlighted_reviews': 'Выделенные отзывы', 'pricing.feat.portfolio': 'Элементов предложения', 'pricing.feat.cards': 'Количество предложений', 'pricing.feat.notify_tasks': 'Уведомления о новых задачах', 'pricing.feat.video': 'Видео в предложении', // Upgrade prompt 'upgrade.available_in': 'Доступно в', 'upgrade.cta': 'Улучшить', // Dashboard plan block 'dashboard.plan.title': 'Мой план', 'dashboard.plan.expires': 'Истекает через {n} дней', 'dashboard.plan.upgrade': 'Улучшить план', 'dashboard.plan.no_plan': 'Бесплатный план', 'dashboard.plan.messages': 'Сообщений сегодня', 'dashboard.plan.orders': 'Заказов сегодня', 'dashboard.plan.limits': 'Дневные лимиты', 'dashboard.plan.features': 'Функции', 'dashboard.plan.stats': 'Статистика', 'dashboard.stats.cards': 'Портфолио', 'dashboard.stats.maxCards': 'Макс. портфолио', 'dashboard.stats.portfolioItems': 'Элементы портфолио', 'dashboard.stats.maxPortfolioItems': 'Макс. элементы', 'dashboard.stats.activeOffers': 'Активные отклики', 'dashboard.stats.reviewsReceived': 'Отзывы', 'dashboard.stats.activeTasks': 'Активные задачи', 'dashboard.stats.completedTasks': 'Завершённые', 'status.need_help': 'Нужна помощь', 'status.active': 'Активен', 'status.toggle_on': 'Включить', 'status.toggle_off': 'Выключить', // FOMO 'fomo.missed_orders': 'Пропущено {n} заказов', 'fomo.missed_value': 'На сумму €{v}', 'fomo.upgrade_hint': 'Улучшите план — получайте больше заказов', 'fomo.conversion': 'Конверсия задач', 'fomo.active': 'Активные', 'fomo.with_offers': 'С офертами', 'fomo.completed': 'Завершённые', 'fomo.already_offered': '{n} специалистов уже откликнулись', 'fomo.specialist_missed': 'Вы пропустили {n} заказов', 'fomo.top_categories': 'Категории', 'fomo.offers_received': 'предложений получено', 'fomo.avg_offers': 'В среднем {n}/задача', 'fomo.completion_rate': 'завершено', // Task auto-match 'task.auto_match': 'Авто-матч', 'task.auto_match_results': 'Топ специалисты', 'task.no_offer_yet': 'Вы ещё не отправили предложение', 'task.make_offer': 'Отправить предложение', 'auto_response.title': 'Авто-ответ', 'auto_response.enabled': 'Включить авто-ответ', 'auto_response.min_budget': 'Мин. бюджет', 'auto_response.max_budget': 'Макс. бюджет', 'auto_response.default_price': 'Цена по умолчанию', 'auto_response.default_message': 'Сообщение по умолчанию', 'auto_response.max_per_day': 'Макс. авто-офертов в день', 'auto_response.save': 'Сохранить', 'auto_response.saved': 'Сохранено', 'auto_response.categories': 'Категории', 'auto_response.locations': 'Локации', // Personal site 'profile.personal_site': 'Персональный сайт', 'profile.site_slug': 'URL slug', 'profile.site_slug_hint': 'Только латинские буквы, цифры, - и _', 'profile.site_open': 'Открыть сайт', 'profile.site_preview': 'Ваш сайт', 'profile.show_contact': 'Показывать контакты', 'profile.show_contact_hint': 'Заказчики с Pro/Ultimate-планом увидят ваш телефон', // Google Calendar plan gate 'gcal.upgrade_required': 'Google Календарь требует план Pro или Ultimate', // Chat limits 'chat.limit_warning': 'Осталось {n} сообщений сегодня', 'chat.limit_reached': 'Лимит сообщений исчерпан. Улучшите план', 'chat.upgrade': 'Улучшить', // Site page 'site.member_since': 'С нами с', 'site.rating': 'Рейтинг', 'site.completed_tasks': 'Выполнено', 'site.languages': 'Языков', 'site.photos': 'фото', 'site.contact_form': 'Связаться', 'site.contact_sent': 'Сообщение отправлено!', 'site.contact_sent_desc': 'Специалист свяжется с вами в ближайшее время', 'site.contact_name': 'Имя', 'site.contact_name_ph': 'Ваше имя', 'site.contact_email_ph': 'your@email.com', 'site.contact_message': 'Сообщение', 'site.contact_message_ph': 'Опишите вашу задачу...', 'site.contact_send': 'Отправить', 'site.share': 'Поделиться', 'site.speaks_languages': 'Говорит на языках', 'site.message_sent': 'Сообщение отправлено!', 'site.message_sent_desc': 'Специалист получит его в чате', 'site.message_placeholder': 'Напишите сообщение...', 'site.write_to_chat': 'Написать в чат', 'site.auth_required_title': 'Нужна авторизация', 'site.auth_required_desc': 'Чтобы написать в чат, необходимо войти в аккаунт CanHelp.', 'site.auth_login_btn': 'Войти в аккаунт', 'site.auth_contact_form_btn': 'Написать через форму обратной связи', 'specialist.services': 'Услуги', 'portfolio.title': 'Портфолио', 'status.can_help_now': 'Готов помочь', 'common.not_found': 'Страница не найдена', 'common.anonymous': 'Анонимно', 'specialist_setup.page_title': 'Настройка профиля специалиста', 'specialist_setup.step_of': 'Шаг {current} из {total}', 'specialist_setup.next': 'Далее', 'specialist_setup.back': 'Назад', 'specialist_setup.skip': 'Пропустить', 'specialist_setup.finish': 'Завершить', 'specialist_setup.go_to_profile': 'Перейти в профиль', 'specialist_setup.browse_tasks': 'Найти задачи', 'specialist_setup.step1.title': 'Добро пожаловать!', 'specialist_setup.step1.subtitle': 'Давайте настроим ваш профиль', 'specialist_setup.step1.desc': 'Полный профиль помогает находить больше клиентов. Следуйте шагам, чтобы создать идеальный профиль специалиста.', 'specialist_setup.step1.what_next': 'Что мы сделаем:', 'specialist_setup.step1.item1': 'Заполним основную информацию', 'specialist_setup.step1.item2': 'Создадим карточку услуги', 'specialist_setup.step1.item3': 'Добавим навыки и категории', 'specialist_setup.step1.item4': 'Выберем географию обслуживания', 'specialist_setup.step1.item5': 'Загрузим фото портфолио', 'specialist_setup.step2.title': 'Базовый профиль', 'specialist_setup.step2.subtitle': 'Расскажите о себе', 'specialist_setup.step2.bio_label': 'О себе', 'specialist_setup.step2.bio_placeholder': 'Опишите ваш опыт, услуги которые вы предлагаете...', 'specialist_setup.step2.phone_label': 'Телефон', 'specialist_setup.step2.phone_placeholder': '+30 6900000000', 'specialist_setup.step2.photo_label': 'Фото профиля', 'specialist_setup.step2.photo_btn': 'Загрузить фото', 'specialist_setup.step2.photo_uploading': 'Загрузка...', 'specialist_setup.step2.photo_hint': 'Отображается в вашем профиле', 'specialist_setup.step3.title': 'Карточка услуги', 'specialist_setup.step3.subtitle': 'Создайте вашу первую карточку услуги', 'specialist_setup.step3.title_label': 'Название карточки', 'specialist_setup.step3.title_placeholder': 'Напр. Сантехник, Электрик, Уборка...', 'specialist_setup.step3.desc_label': 'Описание', 'specialist_setup.step3.desc_placeholder': 'Подробно опишите что вы предлагаете, опыт, преимущества...', 'specialist_setup.step3.title_required': 'Название обязательно', 'specialist_setup.step4.title': 'Навыки и категории', 'specialist_setup.step4.subtitle': 'Добавьте навыки и выберите категории', 'specialist_setup.step4.skills_label': 'Навыки', 'specialist_setup.step4.skills_placeholder': 'Напр. Монтаж труб...', 'specialist_setup.step4.skills_add': 'Добавить', 'specialist_setup.step4.categories_label': 'Категории', 'specialist_setup.step5.title': 'География обслуживания', 'specialist_setup.step5.subtitle': 'Где вы оказываете услуги?', 'specialist_setup.step5.hint': 'Выберите города или конкретные районы', 'specialist_setup.done.title': 'Ваш профиль готов!', 'specialist_setup.done.subtitle': 'Поздравляем! Профиль настроен', 'specialist_setup.done.desc': 'Теперь вы можете получать заказы от клиентов. Найдите задачи, которые соответствуют вашим навыкам.', // Support 'support.title': 'Поддержка', 'support.type.label': 'Тип обращения', 'support.type.bug': 'Ошибка', 'support.type.suggestion': 'Предложение', 'support.type.other': 'Другое', 'support.subject': 'Тема', 'support.subject.placeholder': 'Кратко опишите проблему...', 'support.body': 'Сообщение', 'support.body.placeholder': 'Подробно опишите проблему или предложение...', 'support.submit': 'Отправить', 'support.cancel': 'Отмена', 'support.error': 'Ошибка отправки. Попробуйте ещё раз.', 'support.sent.title': 'Запрос получен!', 'support.sent.body': 'Мы ответим на ваш email в ближайшее время.', 'support.sent.close': 'Закрыть', 'admin.tab.support': 'Поддержка', 'admin.tab.backup': 'Бэкап', 'admin.tab.translations': 'Переводы', 'admin.tab.dbcheck': 'Проверка БД', 'admin.tab.balances': 'Баланс', 'admin.tab.push': 'Push', 'admin.tab.referrals': 'Рефералы', 'admin.search': 'Поиск', 'admin.noData': 'Нет данных', 'admin.cat.order': 'Порядок', 'admin.cat.skills': 'Навыки', 'admin.plans.form.max_tasks': 'Макс. задач', 'admin.settings.referral.shared_section': 'Общие настройки рефералов', 'admin.settings.seo.title': 'SEO настройки', 'admin.backup.title': 'Бэкап', 'admin.backup.tables': 'Таблицы', 'admin.backup.exportAll': 'Экспорт всего', 'admin.backup.importAll': 'Импорт всего', 'admin.backup.exportTable': 'Экспорт таблицы', 'admin.backup.importTable': 'Импорт таблицы', 'admin.backup.exporting': 'Экспорт...', 'admin.backup.importing': 'Импорт...', 'admin.backup.exportSuccess': 'Экспорт завершён', 'admin.backup.importSuccess': 'Импорт завершён', 'admin.backup.autoBackup': 'Автобэкап', 'admin.backup.autoBackupDesc': 'Автоматический ежедневный бэкап', 'admin.backup.storedBackups': 'Сохранённые бэкапы', 'admin.backup.noStoredBackups': 'Сохранённых бэкапов нет', 'admin.backup.restore': 'Восстановить', 'admin.backup.restoreConfirm': 'Восстановить из бэкапа?', 'admin.backup.restoreSuccess': 'Восстановление завершено', 'admin.backup.restoring': 'Восстановление...', 'admin.backup.date': 'Дата', 'admin.backup.size': 'Размер', 'admin.backup.today': 'Сегодня', 'admin.backup.yesterday': 'Вчера', 'admin.balance.col.operation': 'Операция', 'admin.balance.col.amount': 'Сумма', 'admin.balance.col.result': 'Баланс', 'admin.balance.col.description': 'Описание', 'admin.balance.col.date': 'Дата', 'admin.balance.empty': 'Записей пока нет', 'admin.balance.filter.all': 'Все операции', 'admin.balance.filter.user_id': 'Фильтр по userId', 'admin.balance.kind.topup': 'Пополнение', 'admin.balance.kind.plan_purchase': 'Списание за тариф', 'admin.balance.kind.admin_topup': 'Пополнение админом', 'admin.balance.kind.admin_adjustment': 'Корректировка', 'admin.support.search': 'Поиск', 'admin.support.all_statuses': 'Все статусы', 'admin.support.all_types': 'Все типы', 'admin.support.none': 'Обращений нет', 'admin.support.reply': 'Ответить', 'admin.support.reply_placeholder': 'Введите ответ...', 'admin.support.send_reply': 'Отправить ответ', 'admin.support.cancel': 'Отмена', 'admin.support.close': 'Закрыть', 'admin.support.status.open': 'Открыто', 'admin.support.status.in_progress': 'В работе', 'admin.support.status.resolved': 'Решено', 'admin.support.status.closed': 'Закрыто', 'admin.support.your_reply': 'Ваш ответ', 'admin.user_edit.visibility_requirements.title': 'Профиль пока не попадает в «Предложения»', 'admin.user_edit.visibility_requirements.hint': 'Нужно выполнить условия видимости:', 'admin.user_edit.visibility_requirements.bio': 'Заполнить описание (bio)', 'admin.user_edit.visibility_requirements.published_card': 'Опубликовать хотя бы одну карточку', 'admin.user_edit.visibility_requirements.categories': 'Указать категорию в опубликованной карточке', 'admin.user_edit.visibility_requirements.locations': 'Указать локацию в опубликованной карточке', 'auto_response.desc': 'Автоматически отвечать на подходящие задачи', 'auto_response.budget_range': 'Бюджет задачи', 'auto_response.message_placeholder': 'Здравствуйте! Я могу помочь с этой задачей...', 'profile.background.title': 'Фон шапки профиля', 'profile.background.hint': 'Показывается в шапке публичного профиля на web и в мобильном приложении.', 'profile.photo.uploading': 'Загрузка...', 'profile.balance.history': 'Архив операций', 'profile.balance.history.last': 'Последние операции', 'profile.balance.history.empty': 'Операций пока нет', 'profile.balance.history.balance_after': 'Баланс после', 'profile.balance.history.kind.topup': 'Пополнение баланса', 'profile.balance.history.kind.plan_purchase': 'Списание за тариф', 'profile.balance.history.kind.admin_topup': 'Пополнение администратором', 'profile.balance.history.kind.admin_adjustment': 'Корректировка администратором', 'profile.plan_history.title': 'История тарифного плана', 'profile.plan_history.empty': 'История изменений тарифа пока пуста', 'profile.plan_history.expires': 'До', 'profile.plan_history.days': 'дней', 'profile.plan_history.event.activated': 'Активирован', 'profile.plan_history.event.renewed': 'Продлён', 'profile.plan_history.event.downgraded': 'Понижен', 'profile.plan_history.event.referral_reward': 'Реферальная награда', 'profile.plan_history.event.admin_change': 'Изменён администратором', 'profile.plan_history.event.expired': 'Истёк', 'profile.show_contact_desc': 'Позволяет клиентам связаться напрямую', 'profile.site.visible.price_list': 'Прайслист', 'site.pricelist': 'Прайслист', 'status.plan_required': 'Статус недоступен на текущем тарифе', 'status.admin_not_applicable': 'Для аккаунта администратора пользовательский статус не применяется' }, uk: { 'footer.slogan': 'Ваше завдання — наша турбота! Вирішуємо будь-які питання швидко і зручно.', 'footer.links': 'Посилання', 'footer.socials': 'Ми в соцмережах', 'nav.home': 'Головна', 'nav.tasks': 'Завдання', 'nav.post': '+ Опублікувати', 'nav.dashboard': 'Мої завдання', 'nav.chat': 'Повідомлення', 'nav.notifications': 'Сповіщення', 'nav.profile': 'Профіль', 'nav.admin': 'Адмінка', 'nav.specialists': 'Пропозиції', 'nav.new_task': 'Нове завдання', 'nav.login': 'Увійти', 'nav.register': 'Реєстрація', 'nav.logout': 'Вийти', 'hero.title': 'Кожен має навичку, яка може допомогти іншому', 'hero.subtitle': 'Знайди допомогу, запропонуй свої навички або заробляй, допомагаючи іншим', 'hero.cta.post': 'Знайти допомогу', 'hero.cta.browse': 'Запропонувати допомогу', 'hero.cta.specialists': 'Знайти роботу', 'hero.search.placeholder': 'Що потрібно? напр. електрик, прибирання...', 'hero.specialist.title': 'Знайдіть замовлення поруч з вами', 'hero.specialist.subtitle': 'Відкрийте замовлення у своїх категоріях і надішліть пропозицію', 'hero.specialist.cta': 'Знайти замовлення', 'hero.specialist.search.placeholder': 'Пошук замовлень... напр. електрика, прибирання', 'section.categories.specialist': 'Знайдіть замовлення за категорією', 'section.cities.specialist': 'Замовлення за містом', 'how.specialist.step1.title': 'Створіть картку спеціаліста', 'how.specialist.step1.desc': 'Вкажіть категорії, навички і райони — система знайде підходящі замовлення автоматично', 'how.specialist.step2.title': 'Знайдіть підходящі замовлення', 'how.specialist.step2.desc': 'Переглядайте замовлення у своїх категоріях і починайте роботу одразу', 'how.specialist.step3.title': 'Надішліть пропозицію і заробляйте', 'how.specialist.step3.desc': 'Подайте пропозицію з ціною і термінами, спілкуйтеся з клієнтами і виконуйте замовлення', 'stats.specialists': 'пропозиції', 'stats.tasks': 'завдань', 'stats.categories': 'категорій', 'stats.free': 'безкоштовна реєстрація', 'promo.title': 'Отримай Pro безкоштовно — тільки до кінця року', 'promo.subtitle': 'Зареєструйся зараз і користуйся тарифом Pro без оплати. Акція закінчується 31 грудня.', 'promo.cta': 'Зареєструватися', 'promo.days': 'днів', 'promo.hours': 'годин', 'promo.minutes': 'хвилин', 'promo.seconds': 'сек.', 'section.categories': 'Створи завдання у будь-якій категорії', 'section.how': 'Як це працює', 'section.recent': 'Останні завдання', 'section.all': 'Дивитись всі →', 'section.more': 'ще', 'section.cities': 'Міста і райони', 'section.community': 'Суспільний проект для всіх', 'community.subtitle': 'CanHelp — не просто маркетплейс, це спільнота взаємодопомоги. Будь-хто, хто має знання або навичку, може знайти клієнта. Будь-хто, у кого є завдання, може знайти спеціаліста.', 'community.point1.title': 'Вмієте щось робити?', 'community.point1.desc': 'Ремонт, репетиторство, дизайн, переклади, догляд — кожна навичка має цінність. Створіть профіль і знаходьте клієнтів поруч.', 'community.point2.title': 'Потрібна допомога?', 'community.point2.desc': 'Опублікуйте завдання за хвилину і отримуйте пропозиції від перевірених спеціалістів у вашому місті.', 'community.point3.title': 'Допоможіть проекту рости', 'community.point3.desc': 'CanHelp розвивається завдяки спільнотам. Поділіться посиланням з друзями і знайомими — разом ми будуємо щось корисне для всіх.', 'community.share': 'Поділитися з друзями', 'community.share.copied': 'Посилання скопійовано!', 'section.referral': 'Реферальна програма', 'referral.home.subtitle': 'Поділіться посиланням — кожен новий користувач, зареєстрований через нього, принесе вам нагороду.', 'referral.home.step1.title': 'Зареєструйтесь і отримайте посилання', 'referral.home.step1.desc': 'Створіть акаунт і знайдіть своє унікальне реферальне посилання в профілі.', 'referral.home.step2.title': 'Поділіться з друзями', 'referral.home.step2.desc': 'Надішліть посилання друзям, знайомим або опублікуйте в соціальних мережах.', 'referral.home.step3.title': 'Отримуйте нагороди', 'referral.home.step3.desc': 'Як тільки друг підтвердить email, ви автоматично отримаєте свою нагороду.', 'referral.home.cta': 'Отримати посилання', 'referral.home.badge': 'Реферальна програма', 'section.faq': 'Часті запитання', 'faq.q1': 'Як працює CanHelp?', 'faq.a1': 'Опублікуйте завдання, отримайте пропозиції від спеціалістів, виберіть найкращого і почніть співпрацю. Це швидко, просто і безкоштовно для клієнтів.', 'faq.q2': 'Скільки коштує використання платформи?', 'faq.a2': 'Реєстрація і публікація завдань повністю безкоштовні для клієнтів. Спеціалісти мають доступ до безкоштовного плану, а також до преміум-опцій.', 'faq.q3': 'Як стати спеціалістом?', 'faq.a3': 'Зареєструйтесь, перейдіть у «Стати спеціалістом», заповніть профіль навичками і категоріями і починайте отримувати завдання.', 'faq.q4': 'Як вибрати підходящого спеціаліста?', 'faq.a4': 'Оцініть відгуки, досвід, навички і портфоліо кожного спеціаліста. Спілкуйтеся через чат платформи і уточнюйте деталі до прийняття рішення.', 'faq.q5': 'Що якщо я не задоволений результатом?', 'faq.a5': 'Ви можете залишити відгук про спеціаліста і поставити оцінку від 1 до 5 зірок. Відгуки допомагають іншим користувачам вибирати перевірених професіоналів.', 'faq.q6': 'Чи можна зв\'язатись зі спеціалістом до прийняття пропозиції?', 'faq.a6': 'Так. Як тільки ви отримали пропозицію, можна відкрити чат зі спеціалістом, задати питання і уточнити всі деталі до прийняття рішення.', 'faq.q7': 'Скільки часу чекати пропозицій?', 'faq.a7': 'Як правило, протягом кількох годин. Спеціалісти отримують сповіщення про нові завдання і можуть швидко відповісти.', 'faq.q8': 'Чи можна розмістити завдання у будь-якому місті Греції?', 'faq.a8': 'Так! CanHelp охоплює всю Грецію — Афіни, Салоніки, Патри та інші міста.', 'faq.q9': 'Які види завдань є на CanHelp?', 'faq.a9': 'Ремонт, прибирання, електрика, репетиторство, дизайн, IT, переїзди, краса та багато іншого. Категорії постійно розширюються.', 'faq.q10': 'Чи є мобільний додаток?', 'faq.a10': 'Так! CanHelp доступний для Android та iOS. Завантажте додаток і керуйте всім зі свого телефону.', 'how.step1.title': 'Опублікуй завдання', 'how.step1.desc': 'Опиши що потрібно і встанови бюджет', 'how.step2.title': 'Отримай пропозиції', 'how.step2.desc': 'Спеціалісти надішлють пропозиції з ціною і термінами', 'how.step3.title': 'Обери і почни', 'how.step3.desc': 'Обери найкращого професіонала і почни співпрацю', 'tasks.title': 'завдань', 'tasks.filters': 'Фільтри', 'tasks.search': 'Пошук', 'tasks.search.placeholder': 'Назва або ключове слово...', 'tasks.search.btn': 'Пошук', 'tasks.publish': 'Опублікувати', 'tasks.category.all': 'Всі', 'tasks.category.all_in': 'Всі в', 'tasks.category.label': 'Категорія', 'tasks.location.label': 'Місто', 'tasks.location.placeholder': 'напр. Афіни', 'tasks.empty': 'Завдань не знайдено', 'tasks.empty.cta': 'Опублікуй перше', 'task.status.open': 'Відкрито', 'task.status.in_progress': 'В роботі', 'task.status.completed': 'Завершено', 'task.status.cancelled': 'Скасовано', 'task.status.draft': 'Чернетка', 'task.budget': 'Бюджет', 'task.location': 'Місцезнаходження', 'task.deadline': 'Дата початку', 'task.expires_at': 'Активно до', 'task.created_at': 'Створено', 'task.customer': 'Замовник', 'task.offer.btn': 'Надіслати пропозицію', 'task.invite.banner_title': 'Вас запросили на це завдання', 'task.invite.banner_hint': 'Замовник особисто запросив вас', 'task.invite.accept': 'Надіслати пропозицію', 'task.invite.decline': 'Відмовитися', 'offer.accept': 'Прийняти', 'offer.decline': 'Відхилити', 'task.complete': 'Завершити завдання', 'task.complete.confirm': 'Позначити завдання як виконане?', 'task.edit': 'Редагувати', 'task.status_label': 'Статус', 'task.yours': 'Ваше завдання', 'task.offer.yours': 'Ваша пропозиція', 'review.leave': 'Залишити відгук', 'review.rating': 'Оцінка', 'review.comment': 'Коментар', 'review.comment.placeholder': 'Розкажіть про свій досвід...', 'review.submit': 'Надіслати відгук', 'review.submitting': 'Надсилання...', 'review.done': 'Відгук надіслано!', 'profile.reviews': 'Відгуки', 'profile.no_reviews': 'Відгуків поки немає', 'profile.rating': 'Рейтинг', 'profile.skills.label': 'Навички', 'profile.member_since': 'Учасник з', 'task.offers': 'Пропозиції', 'task.offers.none': 'Пропозицій поки немає', 'create.title': 'Опублікувати завдання', 'create.field.title': 'Назва', 'create.field.description': 'Опис', 'create.field.category': 'Категорія', 'create.field.category.select': 'Оберіть...', 'create.field.location': 'Місцезнаходження', 'create.field.location.any': 'Де завгодно', 'create.field.location.all': 'Все місто', 'create.field.budget': 'Бюджет (€)', 'create.field.deadline': 'Дата початку', 'create.field.expires_at': 'Оголошення активне', 'create.field.expires_at.days': '{n} днів', 'create.field.budget_negotiable': 'Ціна обговорюється', 'create.field.time_slot': 'Час виконання', 'create.field.time_slot.any': 'У будь-який час', 'create.field.time_slot.morning': 'Вранці (08:00–13:00)', 'create.field.time_slot.afternoon': 'Вдень (13:00–18:00)', 'create.field.time_slot.evening': 'Ввечері (18:00–22:00)', 'create.field.time_slot.weekend': 'Вихідний', 'create.field.address': 'Адреса (необов\'язково)', 'create.field.address.district': 'Квартал', 'create.field.address.street': 'Вулиця', 'create.field.address.house': 'Будинок', 'create.field.confidential': 'Конфіденційна нотатка', 'create.field.confidential.placeholder': 'Деталі, видні тільки призначеному спеціалісту...', 'create.field.confidential.hint': 'Не відображається публічно', 'create.field.photos': 'Фотографії', 'create.field.photos.add': 'Додати фото', 'create.field.photos.uploading': 'Завантаження...', 'task.budget_negotiable': 'Ціна обговорюється', 'task.time_slot': 'Час', 'task.confidential': 'Конфід. нотатка', 'create.field.title.placeholder': 'напр. Прибирання квартири 80кв', 'create.field.description.placeholder': 'Детально опишіть що потрібно...', 'create.field.location.placeholder': 'напр. Афіни, Колонаки', 'create.field.budget.placeholder': 'напр. 100', 'create.submit': 'Опублікувати завдання', 'create.submitting': 'Публікація...', 'login.title': 'Ласкаво просимо', 'login.subtitle': 'Вхід до CanHelp', 'login.email': 'Email', 'login.password': 'Пароль', 'login.submit': 'Увійти', 'login.submitting': 'Вхід...', 'login.error': 'Невірний email або пароль', 'login.unverified.title': 'Підтвердіть ваш email', 'login.unverified.desc': 'Ми надіслали посилання для підтвердження на ваш email. Перевірте вхідні (або спам) і перейдіть за посиланням.', 'login.unverified.resend': 'Надіслати лист повторно', 'login.unverified.sending': 'Надсилання...', 'login.unverified.sent': '✓ Надіслано — перевірте вхідні', 'profile.email.verified': 'Email підтверджено', 'profile.email.not_verified': 'Email не підтверджено', 'login.no_account': 'Немає акаунту?', 'login.register_link': 'Зареєструватися', 'login.forgot_password': 'Забув пароль?', 'login.or_continue_with': 'або продовжте через', 'login.continue_google': 'Увійти через Google', 'forgot.title': 'Забув пароль', 'forgot.subtitle': 'Введіть email для отримання посилання відновлення', 'forgot.email': 'Email', 'forgot.submit': 'Надіслати посилання', 'forgot.submitting': 'Надсилання...', 'forgot.sent.title': 'Перевірте вхідні', 'forgot.sent.desc': 'Якщо акаунт з таким email існує, ми надішлемо посилання для скидання пароля.', 'forgot.back_to_login': 'Повернутися до входу', 'forgot.error': 'Не вдалося надіслати посилання. Перевірте адресу і спробуйте знову.', 'forgot.error.not_found': 'Акаунт з таким email не знайдено.', 'forgot.error.send_failed': 'Помилка надсилання листа. Спробуйте пізніше.', 'reset.title': 'Новий пароль', 'reset.subtitle': 'Введіть новий пароль', 'reset.password': 'Новий пароль', 'reset.confirm': 'Підтвердіть пароль', 'reset.submit': 'Змінити пароль', 'reset.submitting': 'Збереження...', 'reset.success': 'Пароль успішно змінено. Перенаправлення до входу...', 'reset.back_to_login': 'Повернутися до входу', 'reset.error.mismatch': 'Паролі не збігаються', 'reset.error.invalid': 'Недійсне або застаріле посилання. Запросіть нове.', 'register.title': 'Реєстрація', 'register.subtitle': 'Створити акаунт в CanHelp', 'register.first_name': 'Ім\'я', 'register.last_name': 'Прізвище', 'register.email': 'Email', 'register.password': 'Пароль (мін. 8 символів)', 'register.role': 'Роль', 'register.role.customer': 'Користувач', 'register.role.customer.desc': 'Публікую завдання', 'register.role.specialist': 'Спеціаліст', 'register.role.specialist.desc': 'Беру завдання', 'register.submit': 'Створити акаунт', 'register.submitting': 'Реєстрація...', 'register.has_account': 'Вже є акаунт?', 'register.login_link': 'Увійти', 'register.continue_google': 'Зареєструватися через Google', 'register.check_email.title': 'Перевірте пошту', 'register.check_email.desc': 'Ми надіслали посилання для підтвердження на ваш email. Перевірте вхідні (або спам) і перейдіть за посиланням.', 'register.check_email.login': 'Повернутися до входу', 'register.captcha_failed': 'Перевірка CAPTCHA не пройдена. Пройдіть перевірку безпеки та спробуйте знову.', 'dashboard.title': 'Панель управління', 'dashboard.new_task': '+ Нове завдання', 'dashboard.onboarding.title': 'Ласкаво просимо до CanHelp 👋', 'dashboard.onboarding.subtitle': 'Оберіть, з чого хочете почати.', 'dashboard.onboarding.helper.title': 'Запропонуйте свою допомогу', 'dashboard.onboarding.helper.desc': 'Заповніть анкету — навички, категорії та міста. Це займе кілька хвилин, і ви почнете отримувати замовлення.', 'dashboard.onboarding.helper.cta': 'Заповнити анкету', 'dashboard.onboarding.requester.title': 'Потрібна допомога?', 'dashboard.onboarding.requester.desc': 'Опублікуйте завдання — помічники надішлють вам свої пропозиції.', 'dashboard.onboarding.requester.cta': 'Опублікувати завдання', 'dashboard.my_tasks': 'Мої завдання', 'dashboard.my_offers': 'Мої пропозиції', 'dashboard.invitations': 'Запрошення на завдання', 'dashboard.offers_count': 'проп.', 'dashboard.declined_count': 'відх.', 'dashboard.completed_tasks': 'Завершені завдання', 'dashboard.completed_offers': 'Завершені пропозиції', 'dashboard.review_pending': 'Оцінка ще не залишена', 'tasks.new.top_specialists': 'Топ спеціалісти', 'tasks.new.select_category': 'Виберіть категорію, щоб побачити спеціалістів', 'tasks.new.invite': 'Запропонувати роботу', 'tasks.new.invited': 'Вибрано ✓', 'reviews.count': 'відгуків', 'filter.location': 'Локація', 'filter.language': 'Мови', 'filter.language.any': 'Будь-яка мова', 'filter.category.all': 'Всі категорії', 'user.categories': 'Категорії', 'user.work_area': 'Район роботи', 'user.specialist_cards': 'Картки послуг', 'card.skills': 'Навички', 'card.categories': 'Категорії', 'card.geography': 'Район роботи', 'card.portfolio': 'Портфоліо', 'card.close': 'Закрити', 'dashboard.tasks.empty': 'Ви не публікували завдання', 'dashboard.tasks.empty.cta': 'Опублікуйте перше', 'dashboard.tasks.add_new': 'Додати нове завдання', 'dashboard.offers.empty': 'Ви не надсилали пропозицій', 'dashboard.offers.empty.cta': 'Знайти завдання', 'dashboard.customer.specialists_title': 'Шукаєте виконавця?', 'dashboard.customer.specialists_hint': 'Переглядайте профілі спеціалістів, читайте відгуки і запрошуйте їх на свої завдання', 'dashboard.customer.specialists_cta': 'Знайти виконавця', 'dashboard.customer.how_title': 'Як це працює', 'dashboard.customer.step1': 'Створіть завдання з описом і бюджетом', 'dashboard.customer.step2': 'Спеціалісти надішлють пропозиції з ціною і термінами', 'dashboard.customer.step3': 'Оберіть підходящого і почніть роботу', 'notif.title': 'Сповіщення', 'notif.mark_all': 'Позначити всі як прочитані', 'notif.empty': 'Немає сповіщень', 'notif.type.generic': 'Сповіщення', 'notif.type.new_offer': 'Нова пропозиція', 'notif.type.offer_accepted': 'Вашу пропозицію прийнято', 'notif.type.offer_declined': 'Вашу пропозицію відхилено', 'notif.type.task_completed': 'Завдання виконано', 'notif.type.task_cancelled': 'Завдання скасовано', 'notif.type.new_message': 'Нове повідомлення', 'notif.type.new_review': 'Новий відгук', 'notif.type.task_invite': 'Запрошення на завдання', 'notif.type.referral_reward': 'Реферальна нагорода', 'notif.type.specialist_card_submitted': 'Картку надіслано на перевірку', 'notif.type.specialist_card_approved': 'Картку схвалено', 'notif.type.specialist_card_rejected': 'Картку відхилено', 'notif.body.new_offer': 'Нова пропозиція на «{title}»', 'notif.body.offer_accepted': 'Вашу пропозицію на «{title}» прийнято', 'notif.body.offer_declined': 'Вашу пропозицію на «{title}» відхилено', 'notif.body.task_invite': 'Вас запрошують на «{title}»', 'notif.body.new_review': 'Ви отримали оцінку {rating}★', 'notif.body.referral_reward': 'На ваш акаунт додано {days} днів доступу до плану «{plan}»!', 'notif.body.specialist_card_submitted': 'Картку «{title}» надіслано на перевірку', 'notif.body.specialist_card_approved': 'Картку «{title}» схвалено та опубліковано', 'notif.body.specialist_card_rejected': 'Картку «{title}» не було схвалено. Виправте її та надішліть знову.', 'offer.status.pending': 'Очікує', 'offer.status.accepted': 'Прийнято', 'offer.status.declined': 'Відхилено', 'offer.status.withdrawn': 'Відкликано', 'offer.status.other_accepted': 'Вибрано іншого виконавця', 'common.loading': 'Завантаження...', 'common.error': 'Помилка', 'common.save': 'Зберегти', 'common.saving': 'Збереження...', 'common.cancel': 'Скасувати', 'common.add': 'Додати', 'common.close': 'Закрити', 'common.edit': 'Редагувати', 'common.delete': 'Видалити', 'common.from': 'від', 'common.currency': '€', 'common.greece': 'Греція', 'chat.connected': 'Підключено', 'chat.disconnected': 'Відключено', 'chat.no_rooms': 'Переписок поки немає', 'chat.task_fallback': 'Завдання', 'chat.select': 'Виберіть переписку', 'chat.no_messages': 'Повідомлень поки немає', 'chat.placeholder': 'Напишіть повідомлення... (Enter для надсилання)', 'chat.conversation_fallback': 'Переписка', 'chat.direct_chat': 'Особистий чат', 'chat.linked_task': 'Прикріплене замовлення', 'chat.write_btn': 'Написати', 'chat.just_now': 'щойно', 'chat.min_ago': 'хв', 'chat.write_specialist': 'Написати спеціалісту', 'chat.write_customer': 'Написати замовнику', 'chat.notif_settings': 'Налаштування сповіщень', 'chat.notif_messages': 'Сповіщення про нові повідомлення', 'chat.toast_title': 'Нове повідомлення', 'chat.toast_open': 'Відкрити чат', 'offer.price': 'Ціна', 'offer.price.placeholder': 'напр. 80', 'offer.customer_budget': 'Бюджет замовника', 'offer.message': 'Повідомлення', 'offer.optional': 'необов\'язково', 'offer.message.placeholder': 'Представтеся, розкажіть про досвід і чому ви найкращий вибір...', 'offer.submitting': 'Надсилання...', 'profile.photo': 'Фото профілю', 'profile.photo.change': 'Змінити фото', 'profile.photo.hint': 'JPEG, PNG, WebP · до 5MB', 'profile.basic_info': 'Основна інформація', 'profile.phone': 'Телефон', 'profile.phone.placeholder': '+30 6901234567', 'profile.bio': 'Короткий опис', 'profile.bio.placeholder': 'Розкажіть трохи про себе...', 'profile.language': 'Мова', 'profile.language.hint': 'Мова інтерфейсу і email-сповіщень', 'profile.languages': 'Мови спілкування', 'profile.languages.hint': 'Виберіть усі мови, якими ви спілкуєтесь', 'profile.skills': 'Навички', 'profile.skills.subtitle': 'Додайте послуги, які ви пропонуєте', 'profile.skills.placeholder': 'напр. Прибирання, IT, Репетиторство...', 'profile.role': 'Роль акаунту', 'profile.role.specialist': '🔧 Помічник', 'profile.role.admin': '👑 Admin', 'profile.role.customer': '👤 Користувач', 'profile.role.user': '👤 Користувач', 'profile.role.change': 'Для зміни ролі зверніться до служби підтримки.', 'profile.become_specialist': 'Запропонувати допомогу', 'profile.become_specialist.desc': 'Створи профіль помічника, запропонуй свої навички та почни отримувати завдання.', 'become_specialist.hero.title': 'Запропонуй свої навички і почни заробляти', 'become_specialist.hero.subtitle': 'Створи профіль помічника та отримуй запити від людей, яким потрібна допомога', 'become_specialist.how.title': 'Як це працює', 'become_specialist.step1.title': 'Створи портфоліо спеціаліста', 'become_specialist.step1.desc': 'Вкажи категорії, навички і зону покриття — система автоматично підбере підходящі замовлення', 'become_specialist.step2.title': 'Шукай замовлення', 'become_specialist.step2.desc': 'Переглядай завдання по своїх категоріях у розділі «Пошук замовлень»', 'become_specialist.step3.title': 'Відгукуйся і заробляй', 'become_specialist.step3.desc': 'Надсилай пропозиції з ціною і термінами, спілкуйся з клієнтами і виконуй замовлення', 'become_specialist.benefits.title': 'Переваги профілю спеціаліста', 'become_specialist.benefit1': 'Пошук замовлень за категоріями і локацією', 'become_specialist.benefit2': 'Публічний профіль з відгуками клієнтів', 'become_specialist.benefit3': 'Розклад доступності, видимий клієнтам', 'become_specialist.benefit4': 'Додавання до обраного клієнтами', 'become_specialist.cta': 'Детальніше', 'become_specialist.free_badge': 'Безкоштовна реєстрація', 'profile.tab.notifications': 'Сповіщення', 'profile.tab.reviews': 'Відгуки', 'profile.tab.referral': 'Реферали', 'profile.tab.auto_response': 'Авто-відповідь', 'profile.tab.site': 'Сайт', 'profile.site.title': 'Персональна сторінка', 'profile.site.url_label': 'Особистий сайт', 'profile.site.copy': 'Копіювати', 'profile.site.copied': 'Скопійовано', 'profile.site.visible_title': 'Що відображається на вашій сторінці', 'profile.site.visible.name': 'Ім\'я і фото', 'profile.site.visible.bio': 'Біографія', 'profile.site.visible.rating': 'Рейтинг і відгуки', 'profile.site.visible.portfolio': 'Портфоліо / Картки', 'profile.site.visible.contacts': 'Контактні дані', 'profile.site.visible.full_last_name': 'Прізвище повністю', 'profile.site.visible.services': 'Картки послуг', 'profile.site.visible.reviews': 'Розділ з відгуками', 'profile.site.visible.status': 'Статус «Готовий допомогти»', 'profile.site.theme': 'Тема оформлення', 'profile.site.theme.dark': 'Темна', 'profile.site.theme.light': 'Світла', 'profile.site.slug_taken': 'Ця адреса вже зайнята', 'profile.site.stats.title': 'Аналітика сайту', 'profile.site.stats.days': 'останні 30 днів', 'profile.site.stats.views': 'Перегляди', 'profile.site.stats.unique': 'Унікальні відвідувачі', 'profile.site.stats.messages': 'Повідомлення', 'profile.site.stats.total_views': 'Перегляди', 'profile.site.stats.total_unique': 'Унік. відвідувачі', 'profile.site.stats.total_messages': 'Повідомлення', 'profile.site.stats.empty': 'Даних поки немає', 'profile.site.stats.loading': 'Завантаження аналітики...', 'profile.site.stats.no_slug': 'Вкажіть адресу сайту, щоб бачити статистику', 'profile.site.edit_bio_hint': 'Біографія і фото налаштовуються у вкладці «Основне».', 'profile.site.seo.title': 'SEO — мета-дані сайту', 'profile.site.seo.hint': 'Відображається в пошуковиках. При збереженні автоматично перекладається на всі мови.', 'profile.site.seo.site_title': 'Заголовок сторінки', 'profile.site.seo.site_title_placeholder': 'Іван Іванов — Електрик в Афінах', 'profile.site.seo.site_desc': 'Мета-опис', 'profile.site.seo.site_desc_placeholder': 'Короткий опис для пошуковиків...', 'status.title': 'Статус', 'status.can_help_now_hint': 'Ваша картка показується вище у пошуку', 'status.need_help_hint': 'Спеціалісти можуть запропонувати вам допомогу', 'profile.referral.title': 'Партнерська програма', 'profile.referral.desc': 'Поділіться посиланням і отримуйте нагороду за кожного залученого користувача.', 'profile.referral.link_label': 'Ваше реферальне посилання', 'profile.referral.copy': 'Копіювати', 'profile.referral.copied': 'Скопійовано!', 'profile.referral.invited_count': 'успішних запрошень', 'profile.referral.no_code': 'Реферальний код недоступний.', 'notifications.title': 'Налаштування сповіщень', 'notifications.email.new_tasks': 'Email про нові замовлення', 'notifications.email.new_tasks.desc': 'Отримувати email, коли у ваших категоріях публікується нове замовлення', 'notifications.messages.desc': 'Отримувати сповіщення при новому вхідному повідомленні', 'notifications.saved': 'Налаштування збережено', 'notifications.plan_required': 'Недоступно у вашому тарифі', 'profile.tab.info': 'Основне', 'profile.tab.finance': 'Фінанси', 'profile.tab.skills': 'Навички', 'profile.tab.categories': 'Категорії', 'profile.tab.geography': 'Географія', 'profile.specialist.categories': 'Категорії робіт', 'profile.specialist.categories.desc': 'Виберіть категорії, в яких ви працюєте', 'profile.specialist.geography': 'Міста покриття', 'profile.specialist.geography.desc': 'Виберіть міста / райони, де ви працюєте', 'profile.saving': 'Збереження...', 'profile.upload.error': 'Помилка завантаження фото', 'profile.saved': 'Збережено', 'profile.tab.cards': 'Пропозиції', 'profile.cards.count': 'Пропозиції', 'profile.cards.add': 'Додати пропозицію', 'profile.cards.new_title': 'Назва нової пропозиції', 'profile.cards.placeholder': 'Наприклад: Сантехніка', 'profile.cards.create': 'Створити', 'profile.cards.cancel': 'Скасувати', 'profile.cards.empty': 'У вас немає пропозицій', 'profile.cards.empty_hint': 'Створіть першу картку, щоб показати послуги клієнтам.', 'profile.cards.create_first': 'Створити першу пропозицію', 'profile.cards.delete_confirm': 'Видалити пропозицію?', 'profile.background.change': 'Змінити фон', 'profile.background.remove': 'Видалити фон', 'profile.listing_requirements.published_card': 'Опублікуйте хоча б одну картку', 'profile.listing_requirements.title': 'Ваш профіль поки не показується в розділі «Пропозиції»', 'profile.listing_requirements.hint': 'Щоб картка відображалась, виконайте умови:', 'profile.listing_requirements.bio': 'Додайте коротку інформацію про себе в «Основне»', 'profile.listing_requirements.categories': 'Укажіть хоча б одну категорію в активній картці', 'profile.listing_requirements.locations': 'Укажіть хоча б одну локацію в активній картці', 'profile.listing_requirements.card_inactive': 'Зробіть картку активною', 'profile.listing_requirements.review_pending': 'Картка на розгляді', 'profile.card.visibility_issue': 'Картка не відображається в розділі «Пропозиції»', 'profile.card.tab.main': 'Основне', 'profile.card.tab.skills': 'Навички', 'profile.card.tab.categories': 'Категорії', 'profile.card.tab.geography': 'Географія', 'profile.card.tab.portfolio': 'Галерея', 'profile.card.tab.pricelist': 'Прайс-лист', 'profile.card.pricelist.empty': 'Групи прайс-листа ще не додані.', 'profile.card.pricelist.add_group': 'Додати групу', 'profile.card.pricelist.group_title': 'Назва групи', 'profile.card.pricelist.add_item': 'Додати позицію', 'profile.card.pricelist.item_name': 'Послуга / робота', 'profile.card.pricelist.item_desc': 'Опис (необов\'язково)', 'profile.card.pricelist.item_price': 'Ціна', 'profile.card.pricelist.item_unit': 'Одиниця (наприклад /год)', 'profile.card.pricelist.save_group': 'Зберегти групу', 'profile.card.pricelist.save_item': 'Зберегти', 'profile.card.pricelist.delete_group': 'Видалити групу', 'profile.card.pricelist.delete_item': 'Видалити', 'profile.card.active': 'Активна', 'profile.card.review_pending': 'На розгляді', 'profile.card.review_pending_hint': 'Вашу картку зараз перевіряє адміністрація.', 'profile.card.review_submitted': 'Картку надіслано на перевірку', 'profile.card.review_approved': 'Картку схвалено', 'profile.card.review_approved_hint': 'Ваша картка тепер відображається в пропозиціях.', 'profile.card.review_rejected': 'Картку відхилено', 'profile.card.review_rejected_hint': 'Картку не було схвалено. Виправте її та надішліть знову.', 'profile.card.submit_review': 'Надіслати на розгляд', 'profile.card.withdraw_review': 'Відкликати заявку', 'profile.card.unpublish': 'Зняти з публікації', 'profile.card.save': 'Зберегти', 'profile.card.saved': 'Збережено', 'profile.card.delete': 'Видалити', 'profile.card.skill.add': 'Додати навичку', 'profile.card.photo.add': 'Додати фото', 'profile.card.photo.uploading': 'Завантаження...', 'profile.card.photo.empty': 'Немає фотографій', 'profile.card.item.title': 'Заголовок', 'profile.card.item.desc': 'Опис', 'profile.card.item.save': 'Зберегти', 'profile.card.item.cancel': 'Скасувати', 'profile.card.item.edit': 'Опис роботи', 'profile.card.description': 'Опис картки', 'profile.card.desc_auto_translate': 'При збереженні буде автоматично перекладено на інші мови', 'profile.card.desc_translated': 'Є переклади:', 'profile.upgrade.cards_limit': 'Ліміт портфоліо вичерпано', 'profile.upgrade.plan': 'Поточний тариф:', 'profile.upgrade.contact': 'Зверніться до адміністратора для зміни тарифу', 'profile.upgrade.ok': 'Зрозуміло', 'profile.plan.title': 'Тарифний план', 'profile.balance': 'Баланс', 'profile.balance.topup': 'Поповнити баланс', 'profile.balance.topup.title': 'Поповнити баланс', 'profile.balance.topup.amount': 'Сума (в EUR)', 'profile.balance.topup.hint': 'Виберіть суму або введіть вручну', 'profile.balance.topup.submit': 'Перейти до оплати', 'profile.balance.topup.loading': 'Перенаправлення...', 'profile.balance.topup.error': 'Помилка ініціалізації платежу. Спробуйте знову.', 'payment.success.title': 'Оплата пройшла успішно!', 'payment.success.desc': 'Ваш баланс оновлено.', 'payment.cancelled.title': 'Оплату скасовано', 'payment.cancelled.desc': 'Оплату було скасовано. Кошти не списано.', 'payment.pending.title': 'Обробляється...', 'payment.pending.desc': 'Ваш платіж в обробці.', 'payment.back_to_profile': 'Повернутися в профіль', 'profile.plan.basic': 'Базовий (безкоштовний)', 'profile.plan.contact_upgrade': 'Зверніться до адміністратора для підключення тарифу', 'profile.plan.cards_up_to': 'Портфоліо: до', 'profile.plan.cards_unlimited': 'Портфоліо: безліміт', 'profile.plan.tasks_up_to': 'Завдань: до', 'profile.plan.offers_up_to': 'Відгуків: до', 'profile.plan.valid_until': 'Дійсний до', 'profile.plan.no_expiry': 'Безстроково', 'create.error': 'Помилка при публікації', 'tasks.category.general': 'Загальне', 'tasks.budget.range': 'Діапазон:', 'tasks.budget.from': 'від', 'tasks.budget.to': 'до', 'tasks.filter.reset': 'Скинути фільтри', 'tasks.load_more': 'Завантажити ще', 'tasks.showing': 'Результатів:', 'tasks.field.budget': 'Бюджет, €', 'admin.title': 'Панель адміністратора', 'admin.tab.stats': 'Статистика', 'admin.tab.users': 'Користувачі', 'admin.tab.tasks': 'Завдання', 'admin.tab.reports': 'Скарги', 'admin.tab.moderation': 'Модерація', 'admin.stats.users': 'Користувачі', 'admin.stats.tasks': 'Завдання', 'admin.stats.offers': 'Пропозиції', 'admin.stats.reviews': 'Відгуки', 'admin.tasks.by_status': 'Завдання за статусом', 'admin.col.user': 'Користувач', 'admin.col.email': 'Email', 'admin.col.role': 'Роль', 'admin.col.registered': 'Реєстрація', 'admin.col.status': 'Статус', 'admin.col.title': 'Назва', 'admin.col.budget': 'Бюджет', 'admin.col.created': 'Створено', 'admin.users.active': 'Активний', 'admin.users.inactive': 'Неактивний', 'admin.users.deactivate': 'Деактивувати', 'admin.users.activate': 'Активувати', 'admin.tasks.cancel': 'Скасувати', 'admin.reports.none': 'Скарг немає', 'admin.moderation.none': 'Немає пропозицій для перевірки', 'admin.moderation.pending': 'В очікуванні', 'admin.moderation.active': 'Активно', 'admin.moderation.approve': 'Підтвердити', 'admin.moderation.block': 'Заблокувати', 'admin.moderation.pending_title': 'Пропозиції на підтвердження', 'admin.moderation.active_title': 'Активні пропозиції', 'admin.moderation.pending_count': 'В очікуванні', 'admin.moderation.active_count': 'Активні', 'admin.moderation.pending_hint': 'Нові пропозиції, які очікують підтвердження', 'admin.moderation.active_hint': 'Активні пропозиції, які можна заблокувати', 'admin.moderation.pending_empty': 'Немає нових пропозицій для підтвердження', 'admin.moderation.active_empty': 'Активних пропозицій не знайдено', 'admin.reports.reviewed': 'Розглянуто', 'admin.reports.dismiss': 'Відхилити', 'admin.pagination.total': 'Всього', 'admin.users.role.change': 'Змінити роль', 'admin.users.search.placeholder': 'Пошук за ім\'ям або email...', 'admin.tasks.delete': 'Видалити', 'admin.tasks.delete.confirm': 'Видалити це завдання назавжди?', 'admin.tasks.search.placeholder': 'Пошук за назвою...', 'admin.col.customer': 'Замовник', 'admin.col.reporter': 'Скаржник', 'admin.col.target': 'Ціль', 'admin.filter.all_roles': 'Всі ролі', 'admin.filter.all_statuses': 'Всі статуси', 'admin.reports.target.task': 'Завдання', 'admin.reports.target.user': 'Користувач', 'admin.tab.categories': 'Категорії', 'admin.tab.locations': 'Міста і райони', 'admin.tab.logs': 'Логи', 'admin.tab.plans': 'Тарифи', 'admin.tab.settings': 'Налаштування', 'admin.logs.subtab.ai': 'AI логи', 'admin.logs.subtab.activity': 'Активність', 'admin.logs.subtab.mail': 'Mail', 'admin.logs.subtab.notifications': 'Сповіщення', 'admin.notif_logs.type': 'Тип', 'admin.notif_logs.title': 'Заголовок', 'admin.notif_logs.read': 'Прочитано', 'admin.notif_logs.empty': 'Логи сповіщень порожні', 'admin.stats.notif_chart_title': 'Сповіщення по днях', 'admin.stats.notif_label': 'Сповіщення', 'admin.stats.mail_chart_title': 'Email по днях', 'admin.stats.mail_label': 'Emails', 'admin.filter.all': 'Всі', 'admin.stats.specialists': 'Помічники', 'admin.col.plan': 'Тариф', 'admin.back_home': 'На головну', 'admin.plans.title': 'Тарифні пакети', 'admin.plans.add': '+ Додати тариф', 'admin.plans.empty': 'Тарифи не створено', 'admin.plans.form.new': 'Новий тариф', 'admin.plans.form.edit': 'Редагувати тариф', 'admin.plans.form.name': 'Назва', 'admin.plans.form.price': 'Ціна (EUR)', 'admin.plans.form.old_price': 'Стара ціна (EUR, необов\'язково)', 'admin.plans.form.max_offers': 'Макс. відгуків (порожньо = без ліміту)', 'admin.plans.form.max_cards': 'Макс. пропозицій (порожньо = без ліміту)', 'admin.plans.form.duration_days': 'Термін (днів, порожньо = без закінчення)', 'admin.plans.form.description': 'Опис', 'admin.plans.form.features': 'Можливості (по одному на рядок)', 'admin.plans.form.notify': 'Сповіщення про нові замовлення', 'admin.plans.form.default': 'За замовчуванням', 'admin.plans.form.active': 'Активний', 'admin.plans.form.order': 'Порядок', 'admin.plans.form.role': 'Роль', 'admin.plans.form.tier': 'Рівень', 'admin.plans.form.role.customer': 'Замовник', 'admin.plans.form.role.specialist': 'Помічник', 'admin.plans.form.tier.free': 'Безкоштовний', 'admin.plans.form.tier.pro': 'Pro', 'admin.plans.form.tier.ultimate': 'Ultimate', 'admin.plans.form.section.limits': 'Ліміти (порожньо = без обмежень)', 'admin.plans.form.max_messages_day': 'Макс. повідомлень/день', 'admin.plans.form.max_orders_day': 'Макс. замовлень/день', 'admin.plans.form.max_skills': 'Макс. навичок', 'admin.plans.form.max_profiles': 'Макс. профілів', 'admin.plans.form.max_portfolio': 'Макс. елементів портфоліо', 'admin.plans.form.section.boost': 'Множники & Буст', 'admin.plans.form.search_boost': 'Буст у пошуку', 'admin.plans.form.offers_multiplier': 'Множник відгуків', 'admin.plans.form.section.contact': 'Права контактів', 'admin.plans.form.can_contact_free': 'Контакт з безкоштовними користувачами', 'admin.plans.form.can_contact_pro': 'Контакт з Pro користувачами', 'admin.plans.form.can_contact_all': 'Контакт з усіма', 'admin.plans.form.can_show_contact': 'Показувати контакти', 'admin.plans.form.can_view_phone': 'Перегляд телефону', 'admin.plans.form.section.features': 'Можливості', 'admin.plans.form.upload_video': 'Завантаження відео', 'admin.plans.form.favorites': 'Обране', 'admin.plans.form.google_calendar': 'Google Calendar', 'admin.plans.form.verified_badge': 'Знак верифікації', 'admin.plans.form.highlighted_reviews': 'Виділені відгуки', 'admin.plans.form.personal_site': 'Особистий сайт', 'admin.plans.form.can_help_now': 'Статус «Можу допомогти»', 'admin.plans.form.need_help': 'Статус «Потрібна допомога»', 'admin.plans.form.auto_response': 'Авто-відповідь', 'admin.plans.form.auto_match': 'Авто-підбір', 'admin.plans.form.price_list': 'Прайс-лист', 'admin.plans.form.instant_dispatch_free': 'Миттєва розсилка (безкоштовно)', 'admin.plans.form.instant_dispatch_pro': 'Миттєва розсилка (Pro)', 'admin.plans.badge.default': 'За замовчуванням', 'admin.plans.badge.inactive': 'Неактивний', 'admin.plans.make_default': 'Зробити за замовчуванням', 'admin.plans.tasks': 'Завдань', 'admin.plans.offers': 'Відгуків', 'admin.plans.cards': 'Пропозиції', 'admin.plans.notify_tasks': 'Сповіщення про замовлення', 'admin.plans.delete.confirm': 'Видалити тариф', 'admin.activity.title': 'Журнал активності', 'admin.activity.event': 'Подія', 'admin.activity.all_events': 'Всі події', 'admin.activity.from': 'Від', 'admin.activity.to': 'До', 'admin.activity.reset': 'Скинути', 'admin.activity.total': 'Всього', 'admin.activity.empty': 'Немає записів', 'admin.mail.event': 'Email подія', 'admin.mail.all_events': 'Всі email події', 'admin.mail.from': 'Від', 'admin.mail.to': 'До', 'admin.mail.reset': 'Скинути', 'admin.mail.total': 'Всього', 'admin.mail.empty': 'Немає email логів', 'admin.mail.recipient': 'Отримувач', 'admin.mail.provider': 'Провайдер', 'admin.mail.details': 'Деталі', 'admin.mail.status': 'Статус', 'admin.mail.success': 'Успішно', 'admin.mail.failed': 'Помилка', 'admin.event.email_sent': 'Email надіслано', 'admin.event.email_failed': 'Email не надіслано', 'admin.event.email_dev': 'Email DEV fallback', 'admin.event.admin_email_test_sent': 'Тестовий email надіслано', 'admin.event.admin_email_test_failed': 'Тестовий email не надіслано', 'admin.logs.empty': 'Немає записів', 'admin.logs.date': 'Дата', 'admin.logs.provider': 'Провайдер', 'admin.logs.model': 'Модель', 'admin.logs.action': 'Дія', 'admin.logs.langs': 'Мови', 'admin.logs.in': 'Вхід', 'admin.logs.out': 'Вихід', 'admin.logs.total': 'Разом', 'admin.logs.ms': 'мс', 'admin.logs.status': 'Статус', 'admin.stats.activity_30d': 'Активність за 30 днів', 'admin.stats.tasks_label': 'Заявки', 'admin.stats.users_label': 'Користувачі', 'admin.stats.specialists_label': 'Помічники', 'admin.stats.tokens_title': 'Витрата токенів (по місяцях)', 'admin.stats.tokens_out': 'Вихідні', 'admin.stats.tokens_in': 'Вхідні', 'admin.stats.tokens_out_label': 'Вихідні токени', 'admin.stats.tokens_in_label': 'Вхідні токени', 'admin.stats.cost_label': 'Вартість (USD)', 'admin.stats.tasks_by_status': 'Заявки за статусами', 'admin.task_status.open': 'Відкриті', 'admin.task_status.in_progress': 'В роботі', 'admin.task_status.completed': 'Завершені', 'admin.task_status.cancelled': 'Скасовані', 'admin.task_status.draft': 'Чернетки', 'admin.settings.tab.general': 'Загальні', 'admin.settings.tab.smtp': 'E-Mail', 'admin.settings.tab.notifications': 'Сповіщення', 'admin.settings.tab.payment': 'Оплата', 'admin.settings.tab.referral': 'Реферальна', 'admin.settings.tab.seo': 'SEO', 'admin.settings.tab.socials': 'Соцмережі', 'admin.settings.tab.telegram': 'Telegram Bot', 'admin.settings.telegram.title': 'Налаштування Telegram Bot', 'admin.settings.telegram.help': 'Створіть бота через @BotFather. ID чату дізнайтесь через @userinfobot.', 'admin.settings.telegram.bot_token': 'Bot Token', 'admin.settings.telegram.admin_chat_id': 'Chat ID адміністратора', 'admin.settings.telegram.admin_chat_hint': 'Спочатку надішліть /start своєму боту, потім дізнайтесь chat ID через @userinfobot', 'admin.settings.telegram.channel_id': 'невикористовується', 'admin.settings.telegram.channels_title': 'Канали за мовами', 'admin.settings.telegram.channel_hint': 'Username публічного каналу (@канал) або числовий ID', 'admin.settings.telegram.notify_registrations': 'Сповіщати про нові реєстрації', 'admin.settings.telegram.notify_registrations_hint': 'Надсилати повідомлення при реєстрації нового користувача', 'admin.settings.telegram.post_new_tasks': 'Публікувати нові завдання в канал', 'admin.settings.telegram.post_new_tasks_hint': 'Автоматично публікувати нові завдання в Telegram-канал', 'admin.settings.telegram.test': 'Тест', 'admin.settings.telegram.verify': 'Перевірити токен', 'admin.settings.telegram.test_fail': 'Помилка з\'єднання', 'admin.settings.socials.title': 'Посилання на соціальні мережі', 'admin.settings.socials.hint': 'Заповнені посилання відображаються у підвалі сайту', 'admin.settings.seo.maintenance_label': 'Режим обслуговування', 'admin.settings.seo.maintenance_hint': 'Показувати сторінку обслуговування всім відвідувачам', 'admin.settings.seo.indexing_label': 'Індексація пошуковими системами', 'admin.settings.seo.indexing_hint': 'Дозволити пошуковим системам індексувати сайт', 'admin.settings.seo.head_scripts_label': 'Скрипти в (JS)', 'admin.settings.seo.head_scripts_hint': 'Виконується на кожній сторінці (Google Tag Manager, аналітика тощо)', 'admin.settings.seo.site_title_label': 'Заголовок сайту', 'admin.settings.seo.site_description_label': 'Опис сайту (meta description)', 'admin.settings.referral.title': 'Партнерська програма', 'admin.settings.referral.hint': 'Нагороджуйте користувачів, що приводять нових учасників.', 'admin.settings.referral.enabled_label': 'Увімкнено', 'admin.settings.referral.enabled_hint': 'Увімкнути / вимкнути видачу нагород', 'admin.settings.referral.customer_section': 'Для клієнтів', 'admin.settings.referral.specialist_section': 'Для помічників', 'admin.settings.referral.plan_label': 'Тарифний план за реферала', 'admin.settings.referral.no_plan': '— без плану —', 'admin.settings.referral.plan_hint': 'Цей план буде призначений тому, хто запросив. Якщо його поточний план вищий — додадуться тільки дні.', 'admin.settings.referral.days_label': 'Днів нагороди', 'admin.settings.referral.days_hint': 'Кількість днів, що додаються до терміну дії плану.', 'admin.settings.general.title': 'Загальні налаштування', 'admin.settings.general.site_name': 'Назва сайту', 'admin.settings.general.site_url': 'URL сайту', 'admin.settings.general.contact_email': 'Email для зв\'язку', 'admin.settings.general.support_phone': 'Телефон підтримки', 'admin.settings.smtp.title': 'Налаштування SMTP сервера', 'admin.settings.smtp.hint': 'Використовується для надсилання email-сповіщень.', 'admin.settings.smtp.host': 'SMTP Хост', 'admin.settings.smtp.port': 'Порт', 'admin.settings.smtp.encryption': 'Шифрування', 'admin.settings.smtp.enc.none': 'Немає', 'admin.settings.smtp.enc.tls': 'STARTTLS (порт 587)', 'admin.settings.smtp.enc.ssl': 'SSL/TLS (порт 465)', 'admin.settings.smtp.username': 'Ім\'я користувача', 'admin.settings.smtp.password': 'Пароль / App Password', 'admin.settings.smtp.from_name': 'Ім\'я відправника', 'admin.settings.smtp.from_email': 'Email відправника', 'admin.settings.smtp.test': 'Надіслати тестовий email', 'admin.settings.smtp.sending': 'Надсилання...', 'admin.settings.payment.hint': 'Дані для підключення до ePay Piraeus Bank.', 'admin.settings.env.test': 'Тест (sandbox)', 'admin.settings.env.prod': 'Бойовий режим', 'admin.settings.env.label': 'Середовище', 'admin.settings.merchant_id': 'Merchant ID', 'admin.settings.api_user': 'API User', 'admin.settings.api_password': 'API Password', 'admin.settings.confirm_url': 'Confirmation URL (webhook)', 'admin.settings.cancel_url': 'Cancel URL', 'admin.settings.active': 'Активний', 'admin.settings.saving': 'Збереження...', 'admin.settings.saved': 'Збережено', 'admin.notif.vars_hint': 'Доступні змінні в шаблонах', 'admin.notif.tmpl.not_set': 'Шаблон не налаштовано', 'admin.notif.tmpl.subject_label': 'Тема листа', 'admin.notif.tmpl.body_label': 'Текст листа (HTML)', 'admin.notif.tmpl.save': 'Зберегти', 'admin.notif.tmpl.close': 'Закрити', 'admin.notif.tmpl.translate': 'Авто-переклад на інші мови', 'admin.notif.tmpl.translating': 'Переклад...', 'admin.notif.tmpl.saving': 'Збереження...', 'admin.notif.email_verification': 'Підтвердження email адреси', 'admin.notif.registration_success': 'Успішна реєстрація', 'admin.notif.password_reset': 'Відновлення пароля', 'admin.notif.new_offer': 'Нова пропозиція', 'admin.notif.new_task': 'Нове завдання', 'admin.notif.offer_accepted': 'Пропозицію прийнято', 'admin.notif.new_message': 'Нове повідомлення', 'admin.notif.offer_declined': 'Відхилення пропозиції', 'admin.notif.offer_other_accepted': 'Вибрано іншого виконавця', 'admin.notif.task_updated': 'Зміна завдання', 'admin.notif.deadline_reminder': 'Нагадування про дедлайн', 'admin.notif.task_archived': 'Автознняття завдання', 'admin.notif.referral_reward': 'Реферальна нагорода', 'admin.email_template.plan_activated': 'Тарифи — активація тарифу', 'admin.email_template.plan_upgraded': 'Тарифи — підвищення тарифу', 'admin.email_template.plan_downgrade_scheduled': 'Тарифи — запланований перехід', 'admin.email_template.plan_downgrade_applied': 'Тарифи — застосування переходу', 'admin.email_template.plan_renewal_reminder': 'Тарифи — нагадування про продовження', 'admin.email_template.plan_insufficient_funds': 'Тарифи — недостатньо коштів', 'pricing.confirm.title': 'Підтвердіть вибір тарифу', 'pricing.confirm.plan': 'Тариф', 'pricing.confirm.prorated': 'Залік залишку', 'pricing.confirm.effective_price': 'До оплати', 'pricing.confirm.your_balance': 'Ваш баланс', 'pricing.confirm.downgrade_info': 'Перехід на новий тариф відбудеться автоматично після закінчення поточного періоду.', 'pricing.confirm.insufficient': 'Недостатньо коштів на балансі.', 'pricing.confirm.top_up': 'Поповнити', 'pricing.confirm.schedule_downgrade': 'Запланувати перехід', 'pricing.confirm.pay': 'Оплатити', 'admin.user_edit.title': 'Редагування користувача', 'admin.user_edit.email': 'Email', 'admin.user_edit.email_verified': 'Email підтверджено', 'admin.user_edit.email_not_verified': 'Email не підтверджено', 'admin.user_edit.verify_email_btn': 'Підтвердити вручну', 'admin.user_edit.verify_email_done': 'Email підтверджено!', 'admin.user_edit.id': 'ID', 'admin.user_edit.registered': 'Реєстрація', 'admin.user_edit.last_seen': 'Останній візит', 'admin.user_edit.lang': 'Мова', 'admin.user_edit.first_name': 'Ім\'я', 'admin.user_edit.last_name': 'Прізвище', 'admin.user_edit.phone': 'Телефон', 'admin.user_edit.bio': 'Про себе', 'admin.user_edit.role': 'Роль', 'admin.user_edit.plan': 'Тариф', 'admin.user_edit.no_plan': '— Без тарифу —', 'admin.user_edit.active': 'Активний акаунт', 'admin.user_edit.published': 'Опублікована', 'admin.user_edit.balance': 'Баланс (EUR)', 'admin.user_edit.skills': 'Навички', 'admin.user_edit.tab.profile': 'Профіль', 'admin.user_edit.tab.account': 'Акаунт', 'admin.user_edit.tab.balance': 'Баланс', 'admin.user_edit.tab.settings': 'Налаштування', 'admin.user_edit.tab.specialist': 'Пропозиції', 'admin.user_edit.tab.site': 'Сайт', 'admin.user_edit.plan_expires': 'Тариф закінчується', 'admin.user_edit.interface_lang': 'Мова інтерфейсу', 'admin.user_edit.comm_languages': 'Мови спілкування', 'admin.user_edit.personal_site_slug': 'Персональна сторінка', 'admin.user_edit.show_contact_info': 'Показувати контакти', 'admin.user_edit.show_contact_info.hint': 'Видно замовникам', 'admin.user_edit.notify_new_tasks': 'Сповіщати про нові завдання', 'admin.user_edit.notify_new_tasks.hint': 'Push і email сповіщення', 'admin.user_edit.notif_messages': 'Сповіщення про повідомлення', 'admin.user_edit.notif_messages.hint': 'Нові повідомлення в чаті', 'admin.user_edit.site_settings': 'Налаштування персональної сторінки', 'admin.user_edit.categories': 'Категорії послуг', 'admin.user_edit.locations': 'Райони обслуговування', 'admin.user_edit.skill_placeholder': 'Нова навичка...', 'admin.user_edit.add_category': '— Виберіть категорію —', 'admin.user_edit.add_location': '— Виберіть район —', 'admin.user_edit.specialist_cards': 'Пропозиції спеціаліста', 'admin.user_edit.no_cards': 'Пропозиції не знайдено', 'admin.user_edit.card_title': 'Заголовок пропозиції', 'admin.user_edit.card_description': 'Опис', 'admin.balance.topup.btn': 'Поповнити', 'admin.balance.withdraw.btn': 'Списати', 'admin.balance.modal_hint': 'Зміни застосовуються одразу і фіксуються в історії', 'admin.balance.topup.title': 'Поповнення балансу', 'admin.balance.topup.amount': 'Сума', 'admin.balance.topup.description': 'Коментар', 'admin.balance.topup.description.placeholder': 'Наприклад: бонус або ручне поповнення', 'admin.balance.topup.submit': 'Поповнити баланс', 'admin.balance.withdraw.title': 'Зняття балансу', 'admin.balance.withdraw.amount': 'Сума', 'admin.balance.withdraw.description': 'Коментар', 'admin.balance.withdraw.description.placeholder': 'Наприклад: повернення або ручне списання', 'admin.balance.withdraw.submit': 'Списати баланс', 'admin.user_edit.role.customer': 'Замовник', 'admin.user_edit.role.user': 'Користувач', 'admin.user_edit.role.specialist': 'Помічник', 'admin.user_edit.role.admin': 'Адміністратор', 'common.refresh': 'Оновити', 'common.back_home': 'На головну', 'admin.loc.hint': 'Управління містами і районами', 'admin.loc.add_city': 'Нове місто', 'admin.loc.add_district': 'Додати район', 'admin.loc.new': 'Нова локація', 'admin.loc.edit': 'Редагувати локацію', 'admin.loc.district': 'район', 'admin.loc.empty': 'Немає локацій', 'admin.loc.delete.confirm': 'Видалити локацію? Всі райони також будуть видалені.', 'admin.cat.add_root': 'Нова категорія', 'admin.cat.add_sub': 'Підкатегорія', 'admin.cat.edit': 'Редагувати', 'admin.cat.delete': 'Видалити', 'admin.cat.delete.confirm': 'Видалити категорію? Всі підкатегорії також будуть видалені.', 'admin.cat.slug': 'Slug', 'admin.cat.icon': 'Іконка', 'admin.cat.name_el': 'Грецька', 'admin.cat.name_en': 'Англійська', 'admin.cat.name_ru': 'Російська', 'admin.cat.name_uk': 'Українська', 'admin.cat.active': 'Активна', 'admin.cat.parent': 'Батьківська категорія', 'admin.cat.no_parent': 'Верхній рівень', 'admin.cat.save': 'Зберегти', 'admin.cat.cancel': 'Скасувати', 'admin.cat.empty': 'Немає категорій', 'admin.cat.hint': 'Управління категоріями з багаторівневою ієрархією', 'admin.cat.new': 'Нова категорія', 'admin.cat.subcategory': 'підкатегорія', 'admin.cat.add_child': 'Додати підкатегорію', 'admin.cat.inactive': 'Неактивна', 'admin.event.user_login': 'Вхід', 'admin.event.user_register': 'Реєстрація', 'admin.event.admin_user_deactivate': 'Блокування юзера', 'admin.event.admin_user_activate': 'Розблокування юзера', 'admin.event.admin_user_role_changed': 'Зміна ролі', 'admin.event.admin_task_cancelled': 'Скасування завдання', 'admin.event.admin_task_deleted': 'Видалення завдання', 'admin.event.admin_report_reviewed': 'Скаргу розглянуто', 'admin.event.admin_report_dismissed': 'Скаргу відхилено', 'admin.event.task_created': 'Створено завдання', 'user.online': 'Онлайн', 'user.seen_minutes': 'був тут {n} хв тому', 'user.seen_hours': 'був тут {n} год тому', 'user.seen_yesterday': 'був тут вчора', 'user.seen_days': 'був тут {n} дн тому', 'specialists.title': 'Пропозиції', 'specialists.search': 'Пошук спеціаліста...', 'specialists.search.btn': 'Пошук', 'specialists.empty': 'Спеціалістів не знайдено', 'specialists.no_bio': 'Без опису', 'specialists.view': 'Дивитись профіль', 'specialists.reviews': 'відгуків', 'specialist.favorite': 'Додати до обраного', 'specialist.unfavorite': 'Прибрати з обраного', 'specialist.site_link': 'Особистий сайт', 'favorites.specialists.title': 'Обрані спеціалісти', 'favorites.specialists.empty': 'Ви ще не додали спеціалістів до обраного', 'nav.favorites': 'Обране', 'nav.schedule': 'Розклад', 'nav.find_tasks': 'Пошук замовлень', 'schedule.title': 'Мій розклад', 'schedule.subtitle': 'Позначайте дні коли ви вільні або зайняті — замовники побачать вашу доступність', 'schedule.available': 'Вільний', 'schedule.busy': 'Зайнятий', 'schedule.unset': 'Не вказано', 'schedule.click_hint': '← клік змінює статус по колу', 'schedule.range_mode': 'Виділити діапазон', 'schedule.range_from': 'З {date} — оберіть кінцеву дату', 'schedule.click_to_set': 'Натисніть щоб позначити', 'schedule.free': 'вільно', 'schedule.busy_count': 'зайнято', 'schedule.free_days': 'вільних днів', 'schedule.googleCalendar': 'Google Календар', 'schedule.connectGoogle': 'Підключити Google Календар', 'schedule.disconnectGoogle': 'Відключити', 'schedule.connectedAs': 'Підключено як', 'schedule.importFromGoogle': 'Синхр. з Google', 'schedule.gcalConnected': '✓ Google Календар підключено', 'schedule.gcalError': 'Помилка підключення Google Календар', 'schedule.gcalImportDone': 'Імпортовано {n} днів з Google Календар', 'schedule.gcalAutoSyncNote': 'Зміни доступності автоматично надсилаються в Google Календар', 'schedule.gcalConnectDesc': 'Підключіть Google Календар для автоматичної синхронізації розкладу', 'schedule.gcalDisconnectConfirm': 'Відключити Google Календар?', 'find_tasks.title': 'Пошук замовлень', 'find_tasks.for_me': 'Для мене', 'find_tasks.all': 'Всі замовлення', 'find_tasks.by_category': 'За категоріями', 'find_tasks.list': 'Списком', 'find_tasks.already_offered': 'Пропозицію надіслано', 'find_tasks.offer_now': 'Відгукнутися', 'find_tasks.empty_for_me': 'Немає замовлень у ваших категоріях', 'find_tasks.banner_hint': 'Знайдіть замовлення за категоріями вашого портфоліо', 'find_tasks.no_cards': 'Створіть портфоліо спеціаліста, щоб бачити підходящі замовлення', 'find_tasks.add_card': 'Створити портфоліо', 'find_tasks.search': 'Пошук замовлень...', 'find_tasks.tasks_count': 'завдань', 'footer.tagline': 'Платформа завдань для Греції', 'footer.rights': 'Всі права захищені.', 'nav.privacy': 'Політика конфіденційності', 'nav.delete_account': 'Видалення акаунту', 'delete_account.title': 'Запит на видалення акаунту', 'delete_account.subtitle': 'Після перевірки вашого запиту ми назавжди видалимо ваш акаунт і дані протягом 30 днів.', 'delete_account.warning': 'Цю дію не можна скасувати. Всі ваші дані будуть видалені безповоротно.', 'delete_account.reason_label': 'Причина (необов\'язково)', 'delete_account.reason_placeholder': 'Розкажіть, чому ви хочете видалити акаунт...', 'delete_account.confirm_label': 'Підтверджую, що хочу назавжди видалити свій акаунт', 'delete_account.submit': 'Надіслати запит', 'delete_account.submitting': 'Надсилання...', 'delete_account.success_title': 'Ваш запит отримано', 'delete_account.success_body': 'Ми опрацюємо ваш запит протягом 30 днів і повідомимо вас електронною поштою.', 'delete_account.login_required': 'Для надсилання запиту на видалення необхідно увійти в акаунт.', 'delete_account.login_btn': 'Увійти', 'app.download_title': 'Завантажте мобільний додаток CanHelp', 'app.download_desc': 'Все CanHelp — завжди під рукою. Доступно для Android та iOS.', 'nav.pricing': 'Тарифи', 'pricing.title': 'Тарифи', 'pricing.subtitle': 'Виберіть підходящий план', 'pricing.role.customer': 'Замовник', 'pricing.role.specialist': 'Спеціаліст', 'pricing.free': 'Безкоштовно', 'pricing.per_month': 'міс', 'pricing.duration': 'Термін', 'pricing.days': 'дн.', 'pricing.current_plan': 'Ваш план', 'pricing.popular': 'Популярний', 'pricing.choose': 'Вибрати', 'pricing.your_plan': 'Активний план', 'pricing.free_default': 'За замовчуванням', 'pricing.compare': 'Порівняння функцій', 'pricing.feature': 'Функція', 'pricing.faq_note': 'Оплата списується з балансу CanHelp. Поповнення доступне в розділі Оплата.', 'pricing.feat.messages': 'Повідомлень / день', 'pricing.feat.orders': 'Замовлень / день', 'pricing.feat.contact_all': 'Зв\'язок з усіма', 'pricing.feat.view_phone': 'Перегляд телефону', 'pricing.feat.show_contact': 'Показувати контакти', 'pricing.feat.favorites': 'Обране', 'pricing.feat.verified_badge': 'Верифікований бейдж', 'pricing.feat.google_calendar': 'Google Календар', 'pricing.feat.personal_site': 'Персональний сайт', 'pricing.feat.auto_response': 'Авто-відповідь', 'pricing.feat.auto_match': 'Авто-підбір', 'pricing.feat.highlighted_reviews': 'Виділені відгуки', 'pricing.feat.portfolio': 'Елементів пропозиції', 'pricing.feat.cards': 'Кількість пропозицій', 'pricing.feat.notify_tasks': 'Сповіщення про нові завдання', 'pricing.feat.video': 'Відео в пропозиції', 'upgrade.available_in': 'Доступно в', 'upgrade.cta': 'Покращити', 'dashboard.plan.title': 'Мій план', 'dashboard.plan.expires': 'Закінчується через {n} днів', 'dashboard.plan.upgrade': 'Покращити план', 'dashboard.plan.no_plan': 'Безкоштовний план', 'dashboard.plan.messages': 'Повідомлень сьогодні', 'dashboard.plan.orders': 'Замовлень сьогодні', 'dashboard.plan.limits': 'Денні ліміти', 'dashboard.plan.features': 'Функції', 'dashboard.plan.stats': 'Статистика', 'dashboard.stats.cards': 'Портфоліо', 'dashboard.stats.maxCards': 'Макс. портфоліо', 'dashboard.stats.portfolioItems': 'Елементи портфоліо', 'dashboard.stats.maxPortfolioItems': 'Макс. елементи', 'dashboard.stats.activeOffers': 'Активні відгуки', 'dashboard.stats.reviewsReceived': 'Відгуки', 'dashboard.stats.activeTasks': 'Активні завдання', 'dashboard.stats.completedTasks': 'Завершені', 'status.need_help': 'Потрібна допомога', 'status.active': 'Активний', 'status.toggle_on': 'Увімкнути', 'status.toggle_off': 'Вимкнути', 'fomo.missed_orders': 'Пропущено {n} замовлень', 'fomo.missed_value': 'На суму €{v}', 'fomo.upgrade_hint': 'Покращте план — отримуйте більше замовлень', 'fomo.conversion': 'Конверсія завдань', 'fomo.active': 'Активні', 'fomo.with_offers': 'З офертами', 'fomo.completed': 'Завершені', 'fomo.already_offered': '{n} спеціалістів вже відгукнулися', 'fomo.specialist_missed': 'Ви пропустили {n} замовлень', 'fomo.top_categories': 'Категорії', 'fomo.offers_received': 'пропозицій отримано', 'fomo.avg_offers': 'В середньому {n}/завдання', 'fomo.completion_rate': 'завершено', 'task.auto_match': 'Авто-матч', 'task.auto_match_results': 'Топ спеціалісти', 'task.no_offer_yet': 'Ви ще не надіслали пропозицію', 'task.make_offer': 'Надіслати пропозицію', 'auto_response.title': 'Авто-відповідь', 'auto_response.enabled': 'Увімкнути авто-відповідь', 'auto_response.min_budget': 'Мін. бюджет', 'auto_response.max_budget': 'Макс. бюджет', 'auto_response.default_price': 'Ціна за замовчуванням', 'auto_response.default_message': 'Повідомлення за замовчуванням', 'auto_response.max_per_day': 'Макс. авто-офертів на день', 'auto_response.save': 'Зберегти', 'auto_response.saved': 'Збережено', 'auto_response.categories': 'Категорії', 'auto_response.locations': 'Локації', 'profile.personal_site': 'Персональний сайт', 'profile.site_slug': 'URL slug', 'profile.site_slug_hint': 'Тільки латинські букви, цифри, - і _', 'profile.site_open': 'Відкрити сайт', 'profile.site_preview': 'Ваш сайт', 'profile.show_contact': 'Показувати контакти', 'profile.show_contact_hint': 'Замовники з Pro/Ultimate-планом побачать ваш телефон', 'gcal.upgrade_required': 'Google Календар вимагає план Pro або Ultimate', 'chat.limit_warning': 'Залишилось {n} повідомлень сьогодні', 'chat.limit_reached': 'Ліміт повідомлень вичерпано. Покращте план', 'chat.upgrade': 'Покращити', 'site.member_since': 'З нами з', 'site.rating': 'Рейтинг', 'site.completed_tasks': 'Виконано', 'site.languages': 'Мов', 'site.photos': 'фото', 'site.contact_form': 'Зв\'язатися', 'site.contact_sent': 'Повідомлення надіслано!', 'site.contact_sent_desc': 'Спеціаліст зв\'яжеться з вами найближчим часом', 'site.contact_name': 'Ім\'я', 'site.contact_name_ph': 'Ваше ім\'я', 'site.contact_email_ph': 'your@email.com', 'site.contact_message': 'Повідомлення', 'site.contact_message_ph': 'Опишіть ваше завдання...', 'site.contact_send': 'Надіслати', 'site.share': 'Поділитися', 'site.speaks_languages': 'Розмовляє мовами', 'site.message_sent': 'Повідомлення надіслано!', 'site.message_sent_desc': 'Спеціаліст отримає його в чаті', 'site.message_placeholder': 'Напишіть повідомлення...', 'site.write_to_chat': 'Написати в чат', 'site.auth_required_title': 'Потрібна авторизація', 'site.auth_required_desc': 'Щоб написати в чат, необхідно увійти в акаунт CanHelp.', 'site.auth_login_btn': 'Увійти в акаунт', 'site.auth_contact_form_btn': 'Написати через форму зворотного зв\'язку', 'specialist.services': 'Послуги', 'portfolio.title': 'Портфоліо', 'status.can_help_now': 'Готовий допомогти', 'common.not_found': 'Сторінку не знайдено', 'common.anonymous': 'Анонімно', 'specialist_setup.page_title': 'Налаштування профілю спеціаліста', 'specialist_setup.step_of': 'Крок {current} з {total}', 'specialist_setup.next': 'Далі', 'specialist_setup.back': 'Назад', 'specialist_setup.skip': 'Пропустити', 'specialist_setup.finish': 'Завершити', 'specialist_setup.go_to_profile': 'Перейти в профіль', 'specialist_setup.browse_tasks': 'Знайти завдання', 'specialist_setup.step1.title': 'Ласкаво просимо!', 'specialist_setup.step1.subtitle': 'Давайте налаштуємо ваш профіль', 'specialist_setup.step1.desc': 'Повний профіль допомагає знаходити більше клієнтів. Слідуйте крокам, щоб створити ідеальний профіль спеціаліста.', 'specialist_setup.step1.what_next': 'Що ми зробимо:', 'specialist_setup.step1.item1': 'Заповнимо основну інформацію', 'specialist_setup.step1.item2': 'Створимо картку послуги', 'specialist_setup.step1.item3': 'Додамо навички і категорії', 'specialist_setup.step1.item4': 'Оберемо географію обслуговування', 'specialist_setup.step1.item5': 'Завантажимо фото портфоліо', 'specialist_setup.step2.title': 'Базовий профіль', 'specialist_setup.step2.subtitle': 'Розкажіть про себе', 'specialist_setup.step2.bio_label': 'Про себе', 'specialist_setup.step2.bio_placeholder': 'Опишіть ваш досвід, послуги які ви пропонуєте...', 'specialist_setup.step2.phone_label': 'Телефон', 'specialist_setup.step2.phone_placeholder': '+30 6900000000', 'specialist_setup.step2.photo_label': 'Фото профілю', 'specialist_setup.step2.photo_btn': 'Завантажити фото', 'specialist_setup.step2.photo_uploading': 'Завантаження...', 'specialist_setup.step2.photo_hint': 'Відображається у вашому профілі', 'specialist_setup.step3.title': 'Картка послуги', 'specialist_setup.step3.subtitle': 'Створіть вашу першу картку послуги', 'specialist_setup.step3.title_label': 'Назва картки', 'specialist_setup.step3.title_placeholder': 'Напр. Сантехнік, Електрик, Прибирання...', 'specialist_setup.step3.desc_label': 'Опис', 'specialist_setup.step3.desc_placeholder': 'Детально опишіть що ви пропонуєте, досвід, переваги...', 'specialist_setup.step3.title_required': 'Назва обов\'язкова', 'specialist_setup.step4.title': 'Навички і категорії', 'specialist_setup.step4.subtitle': 'Додайте навички і виберіть категорії', 'specialist_setup.step4.skills_label': 'Навички', 'specialist_setup.step4.skills_placeholder': 'Напр. Монтаж труб...', 'specialist_setup.step4.skills_add': 'Додати', 'specialist_setup.step4.categories_label': 'Категорії', 'specialist_setup.step5.title': 'Географія обслуговування', 'specialist_setup.step5.subtitle': 'Де ви надаєте послуги?', 'specialist_setup.step5.hint': 'Виберіть міста або конкретні райони', 'specialist_setup.done.title': 'Ваш профіль готовий!', 'specialist_setup.done.subtitle': 'Вітаємо! Профіль налаштовано', 'specialist_setup.done.desc': 'Тепер ви можете отримувати замовлення від клієнтів. Знайдіть завдання, що відповідають вашим навичкам.', 'support.title': 'Підтримка', 'support.type.label': 'Тип звернення', 'support.type.bug': 'Помилка', 'support.type.suggestion': 'Пропозиція', 'support.type.other': 'Інше', 'support.subject': 'Тема', 'support.subject.placeholder': 'Коротко опишіть проблему...', 'support.body': 'Повідомлення', 'support.body.placeholder': 'Детально опишіть проблему або пропозицію...', 'support.submit': 'Надіслати', 'support.cancel': 'Скасувати', 'support.error': 'Помилка надсилання. Спробуйте ще раз.', 'support.sent.title': 'Запит отримано!', 'support.sent.body': 'Ми відповімо на ваш email якнайшвидше.', 'support.sent.close': 'Закрити', 'admin.tab.support': 'Підтримка', 'admin.tab.backup': 'Резервні копії', 'admin.tab.translations': 'Переклади', 'admin.tab.dbcheck': 'Перевірка БД', 'admin.tab.balances': 'Баланс', 'admin.tab.push': 'Push', 'admin.tab.referrals': 'Реферали', 'admin.search': 'Пошук', 'admin.noData': 'Немає даних', 'admin.cat.order': 'Порядок', 'admin.cat.skills': 'Навички', 'admin.plans.form.max_tasks': 'Макс. завдань', 'admin.settings.referral.shared_section': 'Спільні налаштування рефералів', 'admin.settings.seo.title': 'SEO налаштування', 'admin.backup.title': 'Резервні копії', 'admin.backup.tables': 'Таблиці', 'admin.backup.exportAll': 'Експорт всього', 'admin.backup.importAll': 'Імпорт всього', 'admin.backup.exportTable': 'Експорт таблиці', 'admin.backup.importTable': 'Імпорт таблиці', 'admin.backup.exporting': 'Експорт...', 'admin.backup.importing': 'Імпорт...', 'admin.backup.exportSuccess': 'Експорт завершено', 'admin.backup.importSuccess': 'Імпорт завершено', 'admin.backup.autoBackup': 'Автобекап', 'admin.backup.autoBackupDesc': 'Автоматичний щоденний бекап', 'admin.backup.storedBackups': 'Збережені бекапи', 'admin.backup.noStoredBackups': 'Збережених бекапів немає', 'admin.backup.restore': 'Відновити', 'admin.backup.restoreConfirm': 'Відновити з бекапу?', 'admin.backup.restoreSuccess': 'Відновлення завершено', 'admin.backup.restoring': 'Відновлення...', 'admin.backup.date': 'Дата', 'admin.backup.size': 'Розмір', 'admin.backup.today': 'Сьогодні', 'admin.backup.yesterday': 'Вчора', 'admin.balance.col.operation': 'Операція', 'admin.balance.col.amount': 'Сума', 'admin.balance.col.result': 'Баланс', 'admin.balance.col.description': 'Опис', 'admin.balance.col.date': 'Дата', 'admin.balance.empty': 'Записів поки немає', 'admin.balance.filter.all': 'Всі операції', 'admin.balance.filter.user_id': 'Фільтр за userId', 'admin.balance.kind.topup': 'Поповнення', 'admin.balance.kind.plan_purchase': 'Списання за тариф', 'admin.balance.kind.admin_topup': 'Поповнення адміном', 'admin.balance.kind.admin_adjustment': 'Коригування', 'admin.support.search': 'Пошук', 'admin.support.all_statuses': 'Всі статуси', 'admin.support.all_types': 'Всі типи', 'admin.support.none': 'Звернень немає', 'admin.support.reply': 'Відповісти', 'admin.support.reply_placeholder': 'Введіть відповідь...', 'admin.support.send_reply': 'Надіслати відповідь', 'admin.support.cancel': 'Скасувати', 'admin.support.close': 'Закрити', 'admin.support.status.open': 'Відкрито', 'admin.support.status.in_progress': 'В роботі', 'admin.support.status.resolved': 'Вирішено', 'admin.support.status.closed': 'Закрито', 'admin.support.your_reply': 'Ваша відповідь', 'admin.user_edit.visibility_requirements.title': 'Профіль поки не потрапляє в «Пропозиції»', 'admin.user_edit.visibility_requirements.hint': 'Потрібно виконати умови видимості:', 'admin.user_edit.visibility_requirements.bio': 'Заповнити опис (bio)', 'admin.user_edit.visibility_requirements.published_card': 'Опублікувати хоча б одну картку', 'admin.user_edit.visibility_requirements.categories': 'Вказати категорію в опублікованій картці', 'admin.user_edit.visibility_requirements.locations': 'Вказати локацію в опублікованій картці', 'auto_response.desc': 'Автоматично відповідати на відповідні завдання', 'auto_response.budget_range': 'Бюджет завдання', 'auto_response.message_placeholder': 'Вітаю! Я можу допомогти з цим завданням...', 'profile.background.title': 'Фон шапки профілю', 'profile.background.hint': 'Показується в шапці публічного профілю на web і в мобільному застосунку.', 'profile.photo.uploading': 'Завантаження...', 'profile.balance.history': 'Архів операцій', 'profile.balance.history.last': 'Останні операції', 'profile.balance.history.empty': 'Операцій поки немає', 'profile.balance.history.balance_after': 'Баланс після', 'profile.balance.history.kind.topup': 'Поповнення балансу', 'profile.balance.history.kind.plan_purchase': 'Списання за тариф', 'profile.balance.history.kind.admin_topup': 'Поповнення адміністратором', 'profile.balance.history.kind.admin_adjustment': 'Коригування адміністратором', 'profile.plan_history.title': 'Історія тарифного плану', 'profile.plan_history.empty': 'Історія змін тарифу поки порожня', 'profile.plan_history.expires': 'До', 'profile.plan_history.days': 'днів', 'profile.plan_history.event.activated': 'Активовано', 'profile.plan_history.event.renewed': 'Продовжено', 'profile.plan_history.event.downgraded': 'Понижено', 'profile.plan_history.event.referral_reward': 'Реферальна нагорода', 'profile.plan_history.event.admin_change': 'Змінено адміністратором', 'profile.plan_history.event.expired': 'Закінчився', 'profile.show_contact_desc': 'Дозволяє клієнтам зв’язатися напряму', 'profile.site.visible.price_list': 'Прайслист', 'site.pricelist': 'Прайслист', 'status.plan_required': 'Статус недоступний на поточному тарифі', 'status.admin_not_applicable': 'Для акаунта адміністратора користувацький статус не застосовується' } }; export function getTranslations(locale) { const t = translations[locale] ?? translations.el; return (key, fallback)=>t[key] ?? translations.el[key] ?? fallback ?? key; } /06undefined351357undefined315903315909undefined, /***/ 13260:   webpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource_/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; webpack/lib/util/registerExternalSerializerwebpack-sources/CachedSource xwebpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ CI: () => (/* binding */ signOut), /* harmony export */ Hh: () => (/* binding */ signUp), /* harmony export */ Jv: () => (/* binding */ signIn), /* harmony export */ wV: () => (/* binding */ useSession), /* harmony export */ yK: () => (/* binding */ authClient) /* harmony export */ }); /* harmony import */ var better_auth_react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69183); webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSource import { createAuthClient } from 'better-auth/react'; const API_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:4000'; export const authClient = createAuthClient({ baseURL: API_URL }); export const { signIn, signOut, signUp, useSession } = authClient; d4FdiE"https://api.canhelp.gr"0(0,better_auth_react__WEBPACK_IMPORTED_MODULE_0__/* .createAuthClient */ .M)buffersourcesizemapshash/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ CI: () => (/* binding */ signOut), /* harmony export */ Hh: () => (/* binding */ signUp), /* harmony export */ Jv: () => (/* binding */ signIn), /* harmony export */ wV: () => (/* binding */ useSession), /* harmony export */ yK: () => (/* binding */ authClient) /* harmony export */ }); /* harmony import */ var better_auth_react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69183); const API_URL = "https://api.canhelp.gr" || 0; const authClient = (0,better_auth_react__WEBPACK_IMPORTED_MODULE_0__/* .createAuthClient */ .M)({ baseURL: API_URL }); const { signIn, signOut, signUp, useSession } = authClient; {"finalSource":true}mapbufferedMap ConcatSourceRawSource/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ CI: () => (/* binding */ signOut), /* harmony export */ Hh: () => (/* binding */ signUp), /* harmony export */ Jv: () => (/* binding */ signIn), /* harmony export */ wV: () => (/* binding */ useSession), /* harmony export */ yK: () => (/* binding */ authClient) /* harmony export */ }); /* harmony import */ var better_auth_react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69183); ReplaceSourceRawSource import { createAuthClient } from 'better-auth/react'; const API_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:4000'; export const authClient = createAuthClient({ baseURL: API_URL }); export const { signIn, signOut, signUp, useSession } = authClient; 052undefined70100"https://api.canhelp.gr"undefined1051270undefined130136undefined156171(0,better_auth_react__WEBPACK_IMPORTED_MODULE_0__/* .createAuthClient */ .M)undefined200206undefined /***/ }) 6/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ CI: () => (/* binding */ signOut), /* harmony export */ Hh: () => (/* binding */ signUp), /* harmony export */ Jv: () => (/* binding */ signIn), /* harmony export */ wV: () => (/* binding */ useSession), /* harmony export */ yK: () => (/* binding */ authClient) /* harmony export */ }); /* harmony import */ var better_auth_react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69183); const API_URL = "https://api.canhelp.gr" || 0; const authClient = (0,better_auth_react__WEBPACK_IMPORTED_MODULE_0__/* .createAuthClient */ .M)({ baseURL: API_URL }); const { signIn, signOut, signUp, useSession } = authClient; /***/ })   /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ CI: () => (/* binding */ signOut), /* harmony export */ Hh: () => (/* binding */ signUp), /* harmony export */ Jv: () => (/* binding */ signIn), /* harmony export */ wV: () => (/* binding */ useSession), /* harmony export */ yK: () => (/* binding */ authClient) /* harmony export */ }); /* harmony import */ var better_auth_react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69183);  import { createAuthClient } from 'better-auth/react'; const API_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:4000'; export const authClient = createAuthClient({ baseURL: API_URL }); export const { signIn, signOut, signUp, useSession } = authClient; 052undefined70100"https://api.canhelp.gr"undefined1051270undefined130136undefined156171(0,better_auth_react__WEBPACK_IMPORTED_MODULE_0__/* .createAuthClient */ .M)undefined200206undefined, /***/ 14276:  4webpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource/***/ (() => { webpack/lib/util/registerExternalSerializerwebpack-sources/CachedSource webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource buffersourcesizemapshash {"finalSource":true}mapbufferedMap ReplaceSourceRawSource /***/ }) /***/ (() => { /***/ })  , /***/ 14365:  1webpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource_/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; webpack/lib/util/registerExternalSerializerwebpack-sources/CachedSource ɰwebpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSourceN // EXPORTS __webpack_require__.d(__webpack_exports__, { Header: () => (/* binding */ Header) }); // EXTERNAL MODULE: ../../node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.js var react_jsx_runtime = __webpack_require__(78157); // EXTERNAL MODULE: ../../node_modules/next/dist/client/app-dir/link.js var app_dir_link = __webpack_require__(94496); var link_default = /*#__PURE__*/__webpack_require__.n(app_dir_link); // EXTERNAL MODULE: ../../node_modules/next/dist/api/navigation.js var navigation = __webpack_require__(71159); // EXTERNAL MODULE: ./src/lib/auth.ts var auth = __webpack_require__(13260); // EXTERNAL MODULE: ./src/context/locale.tsx var context_locale = __webpack_require__(96484); // EXTERNAL MODULE: ./src/lib/formatName.ts var formatName = __webpack_require__(48178); // EXTERNAL MODULE: ../../node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js var react = __webpack_require__(31768); // EXTERNAL MODULE: ./src/lib/translations.ts var translations = __webpack_require__(12998); ;// ./src/components/LanguageSwitcher.tsx webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/CachedSource Xwebpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSourcec/* __next_internal_client_entry_do_not_use__ LanguageSwitcher auto */ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; import { useState, useRef, useEffect } from 'react'; import { useLocale } from '@/context/locale'; import { LOCALES } from '@/lib/translations'; export function LanguageSwitcher() { const { locale, setLocale } = useLocale(); const [open, setOpen] = useState(false); const ref = useRef(null); const current = LOCALES.find((l)=>l.code === locale) ?? LOCALES[0]; // Close on outside click process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ function handleClick(e) { if (ref.current && !ref.current.contains(e.target)) setOpen(false); } document.addEventListener('mousedown', handleClick); return ()=>document.removeEventListener('mousedown', handleClick); }, []); return /*#__PURE__*/ _jsxs("div", { ref: ref, className: "relative", children: [ /*#__PURE__*/ _jsxs("button", { onClick: ()=>setOpen(!open), className: "flex items-center gap-1.5 px-2.5 py-1.5 rounded-lg border border-gray-200 hover:border-green-400 hover:bg-green-50 transition text-sm font-medium text-gray-700", "aria-label": "Change language", children: [ /*#__PURE__*/ _jsx("span", { children: current.code.toUpperCase() }), /*#__PURE__*/ _jsx("svg", { className: `w-3.5 h-3.5 text-gray-400 transition-transform ${open ? 'rotate-180' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19 9l-7 7-7-7" }) }) ] }), open && /*#__PURE__*/ _jsx("div", { className: "absolute right-0 mt-1 w-40 bg-white border border-gray-200 rounded-xl shadow-lg z-50 overflow-hidden", children: LOCALES.map((loc)=>/*#__PURE__*/ _jsxs("button", { onClick: ()=>{ setLocale(loc.code); setOpen(false); }, className: `w-full flex items-center gap-2.5 px-3.5 py-2.5 text-sm hover:bg-green-50 transition ${locale === loc.code ? 'bg-green-50 text-green-700 font-medium' : 'text-gray-700'}`, children: [ /*#__PURE__*/ _jsx("span", { children: loc.label }), locale === loc.code && /*#__PURE__*/ _jsx("svg", { className: "w-3.5 h-3.5 ml-auto text-green-600", fill: "currentColor", viewBox: "0 0 20 20", children: /*#__PURE__*/ _jsx("path", { fillRule: "evenodd", d: "M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z", clipRule: "evenodd" }) }) ] }, loc.code)) }) ] }); } aF_^fS[fiGJeJh  1 5  __WEBPACK_MODULE_REFERENCE__4_5b227573654c6f63616c65225d_call_directImport_asiSafe1__.___WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__.___WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__.___WEBPACK_MODULE_REFERENCE__7_5b224c4f43414c4553225d_call_asiSafe1__.___WEBPACK_MODULE_REFERENCE__7_5b224c4f43414c4553225d_asiSafe1__.___WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__.___WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__.___WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._buffersourcesizemapshashD/* __next_internal_client_entry_do_not_use__ LanguageSwitcher auto */ function LanguageSwitcher() { const { locale, setLocale } = __WEBPACK_MODULE_REFERENCE__4_5b227573654c6f63616c65225d_call_directImport_asiSafe1__._(); const [open, setOpen] = __WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._(false); const ref = __WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._(null); const current = __WEBPACK_MODULE_REFERENCE__7_5b224c4f43414c4553225d_call_asiSafe1__._.find((l)=>l.code === locale) ?? __WEBPACK_MODULE_REFERENCE__7_5b224c4f43414c4553225d_asiSafe1__._[0]; // Close on outside click process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && __WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._(()=>{ function handleClick(e) { if (ref.current && !ref.current.contains(e.target)) setOpen(false); } document.addEventListener('mousedown', handleClick); return ()=>document.removeEventListener('mousedown', handleClick); }, []); return /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._("div", { ref: ref, className: "relative", children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._("button", { onClick: ()=>setOpen(!open), className: "flex items-center gap-1.5 px-2.5 py-1.5 rounded-lg border border-gray-200 hover:border-green-400 hover:bg-green-50 transition text-sm font-medium text-gray-700", "aria-label": "Change language", children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("span", { children: current.code.toUpperCase() }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("svg", { className: `w-3.5 h-3.5 text-gray-400 transition-transform ${open ? 'rotate-180' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19 9l-7 7-7-7" }) }) ] }), open && /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("div", { className: "absolute right-0 mt-1 w-40 bg-white border border-gray-200 rounded-xl shadow-lg z-50 overflow-hidden", children: __WEBPACK_MODULE_REFERENCE__7_5b224c4f43414c4553225d_call_asiSafe1__._.map((loc)=>/*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._("button", { onClick: ()=>{ setLocale(loc.code); setOpen(false); }, className: `w-full flex items-center gap-2.5 px-3.5 py-2.5 text-sm hover:bg-green-50 transition ${locale === loc.code ? 'bg-green-50 text-green-700 font-medium' : 'text-gray-700'}`, children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("span", { children: loc.label }), locale === loc.code && /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("svg", { className: "w-3.5 h-3.5 ml-auto text-green-600", fill: "currentColor", viewBox: "0 0 20 20", children: /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("path", { fillRule: "evenodd", d: "M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z", clipRule: "evenodd" }) }) ] }, loc.code)) }) ] }); } {"finalSource":false}mapbufferedMap ReplaceSourceRawSourcec/* __next_internal_client_entry_do_not_use__ LanguageSwitcher auto */ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; import { useState, useRef, useEffect } from 'react'; import { useLocale } from '@/context/locale'; import { LOCALES } from '@/lib/translations'; export function LanguageSwitcher() { const { locale, setLocale } = useLocale(); const [open, setOpen] = useState(false); const ref = useRef(null); const current = LOCALES.find((l)=>l.code === locale) ?? LOCALES[0]; // Close on outside click process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ function handleClick(e) { if (ref.current && !ref.current.contains(e.target)) setOpen(false); } document.addEventListener('mousedown', handleClick); return ()=>document.removeEventListener('mousedown', handleClick); }, []); return /*#__PURE__*/ _jsxs("div", { ref: ref, className: "relative", children: [ /*#__PURE__*/ _jsxs("button", { onClick: ()=>setOpen(!open), className: "flex items-center gap-1.5 px-2.5 py-1.5 rounded-lg border border-gray-200 hover:border-green-400 hover:bg-green-50 transition text-sm font-medium text-gray-700", "aria-label": "Change language", children: [ /*#__PURE__*/ _jsx("span", { children: current.code.toUpperCase() }), /*#__PURE__*/ _jsx("svg", { className: `w-3.5 h-3.5 text-gray-400 transition-transform ${open ? 'rotate-180' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19 9l-7 7-7-7" }) }) ] }), open && /*#__PURE__*/ _jsx("div", { className: "absolute right-0 mt-1 w-40 bg-white border border-gray-200 rounded-xl shadow-lg z-50 overflow-hidden", children: LOCALES.map((loc)=>/*#__PURE__*/ _jsxs("button", { onClick: ()=>{ setLocale(loc.code); setOpen(false); }, className: `w-full flex items-center gap-2.5 px-3.5 py-2.5 text-sm hover:bg-green-50 transition ${locale === loc.code ? 'bg-green-50 text-green-700 font-medium' : 'text-gray-700'}`, children: [ /*#__PURE__*/ _jsx("span", { children: loc.label }), locale === loc.code && /*#__PURE__*/ _jsx("svg", { className: "w-3.5 h-3.5 ml-auto text-green-600", fill: "currentColor", viewBox: "0 0 20 20", children: /*#__PURE__*/ _jsx("path", { fillRule: "evenodd", d: "M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z", clipRule: "evenodd" }) }) ] }, loc.code)) }) ] }); } r70132undefined134185undefined187231undefined233277undefined279285undefined350358__WEBPACK_MODULE_REFERENCE__4_5b227573654c6f63616c65225d_call_directImport_asiSafe1__._undefined391398__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined424429__WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._undefined458464__WEBPACK_MODULE_REFERENCE__7_5b224c4f43414c4553225d_call_asiSafe1__._undefined498504__WEBPACK_MODULE_REFERENCE__7_5b224c4f43414c4553225d_asiSafe1__._undefined595603__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined908912__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined10181022__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined13821385__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined15161519__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined18631866__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined21492152__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined23202326__WEBPACK_MODULE_REFERENCE__7_5b224c4f43414c4553225d_call_asiSafe1__._undefined23532357__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined28142817__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined29782981__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined32373240__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined`_Uo!C4eg> A T?A?(0,context_locale/* useLocale */.Y)(0,react.useState)(0,react.useRef)translations/* LOCALES */.YZ(0,react.useEffect)(0,react_jsx_runtime.jsxs)(0,react_jsx_runtime.jsx) // EXTERNAL MODULE: ./src/lib/api.ts var api = __webpack_require__(91864); // EXTERNAL MODULE: ../../node_modules/socket.io-client/build/esm-debug/index.js + 30 modules var esm_debug = __webpack_require__(44826); ;// ./src/hooks/useEffectiveRole.ts  nwebpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource/* __next_internal_client_entry_do_not_use__ useEffectiveRole auto */ import { useSession } from '@/lib/auth'; import { useEffect, useState } from 'react'; function readPreviewRole() { if (typeof document === 'undefined') return null; const m = document.cookie.match(/(?:^|;\s*)canhelp_preview_role=([^;]+)/); return m?.[1] ?? null; } /** * Returns the effective role for the current user. * For admins, respects the `canhelp_preview_role` cookie set by AdminRolePreview widget. * Updates reactively when the widget dispatches `canhelp:preview-role`. */ export function useEffectiveRole() { const { data: session } = useSession(); const userRole = session?.user?.role; const isAdmin = userRole === 'admin'; const [previewRole, setPreviewRole] = useState(null); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ if (!isAdmin) return; setPreviewRole(readPreviewRole()); const sync = ()=>setPreviewRole(readPreviewRole()); window.addEventListener('canhelp:preview-role', sync); document.addEventListener('visibilitychange', sync); return ()=>{ window.removeEventListener('canhelp:preview-role', sync); document.removeEventListener('visibilitychange', sync); }; }, [ isAdmin ]); if (!userRole) return null; if (isAdmin && previewRole) return previewRole; return userRole; } bFmoH:@} PX__WEBPACK_MODULE_REFERENCE__3_5b2275736553657373696f6e225d_call_directImport_asiSafe1__.___WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__.___WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._&/* __next_internal_client_entry_do_not_use__ useEffectiveRole auto */ function readPreviewRole() { if (typeof document === 'undefined') return null; const m = document.cookie.match(/(?:^|;\s*)canhelp_preview_role=([^;]+)/); return m?.[1] ?? null; } /** * Returns the effective role for the current user. * For admins, respects the `canhelp_preview_role` cookie set by AdminRolePreview widget. * Updates reactively when the widget dispatches `canhelp:preview-role`. */ function useEffectiveRole() { const { data: session } = __WEBPACK_MODULE_REFERENCE__3_5b2275736553657373696f6e225d_call_directImport_asiSafe1__._(); const userRole = session?.user?.role; const isAdmin = userRole === 'admin'; const [previewRole, setPreviewRole] = __WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._(null); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && __WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._(()=>{ if (!isAdmin) return; setPreviewRole(readPreviewRole()); const sync = ()=>setPreviewRole(readPreviewRole()); window.addEventListener('canhelp:preview-role', sync); document.addEventListener('visibilitychange', sync); return ()=>{ window.removeEventListener('canhelp:preview-role', sync); document.removeEventListener('visibilitychange', sync); }; }, [ isAdmin ]); if (!userRole) return null; if (isAdmin && previewRole) return previewRole; return userRole; }  /* __next_internal_client_entry_do_not_use__ useEffectiveRole auto */ import { useSession } from '@/lib/auth'; import { useEffect, useState } from 'react'; function readPreviewRole() { if (typeof document === 'undefined') return null; const m = document.cookie.match(/(?:^|;\s*)canhelp_preview_role=([^;]+)/); return m?.[1] ?? null; } /** * Returns the effective role for the current user. * For admins, respects the `canhelp_preview_role` cookie set by AdminRolePreview widget. * Updates reactively when the widget dispatches `canhelp:preview-role`. */ export function useEffectiveRole() { const { data: session } = useSession(); const userRole = session?.user?.role; const isAdmin = userRole === 'admin'; const [previewRole, setPreviewRole] = useState(null); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ if (!isAdmin) return; setPreviewRole(readPreviewRole()); const sync = ()=>setPreviewRole(readPreviewRole()); window.addEventListener('canhelp:preview-role', sync); document.addEventListener('visibilitychange', sync); return ()=>{ window.removeEventListener('canhelp:preview-role', sync); document.removeEventListener('visibilitychange', sync); }; }, [ isAdmin ]); if (!userRole) return null; if (isAdmin && previewRole) return previewRole; return userRole; } ^70109undefined111154undefined570576undefined637646__WEBPACK_MODULE_REFERENCE__3_5b2275736553657373696f6e225d_call_directImport_asiSafe1__._undefined777784__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined848856__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefinedE"zQ(0,auth/* useSession */.wV) // EXTERNAL MODULE: ../../node_modules/next/dist/api/app-dynamic.js var app_dynamic = __webpack_require__(47262); ;// ./src/components/Header.tsx   Hwebpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource5/* __next_internal_client_entry_do_not_use__ Header auto */ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime"; import Link from 'next/link'; import { useRouter, usePathname } from 'next/navigation'; import { useSession, signOut } from '@/lib/auth'; import { useLocale } from '@/context/locale'; import { formatShortName } from '@/lib/formatName'; import { LanguageSwitcher } from './LanguageSwitcher'; import { useState, useRef, useEffect } from 'react'; import { getUnreadCount, getMyDashboard } from '@/lib/api'; import { io } from 'socket.io-client'; import { useEffectiveRole } from '@/hooks/useEffectiveRole'; import dynamic from 'next/dynamic'; const SupportModal = dynamic(async ()=>{ typeof require.resolveWeak !== "undefined" && require.resolveWeak("./SupportModal"); }, { loadableGenerated: { modules: [ "components/Header.tsx -> " + "./SupportModal" ] }, ssr: false }); const API_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:4000'; export function Header() { const router = useRouter(); const pathname = usePathname(); const { data: session } = useSession(); const { t, locale } = useLocale(); const [menuOpen, setMenuOpen] = useState(false); const [profileOpen, setProfileOpen] = useState(false); const [supportOpen, setSupportOpen] = useState(false); const [unreadNotif, setUnreadNotif] = useState(0); const [unreadChat, setUnreadChat] = useState(0); const [msgToast, setMsgToast] = useState(null); const [planTier, setPlanTier] = useState(null); const profileRef = useRef(null); const headerRef = useRef(null); const toastTimer = useRef(null); const pathnameRef = useRef(pathname); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ pathnameRef.current = pathname; }, [ pathname ]); // Close dropdowns on outside click process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ function handleClick(e) { if (profileRef.current && !profileRef.current.contains(e.target)) { setProfileOpen(false); } } document.addEventListener('mousedown', handleClick); return ()=>document.removeEventListener('mousedown', handleClick); }, []); const isAdmin = session?.user?.role === 'admin'; const effectiveRole = useEffectiveRole(); const isSpecialist = effectiveRole === 'specialist'; const isActive = (href, exact = false)=>exact ? pathname === href : pathname === href || pathname.startsWith(href + '/'); const navCls = (href, exact = false)=>`font-medium text-sm transition ${isActive(href, exact) ? 'text-green-600' : 'text-gray-600 hover:text-green-600'}`; const mobileNavCls = (href, exact = false)=>`flex items-center gap-2 font-medium py-1 ${isActive(href, exact) ? 'text-green-600' : 'text-gray-700'}`; // Reset chat badge when entering chat process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ if (pathname === '/chat') setUnreadChat(0); }, [ pathname ]); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ if (!session) return; const socket = io(API_URL, { withCredentials: true, transports: [ 'websocket', 'polling' ] }); socket.on('new_message', (msg)=>{ if (pathnameRef.current === '/chat') return; setUnreadChat((c)=>c + 1); if (toastTimer.current) clearTimeout(toastTimer.current); setMsgToast(msg); toastTimer.current = setTimeout(()=>setMsgToast(null), 5000); }); return ()=>{ socket.disconnect(); if (toastTimer.current) clearTimeout(toastTimer.current); }; }, [ session ]); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ if (!session) { setUnreadNotif(0); return; } const fetch = ()=>getUnreadCount().then((r)=>setUnreadNotif(r.count)).catch(()=>{}); fetch(); const timer = setInterval(fetch, 30000); return ()=>clearInterval(timer); }, [ session ]); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ if (!session) { setPlanTier(null); return; } getMyDashboard().then((d)=>setPlanTier(d.plan?.tier ?? null)).catch(()=>{}); }, [ session ]); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ const onScroll = ()=>{ if (!headerRef.current) return; if (window.scrollY > 40) { headerRef.current.classList.add('header-shrink'); } else { headerRef.current.classList.remove('header-shrink'); } }; window.addEventListener('scroll', onScroll); return ()=>window.removeEventListener('scroll', onScroll); }, []); return /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx("header", { ref: headerRef, className: "header-base bg-white border-b border-gray-200 sticky top-0 z-50 transition-all duration-300", children: /*#__PURE__*/ _jsxs("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: [ /*#__PURE__*/ _jsxs("div", { className: "flex items-center justify-between h-16 header-content transition-all duration-300", children: [ /*#__PURE__*/ _jsxs(Link, { href: "/", className: "flex items-center gap-2 shrink-0", children: [ /*#__PURE__*/ _jsx("img", { src: "/logo.png", alt: "CanHelp", className: "w-8 h-8 object-contain" }), /*#__PURE__*/ _jsx("span", { className: "logo-text text-2xl font-bold text-green-600 transition-all duration-300", children: "CanHelp" }) ] }), /*#__PURE__*/ _jsxs("nav", { className: "hidden md:flex items-center gap-5 ml-auto", children: [ isSpecialist ? /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx(Link, { href: "/tasks", className: navCls('/tasks'), children: t('nav.find_tasks') }), /*#__PURE__*/ _jsx(Link, { href: "/dashboard", className: navCls('/dashboard'), children: t('nav.dashboard') }) ] }) : /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx(Link, { href: "/tasks/new", className: navCls('/tasks/new', true), children: t('dashboard.new_task') }), " ", /*#__PURE__*/ _jsx(Link, { href: "/tasks", className: navCls('/tasks'), children: t('nav.tasks') }), " ", /*#__PURE__*/ _jsx(Link, { href: "/specialists", className: navCls('/specialists'), children: t('nav.specialists') }) ] }), /*#__PURE__*/ _jsx(Link, { href: "/pricing", className: navCls('/pricing', true), children: t('nav.pricing', 'Pricing') }), session ? /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs(Link, { href: "/notifications", className: "relative text-gray-600 hover:text-gray-900 flex items-center", children: [ /*#__PURE__*/ _jsx("svg", { className: `w-5 h-5 ${unreadNotif > 0 ? 'text-green-600' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75v-.7V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0" }) }), unreadNotif > 0 && /*#__PURE__*/ _jsx("span", { className: "absolute -top-1.5 -right-1.5 min-w-[16px] h-4 px-0.5 bg-red-500 text-white text-[10px] font-bold rounded-full flex items-center justify-center leading-none", children: unreadNotif > 99 ? '99+' : unreadNotif }) ] }), /*#__PURE__*/ _jsxs(Link, { href: "/chat", className: "relative text-gray-600 hover:text-gray-900 flex items-center", children: [ /*#__PURE__*/ _jsx("svg", { className: `w-5 h-5 ${unreadChat > 0 ? 'text-green-500' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 10h.01M12 10h.01M16 10h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z" }) }), unreadChat > 0 && /*#__PURE__*/ _jsx("span", { className: "absolute -top-1.5 -right-1.5 min-w-[16px] h-4 px-0.5 bg-green-500 text-white text-[10px] font-bold rounded-full flex items-center justify-center leading-none", children: unreadChat > 99 ? '99+' : unreadChat }) ] }), /*#__PURE__*/ _jsxs("div", { className: "relative", ref: profileRef, children: [ /*#__PURE__*/ _jsxs("button", { onClick: ()=>setProfileOpen(!profileOpen), className: "flex items-center gap-1.5 text-sm font-medium text-gray-600 hover:text-green-600", children: [ /*#__PURE__*/ _jsx("span", { className: "truncate max-w-[100px]", children: formatShortName(session.user.firstName, session.user.lastName, session.user.name) }), planTier === 'pro' && /*#__PURE__*/ _jsx("span", { className: "inline-flex items-center px-1.5 py-0.5 rounded-full text-[10px] font-bold bg-green-100 text-green-700 leading-none", children: "Pro" }), planTier === 'ultimate' && /*#__PURE__*/ _jsx("span", { className: "inline-flex items-center px-1.5 py-0.5 rounded-full text-[10px] font-bold bg-gradient-to-r from-amber-400 via-yellow-400 to-amber-400 text-gray-900 shadow-sm shadow-amber-300/50 leading-none", children: "★" }), /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19 9l-7 7-7-7" }) }) ] }), profileOpen && /*#__PURE__*/ _jsxs("div", { className: "absolute right-0 mt-2 w-52 bg-white border border-gray-200 rounded-xl shadow-lg py-1 z-50", children: [ isSpecialist ? /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs(Link, { href: "/tasks/new", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 4v16m8-8H4" }) }), t('nav.new_task') ] }), /*#__PURE__*/ _jsxs(Link, { href: "/specialists", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z" }) }), t('nav.specialists') ] }) ] }) : /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs(Link, { href: "/notifications", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: `w-4 h-4 shrink-0 ${unreadNotif > 0 ? 'text-green-600' : 'text-gray-400'}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75v-.7V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0" }) }), /*#__PURE__*/ _jsxs("span", { className: "flex items-center gap-1.5", children: [ t('nav.notifications'), unreadNotif > 0 && /*#__PURE__*/ _jsx("span", { className: "px-1.5 py-0.5 bg-red-500 text-white text-[10px] font-bold rounded-full leading-none", children: unreadNotif > 99 ? '99+' : unreadNotif }) ] }) ] }), /*#__PURE__*/ _jsxs(Link, { href: "/chat", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: `w-4 h-4 shrink-0 ${unreadChat > 0 ? 'text-green-500' : 'text-gray-400'}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 10h.01M12 10h.01M16 10h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z" }) }), /*#__PURE__*/ _jsxs("span", { className: "flex items-center gap-1.5", children: [ t('nav.chat'), unreadChat > 0 && /*#__PURE__*/ _jsx("span", { className: "px-1.5 py-0.5 bg-green-500 text-white text-[10px] font-bold rounded-full leading-none", children: unreadChat > 99 ? '99+' : unreadChat }) ] }) ] }), /*#__PURE__*/ _jsxs(Link, { href: "/dashboard", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" }) }), t('nav.dashboard') ] }) ] }), (isSpecialist || isAdmin) && /*#__PURE__*/ _jsxs(Link, { href: "/schedule", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" }) }), t('nav.schedule') ] }), isAdmin && /*#__PURE__*/ _jsxs(Link, { href: "/admin", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsxs("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: [ /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z" }), /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z" }) ] }), t('nav.admin') ] }), /*#__PURE__*/ _jsxs(Link, { href: "/profile", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z" }) }), t('nav.profile') ] }), /*#__PURE__*/ _jsxs(Link, { href: "/favorites", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z" }) }), t('nav.favorites') ] }), /*#__PURE__*/ _jsx("hr", { className: "my-1 border-gray-100" }), /*#__PURE__*/ _jsxs("button", { className: "w-full flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-green-50", onClick: ()=>{ setProfileOpen(false); setSupportOpen(true); }, children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M18.364 5.636l-3.536 3.536m0 5.656l3.536 3.536M9.172 9.172L5.636 5.636m3.536 9.192l-3.536 3.536M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-5 0a4 4 0 11-8 0 4 4 0 018 0z" }) }), t('support.title') ] }), /*#__PURE__*/ _jsx("hr", { className: "my-1 border-gray-100" }), /*#__PURE__*/ _jsxs("button", { className: "w-full flex items-center gap-2.5 px-4 py-2 text-sm text-red-500 hover:bg-red-50", onClick: ()=>{ setProfileOpen(false); signOut().then(()=>{ window.location.href = '/'; }); }, children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1" }) }), t('nav.logout') ] }) ] }) ] }) ] }) : /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx(Link, { href: "/login", className: "text-gray-600 hover:text-green-600 font-medium text-sm", children: t('nav.login') }), /*#__PURE__*/ _jsx(Link, { href: "/register", className: "bg-green-600 text-white px-4 py-2 rounded-lg hover:bg-green-700 font-medium text-sm", children: t('nav.register') }) ] }), /*#__PURE__*/ _jsx(LanguageSwitcher, {}) ] }), /*#__PURE__*/ _jsxs("div", { className: "md:hidden flex items-center gap-2", children: [ /*#__PURE__*/ _jsx(LanguageSwitcher, {}), /*#__PURE__*/ _jsx("button", { className: "p-2", onClick: ()=>setMenuOpen(!menuOpen), "aria-label": "Toggle menu", children: /*#__PURE__*/ _jsx("svg", { className: "w-5 h-5 text-gray-600", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: menuOpen ? /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6 18L18 6M6 6l12 12" }) : /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4 6h16M4 12h16M4 18h16" }) }) }) ] }) ] }), menuOpen && /*#__PURE__*/ _jsxs("div", { className: "md:hidden py-4 border-t border-gray-100 flex flex-col gap-3", children: [ isSpecialist ? /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs(Link, { href: "/tasks", className: mobileNavCls('/tasks'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" }) }), t('nav.find_tasks') ] }), /*#__PURE__*/ _jsxs(Link, { href: "/dashboard", className: mobileNavCls('/dashboard'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" }) }), t('nav.dashboard') ] }) ] }) : /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs(Link, { href: "/tasks/new", className: mobileNavCls('/tasks/new', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 4v16m8-8H4" }) }), t('nav.new_task') ] }), /*#__PURE__*/ _jsxs(Link, { href: "/tasks", className: mobileNavCls('/tasks'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2" }) }), t('nav.tasks') ] }), /*#__PURE__*/ _jsxs(Link, { href: "/specialists", className: mobileNavCls('/specialists'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z" }) }), t('nav.specialists') ] }) ] }), session ? /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs(Link, { href: "/chat", className: mobileNavCls('/chat', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: `w-4 h-4 shrink-0 ${unreadChat > 0 ? 'text-green-500' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 10h.01M12 10h.01M16 10h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z" }) }), t('nav.chat'), unreadChat > 0 && /*#__PURE__*/ _jsx("span", { className: "ml-1 px-1.5 py-0.5 bg-green-500 text-white text-[10px] font-bold rounded-full", children: unreadChat }) ] }), isSpecialist ? /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs(Link, { href: "/tasks/new", className: mobileNavCls('/tasks/new', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 4v16m8-8H4" }) }), t('nav.new_task') ] }), /*#__PURE__*/ _jsxs(Link, { href: "/specialists", className: mobileNavCls('/specialists'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z" }) }), t('nav.specialists') ] }) ] }) : /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs(Link, { href: "/notifications", className: mobileNavCls('/notifications', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: `w-4 h-4 shrink-0 ${unreadNotif > 0 ? 'text-green-600' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75v-.7V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0" }) }), /*#__PURE__*/ _jsxs("span", { className: "flex items-center gap-1.5", children: [ t('nav.notifications'), unreadNotif > 0 && /*#__PURE__*/ _jsx("span", { className: "px-1.5 py-0.5 bg-red-500 text-white text-[10px] font-bold rounded-full", children: unreadNotif > 99 ? '99+' : unreadNotif }) ] }) ] }), /*#__PURE__*/ _jsxs(Link, { href: "/dashboard", className: mobileNavCls('/dashboard'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" }) }), t('nav.dashboard') ] }) ] }), /*#__PURE__*/ _jsxs(Link, { href: "/favorites", className: mobileNavCls('/favorites', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z" }) }), t('nav.favorites') ] }), (isSpecialist || isAdmin) && /*#__PURE__*/ _jsxs(Link, { href: "/schedule", className: mobileNavCls('/schedule', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" }) }), t('nav.schedule') ] }), isAdmin && /*#__PURE__*/ _jsxs(Link, { href: "/admin", className: mobileNavCls('/admin'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsxs("svg", { className: "w-4 h-4 text-gray-400", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: [ /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z" }), /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z" }) ] }), t('nav.admin') ] }), /*#__PURE__*/ _jsxs(Link, { href: "/profile", className: mobileNavCls('/profile', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z" }) }), t('nav.profile') ] }), /*#__PURE__*/ _jsxs("button", { onClick: ()=>{ setMenuOpen(false); signOut().then(()=>{ window.location.href = '/'; }); }, className: "flex items-center gap-2 text-left text-red-500 py-1 font-medium", children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1" }) }), t('nav.logout') ] }) ] }) : /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx(Link, { href: "/login", className: "text-gray-700 font-medium py-1", onClick: ()=>setMenuOpen(false), children: t('nav.login') }), /*#__PURE__*/ _jsx(Link, { href: "/register", className: "text-green-600 font-medium py-1", onClick: ()=>setMenuOpen(false), children: t('nav.register') }) ] }) ] }) ] }) }), msgToast && /*#__PURE__*/ _jsx("div", { className: "fixed bottom-5 right-5 z-[200] max-w-sm w-full", children: /*#__PURE__*/ _jsxs("div", { className: "bg-white border border-gray-200 rounded-xl shadow-xl p-4 flex items-start gap-3 animate-fade-in", children: [ /*#__PURE__*/ _jsx("span", { className: "text-2xl shrink-0", children: "\uD83D\uDCAC" }), /*#__PURE__*/ _jsxs("div", { className: "flex-1 min-w-0", children: [ /*#__PURE__*/ _jsx("p", { className: "font-semibold text-gray-900 text-sm", children: t('chat.toast_title') }), /*#__PURE__*/ _jsx("p", { className: "text-xs text-gray-500 truncate mt-0.5", children: msgToast.body }) ] }), /*#__PURE__*/ _jsxs("div", { className: "flex flex-col items-end gap-2 shrink-0", children: [ /*#__PURE__*/ _jsx("button", { onClick: ()=>setMsgToast(null), className: "text-gray-400 hover:text-gray-600 text-lg leading-none", "aria-label": "close", children: "\xd7" }), /*#__PURE__*/ _jsx(Link, { href: `/chat?room=${msgToast.roomId}`, onClick: ()=>setMsgToast(null), className: "text-xs text-green-600 hover:underline font-medium", children: t('chat.toast_open') }) ] }) ] }) }), supportOpen && /*#__PURE__*/ _jsx(SupportModal, { onClose: ()=>setSupportOpen(false) }) ] }); } @`<_IK}%'LN -_  ;C]g%Y`.5UZy~_ j y m u qycp _osuxeh|y}_  c"f"h"k"'$*$,$/$%%%% &&&&i'l'))1,4,v.z.|../_/11^4a46677r9u98:F:2;5;= = ??4A7ACCEEEEEEEEH_HJJMMMM0P3PRR"W&W(W0WWWWWZZ\\``aa&e*e,e/eZg_]gjjmmnn)r-r/r2rbtetvvu{y{{{~{}}RVX[_c_ptvy-136>A&)+/ߢHKU_X  )qtvùƹ_%) x|~[^&) }_GJ!$.24< _;?AIVYQTbe]`OSUX_),$'y}  r v x {   6:<_?-!1!!!##h%k% ((((((((*X* *#*b,e,,,--~..//0071;111m3p3r3u3o5r5__WEBPACK_MODULE_REFERENCE__12_5b2264656661756c74225d_call_directImport_asiSafe1__._ true/*require.resolve*/null /* weak dependency, without id */"https://api.canhelp.gr"0__WEBPACK_MODULE_REFERENCE__2_5b22757365526f75746572225d_call_directImport_asiSafe1__.___WEBPACK_MODULE_REFERENCE__2_5b22757365506174686e616d65225d_call_directImport_asiSafe1__.___WEBPACK_MODULE_REFERENCE__3_5b2275736553657373696f6e225d_call_directImport_asiSafe1__.___WEBPACK_MODULE_REFERENCE__4_5b227573654c6f63616c65225d_call_directImport_asiSafe1__.___WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__.___WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__.___WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__.___WEBPACK_MODULE_REFERENCE__11_5b22757365456666656374697665526f6c65225d_call_directImport_asiSafe1__.___WEBPACK_MODULE_REFERENCE__10_5b22696f225d_call_directImport_asiSafe1__.___WEBPACK_MODULE_REFERENCE__9_5b22676574556e72656164436f756e74225d_call_directImport_asiSafe1__.___WEBPACK_MODULE_REFERENCE__9_5b226765744d7944617368626f617264225d_call_directImport_asiSafe1__.___WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__.___WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__.___WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__.___WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__.___WEBPACK_MODULE_REFERENCE__5_5b22666f726d617453686f72744e616d65225d_call_directImport_asiSafe1__.___WEBPACK_MODULE_REFERENCE__3_5b227369676e4f7574225d_call_directImport_asiSafe1__.___WEBPACK_MODULE_REFERENCE__8_5b224c616e67756167655377697463686572225d_directImport_asiSafe1__._u/* __next_internal_client_entry_do_not_use__ Header auto */ const SupportModal = __WEBPACK_MODULE_REFERENCE__12_5b2264656661756c74225d_call_directImport_asiSafe1__._(async ()=>{ true && /*require.resolve*/(null /* weak dependency, without id */); }, { loadableGenerated: { modules: [ "components/Header.tsx -> " + "./SupportModal" ] }, ssr: false }); const API_URL = "https://api.canhelp.gr" || 0; function Header() { const router = __WEBPACK_MODULE_REFERENCE__2_5b22757365526f75746572225d_call_directImport_asiSafe1__._(); const pathname = __WEBPACK_MODULE_REFERENCE__2_5b22757365506174686e616d65225d_call_directImport_asiSafe1__._(); const { data: session } = __WEBPACK_MODULE_REFERENCE__3_5b2275736553657373696f6e225d_call_directImport_asiSafe1__._(); const { t, locale } = __WEBPACK_MODULE_REFERENCE__4_5b227573654c6f63616c65225d_call_directImport_asiSafe1__._(); const [menuOpen, setMenuOpen] = __WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._(false); const [profileOpen, setProfileOpen] = __WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._(false); const [supportOpen, setSupportOpen] = __WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._(false); const [unreadNotif, setUnreadNotif] = __WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._(0); const [unreadChat, setUnreadChat] = __WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._(0); const [msgToast, setMsgToast] = __WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._(null); const [planTier, setPlanTier] = __WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._(null); const profileRef = __WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._(null); const headerRef = __WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._(null); const toastTimer = __WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._(null); const pathnameRef = __WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._(pathname); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && __WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._(()=>{ pathnameRef.current = pathname; }, [ pathname ]); // Close dropdowns on outside click process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && __WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._(()=>{ function handleClick(e) { if (profileRef.current && !profileRef.current.contains(e.target)) { setProfileOpen(false); } } document.addEventListener('mousedown', handleClick); return ()=>document.removeEventListener('mousedown', handleClick); }, []); const isAdmin = session?.user?.role === 'admin'; const effectiveRole = __WEBPACK_MODULE_REFERENCE__11_5b22757365456666656374697665526f6c65225d_call_directImport_asiSafe1__._(); const isSpecialist = effectiveRole === 'specialist'; const isActive = (href, exact = false)=>exact ? pathname === href : pathname === href || pathname.startsWith(href + '/'); const navCls = (href, exact = false)=>`font-medium text-sm transition ${isActive(href, exact) ? 'text-green-600' : 'text-gray-600 hover:text-green-600'}`; const mobileNavCls = (href, exact = false)=>`flex items-center gap-2 font-medium py-1 ${isActive(href, exact) ? 'text-green-600' : 'text-gray-700'}`; // Reset chat badge when entering chat process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && __WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._(()=>{ if (pathname === '/chat') setUnreadChat(0); }, [ pathname ]); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && __WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._(()=>{ if (!session) return; const socket = __WEBPACK_MODULE_REFERENCE__10_5b22696f225d_call_directImport_asiSafe1__._(API_URL, { withCredentials: true, transports: [ 'websocket', 'polling' ] }); socket.on('new_message', (msg)=>{ if (pathnameRef.current === '/chat') return; setUnreadChat((c)=>c + 1); if (toastTimer.current) clearTimeout(toastTimer.current); setMsgToast(msg); toastTimer.current = setTimeout(()=>setMsgToast(null), 5000); }); return ()=>{ socket.disconnect(); if (toastTimer.current) clearTimeout(toastTimer.current); }; }, [ session ]); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && __WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._(()=>{ if (!session) { setUnreadNotif(0); return; } const fetch = ()=>__WEBPACK_MODULE_REFERENCE__9_5b22676574556e72656164436f756e74225d_call_directImport_asiSafe1__._().then((r)=>setUnreadNotif(r.count)).catch(()=>{}); fetch(); const timer = setInterval(fetch, 30000); return ()=>clearInterval(timer); }, [ session ]); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && __WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._(()=>{ if (!session) { setPlanTier(null); return; } __WEBPACK_MODULE_REFERENCE__9_5b226765744d7944617368626f617264225d_call_directImport_asiSafe1__._().then((d)=>setPlanTier(d.plan?.tier ?? null)).catch(()=>{}); }, [ session ]); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && __WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._(()=>{ const onScroll = ()=>{ if (!headerRef.current) return; if (window.scrollY > 40) { headerRef.current.classList.add('header-shrink'); } else { headerRef.current.classList.remove('header-shrink'); } }; window.addEventListener('scroll', onScroll); return ()=>window.removeEventListener('scroll', onScroll); }, []); return /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._, { children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("header", { ref: headerRef, className: "header-base bg-white border-b border-gray-200 sticky top-0 z-50 transition-all duration-300", children: /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._("div", { className: "flex items-center justify-between h-16 header-content transition-all duration-300", children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/", className: "flex items-center gap-2 shrink-0", children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("img", { src: "/logo.png", alt: "CanHelp", className: "w-8 h-8 object-contain" }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("span", { className: "logo-text text-2xl font-bold text-green-600 transition-all duration-300", children: "CanHelp" }) ] }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._("nav", { className: "hidden md:flex items-center gap-5 ml-auto", children: [ isSpecialist ? /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._, { children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/tasks", className: navCls('/tasks'), children: t('nav.find_tasks') }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/dashboard", className: navCls('/dashboard'), children: t('nav.dashboard') }) ] }) : /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._, { children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/tasks/new", className: navCls('/tasks/new', true), children: t('dashboard.new_task') }), " ", /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/tasks", className: navCls('/tasks'), children: t('nav.tasks') }), " ", /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/specialists", className: navCls('/specialists'), children: t('nav.specialists') }) ] }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/pricing", className: navCls('/pricing', true), children: t('nav.pricing', 'Pricing') }), session ? /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._, { children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/notifications", className: "relative text-gray-600 hover:text-gray-900 flex items-center", children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("svg", { className: `w-5 h-5 ${unreadNotif > 0 ? 'text-green-600' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75v-.7V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0" }) }), unreadNotif > 0 && /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("span", { className: "absolute -top-1.5 -right-1.5 min-w-[16px] h-4 px-0.5 bg-red-500 text-white text-[10px] font-bold rounded-full flex items-center justify-center leading-none", children: unreadNotif > 99 ? '99+' : unreadNotif }) ] }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/chat", className: "relative text-gray-600 hover:text-gray-900 flex items-center", children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("svg", { className: `w-5 h-5 ${unreadChat > 0 ? 'text-green-500' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 10h.01M12 10h.01M16 10h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z" }) }), unreadChat > 0 && /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("span", { className: "absolute -top-1.5 -right-1.5 min-w-[16px] h-4 px-0.5 bg-green-500 text-white text-[10px] font-bold rounded-full flex items-center justify-center leading-none", children: unreadChat > 99 ? '99+' : unreadChat }) ] }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._("div", { className: "relative", ref: profileRef, children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._("button", { onClick: ()=>setProfileOpen(!profileOpen), className: "flex items-center gap-1.5 text-sm font-medium text-gray-600 hover:text-green-600", children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("span", { className: "truncate max-w-[100px]", children: __WEBPACK_MODULE_REFERENCE__5_5b22666f726d617453686f72744e616d65225d_call_directImport_asiSafe1__._(session.user.firstName, session.user.lastName, session.user.name) }), planTier === 'pro' && /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("span", { className: "inline-flex items-center px-1.5 py-0.5 rounded-full text-[10px] font-bold bg-green-100 text-green-700 leading-none", children: "Pro" }), planTier === 'ultimate' && /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("span", { className: "inline-flex items-center px-1.5 py-0.5 rounded-full text-[10px] font-bold bg-gradient-to-r from-amber-400 via-yellow-400 to-amber-400 text-gray-900 shadow-sm shadow-amber-300/50 leading-none", children: "★" }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19 9l-7 7-7-7" }) }) ] }), profileOpen && /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._("div", { className: "absolute right-0 mt-2 w-52 bg-white border border-gray-200 rounded-xl shadow-lg py-1 z-50", children: [ isSpecialist ? /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._, { children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/tasks/new", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 4v16m8-8H4" }) }), t('nav.new_task') ] }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/specialists", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z" }) }), t('nav.specialists') ] }) ] }) : /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._, { children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/notifications", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("svg", { className: `w-4 h-4 shrink-0 ${unreadNotif > 0 ? 'text-green-600' : 'text-gray-400'}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75v-.7V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0" }) }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._("span", { className: "flex items-center gap-1.5", children: [ t('nav.notifications'), unreadNotif > 0 && /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("span", { className: "px-1.5 py-0.5 bg-red-500 text-white text-[10px] font-bold rounded-full leading-none", children: unreadNotif > 99 ? '99+' : unreadNotif }) ] }) ] }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/chat", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("svg", { className: `w-4 h-4 shrink-0 ${unreadChat > 0 ? 'text-green-500' : 'text-gray-400'}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 10h.01M12 10h.01M16 10h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z" }) }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._("span", { className: "flex items-center gap-1.5", children: [ t('nav.chat'), unreadChat > 0 && /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("span", { className: "px-1.5 py-0.5 bg-green-500 text-white text-[10px] font-bold rounded-full leading-none", children: unreadChat > 99 ? '99+' : unreadChat }) ] }) ] }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/dashboard", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" }) }), t('nav.dashboard') ] }) ] }), (isSpecialist || isAdmin) && /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/schedule", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" }) }), t('nav.schedule') ] }), isAdmin && /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/admin", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z" }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z" }) ] }), t('nav.admin') ] }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/profile", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z" }) }), t('nav.profile') ] }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/favorites", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z" }) }), t('nav.favorites') ] }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("hr", { className: "my-1 border-gray-100" }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._("button", { className: "w-full flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-green-50", onClick: ()=>{ setProfileOpen(false); setSupportOpen(true); }, children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M18.364 5.636l-3.536 3.536m0 5.656l3.536 3.536M9.172 9.172L5.636 5.636m3.536 9.192l-3.536 3.536M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-5 0a4 4 0 11-8 0 4 4 0 018 0z" }) }), t('support.title') ] }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("hr", { className: "my-1 border-gray-100" }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._("button", { className: "w-full flex items-center gap-2.5 px-4 py-2 text-sm text-red-500 hover:bg-red-50", onClick: ()=>{ setProfileOpen(false); __WEBPACK_MODULE_REFERENCE__3_5b227369676e4f7574225d_call_directImport_asiSafe1__._().then(()=>{ window.location.href = '/'; }); }, children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1" }) }), t('nav.logout') ] }) ] }) ] }) ] }) : /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._, { children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/login", className: "text-gray-600 hover:text-green-600 font-medium text-sm", children: t('nav.login') }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/register", className: "bg-green-600 text-white px-4 py-2 rounded-lg hover:bg-green-700 font-medium text-sm", children: t('nav.register') }) ] }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__8_5b224c616e67756167655377697463686572225d_directImport_asiSafe1__._, {}) ] }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._("div", { className: "md:hidden flex items-center gap-2", children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__8_5b224c616e67756167655377697463686572225d_directImport_asiSafe1__._, {}), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("button", { className: "p-2", onClick: ()=>setMenuOpen(!menuOpen), "aria-label": "Toggle menu", children: /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("svg", { className: "w-5 h-5 text-gray-600", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: menuOpen ? /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6 18L18 6M6 6l12 12" }) : /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4 6h16M4 12h16M4 18h16" }) }) }) ] }) ] }), menuOpen && /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._("div", { className: "md:hidden py-4 border-t border-gray-100 flex flex-col gap-3", children: [ isSpecialist ? /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._, { children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/tasks", className: mobileNavCls('/tasks'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" }) }), t('nav.find_tasks') ] }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/dashboard", className: mobileNavCls('/dashboard'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" }) }), t('nav.dashboard') ] }) ] }) : /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._, { children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/tasks/new", className: mobileNavCls('/tasks/new', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 4v16m8-8H4" }) }), t('nav.new_task') ] }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/tasks", className: mobileNavCls('/tasks'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2" }) }), t('nav.tasks') ] }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/specialists", className: mobileNavCls('/specialists'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z" }) }), t('nav.specialists') ] }) ] }), session ? /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._, { children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/chat", className: mobileNavCls('/chat', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("svg", { className: `w-4 h-4 shrink-0 ${unreadChat > 0 ? 'text-green-500' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 10h.01M12 10h.01M16 10h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z" }) }), t('nav.chat'), unreadChat > 0 && /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("span", { className: "ml-1 px-1.5 py-0.5 bg-green-500 text-white text-[10px] font-bold rounded-full", children: unreadChat }) ] }), isSpecialist ? /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._, { children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/tasks/new", className: mobileNavCls('/tasks/new', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 4v16m8-8H4" }) }), t('nav.new_task') ] }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/specialists", className: mobileNavCls('/specialists'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z" }) }), t('nav.specialists') ] }) ] }) : /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._, { children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/notifications", className: mobileNavCls('/notifications', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("svg", { className: `w-4 h-4 shrink-0 ${unreadNotif > 0 ? 'text-green-600' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75v-.7V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0" }) }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._("span", { className: "flex items-center gap-1.5", children: [ t('nav.notifications'), unreadNotif > 0 && /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("span", { className: "px-1.5 py-0.5 bg-red-500 text-white text-[10px] font-bold rounded-full", children: unreadNotif > 99 ? '99+' : unreadNotif }) ] }) ] }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/dashboard", className: mobileNavCls('/dashboard'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" }) }), t('nav.dashboard') ] }) ] }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/favorites", className: mobileNavCls('/favorites', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z" }) }), t('nav.favorites') ] }), (isSpecialist || isAdmin) && /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/schedule", className: mobileNavCls('/schedule', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("svg", { className: "w-4 h-4 text-gray-400", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" }) }), t('nav.schedule') ] }), isAdmin && /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/admin", className: mobileNavCls('/admin'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._("svg", { className: "w-4 h-4 text-gray-400", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z" }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z" }) ] }), t('nav.admin') ] }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/profile", className: mobileNavCls('/profile', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("svg", { className: "w-4 h-4 text-gray-400", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z" }) }), t('nav.profile') ] }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._("button", { onClick: ()=>{ setMenuOpen(false); __WEBPACK_MODULE_REFERENCE__3_5b227369676e4f7574225d_call_directImport_asiSafe1__._().then(()=>{ window.location.href = '/'; }); }, className: "flex items-center gap-2 text-left text-red-500 py-1 font-medium", children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("svg", { className: "w-4 h-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1" }) }), t('nav.logout') ] }) ] }) : /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._, { children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/login", className: "text-gray-700 font-medium py-1", onClick: ()=>setMenuOpen(false), children: t('nav.login') }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/register", className: "text-green-600 font-medium py-1", onClick: ()=>setMenuOpen(false), children: t('nav.register') }) ] }) ] }) ] }) }), msgToast && /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("div", { className: "fixed bottom-5 right-5 z-[200] max-w-sm w-full", children: /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._("div", { className: "bg-white border border-gray-200 rounded-xl shadow-xl p-4 flex items-start gap-3 animate-fade-in", children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("span", { className: "text-2xl shrink-0", children: "\uD83D\uDCAC" }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._("div", { className: "flex-1 min-w-0", children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("p", { className: "font-semibold text-gray-900 text-sm", children: t('chat.toast_title') }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("p", { className: "text-xs text-gray-500 truncate mt-0.5", children: msgToast.body }) ] }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._("div", { className: "flex flex-col items-end gap-2 shrink-0", children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("button", { onClick: ()=>setMsgToast(null), className: "text-gray-400 hover:text-gray-600 text-lg leading-none", "aria-label": "close", children: "\xd7" }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._, { href: `/chat?room=${msgToast.roomId}`, onClick: ()=>setMsgToast(null), className: "text-xs text-green-600 hover:underline font-medium", children: t('chat.toast_open') }) ] }) ] }) }), supportOpen && /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._(SupportModal, { onClose: ()=>setSupportOpen(false) }) ] }); }  5/* __next_internal_client_entry_do_not_use__ Header auto */ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime"; import Link from 'next/link'; import { useRouter, usePathname } from 'next/navigation'; import { useSession, signOut } from '@/lib/auth'; import { useLocale } from '@/context/locale'; import { formatShortName } from '@/lib/formatName'; import { LanguageSwitcher } from './LanguageSwitcher'; import { useState, useRef, useEffect } from 'react'; import { getUnreadCount, getMyDashboard } from '@/lib/api'; import { io } from 'socket.io-client'; import { useEffectiveRole } from '@/hooks/useEffectiveRole'; import dynamic from 'next/dynamic'; const SupportModal = dynamic(async ()=>{ typeof require.resolveWeak !== "undefined" && require.resolveWeak("./SupportModal"); }, { loadableGenerated: { modules: [ "components/Header.tsx -> " + "./SupportModal" ] }, ssr: false }); const API_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:4000'; export function Header() { const router = useRouter(); const pathname = usePathname(); const { data: session } = useSession(); const { t, locale } = useLocale(); const [menuOpen, setMenuOpen] = useState(false); const [profileOpen, setProfileOpen] = useState(false); const [supportOpen, setSupportOpen] = useState(false); const [unreadNotif, setUnreadNotif] = useState(0); const [unreadChat, setUnreadChat] = useState(0); const [msgToast, setMsgToast] = useState(null); const [planTier, setPlanTier] = useState(null); const profileRef = useRef(null); const headerRef = useRef(null); const toastTimer = useRef(null); const pathnameRef = useRef(pathname); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ pathnameRef.current = pathname; }, [ pathname ]); // Close dropdowns on outside click process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ function handleClick(e) { if (profileRef.current && !profileRef.current.contains(e.target)) { setProfileOpen(false); } } document.addEventListener('mousedown', handleClick); return ()=>document.removeEventListener('mousedown', handleClick); }, []); const isAdmin = session?.user?.role === 'admin'; const effectiveRole = useEffectiveRole(); const isSpecialist = effectiveRole === 'specialist'; const isActive = (href, exact = false)=>exact ? pathname === href : pathname === href || pathname.startsWith(href + '/'); const navCls = (href, exact = false)=>`font-medium text-sm transition ${isActive(href, exact) ? 'text-green-600' : 'text-gray-600 hover:text-green-600'}`; const mobileNavCls = (href, exact = false)=>`flex items-center gap-2 font-medium py-1 ${isActive(href, exact) ? 'text-green-600' : 'text-gray-700'}`; // Reset chat badge when entering chat process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ if (pathname === '/chat') setUnreadChat(0); }, [ pathname ]); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ if (!session) return; const socket = io(API_URL, { withCredentials: true, transports: [ 'websocket', 'polling' ] }); socket.on('new_message', (msg)=>{ if (pathnameRef.current === '/chat') return; setUnreadChat((c)=>c + 1); if (toastTimer.current) clearTimeout(toastTimer.current); setMsgToast(msg); toastTimer.current = setTimeout(()=>setMsgToast(null), 5000); }); return ()=>{ socket.disconnect(); if (toastTimer.current) clearTimeout(toastTimer.current); }; }, [ session ]); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ if (!session) { setUnreadNotif(0); return; } const fetch = ()=>getUnreadCount().then((r)=>setUnreadNotif(r.count)).catch(()=>{}); fetch(); const timer = setInterval(fetch, 30000); return ()=>clearInterval(timer); }, [ session ]); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ if (!session) { setPlanTier(null); return; } getMyDashboard().then((d)=>setPlanTier(d.plan?.tier ?? null)).catch(()=>{}); }, [ session ]); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ const onScroll = ()=>{ if (!headerRef.current) return; if (window.scrollY > 40) { headerRef.current.classList.add('header-shrink'); } else { headerRef.current.classList.remove('header-shrink'); } }; window.addEventListener('scroll', onScroll); return ()=>window.removeEventListener('scroll', onScroll); }, []); return /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx("header", { ref: headerRef, className: "header-base bg-white border-b border-gray-200 sticky top-0 z-50 transition-all duration-300", children: /*#__PURE__*/ _jsxs("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: [ /*#__PURE__*/ _jsxs("div", { className: "flex items-center justify-between h-16 header-content transition-all duration-300", children: [ /*#__PURE__*/ _jsxs(Link, { href: "/", className: "flex items-center gap-2 shrink-0", children: [ /*#__PURE__*/ _jsx("img", { src: "/logo.png", alt: "CanHelp", className: "w-8 h-8 object-contain" }), /*#__PURE__*/ _jsx("span", { className: "logo-text text-2xl font-bold text-green-600 transition-all duration-300", children: "CanHelp" }) ] }), /*#__PURE__*/ _jsxs("nav", { className: "hidden md:flex items-center gap-5 ml-auto", children: [ isSpecialist ? /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx(Link, { href: "/tasks", className: navCls('/tasks'), children: t('nav.find_tasks') }), /*#__PURE__*/ _jsx(Link, { href: "/dashboard", className: navCls('/dashboard'), children: t('nav.dashboard') }) ] }) : /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx(Link, { href: "/tasks/new", className: navCls('/tasks/new', true), children: t('dashboard.new_task') }), " ", /*#__PURE__*/ _jsx(Link, { href: "/tasks", className: navCls('/tasks'), children: t('nav.tasks') }), " ", /*#__PURE__*/ _jsx(Link, { href: "/specialists", className: navCls('/specialists'), children: t('nav.specialists') }) ] }), /*#__PURE__*/ _jsx(Link, { href: "/pricing", className: navCls('/pricing', true), children: t('nav.pricing', 'Pricing') }), session ? /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs(Link, { href: "/notifications", className: "relative text-gray-600 hover:text-gray-900 flex items-center", children: [ /*#__PURE__*/ _jsx("svg", { className: `w-5 h-5 ${unreadNotif > 0 ? 'text-green-600' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75v-.7V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0" }) }), unreadNotif > 0 && /*#__PURE__*/ _jsx("span", { className: "absolute -top-1.5 -right-1.5 min-w-[16px] h-4 px-0.5 bg-red-500 text-white text-[10px] font-bold rounded-full flex items-center justify-center leading-none", children: unreadNotif > 99 ? '99+' : unreadNotif }) ] }), /*#__PURE__*/ _jsxs(Link, { href: "/chat", className: "relative text-gray-600 hover:text-gray-900 flex items-center", children: [ /*#__PURE__*/ _jsx("svg", { className: `w-5 h-5 ${unreadChat > 0 ? 'text-green-500' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 10h.01M12 10h.01M16 10h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z" }) }), unreadChat > 0 && /*#__PURE__*/ _jsx("span", { className: "absolute -top-1.5 -right-1.5 min-w-[16px] h-4 px-0.5 bg-green-500 text-white text-[10px] font-bold rounded-full flex items-center justify-center leading-none", children: unreadChat > 99 ? '99+' : unreadChat }) ] }), /*#__PURE__*/ _jsxs("div", { className: "relative", ref: profileRef, children: [ /*#__PURE__*/ _jsxs("button", { onClick: ()=>setProfileOpen(!profileOpen), className: "flex items-center gap-1.5 text-sm font-medium text-gray-600 hover:text-green-600", children: [ /*#__PURE__*/ _jsx("span", { className: "truncate max-w-[100px]", children: formatShortName(session.user.firstName, session.user.lastName, session.user.name) }), planTier === 'pro' && /*#__PURE__*/ _jsx("span", { className: "inline-flex items-center px-1.5 py-0.5 rounded-full text-[10px] font-bold bg-green-100 text-green-700 leading-none", children: "Pro" }), planTier === 'ultimate' && /*#__PURE__*/ _jsx("span", { className: "inline-flex items-center px-1.5 py-0.5 rounded-full text-[10px] font-bold bg-gradient-to-r from-amber-400 via-yellow-400 to-amber-400 text-gray-900 shadow-sm shadow-amber-300/50 leading-none", children: "★" }), /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19 9l-7 7-7-7" }) }) ] }), profileOpen && /*#__PURE__*/ _jsxs("div", { className: "absolute right-0 mt-2 w-52 bg-white border border-gray-200 rounded-xl shadow-lg py-1 z-50", children: [ isSpecialist ? /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs(Link, { href: "/tasks/new", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 4v16m8-8H4" }) }), t('nav.new_task') ] }), /*#__PURE__*/ _jsxs(Link, { href: "/specialists", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z" }) }), t('nav.specialists') ] }) ] }) : /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs(Link, { href: "/notifications", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: `w-4 h-4 shrink-0 ${unreadNotif > 0 ? 'text-green-600' : 'text-gray-400'}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75v-.7V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0" }) }), /*#__PURE__*/ _jsxs("span", { className: "flex items-center gap-1.5", children: [ t('nav.notifications'), unreadNotif > 0 && /*#__PURE__*/ _jsx("span", { className: "px-1.5 py-0.5 bg-red-500 text-white text-[10px] font-bold rounded-full leading-none", children: unreadNotif > 99 ? '99+' : unreadNotif }) ] }) ] }), /*#__PURE__*/ _jsxs(Link, { href: "/chat", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: `w-4 h-4 shrink-0 ${unreadChat > 0 ? 'text-green-500' : 'text-gray-400'}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 10h.01M12 10h.01M16 10h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z" }) }), /*#__PURE__*/ _jsxs("span", { className: "flex items-center gap-1.5", children: [ t('nav.chat'), unreadChat > 0 && /*#__PURE__*/ _jsx("span", { className: "px-1.5 py-0.5 bg-green-500 text-white text-[10px] font-bold rounded-full leading-none", children: unreadChat > 99 ? '99+' : unreadChat }) ] }) ] }), /*#__PURE__*/ _jsxs(Link, { href: "/dashboard", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" }) }), t('nav.dashboard') ] }) ] }), (isSpecialist || isAdmin) && /*#__PURE__*/ _jsxs(Link, { href: "/schedule", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" }) }), t('nav.schedule') ] }), isAdmin && /*#__PURE__*/ _jsxs(Link, { href: "/admin", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsxs("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: [ /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z" }), /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z" }) ] }), t('nav.admin') ] }), /*#__PURE__*/ _jsxs(Link, { href: "/profile", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z" }) }), t('nav.profile') ] }), /*#__PURE__*/ _jsxs(Link, { href: "/favorites", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z" }) }), t('nav.favorites') ] }), /*#__PURE__*/ _jsx("hr", { className: "my-1 border-gray-100" }), /*#__PURE__*/ _jsxs("button", { className: "w-full flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-green-50", onClick: ()=>{ setProfileOpen(false); setSupportOpen(true); }, children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M18.364 5.636l-3.536 3.536m0 5.656l3.536 3.536M9.172 9.172L5.636 5.636m3.536 9.192l-3.536 3.536M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-5 0a4 4 0 11-8 0 4 4 0 018 0z" }) }), t('support.title') ] }), /*#__PURE__*/ _jsx("hr", { className: "my-1 border-gray-100" }), /*#__PURE__*/ _jsxs("button", { className: "w-full flex items-center gap-2.5 px-4 py-2 text-sm text-red-500 hover:bg-red-50", onClick: ()=>{ setProfileOpen(false); signOut().then(()=>{ window.location.href = '/'; }); }, children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1" }) }), t('nav.logout') ] }) ] }) ] }) ] }) : /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx(Link, { href: "/login", className: "text-gray-600 hover:text-green-600 font-medium text-sm", children: t('nav.login') }), /*#__PURE__*/ _jsx(Link, { href: "/register", className: "bg-green-600 text-white px-4 py-2 rounded-lg hover:bg-green-700 font-medium text-sm", children: t('nav.register') }) ] }), /*#__PURE__*/ _jsx(LanguageSwitcher, {}) ] }), /*#__PURE__*/ _jsxs("div", { className: "md:hidden flex items-center gap-2", children: [ /*#__PURE__*/ _jsx(LanguageSwitcher, {}), /*#__PURE__*/ _jsx("button", { className: "p-2", onClick: ()=>setMenuOpen(!menuOpen), "aria-label": "Toggle menu", children: /*#__PURE__*/ _jsx("svg", { className: "w-5 h-5 text-gray-600", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: menuOpen ? /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6 18L18 6M6 6l12 12" }) : /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4 6h16M4 12h16M4 18h16" }) }) }) ] }) ] }), menuOpen && /*#__PURE__*/ _jsxs("div", { className: "md:hidden py-4 border-t border-gray-100 flex flex-col gap-3", children: [ isSpecialist ? /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs(Link, { href: "/tasks", className: mobileNavCls('/tasks'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" }) }), t('nav.find_tasks') ] }), /*#__PURE__*/ _jsxs(Link, { href: "/dashboard", className: mobileNavCls('/dashboard'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" }) }), t('nav.dashboard') ] }) ] }) : /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs(Link, { href: "/tasks/new", className: mobileNavCls('/tasks/new', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 4v16m8-8H4" }) }), t('nav.new_task') ] }), /*#__PURE__*/ _jsxs(Link, { href: "/tasks", className: mobileNavCls('/tasks'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2" }) }), t('nav.tasks') ] }), /*#__PURE__*/ _jsxs(Link, { href: "/specialists", className: mobileNavCls('/specialists'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z" }) }), t('nav.specialists') ] }) ] }), session ? /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs(Link, { href: "/chat", className: mobileNavCls('/chat', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: `w-4 h-4 shrink-0 ${unreadChat > 0 ? 'text-green-500' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 10h.01M12 10h.01M16 10h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z" }) }), t('nav.chat'), unreadChat > 0 && /*#__PURE__*/ _jsx("span", { className: "ml-1 px-1.5 py-0.5 bg-green-500 text-white text-[10px] font-bold rounded-full", children: unreadChat }) ] }), isSpecialist ? /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs(Link, { href: "/tasks/new", className: mobileNavCls('/tasks/new', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 4v16m8-8H4" }) }), t('nav.new_task') ] }), /*#__PURE__*/ _jsxs(Link, { href: "/specialists", className: mobileNavCls('/specialists'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z" }) }), t('nav.specialists') ] }) ] }) : /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs(Link, { href: "/notifications", className: mobileNavCls('/notifications', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: `w-4 h-4 shrink-0 ${unreadNotif > 0 ? 'text-green-600' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75v-.7V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0" }) }), /*#__PURE__*/ _jsxs("span", { className: "flex items-center gap-1.5", children: [ t('nav.notifications'), unreadNotif > 0 && /*#__PURE__*/ _jsx("span", { className: "px-1.5 py-0.5 bg-red-500 text-white text-[10px] font-bold rounded-full", children: unreadNotif > 99 ? '99+' : unreadNotif }) ] }) ] }), /*#__PURE__*/ _jsxs(Link, { href: "/dashboard", className: mobileNavCls('/dashboard'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" }) }), t('nav.dashboard') ] }) ] }), /*#__PURE__*/ _jsxs(Link, { href: "/favorites", className: mobileNavCls('/favorites', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z" }) }), t('nav.favorites') ] }), (isSpecialist || isAdmin) && /*#__PURE__*/ _jsxs(Link, { href: "/schedule", className: mobileNavCls('/schedule', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" }) }), t('nav.schedule') ] }), isAdmin && /*#__PURE__*/ _jsxs(Link, { href: "/admin", className: mobileNavCls('/admin'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsxs("svg", { className: "w-4 h-4 text-gray-400", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: [ /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z" }), /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z" }) ] }), t('nav.admin') ] }), /*#__PURE__*/ _jsxs(Link, { href: "/profile", className: mobileNavCls('/profile', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z" }) }), t('nav.profile') ] }), /*#__PURE__*/ _jsxs("button", { onClick: ()=>{ setMenuOpen(false); signOut().then(()=>{ window.location.href = '/'; }); }, className: "flex items-center gap-2 text-left text-red-500 py-1 font-medium", children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1" }) }), t('nav.logout') ] }) ] }) : /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx(Link, { href: "/login", className: "text-gray-700 font-medium py-1", onClick: ()=>setMenuOpen(false), children: t('nav.login') }), /*#__PURE__*/ _jsx(Link, { href: "/register", className: "text-green-600 font-medium py-1", onClick: ()=>setMenuOpen(false), children: t('nav.register') }) ] }) ] }) ] }) }), msgToast && /*#__PURE__*/ _jsx("div", { className: "fixed bottom-5 right-5 z-[200] max-w-sm w-full", children: /*#__PURE__*/ _jsxs("div", { className: "bg-white border border-gray-200 rounded-xl shadow-xl p-4 flex items-start gap-3 animate-fade-in", children: [ /*#__PURE__*/ _jsx("span", { className: "text-2xl shrink-0", children: "\uD83D\uDCAC" }), /*#__PURE__*/ _jsxs("div", { className: "flex-1 min-w-0", children: [ /*#__PURE__*/ _jsx("p", { className: "font-semibold text-gray-900 text-sm", children: t('chat.toast_title') }), /*#__PURE__*/ _jsx("p", { className: "text-xs text-gray-500 truncate mt-0.5", children: msgToast.body }) ] }), /*#__PURE__*/ _jsxs("div", { className: "flex flex-col items-end gap-2 shrink-0", children: [ /*#__PURE__*/ _jsx("button", { onClick: ()=>setMsgToast(null), className: "text-gray-400 hover:text-gray-600 text-lg leading-none", "aria-label": "close", children: "\xd7" }), /*#__PURE__*/ _jsx(Link, { href: `/chat?room=${msgToast.roomId}`, onClick: ()=>setMsgToast(null), className: "text-xs text-green-600 hover:underline font-medium", children: t('chat.toast_open') }) ] }) ] }) }), supportOpen && /*#__PURE__*/ _jsx(SupportModal, { onClose: ()=>setSupportOpen(false) }) ] }); } Y60145undefined147175undefined177233undefined235283undefined285329undefined331381undefined383436undefined438489undefined491549undefined551588undefined590649undefined651685undefined708714__WEBPACK_MODULE_REFERENCE__12_5b2264656661756c74225d_call_directImport_asiSafe1__._undefined732773 trueundefined778796/*require.resolve*/undefined798813null /* weak dependency, without id */undefined9771007"https://api.canhelp.gr"undefined101210340undefined10371043undefined10831091__WEBPACK_MODULE_REFERENCE__2_5b22757365526f75746572225d_call_directImport_asiSafe1__._undefined11171127__WEBPACK_MODULE_REFERENCE__2_5b22757365506174686e616d65225d_call_directImport_asiSafe1__._undefined11621171__WEBPACK_MODULE_REFERENCE__3_5b2275736553657373696f6e225d_call_directImport_asiSafe1__._undefined12021210__WEBPACK_MODULE_REFERENCE__4_5b227573654c6f63616c65225d_call_directImport_asiSafe1__._undefined12511258__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined13101317__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined13691376__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined14281435__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined14811488__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined15301537__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined15821589__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined16211626__WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._undefined16571662__WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._undefined16941699__WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._undefined17321737__WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._undefined18051813__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined19901998__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined24102425__WEBPACK_MODULE_REFERENCE__11_5b22757365456666656374697665526f6c65225d_call_directImport_asiSafe1__._undefined30243032__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined31813189__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined32503251__WEBPACK_MODULE_REFERENCE__10_5b22696f225d_call_directImport_asiSafe1__._undefined39533961__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined40804093__WEBPACK_MODULE_REFERENCE__9_5b22676574556e72656164436f756e74225d_call_directImport_asiSafe1__._undefined43424350__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined44514464__WEBPACK_MODULE_REFERENCE__9_5b226765744d7944617368626f617264225d_call_directImport_asiSafe1__._undefined46164624__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined50845088__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined50905098__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined51495152__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined53605364__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined55185522__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined57435747__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined57495752__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined59895992__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined63036306__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined66756679__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined68996903__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined69056913__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined70367039__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined70417044__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined73947397__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined73997402__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined78017805__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined78077815__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined79387941__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined79437946__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined83828385__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined83878390__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined88038806__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined88088811__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined92559258__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined92609263__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined96019605__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined96079615__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined97389742__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined97449747__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined1008910092__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1063010633__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1131311316__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1189411898__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1190011903__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined1223612239__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1277612779__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1340613409__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1398713991__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1428014284__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1470614709__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1490414918__WEBPACK_MODULE_REFERENCE__5_5b22666f726d617453686f72744e616d65225d_call_directImport_asiSafe1__._undefined1515415157__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1562315626__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1613916142__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1669216695__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1733717341__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1768117685__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1768717695__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined1786617870__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1787217875__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined1843518438__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1910019103__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1995719961__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1996319966__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined2052820531__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2119321196__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2230622310__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2231222320__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined2249122495__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2249722500__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined2306423067__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2377123774__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2457924583__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2504825051__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2589425898__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2590025903__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined2645826461__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2716427167__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2792027924__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2837928382__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2922529229__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2923129234__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined2979429797__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3045930462__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3160531609__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3161131614__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined3213332136__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3275032753__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3361833622__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3362433627__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined3414334147__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3484334846__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3582635829__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3672036724__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3672636729__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined3724737250__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3786437867__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3870138705__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3870738710__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined3923039233__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3984739850__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4074240745__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4100341007__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4169541698__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4231242315__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4324443247__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4350543509__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4393543941__WEBPACK_MODULE_REFERENCE__3_5b227369676e4f7574225d_call_directImport_asiSafe1__._undefined4437344376__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4497644979__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4608646090__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4609246100__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined4622346226__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4622846231__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined4661646619__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4662146624__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined4712547128__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4713047145__WEBPACK_MODULE_REFERENCE__8_5b224c616e67756167655377697463686572225d_directImport_asiSafe1__._undefined4727247276__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4747347476__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4747847493__WEBPACK_MODULE_REFERENCE__8_5b224c616e67756167655377697463686572225d_directImport_asiSafe1__._undefined4755547558__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4785647859__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4830548308__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4861848621__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4918949193__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4940749411__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4941349421__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined4952849532__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4953449537__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined4987649879__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5033550338__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5093550939__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5094150944__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5129151294__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5175051753__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5248452488__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5249052498__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined5260552609__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5261152614__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5296752970__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5342653429__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5399553999__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5400154004__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5434354346__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5480254805__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5548155485__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5548755490__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5584155844__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5630056303__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5713457138__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5714057148__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined5725557259__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5726157264__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5760757610__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5810858111__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5875358756__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5919559199__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5920159209__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined5933259336__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5933859341__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5973459737__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6024160244__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6088260886__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6088860891__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6128261285__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6178961792__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6266262666__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6266862676__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined6279962803__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6280562808__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6320963212__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6375963762__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6442364427__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6479664799__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6543765441__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6544365446__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6583365836__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6634066343__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6719367197__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6719967202__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6755567558__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6801468017__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6872268726__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6872868731__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6908269085__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6954669549__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7019870202__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7020470207__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined7054670550__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7106971072__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7193271935__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7258672590__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7259272595__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined7294472947__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7340873411__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7402974033__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7422274228__WEBPACK_MODULE_REFERENCE__3_5b227369676e4f7574225d_call_directImport_asiSafe1__._undefined7466274665__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7511275115__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7578875792__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7579475802__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined7590975912__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7591475917__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined7631576318__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7632076323__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined7689876901__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7702977033__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7724477247__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7743877442__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7759677599__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7784477847__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7813578139__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7831778320__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7870178704__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7870678709__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined7921579218__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined@`]_D^3R%Y5i?i>^=B _ I ; M8u|I]UwGaGp_ By 4""\####t$$$ %k&&&'(((0))))D*+B,D,_,..x.z..0001n222 3333!4w557%8:;Y====A??AAaD_DF9GZHHLJJYKKLLN OQXQ~SSJVVW6X8XX2Y~YYY[G\^'_}b_bbcJee*hthlmmgmn^n`nnp+qs5tZwwwyy }X}Z}}ۂ%_b)s Yӎi*vxŖ̘|ƛ'suŸơʤ2_HNHֵص%-wݺ';5l _UW!km;t?NP7ai3k_*04*t<aiew_CE/A13); z       t|}_0E^ /!'#q#&#'%'t'';(=((*e*,,g//$1_n1384:44 6T6L88;4<6<<=.>?@@CMCOCCDEEG\GI1J3JJKL&N_pNQRTTT (/* binding */ Header) }); // EXTERNAL MODULE: ../../node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.js var react_jsx_runtime = __webpack_require__(78157); // EXTERNAL MODULE: ../../node_modules/next/dist/client/app-dir/link.js var app_dir_link = __webpack_require__(94496); var link_default = /*#__PURE__*/__webpack_require__.n(app_dir_link); // EXTERNAL MODULE: ../../node_modules/next/dist/api/navigation.js var navigation = __webpack_require__(71159); // EXTERNAL MODULE: ./src/lib/auth.ts var auth = __webpack_require__(13260); // EXTERNAL MODULE: ./src/context/locale.tsx var context_locale = __webpack_require__(96484); // EXTERNAL MODULE: ./src/lib/formatName.ts var formatName = __webpack_require__(48178); // EXTERNAL MODULE: ../../node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js var react = __webpack_require__(31768); // EXTERNAL MODULE: ./src/lib/translations.ts var translations = __webpack_require__(12998); ;// ./src/components/LanguageSwitcher.tsx /* __next_internal_client_entry_do_not_use__ LanguageSwitcher auto */ function LanguageSwitcher() { const { locale, setLocale } = (0,context_locale/* useLocale */.Y)(); const [open, setOpen] = (0,react.useState)(false); const ref = (0,react.useRef)(null); const current = translations/* LOCALES */.YZ.find((l)=>l.code === locale) ?? translations/* LOCALES */.YZ[0]; // Close on outside click process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react.useEffect)(()=>{ function handleClick(e) { if (ref.current && !ref.current.contains(e.target)) setOpen(false); } document.addEventListener('mousedown', handleClick); return ()=>document.removeEventListener('mousedown', handleClick); }, []); return /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { ref: ref, className: "relative", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("button", { onClick: ()=>setOpen(!open), className: "flex items-center gap-1.5 px-2.5 py-1.5 rounded-lg border border-gray-200 hover:border-green-400 hover:bg-green-50 transition text-sm font-medium text-gray-700", "aria-label": "Change language", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", { children: current.code.toUpperCase() }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: `w-3.5 h-3.5 text-gray-400 transition-transform ${open ? 'rotate-180' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19 9l-7 7-7-7" }) }) ] }), open && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("div", { className: "absolute right-0 mt-1 w-40 bg-white border border-gray-200 rounded-xl shadow-lg z-50 overflow-hidden", children: translations/* LOCALES */.YZ.map((loc)=>/*#__PURE__*/ (0,react_jsx_runtime.jsxs)("button", { onClick: ()=>{ setLocale(loc.code); setOpen(false); }, className: `w-full flex items-center gap-2.5 px-3.5 py-2.5 text-sm hover:bg-green-50 transition ${locale === loc.code ? 'bg-green-50 text-green-700 font-medium' : 'text-gray-700'}`, children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", { children: loc.label }), locale === loc.code && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-3.5 h-3.5 ml-auto text-green-600", fill: "currentColor", viewBox: "0 0 20 20", children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { fillRule: "evenodd", d: "M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z", clipRule: "evenodd" }) }) ] }, loc.code)) }) ] }); } // EXTERNAL MODULE: ./src/lib/api.ts var api = __webpack_require__(91864); // EXTERNAL MODULE: ../../node_modules/socket.io-client/build/esm-debug/index.js + 30 modules var esm_debug = __webpack_require__(44826); ;// ./src/hooks/useEffectiveRole.ts /* __next_internal_client_entry_do_not_use__ useEffectiveRole auto */ function readPreviewRole() { if (typeof document === 'undefined') return null; const m = document.cookie.match(/(?:^|;\s*)canhelp_preview_role=([^;]+)/); return m?.[1] ?? null; } /** * Returns the effective role for the current user. * For admins, respects the `canhelp_preview_role` cookie set by AdminRolePreview widget. * Updates reactively when the widget dispatches `canhelp:preview-role`. */ function useEffectiveRole() { const { data: session } = (0,auth/* useSession */.wV)(); const userRole = session?.user?.role; const isAdmin = userRole === 'admin'; const [previewRole, setPreviewRole] = (0,react.useState)(null); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react.useEffect)(()=>{ if (!isAdmin) return; setPreviewRole(readPreviewRole()); const sync = ()=>setPreviewRole(readPreviewRole()); window.addEventListener('canhelp:preview-role', sync); document.addEventListener('visibilitychange', sync); return ()=>{ window.removeEventListener('canhelp:preview-role', sync); document.removeEventListener('visibilitychange', sync); }; }, [ isAdmin ]); if (!userRole) return null; if (isAdmin && previewRole) return previewRole; return userRole; } // EXTERNAL MODULE: ../../node_modules/next/dist/api/app-dynamic.js var app_dynamic = __webpack_require__(47262); ;// ./src/components/Header.tsx /* __next_internal_client_entry_do_not_use__ Header auto */ const SupportModal = (0,app_dynamic["default"])(async ()=>{ true && /*require.resolve*/(null /* weak dependency, without id */); }, { loadableGenerated: { modules: [ "components/Header.tsx -> " + "./SupportModal" ] }, ssr: false }); const API_URL = "https://api.canhelp.gr" || 0; function Header() { const router = (0,navigation.useRouter)(); const pathname = (0,navigation.usePathname)(); const { data: session } = (0,auth/* useSession */.wV)(); const { t, locale } = (0,context_locale/* useLocale */.Y)(); const [menuOpen, setMenuOpen] = (0,react.useState)(false); const [profileOpen, setProfileOpen] = (0,react.useState)(false); const [supportOpen, setSupportOpen] = (0,react.useState)(false); const [unreadNotif, setUnreadNotif] = (0,react.useState)(0); const [unreadChat, setUnreadChat] = (0,react.useState)(0); const [msgToast, setMsgToast] = (0,react.useState)(null); const [planTier, setPlanTier] = (0,react.useState)(null); const profileRef = (0,react.useRef)(null); const headerRef = (0,react.useRef)(null); const toastTimer = (0,react.useRef)(null); const pathnameRef = (0,react.useRef)(pathname); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react.useEffect)(()=>{ pathnameRef.current = pathname; }, [ pathname ]); // Close dropdowns on outside click process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react.useEffect)(()=>{ function handleClick(e) { if (profileRef.current && !profileRef.current.contains(e.target)) { setProfileOpen(false); } } document.addEventListener('mousedown', handleClick); return ()=>document.removeEventListener('mousedown', handleClick); }, []); const isAdmin = session?.user?.role === 'admin'; const effectiveRole = useEffectiveRole(); const isSpecialist = effectiveRole === 'specialist'; const isActive = (href, exact = false)=>exact ? pathname === href : pathname === href || pathname.startsWith(href + '/'); const navCls = (href, exact = false)=>`font-medium text-sm transition ${isActive(href, exact) ? 'text-green-600' : 'text-gray-600 hover:text-green-600'}`; const mobileNavCls = (href, exact = false)=>`flex items-center gap-2 font-medium py-1 ${isActive(href, exact) ? 'text-green-600' : 'text-gray-700'}`; // Reset chat badge when entering chat process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react.useEffect)(()=>{ if (pathname === '/chat') setUnreadChat(0); }, [ pathname ]); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react.useEffect)(()=>{ if (!session) return; const socket = (0,esm_debug.io)(API_URL, { withCredentials: true, transports: [ 'websocket', 'polling' ] }); socket.on('new_message', (msg)=>{ if (pathnameRef.current === '/chat') return; setUnreadChat((c)=>c + 1); if (toastTimer.current) clearTimeout(toastTimer.current); setMsgToast(msg); toastTimer.current = setTimeout(()=>setMsgToast(null), 5000); }); return ()=>{ socket.disconnect(); if (toastTimer.current) clearTimeout(toastTimer.current); }; }, [ session ]); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react.useEffect)(()=>{ if (!session) { setUnreadNotif(0); return; } const fetch = ()=>(0,api/* getUnreadCount */.$M)().then((r)=>setUnreadNotif(r.count)).catch(()=>{}); fetch(); const timer = setInterval(fetch, 30000); return ()=>clearInterval(timer); }, [ session ]); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react.useEffect)(()=>{ if (!session) { setPlanTier(null); return; } (0,api/* getMyDashboard */.H)().then((d)=>setPlanTier(d.plan?.tier ?? null)).catch(()=>{}); }, [ session ]); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react.useEffect)(()=>{ const onScroll = ()=>{ if (!headerRef.current) return; if (window.scrollY > 40) { headerRef.current.classList.add('header-shrink'); } else { headerRef.current.classList.remove('header-shrink'); } }; window.addEventListener('scroll', onScroll); return ()=>window.removeEventListener('scroll', onScroll); }, []); return /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("header", { ref: headerRef, className: "header-base bg-white border-b border-gray-200 sticky top-0 z-50 transition-all duration-300", children: /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "flex items-center justify-between h-16 header-content transition-all duration-300", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/", className: "flex items-center gap-2 shrink-0", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("img", { src: "/logo.png", alt: "CanHelp", className: "w-8 h-8 object-contain" }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", { className: "logo-text text-2xl font-bold text-green-600 transition-all duration-300", children: "CanHelp" }) ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("nav", { className: "hidden md:flex items-center gap-5 ml-auto", children: [ isSpecialist ? /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/tasks", className: navCls('/tasks'), children: t('nav.find_tasks') }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/dashboard", className: navCls('/dashboard'), children: t('nav.dashboard') }) ] }) : /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/tasks/new", className: navCls('/tasks/new', true), children: t('dashboard.new_task') }), " ", /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/tasks", className: navCls('/tasks'), children: t('nav.tasks') }), " ", /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/specialists", className: navCls('/specialists'), children: t('nav.specialists') }) ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/pricing", className: navCls('/pricing', true), children: t('nav.pricing', 'Pricing') }), session ? /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/notifications", className: "relative text-gray-600 hover:text-gray-900 flex items-center", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: `w-5 h-5 ${unreadNotif > 0 ? 'text-green-600' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75v-.7V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0" }) }), unreadNotif > 0 && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", { className: "absolute -top-1.5 -right-1.5 min-w-[16px] h-4 px-0.5 bg-red-500 text-white text-[10px] font-bold rounded-full flex items-center justify-center leading-none", children: unreadNotif > 99 ? '99+' : unreadNotif }) ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/chat", className: "relative text-gray-600 hover:text-gray-900 flex items-center", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: `w-5 h-5 ${unreadChat > 0 ? 'text-green-500' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 10h.01M12 10h.01M16 10h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z" }) }), unreadChat > 0 && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", { className: "absolute -top-1.5 -right-1.5 min-w-[16px] h-4 px-0.5 bg-green-500 text-white text-[10px] font-bold rounded-full flex items-center justify-center leading-none", children: unreadChat > 99 ? '99+' : unreadChat }) ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "relative", ref: profileRef, children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("button", { onClick: ()=>setProfileOpen(!profileOpen), className: "flex items-center gap-1.5 text-sm font-medium text-gray-600 hover:text-green-600", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", { className: "truncate max-w-[100px]", children: (0,formatName/* formatShortName */.H)(session.user.firstName, session.user.lastName, session.user.name) }), planTier === 'pro' && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", { className: "inline-flex items-center px-1.5 py-0.5 rounded-full text-[10px] font-bold bg-green-100 text-green-700 leading-none", children: "Pro" }), planTier === 'ultimate' && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", { className: "inline-flex items-center px-1.5 py-0.5 rounded-full text-[10px] font-bold bg-gradient-to-r from-amber-400 via-yellow-400 to-amber-400 text-gray-900 shadow-sm shadow-amber-300/50 leading-none", children: "★" }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19 9l-7 7-7-7" }) }) ] }), profileOpen && /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "absolute right-0 mt-2 w-52 bg-white border border-gray-200 rounded-xl shadow-lg py-1 z-50", children: [ isSpecialist ? /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/tasks/new", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 4v16m8-8H4" }) }), t('nav.new_task') ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/specialists", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z" }) }), t('nav.specialists') ] }) ] }) : /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/notifications", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: `w-4 h-4 shrink-0 ${unreadNotif > 0 ? 'text-green-600' : 'text-gray-400'}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75v-.7V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0" }) }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("span", { className: "flex items-center gap-1.5", children: [ t('nav.notifications'), unreadNotif > 0 && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", { className: "px-1.5 py-0.5 bg-red-500 text-white text-[10px] font-bold rounded-full leading-none", children: unreadNotif > 99 ? '99+' : unreadNotif }) ] }) ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/chat", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: `w-4 h-4 shrink-0 ${unreadChat > 0 ? 'text-green-500' : 'text-gray-400'}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 10h.01M12 10h.01M16 10h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z" }) }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("span", { className: "flex items-center gap-1.5", children: [ t('nav.chat'), unreadChat > 0 && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", { className: "px-1.5 py-0.5 bg-green-500 text-white text-[10px] font-bold rounded-full leading-none", children: unreadChat > 99 ? '99+' : unreadChat }) ] }) ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/dashboard", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" }) }), t('nav.dashboard') ] }) ] }), (isSpecialist || isAdmin) && /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/schedule", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" }) }), t('nav.schedule') ] }), isAdmin && /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/admin", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z" }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z" }) ] }), t('nav.admin') ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/profile", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z" }) }), t('nav.profile') ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/favorites", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z" }) }), t('nav.favorites') ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("hr", { className: "my-1 border-gray-100" }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("button", { className: "w-full flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-green-50", onClick: ()=>{ setProfileOpen(false); setSupportOpen(true); }, children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M18.364 5.636l-3.536 3.536m0 5.656l3.536 3.536M9.172 9.172L5.636 5.636m3.536 9.192l-3.536 3.536M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-5 0a4 4 0 11-8 0 4 4 0 018 0z" }) }), t('support.title') ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("hr", { className: "my-1 border-gray-100" }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("button", { className: "w-full flex items-center gap-2.5 px-4 py-2 text-sm text-red-500 hover:bg-red-50", onClick: ()=>{ setProfileOpen(false); (0,auth/* signOut */.CI)().then(()=>{ window.location.href = '/'; }); }, children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1" }) }), t('nav.logout') ] }) ] }) ] }) ] }) : /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/login", className: "text-gray-600 hover:text-green-600 font-medium text-sm", children: t('nav.login') }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/register", className: "bg-green-600 text-white px-4 py-2 rounded-lg hover:bg-green-700 font-medium text-sm", children: t('nav.register') }) ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)(LanguageSwitcher, {}) ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "md:hidden flex items-center gap-2", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)(LanguageSwitcher, {}), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("button", { className: "p-2", onClick: ()=>setMenuOpen(!menuOpen), "aria-label": "Toggle menu", children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-5 h-5 text-gray-600", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: menuOpen ? /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6 18L18 6M6 6l12 12" }) : /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4 6h16M4 12h16M4 18h16" }) }) }) ] }) ] }), menuOpen && /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "md:hidden py-4 border-t border-gray-100 flex flex-col gap-3", children: [ isSpecialist ? /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/tasks", className: mobileNavCls('/tasks'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" }) }), t('nav.find_tasks') ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/dashboard", className: mobileNavCls('/dashboard'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" }) }), t('nav.dashboard') ] }) ] }) : /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/tasks/new", className: mobileNavCls('/tasks/new', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 4v16m8-8H4" }) }), t('nav.new_task') ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/tasks", className: mobileNavCls('/tasks'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2" }) }), t('nav.tasks') ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/specialists", className: mobileNavCls('/specialists'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z" }) }), t('nav.specialists') ] }) ] }), session ? /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/chat", className: mobileNavCls('/chat', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: `w-4 h-4 shrink-0 ${unreadChat > 0 ? 'text-green-500' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 10h.01M12 10h.01M16 10h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z" }) }), t('nav.chat'), unreadChat > 0 && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", { className: "ml-1 px-1.5 py-0.5 bg-green-500 text-white text-[10px] font-bold rounded-full", children: unreadChat }) ] }), isSpecialist ? /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/tasks/new", className: mobileNavCls('/tasks/new', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 4v16m8-8H4" }) }), t('nav.new_task') ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/specialists", className: mobileNavCls('/specialists'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z" }) }), t('nav.specialists') ] }) ] }) : /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/notifications", className: mobileNavCls('/notifications', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: `w-4 h-4 shrink-0 ${unreadNotif > 0 ? 'text-green-600' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75v-.7V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0" }) }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("span", { className: "flex items-center gap-1.5", children: [ t('nav.notifications'), unreadNotif > 0 && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", { className: "px-1.5 py-0.5 bg-red-500 text-white text-[10px] font-bold rounded-full", children: unreadNotif > 99 ? '99+' : unreadNotif }) ] }) ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/dashboard", className: mobileNavCls('/dashboard'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" }) }), t('nav.dashboard') ] }) ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/favorites", className: mobileNavCls('/favorites', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z" }) }), t('nav.favorites') ] }), (isSpecialist || isAdmin) && /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/schedule", className: mobileNavCls('/schedule', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 text-gray-400", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" }) }), t('nav.schedule') ] }), isAdmin && /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/admin", className: mobileNavCls('/admin'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("svg", { className: "w-4 h-4 text-gray-400", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z" }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z" }) ] }), t('nav.admin') ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/profile", className: mobileNavCls('/profile', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 text-gray-400", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z" }) }), t('nav.profile') ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("button", { onClick: ()=>{ setMenuOpen(false); (0,auth/* signOut */.CI)().then(()=>{ window.location.href = '/'; }); }, className: "flex items-center gap-2 text-left text-red-500 py-1 font-medium", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1" }) }), t('nav.logout') ] }) ] }) : /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/login", className: "text-gray-700 font-medium py-1", onClick: ()=>setMenuOpen(false), children: t('nav.login') }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/register", className: "text-green-600 font-medium py-1", onClick: ()=>setMenuOpen(false), children: t('nav.register') }) ] }) ] }) ] }) }), msgToast && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("div", { className: "fixed bottom-5 right-5 z-[200] max-w-sm w-full", children: /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "bg-white border border-gray-200 rounded-xl shadow-xl p-4 flex items-start gap-3 animate-fade-in", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", { className: "text-2xl shrink-0", children: "\uD83D\uDCAC" }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "flex-1 min-w-0", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("p", { className: "font-semibold text-gray-900 text-sm", children: t('chat.toast_title') }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("p", { className: "text-xs text-gray-500 truncate mt-0.5", children: msgToast.body }) ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "flex flex-col items-end gap-2 shrink-0", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("button", { onClick: ()=>setMsgToast(null), className: "text-gray-400 hover:text-gray-600 text-lg leading-none", "aria-label": "close", children: "\xd7" }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: `/chat?room=${msgToast.roomId}`, onClick: ()=>setMsgToast(null), className: "text-xs text-green-600 hover:underline font-medium", children: t('chat.toast_open') }) ] }) ] }) }), supportOpen && /*#__PURE__*/ (0,react_jsx_runtime.jsx)(SupportModal, { onClose: ()=>setSupportOpen(false) }) ] }); } {"finalSource":true}mapbufferedMap `ConcatSourceRawSourceN // EXPORTS __webpack_require__.d(__webpack_exports__, { Header: () => (/* binding */ Header) }); // EXTERNAL MODULE: ../../node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.js var react_jsx_runtime = __webpack_require__(78157); // EXTERNAL MODULE: ../../node_modules/next/dist/client/app-dir/link.js var app_dir_link = __webpack_require__(94496); var link_default = /*#__PURE__*/__webpack_require__.n(app_dir_link); // EXTERNAL MODULE: ../../node_modules/next/dist/api/navigation.js var navigation = __webpack_require__(71159); // EXTERNAL MODULE: ./src/lib/auth.ts var auth = __webpack_require__(13260); // EXTERNAL MODULE: ./src/context/locale.tsx var context_locale = __webpack_require__(96484); // EXTERNAL MODULE: ./src/lib/formatName.ts var formatName = __webpack_require__(48178); // EXTERNAL MODULE: ../../node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js var react = __webpack_require__(31768); // EXTERNAL MODULE: ./src/lib/translations.ts var translations = __webpack_require__(12998); ;// ./src/components/LanguageSwitcher.tsx  ReplaceSourceReplaceSourceRawSourcec/* __next_internal_client_entry_do_not_use__ LanguageSwitcher auto */ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; import { useState, useRef, useEffect } from 'react'; import { useLocale } from '@/context/locale'; import { LOCALES } from '@/lib/translations'; export function LanguageSwitcher() { const { locale, setLocale } = useLocale(); const [open, setOpen] = useState(false); const ref = useRef(null); const current = LOCALES.find((l)=>l.code === locale) ?? LOCALES[0]; // Close on outside click process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ function handleClick(e) { if (ref.current && !ref.current.contains(e.target)) setOpen(false); } document.addEventListener('mousedown', handleClick); return ()=>document.removeEventListener('mousedown', handleClick); }, []); return /*#__PURE__*/ _jsxs("div", { ref: ref, className: "relative", children: [ /*#__PURE__*/ _jsxs("button", { onClick: ()=>setOpen(!open), className: "flex items-center gap-1.5 px-2.5 py-1.5 rounded-lg border border-gray-200 hover:border-green-400 hover:bg-green-50 transition text-sm font-medium text-gray-700", "aria-label": "Change language", children: [ /*#__PURE__*/ _jsx("span", { children: current.code.toUpperCase() }), /*#__PURE__*/ _jsx("svg", { className: `w-3.5 h-3.5 text-gray-400 transition-transform ${open ? 'rotate-180' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19 9l-7 7-7-7" }) }) ] }), open && /*#__PURE__*/ _jsx("div", { className: "absolute right-0 mt-1 w-40 bg-white border border-gray-200 rounded-xl shadow-lg z-50 overflow-hidden", children: LOCALES.map((loc)=>/*#__PURE__*/ _jsxs("button", { onClick: ()=>{ setLocale(loc.code); setOpen(false); }, className: `w-full flex items-center gap-2.5 px-3.5 py-2.5 text-sm hover:bg-green-50 transition ${locale === loc.code ? 'bg-green-50 text-green-700 font-medium' : 'text-gray-700'}`, children: [ /*#__PURE__*/ _jsx("span", { children: loc.label }), locale === loc.code && /*#__PURE__*/ _jsx("svg", { className: "w-3.5 h-3.5 ml-auto text-green-600", fill: "currentColor", viewBox: "0 0 20 20", children: /*#__PURE__*/ _jsx("path", { fillRule: "evenodd", d: "M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z", clipRule: "evenodd" }) }) ] }, loc.code)) }) ] }); } r70132undefined134185undefined187231undefined233277undefined279285undefined350358__WEBPACK_MODULE_REFERENCE__4_5b227573654c6f63616c65225d_call_directImport_asiSafe1__._undefined391398__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined424429__WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._undefined458464__WEBPACK_MODULE_REFERENCE__7_5b224c4f43414c4553225d_call_asiSafe1__._undefined498504__WEBPACK_MODULE_REFERENCE__7_5b224c4f43414c4553225d_asiSafe1__._undefined595603__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined908912__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined10181022__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined13821385__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined15161519__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined18631866__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined21492152__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined23202326__WEBPACK_MODULE_REFERENCE__7_5b224c4f43414c4553225d_call_asiSafe1__._undefined23532357__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined28142817__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined29782981__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined32373240__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined138224(0,context_locale/* useLocale */.Y)undefined257341(0,react.useState)undefined367447(0,react.useRef)undefined476545translations/* LOCALES */.YZundefined579643translations/* LOCALES */.YZundefined734820(0,react.useEffect)undefined11251201(0,react_jsx_runtime.jsxs)undefined13071383(0,react_jsx_runtime.jsxs)undefined17431817(0,react_jsx_runtime.jsx)undefined19482022(0,react_jsx_runtime.jsx)undefined23662440(0,react_jsx_runtime.jsx)undefined27232797(0,react_jsx_runtime.jsx)undefined29653034translations/* LOCALES */.YZundefined30613137(0,react_jsx_runtime.jsxs)undefined35943668(0,react_jsx_runtime.jsx)undefined38293903(0,react_jsx_runtime.jsx)undefined41594233(0,react_jsx_runtime.jsx)undefinedRawSource // EXTERNAL MODULE: ./src/lib/api.ts var api = __webpack_require__(91864); // EXTERNAL MODULE: ../../node_modules/socket.io-client/build/esm-debug/index.js + 30 modules var esm_debug = __webpack_require__(44826); ;// ./src/hooks/useEffectiveRole.ts /* __next_internal_client_entry_do_not_use__ useEffectiveRole auto */ import { useSession } from '@/lib/auth'; import { useEffect, useState } from 'react'; function readPreviewRole() { if (typeof document === 'undefined') return null; const m = document.cookie.match(/(?:^|;\s*)canhelp_preview_role=([^;]+)/); return m?.[1] ?? null; } /** * Returns the effective role for the current user. * For admins, respects the `canhelp_preview_role` cookie set by AdminRolePreview widget. * Updates reactively when the widget dispatches `canhelp:preview-role`. */ export function useEffectiveRole() { const { data: session } = useSession(); const userRole = session?.user?.role; const isAdmin = userRole === 'admin'; const [previewRole, setPreviewRole] = useState(null); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ if (!isAdmin) return; setPreviewRole(readPreviewRole()); const sync = ()=>setPreviewRole(readPreviewRole()); window.addEventListener('canhelp:preview-role', sync); document.addEventListener('visibilitychange', sync); return ()=>{ window.removeEventListener('canhelp:preview-role', sync); document.removeEventListener('visibilitychange', sync); }; }, [ isAdmin ]); if (!userRole) return null; if (isAdmin && previewRole) return previewRole; return userRole; } ^70109undefined111154undefined570576undefined637646__WEBPACK_MODULE_REFERENCE__3_5b2275736553657373696f6e225d_call_directImport_asiSafe1__._undefined777784__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined848856__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefinedv546634(0,auth/* useSession */.wV)undefined765849(0,react.useState)undefined913999(0,react.useEffect)undefinedRawSource // EXTERNAL MODULE: ../../node_modules/next/dist/api/app-dynamic.js var app_dynamic = __webpack_require__(47262); ;// ./src/components/Header.tsx 5/* __next_internal_client_entry_do_not_use__ Header auto */ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime"; import Link from 'next/link'; import { useRouter, usePathname } from 'next/navigation'; import { useSession, signOut } from '@/lib/auth'; import { useLocale } from '@/context/locale'; import { formatShortName } from '@/lib/formatName'; import { LanguageSwitcher } from './LanguageSwitcher'; import { useState, useRef, useEffect } from 'react'; import { getUnreadCount, getMyDashboard } from '@/lib/api'; import { io } from 'socket.io-client'; import { useEffectiveRole } from '@/hooks/useEffectiveRole'; import dynamic from 'next/dynamic'; const SupportModal = dynamic(async ()=>{ typeof require.resolveWeak !== "undefined" && require.resolveWeak("./SupportModal"); }, { loadableGenerated: { modules: [ "components/Header.tsx -> " + "./SupportModal" ] }, ssr: false }); const API_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:4000'; export function Header() { const router = useRouter(); const pathname = usePathname(); const { data: session } = useSession(); const { t, locale } = useLocale(); const [menuOpen, setMenuOpen] = useState(false); const [profileOpen, setProfileOpen] = useState(false); const [supportOpen, setSupportOpen] = useState(false); const [unreadNotif, setUnreadNotif] = useState(0); const [unreadChat, setUnreadChat] = useState(0); const [msgToast, setMsgToast] = useState(null); const [planTier, setPlanTier] = useState(null); const profileRef = useRef(null); const headerRef = useRef(null); const toastTimer = useRef(null); const pathnameRef = useRef(pathname); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ pathnameRef.current = pathname; }, [ pathname ]); // Close dropdowns on outside click process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ function handleClick(e) { if (profileRef.current && !profileRef.current.contains(e.target)) { setProfileOpen(false); } } document.addEventListener('mousedown', handleClick); return ()=>document.removeEventListener('mousedown', handleClick); }, []); const isAdmin = session?.user?.role === 'admin'; const effectiveRole = useEffectiveRole(); const isSpecialist = effectiveRole === 'specialist'; const isActive = (href, exact = false)=>exact ? pathname === href : pathname === href || pathname.startsWith(href + '/'); const navCls = (href, exact = false)=>`font-medium text-sm transition ${isActive(href, exact) ? 'text-green-600' : 'text-gray-600 hover:text-green-600'}`; const mobileNavCls = (href, exact = false)=>`flex items-center gap-2 font-medium py-1 ${isActive(href, exact) ? 'text-green-600' : 'text-gray-700'}`; // Reset chat badge when entering chat process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ if (pathname === '/chat') setUnreadChat(0); }, [ pathname ]); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ if (!session) return; const socket = io(API_URL, { withCredentials: true, transports: [ 'websocket', 'polling' ] }); socket.on('new_message', (msg)=>{ if (pathnameRef.current === '/chat') return; setUnreadChat((c)=>c + 1); if (toastTimer.current) clearTimeout(toastTimer.current); setMsgToast(msg); toastTimer.current = setTimeout(()=>setMsgToast(null), 5000); }); return ()=>{ socket.disconnect(); if (toastTimer.current) clearTimeout(toastTimer.current); }; }, [ session ]); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ if (!session) { setUnreadNotif(0); return; } const fetch = ()=>getUnreadCount().then((r)=>setUnreadNotif(r.count)).catch(()=>{}); fetch(); const timer = setInterval(fetch, 30000); return ()=>clearInterval(timer); }, [ session ]); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ if (!session) { setPlanTier(null); return; } getMyDashboard().then((d)=>setPlanTier(d.plan?.tier ?? null)).catch(()=>{}); }, [ session ]); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ const onScroll = ()=>{ if (!headerRef.current) return; if (window.scrollY > 40) { headerRef.current.classList.add('header-shrink'); } else { headerRef.current.classList.remove('header-shrink'); } }; window.addEventListener('scroll', onScroll); return ()=>window.removeEventListener('scroll', onScroll); }, []); return /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx("header", { ref: headerRef, className: "header-base bg-white border-b border-gray-200 sticky top-0 z-50 transition-all duration-300", children: /*#__PURE__*/ _jsxs("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: [ /*#__PURE__*/ _jsxs("div", { className: "flex items-center justify-between h-16 header-content transition-all duration-300", children: [ /*#__PURE__*/ _jsxs(Link, { href: "/", className: "flex items-center gap-2 shrink-0", children: [ /*#__PURE__*/ _jsx("img", { src: "/logo.png", alt: "CanHelp", className: "w-8 h-8 object-contain" }), /*#__PURE__*/ _jsx("span", { className: "logo-text text-2xl font-bold text-green-600 transition-all duration-300", children: "CanHelp" }) ] }), /*#__PURE__*/ _jsxs("nav", { className: "hidden md:flex items-center gap-5 ml-auto", children: [ isSpecialist ? /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx(Link, { href: "/tasks", className: navCls('/tasks'), children: t('nav.find_tasks') }), /*#__PURE__*/ _jsx(Link, { href: "/dashboard", className: navCls('/dashboard'), children: t('nav.dashboard') }) ] }) : /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx(Link, { href: "/tasks/new", className: navCls('/tasks/new', true), children: t('dashboard.new_task') }), " ", /*#__PURE__*/ _jsx(Link, { href: "/tasks", className: navCls('/tasks'), children: t('nav.tasks') }), " ", /*#__PURE__*/ _jsx(Link, { href: "/specialists", className: navCls('/specialists'), children: t('nav.specialists') }) ] }), /*#__PURE__*/ _jsx(Link, { href: "/pricing", className: navCls('/pricing', true), children: t('nav.pricing', 'Pricing') }), session ? /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs(Link, { href: "/notifications", className: "relative text-gray-600 hover:text-gray-900 flex items-center", children: [ /*#__PURE__*/ _jsx("svg", { className: `w-5 h-5 ${unreadNotif > 0 ? 'text-green-600' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75v-.7V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0" }) }), unreadNotif > 0 && /*#__PURE__*/ _jsx("span", { className: "absolute -top-1.5 -right-1.5 min-w-[16px] h-4 px-0.5 bg-red-500 text-white text-[10px] font-bold rounded-full flex items-center justify-center leading-none", children: unreadNotif > 99 ? '99+' : unreadNotif }) ] }), /*#__PURE__*/ _jsxs(Link, { href: "/chat", className: "relative text-gray-600 hover:text-gray-900 flex items-center", children: [ /*#__PURE__*/ _jsx("svg", { className: `w-5 h-5 ${unreadChat > 0 ? 'text-green-500' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 10h.01M12 10h.01M16 10h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z" }) }), unreadChat > 0 && /*#__PURE__*/ _jsx("span", { className: "absolute -top-1.5 -right-1.5 min-w-[16px] h-4 px-0.5 bg-green-500 text-white text-[10px] font-bold rounded-full flex items-center justify-center leading-none", children: unreadChat > 99 ? '99+' : unreadChat }) ] }), /*#__PURE__*/ _jsxs("div", { className: "relative", ref: profileRef, children: [ /*#__PURE__*/ _jsxs("button", { onClick: ()=>setProfileOpen(!profileOpen), className: "flex items-center gap-1.5 text-sm font-medium text-gray-600 hover:text-green-600", children: [ /*#__PURE__*/ _jsx("span", { className: "truncate max-w-[100px]", children: formatShortName(session.user.firstName, session.user.lastName, session.user.name) }), planTier === 'pro' && /*#__PURE__*/ _jsx("span", { className: "inline-flex items-center px-1.5 py-0.5 rounded-full text-[10px] font-bold bg-green-100 text-green-700 leading-none", children: "Pro" }), planTier === 'ultimate' && /*#__PURE__*/ _jsx("span", { className: "inline-flex items-center px-1.5 py-0.5 rounded-full text-[10px] font-bold bg-gradient-to-r from-amber-400 via-yellow-400 to-amber-400 text-gray-900 shadow-sm shadow-amber-300/50 leading-none", children: "★" }), /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19 9l-7 7-7-7" }) }) ] }), profileOpen && /*#__PURE__*/ _jsxs("div", { className: "absolute right-0 mt-2 w-52 bg-white border border-gray-200 rounded-xl shadow-lg py-1 z-50", children: [ isSpecialist ? /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs(Link, { href: "/tasks/new", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 4v16m8-8H4" }) }), t('nav.new_task') ] }), /*#__PURE__*/ _jsxs(Link, { href: "/specialists", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z" }) }), t('nav.specialists') ] }) ] }) : /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs(Link, { href: "/notifications", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: `w-4 h-4 shrink-0 ${unreadNotif > 0 ? 'text-green-600' : 'text-gray-400'}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75v-.7V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0" }) }), /*#__PURE__*/ _jsxs("span", { className: "flex items-center gap-1.5", children: [ t('nav.notifications'), unreadNotif > 0 && /*#__PURE__*/ _jsx("span", { className: "px-1.5 py-0.5 bg-red-500 text-white text-[10px] font-bold rounded-full leading-none", children: unreadNotif > 99 ? '99+' : unreadNotif }) ] }) ] }), /*#__PURE__*/ _jsxs(Link, { href: "/chat", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: `w-4 h-4 shrink-0 ${unreadChat > 0 ? 'text-green-500' : 'text-gray-400'}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 10h.01M12 10h.01M16 10h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z" }) }), /*#__PURE__*/ _jsxs("span", { className: "flex items-center gap-1.5", children: [ t('nav.chat'), unreadChat > 0 && /*#__PURE__*/ _jsx("span", { className: "px-1.5 py-0.5 bg-green-500 text-white text-[10px] font-bold rounded-full leading-none", children: unreadChat > 99 ? '99+' : unreadChat }) ] }) ] }), /*#__PURE__*/ _jsxs(Link, { href: "/dashboard", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" }) }), t('nav.dashboard') ] }) ] }), (isSpecialist || isAdmin) && /*#__PURE__*/ _jsxs(Link, { href: "/schedule", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" }) }), t('nav.schedule') ] }), isAdmin && /*#__PURE__*/ _jsxs(Link, { href: "/admin", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsxs("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: [ /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z" }), /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z" }) ] }), t('nav.admin') ] }), /*#__PURE__*/ _jsxs(Link, { href: "/profile", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z" }) }), t('nav.profile') ] }), /*#__PURE__*/ _jsxs(Link, { href: "/favorites", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z" }) }), t('nav.favorites') ] }), /*#__PURE__*/ _jsx("hr", { className: "my-1 border-gray-100" }), /*#__PURE__*/ _jsxs("button", { className: "w-full flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-green-50", onClick: ()=>{ setProfileOpen(false); setSupportOpen(true); }, children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M18.364 5.636l-3.536 3.536m0 5.656l3.536 3.536M9.172 9.172L5.636 5.636m3.536 9.192l-3.536 3.536M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-5 0a4 4 0 11-8 0 4 4 0 018 0z" }) }), t('support.title') ] }), /*#__PURE__*/ _jsx("hr", { className: "my-1 border-gray-100" }), /*#__PURE__*/ _jsxs("button", { className: "w-full flex items-center gap-2.5 px-4 py-2 text-sm text-red-500 hover:bg-red-50", onClick: ()=>{ setProfileOpen(false); signOut().then(()=>{ window.location.href = '/'; }); }, children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1" }) }), t('nav.logout') ] }) ] }) ] }) ] }) : /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx(Link, { href: "/login", className: "text-gray-600 hover:text-green-600 font-medium text-sm", children: t('nav.login') }), /*#__PURE__*/ _jsx(Link, { href: "/register", className: "bg-green-600 text-white px-4 py-2 rounded-lg hover:bg-green-700 font-medium text-sm", children: t('nav.register') }) ] }), /*#__PURE__*/ _jsx(LanguageSwitcher, {}) ] }), /*#__PURE__*/ _jsxs("div", { className: "md:hidden flex items-center gap-2", children: [ /*#__PURE__*/ _jsx(LanguageSwitcher, {}), /*#__PURE__*/ _jsx("button", { className: "p-2", onClick: ()=>setMenuOpen(!menuOpen), "aria-label": "Toggle menu", children: /*#__PURE__*/ _jsx("svg", { className: "w-5 h-5 text-gray-600", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: menuOpen ? /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6 18L18 6M6 6l12 12" }) : /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4 6h16M4 12h16M4 18h16" }) }) }) ] }) ] }), menuOpen && /*#__PURE__*/ _jsxs("div", { className: "md:hidden py-4 border-t border-gray-100 flex flex-col gap-3", children: [ isSpecialist ? /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs(Link, { href: "/tasks", className: mobileNavCls('/tasks'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" }) }), t('nav.find_tasks') ] }), /*#__PURE__*/ _jsxs(Link, { href: "/dashboard", className: mobileNavCls('/dashboard'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" }) }), t('nav.dashboard') ] }) ] }) : /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs(Link, { href: "/tasks/new", className: mobileNavCls('/tasks/new', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 4v16m8-8H4" }) }), t('nav.new_task') ] }), /*#__PURE__*/ _jsxs(Link, { href: "/tasks", className: mobileNavCls('/tasks'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2" }) }), t('nav.tasks') ] }), /*#__PURE__*/ _jsxs(Link, { href: "/specialists", className: mobileNavCls('/specialists'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z" }) }), t('nav.specialists') ] }) ] }), session ? /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs(Link, { href: "/chat", className: mobileNavCls('/chat', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: `w-4 h-4 shrink-0 ${unreadChat > 0 ? 'text-green-500' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 10h.01M12 10h.01M16 10h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z" }) }), t('nav.chat'), unreadChat > 0 && /*#__PURE__*/ _jsx("span", { className: "ml-1 px-1.5 py-0.5 bg-green-500 text-white text-[10px] font-bold rounded-full", children: unreadChat }) ] }), isSpecialist ? /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs(Link, { href: "/tasks/new", className: mobileNavCls('/tasks/new', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 4v16m8-8H4" }) }), t('nav.new_task') ] }), /*#__PURE__*/ _jsxs(Link, { href: "/specialists", className: mobileNavCls('/specialists'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z" }) }), t('nav.specialists') ] }) ] }) : /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs(Link, { href: "/notifications", className: mobileNavCls('/notifications', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: `w-4 h-4 shrink-0 ${unreadNotif > 0 ? 'text-green-600' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75v-.7V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0" }) }), /*#__PURE__*/ _jsxs("span", { className: "flex items-center gap-1.5", children: [ t('nav.notifications'), unreadNotif > 0 && /*#__PURE__*/ _jsx("span", { className: "px-1.5 py-0.5 bg-red-500 text-white text-[10px] font-bold rounded-full", children: unreadNotif > 99 ? '99+' : unreadNotif }) ] }) ] }), /*#__PURE__*/ _jsxs(Link, { href: "/dashboard", className: mobileNavCls('/dashboard'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" }) }), t('nav.dashboard') ] }) ] }), /*#__PURE__*/ _jsxs(Link, { href: "/favorites", className: mobileNavCls('/favorites', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z" }) }), t('nav.favorites') ] }), (isSpecialist || isAdmin) && /*#__PURE__*/ _jsxs(Link, { href: "/schedule", className: mobileNavCls('/schedule', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" }) }), t('nav.schedule') ] }), isAdmin && /*#__PURE__*/ _jsxs(Link, { href: "/admin", className: mobileNavCls('/admin'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsxs("svg", { className: "w-4 h-4 text-gray-400", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: [ /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z" }), /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z" }) ] }), t('nav.admin') ] }), /*#__PURE__*/ _jsxs(Link, { href: "/profile", className: mobileNavCls('/profile', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z" }) }), t('nav.profile') ] }), /*#__PURE__*/ _jsxs("button", { onClick: ()=>{ setMenuOpen(false); signOut().then(()=>{ window.location.href = '/'; }); }, className: "flex items-center gap-2 text-left text-red-500 py-1 font-medium", children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1" }) }), t('nav.logout') ] }) ] }) : /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx(Link, { href: "/login", className: "text-gray-700 font-medium py-1", onClick: ()=>setMenuOpen(false), children: t('nav.login') }), /*#__PURE__*/ _jsx(Link, { href: "/register", className: "text-green-600 font-medium py-1", onClick: ()=>setMenuOpen(false), children: t('nav.register') }) ] }) ] }) ] }) }), msgToast && /*#__PURE__*/ _jsx("div", { className: "fixed bottom-5 right-5 z-[200] max-w-sm w-full", children: /*#__PURE__*/ _jsxs("div", { className: "bg-white border border-gray-200 rounded-xl shadow-xl p-4 flex items-start gap-3 animate-fade-in", children: [ /*#__PURE__*/ _jsx("span", { className: "text-2xl shrink-0", children: "\uD83D\uDCAC" }), /*#__PURE__*/ _jsxs("div", { className: "flex-1 min-w-0", children: [ /*#__PURE__*/ _jsx("p", { className: "font-semibold text-gray-900 text-sm", children: t('chat.toast_title') }), /*#__PURE__*/ _jsx("p", { className: "text-xs text-gray-500 truncate mt-0.5", children: msgToast.body }) ] }), /*#__PURE__*/ _jsxs("div", { className: "flex flex-col items-end gap-2 shrink-0", children: [ /*#__PURE__*/ _jsx("button", { onClick: ()=>setMsgToast(null), className: "text-gray-400 hover:text-gray-600 text-lg leading-none", "aria-label": "close", children: "\xd7" }), /*#__PURE__*/ _jsx(Link, { href: `/chat?room=${msgToast.roomId}`, onClick: ()=>setMsgToast(null), className: "text-xs text-green-600 hover:underline font-medium", children: t('chat.toast_open') }) ] }) ] }) }), supportOpen && /*#__PURE__*/ _jsx(SupportModal, { onClose: ()=>setSupportOpen(false) }) ] }); } Y60145undefined147175undefined177233undefined235283undefined285329undefined331381undefined383436undefined438489undefined491549undefined551588undefined590649undefined651685undefined708714__WEBPACK_MODULE_REFERENCE__12_5b2264656661756c74225d_call_directImport_asiSafe1__._undefined732773 trueundefined778796/*require.resolve*/undefined798813null /* weak dependency, without id */undefined9771007"https://api.canhelp.gr"undefined101210340undefined10371043undefined10831091__WEBPACK_MODULE_REFERENCE__2_5b22757365526f75746572225d_call_directImport_asiSafe1__._undefined11171127__WEBPACK_MODULE_REFERENCE__2_5b22757365506174686e616d65225d_call_directImport_asiSafe1__._undefined11621171__WEBPACK_MODULE_REFERENCE__3_5b2275736553657373696f6e225d_call_directImport_asiSafe1__._undefined12021210__WEBPACK_MODULE_REFERENCE__4_5b227573654c6f63616c65225d_call_directImport_asiSafe1__._undefined12511258__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined13101317__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined13691376__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined14281435__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined14811488__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined15301537__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined15821589__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined16211626__WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._undefined16571662__WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._undefined16941699__WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._undefined17321737__WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._undefined18051813__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined19901998__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined24102425__WEBPACK_MODULE_REFERENCE__11_5b22757365456666656374697665526f6c65225d_call_directImport_asiSafe1__._undefined30243032__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined31813189__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined32503251__WEBPACK_MODULE_REFERENCE__10_5b22696f225d_call_directImport_asiSafe1__._undefined39533961__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined40804093__WEBPACK_MODULE_REFERENCE__9_5b22676574556e72656164436f756e74225d_call_directImport_asiSafe1__._undefined43424350__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined44514464__WEBPACK_MODULE_REFERENCE__9_5b226765744d7944617368626f617264225d_call_directImport_asiSafe1__._undefined46164624__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined50845088__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined50905098__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined51495152__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined53605364__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined55185522__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined57435747__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined57495752__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined59895992__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined63036306__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined66756679__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined68996903__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined69056913__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined70367039__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined70417044__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined73947397__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined73997402__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined78017805__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined78077815__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined79387941__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined79437946__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined83828385__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined83878390__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined88038806__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined88088811__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined92559258__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined92609263__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined96019605__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined96079615__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined97389742__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined97449747__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined1008910092__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1063010633__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1131311316__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1189411898__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1190011903__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined1223612239__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1277612779__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1340613409__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1398713991__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1428014284__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1470614709__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1490414918__WEBPACK_MODULE_REFERENCE__5_5b22666f726d617453686f72744e616d65225d_call_directImport_asiSafe1__._undefined1515415157__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1562315626__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1613916142__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1669216695__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1733717341__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1768117685__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1768717695__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined1786617870__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1787217875__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined1843518438__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1910019103__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1995719961__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1996319966__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined2052820531__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2119321196__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2230622310__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2231222320__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined2249122495__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2249722500__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined2306423067__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2377123774__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2457924583__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2504825051__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2589425898__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2590025903__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined2645826461__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2716427167__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2792027924__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2837928382__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2922529229__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2923129234__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined2979429797__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3045930462__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3160531609__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3161131614__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined3213332136__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3275032753__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3361833622__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3362433627__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined3414334147__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3484334846__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3582635829__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3672036724__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3672636729__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined3724737250__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3786437867__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3870138705__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3870738710__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined3923039233__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3984739850__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4074240745__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4100341007__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4169541698__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4231242315__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4324443247__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4350543509__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4393543941__WEBPACK_MODULE_REFERENCE__3_5b227369676e4f7574225d_call_directImport_asiSafe1__._undefined4437344376__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4497644979__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4608646090__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4609246100__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined4622346226__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4622846231__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined4661646619__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4662146624__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined4712547128__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4713047145__WEBPACK_MODULE_REFERENCE__8_5b224c616e67756167655377697463686572225d_directImport_asiSafe1__._undefined4727247276__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4747347476__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4747847493__WEBPACK_MODULE_REFERENCE__8_5b224c616e67756167655377697463686572225d_directImport_asiSafe1__._undefined4755547558__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4785647859__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4830548308__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4861848621__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4918949193__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4940749411__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4941349421__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined4952849532__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4953449537__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined4987649879__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5033550338__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5093550939__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5094150944__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5129151294__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5175051753__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5248452488__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5249052498__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined5260552609__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5261152614__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5296752970__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5342653429__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5399553999__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5400154004__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5434354346__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5480254805__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5548155485__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5548755490__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5584155844__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5630056303__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5713457138__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5714057148__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined5725557259__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5726157264__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5760757610__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5810858111__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5875358756__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5919559199__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5920159209__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined5933259336__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5933859341__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5973459737__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6024160244__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6088260886__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6088860891__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6128261285__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6178961792__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6266262666__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6266862676__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined6279962803__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6280562808__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6320963212__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6375963762__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6442364427__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6479664799__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6543765441__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6544365446__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6583365836__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6634066343__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6719367197__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6719967202__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6755567558__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6801468017__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6872268726__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6872868731__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6908269085__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6954669549__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7019870202__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7020470207__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined7054670550__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7106971072__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7193271935__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7258672590__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7259272595__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined7294472947__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7340873411__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7402974033__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7422274228__WEBPACK_MODULE_REFERENCE__3_5b227369676e4f7574225d_call_directImport_asiSafe1__._undefined7466274665__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7511275115__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7578875792__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7579475802__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined7590975912__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7591475917__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined7631576318__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7632076323__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined7689876901__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7702977033__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7724477247__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7743877442__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7759677599__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7784477847__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7813578139__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7831778320__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7870178704__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7870678709__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined7921579218__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefinedy&93176(0,app_dynamic["default"])undefined494580(0,navigation.useRouter)undefined606696(0,navigation.usePathname)undefined731819(0,auth/* useSession */.wV)undefined850936(0,context_locale/* useLocale */.Y)undefined9771061(0,react.useState)undefined11131197(0,react.useState)undefined12491333(0,react.useState)undefined13851469(0,react.useState)undefined15151599(0,react.useState)undefined16411725(0,react.useState)undefined17701854(0,react.useState)undefined18861966(0,react.useRef)undefined19972077(0,react.useRef)undefined21092189(0,react.useRef)undefined22222302(0,react.useRef)undefined23702456(0,react.useEffect)undefined26332719(0,react.useEffect)undefined31313232useEffectiveRoleundefined38313917(0,react.useEffect)undefined40664152(0,react.useEffect)undefined42134286(0,esm_debug.io)undefined49885074(0,react.useEffect)undefined51935289(0,api/* getUnreadCount */.$M)undefined55385624(0,react.useEffect)undefined57255821(0,api/* getMyDashboard */.H)undefined59736059(0,react.useEffect)undefined65196595(0,react_jsx_runtime.jsxs)undefined65976676react_jsx_runtime.Fragmentundefined67276801(0,react_jsx_runtime.jsx)undefined70097085(0,react_jsx_runtime.jsxs)undefined72397315(0,react_jsx_runtime.jsxs)undefined75367612(0,react_jsx_runtime.jsxs)undefined76147691(link_default())undefined79288002(0,react_jsx_runtime.jsx)undefined83138387(0,react_jsx_runtime.jsx)undefined87568832(0,react_jsx_runtime.jsxs)undefined90529128(0,react_jsx_runtime.jsxs)undefined91309209react_jsx_runtime.Fragmentundefined93329406(0,react_jsx_runtime.jsx)undefined94089485(link_default())undefined98359909(0,react_jsx_runtime.jsx)undefined99119988(link_default())undefined1038710463(0,react_jsx_runtime.jsxs)undefined1046510544react_jsx_runtime.Fragmentundefined1066710741(0,react_jsx_runtime.jsx)undefined1074310820(link_default())undefined1125611330(0,react_jsx_runtime.jsx)undefined1133211409(link_default())undefined1182211896(0,react_jsx_runtime.jsx)undefined1189811975(link_default())undefined1241912493(0,react_jsx_runtime.jsx)undefined1249512572(link_default())undefined1291012986(0,react_jsx_runtime.jsxs)undefined1298813067react_jsx_runtime.Fragmentundefined1319013266(0,react_jsx_runtime.jsxs)undefined1326813345(link_default())undefined1368713761(0,react_jsx_runtime.jsx)undefined1429914373(0,react_jsx_runtime.jsx)undefined1505315127(0,react_jsx_runtime.jsx)undefined1570515781(0,react_jsx_runtime.jsxs)undefined1578315860(link_default())undefined1619316267(0,react_jsx_runtime.jsx)undefined1680416878(0,react_jsx_runtime.jsx)undefined1750517579(0,react_jsx_runtime.jsx)undefined1815718233(0,react_jsx_runtime.jsxs)undefined1852218598(0,react_jsx_runtime.jsxs)undefined1902019094(0,react_jsx_runtime.jsx)undefined1928919387(0,formatName/* formatShortName */.H)undefined1962319697(0,react_jsx_runtime.jsx)undefined2016320237(0,react_jsx_runtime.jsx)undefined2075020824(0,react_jsx_runtime.jsx)undefined2137421448(0,react_jsx_runtime.jsx)undefined2209022166(0,react_jsx_runtime.jsxs)undefined2250622582(0,react_jsx_runtime.jsxs)undefined2258422663react_jsx_runtime.Fragmentundefined2283422910(0,react_jsx_runtime.jsxs)undefined2291222989(link_default())undefined2354923623(0,react_jsx_runtime.jsx)undefined2428524359(0,react_jsx_runtime.jsx)undefined2521325289(0,react_jsx_runtime.jsxs)undefined2529125368(link_default())undefined2593026004(0,react_jsx_runtime.jsx)undefined2666626740(0,react_jsx_runtime.jsx)undefined2785027926(0,react_jsx_runtime.jsxs)undefined2792828007react_jsx_runtime.Fragmentundefined2817828254(0,react_jsx_runtime.jsxs)undefined2825628333(link_default())undefined2889728971(0,react_jsx_runtime.jsx)undefined2967529749(0,react_jsx_runtime.jsx)undefined3055430630(0,react_jsx_runtime.jsxs)undefined3109531169(0,react_jsx_runtime.jsx)undefined3201232088(0,react_jsx_runtime.jsxs)undefined3209032167(link_default())undefined3272232796(0,react_jsx_runtime.jsx)undefined3349933573(0,react_jsx_runtime.jsx)undefined3432634402(0,react_jsx_runtime.jsxs)undefined3485734931(0,react_jsx_runtime.jsx)undefined3577435850(0,react_jsx_runtime.jsxs)undefined3585235929(link_default())undefined3648936563(0,react_jsx_runtime.jsx)undefined3722537299(0,react_jsx_runtime.jsx)undefined3844238518(0,react_jsx_runtime.jsxs)undefined3852038597(link_default())undefined3911639190(0,react_jsx_runtime.jsx)undefined3980439878(0,react_jsx_runtime.jsx)undefined4074340819(0,react_jsx_runtime.jsxs)undefined4082140898(link_default())undefined4141441490(0,react_jsx_runtime.jsxs)undefined4218642260(0,react_jsx_runtime.jsx)undefined4324043314(0,react_jsx_runtime.jsx)undefined4420544281(0,react_jsx_runtime.jsxs)undefined4428344360(link_default())undefined4487844952(0,react_jsx_runtime.jsx)undefined4556645640(0,react_jsx_runtime.jsx)undefined4647446550(0,react_jsx_runtime.jsxs)undefined4655246629(link_default())undefined4714947223(0,react_jsx_runtime.jsx)undefined4783747911(0,react_jsx_runtime.jsx)undefined4880348877(0,react_jsx_runtime.jsx)undefined4913549211(0,react_jsx_runtime.jsxs)undefined4989949973(0,react_jsx_runtime.jsx)undefined5058750661(0,react_jsx_runtime.jsx)undefined5159051664(0,react_jsx_runtime.jsx)undefined5192251998(0,react_jsx_runtime.jsxs)undefined5242452506(0,auth/* signOut */.CI)undefined5293853012(0,react_jsx_runtime.jsx)undefined5361253686(0,react_jsx_runtime.jsx)undefined5479354869(0,react_jsx_runtime.jsxs)undefined5487154950react_jsx_runtime.Fragmentundefined5507355147(0,react_jsx_runtime.jsx)undefined5514955226(link_default())undefined5561155685(0,react_jsx_runtime.jsx)undefined5568755764(link_default())undefined5626556339(0,react_jsx_runtime.jsx)undefined5634156436LanguageSwitcherundefined5656356639(0,react_jsx_runtime.jsxs)undefined5683656910(0,react_jsx_runtime.jsx)undefined5691257007LanguageSwitcherundefined5706957143(0,react_jsx_runtime.jsx)undefined5744157515(0,react_jsx_runtime.jsx)undefined5796158035(0,react_jsx_runtime.jsx)undefined5834558419(0,react_jsx_runtime.jsx)undefined5898759063(0,react_jsx_runtime.jsxs)undefined5927759353(0,react_jsx_runtime.jsxs)undefined5935559434react_jsx_runtime.Fragmentundefined5954159617(0,react_jsx_runtime.jsxs)undefined5961959696(link_default())undefined6003560109(0,react_jsx_runtime.jsx)undefined6056560639(0,react_jsx_runtime.jsx)undefined6123661312(0,react_jsx_runtime.jsxs)undefined6131461391(link_default())undefined6173861812(0,react_jsx_runtime.jsx)undefined6226862342(0,react_jsx_runtime.jsx)undefined6307363149(0,react_jsx_runtime.jsxs)undefined6315163230react_jsx_runtime.Fragmentundefined6333763413(0,react_jsx_runtime.jsxs)undefined6341563492(link_default())undefined6384563919(0,react_jsx_runtime.jsx)undefined6437564449(0,react_jsx_runtime.jsx)undefined6501565091(0,react_jsx_runtime.jsxs)undefined6509365170(link_default())undefined6550965583(0,react_jsx_runtime.jsx)undefined6603966113(0,react_jsx_runtime.jsx)undefined6678966865(0,react_jsx_runtime.jsxs)undefined6686766944(link_default())undefined6729567369(0,react_jsx_runtime.jsx)undefined6782567899(0,react_jsx_runtime.jsx)undefined6873068806(0,react_jsx_runtime.jsxs)undefined6880868887react_jsx_runtime.Fragmentundefined6899469070(0,react_jsx_runtime.jsxs)undefined6907269149(link_default())undefined6949269566(0,react_jsx_runtime.jsx)undefined7006470138(0,react_jsx_runtime.jsx)undefined7078070854(0,react_jsx_runtime.jsx)undefined7129371369(0,react_jsx_runtime.jsxs)undefined7137171450react_jsx_runtime.Fragmentundefined7157371649(0,react_jsx_runtime.jsxs)undefined7165171728(link_default())undefined7212172195(0,react_jsx_runtime.jsx)undefined7269972773(0,react_jsx_runtime.jsx)undefined7341173487(0,react_jsx_runtime.jsxs)undefined7348973566(link_default())undefined7395774031(0,react_jsx_runtime.jsx)undefined7453574609(0,react_jsx_runtime.jsx)undefined7547975555(0,react_jsx_runtime.jsxs)undefined7555775636react_jsx_runtime.Fragmentundefined7575975835(0,react_jsx_runtime.jsxs)undefined7583775914(link_default())undefined7631576389(0,react_jsx_runtime.jsx)undefined7693677010(0,react_jsx_runtime.jsx)undefined7767177747(0,react_jsx_runtime.jsxs)undefined7811678190(0,react_jsx_runtime.jsx)undefined7882878904(0,react_jsx_runtime.jsxs)undefined7890678983(link_default())undefined7937079444(0,react_jsx_runtime.jsx)undefined7994880022(0,react_jsx_runtime.jsx)undefined8087280948(0,react_jsx_runtime.jsxs)undefined8095081027(link_default())undefined8138081454(0,react_jsx_runtime.jsx)undefined8191081984(0,react_jsx_runtime.jsx)undefined8268982765(0,react_jsx_runtime.jsxs)undefined8276782844(link_default())undefined8319583269(0,react_jsx_runtime.jsx)undefined8373083804(0,react_jsx_runtime.jsx)undefined8445384529(0,react_jsx_runtime.jsxs)undefined8453184608(link_default())undefined8494785023(0,react_jsx_runtime.jsxs)undefined8554285616(0,react_jsx_runtime.jsx)undefined8647686550(0,react_jsx_runtime.jsx)undefined8720187277(0,react_jsx_runtime.jsxs)undefined8727987356(link_default())undefined8770587779(0,react_jsx_runtime.jsx)undefined8824088314(0,react_jsx_runtime.jsx)undefined8893289008(0,react_jsx_runtime.jsxs)undefined8919789279(0,auth/* signOut */.CI)undefined8971389787(0,react_jsx_runtime.jsx)undefined9023490308(0,react_jsx_runtime.jsx)undefined9098191057(0,react_jsx_runtime.jsxs)undefined9105991138react_jsx_runtime.Fragmentundefined9124591319(0,react_jsx_runtime.jsx)undefined9132191398(link_default())undefined9179691870(0,react_jsx_runtime.jsx)undefined9187291949(link_default())undefined9252492598(0,react_jsx_runtime.jsx)undefined9272692802(0,react_jsx_runtime.jsxs)undefined9301393087(0,react_jsx_runtime.jsx)undefined9327893354(0,react_jsx_runtime.jsxs)undefined9350893582(0,react_jsx_runtime.jsx)undefined9382793901(0,react_jsx_runtime.jsx)undefined9418994265(0,react_jsx_runtime.jsxs)undefined9444394517(0,react_jsx_runtime.jsx)undefined9489894972(0,react_jsx_runtime.jsx)undefined9497495051(link_default())undefined9555795631(0,react_jsx_runtime.jsx)undefined /***/ }) Z^/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; // EXPORTS __webpack_require__.d(__webpack_exports__, { Header: () => (/* binding */ Header) }); // EXTERNAL MODULE: ../../node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.js var react_jsx_runtime = __webpack_require__(78157); // EXTERNAL MODULE: ../../node_modules/next/dist/client/app-dir/link.js var app_dir_link = __webpack_require__(94496); var link_default = /*#__PURE__*/__webpack_require__.n(app_dir_link); // EXTERNAL MODULE: ../../node_modules/next/dist/api/navigation.js var navigation = __webpack_require__(71159); // EXTERNAL MODULE: ./src/lib/auth.ts var auth = __webpack_require__(13260); // EXTERNAL MODULE: ./src/context/locale.tsx var context_locale = __webpack_require__(96484); // EXTERNAL MODULE: ./src/lib/formatName.ts var formatName = __webpack_require__(48178); // EXTERNAL MODULE: ../../node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js var react = __webpack_require__(31768); // EXTERNAL MODULE: ./src/lib/translations.ts var translations = __webpack_require__(12998); ;// ./src/components/LanguageSwitcher.tsx /* __next_internal_client_entry_do_not_use__ LanguageSwitcher auto */ function LanguageSwitcher() { const { locale, setLocale } = (0,context_locale/* useLocale */.Y)(); const [open, setOpen] = (0,react.useState)(false); const ref = (0,react.useRef)(null); const current = translations/* LOCALES */.YZ.find((l)=>l.code === locale) ?? translations/* LOCALES */.YZ[0]; // Close on outside click process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react.useEffect)(()=>{ function handleClick(e) { if (ref.current && !ref.current.contains(e.target)) setOpen(false); } document.addEventListener('mousedown', handleClick); return ()=>document.removeEventListener('mousedown', handleClick); }, []); return /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { ref: ref, className: "relative", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("button", { onClick: ()=>setOpen(!open), className: "flex items-center gap-1.5 px-2.5 py-1.5 rounded-lg border border-gray-200 hover:border-green-400 hover:bg-green-50 transition text-sm font-medium text-gray-700", "aria-label": "Change language", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", { children: current.code.toUpperCase() }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: `w-3.5 h-3.5 text-gray-400 transition-transform ${open ? 'rotate-180' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19 9l-7 7-7-7" }) }) ] }), open && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("div", { className: "absolute right-0 mt-1 w-40 bg-white border border-gray-200 rounded-xl shadow-lg z-50 overflow-hidden", children: translations/* LOCALES */.YZ.map((loc)=>/*#__PURE__*/ (0,react_jsx_runtime.jsxs)("button", { onClick: ()=>{ setLocale(loc.code); setOpen(false); }, className: `w-full flex items-center gap-2.5 px-3.5 py-2.5 text-sm hover:bg-green-50 transition ${locale === loc.code ? 'bg-green-50 text-green-700 font-medium' : 'text-gray-700'}`, children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", { children: loc.label }), locale === loc.code && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-3.5 h-3.5 ml-auto text-green-600", fill: "currentColor", viewBox: "0 0 20 20", children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { fillRule: "evenodd", d: "M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z", clipRule: "evenodd" }) }) ] }, loc.code)) }) ] }); } // EXTERNAL MODULE: ./src/lib/api.ts var api = __webpack_require__(91864); // EXTERNAL MODULE: ../../node_modules/socket.io-client/build/esm-debug/index.js + 30 modules var esm_debug = __webpack_require__(44826); ;// ./src/hooks/useEffectiveRole.ts /* __next_internal_client_entry_do_not_use__ useEffectiveRole auto */ function readPreviewRole() { if (typeof document === 'undefined') return null; const m = document.cookie.match(/(?:^|;\s*)canhelp_preview_role=([^;]+)/); return m?.[1] ?? null; } /** * Returns the effective role for the current user. * For admins, respects the `canhelp_preview_role` cookie set by AdminRolePreview widget. * Updates reactively when the widget dispatches `canhelp:preview-role`. */ function useEffectiveRole() { const { data: session } = (0,auth/* useSession */.wV)(); const userRole = session?.user?.role; const isAdmin = userRole === 'admin'; const [previewRole, setPreviewRole] = (0,react.useState)(null); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react.useEffect)(()=>{ if (!isAdmin) return; setPreviewRole(readPreviewRole()); const sync = ()=>setPreviewRole(readPreviewRole()); window.addEventListener('canhelp:preview-role', sync); document.addEventListener('visibilitychange', sync); return ()=>{ window.removeEventListener('canhelp:preview-role', sync); document.removeEventListener('visibilitychange', sync); }; }, [ isAdmin ]); if (!userRole) return null; if (isAdmin && previewRole) return previewRole; return userRole; } // EXTERNAL MODULE: ../../node_modules/next/dist/api/app-dynamic.js var app_dynamic = __webpack_require__(47262); ;// ./src/components/Header.tsx /* __next_internal_client_entry_do_not_use__ Header auto */ const SupportModal = (0,app_dynamic["default"])(async ()=>{ true && /*require.resolve*/(null /* weak dependency, without id */); }, { loadableGenerated: { modules: [ "components/Header.tsx -> " + "./SupportModal" ] }, ssr: false }); const API_URL = "https://api.canhelp.gr" || 0; function Header() { const router = (0,navigation.useRouter)(); const pathname = (0,navigation.usePathname)(); const { data: session } = (0,auth/* useSession */.wV)(); const { t, locale } = (0,context_locale/* useLocale */.Y)(); const [menuOpen, setMenuOpen] = (0,react.useState)(false); const [profileOpen, setProfileOpen] = (0,react.useState)(false); const [supportOpen, setSupportOpen] = (0,react.useState)(false); const [unreadNotif, setUnreadNotif] = (0,react.useState)(0); const [unreadChat, setUnreadChat] = (0,react.useState)(0); const [msgToast, setMsgToast] = (0,react.useState)(null); const [planTier, setPlanTier] = (0,react.useState)(null); const profileRef = (0,react.useRef)(null); const headerRef = (0,react.useRef)(null); const toastTimer = (0,react.useRef)(null); const pathnameRef = (0,react.useRef)(pathname); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react.useEffect)(()=>{ pathnameRef.current = pathname; }, [ pathname ]); // Close dropdowns on outside click process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react.useEffect)(()=>{ function handleClick(e) { if (profileRef.current && !profileRef.current.contains(e.target)) { setProfileOpen(false); } } document.addEventListener('mousedown', handleClick); return ()=>document.removeEventListener('mousedown', handleClick); }, []); const isAdmin = session?.user?.role === 'admin'; const effectiveRole = useEffectiveRole(); const isSpecialist = effectiveRole === 'specialist'; const isActive = (href, exact = false)=>exact ? pathname === href : pathname === href || pathname.startsWith(href + '/'); const navCls = (href, exact = false)=>`font-medium text-sm transition ${isActive(href, exact) ? 'text-green-600' : 'text-gray-600 hover:text-green-600'}`; const mobileNavCls = (href, exact = false)=>`flex items-center gap-2 font-medium py-1 ${isActive(href, exact) ? 'text-green-600' : 'text-gray-700'}`; // Reset chat badge when entering chat process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react.useEffect)(()=>{ if (pathname === '/chat') setUnreadChat(0); }, [ pathname ]); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react.useEffect)(()=>{ if (!session) return; const socket = (0,esm_debug.io)(API_URL, { withCredentials: true, transports: [ 'websocket', 'polling' ] }); socket.on('new_message', (msg)=>{ if (pathnameRef.current === '/chat') return; setUnreadChat((c)=>c + 1); if (toastTimer.current) clearTimeout(toastTimer.current); setMsgToast(msg); toastTimer.current = setTimeout(()=>setMsgToast(null), 5000); }); return ()=>{ socket.disconnect(); if (toastTimer.current) clearTimeout(toastTimer.current); }; }, [ session ]); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react.useEffect)(()=>{ if (!session) { setUnreadNotif(0); return; } const fetch = ()=>(0,api/* getUnreadCount */.$M)().then((r)=>setUnreadNotif(r.count)).catch(()=>{}); fetch(); const timer = setInterval(fetch, 30000); return ()=>clearInterval(timer); }, [ session ]); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react.useEffect)(()=>{ if (!session) { setPlanTier(null); return; } (0,api/* getMyDashboard */.H)().then((d)=>setPlanTier(d.plan?.tier ?? null)).catch(()=>{}); }, [ session ]); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react.useEffect)(()=>{ const onScroll = ()=>{ if (!headerRef.current) return; if (window.scrollY > 40) { headerRef.current.classList.add('header-shrink'); } else { headerRef.current.classList.remove('header-shrink'); } }; window.addEventListener('scroll', onScroll); return ()=>window.removeEventListener('scroll', onScroll); }, []); return /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("header", { ref: headerRef, className: "header-base bg-white border-b border-gray-200 sticky top-0 z-50 transition-all duration-300", children: /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "flex items-center justify-between h-16 header-content transition-all duration-300", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/", className: "flex items-center gap-2 shrink-0", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("img", { src: "/logo.png", alt: "CanHelp", className: "w-8 h-8 object-contain" }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", { className: "logo-text text-2xl font-bold text-green-600 transition-all duration-300", children: "CanHelp" }) ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("nav", { className: "hidden md:flex items-center gap-5 ml-auto", children: [ isSpecialist ? /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/tasks", className: navCls('/tasks'), children: t('nav.find_tasks') }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/dashboard", className: navCls('/dashboard'), children: t('nav.dashboard') }) ] }) : /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/tasks/new", className: navCls('/tasks/new', true), children: t('dashboard.new_task') }), " ", /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/tasks", className: navCls('/tasks'), children: t('nav.tasks') }), " ", /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/specialists", className: navCls('/specialists'), children: t('nav.specialists') }) ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/pricing", className: navCls('/pricing', true), children: t('nav.pricing', 'Pricing') }), session ? /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/notifications", className: "relative text-gray-600 hover:text-gray-900 flex items-center", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: `w-5 h-5 ${unreadNotif > 0 ? 'text-green-600' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75v-.7V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0" }) }), unreadNotif > 0 && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", { className: "absolute -top-1.5 -right-1.5 min-w-[16px] h-4 px-0.5 bg-red-500 text-white text-[10px] font-bold rounded-full flex items-center justify-center leading-none", children: unreadNotif > 99 ? '99+' : unreadNotif }) ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/chat", className: "relative text-gray-600 hover:text-gray-900 flex items-center", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: `w-5 h-5 ${unreadChat > 0 ? 'text-green-500' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 10h.01M12 10h.01M16 10h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z" }) }), unreadChat > 0 && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", { className: "absolute -top-1.5 -right-1.5 min-w-[16px] h-4 px-0.5 bg-green-500 text-white text-[10px] font-bold rounded-full flex items-center justify-center leading-none", children: unreadChat > 99 ? '99+' : unreadChat }) ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "relative", ref: profileRef, children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("button", { onClick: ()=>setProfileOpen(!profileOpen), className: "flex items-center gap-1.5 text-sm font-medium text-gray-600 hover:text-green-600", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", { className: "truncate max-w-[100px]", children: (0,formatName/* formatShortName */.H)(session.user.firstName, session.user.lastName, session.user.name) }), planTier === 'pro' && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", { className: "inline-flex items-center px-1.5 py-0.5 rounded-full text-[10px] font-bold bg-green-100 text-green-700 leading-none", children: "Pro" }), planTier === 'ultimate' && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", { className: "inline-flex items-center px-1.5 py-0.5 rounded-full text-[10px] font-bold bg-gradient-to-r from-amber-400 via-yellow-400 to-amber-400 text-gray-900 shadow-sm shadow-amber-300/50 leading-none", children: "★" }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19 9l-7 7-7-7" }) }) ] }), profileOpen && /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "absolute right-0 mt-2 w-52 bg-white border border-gray-200 rounded-xl shadow-lg py-1 z-50", children: [ isSpecialist ? /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/tasks/new", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 4v16m8-8H4" }) }), t('nav.new_task') ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/specialists", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z" }) }), t('nav.specialists') ] }) ] }) : /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/notifications", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: `w-4 h-4 shrink-0 ${unreadNotif > 0 ? 'text-green-600' : 'text-gray-400'}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75v-.7V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0" }) }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("span", { className: "flex items-center gap-1.5", children: [ t('nav.notifications'), unreadNotif > 0 && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", { className: "px-1.5 py-0.5 bg-red-500 text-white text-[10px] font-bold rounded-full leading-none", children: unreadNotif > 99 ? '99+' : unreadNotif }) ] }) ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/chat", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: `w-4 h-4 shrink-0 ${unreadChat > 0 ? 'text-green-500' : 'text-gray-400'}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 10h.01M12 10h.01M16 10h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z" }) }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("span", { className: "flex items-center gap-1.5", children: [ t('nav.chat'), unreadChat > 0 && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", { className: "px-1.5 py-0.5 bg-green-500 text-white text-[10px] font-bold rounded-full leading-none", children: unreadChat > 99 ? '99+' : unreadChat }) ] }) ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/dashboard", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" }) }), t('nav.dashboard') ] }) ] }), (isSpecialist || isAdmin) && /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/schedule", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" }) }), t('nav.schedule') ] }), isAdmin && /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/admin", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z" }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z" }) ] }), t('nav.admin') ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/profile", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z" }) }), t('nav.profile') ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/favorites", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z" }) }), t('nav.favorites') ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("hr", { className: "my-1 border-gray-100" }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("button", { className: "w-full flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-green-50", onClick: ()=>{ setProfileOpen(false); setSupportOpen(true); }, children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M18.364 5.636l-3.536 3.536m0 5.656l3.536 3.536M9.172 9.172L5.636 5.636m3.536 9.192l-3.536 3.536M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-5 0a4 4 0 11-8 0 4 4 0 018 0z" }) }), t('support.title') ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("hr", { className: "my-1 border-gray-100" }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("button", { className: "w-full flex items-center gap-2.5 px-4 py-2 text-sm text-red-500 hover:bg-red-50", onClick: ()=>{ setProfileOpen(false); (0,auth/* signOut */.CI)().then(()=>{ window.location.href = '/'; }); }, children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1" }) }), t('nav.logout') ] }) ] }) ] }) ] }) : /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/login", className: "text-gray-600 hover:text-green-600 font-medium text-sm", children: t('nav.login') }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/register", className: "bg-green-600 text-white px-4 py-2 rounded-lg hover:bg-green-700 font-medium text-sm", children: t('nav.register') }) ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)(LanguageSwitcher, {}) ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "md:hidden flex items-center gap-2", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)(LanguageSwitcher, {}), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("button", { className: "p-2", onClick: ()=>setMenuOpen(!menuOpen), "aria-label": "Toggle menu", children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-5 h-5 text-gray-600", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: menuOpen ? /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6 18L18 6M6 6l12 12" }) : /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4 6h16M4 12h16M4 18h16" }) }) }) ] }) ] }), menuOpen && /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "md:hidden py-4 border-t border-gray-100 flex flex-col gap-3", children: [ isSpecialist ? /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/tasks", className: mobileNavCls('/tasks'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" }) }), t('nav.find_tasks') ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/dashboard", className: mobileNavCls('/dashboard'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" }) }), t('nav.dashboard') ] }) ] }) : /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/tasks/new", className: mobileNavCls('/tasks/new', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 4v16m8-8H4" }) }), t('nav.new_task') ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/tasks", className: mobileNavCls('/tasks'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2" }) }), t('nav.tasks') ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/specialists", className: mobileNavCls('/specialists'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z" }) }), t('nav.specialists') ] }) ] }), session ? /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/chat", className: mobileNavCls('/chat', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: `w-4 h-4 shrink-0 ${unreadChat > 0 ? 'text-green-500' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 10h.01M12 10h.01M16 10h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z" }) }), t('nav.chat'), unreadChat > 0 && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", { className: "ml-1 px-1.5 py-0.5 bg-green-500 text-white text-[10px] font-bold rounded-full", children: unreadChat }) ] }), isSpecialist ? /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/tasks/new", className: mobileNavCls('/tasks/new', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 4v16m8-8H4" }) }), t('nav.new_task') ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/specialists", className: mobileNavCls('/specialists'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z" }) }), t('nav.specialists') ] }) ] }) : /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/notifications", className: mobileNavCls('/notifications', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: `w-4 h-4 shrink-0 ${unreadNotif > 0 ? 'text-green-600' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75v-.7V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0" }) }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("span", { className: "flex items-center gap-1.5", children: [ t('nav.notifications'), unreadNotif > 0 && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", { className: "px-1.5 py-0.5 bg-red-500 text-white text-[10px] font-bold rounded-full", children: unreadNotif > 99 ? '99+' : unreadNotif }) ] }) ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/dashboard", className: mobileNavCls('/dashboard'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" }) }), t('nav.dashboard') ] }) ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/favorites", className: mobileNavCls('/favorites', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z" }) }), t('nav.favorites') ] }), (isSpecialist || isAdmin) && /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/schedule", className: mobileNavCls('/schedule', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 text-gray-400", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" }) }), t('nav.schedule') ] }), isAdmin && /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/admin", className: mobileNavCls('/admin'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("svg", { className: "w-4 h-4 text-gray-400", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z" }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z" }) ] }), t('nav.admin') ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/profile", className: mobileNavCls('/profile', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 text-gray-400", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z" }) }), t('nav.profile') ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("button", { onClick: ()=>{ setMenuOpen(false); (0,auth/* signOut */.CI)().then(()=>{ window.location.href = '/'; }); }, className: "flex items-center gap-2 text-left text-red-500 py-1 font-medium", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1" }) }), t('nav.logout') ] }) ] }) : /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/login", className: "text-gray-700 font-medium py-1", onClick: ()=>setMenuOpen(false), children: t('nav.login') }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/register", className: "text-green-600 font-medium py-1", onClick: ()=>setMenuOpen(false), children: t('nav.register') }) ] }) ] }) ] }) }), msgToast && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("div", { className: "fixed bottom-5 right-5 z-[200] max-w-sm w-full", children: /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "bg-white border border-gray-200 rounded-xl shadow-xl p-4 flex items-start gap-3 animate-fade-in", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", { className: "text-2xl shrink-0", children: "\uD83D\uDCAC" }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "flex-1 min-w-0", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("p", { className: "font-semibold text-gray-900 text-sm", children: t('chat.toast_title') }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("p", { className: "text-xs text-gray-500 truncate mt-0.5", children: msgToast.body }) ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "flex flex-col items-end gap-2 shrink-0", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("button", { onClick: ()=>setMsgToast(null), className: "text-gray-400 hover:text-gray-600 text-lg leading-none", "aria-label": "close", children: "\xd7" }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: `/chat?room=${msgToast.roomId}`, onClick: ()=>setMsgToast(null), className: "text-xs text-green-600 hover:underline font-medium", children: t('chat.toast_open') }) ] }) ] }) }), supportOpen && /*#__PURE__*/ (0,react_jsx_runtime.jsx)(SupportModal, { onClose: ()=>setSupportOpen(false) }) ] }); } /***/ })  `N // EXPORTS __webpack_require__.d(__webpack_exports__, { Header: () => (/* binding */ Header) }); // EXTERNAL MODULE: ../../node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.js var react_jsx_runtime = __webpack_require__(78157); // EXTERNAL MODULE: ../../node_modules/next/dist/client/app-dir/link.js var app_dir_link = __webpack_require__(94496); var link_default = /*#__PURE__*/__webpack_require__.n(app_dir_link); // EXTERNAL MODULE: ../../node_modules/next/dist/api/navigation.js var navigation = __webpack_require__(71159); // EXTERNAL MODULE: ./src/lib/auth.ts var auth = __webpack_require__(13260); // EXTERNAL MODULE: ./src/context/locale.tsx var context_locale = __webpack_require__(96484); // EXTERNAL MODULE: ./src/lib/formatName.ts var formatName = __webpack_require__(48178); // EXTERNAL MODULE: ../../node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js var react = __webpack_require__(31768); // EXTERNAL MODULE: ./src/lib/translations.ts var translations = __webpack_require__(12998); ;// ./src/components/LanguageSwitcher.tsx  ReplaceSourcec/* __next_internal_client_entry_do_not_use__ LanguageSwitcher auto */ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; import { useState, useRef, useEffect } from 'react'; import { useLocale } from '@/context/locale'; import { LOCALES } from '@/lib/translations'; export function LanguageSwitcher() { const { locale, setLocale } = useLocale(); const [open, setOpen] = useState(false); const ref = useRef(null); const current = LOCALES.find((l)=>l.code === locale) ?? LOCALES[0]; // Close on outside click process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ function handleClick(e) { if (ref.current && !ref.current.contains(e.target)) setOpen(false); } document.addEventListener('mousedown', handleClick); return ()=>document.removeEventListener('mousedown', handleClick); }, []); return /*#__PURE__*/ _jsxs("div", { ref: ref, className: "relative", children: [ /*#__PURE__*/ _jsxs("button", { onClick: ()=>setOpen(!open), className: "flex items-center gap-1.5 px-2.5 py-1.5 rounded-lg border border-gray-200 hover:border-green-400 hover:bg-green-50 transition text-sm font-medium text-gray-700", "aria-label": "Change language", children: [ /*#__PURE__*/ _jsx("span", { children: current.code.toUpperCase() }), /*#__PURE__*/ _jsx("svg", { className: `w-3.5 h-3.5 text-gray-400 transition-transform ${open ? 'rotate-180' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19 9l-7 7-7-7" }) }) ] }), open && /*#__PURE__*/ _jsx("div", { className: "absolute right-0 mt-1 w-40 bg-white border border-gray-200 rounded-xl shadow-lg z-50 overflow-hidden", children: LOCALES.map((loc)=>/*#__PURE__*/ _jsxs("button", { onClick: ()=>{ setLocale(loc.code); setOpen(false); }, className: `w-full flex items-center gap-2.5 px-3.5 py-2.5 text-sm hover:bg-green-50 transition ${locale === loc.code ? 'bg-green-50 text-green-700 font-medium' : 'text-gray-700'}`, children: [ /*#__PURE__*/ _jsx("span", { children: loc.label }), locale === loc.code && /*#__PURE__*/ _jsx("svg", { className: "w-3.5 h-3.5 ml-auto text-green-600", fill: "currentColor", viewBox: "0 0 20 20", children: /*#__PURE__*/ _jsx("path", { fillRule: "evenodd", d: "M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z", clipRule: "evenodd" }) }) ] }, loc.code)) }) ] }); } r70132undefined134185undefined187231undefined233277undefined279285undefined350358__WEBPACK_MODULE_REFERENCE__4_5b227573654c6f63616c65225d_call_directImport_asiSafe1__._undefined391398__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined424429__WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._undefined458464__WEBPACK_MODULE_REFERENCE__7_5b224c4f43414c4553225d_call_asiSafe1__._undefined498504__WEBPACK_MODULE_REFERENCE__7_5b224c4f43414c4553225d_asiSafe1__._undefined595603__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined908912__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined10181022__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined13821385__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined15161519__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined18631866__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined21492152__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined23202326__WEBPACK_MODULE_REFERENCE__7_5b224c4f43414c4553225d_call_asiSafe1__._undefined23532357__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined28142817__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined29782981__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined32373240__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined138224(0,context_locale/* useLocale */.Y)undefined257341(0,react.useState)undefined367447(0,react.useRef)undefined476545translations/* LOCALES */.YZundefined579643translations/* LOCALES */.YZundefined734820(0,react.useEffect)undefined11251201(0,react_jsx_runtime.jsxs)undefined13071383(0,react_jsx_runtime.jsxs)undefined17431817(0,react_jsx_runtime.jsx)undefined19482022(0,react_jsx_runtime.jsx)undefined23662440(0,react_jsx_runtime.jsx)undefined27232797(0,react_jsx_runtime.jsx)undefined29653034translations/* LOCALES */.YZundefined30613137(0,react_jsx_runtime.jsxs)undefined35943668(0,react_jsx_runtime.jsx)undefined38293903(0,react_jsx_runtime.jsx)undefined41594233(0,react_jsx_runtime.jsx)undefinedRawSource // EXTERNAL MODULE: ./src/lib/api.ts var api = __webpack_require__(91864); // EXTERNAL MODULE: ../../node_modules/socket.io-client/build/esm-debug/index.js + 30 modules var esm_debug = __webpack_require__(44826); ;// ./src/hooks/useEffectiveRole.ts /* __next_internal_client_entry_do_not_use__ useEffectiveRole auto */ import { useSession } from '@/lib/auth'; import { useEffect, useState } from 'react'; function readPreviewRole() { if (typeof document === 'undefined') return null; const m = document.cookie.match(/(?:^|;\s*)canhelp_preview_role=([^;]+)/); return m?.[1] ?? null; } /** * Returns the effective role for the current user. * For admins, respects the `canhelp_preview_role` cookie set by AdminRolePreview widget. * Updates reactively when the widget dispatches `canhelp:preview-role`. */ export function useEffectiveRole() { const { data: session } = useSession(); const userRole = session?.user?.role; const isAdmin = userRole === 'admin'; const [previewRole, setPreviewRole] = useState(null); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ if (!isAdmin) return; setPreviewRole(readPreviewRole()); const sync = ()=>setPreviewRole(readPreviewRole()); window.addEventListener('canhelp:preview-role', sync); document.addEventListener('visibilitychange', sync); return ()=>{ window.removeEventListener('canhelp:preview-role', sync); document.removeEventListener('visibilitychange', sync); }; }, [ isAdmin ]); if (!userRole) return null; if (isAdmin && previewRole) return previewRole; return userRole; } ^70109undefined111154undefined570576undefined637646__WEBPACK_MODULE_REFERENCE__3_5b2275736553657373696f6e225d_call_directImport_asiSafe1__._undefined777784__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined848856__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefinedv546634(0,auth/* useSession */.wV)undefined765849(0,react.useState)undefined913999(0,react.useEffect)undefinedRawSource // EXTERNAL MODULE: ../../node_modules/next/dist/api/app-dynamic.js var app_dynamic = __webpack_require__(47262); ;// ./src/components/Header.tsx 5/* __next_internal_client_entry_do_not_use__ Header auto */ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime"; import Link from 'next/link'; import { useRouter, usePathname } from 'next/navigation'; import { useSession, signOut } from '@/lib/auth'; import { useLocale } from '@/context/locale'; import { formatShortName } from '@/lib/formatName'; import { LanguageSwitcher } from './LanguageSwitcher'; import { useState, useRef, useEffect } from 'react'; import { getUnreadCount, getMyDashboard } from '@/lib/api'; import { io } from 'socket.io-client'; import { useEffectiveRole } from '@/hooks/useEffectiveRole'; import dynamic from 'next/dynamic'; const SupportModal = dynamic(async ()=>{ typeof require.resolveWeak !== "undefined" && require.resolveWeak("./SupportModal"); }, { loadableGenerated: { modules: [ "components/Header.tsx -> " + "./SupportModal" ] }, ssr: false }); const API_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:4000'; export function Header() { const router = useRouter(); const pathname = usePathname(); const { data: session } = useSession(); const { t, locale } = useLocale(); const [menuOpen, setMenuOpen] = useState(false); const [profileOpen, setProfileOpen] = useState(false); const [supportOpen, setSupportOpen] = useState(false); const [unreadNotif, setUnreadNotif] = useState(0); const [unreadChat, setUnreadChat] = useState(0); const [msgToast, setMsgToast] = useState(null); const [planTier, setPlanTier] = useState(null); const profileRef = useRef(null); const headerRef = useRef(null); const toastTimer = useRef(null); const pathnameRef = useRef(pathname); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ pathnameRef.current = pathname; }, [ pathname ]); // Close dropdowns on outside click process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ function handleClick(e) { if (profileRef.current && !profileRef.current.contains(e.target)) { setProfileOpen(false); } } document.addEventListener('mousedown', handleClick); return ()=>document.removeEventListener('mousedown', handleClick); }, []); const isAdmin = session?.user?.role === 'admin'; const effectiveRole = useEffectiveRole(); const isSpecialist = effectiveRole === 'specialist'; const isActive = (href, exact = false)=>exact ? pathname === href : pathname === href || pathname.startsWith(href + '/'); const navCls = (href, exact = false)=>`font-medium text-sm transition ${isActive(href, exact) ? 'text-green-600' : 'text-gray-600 hover:text-green-600'}`; const mobileNavCls = (href, exact = false)=>`flex items-center gap-2 font-medium py-1 ${isActive(href, exact) ? 'text-green-600' : 'text-gray-700'}`; // Reset chat badge when entering chat process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ if (pathname === '/chat') setUnreadChat(0); }, [ pathname ]); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ if (!session) return; const socket = io(API_URL, { withCredentials: true, transports: [ 'websocket', 'polling' ] }); socket.on('new_message', (msg)=>{ if (pathnameRef.current === '/chat') return; setUnreadChat((c)=>c + 1); if (toastTimer.current) clearTimeout(toastTimer.current); setMsgToast(msg); toastTimer.current = setTimeout(()=>setMsgToast(null), 5000); }); return ()=>{ socket.disconnect(); if (toastTimer.current) clearTimeout(toastTimer.current); }; }, [ session ]); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ if (!session) { setUnreadNotif(0); return; } const fetch = ()=>getUnreadCount().then((r)=>setUnreadNotif(r.count)).catch(()=>{}); fetch(); const timer = setInterval(fetch, 30000); return ()=>clearInterval(timer); }, [ session ]); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ if (!session) { setPlanTier(null); return; } getMyDashboard().then((d)=>setPlanTier(d.plan?.tier ?? null)).catch(()=>{}); }, [ session ]); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ const onScroll = ()=>{ if (!headerRef.current) return; if (window.scrollY > 40) { headerRef.current.classList.add('header-shrink'); } else { headerRef.current.classList.remove('header-shrink'); } }; window.addEventListener('scroll', onScroll); return ()=>window.removeEventListener('scroll', onScroll); }, []); return /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx("header", { ref: headerRef, className: "header-base bg-white border-b border-gray-200 sticky top-0 z-50 transition-all duration-300", children: /*#__PURE__*/ _jsxs("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: [ /*#__PURE__*/ _jsxs("div", { className: "flex items-center justify-between h-16 header-content transition-all duration-300", children: [ /*#__PURE__*/ _jsxs(Link, { href: "/", className: "flex items-center gap-2 shrink-0", children: [ /*#__PURE__*/ _jsx("img", { src: "/logo.png", alt: "CanHelp", className: "w-8 h-8 object-contain" }), /*#__PURE__*/ _jsx("span", { className: "logo-text text-2xl font-bold text-green-600 transition-all duration-300", children: "CanHelp" }) ] }), /*#__PURE__*/ _jsxs("nav", { className: "hidden md:flex items-center gap-5 ml-auto", children: [ isSpecialist ? /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx(Link, { href: "/tasks", className: navCls('/tasks'), children: t('nav.find_tasks') }), /*#__PURE__*/ _jsx(Link, { href: "/dashboard", className: navCls('/dashboard'), children: t('nav.dashboard') }) ] }) : /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx(Link, { href: "/tasks/new", className: navCls('/tasks/new', true), children: t('dashboard.new_task') }), " ", /*#__PURE__*/ _jsx(Link, { href: "/tasks", className: navCls('/tasks'), children: t('nav.tasks') }), " ", /*#__PURE__*/ _jsx(Link, { href: "/specialists", className: navCls('/specialists'), children: t('nav.specialists') }) ] }), /*#__PURE__*/ _jsx(Link, { href: "/pricing", className: navCls('/pricing', true), children: t('nav.pricing', 'Pricing') }), session ? /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs(Link, { href: "/notifications", className: "relative text-gray-600 hover:text-gray-900 flex items-center", children: [ /*#__PURE__*/ _jsx("svg", { className: `w-5 h-5 ${unreadNotif > 0 ? 'text-green-600' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75v-.7V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0" }) }), unreadNotif > 0 && /*#__PURE__*/ _jsx("span", { className: "absolute -top-1.5 -right-1.5 min-w-[16px] h-4 px-0.5 bg-red-500 text-white text-[10px] font-bold rounded-full flex items-center justify-center leading-none", children: unreadNotif > 99 ? '99+' : unreadNotif }) ] }), /*#__PURE__*/ _jsxs(Link, { href: "/chat", className: "relative text-gray-600 hover:text-gray-900 flex items-center", children: [ /*#__PURE__*/ _jsx("svg", { className: `w-5 h-5 ${unreadChat > 0 ? 'text-green-500' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 10h.01M12 10h.01M16 10h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z" }) }), unreadChat > 0 && /*#__PURE__*/ _jsx("span", { className: "absolute -top-1.5 -right-1.5 min-w-[16px] h-4 px-0.5 bg-green-500 text-white text-[10px] font-bold rounded-full flex items-center justify-center leading-none", children: unreadChat > 99 ? '99+' : unreadChat }) ] }), /*#__PURE__*/ _jsxs("div", { className: "relative", ref: profileRef, children: [ /*#__PURE__*/ _jsxs("button", { onClick: ()=>setProfileOpen(!profileOpen), className: "flex items-center gap-1.5 text-sm font-medium text-gray-600 hover:text-green-600", children: [ /*#__PURE__*/ _jsx("span", { className: "truncate max-w-[100px]", children: formatShortName(session.user.firstName, session.user.lastName, session.user.name) }), planTier === 'pro' && /*#__PURE__*/ _jsx("span", { className: "inline-flex items-center px-1.5 py-0.5 rounded-full text-[10px] font-bold bg-green-100 text-green-700 leading-none", children: "Pro" }), planTier === 'ultimate' && /*#__PURE__*/ _jsx("span", { className: "inline-flex items-center px-1.5 py-0.5 rounded-full text-[10px] font-bold bg-gradient-to-r from-amber-400 via-yellow-400 to-amber-400 text-gray-900 shadow-sm shadow-amber-300/50 leading-none", children: "★" }), /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19 9l-7 7-7-7" }) }) ] }), profileOpen && /*#__PURE__*/ _jsxs("div", { className: "absolute right-0 mt-2 w-52 bg-white border border-gray-200 rounded-xl shadow-lg py-1 z-50", children: [ isSpecialist ? /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs(Link, { href: "/tasks/new", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 4v16m8-8H4" }) }), t('nav.new_task') ] }), /*#__PURE__*/ _jsxs(Link, { href: "/specialists", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z" }) }), t('nav.specialists') ] }) ] }) : /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs(Link, { href: "/notifications", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: `w-4 h-4 shrink-0 ${unreadNotif > 0 ? 'text-green-600' : 'text-gray-400'}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75v-.7V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0" }) }), /*#__PURE__*/ _jsxs("span", { className: "flex items-center gap-1.5", children: [ t('nav.notifications'), unreadNotif > 0 && /*#__PURE__*/ _jsx("span", { className: "px-1.5 py-0.5 bg-red-500 text-white text-[10px] font-bold rounded-full leading-none", children: unreadNotif > 99 ? '99+' : unreadNotif }) ] }) ] }), /*#__PURE__*/ _jsxs(Link, { href: "/chat", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: `w-4 h-4 shrink-0 ${unreadChat > 0 ? 'text-green-500' : 'text-gray-400'}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 10h.01M12 10h.01M16 10h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z" }) }), /*#__PURE__*/ _jsxs("span", { className: "flex items-center gap-1.5", children: [ t('nav.chat'), unreadChat > 0 && /*#__PURE__*/ _jsx("span", { className: "px-1.5 py-0.5 bg-green-500 text-white text-[10px] font-bold rounded-full leading-none", children: unreadChat > 99 ? '99+' : unreadChat }) ] }) ] }), /*#__PURE__*/ _jsxs(Link, { href: "/dashboard", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" }) }), t('nav.dashboard') ] }) ] }), (isSpecialist || isAdmin) && /*#__PURE__*/ _jsxs(Link, { href: "/schedule", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" }) }), t('nav.schedule') ] }), isAdmin && /*#__PURE__*/ _jsxs(Link, { href: "/admin", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsxs("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: [ /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z" }), /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z" }) ] }), t('nav.admin') ] }), /*#__PURE__*/ _jsxs(Link, { href: "/profile", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z" }) }), t('nav.profile') ] }), /*#__PURE__*/ _jsxs(Link, { href: "/favorites", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z" }) }), t('nav.favorites') ] }), /*#__PURE__*/ _jsx("hr", { className: "my-1 border-gray-100" }), /*#__PURE__*/ _jsxs("button", { className: "w-full flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-green-50", onClick: ()=>{ setProfileOpen(false); setSupportOpen(true); }, children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M18.364 5.636l-3.536 3.536m0 5.656l3.536 3.536M9.172 9.172L5.636 5.636m3.536 9.192l-3.536 3.536M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-5 0a4 4 0 11-8 0 4 4 0 018 0z" }) }), t('support.title') ] }), /*#__PURE__*/ _jsx("hr", { className: "my-1 border-gray-100" }), /*#__PURE__*/ _jsxs("button", { className: "w-full flex items-center gap-2.5 px-4 py-2 text-sm text-red-500 hover:bg-red-50", onClick: ()=>{ setProfileOpen(false); signOut().then(()=>{ window.location.href = '/'; }); }, children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1" }) }), t('nav.logout') ] }) ] }) ] }) ] }) : /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx(Link, { href: "/login", className: "text-gray-600 hover:text-green-600 font-medium text-sm", children: t('nav.login') }), /*#__PURE__*/ _jsx(Link, { href: "/register", className: "bg-green-600 text-white px-4 py-2 rounded-lg hover:bg-green-700 font-medium text-sm", children: t('nav.register') }) ] }), /*#__PURE__*/ _jsx(LanguageSwitcher, {}) ] }), /*#__PURE__*/ _jsxs("div", { className: "md:hidden flex items-center gap-2", children: [ /*#__PURE__*/ _jsx(LanguageSwitcher, {}), /*#__PURE__*/ _jsx("button", { className: "p-2", onClick: ()=>setMenuOpen(!menuOpen), "aria-label": "Toggle menu", children: /*#__PURE__*/ _jsx("svg", { className: "w-5 h-5 text-gray-600", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: menuOpen ? /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6 18L18 6M6 6l12 12" }) : /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4 6h16M4 12h16M4 18h16" }) }) }) ] }) ] }), menuOpen && /*#__PURE__*/ _jsxs("div", { className: "md:hidden py-4 border-t border-gray-100 flex flex-col gap-3", children: [ isSpecialist ? /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs(Link, { href: "/tasks", className: mobileNavCls('/tasks'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" }) }), t('nav.find_tasks') ] }), /*#__PURE__*/ _jsxs(Link, { href: "/dashboard", className: mobileNavCls('/dashboard'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" }) }), t('nav.dashboard') ] }) ] }) : /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs(Link, { href: "/tasks/new", className: mobileNavCls('/tasks/new', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 4v16m8-8H4" }) }), t('nav.new_task') ] }), /*#__PURE__*/ _jsxs(Link, { href: "/tasks", className: mobileNavCls('/tasks'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2" }) }), t('nav.tasks') ] }), /*#__PURE__*/ _jsxs(Link, { href: "/specialists", className: mobileNavCls('/specialists'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z" }) }), t('nav.specialists') ] }) ] }), session ? /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs(Link, { href: "/chat", className: mobileNavCls('/chat', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: `w-4 h-4 shrink-0 ${unreadChat > 0 ? 'text-green-500' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 10h.01M12 10h.01M16 10h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z" }) }), t('nav.chat'), unreadChat > 0 && /*#__PURE__*/ _jsx("span", { className: "ml-1 px-1.5 py-0.5 bg-green-500 text-white text-[10px] font-bold rounded-full", children: unreadChat }) ] }), isSpecialist ? /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs(Link, { href: "/tasks/new", className: mobileNavCls('/tasks/new', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 4v16m8-8H4" }) }), t('nav.new_task') ] }), /*#__PURE__*/ _jsxs(Link, { href: "/specialists", className: mobileNavCls('/specialists'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z" }) }), t('nav.specialists') ] }) ] }) : /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs(Link, { href: "/notifications", className: mobileNavCls('/notifications', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: `w-4 h-4 shrink-0 ${unreadNotif > 0 ? 'text-green-600' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75v-.7V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0" }) }), /*#__PURE__*/ _jsxs("span", { className: "flex items-center gap-1.5", children: [ t('nav.notifications'), unreadNotif > 0 && /*#__PURE__*/ _jsx("span", { className: "px-1.5 py-0.5 bg-red-500 text-white text-[10px] font-bold rounded-full", children: unreadNotif > 99 ? '99+' : unreadNotif }) ] }) ] }), /*#__PURE__*/ _jsxs(Link, { href: "/dashboard", className: mobileNavCls('/dashboard'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" }) }), t('nav.dashboard') ] }) ] }), /*#__PURE__*/ _jsxs(Link, { href: "/favorites", className: mobileNavCls('/favorites', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z" }) }), t('nav.favorites') ] }), (isSpecialist || isAdmin) && /*#__PURE__*/ _jsxs(Link, { href: "/schedule", className: mobileNavCls('/schedule', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" }) }), t('nav.schedule') ] }), isAdmin && /*#__PURE__*/ _jsxs(Link, { href: "/admin", className: mobileNavCls('/admin'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsxs("svg", { className: "w-4 h-4 text-gray-400", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: [ /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z" }), /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z" }) ] }), t('nav.admin') ] }), /*#__PURE__*/ _jsxs(Link, { href: "/profile", className: mobileNavCls('/profile', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z" }) }), t('nav.profile') ] }), /*#__PURE__*/ _jsxs("button", { onClick: ()=>{ setMenuOpen(false); signOut().then(()=>{ window.location.href = '/'; }); }, className: "flex items-center gap-2 text-left text-red-500 py-1 font-medium", children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1" }) }), t('nav.logout') ] }) ] }) : /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx(Link, { href: "/login", className: "text-gray-700 font-medium py-1", onClick: ()=>setMenuOpen(false), children: t('nav.login') }), /*#__PURE__*/ _jsx(Link, { href: "/register", className: "text-green-600 font-medium py-1", onClick: ()=>setMenuOpen(false), children: t('nav.register') }) ] }) ] }) ] }) }), msgToast && /*#__PURE__*/ _jsx("div", { className: "fixed bottom-5 right-5 z-[200] max-w-sm w-full", children: /*#__PURE__*/ _jsxs("div", { className: "bg-white border border-gray-200 rounded-xl shadow-xl p-4 flex items-start gap-3 animate-fade-in", children: [ /*#__PURE__*/ _jsx("span", { className: "text-2xl shrink-0", children: "\uD83D\uDCAC" }), /*#__PURE__*/ _jsxs("div", { className: "flex-1 min-w-0", children: [ /*#__PURE__*/ _jsx("p", { className: "font-semibold text-gray-900 text-sm", children: t('chat.toast_title') }), /*#__PURE__*/ _jsx("p", { className: "text-xs text-gray-500 truncate mt-0.5", children: msgToast.body }) ] }), /*#__PURE__*/ _jsxs("div", { className: "flex flex-col items-end gap-2 shrink-0", children: [ /*#__PURE__*/ _jsx("button", { onClick: ()=>setMsgToast(null), className: "text-gray-400 hover:text-gray-600 text-lg leading-none", "aria-label": "close", children: "\xd7" }), /*#__PURE__*/ _jsx(Link, { href: `/chat?room=${msgToast.roomId}`, onClick: ()=>setMsgToast(null), className: "text-xs text-green-600 hover:underline font-medium", children: t('chat.toast_open') }) ] }) ] }) }), supportOpen && /*#__PURE__*/ _jsx(SupportModal, { onClose: ()=>setSupportOpen(false) }) ] }); } Y60145undefined147175undefined177233undefined235283undefined285329undefined331381undefined383436undefined438489undefined491549undefined551588undefined590649undefined651685undefined708714__WEBPACK_MODULE_REFERENCE__12_5b2264656661756c74225d_call_directImport_asiSafe1__._undefined732773 trueundefined778796/*require.resolve*/undefined798813null /* weak dependency, without id */undefined9771007"https://api.canhelp.gr"undefined101210340undefined10371043undefined10831091__WEBPACK_MODULE_REFERENCE__2_5b22757365526f75746572225d_call_directImport_asiSafe1__._undefined11171127__WEBPACK_MODULE_REFERENCE__2_5b22757365506174686e616d65225d_call_directImport_asiSafe1__._undefined11621171__WEBPACK_MODULE_REFERENCE__3_5b2275736553657373696f6e225d_call_directImport_asiSafe1__._undefined12021210__WEBPACK_MODULE_REFERENCE__4_5b227573654c6f63616c65225d_call_directImport_asiSafe1__._undefined12511258__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined13101317__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined13691376__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined14281435__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined14811488__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined15301537__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined15821589__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined16211626__WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._undefined16571662__WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._undefined16941699__WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._undefined17321737__WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._undefined18051813__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined19901998__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined24102425__WEBPACK_MODULE_REFERENCE__11_5b22757365456666656374697665526f6c65225d_call_directImport_asiSafe1__._undefined30243032__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined31813189__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined32503251__WEBPACK_MODULE_REFERENCE__10_5b22696f225d_call_directImport_asiSafe1__._undefined39533961__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined40804093__WEBPACK_MODULE_REFERENCE__9_5b22676574556e72656164436f756e74225d_call_directImport_asiSafe1__._undefined43424350__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined44514464__WEBPACK_MODULE_REFERENCE__9_5b226765744d7944617368626f617264225d_call_directImport_asiSafe1__._undefined46164624__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined50845088__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined50905098__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined51495152__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined53605364__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined55185522__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined57435747__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined57495752__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined59895992__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined63036306__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined66756679__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined68996903__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined69056913__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined70367039__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined70417044__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined73947397__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined73997402__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined78017805__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined78077815__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined79387941__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined79437946__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined83828385__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined83878390__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined88038806__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined88088811__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined92559258__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined92609263__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined96019605__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined96079615__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined97389742__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined97449747__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined1008910092__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1063010633__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1131311316__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1189411898__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1190011903__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined1223612239__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1277612779__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1340613409__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1398713991__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1428014284__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1470614709__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1490414918__WEBPACK_MODULE_REFERENCE__5_5b22666f726d617453686f72744e616d65225d_call_directImport_asiSafe1__._undefined1515415157__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1562315626__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1613916142__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1669216695__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1733717341__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1768117685__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1768717695__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined1786617870__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1787217875__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined1843518438__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1910019103__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1995719961__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1996319966__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined2052820531__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2119321196__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2230622310__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2231222320__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined2249122495__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2249722500__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined2306423067__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2377123774__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2457924583__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2504825051__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2589425898__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2590025903__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined2645826461__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2716427167__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2792027924__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2837928382__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2922529229__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2923129234__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined2979429797__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3045930462__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3160531609__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3161131614__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined3213332136__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3275032753__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3361833622__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3362433627__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined3414334147__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3484334846__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3582635829__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3672036724__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3672636729__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined3724737250__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3786437867__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3870138705__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3870738710__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined3923039233__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3984739850__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4074240745__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4100341007__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4169541698__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4231242315__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4324443247__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4350543509__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4393543941__WEBPACK_MODULE_REFERENCE__3_5b227369676e4f7574225d_call_directImport_asiSafe1__._undefined4437344376__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4497644979__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4608646090__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4609246100__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined4622346226__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4622846231__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined4661646619__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4662146624__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined4712547128__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4713047145__WEBPACK_MODULE_REFERENCE__8_5b224c616e67756167655377697463686572225d_directImport_asiSafe1__._undefined4727247276__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4747347476__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4747847493__WEBPACK_MODULE_REFERENCE__8_5b224c616e67756167655377697463686572225d_directImport_asiSafe1__._undefined4755547558__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4785647859__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4830548308__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4861848621__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4918949193__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4940749411__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4941349421__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined4952849532__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4953449537__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined4987649879__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5033550338__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5093550939__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5094150944__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5129151294__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5175051753__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5248452488__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5249052498__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined5260552609__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5261152614__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5296752970__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5342653429__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5399553999__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5400154004__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5434354346__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5480254805__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5548155485__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5548755490__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5584155844__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5630056303__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5713457138__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5714057148__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined5725557259__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5726157264__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5760757610__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5810858111__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5875358756__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5919559199__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5920159209__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined5933259336__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5933859341__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5973459737__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6024160244__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6088260886__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6088860891__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6128261285__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6178961792__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6266262666__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6266862676__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined6279962803__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6280562808__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6320963212__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6375963762__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6442364427__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6479664799__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6543765441__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6544365446__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6583365836__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6634066343__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6719367197__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6719967202__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6755567558__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6801468017__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6872268726__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6872868731__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6908269085__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6954669549__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7019870202__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7020470207__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined7054670550__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7106971072__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7193271935__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7258672590__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7259272595__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined7294472947__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7340873411__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7402974033__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7422274228__WEBPACK_MODULE_REFERENCE__3_5b227369676e4f7574225d_call_directImport_asiSafe1__._undefined7466274665__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7511275115__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7578875792__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7579475802__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined7590975912__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7591475917__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined7631576318__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7632076323__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined7689876901__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7702977033__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7724477247__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7743877442__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7759677599__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7784477847__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7813578139__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7831778320__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7870178704__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7870678709__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined7921579218__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefinedy&93176(0,app_dynamic["default"])undefined494580(0,navigation.useRouter)undefined606696(0,navigation.usePathname)undefined731819(0,auth/* useSession */.wV)undefined850936(0,context_locale/* useLocale */.Y)undefined9771061(0,react.useState)undefined11131197(0,react.useState)undefined12491333(0,react.useState)undefined13851469(0,react.useState)undefined15151599(0,react.useState)undefined16411725(0,react.useState)undefined17701854(0,react.useState)undefined18861966(0,react.useRef)undefined19972077(0,react.useRef)undefined21092189(0,react.useRef)undefined22222302(0,react.useRef)undefined23702456(0,react.useEffect)undefined26332719(0,react.useEffect)undefined31313232useEffectiveRoleundefined38313917(0,react.useEffect)undefined40664152(0,react.useEffect)undefined42134286(0,esm_debug.io)undefined49885074(0,react.useEffect)undefined51935289(0,api/* getUnreadCount */.$M)undefined55385624(0,react.useEffect)undefined57255821(0,api/* getMyDashboard */.H)undefined59736059(0,react.useEffect)undefined65196595(0,react_jsx_runtime.jsxs)undefined65976676react_jsx_runtime.Fragmentundefined67276801(0,react_jsx_runtime.jsx)undefined70097085(0,react_jsx_runtime.jsxs)undefined72397315(0,react_jsx_runtime.jsxs)undefined75367612(0,react_jsx_runtime.jsxs)undefined76147691(link_default())undefined79288002(0,react_jsx_runtime.jsx)undefined83138387(0,react_jsx_runtime.jsx)undefined87568832(0,react_jsx_runtime.jsxs)undefined90529128(0,react_jsx_runtime.jsxs)undefined91309209react_jsx_runtime.Fragmentundefined93329406(0,react_jsx_runtime.jsx)undefined94089485(link_default())undefined98359909(0,react_jsx_runtime.jsx)undefined99119988(link_default())undefined1038710463(0,react_jsx_runtime.jsxs)undefined1046510544react_jsx_runtime.Fragmentundefined1066710741(0,react_jsx_runtime.jsx)undefined1074310820(link_default())undefined1125611330(0,react_jsx_runtime.jsx)undefined1133211409(link_default())undefined1182211896(0,react_jsx_runtime.jsx)undefined1189811975(link_default())undefined1241912493(0,react_jsx_runtime.jsx)undefined1249512572(link_default())undefined1291012986(0,react_jsx_runtime.jsxs)undefined1298813067react_jsx_runtime.Fragmentundefined1319013266(0,react_jsx_runtime.jsxs)undefined1326813345(link_default())undefined1368713761(0,react_jsx_runtime.jsx)undefined1429914373(0,react_jsx_runtime.jsx)undefined1505315127(0,react_jsx_runtime.jsx)undefined1570515781(0,react_jsx_runtime.jsxs)undefined1578315860(link_default())undefined1619316267(0,react_jsx_runtime.jsx)undefined1680416878(0,react_jsx_runtime.jsx)undefined1750517579(0,react_jsx_runtime.jsx)undefined1815718233(0,react_jsx_runtime.jsxs)undefined1852218598(0,react_jsx_runtime.jsxs)undefined1902019094(0,react_jsx_runtime.jsx)undefined1928919387(0,formatName/* formatShortName */.H)undefined1962319697(0,react_jsx_runtime.jsx)undefined2016320237(0,react_jsx_runtime.jsx)undefined2075020824(0,react_jsx_runtime.jsx)undefined2137421448(0,react_jsx_runtime.jsx)undefined2209022166(0,react_jsx_runtime.jsxs)undefined2250622582(0,react_jsx_runtime.jsxs)undefined2258422663react_jsx_runtime.Fragmentundefined2283422910(0,react_jsx_runtime.jsxs)undefined2291222989(link_default())undefined2354923623(0,react_jsx_runtime.jsx)undefined2428524359(0,react_jsx_runtime.jsx)undefined2521325289(0,react_jsx_runtime.jsxs)undefined2529125368(link_default())undefined2593026004(0,react_jsx_runtime.jsx)undefined2666626740(0,react_jsx_runtime.jsx)undefined2785027926(0,react_jsx_runtime.jsxs)undefined2792828007react_jsx_runtime.Fragmentundefined2817828254(0,react_jsx_runtime.jsxs)undefined2825628333(link_default())undefined2889728971(0,react_jsx_runtime.jsx)undefined2967529749(0,react_jsx_runtime.jsx)undefined3055430630(0,react_jsx_runtime.jsxs)undefined3109531169(0,react_jsx_runtime.jsx)undefined3201232088(0,react_jsx_runtime.jsxs)undefined3209032167(link_default())undefined3272232796(0,react_jsx_runtime.jsx)undefined3349933573(0,react_jsx_runtime.jsx)undefined3432634402(0,react_jsx_runtime.jsxs)undefined3485734931(0,react_jsx_runtime.jsx)undefined3577435850(0,react_jsx_runtime.jsxs)undefined3585235929(link_default())undefined3648936563(0,react_jsx_runtime.jsx)undefined3722537299(0,react_jsx_runtime.jsx)undefined3844238518(0,react_jsx_runtime.jsxs)undefined3852038597(link_default())undefined3911639190(0,react_jsx_runtime.jsx)undefined3980439878(0,react_jsx_runtime.jsx)undefined4074340819(0,react_jsx_runtime.jsxs)undefined4082140898(link_default())undefined4141441490(0,react_jsx_runtime.jsxs)undefined4218642260(0,react_jsx_runtime.jsx)undefined4324043314(0,react_jsx_runtime.jsx)undefined4420544281(0,react_jsx_runtime.jsxs)undefined4428344360(link_default())undefined4487844952(0,react_jsx_runtime.jsx)undefined4556645640(0,react_jsx_runtime.jsx)undefined4647446550(0,react_jsx_runtime.jsxs)undefined4655246629(link_default())undefined4714947223(0,react_jsx_runtime.jsx)undefined4783747911(0,react_jsx_runtime.jsx)undefined4880348877(0,react_jsx_runtime.jsx)undefined4913549211(0,react_jsx_runtime.jsxs)undefined4989949973(0,react_jsx_runtime.jsx)undefined5058750661(0,react_jsx_runtime.jsx)undefined5159051664(0,react_jsx_runtime.jsx)undefined5192251998(0,react_jsx_runtime.jsxs)undefined5242452506(0,auth/* signOut */.CI)undefined5293853012(0,react_jsx_runtime.jsx)undefined5361253686(0,react_jsx_runtime.jsx)undefined5479354869(0,react_jsx_runtime.jsxs)undefined5487154950react_jsx_runtime.Fragmentundefined5507355147(0,react_jsx_runtime.jsx)undefined5514955226(link_default())undefined5561155685(0,react_jsx_runtime.jsx)undefined5568755764(link_default())undefined5626556339(0,react_jsx_runtime.jsx)undefined5634156436LanguageSwitcherundefined5656356639(0,react_jsx_runtime.jsxs)undefined5683656910(0,react_jsx_runtime.jsx)undefined5691257007LanguageSwitcherundefined5706957143(0,react_jsx_runtime.jsx)undefined5744157515(0,react_jsx_runtime.jsx)undefined5796158035(0,react_jsx_runtime.jsx)undefined5834558419(0,react_jsx_runtime.jsx)undefined5898759063(0,react_jsx_runtime.jsxs)undefined5927759353(0,react_jsx_runtime.jsxs)undefined5935559434react_jsx_runtime.Fragmentundefined5954159617(0,react_jsx_runtime.jsxs)undefined5961959696(link_default())undefined6003560109(0,react_jsx_runtime.jsx)undefined6056560639(0,react_jsx_runtime.jsx)undefined6123661312(0,react_jsx_runtime.jsxs)undefined6131461391(link_default())undefined6173861812(0,react_jsx_runtime.jsx)undefined6226862342(0,react_jsx_runtime.jsx)undefined6307363149(0,react_jsx_runtime.jsxs)undefined6315163230react_jsx_runtime.Fragmentundefined6333763413(0,react_jsx_runtime.jsxs)undefined6341563492(link_default())undefined6384563919(0,react_jsx_runtime.jsx)undefined6437564449(0,react_jsx_runtime.jsx)undefined6501565091(0,react_jsx_runtime.jsxs)undefined6509365170(link_default())undefined6550965583(0,react_jsx_runtime.jsx)undefined6603966113(0,react_jsx_runtime.jsx)undefined6678966865(0,react_jsx_runtime.jsxs)undefined6686766944(link_default())undefined6729567369(0,react_jsx_runtime.jsx)undefined6782567899(0,react_jsx_runtime.jsx)undefined6873068806(0,react_jsx_runtime.jsxs)undefined6880868887react_jsx_runtime.Fragmentundefined6899469070(0,react_jsx_runtime.jsxs)undefined6907269149(link_default())undefined6949269566(0,react_jsx_runtime.jsx)undefined7006470138(0,react_jsx_runtime.jsx)undefined7078070854(0,react_jsx_runtime.jsx)undefined7129371369(0,react_jsx_runtime.jsxs)undefined7137171450react_jsx_runtime.Fragmentundefined7157371649(0,react_jsx_runtime.jsxs)undefined7165171728(link_default())undefined7212172195(0,react_jsx_runtime.jsx)undefined7269972773(0,react_jsx_runtime.jsx)undefined7341173487(0,react_jsx_runtime.jsxs)undefined7348973566(link_default())undefined7395774031(0,react_jsx_runtime.jsx)undefined7453574609(0,react_jsx_runtime.jsx)undefined7547975555(0,react_jsx_runtime.jsxs)undefined7555775636react_jsx_runtime.Fragmentundefined7575975835(0,react_jsx_runtime.jsxs)undefined7583775914(link_default())undefined7631576389(0,react_jsx_runtime.jsx)undefined7693677010(0,react_jsx_runtime.jsx)undefined7767177747(0,react_jsx_runtime.jsxs)undefined7811678190(0,react_jsx_runtime.jsx)undefined7882878904(0,react_jsx_runtime.jsxs)undefined7890678983(link_default())undefined7937079444(0,react_jsx_runtime.jsx)undefined7994880022(0,react_jsx_runtime.jsx)undefined8087280948(0,react_jsx_runtime.jsxs)undefined8095081027(link_default())undefined8138081454(0,react_jsx_runtime.jsx)undefined8191081984(0,react_jsx_runtime.jsx)undefined8268982765(0,react_jsx_runtime.jsxs)undefined8276782844(link_default())undefined8319583269(0,react_jsx_runtime.jsx)undefined8373083804(0,react_jsx_runtime.jsx)undefined8445384529(0,react_jsx_runtime.jsxs)undefined8453184608(link_default())undefined8494785023(0,react_jsx_runtime.jsxs)undefined8554285616(0,react_jsx_runtime.jsx)undefined8647686550(0,react_jsx_runtime.jsx)undefined8720187277(0,react_jsx_runtime.jsxs)undefined8727987356(link_default())undefined8770587779(0,react_jsx_runtime.jsx)undefined8824088314(0,react_jsx_runtime.jsx)undefined8893289008(0,react_jsx_runtime.jsxs)undefined8919789279(0,auth/* signOut */.CI)undefined8971389787(0,react_jsx_runtime.jsx)undefined9023490308(0,react_jsx_runtime.jsx)undefined9098191057(0,react_jsx_runtime.jsxs)undefined9105991138react_jsx_runtime.Fragmentundefined9124591319(0,react_jsx_runtime.jsx)undefined9132191398(link_default())undefined9179691870(0,react_jsx_runtime.jsx)undefined9187291949(link_default())undefined9252492598(0,react_jsx_runtime.jsx)undefined9272692802(0,react_jsx_runtime.jsxs)undefined9301393087(0,react_jsx_runtime.jsx)undefined9327893354(0,react_jsx_runtime.jsxs)undefined9350893582(0,react_jsx_runtime.jsx)undefined9382793901(0,react_jsx_runtime.jsx)undefined9418994265(0,react_jsx_runtime.jsxs)undefined9444394517(0,react_jsx_runtime.jsx)undefined9489894972(0,react_jsx_runtime.jsx)undefined9497495051(link_default())undefined9555795631(0,react_jsx_runtime.jsx)undefined, /***/ 15043:  !hwebpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource_/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; webpack/lib/util/registerExternalSerializerwebpack-sources/CachedSource webpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource // EXPORTS __webpack_require__.d(__webpack_exports__, { Footer: () => (/* binding */ Footer) }); // EXTERNAL MODULE: ../../node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.js var react_jsx_runtime = __webpack_require__(78157); // EXTERNAL MODULE: ./src/context/locale.tsx var locale = __webpack_require__(96484); // EXTERNAL MODULE: ../../node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js var react = __webpack_require__(31768); // EXTERNAL MODULE: ../../node_modules/next/dist/client/app-dir/link.js var app_dir_link = __webpack_require__(94496); var link_default = /*#__PURE__*/__webpack_require__.n(app_dir_link); ;// ./src/components/SocialIcons.tsx webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/CachedSource webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSourceqimport { jsx as _jsx } from "react/jsx-runtime"; const ICONS = [ { key: 'telegram', label: 'Telegram', hoverClass: 'hover:text-sky-500', svg: '' }, { key: 'instagram', label: 'Instagram', hoverClass: 'hover:text-pink-500', svg: '' }, { key: 'facebook', label: 'Facebook', hoverClass: 'hover:text-green-600', svg: '' }, { key: 'twitter', label: 'X', hoverClass: 'hover:text-gray-900', svg: '' }, { key: 'youtube', label: 'YouTube', hoverClass: 'hover:text-red-600', svg: '' }, { key: 'tiktok', label: 'TikTok', hoverClass: 'hover:text-black', svg: '' }, { key: 'whatsapp', label: 'WhatsApp', hoverClass: 'hover:text-green-500', svg: '' }, { key: 'viber', label: 'Viber', hoverClass: 'hover:text-purple-600', svg: '' } ]; export function SocialIcons({ className = '', links }) { const active = ICONS.filter(({ key })=>links?.[key]); if (active.length === 0) return null; return /*#__PURE__*/ _jsx("div", { className: `flex gap-4 flex-wrap ${className}`, children: active.map(({ key, label, hoverClass, svg })=>/*#__PURE__*/ _jsx("a", { href: links[key], target: "_blank", rel: "noopener noreferrer", "aria-label": label, className: `text-gray-500 transition ${hoverClass}`, children: /*#__PURE__*/ _jsx("svg", { width: "22", height: "22", viewBox: "0 0 24 24", fill: "currentColor", dangerouslySetInnerHTML: { __html: svg } }) }, key)) }); } `/G#&14__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._buffersourcesizemapshash const ICONS = [ { key: 'telegram', label: 'Telegram', hoverClass: 'hover:text-sky-500', svg: '' }, { key: 'instagram', label: 'Instagram', hoverClass: 'hover:text-pink-500', svg: '' }, { key: 'facebook', label: 'Facebook', hoverClass: 'hover:text-green-600', svg: '' }, { key: 'twitter', label: 'X', hoverClass: 'hover:text-gray-900', svg: '' }, { key: 'youtube', label: 'YouTube', hoverClass: 'hover:text-red-600', svg: '' }, { key: 'tiktok', label: 'TikTok', hoverClass: 'hover:text-black', svg: '' }, { key: 'whatsapp', label: 'WhatsApp', hoverClass: 'hover:text-green-500', svg: '' }, { key: 'viber', label: 'Viber', hoverClass: 'hover:text-purple-600', svg: '' } ]; function SocialIcons({ className = '', links }) { const active = ICONS.filter(({ key })=>links?.[key]); if (active.length === 0) return null; return /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("div", { className: `flex gap-4 flex-wrap ${className}`, children: active.map(({ key, label, hoverClass, svg })=>/*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("a", { href: links[key], target: "_blank", rel: "noopener noreferrer", "aria-label": label, className: `text-gray-500 transition ${hoverClass}`, children: /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("svg", { width: "22", height: "22", viewBox: "0 0 24 24", fill: "currentColor", dangerouslySetInnerHTML: { __html: svg } }) }, key)) }); } {"finalSource":false}mapbufferedMap ReplaceSourceRawSourceqimport { jsx as _jsx } from "react/jsx-runtime"; const ICONS = [ { key: 'telegram', label: 'Telegram', hoverClass: 'hover:text-sky-500', svg: '' }, { key: 'instagram', label: 'Instagram', hoverClass: 'hover:text-pink-500', svg: '' }, { key: 'facebook', label: 'Facebook', hoverClass: 'hover:text-green-600', svg: '' }, { key: 'twitter', label: 'X', hoverClass: 'hover:text-gray-900', svg: '' }, { key: 'youtube', label: 'YouTube', hoverClass: 'hover:text-red-600', svg: '' }, { key: 'tiktok', label: 'TikTok', hoverClass: 'hover:text-black', svg: '' }, { key: 'whatsapp', label: 'WhatsApp', hoverClass: 'hover:text-green-500', svg: '' }, { key: 'viber', label: 'Viber', hoverClass: 'hover:text-purple-600', svg: '' } ]; export function SocialIcons({ className = '', links }) { const active = ICONS.filter(({ key })=>links?.[key]); if (active.length === 0) return null; return /*#__PURE__*/ _jsx("div", { className: `flex gap-4 flex-wrap ${className}`, children: active.map(({ key, label, hoverClass, svg })=>/*#__PURE__*/ _jsx("a", { href: links[key], target: "_blank", rel: "noopener noreferrer", "aria-label": label, className: `text-gray-500 transition ${hoverClass}`, children: /*#__PURE__*/ _jsx("svg", { width: "22", height: "22", viewBox: "0 0 24 24", fill: "currentColor", dangerouslySetInnerHTML: { __html: svg } }) }, key)) }); } 1047undefined63616367undefined65436546__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined66916694__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined69616964__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefinedEX3}(0,react_jsx_runtime.jsx)! ;// ./src/components/Footer.tsx  !webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource/* __next_internal_client_entry_do_not_use__ Footer auto */ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; import { useLocale } from '@/context/locale'; import { useEffect, useState } from 'react'; import Link from 'next/link'; import { SocialIcons } from './SocialIcons'; const API = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:4000'; export function Footer() { const { t } = useLocale(); const year = new Date().getFullYear(); const [socialLinks, setSocialLinks] = useState({}); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ fetch(`${API}/api/admin/social-public`).then((r)=>r.ok ? r.json() : {}).then((kv)=>{ const links = {}; for (const [k, v] of Object.entries(kv)){ if (v) links[k.replace('social.', '')] = v; } setSocialLinks(links); }).catch(()=>{}); }, []); return /*#__PURE__*/ _jsx("footer", { className: "bg-white border-t border-gray-200 mt-16", children: /*#__PURE__*/ _jsxs("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12", children: [ /*#__PURE__*/ _jsxs("div", { className: "flex flex-col md:flex-row justify-between items-start gap-10", children: [ /*#__PURE__*/ _jsxs("div", { className: "flex-1 min-w-[200px] flex flex-col items-start", children: [ /*#__PURE__*/ _jsx("span", { className: "logo-text text-3xl text-green-700 font-bold mb-2", children: "CanHelp" }), /*#__PURE__*/ _jsx("p", { className: "text-base text-gray-600 mb-4", children: t('footer.slogan') }) ] }), /*#__PURE__*/ _jsxs("div", { className: "flex-1 min-w-[180px]", children: [ /*#__PURE__*/ _jsx("h3", { className: "text-lg font-semibold text-gray-900 mb-3", children: t('footer.links') }), /*#__PURE__*/ _jsxs("ul", { className: "space-y-2", children: [ /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/", className: "hover:text-green-600 transition", children: t('nav.home') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/tasks", className: "hover:text-green-600 transition", children: t('nav.tasks') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/specialists", className: "hover:text-green-600 transition", children: t('nav.specialists') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/pricing", className: "hover:text-green-600 transition", children: t('nav.pricing') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/support", className: "hover:text-green-600 transition", children: t('support.title') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/privacy", className: "hover:text-green-600 transition", children: t('nav.privacy') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/delete-account", className: "hover:text-red-500 transition", children: t('nav.delete_account') }) }) ] }) ] }), /*#__PURE__*/ _jsxs("div", { className: "flex-1 min-w-[180px]", children: [ /*#__PURE__*/ _jsx("h3", { className: "text-lg font-semibold text-gray-900 mb-3", children: t('footer.socials') }), /*#__PURE__*/ _jsx("p", { className: "text-gray-500 text-sm mb-2", children: "info@canhelp.gr" }), /*#__PURE__*/ _jsx(SocialIcons, { className: "mt-2", links: socialLinks }) ] }) ] }), /*#__PURE__*/ _jsxs("div", { className: "mt-10 border-t border-gray-100 pt-6 text-center text-gray-400 text-sm", children: [ "\xa9 ", year, " CanHelp. ", t('footer.rights') ] }) ] }) }); } c/FZ^3_7 Q T '*x{}  Z]_b4Z79<|"https://api.canhelp.gr"0__WEBPACK_MODULE_REFERENCE__1_5b227573654c6f63616c65225d_call_directImport_asiSafe1__.___WEBPACK_MODULE_REFERENCE__2_5b227573655374617465225d_call_directImport_asiSafe1__.___WEBPACK_MODULE_REFERENCE__2_5b22757365456666656374225d_call_directImport_asiSafe1__.___WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__.___WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__.___WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__.___WEBPACK_MODULE_REFERENCE__4_5b22536f6369616c49636f6e73225d_directImport_asiSafe1__._'/* __next_internal_client_entry_do_not_use__ Footer auto */ const API = "https://api.canhelp.gr" || 0; function Footer() { const { t } = __WEBPACK_MODULE_REFERENCE__1_5b227573654c6f63616c65225d_call_directImport_asiSafe1__._(); const year = new Date().getFullYear(); const [socialLinks, setSocialLinks] = __WEBPACK_MODULE_REFERENCE__2_5b227573655374617465225d_call_directImport_asiSafe1__._({}); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && __WEBPACK_MODULE_REFERENCE__2_5b22757365456666656374225d_call_directImport_asiSafe1__._(()=>{ fetch(`${API}/api/admin/social-public`).then((r)=>r.ok ? r.json() : {}).then((kv)=>{ const links = {}; for (const [k, v] of Object.entries(kv)){ if (v) links[k.replace('social.', '')] = v; } setSocialLinks(links); }).catch(()=>{}); }, []); return /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("footer", { className: "bg-white border-t border-gray-200 mt-16", children: /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12", children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._("div", { className: "flex flex-col md:flex-row justify-between items-start gap-10", children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._("div", { className: "flex-1 min-w-[200px] flex flex-col items-start", children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("span", { className: "logo-text text-3xl text-green-700 font-bold mb-2", children: "CanHelp" }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("p", { className: "text-base text-gray-600 mb-4", children: t('footer.slogan') }) ] }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._("div", { className: "flex-1 min-w-[180px]", children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("h3", { className: "text-lg font-semibold text-gray-900 mb-3", children: t('footer.links') }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._("ul", { className: "space-y-2", children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("li", { children: /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/", className: "hover:text-green-600 transition", children: t('nav.home') }) }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("li", { children: /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/tasks", className: "hover:text-green-600 transition", children: t('nav.tasks') }) }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("li", { children: /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/specialists", className: "hover:text-green-600 transition", children: t('nav.specialists') }) }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("li", { children: /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/pricing", className: "hover:text-green-600 transition", children: t('nav.pricing') }) }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("li", { children: /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/support", className: "hover:text-green-600 transition", children: t('support.title') }) }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("li", { children: /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/privacy", className: "hover:text-green-600 transition", children: t('nav.privacy') }) }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("li", { children: /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/delete-account", className: "hover:text-red-500 transition", children: t('nav.delete_account') }) }) ] }) ] }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._("div", { className: "flex-1 min-w-[180px]", children: [ /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("h3", { className: "text-lg font-semibold text-gray-900 mb-3", children: t('footer.socials') }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("p", { className: "text-gray-500 text-sm mb-2", children: "info@canhelp.gr" }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__4_5b22536f6369616c49636f6e73225d_directImport_asiSafe1__._, { className: "mt-2", links: socialLinks }) ] }) ] }), /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._("div", { className: "mt-10 border-t border-gray-100 pt-6 text-center text-gray-400 text-sm", children: [ "\xa9 ", year, " CanHelp. ", t('footer.rights') ] }) ] }) }); }  /* __next_internal_client_entry_do_not_use__ Footer auto */ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; import { useLocale } from '@/context/locale'; import { useEffect, useState } from 'react'; import Link from 'next/link'; import { SocialIcons } from './SocialIcons'; const API = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:4000'; export function Footer() { const { t } = useLocale(); const year = new Date().getFullYear(); const [socialLinks, setSocialLinks] = useState({}); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ fetch(`${API}/api/admin/social-public`).then((r)=>r.ok ? r.json() : {}).then((kv)=>{ const links = {}; for (const [k, v] of Object.entries(kv)){ if (v) links[k.replace('social.', '')] = v; } setSocialLinks(links); }).catch(()=>{}); }, []); return /*#__PURE__*/ _jsx("footer", { className: "bg-white border-t border-gray-200 mt-16", children: /*#__PURE__*/ _jsxs("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12", children: [ /*#__PURE__*/ _jsxs("div", { className: "flex flex-col md:flex-row justify-between items-start gap-10", children: [ /*#__PURE__*/ _jsxs("div", { className: "flex-1 min-w-[200px] flex flex-col items-start", children: [ /*#__PURE__*/ _jsx("span", { className: "logo-text text-3xl text-green-700 font-bold mb-2", children: "CanHelp" }), /*#__PURE__*/ _jsx("p", { className: "text-base text-gray-600 mb-4", children: t('footer.slogan') }) ] }), /*#__PURE__*/ _jsxs("div", { className: "flex-1 min-w-[180px]", children: [ /*#__PURE__*/ _jsx("h3", { className: "text-lg font-semibold text-gray-900 mb-3", children: t('footer.links') }), /*#__PURE__*/ _jsxs("ul", { className: "space-y-2", children: [ /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/", className: "hover:text-green-600 transition", children: t('nav.home') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/tasks", className: "hover:text-green-600 transition", children: t('nav.tasks') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/specialists", className: "hover:text-green-600 transition", children: t('nav.specialists') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/pricing", className: "hover:text-green-600 transition", children: t('nav.pricing') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/support", className: "hover:text-green-600 transition", children: t('support.title') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/privacy", className: "hover:text-green-600 transition", children: t('nav.privacy') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/delete-account", className: "hover:text-red-500 transition", children: t('nav.delete_account') }) }) ] }) ] }), /*#__PURE__*/ _jsxs("div", { className: "flex-1 min-w-[180px]", children: [ /*#__PURE__*/ _jsx("h3", { className: "text-lg font-semibold text-gray-900 mb-3", children: t('footer.socials') }), /*#__PURE__*/ _jsx("p", { className: "text-gray-500 text-sm mb-2", children: "info@canhelp.gr" }), /*#__PURE__*/ _jsx(SocialIcons, { className: "mt-2", links: socialLinks }) ] }) ] }), /*#__PURE__*/ _jsxs("div", { className: "mt-10 border-t border-gray-100 pt-6 text-center text-gray-400 text-sm", children: [ "\xa9 ", year, " CanHelp. ", t('footer.rights') ] }) ] }) }); } 60122undefined124168undefined170213undefined215243undefined245288undefined302332"https://api.canhelp.gr"undefined3373590undefined362368undefined407415__WEBPACK_MODULE_REFERENCE__1_5b227573654c6f63616c65225d_call_directImport_asiSafe1__._undefined505512__WEBPACK_MODULE_REFERENCE__2_5b227573655374617465225d_call_directImport_asiSafe1__._undefined574582__WEBPACK_MODULE_REFERENCE__2_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined939942__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined10501054__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined11901194__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined13701374__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined15601563__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined18121815__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined20992103__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined22632266__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined25132517__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined26892692__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined27702773__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined27752778__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined31533156__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined32343237__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined32393242__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined36233626__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined37043707__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined37093712__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined41054108__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined41864189__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined41914194__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined45794582__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined46604663__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined46654668__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined50555058__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined51365139__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined51415144__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined55295532__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined56105613__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined56155618__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined61296133__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined62936296__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined65456548__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined67806783__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined67856795__WEBPACK_MODULE_REFERENCE__4_5b22536f6369616c49636f6e73225d_directImport_asiSafe1__._undefined70747078__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined`'_B*Eeae^  = 3 _)su?!#pC*C_AC[MBA -!w!p""###C$Z%%(0,locale/* useLocale */.Y)(0,react.useState)(0,react.useEffect)(0,react_jsx_runtime.jsxs)(link_default())SocialIconsbuffersourcesizemapshash>> // EXPORTS __webpack_require__.d(__webpack_exports__, { Footer: () => (/* binding */ Footer) }); // EXTERNAL MODULE: ../../node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.js var react_jsx_runtime = __webpack_require__(78157); // EXTERNAL MODULE: ./src/context/locale.tsx var locale = __webpack_require__(96484); // EXTERNAL MODULE: ../../node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js var react = __webpack_require__(31768); // EXTERNAL MODULE: ../../node_modules/next/dist/client/app-dir/link.js var app_dir_link = __webpack_require__(94496); var link_default = /*#__PURE__*/__webpack_require__.n(app_dir_link); ;// ./src/components/SocialIcons.tsx const ICONS = [ { key: 'telegram', label: 'Telegram', hoverClass: 'hover:text-sky-500', svg: '' }, { key: 'instagram', label: 'Instagram', hoverClass: 'hover:text-pink-500', svg: '' }, { key: 'facebook', label: 'Facebook', hoverClass: 'hover:text-green-600', svg: '' }, { key: 'twitter', label: 'X', hoverClass: 'hover:text-gray-900', svg: '' }, { key: 'youtube', label: 'YouTube', hoverClass: 'hover:text-red-600', svg: '' }, { key: 'tiktok', label: 'TikTok', hoverClass: 'hover:text-black', svg: '' }, { key: 'whatsapp', label: 'WhatsApp', hoverClass: 'hover:text-green-500', svg: '' }, { key: 'viber', label: 'Viber', hoverClass: 'hover:text-purple-600', svg: '' } ]; function SocialIcons({ className = '', links }) { const active = ICONS.filter(({ key })=>links?.[key]); if (active.length === 0) return null; return /*#__PURE__*/ (0,react_jsx_runtime.jsx)("div", { className: `flex gap-4 flex-wrap ${className}`, children: active.map(({ key, label, hoverClass, svg })=>/*#__PURE__*/ (0,react_jsx_runtime.jsx)("a", { href: links[key], target: "_blank", rel: "noopener noreferrer", "aria-label": label, className: `text-gray-500 transition ${hoverClass}`, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { width: "22", height: "22", viewBox: "0 0 24 24", fill: "currentColor", dangerouslySetInnerHTML: { __html: svg } }) }, key)) }); } ;// ./src/components/Footer.tsx /* __next_internal_client_entry_do_not_use__ Footer auto */ const API = "https://api.canhelp.gr" || 0; function Footer() { const { t } = (0,locale/* useLocale */.Y)(); const year = new Date().getFullYear(); const [socialLinks, setSocialLinks] = (0,react.useState)({}); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react.useEffect)(()=>{ fetch(`${API}/api/admin/social-public`).then((r)=>r.ok ? r.json() : {}).then((kv)=>{ const links = {}; for (const [k, v] of Object.entries(kv)){ if (v) links[k.replace('social.', '')] = v; } setSocialLinks(links); }).catch(()=>{}); }, []); return /*#__PURE__*/ (0,react_jsx_runtime.jsx)("footer", { className: "bg-white border-t border-gray-200 mt-16", children: /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "flex flex-col md:flex-row justify-between items-start gap-10", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "flex-1 min-w-[200px] flex flex-col items-start", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", { className: "logo-text text-3xl text-green-700 font-bold mb-2", children: "CanHelp" }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("p", { className: "text-base text-gray-600 mb-4", children: t('footer.slogan') }) ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "flex-1 min-w-[180px]", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("h3", { className: "text-lg font-semibold text-gray-900 mb-3", children: t('footer.links') }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("ul", { className: "space-y-2", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("li", { children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/", className: "hover:text-green-600 transition", children: t('nav.home') }) }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("li", { children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/tasks", className: "hover:text-green-600 transition", children: t('nav.tasks') }) }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("li", { children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/specialists", className: "hover:text-green-600 transition", children: t('nav.specialists') }) }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("li", { children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/pricing", className: "hover:text-green-600 transition", children: t('nav.pricing') }) }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("li", { children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/support", className: "hover:text-green-600 transition", children: t('support.title') }) }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("li", { children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/privacy", className: "hover:text-green-600 transition", children: t('nav.privacy') }) }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("li", { children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/delete-account", className: "hover:text-red-500 transition", children: t('nav.delete_account') }) }) ] }) ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "flex-1 min-w-[180px]", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("h3", { className: "text-lg font-semibold text-gray-900 mb-3", children: t('footer.socials') }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("p", { className: "text-gray-500 text-sm mb-2", children: "info@canhelp.gr" }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)(SocialIcons, { className: "mt-2", links: socialLinks }) ] }) ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "mt-10 border-t border-gray-100 pt-6 text-center text-gray-400 text-sm", children: [ "\xa9 ", year, " CanHelp. ", t('footer.rights') ] }) ] }) }); } {"finalSource":true}mapbufferedMap ` ConcatSourceRawSource // EXPORTS __webpack_require__.d(__webpack_exports__, { Footer: () => (/* binding */ Footer) }); // EXTERNAL MODULE: ../../node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.js var react_jsx_runtime = __webpack_require__(78157); // EXTERNAL MODULE: ./src/context/locale.tsx var locale = __webpack_require__(96484); // EXTERNAL MODULE: ../../node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js var react = __webpack_require__(31768); // EXTERNAL MODULE: ../../node_modules/next/dist/client/app-dir/link.js var app_dir_link = __webpack_require__(94496); var link_default = /*#__PURE__*/__webpack_require__.n(app_dir_link); ;// ./src/components/SocialIcons.tsx  ReplaceSourceReplaceSourceRawSourceqimport { jsx as _jsx } from "react/jsx-runtime"; const ICONS = [ { key: 'telegram', label: 'Telegram', hoverClass: 'hover:text-sky-500', svg: '' }, { key: 'instagram', label: 'Instagram', hoverClass: 'hover:text-pink-500', svg: '' }, { key: 'facebook', label: 'Facebook', hoverClass: 'hover:text-green-600', svg: '' }, { key: 'twitter', label: 'X', hoverClass: 'hover:text-gray-900', svg: '' }, { key: 'youtube', label: 'YouTube', hoverClass: 'hover:text-red-600', svg: '' }, { key: 'tiktok', label: 'TikTok', hoverClass: 'hover:text-black', svg: '' }, { key: 'whatsapp', label: 'WhatsApp', hoverClass: 'hover:text-green-500', svg: '' }, { key: 'viber', label: 'Viber', hoverClass: 'hover:text-purple-600', svg: '' } ]; export function SocialIcons({ className = '', links }) { const active = ICONS.filter(({ key })=>links?.[key]); if (active.length === 0) return null; return /*#__PURE__*/ _jsx("div", { className: `flex gap-4 flex-wrap ${className}`, children: active.map(({ key, label, hoverClass, svg })=>/*#__PURE__*/ _jsx("a", { href: links[key], target: "_blank", rel: "noopener noreferrer", "aria-label": label, className: `text-gray-500 transition ${hoverClass}`, children: /*#__PURE__*/ _jsx("svg", { width: "22", height: "22", viewBox: "0 0 24 24", fill: "currentColor", dangerouslySetInnerHTML: { __html: svg } }) }, key)) }); } 1047undefined63616367undefined65436546__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined66916694__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined69616964__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined64886562(0,react_jsx_runtime.jsx)undefined67076781(0,react_jsx_runtime.jsx)undefined70487122(0,react_jsx_runtime.jsx)undefinedRawSource! ;// ./src/components/Footer.tsx /* __next_internal_client_entry_do_not_use__ Footer auto */ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; import { useLocale } from '@/context/locale'; import { useEffect, useState } from 'react'; import Link from 'next/link'; import { SocialIcons } from './SocialIcons'; const API = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:4000'; export function Footer() { const { t } = useLocale(); const year = new Date().getFullYear(); const [socialLinks, setSocialLinks] = useState({}); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ fetch(`${API}/api/admin/social-public`).then((r)=>r.ok ? r.json() : {}).then((kv)=>{ const links = {}; for (const [k, v] of Object.entries(kv)){ if (v) links[k.replace('social.', '')] = v; } setSocialLinks(links); }).catch(()=>{}); }, []); return /*#__PURE__*/ _jsx("footer", { className: "bg-white border-t border-gray-200 mt-16", children: /*#__PURE__*/ _jsxs("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12", children: [ /*#__PURE__*/ _jsxs("div", { className: "flex flex-col md:flex-row justify-between items-start gap-10", children: [ /*#__PURE__*/ _jsxs("div", { className: "flex-1 min-w-[200px] flex flex-col items-start", children: [ /*#__PURE__*/ _jsx("span", { className: "logo-text text-3xl text-green-700 font-bold mb-2", children: "CanHelp" }), /*#__PURE__*/ _jsx("p", { className: "text-base text-gray-600 mb-4", children: t('footer.slogan') }) ] }), /*#__PURE__*/ _jsxs("div", { className: "flex-1 min-w-[180px]", children: [ /*#__PURE__*/ _jsx("h3", { className: "text-lg font-semibold text-gray-900 mb-3", children: t('footer.links') }), /*#__PURE__*/ _jsxs("ul", { className: "space-y-2", children: [ /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/", className: "hover:text-green-600 transition", children: t('nav.home') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/tasks", className: "hover:text-green-600 transition", children: t('nav.tasks') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/specialists", className: "hover:text-green-600 transition", children: t('nav.specialists') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/pricing", className: "hover:text-green-600 transition", children: t('nav.pricing') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/support", className: "hover:text-green-600 transition", children: t('support.title') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/privacy", className: "hover:text-green-600 transition", children: t('nav.privacy') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/delete-account", className: "hover:text-red-500 transition", children: t('nav.delete_account') }) }) ] }) ] }), /*#__PURE__*/ _jsxs("div", { className: "flex-1 min-w-[180px]", children: [ /*#__PURE__*/ _jsx("h3", { className: "text-lg font-semibold text-gray-900 mb-3", children: t('footer.socials') }), /*#__PURE__*/ _jsx("p", { className: "text-gray-500 text-sm mb-2", children: "info@canhelp.gr" }), /*#__PURE__*/ _jsx(SocialIcons, { className: "mt-2", links: socialLinks }) ] }) ] }), /*#__PURE__*/ _jsxs("div", { className: "mt-10 border-t border-gray-100 pt-6 text-center text-gray-400 text-sm", children: [ "\xa9 ", year, " CanHelp. ", t('footer.rights') ] }) ] }) }); } 60122undefined124168undefined170213undefined215243undefined245288undefined302332"https://api.canhelp.gr"undefined3373590undefined362368undefined407415__WEBPACK_MODULE_REFERENCE__1_5b227573654c6f63616c65225d_call_directImport_asiSafe1__._undefined505512__WEBPACK_MODULE_REFERENCE__2_5b227573655374617465225d_call_directImport_asiSafe1__._undefined574582__WEBPACK_MODULE_REFERENCE__2_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined939942__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined10501054__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined11901194__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined13701374__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined15601563__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined18121815__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined20992103__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined22632266__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined25132517__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined26892692__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined27702773__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined27752778__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined31533156__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined32343237__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined32393242__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined36233626__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined37043707__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined37093712__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined41054108__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined41864189__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined41914194__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined45794582__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined46604663__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined46654668__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined50555058__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined51365139__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined51415144__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined55295532__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined56105613__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined56155618__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined61296133__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined62936296__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined65456548__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined67806783__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined67856795__WEBPACK_MODULE_REFERENCE__4_5b22536f6369616c49636f6e73225d_directImport_asiSafe1__._undefined70747078__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined 146232(0,locale/* useLocale */.Y)undefined322406(0,react.useState)undefined468554(0,react.useEffect)undefined911985(0,react_jsx_runtime.jsx)undefined10931169(0,react_jsx_runtime.jsxs)undefined13051381(0,react_jsx_runtime.jsxs)undefined15571633(0,react_jsx_runtime.jsxs)undefined18191893(0,react_jsx_runtime.jsx)undefined21422216(0,react_jsx_runtime.jsx)undefined25002576(0,react_jsx_runtime.jsxs)undefined27362810(0,react_jsx_runtime.jsx)undefined30573133(0,react_jsx_runtime.jsxs)undefined33053379(0,react_jsx_runtime.jsx)undefined34573531(0,react_jsx_runtime.jsx)undefined35333610(link_default())undefined39854059(0,react_jsx_runtime.jsx)undefined41374211(0,react_jsx_runtime.jsx)undefined42134290(link_default())undefined46714745(0,react_jsx_runtime.jsx)undefined48234897(0,react_jsx_runtime.jsx)undefined48994976(link_default())undefined53695443(0,react_jsx_runtime.jsx)undefined55215595(0,react_jsx_runtime.jsx)undefined55975674(link_default())undefined60596133(0,react_jsx_runtime.jsx)undefined62116285(0,react_jsx_runtime.jsx)undefined62876364(link_default())undefined67516825(0,react_jsx_runtime.jsx)undefined69036977(0,react_jsx_runtime.jsx)undefined69797056(link_default())undefined74417515(0,react_jsx_runtime.jsx)undefined75937667(0,react_jsx_runtime.jsx)undefined76697746(link_default())undefined82578333(0,react_jsx_runtime.jsxs)undefined84938567(0,react_jsx_runtime.jsx)undefined88168890(0,react_jsx_runtime.jsx)undefined91229196(0,react_jsx_runtime.jsx)undefined91989283SocialIconsundefined95629638(0,react_jsx_runtime.jsxs)undefined /***/ }) >/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; // EXPORTS __webpack_require__.d(__webpack_exports__, { Footer: () => (/* binding */ Footer) }); // EXTERNAL MODULE: ../../node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.js var react_jsx_runtime = __webpack_require__(78157); // EXTERNAL MODULE: ./src/context/locale.tsx var locale = __webpack_require__(96484); // EXTERNAL MODULE: ../../node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js var react = __webpack_require__(31768); // EXTERNAL MODULE: ../../node_modules/next/dist/client/app-dir/link.js var app_dir_link = __webpack_require__(94496); var link_default = /*#__PURE__*/__webpack_require__.n(app_dir_link); ;// ./src/components/SocialIcons.tsx const ICONS = [ { key: 'telegram', label: 'Telegram', hoverClass: 'hover:text-sky-500', svg: '' }, { key: 'instagram', label: 'Instagram', hoverClass: 'hover:text-pink-500', svg: '' }, { key: 'facebook', label: 'Facebook', hoverClass: 'hover:text-green-600', svg: '' }, { key: 'twitter', label: 'X', hoverClass: 'hover:text-gray-900', svg: '' }, { key: 'youtube', label: 'YouTube', hoverClass: 'hover:text-red-600', svg: '' }, { key: 'tiktok', label: 'TikTok', hoverClass: 'hover:text-black', svg: '' }, { key: 'whatsapp', label: 'WhatsApp', hoverClass: 'hover:text-green-500', svg: '' }, { key: 'viber', label: 'Viber', hoverClass: 'hover:text-purple-600', svg: '' } ]; function SocialIcons({ className = '', links }) { const active = ICONS.filter(({ key })=>links?.[key]); if (active.length === 0) return null; return /*#__PURE__*/ (0,react_jsx_runtime.jsx)("div", { className: `flex gap-4 flex-wrap ${className}`, children: active.map(({ key, label, hoverClass, svg })=>/*#__PURE__*/ (0,react_jsx_runtime.jsx)("a", { href: links[key], target: "_blank", rel: "noopener noreferrer", "aria-label": label, className: `text-gray-500 transition ${hoverClass}`, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { width: "22", height: "22", viewBox: "0 0 24 24", fill: "currentColor", dangerouslySetInnerHTML: { __html: svg } }) }, key)) }); } ;// ./src/components/Footer.tsx /* __next_internal_client_entry_do_not_use__ Footer auto */ const API = "https://api.canhelp.gr" || 0; function Footer() { const { t } = (0,locale/* useLocale */.Y)(); const year = new Date().getFullYear(); const [socialLinks, setSocialLinks] = (0,react.useState)({}); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react.useEffect)(()=>{ fetch(`${API}/api/admin/social-public`).then((r)=>r.ok ? r.json() : {}).then((kv)=>{ const links = {}; for (const [k, v] of Object.entries(kv)){ if (v) links[k.replace('social.', '')] = v; } setSocialLinks(links); }).catch(()=>{}); }, []); return /*#__PURE__*/ (0,react_jsx_runtime.jsx)("footer", { className: "bg-white border-t border-gray-200 mt-16", children: /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "flex flex-col md:flex-row justify-between items-start gap-10", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "flex-1 min-w-[200px] flex flex-col items-start", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", { className: "logo-text text-3xl text-green-700 font-bold mb-2", children: "CanHelp" }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("p", { className: "text-base text-gray-600 mb-4", children: t('footer.slogan') }) ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "flex-1 min-w-[180px]", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("h3", { className: "text-lg font-semibold text-gray-900 mb-3", children: t('footer.links') }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("ul", { className: "space-y-2", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("li", { children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/", className: "hover:text-green-600 transition", children: t('nav.home') }) }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("li", { children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/tasks", className: "hover:text-green-600 transition", children: t('nav.tasks') }) }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("li", { children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/specialists", className: "hover:text-green-600 transition", children: t('nav.specialists') }) }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("li", { children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/pricing", className: "hover:text-green-600 transition", children: t('nav.pricing') }) }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("li", { children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/support", className: "hover:text-green-600 transition", children: t('support.title') }) }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("li", { children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/privacy", className: "hover:text-green-600 transition", children: t('nav.privacy') }) }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("li", { children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/delete-account", className: "hover:text-red-500 transition", children: t('nav.delete_account') }) }) ] }) ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "flex-1 min-w-[180px]", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("h3", { className: "text-lg font-semibold text-gray-900 mb-3", children: t('footer.socials') }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("p", { className: "text-gray-500 text-sm mb-2", children: "info@canhelp.gr" }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)(SocialIcons, { className: "mt-2", links: socialLinks }) ] }) ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "mt-10 border-t border-gray-100 pt-6 text-center text-gray-400 text-sm", children: [ "\xa9 ", year, " CanHelp. ", t('footer.rights') ] }) ] }) }); } /***/ })  ` // EXPORTS __webpack_require__.d(__webpack_exports__, { Footer: () => (/* binding */ Footer) }); // EXTERNAL MODULE: ../../node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.js var react_jsx_runtime = __webpack_require__(78157); // EXTERNAL MODULE: ./src/context/locale.tsx var locale = __webpack_require__(96484); // EXTERNAL MODULE: ../../node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js var react = __webpack_require__(31768); // EXTERNAL MODULE: ../../node_modules/next/dist/client/app-dir/link.js var app_dir_link = __webpack_require__(94496); var link_default = /*#__PURE__*/__webpack_require__.n(app_dir_link); ;// ./src/components/SocialIcons.tsx qimport { jsx as _jsx } from "react/jsx-runtime"; const ICONS = [ { key: 'telegram', label: 'Telegram', hoverClass: 'hover:text-sky-500', svg: '' }, { key: 'instagram', label: 'Instagram', hoverClass: 'hover:text-pink-500', svg: '' }, { key: 'facebook', label: 'Facebook', hoverClass: 'hover:text-green-600', svg: '' }, { key: 'twitter', label: 'X', hoverClass: 'hover:text-gray-900', svg: '' }, { key: 'youtube', label: 'YouTube', hoverClass: 'hover:text-red-600', svg: '' }, { key: 'tiktok', label: 'TikTok', hoverClass: 'hover:text-black', svg: '' }, { key: 'whatsapp', label: 'WhatsApp', hoverClass: 'hover:text-green-500', svg: '' }, { key: 'viber', label: 'Viber', hoverClass: 'hover:text-purple-600', svg: '' } ]; export function SocialIcons({ className = '', links }) { const active = ICONS.filter(({ key })=>links?.[key]); if (active.length === 0) return null; return /*#__PURE__*/ _jsx("div", { className: `flex gap-4 flex-wrap ${className}`, children: active.map(({ key, label, hoverClass, svg })=>/*#__PURE__*/ _jsx("a", { href: links[key], target: "_blank", rel: "noopener noreferrer", "aria-label": label, className: `text-gray-500 transition ${hoverClass}`, children: /*#__PURE__*/ _jsx("svg", { width: "22", height: "22", viewBox: "0 0 24 24", fill: "currentColor", dangerouslySetInnerHTML: { __html: svg } }) }, key)) }); } 1047undefined63616367undefined65436546__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined66916694__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined69616964__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined64886562(0,react_jsx_runtime.jsx)undefined67076781(0,react_jsx_runtime.jsx)undefined70487122(0,react_jsx_runtime.jsx)undefinedRawSource! ;// ./src/components/Footer.tsx /* __next_internal_client_entry_do_not_use__ Footer auto */ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; import { useLocale } from '@/context/locale'; import { useEffect, useState } from 'react'; import Link from 'next/link'; import { SocialIcons } from './SocialIcons'; const API = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:4000'; export function Footer() { const { t } = useLocale(); const year = new Date().getFullYear(); const [socialLinks, setSocialLinks] = useState({}); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ fetch(`${API}/api/admin/social-public`).then((r)=>r.ok ? r.json() : {}).then((kv)=>{ const links = {}; for (const [k, v] of Object.entries(kv)){ if (v) links[k.replace('social.', '')] = v; } setSocialLinks(links); }).catch(()=>{}); }, []); return /*#__PURE__*/ _jsx("footer", { className: "bg-white border-t border-gray-200 mt-16", children: /*#__PURE__*/ _jsxs("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12", children: [ /*#__PURE__*/ _jsxs("div", { className: "flex flex-col md:flex-row justify-between items-start gap-10", children: [ /*#__PURE__*/ _jsxs("div", { className: "flex-1 min-w-[200px] flex flex-col items-start", children: [ /*#__PURE__*/ _jsx("span", { className: "logo-text text-3xl text-green-700 font-bold mb-2", children: "CanHelp" }), /*#__PURE__*/ _jsx("p", { className: "text-base text-gray-600 mb-4", children: t('footer.slogan') }) ] }), /*#__PURE__*/ _jsxs("div", { className: "flex-1 min-w-[180px]", children: [ /*#__PURE__*/ _jsx("h3", { className: "text-lg font-semibold text-gray-900 mb-3", children: t('footer.links') }), /*#__PURE__*/ _jsxs("ul", { className: "space-y-2", children: [ /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/", className: "hover:text-green-600 transition", children: t('nav.home') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/tasks", className: "hover:text-green-600 transition", children: t('nav.tasks') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/specialists", className: "hover:text-green-600 transition", children: t('nav.specialists') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/pricing", className: "hover:text-green-600 transition", children: t('nav.pricing') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/support", className: "hover:text-green-600 transition", children: t('support.title') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/privacy", className: "hover:text-green-600 transition", children: t('nav.privacy') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/delete-account", className: "hover:text-red-500 transition", children: t('nav.delete_account') }) }) ] }) ] }), /*#__PURE__*/ _jsxs("div", { className: "flex-1 min-w-[180px]", children: [ /*#__PURE__*/ _jsx("h3", { className: "text-lg font-semibold text-gray-900 mb-3", children: t('footer.socials') }), /*#__PURE__*/ _jsx("p", { className: "text-gray-500 text-sm mb-2", children: "info@canhelp.gr" }), /*#__PURE__*/ _jsx(SocialIcons, { className: "mt-2", links: socialLinks }) ] }) ] }), /*#__PURE__*/ _jsxs("div", { className: "mt-10 border-t border-gray-100 pt-6 text-center text-gray-400 text-sm", children: [ "\xa9 ", year, " CanHelp. ", t('footer.rights') ] }) ] }) }); } 60122undefined124168undefined170213undefined215243undefined245288undefined302332"https://api.canhelp.gr"undefined3373590undefined362368undefined407415__WEBPACK_MODULE_REFERENCE__1_5b227573654c6f63616c65225d_call_directImport_asiSafe1__._undefined505512__WEBPACK_MODULE_REFERENCE__2_5b227573655374617465225d_call_directImport_asiSafe1__._undefined574582__WEBPACK_MODULE_REFERENCE__2_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined939942__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined10501054__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined11901194__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined13701374__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined15601563__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined18121815__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined20992103__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined22632266__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined25132517__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined26892692__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined27702773__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined27752778__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined31533156__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined32343237__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined32393242__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined36233626__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined37043707__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined37093712__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined41054108__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined41864189__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined41914194__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined45794582__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined46604663__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined46654668__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined50555058__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined51365139__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined51415144__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined55295532__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined56105613__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined56155618__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined61296133__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined62936296__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined65456548__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined67806783__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined67856795__WEBPACK_MODULE_REFERENCE__4_5b22536f6369616c49636f6e73225d_directImport_asiSafe1__._undefined70747078__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined 146232(0,locale/* useLocale */.Y)undefined322406(0,react.useState)undefined468554(0,react.useEffect)undefined911985(0,react_jsx_runtime.jsx)undefined10931169(0,react_jsx_runtime.jsxs)undefined13051381(0,react_jsx_runtime.jsxs)undefined15571633(0,react_jsx_runtime.jsxs)undefined18191893(0,react_jsx_runtime.jsx)undefined21422216(0,react_jsx_runtime.jsx)undefined25002576(0,react_jsx_runtime.jsxs)undefined27362810(0,react_jsx_runtime.jsx)undefined30573133(0,react_jsx_runtime.jsxs)undefined33053379(0,react_jsx_runtime.jsx)undefined34573531(0,react_jsx_runtime.jsx)undefined35333610(link_default())undefined39854059(0,react_jsx_runtime.jsx)undefined41374211(0,react_jsx_runtime.jsx)undefined42134290(link_default())undefined46714745(0,react_jsx_runtime.jsx)undefined48234897(0,react_jsx_runtime.jsx)undefined48994976(link_default())undefined53695443(0,react_jsx_runtime.jsx)undefined55215595(0,react_jsx_runtime.jsx)undefined55975674(link_default())undefined60596133(0,react_jsx_runtime.jsx)undefined62116285(0,react_jsx_runtime.jsx)undefined62876364(link_default())undefined67516825(0,react_jsx_runtime.jsx)undefined69036977(0,react_jsx_runtime.jsx)undefined69797056(link_default())undefined74417515(0,react_jsx_runtime.jsx)undefined75937667(0,react_jsx_runtime.jsx)undefined76697746(link_default())undefined82578333(0,react_jsx_runtime.jsxs)undefined84938567(0,react_jsx_runtime.jsx)undefined88168890(0,react_jsx_runtime.jsx)undefined91229196(0,react_jsx_runtime.jsx)undefined91989283SocialIconsundefined95629638(0,react_jsx_runtime.jsxs)undefined, /***/ 20138:  ?webpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource_/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; webpack/lib/util/registerExternalSerializerwebpack-sources/CachedSource webpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ LocaleProvider: () => (/* binding */ LocaleProvider) /* harmony export */ }); /* unused harmony export useLocale */ /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25459); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__); webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSource// This file is generated by the Webpack next-flight-loader. import { registerClientReference } from "react-server-dom-webpack/server"; export const LocaleProvider = registerClientReference( function() { throw new Error("Attempted to call LocaleProvider() from the server but LocaleProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/context/locale.tsx", "LocaleProvider", );export const useLocale = registerClientReference( function() { throw new Error("Attempted to call useLocale() from the server but useLocale is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/context/locale.tsx", "useLocale", ); `=H(>(0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)buffersourcesizemapshash/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ LocaleProvider: () => (/* binding */ LocaleProvider) /* harmony export */ }); /* unused harmony export useLocale */ /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25459); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__); // This file is generated by the Webpack next-flight-loader. const LocaleProvider = (0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)( function() { throw new Error("Attempted to call LocaleProvider() from the server but LocaleProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/context/locale.tsx", "LocaleProvider", );const useLocale = (0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)( function() { throw new Error("Attempted to call useLocale() from the server but useLocale is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/context/locale.tsx", "useLocale", ); {"finalSource":true}mapbufferedMap ConcatSourceRawSource/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ LocaleProvider: () => (/* binding */ LocaleProvider) /* harmony export */ }); /* unused harmony export useLocale */ /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25459); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__); ReplaceSourceRawSource// This file is generated by the Webpack next-flight-loader. import { registerClientReference } from "react-server-dom-webpack/server"; export const LocaleProvider = registerClientReference( function() { throw new Error("Attempted to call LocaleProvider() from the server but LocaleProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/context/locale.tsx", "LocaleProvider", );export const useLocale = registerClientReference( function() { throw new Error("Attempted to call useLocale() from the server but useLocale is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/context/locale.tsx", "useLocale", );61134undefined136142undefined166188(0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)undefined527533undefined552574(0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)undefined /***/ }) /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ LocaleProvider: () => (/* binding */ LocaleProvider) /* harmony export */ }); /* unused harmony export useLocale */ /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25459); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__); // This file is generated by the Webpack next-flight-loader. const LocaleProvider = (0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)( function() { throw new Error("Attempted to call LocaleProvider() from the server but LocaleProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/context/locale.tsx", "LocaleProvider", );const useLocale = (0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)( function() { throw new Error("Attempted to call useLocale() from the server but useLocale is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/context/locale.tsx", "useLocale", ); /***/ })   /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ LocaleProvider: () => (/* binding */ LocaleProvider) /* harmony export */ }); /* unused harmony export useLocale */ /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25459); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__); // This file is generated by the Webpack next-flight-loader. import { registerClientReference } from "react-server-dom-webpack/server"; export const LocaleProvider = registerClientReference( function() { throw new Error("Attempted to call LocaleProvider() from the server but LocaleProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/context/locale.tsx", "LocaleProvider", );export const useLocale = registerClientReference( function() { throw new Error("Attempted to call useLocale() from the server but useLocale is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/context/locale.tsx", "useLocale", );61134undefined136142undefined166188(0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)undefined527533undefined552574(0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)undefined, /***/ 21046:  webpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource_/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; webpack/lib/util/registerExternalSerializerwebpack-sources/CachedSource  webpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ScrollToTopButton: () => (/* binding */ ScrollToTopButton) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(78157); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(31768); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSource/* __next_internal_client_entry_do_not_use__ ScrollToTopButton auto */ import { jsx as _jsx } from "react/jsx-runtime"; import { useEffect, useState } from 'react'; export function ScrollToTopButton() { const [visible, setVisible] = useState(false); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ const onScroll = ()=>{ setVisible(window.scrollY > 200); }; window.addEventListener('scroll', onScroll); return ()=>window.removeEventListener('scroll', onScroll); }, []); return /*#__PURE__*/ _jsx("button", { className: `scroll-to-top-btn${visible ? ' visible' : ''}`, "aria-label": "Back to top", onClick: ()=>window.scrollTo({ top: 0, behavior: 'smooth' }), children: /*#__PURE__*/ _jsx("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /*#__PURE__*/ _jsx("path", { d: "M10 16V4M10 4L4 10M10 4L16 10", stroke: "white", strokeWidth: "2.8", strokeLinecap: "round", strokeLinejoin: "round" }) }) }); } bGvxL5=:=FI(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)buffersourcesizemapshash6/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ScrollToTopButton: () => (/* binding */ ScrollToTopButton) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(78157); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(31768); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* __next_internal_client_entry_do_not_use__ ScrollToTopButton auto */ function ScrollToTopButton() { const [visible, setVisible] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{ const onScroll = ()=>{ setVisible(window.scrollY > 200); }; window.addEventListener('scroll', onScroll); return ()=>window.removeEventListener('scroll', onScroll); }, []); return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { className: `scroll-to-top-btn${visible ? ' visible' : ''}`, "aria-label": "Back to top", onClick: ()=>window.scrollTo({ top: 0, behavior: 'smooth' }), children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path", { d: "M10 16V4M10 4L4 10M10 4L16 10", stroke: "white", strokeWidth: "2.8", strokeLinecap: "round", strokeLinejoin: "round" }) }) }); } {"finalSource":true}mapbufferedMap ConcatSourceRawSource/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ScrollToTopButton: () => (/* binding */ ScrollToTopButton) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(78157); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(31768); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); ReplaceSourceRawSource/* __next_internal_client_entry_do_not_use__ ScrollToTopButton auto */ import { jsx as _jsx } from "react/jsx-runtime"; import { useEffect, useState } from 'react'; export function ScrollToTopButton() { const [visible, setVisible] = useState(false); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ const onScroll = ()=>{ setVisible(window.scrollY > 200); }; window.addEventListener('scroll', onScroll); return ()=>window.removeEventListener('scroll', onScroll); }, []); return /*#__PURE__*/ _jsx("button", { className: `scroll-to-top-btn${visible ? ' visible' : ''}`, "aria-label": "Back to top", onClick: ()=>window.scrollTo({ top: 0, behavior: 'smooth' }), children: /*#__PURE__*/ _jsx("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /*#__PURE__*/ _jsx("path", { d: "M10 16V4M10 4L4 10M10 4L16 10", stroke: "white", strokeWidth: "2.8", strokeLinecap: "round", strokeLinejoin: "round" }) }) }); } z71118undefined120163undefined165171undefined237244(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined309317(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined570573(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined838841(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined10481051(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined /***/ }) |/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ScrollToTopButton: () => (/* binding */ ScrollToTopButton) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(78157); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(31768); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* __next_internal_client_entry_do_not_use__ ScrollToTopButton auto */ function ScrollToTopButton() { const [visible, setVisible] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{ const onScroll = ()=>{ setVisible(window.scrollY > 200); }; window.addEventListener('scroll', onScroll); return ()=>window.removeEventListener('scroll', onScroll); }, []); return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { className: `scroll-to-top-btn${visible ? ' visible' : ''}`, "aria-label": "Back to top", onClick: ()=>window.scrollTo({ top: 0, behavior: 'smooth' }), children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path", { d: "M10 16V4M10 4L4 10M10 4L16 10", stroke: "white", strokeWidth: "2.8", strokeLinecap: "round", strokeLinejoin: "round" }) }) }); } /***/ }) }  /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ScrollToTopButton: () => (/* binding */ ScrollToTopButton) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(78157); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(31768); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* __next_internal_client_entry_do_not_use__ ScrollToTopButton auto */ import { jsx as _jsx } from "react/jsx-runtime"; import { useEffect, useState } from 'react'; export function ScrollToTopButton() { const [visible, setVisible] = useState(false); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ const onScroll = ()=>{ setVisible(window.scrollY > 200); }; window.addEventListener('scroll', onScroll); return ()=>window.removeEventListener('scroll', onScroll); }, []); return /*#__PURE__*/ _jsx("button", { className: `scroll-to-top-btn${visible ? ' visible' : ''}`, "aria-label": "Back to top", onClick: ()=>window.scrollTo({ top: 0, behavior: 'smooth' }), children: /*#__PURE__*/ _jsx("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /*#__PURE__*/ _jsx("path", { d: "M10 16V4M10 4L4 10M10 4L16 10", stroke: "white", strokeWidth: "2.8", strokeLinecap: "round", strokeLinejoin: "round" }) }) }); } z71118undefined120163undefined165171undefined237244(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined309317(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined570573(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined838841(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined10481051(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined, /***/ 28222:  webpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource_/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; webpack/lib/util/registerExternalSerializerwebpack-sources/CachedSource pwebpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ AdminRolePreview: () => (/* binding */ AdminRolePreview) /* harmony export */ }); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25459); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__); webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSource$// This file is generated by the Webpack next-flight-loader. import { registerClientReference } from "react-server-dom-webpack/server"; export const AdminRolePreview = registerClientReference( function() { throw new Error("Attempted to call AdminRolePreview() from the server but AdminRolePreview is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/components/AdminRolePreview.tsx", "AdminRolePreview", ); `=D(0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)buffersourcesizemapshash/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ AdminRolePreview: () => (/* binding */ AdminRolePreview) /* harmony export */ }); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25459); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__); // This file is generated by the Webpack next-flight-loader. const AdminRolePreview = (0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)( function() { throw new Error("Attempted to call AdminRolePreview() from the server but AdminRolePreview is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/components/AdminRolePreview.tsx", "AdminRolePreview", ); {"finalSource":true}mapbufferedMap ConcatSourceRawSource/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ AdminRolePreview: () => (/* binding */ AdminRolePreview) /* harmony export */ }); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25459); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__); ReplaceSourceRawSource$// This file is generated by the Webpack next-flight-loader. import { registerClientReference } from "react-server-dom-webpack/server"; export const AdminRolePreview = registerClientReference( function() { throw new Error("Attempted to call AdminRolePreview() from the server but AdminRolePreview is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/components/AdminRolePreview.tsx", "AdminRolePreview", );61134undefined136142undefined168190(0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)undefined /***/ }) q^/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ AdminRolePreview: () => (/* binding */ AdminRolePreview) /* harmony export */ }); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25459); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__); // This file is generated by the Webpack next-flight-loader. const AdminRolePreview = (0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)( function() { throw new Error("Attempted to call AdminRolePreview() from the server but AdminRolePreview is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/components/AdminRolePreview.tsx", "AdminRolePreview", ); /***/ }) ru  vv/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ AdminRolePreview: () => (/* binding */ AdminRolePreview) /* harmony export */ }); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25459); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__); $// This file is generated by the Webpack next-flight-loader. import { registerClientReference } from "react-server-dom-webpack/server"; export const AdminRolePreview = registerClientReference( function() { throw new Error("Attempted to call AdminRolePreview() from the server but AdminRolePreview is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/components/AdminRolePreview.tsx", "AdminRolePreview", );61134undefined136142undefined168190(0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)undefineduw, /***/ 29072:  webpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSourceV/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { webpack/lib/util/registerExternalSerializerwebpack-sources/CachedSource webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSourceimport(/* webpackMode: "eager", webpackExports: ["AdminRolePreview"] */ "/opt/canhelp/apps/web/src/components/AdminRolePreview.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["Footer"] */ "/opt/canhelp/apps/web/src/components/Footer.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["Header"] */ "/opt/canhelp/apps/web/src/components/Header.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["ScrollToTopButton"] */ "/opt/canhelp/apps/web/src/components/ScrollToTopButton.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["LocaleProvider"] */ "/opt/canhelp/apps/web/src/context/locale.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["LocationProvider"] */ "/opt/canhelp/apps/web/src/context/location.tsx"); JkpnsPromise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 28222))Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 39348))Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 67674))Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 32948))Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 20138))Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 1697))buffersourcesizemapshashUPromise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 28222)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 39348)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 67674)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 32948)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 20138)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 1697)); {"finalSource":true}mapbufferedMap ReplaceSourceRawSourceimport(/* webpackMode: "eager", webpackExports: ["AdminRolePreview"] */ "/opt/canhelp/apps/web/src/components/AdminRolePreview.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["Footer"] */ "/opt/canhelp/apps/web/src/components/Footer.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["Header"] */ "/opt/canhelp/apps/web/src/components/Header.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["ScrollToTopButton"] */ "/opt/canhelp/apps/web/src/components/ScrollToTopButton.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["LocaleProvider"] */ "/opt/canhelp/apps/web/src/context/locale.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["LocationProvider"] */ "/opt/canhelp/apps/web/src/context/location.tsx"); 0131Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 28222))undefined136247Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 39348))undefined252363Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 67674))undefined368501Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 32948))undefined506622Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 20138))undefined627747Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 1697))undefined /***/ }) f/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 28222)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 39348)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 67674)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 32948)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 20138)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 1697)); /***/ }) gj kV/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { yimport(/* webpackMode: "eager", webpackExports: ["AdminRolePreview"] */ "/opt/canhelp/apps/web/src/components/AdminRolePreview.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["Footer"] */ "/opt/canhelp/apps/web/src/components/Footer.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["Header"] */ "/opt/canhelp/apps/web/src/components/Header.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["ScrollToTopButton"] */ "/opt/canhelp/apps/web/src/components/ScrollToTopButton.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["LocaleProvider"] */ "/opt/canhelp/apps/web/src/context/locale.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["LocationProvider"] */ "/opt/canhelp/apps/web/src/context/location.tsx"); 0131Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 28222))undefined136247Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 39348))undefined252363Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 67674))undefined368501Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 32948))undefined506622Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 20138))undefined627747Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 1697))undefinedjl, /***/ 30460:  webpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource/***/ (() => { /* (ignored) */  /***/ }) [\ ]` abcdce, /***/ 32948:  webpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource_/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; webpack/lib/util/registerExternalSerializerwebpack-sources/CachedSource wwebpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ScrollToTopButton: () => (/* binding */ ScrollToTopButton) /* harmony export */ }); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25459); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__); webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSource)// This file is generated by the Webpack next-flight-loader. import { registerClientReference } from "react-server-dom-webpack/server"; export const ScrollToTopButton = registerClientReference( function() { throw new Error("Attempted to call ScrollToTopButton() from the server but ScrollToTopButton is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/components/ScrollToTopButton.tsx", "ScrollToTopButton", ); `=D(0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)buffersourcesizemapshash/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ScrollToTopButton: () => (/* binding */ ScrollToTopButton) /* harmony export */ }); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25459); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__); // This file is generated by the Webpack next-flight-loader. const ScrollToTopButton = (0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)( function() { throw new Error("Attempted to call ScrollToTopButton() from the server but ScrollToTopButton is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/components/ScrollToTopButton.tsx", "ScrollToTopButton", ); {"finalSource":true}mapbufferedMap ConcatSourceRawSource/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ScrollToTopButton: () => (/* binding */ ScrollToTopButton) /* harmony export */ }); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25459); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__); ReplaceSourceRawSource)// This file is generated by the Webpack next-flight-loader. import { registerClientReference } from "react-server-dom-webpack/server"; export const ScrollToTopButton = registerClientReference( function() { throw new Error("Attempted to call ScrollToTopButton() from the server but ScrollToTopButton is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/components/ScrollToTopButton.tsx", "ScrollToTopButton", );61134undefined136142undefined169191(0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)undefined /***/ }) Te/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ScrollToTopButton: () => (/* binding */ ScrollToTopButton) /* harmony export */ }); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25459); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__); // This file is generated by the Webpack next-flight-loader. const ScrollToTopButton = (0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)( function() { throw new Error("Attempted to call ScrollToTopButton() from the server but ScrollToTopButton is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/components/ScrollToTopButton.tsx", "ScrollToTopButton", ); /***/ }) UX  YfY/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ScrollToTopButton: () => (/* binding */ ScrollToTopButton) /* harmony export */ }); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25459); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__); g)// This file is generated by the Webpack next-flight-loader. import { registerClientReference } from "react-server-dom-webpack/server"; export const ScrollToTopButton = registerClientReference( function() { throw new Error("Attempted to call ScrollToTopButton() from the server but ScrollToTopButton is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/components/ScrollToTopButton.tsx", "ScrollToTopButton", );61134undefined136142undefined169191(0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)undefinedXZ, /***/ 33506:  webpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource_/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; webpack/lib/util/registerExternalSerializerwebpack-sources/CachedSource webpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource__webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ NotFound) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5939); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3498); /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_1__); webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSourceimport { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; import Link from 'next/link'; export default function NotFound() { return /*#__PURE__*/ _jsx("div", { className: "min-h-screen flex items-center justify-center text-center px-4", children: /*#__PURE__*/ _jsxs("div", { children: [ /*#__PURE__*/ _jsx("h1", { className: "text-8xl font-bold text-green-600 mb-4", children: "404" }), /*#__PURE__*/ _jsx("p", { className: "text-xl text-gray-700 mb-6", children: "Η σελίδα δεν βρέθηκε" }), /*#__PURE__*/ _jsx(Link, { href: "/", className: "bg-green-600 text-white px-6 py-3 rounded-xl font-semibold hover:bg-green-700", children: "Επιστροφή στην Αρχική" }) ] }) }); }  d>@\^lK#dg(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(next_link__WEBPACK_IMPORTED_MODULE_1___default())buffersourcesizemapshasho__webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ NotFound) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5939); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3498); /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_1__); function NotFound() { return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "min-h-screen flex items-center justify-center text-center px-4", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h1", { className: "text-8xl font-bold text-green-600 mb-4", children: "404" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { className: "text-xl text-gray-700 mb-6", children: "Η σελίδα δεν βρέθηκε" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)((next_link__WEBPACK_IMPORTED_MODULE_1___default()), { href: "/", className: "bg-green-600 text-white px-6 py-3 rounded-xl font-semibold hover:bg-green-700", children: "Επιστροφή στην Αρχική" }) ] }) }); } {"finalSource":true}mapbufferedMap ConcatSourceRawSource__webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ NotFound) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5939); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3498); /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_1__); ReplaceSourceRawSourceimport { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; import Link from 'next/link'; export default function NotFound() { return /*#__PURE__*/ _jsx("div", { className: "min-h-screen flex items-center justify-center text-center px-4", children: /*#__PURE__*/ _jsxs("div", { children: [ /*#__PURE__*/ _jsx("h1", { className: "text-8xl font-bold text-green-600 mb-4", children: "404" }), /*#__PURE__*/ _jsx("p", { className: "text-xl text-gray-700 mb-6", children: "Η σελίδα δεν βρέθηκε" }), /*#__PURE__*/ _jsx(Link, { href: "/", className: "bg-green-600 text-white px-6 py-3 rounded-xl font-semibold hover:bg-green-700", children: "Επιστροφή στην Αρχική" }) ] }) }); } 062undefined6492undefined94108undefined156159(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined287291(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined356359(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined528531(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined704707(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined709712(next_link__WEBPACK_IMPORTED_MODULE_1___default())undefined /***/ }) I/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ NotFound) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5939); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3498); /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_1__); function NotFound() { return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "min-h-screen flex items-center justify-center text-center px-4", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h1", { className: "text-8xl font-bold text-green-600 mb-4", children: "404" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { className: "text-xl text-gray-700 mb-6", children: "Η σελίδα δεν βρέθηκε" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)((next_link__WEBPACK_IMPORTED_MODULE_1___default()), { href: "/", className: "bg-green-600 text-white px-6 py-3 rounded-xl font-semibold hover:bg-green-700", children: "Επιστροφή στην Αρχική" }) ] }) }); } /***/ }) JM  N[N__webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ NotFound) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5939); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3498); /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_1__); \import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; import Link from 'next/link'; export default function NotFound() { return /*#__PURE__*/ _jsx("div", { className: "min-h-screen flex items-center justify-center text-center px-4", children: /*#__PURE__*/ _jsxs("div", { children: [ /*#__PURE__*/ _jsx("h1", { className: "text-8xl font-bold text-green-600 mb-4", children: "404" }), /*#__PURE__*/ _jsx("p", { className: "text-xl text-gray-700 mb-6", children: "Η σελίδα δεν βρέθηκε" }), /*#__PURE__*/ _jsx(Link, { href: "/", className: "bg-green-600 text-white px-6 py-3 rounded-xl font-semibold hover:bg-green-700", children: "Επιστροφή στην Αρχική" }) ] }) }); } 062undefined6492undefined94108undefined156159(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined287291(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined356359(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined528531(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined704707(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined709712(next_link__WEBPACK_IMPORTED_MODULE_1___default())undefinedMO, /***/ 38800:  webpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSourceV/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { webpack/lib/util/registerExternalSerializerwebpack-sources/CachedSource webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSourceimport(/* webpackMode: "eager", webpackExports: ["AdminRolePreview"] */ "/opt/canhelp/apps/web/src/components/AdminRolePreview.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["Footer"] */ "/opt/canhelp/apps/web/src/components/Footer.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["Header"] */ "/opt/canhelp/apps/web/src/components/Header.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["ScrollToTopButton"] */ "/opt/canhelp/apps/web/src/components/ScrollToTopButton.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["LocaleProvider"] */ "/opt/canhelp/apps/web/src/context/locale.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["LocationProvider"] */ "/opt/canhelp/apps/web/src/context/location.tsx"); JkpnsPromise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 12696))Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 15043))Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 14365))Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 21046))Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 96484))Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 56003))buffersourcesizemapshashVPromise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 12696)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 15043)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 14365)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 21046)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 96484)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 56003)); {"finalSource":true}mapbufferedMap ReplaceSourceRawSourceimport(/* webpackMode: "eager", webpackExports: ["AdminRolePreview"] */ "/opt/canhelp/apps/web/src/components/AdminRolePreview.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["Footer"] */ "/opt/canhelp/apps/web/src/components/Footer.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["Header"] */ "/opt/canhelp/apps/web/src/components/Header.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["ScrollToTopButton"] */ "/opt/canhelp/apps/web/src/components/ScrollToTopButton.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["LocaleProvider"] */ "/opt/canhelp/apps/web/src/context/locale.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["LocationProvider"] */ "/opt/canhelp/apps/web/src/context/location.tsx"); 0131Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 12696))undefined136247Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 15043))undefined252363Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 14365))undefined368501Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 21046))undefined506622Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 96484))undefined627747Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 56003))undefined /***/ }) >/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 12696)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 15043)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 14365)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 21046)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 96484)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 56003)); /***/ }) ?B CR0131Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 12696))undefined136247Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 15043))undefined252363Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 14365))undefined368501Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 21046))undefined506622Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 96484))undefined627747Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 56003))undefinedDF, /***/ 39348:  (webpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource_/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; webpack/lib/util/registerExternalSerializerwebpack-sources/CachedSource *webpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Footer: () => (/* binding */ Footer) /* harmony export */ }); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25459); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__); webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSource// This file is generated by the Webpack next-flight-loader. import { registerClientReference } from "react-server-dom-webpack/server"; export const Footer = registerClientReference( function() { throw new Error("Attempted to call Footer() from the server but Footer is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/components/Footer.tsx", "Footer", ); `=D(0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)buffersourcesizemapshash/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Footer: () => (/* binding */ Footer) /* harmony export */ }); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25459); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__); // This file is generated by the Webpack next-flight-loader. const Footer = (0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)( function() { throw new Error("Attempted to call Footer() from the server but Footer is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/components/Footer.tsx", "Footer", ); {"finalSource":true}mapbufferedMap ConcatSourceRawSource/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Footer: () => (/* binding */ Footer) /* harmony export */ }); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25459); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__); ReplaceSourceRawSource// This file is generated by the Webpack next-flight-loader. import { registerClientReference } from "react-server-dom-webpack/server"; export const Footer = registerClientReference( function() { throw new Error("Attempted to call Footer() from the server but Footer is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/components/Footer.tsx", "Footer", );61134undefined136142undefined158180(0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)undefined /***/ }) 5/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Footer: () => (/* binding */ Footer) /* harmony export */ }); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25459); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__); // This file is generated by the Webpack next-flight-loader. const Footer = (0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)( function() { throw new Error("Attempted to call Footer() from the server but Footer is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/components/Footer.tsx", "Footer", ); /***/ }) 69  :G:/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Footer: () => (/* binding */ Footer) /* harmony export */ }); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25459); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__); H// This file is generated by the Webpack next-flight-loader. import { registerClientReference } from "react-server-dom-webpack/server"; export const Footer = registerClientReference( function() { throw new Error("Attempted to call Footer() from the server but Footer is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/components/Footer.tsx", "Footer", );61134undefined136142undefined158180(0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)undefined9;, /***/ 45639:  gwebpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource_/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; webpack/lib/util/registerExternalSerializerwebpack-sources/CachedSource @webpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(43560); /* harmony import */ var next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0__); webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSourceb import { fillMetadataSegment } from 'next/dist/lib/metadata/get-metadata-route' export default async (props) => { const imageData = {"type":"image/png","sizes":"1024x1024"} const imageUrl = fillMetadataSegment(".", await props.params, "apple-icon.png") return [{ ...imageData, url: imageUrl + "?5d298b9734cd2682", }] } dPUcUcBb v@/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0__.fillMetadataSegment));buffersourcesizemapshash__webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(43560); /* harmony import */ var next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0__); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (async (props) => { const imageData = {"type":"image/png","sizes":"1024x1024"} const imageUrl = (0,next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0__.fillMetadataSegment)(".", await props.params, "apple-icon.png") return [{ ...imageData, url: imageUrl + "?5d298b9734cd2682", }] }); {"finalSource":true}mapbufferedMap ConcatSourceRawSource __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(43560); /* harmony import */ var next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0__); ReplaceSourceRawSourceb import { fillMetadataSegment } from 'next/dist/lib/metadata/get-metadata-route' export default async (props) => { const imageData = {"type":"image/png","sizes":"1024x1024"} const imageUrl = fillMetadataSegment(".", await props.params, "apple-icon.png") return [{ ...imageData, url: imageUrl + "?5d298b9734cd2682", }] }280undefined8599/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (undefined8599undefined203221(0,next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0__.fillMetadataSegment)undefined354353.5);undefined /***/ }) */***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(43560); /* harmony import */ var next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0__); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (async (props) => { const imageData = {"type":"image/png","sizes":"1024x1024"} const imageUrl = (0,next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0__.fillMetadataSegment)(".", await props.params, "apple-icon.png") return [{ ...imageData, url: imageUrl + "?5d298b9734cd2682", }] }); /***/ }) +.  /</I>b import { fillMetadataSegment } from 'next/dist/lib/metadata/get-metadata-route' export default async (props) => { const imageData = {"type":"image/png","sizes":"1024x1024"} const imageUrl = fillMetadataSegment(".", await props.params, "apple-icon.png") return [{ ...imageData, url: imageUrl + "?5d298b9734cd2682", }] }280undefined8599/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (undefined8599undefined203221(0,next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0__.fillMetadataSegment)undefined354353.5);undefined/1, /***/ 47570:  dwebpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource_/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; webpack/lib/util/registerExternalSerializerwebpack-sources/CachedSource  webpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource__webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ RootLayout), /* harmony export */ generateMetadata: () => (/* binding */ generateMetadata) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5939); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var next_headers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(56057); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(11110); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _globals_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(14276); /* harmony import */ var _globals_css__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_globals_css__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _components_Header__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(67674); /* harmony import */ var _components_Footer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(39348); /* harmony import */ var _context_locale__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(20138); /* harmony import */ var _context_location__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(1697); /* harmony import */ var _components_ScrollToTopButton__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(32948); /* harmony import */ var _components_AdminRolePreview__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(28222); webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSourceimport { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime"; import { cookies, headers } from 'next/headers'; import { cache } from 'react'; import './globals.css'; import { Header } from '@/components/Header'; import { Footer } from '@/components/Footer'; import { LocaleProvider } from '@/context/locale'; import { LocationProvider } from '@/context/location'; import { ScrollToTopButton } from '@/components/ScrollToTopButton'; import { AdminRolePreview } from '@/components/AdminRolePreview'; // React.cache() deduplicates identical calls within the same request render pass const fetchSeoSettings = cache(async ()=>{ try { const apiBase = process.env.INTERNAL_API_URL || 'http://localhost:4000'; const res = await fetch(`${apiBase}/api/admin/seo-public`, { next: { revalidate: 60 } }); if (!res.ok) return {}; return res.json(); } catch { return {}; } }); export async function generateMetadata() { const seo = await fetchSeoSettings(); const cookieStore = await cookies(); const rawLocale = cookieStore.get('canhelp_locale')?.value; const locale = [ 'el', 'en', 'ru', 'uk' ].includes(rawLocale ?? '') ? rawLocale : 'el'; const title = seo[`seo.siteTitle.${locale}`] || seo['seo.siteTitle.el'] || seo['seo.siteTitle'] || 'CanHelp — Βρες ειδικό για κάθε δουλειά'; const description = seo[`seo.siteDescription.${locale}`] || seo['seo.siteDescription.el'] || seo['seo.siteDescription'] || 'Η ελληνική πλατφόρμα για online ανάθεση εργασιών. Βρες επαγγελματίες για καθαρισμό, υδραυλικά, μαθήματα και πολλά άλλα.'; return { title, description, keywords: 'εργασίες, ειδικοί, Ελλάδα, freelance, καθαρισμός, υδραυλικά', robots: seo['seo.indexingEnabled'] === 'false' ? 'noindex, nofollow' : undefined }; } export default async function RootLayout({ children }) { const cookieStore = await cookies(); const headerStore = await headers(); const pathname = headerStore.get('x-pathname') ?? ''; const isStandalone = pathname.startsWith('/site/'); const rawLocale = cookieStore.get('canhelp_locale')?.value; const locales = [ 'el', 'en', 'uk', 'ru' ]; const initialLocale = locales.includes(rawLocale) ? rawLocale : 'el'; const initialLocation = decodeURIComponent(cookieStore.get('canhelp_location')?.value ?? ''); const seo = await fetchSeoSettings(); const headScripts = seo['seo.headScripts'] ?? ''; const parsedScripts = []; if (headScripts.trim()) { const re = /]*)>([\s\S]*?)<\/script>|]*)\/>/gi; let m; while((m = re.exec(headScripts)) !== null){ const attrs = m[1] ?? m[3] ?? ''; const inline = (m[2] ?? '').trim(); const srcMatch = attrs.match(/src=["']([^"']+)["']/); parsedScripts.push({ src: srcMatch?.[1], async: /\basync\b/i.test(attrs), defer: /\bdefer\b/i.test(attrs), inline: inline || undefined }); } } return /*#__PURE__*/ _jsxs("html", { lang: initialLocale, suppressHydrationWarning: true, children: [ /*#__PURE__*/ _jsx("head", { children: parsedScripts.map((s, i)=>{ if (s.src) return /*#__PURE__*/ _jsx("script", { src: s.src, async: s.async, defer: s.defer }, i); if (s.inline) return /*#__PURE__*/ _jsx("script", { dangerouslySetInnerHTML: { __html: s.inline } }, i); return null; }) }), /*#__PURE__*/ _jsx("body", { children: /*#__PURE__*/ _jsx(LocaleProvider, { initialLocale: initialLocale, children: /*#__PURE__*/ _jsx(LocationProvider, { initialSlug: initialLocation, children: !isStandalone ? /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx(Header, {}), /*#__PURE__*/ _jsx("main", { className: "min-h-screen", children: children }), /*#__PURE__*/ _jsx(ScrollToTopButton, {}), /*#__PURE__*/ _jsx(AdminRolePreview, {}), /*#__PURE__*/ _jsx(Footer, {}) ] }) : /*#__PURE__*/ _jsx("main", { className: "min-h-screen", children: children }) }) }) }) ] }); } c%UW_LN vzOU  " _% qtux!$&5#Y\035E{~F"(0,react__WEBPACK_IMPORTED_MODULE_2__.cache)(0,next_headers__WEBPACK_IMPORTED_MODULE_1__/* .cookies */ .UL)(0,next_headers__WEBPACK_IMPORTED_MODULE_1__/* .headers */ .b3)(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)_context_locale__WEBPACK_IMPORTED_MODULE_6__.LocaleProvider_context_location__WEBPACK_IMPORTED_MODULE_7__.LocationProviderreact_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment_components_Header__WEBPACK_IMPORTED_MODULE_4__.Header_components_ScrollToTopButton__WEBPACK_IMPORTED_MODULE_8__.ScrollToTopButton_components_AdminRolePreview__WEBPACK_IMPORTED_MODULE_9__.AdminRolePreview_components_Footer__WEBPACK_IMPORTED_MODULE_5__.FooterbuffersourcesizemapshashU__webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ RootLayout), /* harmony export */ generateMetadata: () => (/* binding */ generateMetadata) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5939); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var next_headers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(56057); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(11110); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _globals_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(14276); /* harmony import */ var _globals_css__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_globals_css__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _components_Header__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(67674); /* harmony import */ var _components_Footer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(39348); /* harmony import */ var _context_locale__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(20138); /* harmony import */ var _context_location__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(1697); /* harmony import */ var _components_ScrollToTopButton__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(32948); /* harmony import */ var _components_AdminRolePreview__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(28222); // React.cache() deduplicates identical calls within the same request render pass const fetchSeoSettings = (0,react__WEBPACK_IMPORTED_MODULE_2__.cache)(async ()=>{ try { const apiBase = process.env.INTERNAL_API_URL || 'http://localhost:4000'; const res = await fetch(`${apiBase}/api/admin/seo-public`, { next: { revalidate: 60 } }); if (!res.ok) return {}; return res.json(); } catch { return {}; } }); async function generateMetadata() { const seo = await fetchSeoSettings(); const cookieStore = await (0,next_headers__WEBPACK_IMPORTED_MODULE_1__/* .cookies */ .UL)(); const rawLocale = cookieStore.get('canhelp_locale')?.value; const locale = [ 'el', 'en', 'ru', 'uk' ].includes(rawLocale ?? '') ? rawLocale : 'el'; const title = seo[`seo.siteTitle.${locale}`] || seo['seo.siteTitle.el'] || seo['seo.siteTitle'] || 'CanHelp — Βρες ειδικό για κάθε δουλειά'; const description = seo[`seo.siteDescription.${locale}`] || seo['seo.siteDescription.el'] || seo['seo.siteDescription'] || 'Η ελληνική πλατφόρμα για online ανάθεση εργασιών. Βρες επαγγελματίες για καθαρισμό, υδραυλικά, μαθήματα και πολλά άλλα.'; return { title, description, keywords: 'εργασίες, ειδικοί, Ελλάδα, freelance, καθαρισμός, υδραυλικά', robots: seo['seo.indexingEnabled'] === 'false' ? 'noindex, nofollow' : undefined }; } async function RootLayout({ children }) { const cookieStore = await (0,next_headers__WEBPACK_IMPORTED_MODULE_1__/* .cookies */ .UL)(); const headerStore = await (0,next_headers__WEBPACK_IMPORTED_MODULE_1__/* .headers */ .b3)(); const pathname = headerStore.get('x-pathname') ?? ''; const isStandalone = pathname.startsWith('/site/'); const rawLocale = cookieStore.get('canhelp_locale')?.value; const locales = [ 'el', 'en', 'uk', 'ru' ]; const initialLocale = locales.includes(rawLocale) ? rawLocale : 'el'; const initialLocation = decodeURIComponent(cookieStore.get('canhelp_location')?.value ?? ''); const seo = await fetchSeoSettings(); const headScripts = seo['seo.headScripts'] ?? ''; const parsedScripts = []; if (headScripts.trim()) { const re = /]*)>([\s\S]*?)<\/script>|]*)\/>/gi; let m; while((m = re.exec(headScripts)) !== null){ const attrs = m[1] ?? m[3] ?? ''; const inline = (m[2] ?? '').trim(); const srcMatch = attrs.match(/src=["']([^"']+)["']/); parsedScripts.push({ src: srcMatch?.[1], async: /\basync\b/i.test(attrs), defer: /\bdefer\b/i.test(attrs), inline: inline || undefined }); } } return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("html", { lang: initialLocale, suppressHydrationWarning: true, children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("head", { children: parsedScripts.map((s, i)=>{ if (s.src) return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("script", { src: s.src, async: s.async, defer: s.defer }, i); if (s.inline) return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("script", { dangerouslySetInnerHTML: { __html: s.inline } }, i); return null; }) }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("body", { children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_context_locale__WEBPACK_IMPORTED_MODULE_6__.LocaleProvider, { initialLocale: initialLocale, children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_context_location__WEBPACK_IMPORTED_MODULE_7__.LocationProvider, { initialSlug: initialLocation, children: !isStandalone ? /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_Header__WEBPACK_IMPORTED_MODULE_4__.Header, {}), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("main", { className: "min-h-screen", children: children }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ScrollToTopButton__WEBPACK_IMPORTED_MODULE_8__.ScrollToTopButton, {}), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_AdminRolePreview__WEBPACK_IMPORTED_MODULE_9__.AdminRolePreview, {}), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_Footer__WEBPACK_IMPORTED_MODULE_5__.Footer, {}) ] }) : /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("main", { className: "min-h-screen", children: children }) }) }) }) ] }); } {"finalSource":true}mapbufferedMap ConcatSourceRawSource__webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ RootLayout), /* harmony export */ generateMetadata: () => (/* binding */ generateMetadata) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5939); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var next_headers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(56057); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(11110); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _globals_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(14276); /* harmony import */ var _globals_css__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_globals_css__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _components_Header__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(67674); /* harmony import */ var _components_Footer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(39348); /* harmony import */ var _context_locale__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(20138); /* harmony import */ var _context_location__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(1697); /* harmony import */ var _components_ScrollToTopButton__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(32948); /* harmony import */ var _components_AdminRolePreview__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(28222); ReplaceSourceRawSourceimport { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime"; import { cookies, headers } from 'next/headers'; import { cache } from 'react'; import './globals.css'; import { Header } from '@/components/Header'; import { Footer } from '@/components/Footer'; import { LocaleProvider } from '@/context/locale'; import { LocationProvider } from '@/context/location'; import { ScrollToTopButton } from '@/components/ScrollToTopButton'; import { AdminRolePreview } from '@/components/AdminRolePreview'; // React.cache() deduplicates identical calls within the same request render pass const fetchSeoSettings = cache(async ()=>{ try { const apiBase = process.env.INTERNAL_API_URL || 'http://localhost:4000'; const res = await fetch(`${apiBase}/api/admin/seo-public`, { next: { revalidate: 60 } }); if (!res.ok) return {}; return res.json(); } catch { return {}; } }); export async function generateMetadata() { const seo = await fetchSeoSettings(); const cookieStore = await cookies(); const rawLocale = cookieStore.get('canhelp_locale')?.value; const locale = [ 'el', 'en', 'ru', 'uk' ].includes(rawLocale ?? '') ? rawLocale : 'el'; const title = seo[`seo.siteTitle.${locale}`] || seo['seo.siteTitle.el'] || seo['seo.siteTitle'] || 'CanHelp — Βρες ειδικό για κάθε δουλειά'; const description = seo[`seo.siteDescription.${locale}`] || seo['seo.siteDescription.el'] || seo['seo.siteDescription'] || 'Η ελληνική πλατφόρμα για online ανάθεση εργασιών. Βρες επαγγελματίες για καθαρισμό, υδραυλικά, μαθήματα και πολλά άλλα.'; return { title, description, keywords: 'εργασίες, ειδικοί, Ελλάδα, freelance, καθαρισμός, υδραυλικά', robots: seo['seo.indexingEnabled'] === 'false' ? 'noindex, nofollow' : undefined }; } export default async function RootLayout({ children }) { const cookieStore = await cookies(); const headerStore = await headers(); const pathname = headerStore.get('x-pathname') ?? ''; const isStandalone = pathname.startsWith('/site/'); const rawLocale = cookieStore.get('canhelp_locale')?.value; const locales = [ 'el', 'en', 'uk', 'ru' ]; const initialLocale = locales.includes(rawLocale) ? rawLocale : 'el'; const initialLocation = decodeURIComponent(cookieStore.get('canhelp_location')?.value ?? ''); const seo = await fetchSeoSettings(); const headScripts = seo['seo.headScripts'] ?? ''; const parsedScripts = []; if (headScripts.trim()) { const re = /]*)>([\s\S]*?)<\/script>|]*)\/>/gi; let m; while((m = re.exec(headScripts)) !== null){ const attrs = m[1] ?? m[3] ?? ''; const inline = (m[2] ?? '').trim(); const srcMatch = attrs.match(/src=["']([^"']+)["']/); parsedScripts.push({ src: srcMatch?.[1], async: /\basync\b/i.test(attrs), defer: /\bdefer\b/i.test(attrs), inline: inline || undefined }); } } return /*#__PURE__*/ _jsxs("html", { lang: initialLocale, suppressHydrationWarning: true, children: [ /*#__PURE__*/ _jsx("head", { children: parsedScripts.map((s, i)=>{ if (s.src) return /*#__PURE__*/ _jsx("script", { src: s.src, async: s.async, defer: s.defer }, i); if (s.inline) return /*#__PURE__*/ _jsx("script", { dangerouslySetInnerHTML: { __html: s.inline } }, i); return null; }) }), /*#__PURE__*/ _jsx("body", { children: /*#__PURE__*/ _jsx(LocaleProvider, { initialLocale: initialLocale, children: /*#__PURE__*/ _jsx(LocationProvider, { initialSlug: initialLocation, children: !isStandalone ? /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx(Header, {}), /*#__PURE__*/ _jsx("main", { className: "min-h-screen", children: children }), /*#__PURE__*/ _jsx(ScrollToTopButton, {}), /*#__PURE__*/ _jsx(AdminRolePreview, {}), /*#__PURE__*/ _jsx(Footer, {}) ] }) : /*#__PURE__*/ _jsx("main", { className: "min-h-screen", children: children }) }) }) }) ] }); } 085undefined87134undefined136165undefined167189undefined191235undefined237281undefined283332undefined334387undefined389455undefined457521undefined630634(0,react__WEBPACK_IMPORTED_MODULE_2__.cache)undefined988994undefined11031109(0,next_headers__WEBPACK_IMPORTED_MODULE_1__/* .cookies */ .UL)undefined19291943undefined20162022(0,next_headers__WEBPACK_IMPORTED_MODULE_1__/* .cookies */ .UL)undefined20572063(0,next_headers__WEBPACK_IMPORTED_MODULE_1__/* .headers */ .b3)undefined32313235(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined33623365(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined34833486(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined36973700(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined39573960(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined40124015(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined40174030_context_locale__WEBPACK_IMPORTED_MODULE_6__.LocaleProviderundefined41294132(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined41344149_context_location__WEBPACK_IMPORTED_MODULE_7__.LocationProviderundefined42724276(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined42784286react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragmentundefined43774380(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined43824387_components_Header__WEBPACK_IMPORTED_MODULE_4__.Headerundefined44414444(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined46564659(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined46614677_components_ScrollToTopButton__WEBPACK_IMPORTED_MODULE_8__.ScrollToTopButtonundefined47314734(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined47364751_components_AdminRolePreview__WEBPACK_IMPORTED_MODULE_9__.AdminRolePreviewundefined48054808(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined48104815_components_Footer__WEBPACK_IMPORTED_MODULE_5__.Footerundefined48954898(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined /***/ })  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ RootLayout), /* harmony export */ generateMetadata: () => (/* binding */ generateMetadata) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5939); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var next_headers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(56057); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(11110); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _globals_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(14276); /* harmony import */ var _globals_css__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_globals_css__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _components_Header__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(67674); /* harmony import */ var _components_Footer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(39348); /* harmony import */ var _context_locale__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(20138); /* harmony import */ var _context_location__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(1697); /* harmony import */ var _components_ScrollToTopButton__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(32948); /* harmony import */ var _components_AdminRolePreview__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(28222); // React.cache() deduplicates identical calls within the same request render pass const fetchSeoSettings = (0,react__WEBPACK_IMPORTED_MODULE_2__.cache)(async ()=>{ try { const apiBase = process.env.INTERNAL_API_URL || 'http://localhost:4000'; const res = await fetch(`${apiBase}/api/admin/seo-public`, { next: { revalidate: 60 } }); if (!res.ok) return {}; return res.json(); } catch { return {}; } }); async function generateMetadata() { const seo = await fetchSeoSettings(); const cookieStore = await (0,next_headers__WEBPACK_IMPORTED_MODULE_1__/* .cookies */ .UL)(); const rawLocale = cookieStore.get('canhelp_locale')?.value; const locale = [ 'el', 'en', 'ru', 'uk' ].includes(rawLocale ?? '') ? rawLocale : 'el'; const title = seo[`seo.siteTitle.${locale}`] || seo['seo.siteTitle.el'] || seo['seo.siteTitle'] || 'CanHelp — Βρες ειδικό για κάθε δουλειά'; const description = seo[`seo.siteDescription.${locale}`] || seo['seo.siteDescription.el'] || seo['seo.siteDescription'] || 'Η ελληνική πλατφόρμα για online ανάθεση εργασιών. Βρες επαγγελματίες για καθαρισμό, υδραυλικά, μαθήματα και πολλά άλλα.'; return { title, description, keywords: 'εργασίες, ειδικοί, Ελλάδα, freelance, καθαρισμός, υδραυλικά', robots: seo['seo.indexingEnabled'] === 'false' ? 'noindex, nofollow' : undefined }; } async function RootLayout({ children }) { const cookieStore = await (0,next_headers__WEBPACK_IMPORTED_MODULE_1__/* .cookies */ .UL)(); const headerStore = await (0,next_headers__WEBPACK_IMPORTED_MODULE_1__/* .headers */ .b3)(); const pathname = headerStore.get('x-pathname') ?? ''; const isStandalone = pathname.startsWith('/site/'); const rawLocale = cookieStore.get('canhelp_locale')?.value; const locales = [ 'el', 'en', 'uk', 'ru' ]; const initialLocale = locales.includes(rawLocale) ? rawLocale : 'el'; const initialLocation = decodeURIComponent(cookieStore.get('canhelp_location')?.value ?? ''); const seo = await fetchSeoSettings(); const headScripts = seo['seo.headScripts'] ?? ''; const parsedScripts = []; if (headScripts.trim()) { const re = /]*)>([\s\S]*?)<\/script>|]*)\/>/gi; let m; while((m = re.exec(headScripts)) !== null){ const attrs = m[1] ?? m[3] ?? ''; const inline = (m[2] ?? '').trim(); const srcMatch = attrs.match(/src=["']([^"']+)["']/); parsedScripts.push({ src: srcMatch?.[1], async: /\basync\b/i.test(attrs), defer: /\bdefer\b/i.test(attrs), inline: inline || undefined }); } } return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("html", { lang: initialLocale, suppressHydrationWarning: true, children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("head", { children: parsedScripts.map((s, i)=>{ if (s.src) return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("script", { src: s.src, async: s.async, defer: s.defer }, i); if (s.inline) return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("script", { dangerouslySetInnerHTML: { __html: s.inline } }, i); return null; }) }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("body", { children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_context_locale__WEBPACK_IMPORTED_MODULE_6__.LocaleProvider, { initialLocale: initialLocale, children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_context_location__WEBPACK_IMPORTED_MODULE_7__.LocationProvider, { initialSlug: initialLocation, children: !isStandalone ? /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_Header__WEBPACK_IMPORTED_MODULE_4__.Header, {}), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("main", { className: "min-h-screen", children: children }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ScrollToTopButton__WEBPACK_IMPORTED_MODULE_8__.ScrollToTopButton, {}), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_AdminRolePreview__WEBPACK_IMPORTED_MODULE_9__.AdminRolePreview, {}), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_Footer__WEBPACK_IMPORTED_MODULE_5__.Footer, {}) ] }) : /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("main", { className: "min-h-screen", children: children }) }) }) }) ] }); } /***/ }) !$  %2%__webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ RootLayout), /* harmony export */ generateMetadata: () => (/* binding */ generateMetadata) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5939); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var next_headers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(56057); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(11110); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _globals_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(14276); /* harmony import */ var _globals_css__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_globals_css__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _components_Header__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(67674); /* harmony import */ var _components_Footer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(39348); /* harmony import */ var _context_locale__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(20138); /* harmony import */ var _context_location__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(1697); /* harmony import */ var _components_ScrollToTopButton__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(32948); /* harmony import */ var _components_AdminRolePreview__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(28222); 3import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime"; import { cookies, headers } from 'next/headers'; import { cache } from 'react'; import './globals.css'; import { Header } from '@/components/Header'; import { Footer } from '@/components/Footer'; import { LocaleProvider } from '@/context/locale'; import { LocationProvider } from '@/context/location'; import { ScrollToTopButton } from '@/components/ScrollToTopButton'; import { AdminRolePreview } from '@/components/AdminRolePreview'; // React.cache() deduplicates identical calls within the same request render pass const fetchSeoSettings = cache(async ()=>{ try { const apiBase = process.env.INTERNAL_API_URL || 'http://localhost:4000'; const res = await fetch(`${apiBase}/api/admin/seo-public`, { next: { revalidate: 60 } }); if (!res.ok) return {}; return res.json(); } catch { return {}; } }); export async function generateMetadata() { const seo = await fetchSeoSettings(); const cookieStore = await cookies(); const rawLocale = cookieStore.get('canhelp_locale')?.value; const locale = [ 'el', 'en', 'ru', 'uk' ].includes(rawLocale ?? '') ? rawLocale : 'el'; const title = seo[`seo.siteTitle.${locale}`] || seo['seo.siteTitle.el'] || seo['seo.siteTitle'] || 'CanHelp — Βρες ειδικό για κάθε δουλειά'; const description = seo[`seo.siteDescription.${locale}`] || seo['seo.siteDescription.el'] || seo['seo.siteDescription'] || 'Η ελληνική πλατφόρμα για online ανάθεση εργασιών. Βρες επαγγελματίες για καθαρισμό, υδραυλικά, μαθήματα και πολλά άλλα.'; return { title, description, keywords: 'εργασίες, ειδικοί, Ελλάδα, freelance, καθαρισμός, υδραυλικά', robots: seo['seo.indexingEnabled'] === 'false' ? 'noindex, nofollow' : undefined }; } export default async function RootLayout({ children }) { const cookieStore = await cookies(); const headerStore = await headers(); const pathname = headerStore.get('x-pathname') ?? ''; const isStandalone = pathname.startsWith('/site/'); const rawLocale = cookieStore.get('canhelp_locale')?.value; const locales = [ 'el', 'en', 'uk', 'ru' ]; const initialLocale = locales.includes(rawLocale) ? rawLocale : 'el'; const initialLocation = decodeURIComponent(cookieStore.get('canhelp_location')?.value ?? ''); const seo = await fetchSeoSettings(); const headScripts = seo['seo.headScripts'] ?? ''; const parsedScripts = []; if (headScripts.trim()) { const re = /]*)>([\s\S]*?)<\/script>|]*)\/>/gi; let m; while((m = re.exec(headScripts)) !== null){ const attrs = m[1] ?? m[3] ?? ''; const inline = (m[2] ?? '').trim(); const srcMatch = attrs.match(/src=["']([^"']+)["']/); parsedScripts.push({ src: srcMatch?.[1], async: /\basync\b/i.test(attrs), defer: /\bdefer\b/i.test(attrs), inline: inline || undefined }); } } return /*#__PURE__*/ _jsxs("html", { lang: initialLocale, suppressHydrationWarning: true, children: [ /*#__PURE__*/ _jsx("head", { children: parsedScripts.map((s, i)=>{ if (s.src) return /*#__PURE__*/ _jsx("script", { src: s.src, async: s.async, defer: s.defer }, i); if (s.inline) return /*#__PURE__*/ _jsx("script", { dangerouslySetInnerHTML: { __html: s.inline } }, i); return null; }) }), /*#__PURE__*/ _jsx("body", { children: /*#__PURE__*/ _jsx(LocaleProvider, { initialLocale: initialLocale, children: /*#__PURE__*/ _jsx(LocationProvider, { initialSlug: initialLocation, children: !isStandalone ? /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx(Header, {}), /*#__PURE__*/ _jsx("main", { className: "min-h-screen", children: children }), /*#__PURE__*/ _jsx(ScrollToTopButton, {}), /*#__PURE__*/ _jsx(AdminRolePreview, {}), /*#__PURE__*/ _jsx(Footer, {}) ] }) : /*#__PURE__*/ _jsx("main", { className: "min-h-screen", children: children }) }) }) }) ] }); } 085undefined87134undefined136165undefined167189undefined191235undefined237281undefined283332undefined334387undefined389455undefined457521undefined630634(0,react__WEBPACK_IMPORTED_MODULE_2__.cache)undefined988994undefined11031109(0,next_headers__WEBPACK_IMPORTED_MODULE_1__/* .cookies */ .UL)undefined19291943undefined20162022(0,next_headers__WEBPACK_IMPORTED_MODULE_1__/* .cookies */ .UL)undefined20572063(0,next_headers__WEBPACK_IMPORTED_MODULE_1__/* .headers */ .b3)undefined32313235(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined33623365(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined34833486(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined36973700(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined39573960(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined40124015(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined40174030_context_locale__WEBPACK_IMPORTED_MODULE_6__.LocaleProviderundefined41294132(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined41344149_context_location__WEBPACK_IMPORTED_MODULE_7__.LocationProviderundefined42724276(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined42784286react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragmentundefined43774380(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined43824387_components_Header__WEBPACK_IMPORTED_MODULE_4__.Headerundefined44414444(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined46564659(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined46614677_components_ScrollToTopButton__WEBPACK_IMPORTED_MODULE_8__.ScrollToTopButtonundefined47314734(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined47364751_components_AdminRolePreview__WEBPACK_IMPORTED_MODULE_9__.AdminRolePreviewundefined48054808(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined48104815_components_Footer__WEBPACK_IMPORTED_MODULE_5__.Footerundefined48954898(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined$&, /***/ 48178:  webpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource_/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; webpack/lib/util/registerExternalSerializerwebpack-sources/CachedSource webpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ E: () => (/* binding */ shortName), /* harmony export */ H: () => (/* binding */ formatShortName) /* harmony export */ }); webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSource$/** * Shortens the last name to first letter + period. * "Иван Петров" → "Иван П." * Works with a pre-composed full name string. */ export function shortName(fullName) { if (!fullName?.trim()) return '—'; const parts = fullName.trim().split(/\s+/); if (parts.length < 2 || !parts[1]) return parts[0]; return `${parts[0]} ${parts[1][0].toUpperCase()}.`; } /** * Formats separate firstName + lastName fields, shortening the last name. * Falls back to parsing fullName if firstName is not available. */ export function formatShortName(firstName, lastName, fallbackName) { if (firstName?.trim()) { const l = lastName?.trim(); return l ? `${firstName.trim()} ${l[0].toUpperCase()}.` : firstName.trim(); } return shortName(fallbackName); } C buffersourcesizemapshash/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ E: () => (/* binding */ shortName), /* harmony export */ H: () => (/* binding */ formatShortName) /* harmony export */ }); /** * Shortens the last name to first letter + period. * "Иван Петров" → "Иван П." * Works with a pre-composed full name string. */ function shortName(fullName) { if (!fullName?.trim()) return '—'; const parts = fullName.trim().split(/\s+/); if (parts.length < 2 || !parts[1]) return parts[0]; return `${parts[0]} ${parts[1][0].toUpperCase()}.`; } /** * Formats separate firstName + lastName fields, shortening the last name. * Falls back to parsing fullName if firstName is not available. */ function formatShortName(firstName, lastName, fallbackName) { if (firstName?.trim()) { const l = lastName?.trim(); return l ? `${firstName.trim()} ${l[0].toUpperCase()}.` : firstName.trim(); } return shortName(fallbackName); } {"finalSource":true}mapbufferedMap ConcatSourceRawSource/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ E: () => (/* binding */ shortName), /* harmony export */ H: () => (/* binding */ formatShortName) /* harmony export */ }); ReplaceSourceRawSource$/** * Shortens the last name to first letter + period. * "Иван Петров" → "Иван П." * Works with a pre-composed full name string. */ export function shortName(fullName) { if (!fullName?.trim()) return '—'; const parts = fullName.trim().split(/\s+/); if (parts.length < 2 || !parts[1]) return parts[0]; return `${parts[0]} ${parts[1][0].toUpperCase()}.`; } /** * Formats separate firstName + lastName fields, shortening the last name. * Falls back to parsing fullName if firstName is not available. */ export function formatShortName(firstName, lastName, fallbackName) { if (firstName?.trim()) { const l = lastName?.trim(); return l ? `${firstName.trim()} ${l[0].toUpperCase()}.` : firstName.trim(); } return shortName(fallbackName); } 136142undefined523529undefined /***/ }) U/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ E: () => (/* binding */ shortName), /* harmony export */ H: () => (/* binding */ formatShortName) /* harmony export */ }); /** * Shortens the last name to first letter + period. * "Иван Петров" → "Иван П." * Works with a pre-composed full name string. */ function shortName(fullName) { if (!fullName?.trim()) return '—'; const parts = fullName.trim().split(/\s+/); if (parts.length < 2 || !parts[1]) return parts[0]; return `${parts[0]} ${parts[1][0].toUpperCase()}.`; } /** * Formats separate firstName + lastName fields, shortening the last name. * Falls back to parsing fullName if firstName is not available. */ function formatShortName(firstName, lastName, fallbackName) { if (firstName?.trim()) { const l = lastName?.trim(); return l ? `${firstName.trim()} ${l[0].toUpperCase()}.` : firstName.trim(); } return shortName(fallbackName); } /***/ })   '/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ E: () => (/* binding */ shortName), /* harmony export */ H: () => (/* binding */ formatShortName) /* harmony export */ }); ($/** * Shortens the last name to first letter + period. * "Иван Петров" → "Иван П." * Works with a pre-composed full name string. */ export function shortName(fullName) { if (!fullName?.trim()) return '—'; const parts = fullName.trim().split(/\s+/); if (parts.length < 2 || !parts[1]) return parts[0]; return `${parts[0]} ${parts[1][0].toUpperCase()}.`; } /** * Formats separate firstName + lastName fields, shortening the last name. * Falls back to parsing fullName if firstName is not available. */ export function formatShortName(firstName, lastName, fallbackName) { if (firstName?.trim()) { const l = lastName?.trim(); return l ? `${firstName.trim()} ${l[0].toUpperCase()}.` : firstName.trim(); } return shortName(fallbackName); } 136142undefined523529undefined, /***/ 49046:  webpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSourceV/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { webpack/lib/util/registerExternalSerializerwebpack-sources/CachedSource webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSourceimport(/* webpackMode: "eager", webpackExports: ["__esModule","default"] */ "/opt/canhelp/node_modules/next/dist/client/app-dir/link.js"); @Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 94496, 23))buffersourcesizemapshashhPromise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 94496, 23)); {"finalSource":true}mapbufferedMap ReplaceSourceRawSourceimport(/* webpackMode: "eager", webpackExports: ["__esModule","default"] */ "/opt/canhelp/node_modules/next/dist/client/app-dir/link.js"); s0136Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 94496, 23))undefined /***/ })  /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 94496, 23)); /***/ })   import(/* webpackMode: "eager", webpackExports: ["__esModule","default"] */ "/opt/canhelp/node_modules/next/dist/client/app-dir/link.js"); s0136Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 94496, 23))undefined, /***/ 56003:  .webpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource_/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; webpack/lib/util/registerExternalSerializerwebpack-sources/CachedSource webpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource9/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ LocationProvider: () => (/* binding */ LocationProvider), /* harmony export */ z: () => (/* binding */ useLocation) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(78157); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(31768); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(91864); webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSourceB /* __next_internal_client_entry_do_not_use__ LocationProvider,useLocation auto */ import { jsx as _jsx } from "react/jsx-runtime"; import { createContext, useContext, useState, useEffect, useCallback } from 'react'; import { getLocations } from '@/lib/api'; const LocationContext = /*#__PURE__*/ createContext({ locationSlug: '', locationTree: [], locationLoading: true, setLocation: ()=>{}, getLabel: ()=>'' }); function readCookieLocation() { if (typeof document === 'undefined') return ''; const match = document.cookie.match(/(?:^|;\s*)canhelp_location=([^;]+)/); return match?.[1] ? decodeURIComponent(match[1]) : ''; } export function LocationProvider({ children, initialSlug = '' }) { const [locationSlug, setLocationSlug] = useState(initialSlug); const [locationTree, setLocationTree] = useState([]); const [locationLoading, setLocationLoading] = useState(true); // Sync from cookie on client mount process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ const cookieSlug = readCookieLocation(); setLocationSlug(cookieSlug); }, []); // Load location tree once process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ getLocations().then((tree)=>setLocationTree(tree)).catch(()=>{}).finally(()=>setLocationLoading(false)); }, []); const setLocation = useCallback((slug)=>{ setLocationSlug(slug); const encoded = encodeURIComponent(slug); document.cookie = `canhelp_location=${encoded}; path=/; max-age=31536000; SameSite=Lax`; }, []); const getLabel = useCallback((locale)=>{ if (!locationSlug) return ''; for (const city of locationTree){ if (city.slug === locationSlug) return city.names[locale] ?? city.names.el; for (const d of city.children ?? []){ if (d.slug === locationSlug) return d.names[locale] ?? d.names.el; } } return locationSlug; }, [ locationSlug, locationTree ]); return /*#__PURE__*/ _jsx(LocationContext.Provider, { value: { locationSlug, locationTree, locationLoading, setLocation, getLabel }, children: children }); } export function useLocation() { return useContext(LocationContext); } aR^(4CJ_iHR# , (0,react__WEBPACK_IMPORTED_MODULE_1__.createContext)(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(0,_lib_api__WEBPACK_IMPORTED_MODULE_2__/* .getLocations */ .Vs)(0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)buffersourcesizemapshash /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ LocationProvider: () => (/* binding */ LocationProvider), /* harmony export */ z: () => (/* binding */ useLocation) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(78157); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(31768); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(91864); /* __next_internal_client_entry_do_not_use__ LocationProvider,useLocation auto */ const LocationContext = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_1__.createContext)({ locationSlug: '', locationTree: [], locationLoading: true, setLocation: ()=>{}, getLabel: ()=>'' }); function readCookieLocation() { if (typeof document === 'undefined') return ''; const match = document.cookie.match(/(?:^|;\s*)canhelp_location=([^;]+)/); return match?.[1] ? decodeURIComponent(match[1]) : ''; } function LocationProvider({ children, initialSlug = '' }) { const [locationSlug, setLocationSlug] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(initialSlug); const [locationTree, setLocationTree] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]); const [locationLoading, setLocationLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true); // Sync from cookie on client mount process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{ const cookieSlug = readCookieLocation(); setLocationSlug(cookieSlug); }, []); // Load location tree once process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{ (0,_lib_api__WEBPACK_IMPORTED_MODULE_2__/* .getLocations */ .Vs)().then((tree)=>setLocationTree(tree)).catch(()=>{}).finally(()=>setLocationLoading(false)); }, []); const setLocation = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((slug)=>{ setLocationSlug(slug); const encoded = encodeURIComponent(slug); document.cookie = `canhelp_location=${encoded}; path=/; max-age=31536000; SameSite=Lax`; }, []); const getLabel = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((locale)=>{ if (!locationSlug) return ''; for (const city of locationTree){ if (city.slug === locationSlug) return city.names[locale] ?? city.names.el; for (const d of city.children ?? []){ if (d.slug === locationSlug) return d.names[locale] ?? d.names.el; } } return locationSlug; }, [ locationSlug, locationTree ]); return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(LocationContext.Provider, { value: { locationSlug, locationTree, locationLoading, setLocation, getLabel }, children: children }); } function useLocation() { return (0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)(LocationContext); } {"finalSource":true}mapbufferedMap ConcatSourceRawSource9/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ LocationProvider: () => (/* binding */ LocationProvider), /* harmony export */ z: () => (/* binding */ useLocation) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(78157); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(31768); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(91864); ReplaceSourceRawSourceB /* __next_internal_client_entry_do_not_use__ LocationProvider,useLocation auto */ import { jsx as _jsx } from "react/jsx-runtime"; import { createContext, useContext, useState, useEffect, useCallback } from 'react'; import { getLocations } from '@/lib/api'; const LocationContext = /*#__PURE__*/ createContext({ locationSlug: '', locationTree: [], locationLoading: true, setLocation: ()=>{}, getLabel: ()=>'' }); function readCookieLocation() { if (typeof document === 'undefined') return ''; const match = document.cookie.match(/(?:^|;\s*)canhelp_location=([^;]+)/); return match?.[1] ? decodeURIComponent(match[1]) : ''; } export function LocationProvider({ children, initialSlug = '' }) { const [locationSlug, setLocationSlug] = useState(initialSlug); const [locationTree, setLocationTree] = useState([]); const [locationLoading, setLocationLoading] = useState(true); // Sync from cookie on client mount process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ const cookieSlug = readCookieLocation(); setLocationSlug(cookieSlug); }, []); // Load location tree once process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ getLocations().then((tree)=>setLocationTree(tree)).catch(()=>{}).finally(()=>setLocationLoading(false)); }, []); const setLocation = useCallback((slug)=>{ setLocationSlug(slug); const encoded = encodeURIComponent(slug); document.cookie = `canhelp_location=${encoded}; path=/; max-age=31536000; SameSite=Lax`; }, []); const getLabel = useCallback((locale)=>{ if (!locationSlug) return ''; for (const city of locationTree){ if (city.slug === locationSlug) return city.names[locale] ?? city.names.el; for (const d of city.children ?? []){ if (d.slug === locationSlug) return d.names[locale] ?? d.names.el; } } return locationSlug; }, [ locationSlug, locationTree ]); return /*#__PURE__*/ _jsx(LocationContext.Provider, { value: { locationSlug, locationTree, locationLoading, setLocation, getLabel }, children: children }); } export function useLocation() { return useContext(LocationContext); } +82129undefined131214undefined216256undefined296308(0,react__WEBPACK_IMPORTED_MODULE_1__.createContext)undefined657663undefined768775(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined835842(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined899906(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined10101018(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined12101218(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined12341245(0,_lib_api__WEBPACK_IMPORTED_MODULE_2__/* .getLocations */ .Vs)undefined13751385(0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)undefined16081618(0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)undefined20712074(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined22962302undefined23392348(0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)undefined /***/ })  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ LocationProvider: () => (/* binding */ LocationProvider), /* harmony export */ z: () => (/* binding */ useLocation) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(78157); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(31768); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(91864); /* __next_internal_client_entry_do_not_use__ LocationProvider,useLocation auto */ const LocationContext = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_1__.createContext)({ locationSlug: '', locationTree: [], locationLoading: true, setLocation: ()=>{}, getLabel: ()=>'' }); function readCookieLocation() { if (typeof document === 'undefined') return ''; const match = document.cookie.match(/(?:^|;\s*)canhelp_location=([^;]+)/); return match?.[1] ? decodeURIComponent(match[1]) : ''; } function LocationProvider({ children, initialSlug = '' }) { const [locationSlug, setLocationSlug] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(initialSlug); const [locationTree, setLocationTree] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]); const [locationLoading, setLocationLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true); // Sync from cookie on client mount process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{ const cookieSlug = readCookieLocation(); setLocationSlug(cookieSlug); }, []); // Load location tree once process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{ (0,_lib_api__WEBPACK_IMPORTED_MODULE_2__/* .getLocations */ .Vs)().then((tree)=>setLocationTree(tree)).catch(()=>{}).finally(()=>setLocationLoading(false)); }, []); const setLocation = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((slug)=>{ setLocationSlug(slug); const encoded = encodeURIComponent(slug); document.cookie = `canhelp_location=${encoded}; path=/; max-age=31536000; SameSite=Lax`; }, []); const getLabel = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((locale)=>{ if (!locationSlug) return ''; for (const city of locationTree){ if (city.slug === locationSlug) return city.names[locale] ?? city.names.el; for (const d of city.children ?? []){ if (d.slug === locationSlug) return d.names[locale] ?? d.names.el; } } return locationSlug; }, [ locationSlug, locationTree ]); return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(LocationContext.Provider, { value: { locationSlug, locationTree, locationLoading, setLocation, getLabel }, children: children }); } function useLocation() { return (0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)(LocationContext); } /***/ })   9/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ LocationProvider: () => (/* binding */ LocationProvider), /* harmony export */ z: () => (/* binding */ useLocation) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(78157); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(31768); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(91864); B /* __next_internal_client_entry_do_not_use__ LocationProvider,useLocation auto */ import { jsx as _jsx } from "react/jsx-runtime"; import { createContext, useContext, useState, useEffect, useCallback } from 'react'; import { getLocations } from '@/lib/api'; const LocationContext = /*#__PURE__*/ createContext({ locationSlug: '', locationTree: [], locationLoading: true, setLocation: ()=>{}, getLabel: ()=>'' }); function readCookieLocation() { if (typeof document === 'undefined') return ''; const match = document.cookie.match(/(?:^|;\s*)canhelp_location=([^;]+)/); return match?.[1] ? decodeURIComponent(match[1]) : ''; } export function LocationProvider({ children, initialSlug = '' }) { const [locationSlug, setLocationSlug] = useState(initialSlug); const [locationTree, setLocationTree] = useState([]); const [locationLoading, setLocationLoading] = useState(true); // Sync from cookie on client mount process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ const cookieSlug = readCookieLocation(); setLocationSlug(cookieSlug); }, []); // Load location tree once process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ getLocations().then((tree)=>setLocationTree(tree)).catch(()=>{}).finally(()=>setLocationLoading(false)); }, []); const setLocation = useCallback((slug)=>{ setLocationSlug(slug); const encoded = encodeURIComponent(slug); document.cookie = `canhelp_location=${encoded}; path=/; max-age=31536000; SameSite=Lax`; }, []); const getLabel = useCallback((locale)=>{ if (!locationSlug) return ''; for (const city of locationTree){ if (city.slug === locationSlug) return city.names[locale] ?? city.names.el; for (const d of city.children ?? []){ if (d.slug === locationSlug) return d.names[locale] ?? d.names.el; } } return locationSlug; }, [ locationSlug, locationTree ]); return /*#__PURE__*/ _jsx(LocationContext.Provider, { value: { locationSlug, locationTree, locationLoading, setLocation, getLabel }, children: children }); } export function useLocation() { return useContext(LocationContext); } +82129undefined131214undefined216256undefined296308(0,react__WEBPACK_IMPORTED_MODULE_1__.createContext)undefined657663undefined768775(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined835842(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined899906(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined10101018(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined12101218(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined12341245(0,_lib_api__WEBPACK_IMPORTED_MODULE_2__/* .getLocations */ .Vs)undefined13751385(0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)undefined16081618(0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)undefined20712074(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined22962302undefined23392348(0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)undefined, /***/ 64271:  vwebpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSourceV/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { webpack/lib/util/registerExternalSerializerwebpack-sources/CachedSource webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSourceimport(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/client/components/builtin/global-error.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/client/components/client-page.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/client/components/client-segment.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/client/components/layout-router.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/client/components/metadata/async-metadata.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/client/components/render-from-template-context.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/lib/framework/boundary-components.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/lib/metadata/generate/icon-mark.js");  aqvNNSBG9>Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 58671, 23))Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 56542, 23))Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 88248, 23))Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 49743, 23))Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 96231, 23))Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 10959, 23))Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 72041, 23))Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 95094, 23))Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 67487, 23))buffersourcesizemapshashPromise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 58671, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 56542, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 88248, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 49743, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 96231, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 10959, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 72041, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 95094, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 67487, 23)); {"finalSource":true}mapbufferedMap ReplaceSourceRawSourceimport(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/client/components/builtin/global-error.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/client/components/client-page.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/client/components/client-segment.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/client/components/layout-router.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/client/components/metadata/async-metadata.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/client/components/render-from-template-context.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/lib/framework/boundary-components.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/lib/metadata/generate/icon-mark.js"); 0113Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 58671, 23))undefined118222Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 56542, 23))undefined227334Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 88248, 23))undefined339467Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 49743, 23))undefined472578Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 96231, 23))undefined583699Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 10959, 23))undefined704825Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 72041, 23))undefined830938Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 95094, 23))undefined9431049Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 67487, 23))undefined /***/ }) /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 58671, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 56542, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 88248, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 49743, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 96231, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 10959, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 72041, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 95094, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 67487, 23)); /***/ })   import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/client/components/builtin/global-error.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/client/components/client-page.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/client/components/client-segment.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/client/components/layout-router.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/client/components/metadata/async-metadata.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/client/components/render-from-template-context.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/lib/framework/boundary-components.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/lib/metadata/generate/icon-mark.js"); 0113Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 58671, 23))undefined118222Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 56542, 23))undefined227334Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 88248, 23))undefined339467Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 49743, 23))undefined472578Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 96231, 23))undefined583699Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 10959, 23))undefined704825Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 72041, 23))undefined830938Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 95094, 23))undefined9431049Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 67487, 23))undefined, /***/ 67674:  (webpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource_/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; webpack/lib/util/registerExternalSerializerwebpack-sources/CachedSource *webpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Header: () => (/* binding */ Header) /* harmony export */ }); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25459); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__); webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSource// This file is generated by the Webpack next-flight-loader. import { registerClientReference } from "react-server-dom-webpack/server"; export const Header = registerClientReference( function() { throw new Error("Attempted to call Header() from the server but Header is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/components/Header.tsx", "Header", ); `=D(0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)buffersourcesizemapshash/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Header: () => (/* binding */ Header) /* harmony export */ }); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25459); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__); // This file is generated by the Webpack next-flight-loader. const Header = (0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)( function() { throw new Error("Attempted to call Header() from the server but Header is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/components/Header.tsx", "Header", ); {"finalSource":true}mapbufferedMap ConcatSourceRawSource/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Header: () => (/* binding */ Header) /* harmony export */ }); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25459); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__); ReplaceSourceRawSource// This file is generated by the Webpack next-flight-loader. import { registerClientReference } from "react-server-dom-webpack/server"; export const Header = registerClientReference( function() { throw new Error("Attempted to call Header() from the server but Header is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/components/Header.tsx", "Header", );61134undefined136142undefined158180(0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)undefined /***/ }) /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Header: () => (/* binding */ Header) /* harmony export */ }); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25459); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__); // This file is generated by the Webpack next-flight-loader. const Header = (0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)( function() { throw new Error("Attempted to call Header() from the server but Header is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/components/Header.tsx", "Header", ); /***/ })   /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Header: () => (/* binding */ Header) /* harmony export */ }); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25459); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__); // This file is generated by the Webpack next-flight-loader. import { registerClientReference } from "react-server-dom-webpack/server"; export const Header = registerClientReference( function() { throw new Error("Attempted to call Header() from the server but Header is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/components/Header.tsx", "Header", );, /***/ 72088:  webpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource/***/ (() => { /* (ignored) */  /***/ })   , /***/ 72519:  dwebpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSourceV/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { webpack/lib/util/registerExternalSerializerwebpack-sources/CachedSource webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSourceimport(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/client/components/builtin/global-error.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/client/components/client-page.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/client/components/client-segment.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/client/components/layout-router.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/client/components/metadata/async-metadata.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/client/components/render-from-template-context.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/lib/framework/boundary-components.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/lib/metadata/generate/icon-mark.js");  aqvNNSBG9>Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 48365, 23))Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 64596, 23))Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 56186, 23))Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 67805, 23))Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 27561, 23))Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 47569, 23))Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 42747, 23))Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 56676, 23))Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 97225))buffersourcesizemapshashPromise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 48365, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 64596, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 56186, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 67805, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 27561, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 47569, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 42747, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 56676, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 97225)); {"finalSource":true}mapbufferedMap ReplaceSourceRawSourceimport(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/client/components/builtin/global-error.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/client/components/client-page.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/client/components/client-segment.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/client/components/layout-router.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/client/components/metadata/async-metadata.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/client/components/render-from-template-context.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/lib/framework/boundary-components.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/lib/metadata/generate/icon-mark.js"); 0113Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 48365, 23))undefined118222Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 64596, 23))undefined227334Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 56186, 23))undefined339467Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 67805, 23))undefined472578Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 27561, 23))undefined583699Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 47569, 23))undefined704825Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 42747, 23))undefined830938Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 56676, 23))undefined9431049Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 97225))undefined /***/ }) /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 48365, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 64596, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 56186, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 67805, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 27561, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 47569, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 42747, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 56676, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 97225)); /***/ })  t0113Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 48365, 23))undefined118222Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 64596, 23))undefined227334Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 56186, 23))undefined339467Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 67805, 23))undefined472578Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 27561, 23))undefined583699Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 47569, 23))undefined704825Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 42747, 23))undefined830938Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 56676, 23))undefined9431049Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 97225))undefined, /***/ 85998:  webpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSourceV/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { webpack/lib/util/registerExternalSerializerwebpack-sources/CachedSource webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSourceimport(/* webpackMode: "eager", webpackExports: ["__esModule","default"] */ "/opt/canhelp/node_modules/next/dist/client/app-dir/link.js"); @Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 3498, 23))buffersourcesizemapshashgPromise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 3498, 23)); {"finalSource":true}mapbufferedMap ReplaceSourceRawSourceimport(/* webpackMode: "eager", webpackExports: ["__esModule","default"] */ "/opt/canhelp/node_modules/next/dist/client/app-dir/link.js"); r0136Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 3498, 23))undefined /***/ }) /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 3498, 23)); /***/ })  kr0136Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 3498, 23))undefined, /***/ 91864:  webpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource_/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; webpack/lib/util/registerExternalSerializerwebpack-sources/CachedSource fwebpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource&/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ $7: () => (/* binding */ updateCategory), /* harmony export */ $H: () => (/* binding */ acceptOffer), /* harmony export */ $M: () => (/* binding */ getUnreadCount), /* harmony export */ Bb: () => (/* binding */ getMySpecialistCards), /* harmony export */ Bm: () => (/* binding */ getUserRating), /* harmony export */ Bq: () => (/* binding */ getSpecialistCards), /* harmony export */ Br: () => (/* binding */ getAdminNotifLogs), /* harmony export */ C0: () => (/* binding */ applyMyReferral), /* harmony export */ CX: () => (/* binding */ updateAdminSettings), /* harmony export */ Ck: () => (/* binding */ getPriceList), /* harmony export */ Cs: () => (/* binding */ previewPlanChange), /* harmony export */ D1: () => (/* binding */ setAvailabilityRange), /* harmony export */ Em: () => (/* binding */ request), /* harmony export */ F7: () => (/* binding */ getSpecialists), /* harmony export */ F9: () => (/* binding */ getTaskInvite), /* harmony export */ FI: () => (/* binding */ sendTestEmail), /* harmony export */ Fu: () => (/* binding */ getMyTasks), /* harmony export */ GB: () => (/* binding */ deleteTaskAdmin), /* harmony export */ GE: () => (/* binding */ getSkillDedup), /* harmony export */ Gp: () => (/* binding */ getAutoResponseSettings), /* harmony export */ H: () => (/* binding */ getMyDashboard), /* harmony export */ H6: () => (/* binding */ getTaskReviews), /* harmony export */ He: () => (/* binding */ activateUser), /* harmony export */ I: () => (/* binding */ autoTranslateTasks), /* harmony export */ Ic: () => (/* binding */ deletePriceListGroup), /* harmony export */ Ip: () => (/* binding */ markRead), /* harmony export */ Je: () => (/* binding */ purchasePlan), /* harmony export */ K7: () => (/* binding */ deleteCategory), /* harmony export */ KD: () => (/* binding */ getAdminCategories), /* harmony export */ KZ: () => (/* binding */ getAdminSupportTickets), /* harmony export */ Lb: () => (/* binding */ declineOffer), /* harmony export */ Lp: () => (/* binding */ getAdminEmailTemplates), /* harmony export */ ML: () => (/* binding */ getCustomerFomoDashboard), /* harmony export */ Mm: () => (/* binding */ changeUserRole), /* harmony export */ NL: () => (/* binding */ markAllRead), /* harmony export */ Nt: () => (/* binding */ updateLocation), /* harmony export */ O8: () => (/* binding */ sendPublicSupportMessage), /* harmony export */ OM: () => (/* binding */ setAvailability), /* harmony export */ OV: () => (/* binding */ runAutoMatch), /* harmony export */ OX: () => (/* binding */ getAdminPlans), /* harmony export */ On: () => (/* binding */ getCanMessage), /* harmony export */ P0: () => (/* binding */ adminTopUpUserBalance), /* harmony export */ QN: () => (/* binding */ getOrCreateDirectRoom), /* harmony export */ QY: () => (/* binding */ getTasksTranslationPreview), /* harmony export */ RN: () => (/* binding */ getSiteStats), /* harmony export */ RQ: () => (/* binding */ updateAutoResponseSettings), /* harmony export */ Rt: () => (/* binding */ completeTask), /* harmony export */ S$: () => (/* binding */ getPublicSiteProfile), /* harmony export */ S9: () => (/* binding */ createSkill), /* harmony export */ Sw: () => (/* binding */ getOffers), /* harmony export */ T9: () => (/* binding */ getPlans), /* harmony export */ Tr: () => (/* binding */ getNotifications), /* harmony export */ U9: () => (/* binding */ deletePriceListItem), /* harmony export */ UE: () => (/* binding */ trackSiteMessage), /* harmony export */ UT: () => (/* binding */ createTask), /* harmony export */ Uq: () => (/* binding */ mergeSkillDuplicates), /* harmony export */ V: () => (/* binding */ addSpecialistFavorite), /* harmony export */ V7: () => (/* binding */ adminBroadcastPush), /* harmony export */ VL: () => (/* binding */ getMessages), /* harmony export */ VM: () => (/* binding */ getUserProfile), /* harmony export */ Vs: () => (/* binding */ getLocations), /* harmony export */ Wi: () => (/* binding */ deactivateUser), /* harmony export */ Xz: () => (/* binding */ getSpecialistAvailability), /* harmony export */ YQ: () => (/* binding */ getTranslationsStats), /* harmony export */ Yj: () => (/* binding */ getAdminTasks), /* harmony export */ Z2: () => (/* binding */ createPriceListItem), /* harmony export */ Zp: () => (/* binding */ getChatRooms), /* harmony export */ _z: () => (/* binding */ sendMessage), /* harmony export */ aT: () => (/* binding */ getMyOffers), /* harmony export */ bR: () => (/* binding */ deletePlan), /* harmony export */ bW: () => (/* binding */ getCategories), /* harmony export */ bc: () => (/* binding */ toggleStatus), /* harmony export */ bi: () => (/* binding */ getAdminNotifStats), /* harmony export */ bx: () => (/* binding */ createReview), /* harmony export */ cJ: () => (/* binding */ getAdminReferrals), /* harmony export */ cS: () => (/* binding */ getAdminUsers), /* harmony export */ cl: () => (/* binding */ verifyTelegramToken), /* harmony export */ cp: () => (/* binding */ autoTranslate), /* harmony export */ dE: () => (/* binding */ getAdminStats), /* harmony export */ eR: () => (/* binding */ createSpecialistCard), /* harmony export */ eU: () => (/* binding */ updateReportStatus), /* harmony export */ ew: () => (/* binding */ getPlanHistory), /* harmony export */ f5: () => (/* binding */ deleteSpecialistCard), /* harmony export */ fP: () => (/* binding */ updateSkill), /* harmony export */ fm: () => (/* binding */ getBalanceHistory), /* harmony export */ fu: () => (/* binding */ autoTranslateEmailTemplates), /* harmony export */ g0: () => (/* binding */ getAdminBalanceHistory), /* harmony export */ g1: () => (/* binding */ adminSendPushToUser), /* harmony export */ gg: () => (/* binding */ getTask), /* harmony export */ hD: () => (/* binding */ adminWithdrawUserBalance), /* harmony export */ hl: () => (/* binding */ updatePortfolioItem), /* harmony export */ hp: () => (/* binding */ deleteSkill), /* harmony export */ iN: () => (/* binding */ getMyAvailability), /* harmony export */ i_: () => (/* binding */ getAdminSkills), /* harmony export */ j_: () => (/* binding */ getAdminAiLogs), /* harmony export */ jd: () => (/* binding */ getAdminUser), /* harmony export */ jg: () => (/* binding */ updateAdminEmailTemplate), /* harmony export */ k_: () => (/* binding */ getAdminLocations), /* harmony export */ lC: () => (/* binding */ updateTask), /* harmony export */ mq: () => (/* binding */ createSupportTicket), /* harmony export */ nT: () => (/* binding */ replyToSupportTicket), /* harmony export */ nf: () => (/* binding */ cancelTaskAdmin), /* harmony export */ oD: () => (/* binding */ updatePriceListGroup), /* harmony export */ oh: () => (/* binding */ initiateTopUp), /* harmony export */ oq: () => (/* binding */ adminUpdateSpecialistCard), /* harmony export */ pD: () => (/* binding */ getSpecialistFavorites), /* harmony export */ pK: () => (/* binding */ getPaymentHistory), /* harmony export */ q7: () => (/* binding */ getMyReviews), /* harmony export */ qT: () => (/* binding */ createPlan), /* harmony export */ qX: () => (/* binding */ testTelegramConnection), /* harmony export */ qt: () => (/* binding */ getAdminMailLogs), /* harmony export */ rC: () => (/* binding */ getAdminSettings), /* harmony export */ rl: () => (/* binding */ getSkillSuggestions), /* harmony export */ sD: () => (/* binding */ removeSpecialistFavorite), /* harmony export */ s_: () => (/* binding */ getAdminSpecialistCards), /* harmony export */ st: () => (/* binding */ getMyReferralInfo), /* harmony export */ td: () => (/* binding */ updatePlan), /* harmony export */ ts: () => (/* binding */ createOffer), /* harmony export */ u0: () => (/* binding */ setSupportTicketStatus), /* harmony export */ u4: () => (/* binding */ getAdminMailStats), /* harmony export */ uQ: () => (/* binding */ verifyAdminUserEmail), /* harmony export */ v9: () => (/* binding */ getUserReviews), /* harmony export */ vD: () => (/* binding */ createPriceListGroup), /* harmony export */ vh: () => (/* binding */ getTaskStats), /* harmony export */ vy: () => (/* binding */ getAdminUserSpecialistCards), /* harmony export */ wc: () => (/* binding */ translateAdminEmailTemplate), /* harmony export */ wl: () => (/* binding */ updateAdminUser), /* harmony export */ yJ: () => (/* binding */ createLocation), /* harmony export */ yO: () => (/* binding */ getAdminActivityLogs), /* harmony export */ yk: () => (/* binding */ dismissNotification), /* harmony export */ z4: () => (/* binding */ getDailyUsage), /* harmony export */ z5: () => (/* binding */ getAdminReports), /* harmony export */ z6: () => (/* binding */ getMyStatuses), /* harmony export */ zB: () => (/* binding */ deletePortfolioItem), /* harmony export */ zR: () => (/* binding */ deleteLocation), /* harmony export */ zZ: () => (/* binding */ createCategory), /* harmony export */ zc: () => (/* binding */ updateSpecialistCard), /* harmony export */ zk: () => (/* binding */ getSpecialistFomoDashboard) /* harmony export */ }); /* unused harmony exports getTasks, getTaskBudgetRange, searchTasks, getTasksForSpecialist, getTaskCountsByCategory, cancelTask, updateNotifSettings, getFavorites, addFavorite, removeFavorite, getTranslationsMissing, saveTranslations, getMyPortfolio, addPortfolioItem, getSpecialistPortfolio, saveSiteSeo, updatePriceListItem, getFomoRecommendations, getAutoMatchResults, getGoogleCalendarStatus, disconnectGoogleCalendar, importFromGoogleCalendar, getGoogleCalendarConnectUrl, getMySupportTickets */ webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSource[j// SSR: use INTERNAL_API_URL (http://localhost:4000) to avoid external DNS/SSL round-trip // Browser: use NEXT_PUBLIC_API_URL (https://api.canhelp.gr) const BASE = "undefined" === 'undefined' ? process.env.INTERNAL_API_URL || 'http://localhost:4000' : process.env.NEXT_PUBLIC_API_URL || 'http://localhost:4000'; export async function request(path, init) { const url = `${BASE}/api${path}`; if ("undefined" === 'undefined') console.log('[api] SSR fetch', url); const res = await fetch(url, { ...init, credentials: 'include', headers: { 'Content-Type': 'application/json', ...init?.headers } }); if (!res.ok) { const err = await res.json().catch(()=>({ error: res.statusText })); const msg = typeof err.error === 'string' ? err.error : typeof err.message === 'string' ? err.message : res.statusText || 'Request failed'; throw new Error(msg); } return res.json(); } // ─── Tasks ──────────────────────────────────────────────────────────────── export const getTasks = (params)=>{ const qs = params ? '?' + new URLSearchParams(params) : ''; return request(`/tasks${qs}`); }; export const getTaskBudgetRange = (params)=>{ const qs = params ? '?' + new URLSearchParams(params) : ''; return request(`/tasks/budget-range${qs}`); }; export const searchTasks = (params)=>request(`/tasks/search?${new URLSearchParams(params)}`); export const getMyTasks = ()=>request('/tasks/my'); export const getTasksForSpecialist = (params)=>{ const qs = params ? '?' + new URLSearchParams(params) : ''; return request(`/tasks/for-me${qs}`); }; export const getTaskCountsByCategory = ()=>request('/tasks/counts-by-category'); export const getTask = (id)=>request(`/tasks/${id}`); export const createTask = (data)=>request('/tasks', { method: 'POST', body: JSON.stringify(data) }); export const updateTask = (id, data)=>request(`/tasks/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); export const completeTask = (id)=>request(`/tasks/${id}/complete`, { method: 'PATCH' }); export const cancelTask = (id)=>request(`/tasks/${id}/cancel`, { method: 'PATCH' }); // ─── Offers ──────────────────────────────────────────────────────────────── export const getOffers = (taskId)=>request(`/offers?taskId=${taskId}`); export const getMyOffers = ()=>request('/offers/my'); export const createOffer = (data)=>request('/offers', { method: 'POST', body: JSON.stringify(data) }); export const acceptOffer = (id)=>request(`/offers/${id}/accept`, { method: 'PATCH' }); export const declineOffer = (id)=>request(`/offers/${id}/decline`, { method: 'PATCH' }); export const getUserProfile = (id, locale)=>request(`/users/${id}/profile${locale ? `?locale=${encodeURIComponent(locale)}` : ''}`); export const getSpecialists = (params)=>{ const qs = params ? '?' + new URLSearchParams(params) : ''; return request(`/users/specialists${qs}`); }; export const createReview = (data)=>request('/reviews', { method: 'POST', body: JSON.stringify(data) }); export const getTaskReviews = (taskId)=>request(`/reviews/task/${taskId}`); export const getMyReviews = ()=>request('/reviews/my'); // ─── Chat ────────────────────────────────────────────────────────────────── export const getChatRooms = ()=>request('/chat/rooms'); export const getOrCreateDirectRoom = (userId)=>request(`/chat/direct/${userId}`); export const getCanMessage = (userId)=>request(`/chat/can-message/${userId}`); export const getMessages = (roomId)=>request(`/chat/rooms/${roomId}/messages`); export const sendMessage = (roomId, body)=>request('/chat/messages', { method: 'POST', body: JSON.stringify({ roomId, body }) }); // ─── Notifications ──────────────────────────────────────────────────────── export const updateNotifSettings = (data)=>request('/users/me', { method: 'PATCH', body: JSON.stringify(data) }); export const getNotifications = ()=>request('/notifications'); export const getUnreadCount = ()=>request('/notifications/count'); export const markRead = (id)=>request(`/notifications/${id}/read`, { method: 'PATCH' }); export const markAllRead = ()=>request('/notifications/read-all', { method: 'PATCH' }); export const getTaskInvite = (taskId)=>request(`/notifications?type=task_invite&referenceId=${taskId}`); export const dismissNotification = (id)=>request(`/notifications/${id}`, { method: 'DELETE' }); // ─── Referral ───────────────────────────────────────────────────────────── export const getMyReferralInfo = ()=>request('/users/me/referral'); export const applyMyReferral = (refCode)=>request('/users/me/referral/apply', { method: 'POST', body: JSON.stringify({ refCode }) }); // ─── Reviews ────────────────────────────────────────────────────────────── export const getUserReviews = (userId)=>request(`/reviews/user/${userId}`); export const getUserRating = (userId)=>request(`/reviews/user/${userId}/rating`); // ─── Categories ─────────────────────────────────────────────────────────── export const getCategories = ()=>request('/categories'); // ─── Locations ──────────────────────────────────────────────────────────── export const getLocations = ()=>request('/locations'); // ─── Favorites ──────────────────────────────────────────────────────────── export const getFavorites = ()=>request('/favorites'); export const addFavorite = (taskId)=>request(`/favorites/${taskId}`, { method: 'POST' }); export const removeFavorite = (taskId)=>request(`/favorites/${taskId}`, { method: 'DELETE' }); export const getSpecialistFavorites = ()=>request('/favorites/specialists'); export const addSpecialistFavorite = (specialistId)=>request(`/favorites/specialists/${specialistId}`, { method: 'POST' }); export const removeSpecialistFavorite = (specialistId)=>request(`/favorites/specialists/${specialistId}`, { method: 'DELETE' }); // ─── Admin ───────────────────────────────────────────────────────────────── // ─── Admin Categories ────────────────────────────────────────────────────── export const getAdminCategories = ()=>request('/admin/categories'); export const createCategory = (data)=>request('/admin/categories', { method: 'POST', body: JSON.stringify(data) }); export const updateCategory = (id, data)=>request(`/admin/categories/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); export const deleteCategory = (id)=>request(`/admin/categories/${id}`, { method: 'DELETE' }); // ─── Admin Skills ────────────────────────────────────────────────────────── export const getAdminSkills = (categorySlug)=>request(`/admin/skills?categorySlug=${encodeURIComponent(categorySlug)}`); export const createSkill = (data)=>request('/admin/skills', { method: 'POST', body: JSON.stringify(data) }); export const updateSkill = (id, data)=>request(`/admin/skills/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); export const deleteSkill = (id)=>request(`/admin/skills/${id}`, { method: 'DELETE' }); export const getSkillDedup = (categorySlug)=>request(`/admin/skills/dedup${categorySlug ? `?categorySlug=${encodeURIComponent(categorySlug)}` : ''}`); export const mergeSkillDuplicates = (keepId, deleteIds)=>request('/admin/skills/dedup/merge', { method: 'POST', body: JSON.stringify({ keepId, deleteIds }) }); // ─── Admin ───────────────────────────────────────────────────────────────── export const getAdminStats = ()=>request('/admin/stats'); export const getAdminUsers = (page = 1, q, role)=>{ const p = new URLSearchParams({ page: String(page), limit: '20' }); if (q) p.set('q', q); if (role) p.set('role', role); return request(`/admin/users?${p}`); }; export const deactivateUser = (id)=>request(`/admin/users/${id}/deactivate`, { method: 'PATCH' }); export const activateUser = (id)=>request(`/admin/users/${id}/activate`, { method: 'PATCH' }); export const changeUserRole = (id, role)=>request(`/admin/users/${id}/role`, { method: 'PATCH', body: JSON.stringify({ role }) }); export const getAdminUser = (id)=>request(`/admin/users/${id}`); export const getAdminUserSpecialistCards = (userId)=>request(`/admin/users/${userId}/specialist-cards`); export const adminUpdateSpecialistCard = (id, data)=>request(`/admin/specialist-cards/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); export const getAdminSpecialistCards = (page = 1, status)=>{ const p = new URLSearchParams({ page: String(page), limit: '20' }); if (status && status !== 'all') p.set('status', status); return request(`/admin/specialist-cards?${p}`); }; export const updateAdminUser = (id, data)=>request(`/admin/users/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); export const verifyAdminUserEmail = (id)=>request(`/admin/users/${id}/verify-email`, { method: 'PATCH' }); export const getAdminTasks = (page = 1, q, status)=>{ const p = new URLSearchParams({ page: String(page), limit: '20' }); if (q) p.set('q', q); if (status) p.set('status', status); return request(`/admin/tasks?${p}`); }; export const cancelTaskAdmin = (id)=>request(`/admin/tasks/${id}/cancel`, { method: 'PATCH' }); export const deleteTaskAdmin = (id)=>request(`/admin/tasks/${id}`, { method: 'DELETE' }); export const getAdminReports = (page = 1, status)=>{ const p = new URLSearchParams({ page: String(page), limit: '20' }); if (status && status !== 'all') p.set('status', status); return request(`/admin/reports?${p}`); }; export const updateReportStatus = (id, status)=>request(`/admin/reports/${id}/status`, { method: 'PATCH', body: JSON.stringify({ status }) }); export const getAdminAiLogs = (page = 1)=>request(`/admin/ai-logs?page=${page}&limit=50`); export const getAdminActivityLogs = (params = {})=>{ const p = new URLSearchParams(); if (params.page) p.set('page', String(params.page)); if (params.event) p.set('event', params.event); if (params.userId) p.set('userId', params.userId); if (params.dateFrom) p.set('dateFrom', params.dateFrom); if (params.dateTo) p.set('dateTo', params.dateTo); p.set('limit', '50'); return request(`/admin/activity-logs?${p}`); }; export const getAdminMailLogs = (params = {})=>{ const p = new URLSearchParams(); if (params.page) p.set('page', String(params.page)); if (params.event) p.set('event', params.event); if (params.dateFrom) p.set('dateFrom', params.dateFrom); if (params.dateTo) p.set('dateTo', params.dateTo); p.set('limit', '50'); return request(`/admin/mail-logs?${p}`); }; export const getAdminNotifLogs = (params = {})=>{ const p = new URLSearchParams(); if (params.page) p.set('page', String(params.page)); if (params.type) p.set('type', params.type); if (params.dateFrom) p.set('dateFrom', params.dateFrom); if (params.dateTo) p.set('dateTo', params.dateTo); p.set('limit', '50'); return request(`/admin/notification-logs?${p}`); }; export const getAdminNotifStats = ()=>request('/admin/notification-stats'); export const getAdminMailStats = ()=>request('/admin/mail-stats'); export const getAdminReferrals = ()=>request('/admin/referrals'); export const adminSendPushToUser = (userId, data)=>request(`/admin/push/user/${userId}`, { method: 'POST', body: JSON.stringify(data) }); export const adminBroadcastPush = (data)=>request('/admin/push/broadcast', { method: 'POST', body: JSON.stringify(data) }); // ─── Admin Locations ─────────────────────────────────────────────────────── export const getAdminLocations = ()=>request('/admin/locations'); export const createLocation = (data)=>request('/admin/locations', { method: 'POST', body: JSON.stringify(data) }); export const updateLocation = (id, data)=>request(`/admin/locations/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); export const deleteLocation = (id)=>request(`/admin/locations/${id}`, { method: 'DELETE' }); // ─── Admin Plans ─────────────────────────────────────────────────────────── export const getAdminPlans = ()=>request('/admin/plans'); export const createPlan = (data)=>request('/admin/plans', { method: 'POST', body: JSON.stringify(data) }); export const updatePlan = (id, data)=>request(`/admin/plans/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); export const deletePlan = (id)=>request(`/admin/plans/${id}`, { method: 'DELETE' }); // ─── Admin Settings ──────────────────────────────────────────────────────── export const getAdminSettings = ()=>request('/admin/settings'); export const updateAdminSettings = (data)=>request('/admin/settings', { method: 'PUT', body: JSON.stringify(data) }); export const getAdminEmailTemplates = ()=>request('/admin/settings/templates'); export const updateAdminEmailTemplate = (key, data)=>request(`/admin/settings/templates/${key}`, { method: 'PUT', body: JSON.stringify(data) }); export const translateAdminEmailTemplate = (data)=>request('/admin/settings/templates/translate', { method: 'POST', body: JSON.stringify(data) }); export const sendTestEmail = ()=>request('/admin/settings/test-email', { method: 'POST' }); export const testTelegramConnection = (botToken, chatId)=>fetch(`${BASE}/api/admin/settings/test-telegram`, { method: 'POST', credentials: 'include', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ botToken, chatId }) }).then((r)=>r.json()); export const verifyTelegramToken = (botToken)=>fetch(`${BASE}/api/admin/settings/verify-telegram-token`, { method: 'POST', credentials: 'include', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ botToken }) }).then((r)=>r.json()); export const getTranslationsStats = ()=>request('/admin/translations/stats'); export const getTranslationsMissing = (table, missingLang, page = 1, limit = 50)=>request(`/admin/translations/${table}?missingLang=${missingLang}&page=${page}&limit=${limit}`); export const saveTranslations = (table, items)=>request(`/admin/translations/${table}/save`, { method: 'POST', body: JSON.stringify({ items }) }); export const autoTranslate = (table, missingLang, fromLang, batchSize = 500)=>request('/admin/translations/auto-translate', { method: 'POST', body: JSON.stringify({ table, missingLang, fromLang, batchSize }) }); export const autoTranslateTasks = (batchSize = 500)=>request('/admin/translations/auto-translate-tasks', { method: 'POST', body: JSON.stringify({ batchSize }) }); export const getTasksTranslationPreview = (lang, limit = 50)=>request(`/admin/translations/tasks-preview?lang=${lang}&limit=${limit}`); export const autoTranslateEmailTemplates = (missingLang, fromLang = 'el')=>request('/admin/translations/auto-translate-templates', { method: 'POST', body: JSON.stringify({ missingLang, fromLang }) }); // ─── Availability ────────────────────────────────────────────────────────── export const getMyAvailability = (month)=>request(`/availability/my${month ? `?month=${month}` : ''}`); export const setAvailability = (date, status, note)=>request('/availability/set', { method: 'POST', body: JSON.stringify({ date, status, note }) }); export const setAvailabilityRange = (from, to, status)=>request('/availability/set-range', { method: 'POST', body: JSON.stringify({ from, to, status }) }); export const getSpecialistAvailability = (userId, month)=>request(`/availability/user/${userId}${month ? `?month=${month}` : ''}`); export const getMyPortfolio = ()=>request('/portfolio/my'); export const addPortfolioItem = (formData)=>fetch(`${BASE}/api/portfolio`, { method: 'POST', credentials: 'include', body: formData }).then(async (res)=>{ if (!res.ok) { const err = await res.json().catch(()=>({ error: res.statusText })); throw new Error(err.error || 'Upload failed'); } return res.json(); }); export const updatePortfolioItem = (id, data)=>request(`/portfolio/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); export const deletePortfolioItem = (id)=>request(`/portfolio/${id}`, { method: 'DELETE' }); export const getSpecialistPortfolio = (userId)=>request(`/portfolio/user/${userId}`); export const getMySpecialistCards = ()=>request('/specialist-cards/my'); export const createSpecialistCard = (data)=>request('/specialist-cards', { method: 'POST', body: JSON.stringify(data) }); export const updateSpecialistCard = (id, data)=>request(`/specialist-cards/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); export const saveSiteSeo = (data)=>request('/users/me/site-seo', { method: 'POST', body: JSON.stringify(data) }); export const deleteSpecialistCard = (id)=>request(`/specialist-cards/${id}`, { method: 'DELETE' }); export const getSpecialistCards = (userId, locale)=>request(`/specialist-cards/user/${userId}${locale ? `?locale=${encodeURIComponent(locale)}` : ''}`); export const getPriceList = (cardId, locale)=>request(`/price-list/${cardId}${locale ? `?locale=${encodeURIComponent(locale)}` : ''}`); export const createPriceListGroup = (cardId, data)=>request(`/price-list/${cardId}/groups`, { method: 'POST', body: JSON.stringify(data) }); export const updatePriceListGroup = (groupId, data)=>request(`/price-list/groups/${groupId}`, { method: 'PATCH', body: JSON.stringify(data) }); export const deletePriceListGroup = (groupId)=>request(`/price-list/groups/${groupId}`, { method: 'DELETE' }); export const createPriceListItem = (groupId, data)=>request(`/price-list/groups/${groupId}/items`, { method: 'POST', body: JSON.stringify(data) }); export const updatePriceListItem = (itemId, data)=>request(`/price-list/items/${itemId}`, { method: 'PATCH', body: JSON.stringify(data) }); export const deletePriceListItem = (itemId)=>request(`/price-list/items/${itemId}`, { method: 'DELETE' }); export const getSkillSuggestions = (categorySlugs)=>{ const params = categorySlugs?.length ? '?' + categorySlugs.map((s)=>`category=${encodeURIComponent(s)}`).join('&') : ''; return request(`/skill-suggestions${params}`); }; export const initiateTopUp = (amount)=>request('/payments/topup/init', { method: 'POST', body: JSON.stringify({ amount }) }); export const getPaymentHistory = ()=>request('/payments/history'); export const getBalanceHistory = (limit = 50)=>request(`/payments/balance-history?limit=${limit}`); export const getPlanHistory = (limit = 50)=>request(`/users/me/plan-history?limit=${limit}`); export const getAdminBalanceHistory = (params = {})=>{ const p = new URLSearchParams(); if (params.page) p.set('page', String(params.page)); if (params.userId) p.set('userId', params.userId); if (params.kind) p.set('kind', params.kind); p.set('limit', '50'); return request(`/admin/balance-history?${p}`); }; export const adminTopUpUserBalance = (id, data)=>request(`/admin/users/${id}/balance/topup`, { method: 'POST', body: JSON.stringify(data) }); export const adminWithdrawUserBalance = (id, data)=>request(`/admin/users/${id}/balance/withdraw`, { method: 'POST', body: JSON.stringify(data) }); export const previewPlanChange = (planId)=>request('/payments/plan/preview', { method: 'POST', body: JSON.stringify({ planId }) }); export const getPlans = (role)=>{ const qs = role ? `?role=${role}` : ''; return request(`/plans${qs}`); }; export const getMyDashboard = ()=>request('/dashboard/me'); export const getDailyUsage = ()=>request('/plans/daily-usage'); export const purchasePlan = (planId, payFromBalance = true)=>request('/payments/plan/purchase', { method: 'POST', body: JSON.stringify({ planId, payFromBalance }) }); // ─── Statuses ────────────────────────────────────────────────────────────── export const getMyStatuses = ()=>request('/statuses/me'); export const toggleStatus = (statusType, active)=>request('/statuses/toggle', { method: 'POST', body: JSON.stringify({ statusType, active }) }); export const getAutoResponseSettings = ()=>request('/auto-response'); export const updateAutoResponseSettings = (data)=>request('/auto-response', { method: 'PUT', body: JSON.stringify(data) }); // ─── FOMO ────────────────────────────────────────────────────────────────── export const getSpecialistFomoDashboard = ()=>request('/fomo/specialist'); export const getCustomerFomoDashboard = ()=>request('/fomo/customer'); export const getFomoRecommendations = ()=>request('/fomo/recommendations'); // ─── Auto-match ──────────────────────────────────────────────────────────── export const getAutoMatchResults = (taskId)=>request(`/auto-match/${taskId}`); export const runAutoMatch = (taskId)=>request(`/auto-match/${taskId}`, { method: 'POST' }); // ─── Google Calendar ─────────────────────────────────────────────────────── export const getGoogleCalendarStatus = ()=>request('/google/calendar/status'); export const disconnectGoogleCalendar = ()=>request('/google/calendar/disconnect', { method: 'DELETE' }); export const importFromGoogleCalendar = ()=>request('/google/calendar/import', { method: 'POST' }); export const getGoogleCalendarConnectUrl = ()=>`${BASE}/api/google/calendar/connect`; // ─── Personal site ───────────────────────────────────────────────────────── export const getPublicSiteProfile = (slug)=>request(`/users/site/${slug}`); export const getSiteStats = ()=>request('/users/me/site-stats'); export const trackSiteMessage = (slug)=>request(`/users/site/${slug}/track-message`, { method: 'POST' }).catch(()=>{}); // ─── Task stats (FOMO) ───────────────────────────────────────────────────── export const getTaskStats = (taskId)=>request(`/tasks/${taskId}/stats`); // ─── Support tickets ─────────────────────────────────────────────────────── export const sendPublicSupportMessage = (data)=>request('/support/public', { method: 'POST', body: JSON.stringify(data) }); export const createSupportTicket = (data)=>request('/support', { method: 'POST', body: JSON.stringify(data) }); export const getMySupportTickets = (page = 1)=>request(`/support/my?page=${page}`); export const getAdminSupportTickets = (params)=>request(`/support${params ? '?' + new URLSearchParams(params) : ''}`); export const replyToSupportTicket = (id, data)=>request(`/support/${id}/reply`, { method: 'PATCH', body: JSON.stringify(data) }); export const setSupportTicketStatus = (id, status)=>request(`/support/${id}/status`, { method: 'PATCH', body: JSON.stringify({ status }) }); _58>5;`fy) _/ q w " ( o u  [ a 4:_MSY_|/5QW _!MSZ`TZw}  _ /!5!p!v!!!}""##$$$$%%%&c&i&_'e'((q(w(1*7*++9-_?----- ....////P0V0001111S2Y2223333W4]44_4L5R555[6a67799V9\9::::;;<<6=<=>>>>??@@A_%A[AaAC CCCCDUD[DDD,E2EEEKFQFFFTGZGGG}HH!I'IIIDJ_JJJJ[KaKDLJLLL-M3MMMMM (/* binding */ updateCategory), /* harmony export */ $H: () => (/* binding */ acceptOffer), /* harmony export */ $M: () => (/* binding */ getUnreadCount), /* harmony export */ Bb: () => (/* binding */ getMySpecialistCards), /* harmony export */ Bm: () => (/* binding */ getUserRating), /* harmony export */ Bq: () => (/* binding */ getSpecialistCards), /* harmony export */ Br: () => (/* binding */ getAdminNotifLogs), /* harmony export */ C0: () => (/* binding */ applyMyReferral), /* harmony export */ CX: () => (/* binding */ updateAdminSettings), /* harmony export */ Ck: () => (/* binding */ getPriceList), /* harmony export */ Cs: () => (/* binding */ previewPlanChange), /* harmony export */ D1: () => (/* binding */ setAvailabilityRange), /* harmony export */ Em: () => (/* binding */ request), /* harmony export */ F7: () => (/* binding */ getSpecialists), /* harmony export */ F9: () => (/* binding */ getTaskInvite), /* harmony export */ FI: () => (/* binding */ sendTestEmail), /* harmony export */ Fu: () => (/* binding */ getMyTasks), /* harmony export */ GB: () => (/* binding */ deleteTaskAdmin), /* harmony export */ GE: () => (/* binding */ getSkillDedup), /* harmony export */ Gp: () => (/* binding */ getAutoResponseSettings), /* harmony export */ H: () => (/* binding */ getMyDashboard), /* harmony export */ H6: () => (/* binding */ getTaskReviews), /* harmony export */ He: () => (/* binding */ activateUser), /* harmony export */ I: () => (/* binding */ autoTranslateTasks), /* harmony export */ Ic: () => (/* binding */ deletePriceListGroup), /* harmony export */ Ip: () => (/* binding */ markRead), /* harmony export */ Je: () => (/* binding */ purchasePlan), /* harmony export */ K7: () => (/* binding */ deleteCategory), /* harmony export */ KD: () => (/* binding */ getAdminCategories), /* harmony export */ KZ: () => (/* binding */ getAdminSupportTickets), /* harmony export */ Lb: () => (/* binding */ declineOffer), /* harmony export */ Lp: () => (/* binding */ getAdminEmailTemplates), /* harmony export */ ML: () => (/* binding */ getCustomerFomoDashboard), /* harmony export */ Mm: () => (/* binding */ changeUserRole), /* harmony export */ NL: () => (/* binding */ markAllRead), /* harmony export */ Nt: () => (/* binding */ updateLocation), /* harmony export */ O8: () => (/* binding */ sendPublicSupportMessage), /* harmony export */ OM: () => (/* binding */ setAvailability), /* harmony export */ OV: () => (/* binding */ runAutoMatch), /* harmony export */ OX: () => (/* binding */ getAdminPlans), /* harmony export */ On: () => (/* binding */ getCanMessage), /* harmony export */ P0: () => (/* binding */ adminTopUpUserBalance), /* harmony export */ QN: () => (/* binding */ getOrCreateDirectRoom), /* harmony export */ QY: () => (/* binding */ getTasksTranslationPreview), /* harmony export */ RN: () => (/* binding */ getSiteStats), /* harmony export */ RQ: () => (/* binding */ updateAutoResponseSettings), /* harmony export */ Rt: () => (/* binding */ completeTask), /* harmony export */ S$: () => (/* binding */ getPublicSiteProfile), /* harmony export */ S9: () => (/* binding */ createSkill), /* harmony export */ Sw: () => (/* binding */ getOffers), /* harmony export */ T9: () => (/* binding */ getPlans), /* harmony export */ Tr: () => (/* binding */ getNotifications), /* harmony export */ U9: () => (/* binding */ deletePriceListItem), /* harmony export */ UE: () => (/* binding */ trackSiteMessage), /* harmony export */ UT: () => (/* binding */ createTask), /* harmony export */ Uq: () => (/* binding */ mergeSkillDuplicates), /* harmony export */ V: () => (/* binding */ addSpecialistFavorite), /* harmony export */ V7: () => (/* binding */ adminBroadcastPush), /* harmony export */ VL: () => (/* binding */ getMessages), /* harmony export */ VM: () => (/* binding */ getUserProfile), /* harmony export */ Vs: () => (/* binding */ getLocations), /* harmony export */ Wi: () => (/* binding */ deactivateUser), /* harmony export */ Xz: () => (/* binding */ getSpecialistAvailability), /* harmony export */ YQ: () => (/* binding */ getTranslationsStats), /* harmony export */ Yj: () => (/* binding */ getAdminTasks), /* harmony export */ Z2: () => (/* binding */ createPriceListItem), /* harmony export */ Zp: () => (/* binding */ getChatRooms), /* harmony export */ _z: () => (/* binding */ sendMessage), /* harmony export */ aT: () => (/* binding */ getMyOffers), /* harmony export */ bR: () => (/* binding */ deletePlan), /* harmony export */ bW: () => (/* binding */ getCategories), /* harmony export */ bc: () => (/* binding */ toggleStatus), /* harmony export */ bi: () => (/* binding */ getAdminNotifStats), /* harmony export */ bx: () => (/* binding */ createReview), /* harmony export */ cJ: () => (/* binding */ getAdminReferrals), /* harmony export */ cS: () => (/* binding */ getAdminUsers), /* harmony export */ cl: () => (/* binding */ verifyTelegramToken), /* harmony export */ cp: () => (/* binding */ autoTranslate), /* harmony export */ dE: () => (/* binding */ getAdminStats), /* harmony export */ eR: () => (/* binding */ createSpecialistCard), /* harmony export */ eU: () => (/* binding */ updateReportStatus), /* harmony export */ ew: () => (/* binding */ getPlanHistory), /* harmony export */ f5: () => (/* binding */ deleteSpecialistCard), /* harmony export */ fP: () => (/* binding */ updateSkill), /* harmony export */ fm: () => (/* binding */ getBalanceHistory), /* harmony export */ fu: () => (/* binding */ autoTranslateEmailTemplates), /* harmony export */ g0: () => (/* binding */ getAdminBalanceHistory), /* harmony export */ g1: () => (/* binding */ adminSendPushToUser), /* harmony export */ gg: () => (/* binding */ getTask), /* harmony export */ hD: () => (/* binding */ adminWithdrawUserBalance), /* harmony export */ hl: () => (/* binding */ updatePortfolioItem), /* harmony export */ hp: () => (/* binding */ deleteSkill), /* harmony export */ iN: () => (/* binding */ getMyAvailability), /* harmony export */ i_: () => (/* binding */ getAdminSkills), /* harmony export */ j_: () => (/* binding */ getAdminAiLogs), /* harmony export */ jd: () => (/* binding */ getAdminUser), /* harmony export */ jg: () => (/* binding */ updateAdminEmailTemplate), /* harmony export */ k_: () => (/* binding */ getAdminLocations), /* harmony export */ lC: () => (/* binding */ updateTask), /* harmony export */ mq: () => (/* binding */ createSupportTicket), /* harmony export */ nT: () => (/* binding */ replyToSupportTicket), /* harmony export */ nf: () => (/* binding */ cancelTaskAdmin), /* harmony export */ oD: () => (/* binding */ updatePriceListGroup), /* harmony export */ oh: () => (/* binding */ initiateTopUp), /* harmony export */ oq: () => (/* binding */ adminUpdateSpecialistCard), /* harmony export */ pD: () => (/* binding */ getSpecialistFavorites), /* harmony export */ pK: () => (/* binding */ getPaymentHistory), /* harmony export */ q7: () => (/* binding */ getMyReviews), /* harmony export */ qT: () => (/* binding */ createPlan), /* harmony export */ qX: () => (/* binding */ testTelegramConnection), /* harmony export */ qt: () => (/* binding */ getAdminMailLogs), /* harmony export */ rC: () => (/* binding */ getAdminSettings), /* harmony export */ rl: () => (/* binding */ getSkillSuggestions), /* harmony export */ sD: () => (/* binding */ removeSpecialistFavorite), /* harmony export */ s_: () => (/* binding */ getAdminSpecialistCards), /* harmony export */ st: () => (/* binding */ getMyReferralInfo), /* harmony export */ td: () => (/* binding */ updatePlan), /* harmony export */ ts: () => (/* binding */ createOffer), /* harmony export */ u0: () => (/* binding */ setSupportTicketStatus), /* harmony export */ u4: () => (/* binding */ getAdminMailStats), /* harmony export */ uQ: () => (/* binding */ verifyAdminUserEmail), /* harmony export */ v9: () => (/* binding */ getUserReviews), /* harmony export */ vD: () => (/* binding */ createPriceListGroup), /* harmony export */ vh: () => (/* binding */ getTaskStats), /* harmony export */ vy: () => (/* binding */ getAdminUserSpecialistCards), /* harmony export */ wc: () => (/* binding */ translateAdminEmailTemplate), /* harmony export */ wl: () => (/* binding */ updateAdminUser), /* harmony export */ yJ: () => (/* binding */ createLocation), /* harmony export */ yO: () => (/* binding */ getAdminActivityLogs), /* harmony export */ yk: () => (/* binding */ dismissNotification), /* harmony export */ z4: () => (/* binding */ getDailyUsage), /* harmony export */ z5: () => (/* binding */ getAdminReports), /* harmony export */ z6: () => (/* binding */ getMyStatuses), /* harmony export */ zB: () => (/* binding */ deletePortfolioItem), /* harmony export */ zR: () => (/* binding */ deleteLocation), /* harmony export */ zZ: () => (/* binding */ createCategory), /* harmony export */ zc: () => (/* binding */ updateSpecialistCard), /* harmony export */ zk: () => (/* binding */ getSpecialistFomoDashboard) /* harmony export */ }); /* unused harmony exports getTasks, getTaskBudgetRange, searchTasks, getTasksForSpecialist, getTaskCountsByCategory, cancelTask, updateNotifSettings, getFavorites, addFavorite, removeFavorite, getTranslationsMissing, saveTranslations, getMyPortfolio, addPortfolioItem, getSpecialistPortfolio, saveSiteSeo, updatePriceListItem, getFomoRecommendations, getAutoMatchResults, getGoogleCalendarStatus, disconnectGoogleCalendar, importFromGoogleCalendar, getGoogleCalendarConnectUrl, getMySupportTickets */ // SSR: use INTERNAL_API_URL (http://localhost:4000) to avoid external DNS/SSL round-trip // Browser: use NEXT_PUBLIC_API_URL (https://api.canhelp.gr) const BASE = true ? process.env.INTERNAL_API_URL || 'http://localhost:4000' : 0; async function request(path, init) { const url = `${BASE}/api${path}`; if (true) console.log('[api] SSR fetch', url); const res = await fetch(url, { ...init, credentials: 'include', headers: { 'Content-Type': 'application/json', ...init?.headers } }); if (!res.ok) { const err = await res.json().catch(()=>({ error: res.statusText })); const msg = typeof err.error === 'string' ? err.error : typeof err.message === 'string' ? err.message : res.statusText || 'Request failed'; throw new Error(msg); } return res.json(); } // ─── Tasks ──────────────────────────────────────────────────────────────── const getTasks = (params)=>{ const qs = params ? '?' + new URLSearchParams(params) : ''; return request(`/tasks${qs}`); }; const getTaskBudgetRange = (params)=>{ const qs = params ? '?' + new URLSearchParams(params) : ''; return request(`/tasks/budget-range${qs}`); }; const searchTasks = (params)=>request(`/tasks/search?${new URLSearchParams(params)}`); const getMyTasks = ()=>request('/tasks/my'); const getTasksForSpecialist = (params)=>{ const qs = params ? '?' + new URLSearchParams(params) : ''; return request(`/tasks/for-me${qs}`); }; const getTaskCountsByCategory = ()=>request('/tasks/counts-by-category'); const getTask = (id)=>request(`/tasks/${id}`); const createTask = (data)=>request('/tasks', { method: 'POST', body: JSON.stringify(data) }); const updateTask = (id, data)=>request(`/tasks/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); const completeTask = (id)=>request(`/tasks/${id}/complete`, { method: 'PATCH' }); const cancelTask = (id)=>request(`/tasks/${id}/cancel`, { method: 'PATCH' }); // ─── Offers ──────────────────────────────────────────────────────────────── const getOffers = (taskId)=>request(`/offers?taskId=${taskId}`); const getMyOffers = ()=>request('/offers/my'); const createOffer = (data)=>request('/offers', { method: 'POST', body: JSON.stringify(data) }); const acceptOffer = (id)=>request(`/offers/${id}/accept`, { method: 'PATCH' }); const declineOffer = (id)=>request(`/offers/${id}/decline`, { method: 'PATCH' }); const getUserProfile = (id, locale)=>request(`/users/${id}/profile${locale ? `?locale=${encodeURIComponent(locale)}` : ''}`); const getSpecialists = (params)=>{ const qs = params ? '?' + new URLSearchParams(params) : ''; return request(`/users/specialists${qs}`); }; const createReview = (data)=>request('/reviews', { method: 'POST', body: JSON.stringify(data) }); const getTaskReviews = (taskId)=>request(`/reviews/task/${taskId}`); const getMyReviews = ()=>request('/reviews/my'); // ─── Chat ────────────────────────────────────────────────────────────────── const getChatRooms = ()=>request('/chat/rooms'); const getOrCreateDirectRoom = (userId)=>request(`/chat/direct/${userId}`); const getCanMessage = (userId)=>request(`/chat/can-message/${userId}`); const getMessages = (roomId)=>request(`/chat/rooms/${roomId}/messages`); const sendMessage = (roomId, body)=>request('/chat/messages', { method: 'POST', body: JSON.stringify({ roomId, body }) }); // ─── Notifications ──────────────────────────────────────────────────────── const updateNotifSettings = (data)=>request('/users/me', { method: 'PATCH', body: JSON.stringify(data) }); const getNotifications = ()=>request('/notifications'); const getUnreadCount = ()=>request('/notifications/count'); const markRead = (id)=>request(`/notifications/${id}/read`, { method: 'PATCH' }); const markAllRead = ()=>request('/notifications/read-all', { method: 'PATCH' }); const getTaskInvite = (taskId)=>request(`/notifications?type=task_invite&referenceId=${taskId}`); const dismissNotification = (id)=>request(`/notifications/${id}`, { method: 'DELETE' }); // ─── Referral ───────────────────────────────────────────────────────────── const getMyReferralInfo = ()=>request('/users/me/referral'); const applyMyReferral = (refCode)=>request('/users/me/referral/apply', { method: 'POST', body: JSON.stringify({ refCode }) }); // ─── Reviews ────────────────────────────────────────────────────────────── const getUserReviews = (userId)=>request(`/reviews/user/${userId}`); const getUserRating = (userId)=>request(`/reviews/user/${userId}/rating`); // ─── Categories ─────────────────────────────────────────────────────────── const getCategories = ()=>request('/categories'); // ─── Locations ──────────────────────────────────────────────────────────── const getLocations = ()=>request('/locations'); // ─── Favorites ──────────────────────────────────────────────────────────── const getFavorites = ()=>request('/favorites'); const addFavorite = (taskId)=>request(`/favorites/${taskId}`, { method: 'POST' }); const removeFavorite = (taskId)=>request(`/favorites/${taskId}`, { method: 'DELETE' }); const getSpecialistFavorites = ()=>request('/favorites/specialists'); const addSpecialistFavorite = (specialistId)=>request(`/favorites/specialists/${specialistId}`, { method: 'POST' }); const removeSpecialistFavorite = (specialistId)=>request(`/favorites/specialists/${specialistId}`, { method: 'DELETE' }); // ─── Admin ───────────────────────────────────────────────────────────────── // ─── Admin Categories ────────────────────────────────────────────────────── const getAdminCategories = ()=>request('/admin/categories'); const createCategory = (data)=>request('/admin/categories', { method: 'POST', body: JSON.stringify(data) }); const updateCategory = (id, data)=>request(`/admin/categories/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); const deleteCategory = (id)=>request(`/admin/categories/${id}`, { method: 'DELETE' }); // ─── Admin Skills ────────────────────────────────────────────────────────── const getAdminSkills = (categorySlug)=>request(`/admin/skills?categorySlug=${encodeURIComponent(categorySlug)}`); const createSkill = (data)=>request('/admin/skills', { method: 'POST', body: JSON.stringify(data) }); const updateSkill = (id, data)=>request(`/admin/skills/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); const deleteSkill = (id)=>request(`/admin/skills/${id}`, { method: 'DELETE' }); const getSkillDedup = (categorySlug)=>request(`/admin/skills/dedup${categorySlug ? `?categorySlug=${encodeURIComponent(categorySlug)}` : ''}`); const mergeSkillDuplicates = (keepId, deleteIds)=>request('/admin/skills/dedup/merge', { method: 'POST', body: JSON.stringify({ keepId, deleteIds }) }); // ─── Admin ───────────────────────────────────────────────────────────────── const getAdminStats = ()=>request('/admin/stats'); const getAdminUsers = (page = 1, q, role)=>{ const p = new URLSearchParams({ page: String(page), limit: '20' }); if (q) p.set('q', q); if (role) p.set('role', role); return request(`/admin/users?${p}`); }; const deactivateUser = (id)=>request(`/admin/users/${id}/deactivate`, { method: 'PATCH' }); const activateUser = (id)=>request(`/admin/users/${id}/activate`, { method: 'PATCH' }); const changeUserRole = (id, role)=>request(`/admin/users/${id}/role`, { method: 'PATCH', body: JSON.stringify({ role }) }); const getAdminUser = (id)=>request(`/admin/users/${id}`); const getAdminUserSpecialistCards = (userId)=>request(`/admin/users/${userId}/specialist-cards`); const adminUpdateSpecialistCard = (id, data)=>request(`/admin/specialist-cards/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); const getAdminSpecialistCards = (page = 1, status)=>{ const p = new URLSearchParams({ page: String(page), limit: '20' }); if (status && status !== 'all') p.set('status', status); return request(`/admin/specialist-cards?${p}`); }; const updateAdminUser = (id, data)=>request(`/admin/users/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); const verifyAdminUserEmail = (id)=>request(`/admin/users/${id}/verify-email`, { method: 'PATCH' }); const getAdminTasks = (page = 1, q, status)=>{ const p = new URLSearchParams({ page: String(page), limit: '20' }); if (q) p.set('q', q); if (status) p.set('status', status); return request(`/admin/tasks?${p}`); }; const cancelTaskAdmin = (id)=>request(`/admin/tasks/${id}/cancel`, { method: 'PATCH' }); const deleteTaskAdmin = (id)=>request(`/admin/tasks/${id}`, { method: 'DELETE' }); const getAdminReports = (page = 1, status)=>{ const p = new URLSearchParams({ page: String(page), limit: '20' }); if (status && status !== 'all') p.set('status', status); return request(`/admin/reports?${p}`); }; const updateReportStatus = (id, status)=>request(`/admin/reports/${id}/status`, { method: 'PATCH', body: JSON.stringify({ status }) }); const getAdminAiLogs = (page = 1)=>request(`/admin/ai-logs?page=${page}&limit=50`); const getAdminActivityLogs = (params = {})=>{ const p = new URLSearchParams(); if (params.page) p.set('page', String(params.page)); if (params.event) p.set('event', params.event); if (params.userId) p.set('userId', params.userId); if (params.dateFrom) p.set('dateFrom', params.dateFrom); if (params.dateTo) p.set('dateTo', params.dateTo); p.set('limit', '50'); return request(`/admin/activity-logs?${p}`); }; const getAdminMailLogs = (params = {})=>{ const p = new URLSearchParams(); if (params.page) p.set('page', String(params.page)); if (params.event) p.set('event', params.event); if (params.dateFrom) p.set('dateFrom', params.dateFrom); if (params.dateTo) p.set('dateTo', params.dateTo); p.set('limit', '50'); return request(`/admin/mail-logs?${p}`); }; const getAdminNotifLogs = (params = {})=>{ const p = new URLSearchParams(); if (params.page) p.set('page', String(params.page)); if (params.type) p.set('type', params.type); if (params.dateFrom) p.set('dateFrom', params.dateFrom); if (params.dateTo) p.set('dateTo', params.dateTo); p.set('limit', '50'); return request(`/admin/notification-logs?${p}`); }; const getAdminNotifStats = ()=>request('/admin/notification-stats'); const getAdminMailStats = ()=>request('/admin/mail-stats'); const getAdminReferrals = ()=>request('/admin/referrals'); const adminSendPushToUser = (userId, data)=>request(`/admin/push/user/${userId}`, { method: 'POST', body: JSON.stringify(data) }); const adminBroadcastPush = (data)=>request('/admin/push/broadcast', { method: 'POST', body: JSON.stringify(data) }); // ─── Admin Locations ─────────────────────────────────────────────────────── const getAdminLocations = ()=>request('/admin/locations'); const createLocation = (data)=>request('/admin/locations', { method: 'POST', body: JSON.stringify(data) }); const updateLocation = (id, data)=>request(`/admin/locations/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); const deleteLocation = (id)=>request(`/admin/locations/${id}`, { method: 'DELETE' }); // ─── Admin Plans ─────────────────────────────────────────────────────────── const getAdminPlans = ()=>request('/admin/plans'); const createPlan = (data)=>request('/admin/plans', { method: 'POST', body: JSON.stringify(data) }); const updatePlan = (id, data)=>request(`/admin/plans/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); const deletePlan = (id)=>request(`/admin/plans/${id}`, { method: 'DELETE' }); // ─── Admin Settings ──────────────────────────────────────────────────────── const getAdminSettings = ()=>request('/admin/settings'); const updateAdminSettings = (data)=>request('/admin/settings', { method: 'PUT', body: JSON.stringify(data) }); const getAdminEmailTemplates = ()=>request('/admin/settings/templates'); const updateAdminEmailTemplate = (key, data)=>request(`/admin/settings/templates/${key}`, { method: 'PUT', body: JSON.stringify(data) }); const translateAdminEmailTemplate = (data)=>request('/admin/settings/templates/translate', { method: 'POST', body: JSON.stringify(data) }); const sendTestEmail = ()=>request('/admin/settings/test-email', { method: 'POST' }); const testTelegramConnection = (botToken, chatId)=>fetch(`${BASE}/api/admin/settings/test-telegram`, { method: 'POST', credentials: 'include', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ botToken, chatId }) }).then((r)=>r.json()); const verifyTelegramToken = (botToken)=>fetch(`${BASE}/api/admin/settings/verify-telegram-token`, { method: 'POST', credentials: 'include', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ botToken }) }).then((r)=>r.json()); const getTranslationsStats = ()=>request('/admin/translations/stats'); const getTranslationsMissing = (table, missingLang, page = 1, limit = 50)=>request(`/admin/translations/${table}?missingLang=${missingLang}&page=${page}&limit=${limit}`); const saveTranslations = (table, items)=>request(`/admin/translations/${table}/save`, { method: 'POST', body: JSON.stringify({ items }) }); const autoTranslate = (table, missingLang, fromLang, batchSize = 500)=>request('/admin/translations/auto-translate', { method: 'POST', body: JSON.stringify({ table, missingLang, fromLang, batchSize }) }); const autoTranslateTasks = (batchSize = 500)=>request('/admin/translations/auto-translate-tasks', { method: 'POST', body: JSON.stringify({ batchSize }) }); const getTasksTranslationPreview = (lang, limit = 50)=>request(`/admin/translations/tasks-preview?lang=${lang}&limit=${limit}`); const autoTranslateEmailTemplates = (missingLang, fromLang = 'el')=>request('/admin/translations/auto-translate-templates', { method: 'POST', body: JSON.stringify({ missingLang, fromLang }) }); // ─── Availability ────────────────────────────────────────────────────────── const getMyAvailability = (month)=>request(`/availability/my${month ? `?month=${month}` : ''}`); const setAvailability = (date, status, note)=>request('/availability/set', { method: 'POST', body: JSON.stringify({ date, status, note }) }); const setAvailabilityRange = (from, to, status)=>request('/availability/set-range', { method: 'POST', body: JSON.stringify({ from, to, status }) }); const getSpecialistAvailability = (userId, month)=>request(`/availability/user/${userId}${month ? `?month=${month}` : ''}`); const getMyPortfolio = ()=>request('/portfolio/my'); const addPortfolioItem = (formData)=>fetch(`${BASE}/api/portfolio`, { method: 'POST', credentials: 'include', body: formData }).then(async (res)=>{ if (!res.ok) { const err = await res.json().catch(()=>({ error: res.statusText })); throw new Error(err.error || 'Upload failed'); } return res.json(); }); const updatePortfolioItem = (id, data)=>request(`/portfolio/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); const deletePortfolioItem = (id)=>request(`/portfolio/${id}`, { method: 'DELETE' }); const getSpecialistPortfolio = (userId)=>request(`/portfolio/user/${userId}`); const getMySpecialistCards = ()=>request('/specialist-cards/my'); const createSpecialistCard = (data)=>request('/specialist-cards', { method: 'POST', body: JSON.stringify(data) }); const updateSpecialistCard = (id, data)=>request(`/specialist-cards/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); const saveSiteSeo = (data)=>request('/users/me/site-seo', { method: 'POST', body: JSON.stringify(data) }); const deleteSpecialistCard = (id)=>request(`/specialist-cards/${id}`, { method: 'DELETE' }); const getSpecialistCards = (userId, locale)=>request(`/specialist-cards/user/${userId}${locale ? `?locale=${encodeURIComponent(locale)}` : ''}`); const getPriceList = (cardId, locale)=>request(`/price-list/${cardId}${locale ? `?locale=${encodeURIComponent(locale)}` : ''}`); const createPriceListGroup = (cardId, data)=>request(`/price-list/${cardId}/groups`, { method: 'POST', body: JSON.stringify(data) }); const updatePriceListGroup = (groupId, data)=>request(`/price-list/groups/${groupId}`, { method: 'PATCH', body: JSON.stringify(data) }); const deletePriceListGroup = (groupId)=>request(`/price-list/groups/${groupId}`, { method: 'DELETE' }); const createPriceListItem = (groupId, data)=>request(`/price-list/groups/${groupId}/items`, { method: 'POST', body: JSON.stringify(data) }); const updatePriceListItem = (itemId, data)=>request(`/price-list/items/${itemId}`, { method: 'PATCH', body: JSON.stringify(data) }); const deletePriceListItem = (itemId)=>request(`/price-list/items/${itemId}`, { method: 'DELETE' }); const getSkillSuggestions = (categorySlugs)=>{ const params = categorySlugs?.length ? '?' + categorySlugs.map((s)=>`category=${encodeURIComponent(s)}`).join('&') : ''; return request(`/skill-suggestions${params}`); }; const initiateTopUp = (amount)=>request('/payments/topup/init', { method: 'POST', body: JSON.stringify({ amount }) }); const getPaymentHistory = ()=>request('/payments/history'); const getBalanceHistory = (limit = 50)=>request(`/payments/balance-history?limit=${limit}`); const getPlanHistory = (limit = 50)=>request(`/users/me/plan-history?limit=${limit}`); const getAdminBalanceHistory = (params = {})=>{ const p = new URLSearchParams(); if (params.page) p.set('page', String(params.page)); if (params.userId) p.set('userId', params.userId); if (params.kind) p.set('kind', params.kind); p.set('limit', '50'); return request(`/admin/balance-history?${p}`); }; const adminTopUpUserBalance = (id, data)=>request(`/admin/users/${id}/balance/topup`, { method: 'POST', body: JSON.stringify(data) }); const adminWithdrawUserBalance = (id, data)=>request(`/admin/users/${id}/balance/withdraw`, { method: 'POST', body: JSON.stringify(data) }); const previewPlanChange = (planId)=>request('/payments/plan/preview', { method: 'POST', body: JSON.stringify({ planId }) }); const getPlans = (role)=>{ const qs = role ? `?role=${role}` : ''; return request(`/plans${qs}`); }; const getMyDashboard = ()=>request('/dashboard/me'); const getDailyUsage = ()=>request('/plans/daily-usage'); const purchasePlan = (planId, payFromBalance = true)=>request('/payments/plan/purchase', { method: 'POST', body: JSON.stringify({ planId, payFromBalance }) }); // ─── Statuses ────────────────────────────────────────────────────────────── const getMyStatuses = ()=>request('/statuses/me'); const toggleStatus = (statusType, active)=>request('/statuses/toggle', { method: 'POST', body: JSON.stringify({ statusType, active }) }); const getAutoResponseSettings = ()=>request('/auto-response'); const updateAutoResponseSettings = (data)=>request('/auto-response', { method: 'PUT', body: JSON.stringify(data) }); // ─── FOMO ────────────────────────────────────────────────────────────────── const getSpecialistFomoDashboard = ()=>request('/fomo/specialist'); const getCustomerFomoDashboard = ()=>request('/fomo/customer'); const getFomoRecommendations = ()=>request('/fomo/recommendations'); // ─── Auto-match ──────────────────────────────────────────────────────────── const getAutoMatchResults = (taskId)=>request(`/auto-match/${taskId}`); const runAutoMatch = (taskId)=>request(`/auto-match/${taskId}`, { method: 'POST' }); // ─── Google Calendar ─────────────────────────────────────────────────────── const getGoogleCalendarStatus = ()=>request('/google/calendar/status'); const disconnectGoogleCalendar = ()=>request('/google/calendar/disconnect', { method: 'DELETE' }); const importFromGoogleCalendar = ()=>request('/google/calendar/import', { method: 'POST' }); const getGoogleCalendarConnectUrl = ()=>`${BASE}/api/google/calendar/connect`; // ─── Personal site ───────────────────────────────────────────────────────── const getPublicSiteProfile = (slug)=>request(`/users/site/${slug}`); const getSiteStats = ()=>request('/users/me/site-stats'); const trackSiteMessage = (slug)=>request(`/users/site/${slug}/track-message`, { method: 'POST' }).catch(()=>{}); // ─── Task stats (FOMO) ───────────────────────────────────────────────────── const getTaskStats = (taskId)=>request(`/tasks/${taskId}/stats`); // ─── Support tickets ─────────────────────────────────────────────────────── const sendPublicSupportMessage = (data)=>request('/support/public', { method: 'POST', body: JSON.stringify(data) }); const createSupportTicket = (data)=>request('/support', { method: 'POST', body: JSON.stringify(data) }); const getMySupportTickets = (page = 1)=>request(`/support/my?page=${page}`); const getAdminSupportTickets = (params)=>request(`/support${params ? '?' + new URLSearchParams(params) : ''}`); const replyToSupportTicket = (id, data)=>request(`/support/${id}/reply`, { method: 'PATCH', body: JSON.stringify(data) }); const setSupportTicketStatus = (id, status)=>request(`/support/${id}/status`, { method: 'PATCH', body: JSON.stringify({ status }) }); {"finalSource":true}mapbufferedMap ConcatSourceRawSource&/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ $7: () => (/* binding */ updateCategory), /* harmony export */ $H: () => (/* binding */ acceptOffer), /* harmony export */ $M: () => (/* binding */ getUnreadCount), /* harmony export */ Bb: () => (/* binding */ getMySpecialistCards), /* harmony export */ Bm: () => (/* binding */ getUserRating), /* harmony export */ Bq: () => (/* binding */ getSpecialistCards), /* harmony export */ Br: () => (/* binding */ getAdminNotifLogs), /* harmony export */ C0: () => (/* binding */ applyMyReferral), /* harmony export */ CX: () => (/* binding */ updateAdminSettings), /* harmony export */ Ck: () => (/* binding */ getPriceList), /* harmony export */ Cs: () => (/* binding */ previewPlanChange), /* harmony export */ D1: () => (/* binding */ setAvailabilityRange), /* harmony export */ Em: () => (/* binding */ request), /* harmony export */ F7: () => (/* binding */ getSpecialists), /* harmony export */ F9: () => (/* binding */ getTaskInvite), /* harmony export */ FI: () => (/* binding */ sendTestEmail), /* harmony export */ Fu: () => (/* binding */ getMyTasks), /* harmony export */ GB: () => (/* binding */ deleteTaskAdmin), /* harmony export */ GE: () => (/* binding */ getSkillDedup), /* harmony export */ Gp: () => (/* binding */ getAutoResponseSettings), /* harmony export */ H: () => (/* binding */ getMyDashboard), /* harmony export */ H6: () => (/* binding */ getTaskReviews), /* harmony export */ He: () => (/* binding */ activateUser), /* harmony export */ I: () => (/* binding */ autoTranslateTasks), /* harmony export */ Ic: () => (/* binding */ deletePriceListGroup), /* harmony export */ Ip: () => (/* binding */ markRead), /* harmony export */ Je: () => (/* binding */ purchasePlan), /* harmony export */ K7: () => (/* binding */ deleteCategory), /* harmony export */ KD: () => (/* binding */ getAdminCategories), /* harmony export */ KZ: () => (/* binding */ getAdminSupportTickets), /* harmony export */ Lb: () => (/* binding */ declineOffer), /* harmony export */ Lp: () => (/* binding */ getAdminEmailTemplates), /* harmony export */ ML: () => (/* binding */ getCustomerFomoDashboard), /* harmony export */ Mm: () => (/* binding */ changeUserRole), /* harmony export */ NL: () => (/* binding */ markAllRead), /* harmony export */ Nt: () => (/* binding */ updateLocation), /* harmony export */ O8: () => (/* binding */ sendPublicSupportMessage), /* harmony export */ OM: () => (/* binding */ setAvailability), /* harmony export */ OV: () => (/* binding */ runAutoMatch), /* harmony export */ OX: () => (/* binding */ getAdminPlans), /* harmony export */ On: () => (/* binding */ getCanMessage), /* harmony export */ P0: () => (/* binding */ adminTopUpUserBalance), /* harmony export */ QN: () => (/* binding */ getOrCreateDirectRoom), /* harmony export */ QY: () => (/* binding */ getTasksTranslationPreview), /* harmony export */ RN: () => (/* binding */ getSiteStats), /* harmony export */ RQ: () => (/* binding */ updateAutoResponseSettings), /* harmony export */ Rt: () => (/* binding */ completeTask), /* harmony export */ S$: () => (/* binding */ getPublicSiteProfile), /* harmony export */ S9: () => (/* binding */ createSkill), /* harmony export */ Sw: () => (/* binding */ getOffers), /* harmony export */ T9: () => (/* binding */ getPlans), /* harmony export */ Tr: () => (/* binding */ getNotifications), /* harmony export */ U9: () => (/* binding */ deletePriceListItem), /* harmony export */ UE: () => (/* binding */ trackSiteMessage), /* harmony export */ UT: () => (/* binding */ createTask), /* harmony export */ Uq: () => (/* binding */ mergeSkillDuplicates), /* harmony export */ V: () => (/* binding */ addSpecialistFavorite), /* harmony export */ V7: () => (/* binding */ adminBroadcastPush), /* harmony export */ VL: () => (/* binding */ getMessages), /* harmony export */ VM: () => (/* binding */ getUserProfile), /* harmony export */ Vs: () => (/* binding */ getLocations), /* harmony export */ Wi: () => (/* binding */ deactivateUser), /* harmony export */ Xz: () => (/* binding */ getSpecialistAvailability), /* harmony export */ YQ: () => (/* binding */ getTranslationsStats), /* harmony export */ Yj: () => (/* binding */ getAdminTasks), /* harmony export */ Z2: () => (/* binding */ createPriceListItem), /* harmony export */ Zp: () => (/* binding */ getChatRooms), /* harmony export */ _z: () => (/* binding */ sendMessage), /* harmony export */ aT: () => (/* binding */ getMyOffers), /* harmony export */ bR: () => (/* binding */ deletePlan), /* harmony export */ bW: () => (/* binding */ getCategories), /* harmony export */ bc: () => (/* binding */ toggleStatus), /* harmony export */ bi: () => (/* binding */ getAdminNotifStats), /* harmony export */ bx: () => (/* binding */ createReview), /* harmony export */ cJ: () => (/* binding */ getAdminReferrals), /* harmony export */ cS: () => (/* binding */ getAdminUsers), /* harmony export */ cl: () => (/* binding */ verifyTelegramToken), /* harmony export */ cp: () => (/* binding */ autoTranslate), /* harmony export */ dE: () => (/* binding */ getAdminStats), /* harmony export */ eR: () => (/* binding */ createSpecialistCard), /* harmony export */ eU: () => (/* binding */ updateReportStatus), /* harmony export */ ew: () => (/* binding */ getPlanHistory), /* harmony export */ f5: () => (/* binding */ deleteSpecialistCard), /* harmony export */ fP: () => (/* binding */ updateSkill), /* harmony export */ fm: () => (/* binding */ getBalanceHistory), /* harmony export */ fu: () => (/* binding */ autoTranslateEmailTemplates), /* harmony export */ g0: () => (/* binding */ getAdminBalanceHistory), /* harmony export */ g1: () => (/* binding */ adminSendPushToUser), /* harmony export */ gg: () => (/* binding */ getTask), /* harmony export */ hD: () => (/* binding */ adminWithdrawUserBalance), /* harmony export */ hl: () => (/* binding */ updatePortfolioItem), /* harmony export */ hp: () => (/* binding */ deleteSkill), /* harmony export */ iN: () => (/* binding */ getMyAvailability), /* harmony export */ i_: () => (/* binding */ getAdminSkills), /* harmony export */ j_: () => (/* binding */ getAdminAiLogs), /* harmony export */ jd: () => (/* binding */ getAdminUser), /* harmony export */ jg: () => (/* binding */ updateAdminEmailTemplate), /* harmony export */ k_: () => (/* binding */ getAdminLocations), /* harmony export */ lC: () => (/* binding */ updateTask), /* harmony export */ mq: () => (/* binding */ createSupportTicket), /* harmony export */ nT: () => (/* binding */ replyToSupportTicket), /* harmony export */ nf: () => (/* binding */ cancelTaskAdmin), /* harmony export */ oD: () => (/* binding */ updatePriceListGroup), /* harmony export */ oh: () => (/* binding */ initiateTopUp), /* harmony export */ oq: () => (/* binding */ adminUpdateSpecialistCard), /* harmony export */ pD: () => (/* binding */ getSpecialistFavorites), /* harmony export */ pK: () => (/* binding */ getPaymentHistory), /* harmony export */ q7: () => (/* binding */ getMyReviews), /* harmony export */ qT: () => (/* binding */ createPlan), /* harmony export */ qX: () => (/* binding */ testTelegramConnection), /* harmony export */ qt: () => (/* binding */ getAdminMailLogs), /* harmony export */ rC: () => (/* binding */ getAdminSettings), /* harmony export */ rl: () => (/* binding */ getSkillSuggestions), /* harmony export */ sD: () => (/* binding */ removeSpecialistFavorite), /* harmony export */ s_: () => (/* binding */ getAdminSpecialistCards), /* harmony export */ st: () => (/* binding */ getMyReferralInfo), /* harmony export */ td: () => (/* binding */ updatePlan), /* harmony export */ ts: () => (/* binding */ createOffer), /* harmony export */ u0: () => (/* binding */ setSupportTicketStatus), /* harmony export */ u4: () => (/* binding */ getAdminMailStats), /* harmony export */ uQ: () => (/* binding */ verifyAdminUserEmail), /* harmony export */ v9: () => (/* binding */ getUserReviews), /* harmony export */ vD: () => (/* binding */ createPriceListGroup), /* harmony export */ vh: () => (/* binding */ getTaskStats), /* harmony export */ vy: () => (/* binding */ getAdminUserSpecialistCards), /* harmony export */ wc: () => (/* binding */ translateAdminEmailTemplate), /* harmony export */ wl: () => (/* binding */ updateAdminUser), /* harmony export */ yJ: () => (/* binding */ createLocation), /* harmony export */ yO: () => (/* binding */ getAdminActivityLogs), /* harmony export */ yk: () => (/* binding */ dismissNotification), /* harmony export */ z4: () => (/* binding */ getDailyUsage), /* harmony export */ z5: () => (/* binding */ getAdminReports), /* harmony export */ z6: () => (/* binding */ getMyStatuses), /* harmony export */ zB: () => (/* binding */ deletePortfolioItem), /* harmony export */ zR: () => (/* binding */ deleteLocation), /* harmony export */ zZ: () => (/* binding */ createCategory), /* harmony export */ zc: () => (/* binding */ updateSpecialistCard), /* harmony export */ zk: () => (/* binding */ getSpecialistFomoDashboard) /* harmony export */ }); /* unused harmony exports getTasks, getTaskBudgetRange, searchTasks, getTasksForSpecialist, getTaskCountsByCategory, cancelTask, updateNotifSettings, getFavorites, addFavorite, removeFavorite, getTranslationsMissing, saveTranslations, getMyPortfolio, addPortfolioItem, getSpecialistPortfolio, saveSiteSeo, updatePriceListItem, getFomoRecommendations, getAutoMatchResults, getGoogleCalendarStatus, disconnectGoogleCalendar, importFromGoogleCalendar, getGoogleCalendarConnectUrl, getMySupportTickets */ ReplaceSourceRawSource[j// SSR: use INTERNAL_API_URL (http://localhost:4000) to avoid external DNS/SSL round-trip // Browser: use NEXT_PUBLIC_API_URL (https://api.canhelp.gr) const BASE = "undefined" === 'undefined' ? process.env.INTERNAL_API_URL || 'http://localhost:4000' : process.env.NEXT_PUBLIC_API_URL || 'http://localhost:4000'; export async function request(path, init) { const url = `${BASE}/api${path}`; if ("undefined" === 'undefined') console.log('[api] SSR fetch', url); const res = await fetch(url, { ...init, credentials: 'include', headers: { 'Content-Type': 'application/json', ...init?.headers } }); if (!res.ok) { const err = await res.json().catch(()=>({ error: res.statusText })); const msg = typeof err.error === 'string' ? err.error : typeof err.message === 'string' ? err.message : res.statusText || 'Request failed'; throw new Error(msg); } return res.json(); } // ─── Tasks ──────────────────────────────────────────────────────────────── export const getTasks = (params)=>{ const qs = params ? '?' + new URLSearchParams(params) : ''; return request(`/tasks${qs}`); }; export const getTaskBudgetRange = (params)=>{ const qs = params ? '?' + new URLSearchParams(params) : ''; return request(`/tasks/budget-range${qs}`); }; export const searchTasks = (params)=>request(`/tasks/search?${new URLSearchParams(params)}`); export const getMyTasks = ()=>request('/tasks/my'); export const getTasksForSpecialist = (params)=>{ const qs = params ? '?' + new URLSearchParams(params) : ''; return request(`/tasks/for-me${qs}`); }; export const getTaskCountsByCategory = ()=>request('/tasks/counts-by-category'); export const getTask = (id)=>request(`/tasks/${id}`); export const createTask = (data)=>request('/tasks', { method: 'POST', body: JSON.stringify(data) }); export const updateTask = (id, data)=>request(`/tasks/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); export const completeTask = (id)=>request(`/tasks/${id}/complete`, { method: 'PATCH' }); export const cancelTask = (id)=>request(`/tasks/${id}/cancel`, { method: 'PATCH' }); // ─── Offers ──────────────────────────────────────────────────────────────── export const getOffers = (taskId)=>request(`/offers?taskId=${taskId}`); export const getMyOffers = ()=>request('/offers/my'); export const createOffer = (data)=>request('/offers', { method: 'POST', body: JSON.stringify(data) }); export const acceptOffer = (id)=>request(`/offers/${id}/accept`, { method: 'PATCH' }); export const declineOffer = (id)=>request(`/offers/${id}/decline`, { method: 'PATCH' }); export const getUserProfile = (id, locale)=>request(`/users/${id}/profile${locale ? `?locale=${encodeURIComponent(locale)}` : ''}`); export const getSpecialists = (params)=>{ const qs = params ? '?' + new URLSearchParams(params) : ''; return request(`/users/specialists${qs}`); }; export const createReview = (data)=>request('/reviews', { method: 'POST', body: JSON.stringify(data) }); export const getTaskReviews = (taskId)=>request(`/reviews/task/${taskId}`); export const getMyReviews = ()=>request('/reviews/my'); // ─── Chat ────────────────────────────────────────────────────────────────── export const getChatRooms = ()=>request('/chat/rooms'); export const getOrCreateDirectRoom = (userId)=>request(`/chat/direct/${userId}`); export const getCanMessage = (userId)=>request(`/chat/can-message/${userId}`); export const getMessages = (roomId)=>request(`/chat/rooms/${roomId}/messages`); export const sendMessage = (roomId, body)=>request('/chat/messages', { method: 'POST', body: JSON.stringify({ roomId, body }) }); // ─── Notifications ──────────────────────────────────────────────────────── export const updateNotifSettings = (data)=>request('/users/me', { method: 'PATCH', body: JSON.stringify(data) }); export const getNotifications = ()=>request('/notifications'); export const getUnreadCount = ()=>request('/notifications/count'); export const markRead = (id)=>request(`/notifications/${id}/read`, { method: 'PATCH' }); export const markAllRead = ()=>request('/notifications/read-all', { method: 'PATCH' }); export const getTaskInvite = (taskId)=>request(`/notifications?type=task_invite&referenceId=${taskId}`); export const dismissNotification = (id)=>request(`/notifications/${id}`, { method: 'DELETE' }); // ─── Referral ───────────────────────────────────────────────────────────── export const getMyReferralInfo = ()=>request('/users/me/referral'); export const applyMyReferral = (refCode)=>request('/users/me/referral/apply', { method: 'POST', body: JSON.stringify({ refCode }) }); // ─── Reviews ────────────────────────────────────────────────────────────── export const getUserReviews = (userId)=>request(`/reviews/user/${userId}`); export const getUserRating = (userId)=>request(`/reviews/user/${userId}/rating`); // ─── Categories ─────────────────────────────────────────────────────────── export const getCategories = ()=>request('/categories'); // ─── Locations ──────────────────────────────────────────────────────────── export const getLocations = ()=>request('/locations'); // ─── Favorites ──────────────────────────────────────────────────────────── export const getFavorites = ()=>request('/favorites'); export const addFavorite = (taskId)=>request(`/favorites/${taskId}`, { method: 'POST' }); export const removeFavorite = (taskId)=>request(`/favorites/${taskId}`, { method: 'DELETE' }); export const getSpecialistFavorites = ()=>request('/favorites/specialists'); export const addSpecialistFavorite = (specialistId)=>request(`/favorites/specialists/${specialistId}`, { method: 'POST' }); export const removeSpecialistFavorite = (specialistId)=>request(`/favorites/specialists/${specialistId}`, { method: 'DELETE' }); // ─── Admin ───────────────────────────────────────────────────────────────── // ─── Admin Categories ────────────────────────────────────────────────────── export const getAdminCategories = ()=>request('/admin/categories'); export const createCategory = (data)=>request('/admin/categories', { method: 'POST', body: JSON.stringify(data) }); export const updateCategory = (id, data)=>request(`/admin/categories/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); export const deleteCategory = (id)=>request(`/admin/categories/${id}`, { method: 'DELETE' }); // ─── Admin Skills ────────────────────────────────────────────────────────── export const getAdminSkills = (categorySlug)=>request(`/admin/skills?categorySlug=${encodeURIComponent(categorySlug)}`); export const createSkill = (data)=>request('/admin/skills', { method: 'POST', body: JSON.stringify(data) }); export const updateSkill = (id, data)=>request(`/admin/skills/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); export const deleteSkill = (id)=>request(`/admin/skills/${id}`, { method: 'DELETE' }); export const getSkillDedup = (categorySlug)=>request(`/admin/skills/dedup${categorySlug ? `?categorySlug=${encodeURIComponent(categorySlug)}` : ''}`); export const mergeSkillDuplicates = (keepId, deleteIds)=>request('/admin/skills/dedup/merge', { method: 'POST', body: JSON.stringify({ keepId, deleteIds }) }); // ─── Admin ───────────────────────────────────────────────────────────────── export const getAdminStats = ()=>request('/admin/stats'); export const getAdminUsers = (page = 1, q, role)=>{ const p = new URLSearchParams({ page: String(page), limit: '20' }); if (q) p.set('q', q); if (role) p.set('role', role); return request(`/admin/users?${p}`); }; export const deactivateUser = (id)=>request(`/admin/users/${id}/deactivate`, { method: 'PATCH' }); export const activateUser = (id)=>request(`/admin/users/${id}/activate`, { method: 'PATCH' }); export const changeUserRole = (id, role)=>request(`/admin/users/${id}/role`, { method: 'PATCH', body: JSON.stringify({ role }) }); export const getAdminUser = (id)=>request(`/admin/users/${id}`); export const getAdminUserSpecialistCards = (userId)=>request(`/admin/users/${userId}/specialist-cards`); export const adminUpdateSpecialistCard = (id, data)=>request(`/admin/specialist-cards/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); export const getAdminSpecialistCards = (page = 1, status)=>{ const p = new URLSearchParams({ page: String(page), limit: '20' }); if (status && status !== 'all') p.set('status', status); return request(`/admin/specialist-cards?${p}`); }; export const updateAdminUser = (id, data)=>request(`/admin/users/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); export const verifyAdminUserEmail = (id)=>request(`/admin/users/${id}/verify-email`, { method: 'PATCH' }); export const getAdminTasks = (page = 1, q, status)=>{ const p = new URLSearchParams({ page: String(page), limit: '20' }); if (q) p.set('q', q); if (status) p.set('status', status); return request(`/admin/tasks?${p}`); }; export const cancelTaskAdmin = (id)=>request(`/admin/tasks/${id}/cancel`, { method: 'PATCH' }); export const deleteTaskAdmin = (id)=>request(`/admin/tasks/${id}`, { method: 'DELETE' }); export const getAdminReports = (page = 1, status)=>{ const p = new URLSearchParams({ page: String(page), limit: '20' }); if (status && status !== 'all') p.set('status', status); return request(`/admin/reports?${p}`); }; export const updateReportStatus = (id, status)=>request(`/admin/reports/${id}/status`, { method: 'PATCH', body: JSON.stringify({ status }) }); export const getAdminAiLogs = (page = 1)=>request(`/admin/ai-logs?page=${page}&limit=50`); export const getAdminActivityLogs = (params = {})=>{ const p = new URLSearchParams(); if (params.page) p.set('page', String(params.page)); if (params.event) p.set('event', params.event); if (params.userId) p.set('userId', params.userId); if (params.dateFrom) p.set('dateFrom', params.dateFrom); if (params.dateTo) p.set('dateTo', params.dateTo); p.set('limit', '50'); return request(`/admin/activity-logs?${p}`); }; export const getAdminMailLogs = (params = {})=>{ const p = new URLSearchParams(); if (params.page) p.set('page', String(params.page)); if (params.event) p.set('event', params.event); if (params.dateFrom) p.set('dateFrom', params.dateFrom); if (params.dateTo) p.set('dateTo', params.dateTo); p.set('limit', '50'); return request(`/admin/mail-logs?${p}`); }; export const getAdminNotifLogs = (params = {})=>{ const p = new URLSearchParams(); if (params.page) p.set('page', String(params.page)); if (params.type) p.set('type', params.type); if (params.dateFrom) p.set('dateFrom', params.dateFrom); if (params.dateTo) p.set('dateTo', params.dateTo); p.set('limit', '50'); return request(`/admin/notification-logs?${p}`); }; export const getAdminNotifStats = ()=>request('/admin/notification-stats'); export const getAdminMailStats = ()=>request('/admin/mail-stats'); export const getAdminReferrals = ()=>request('/admin/referrals'); export const adminSendPushToUser = (userId, data)=>request(`/admin/push/user/${userId}`, { method: 'POST', body: JSON.stringify(data) }); export const adminBroadcastPush = (data)=>request('/admin/push/broadcast', { method: 'POST', body: JSON.stringify(data) }); // ─── Admin Locations ─────────────────────────────────────────────────────── export const getAdminLocations = ()=>request('/admin/locations'); export const createLocation = (data)=>request('/admin/locations', { method: 'POST', body: JSON.stringify(data) }); export const updateLocation = (id, data)=>request(`/admin/locations/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); export const deleteLocation = (id)=>request(`/admin/locations/${id}`, { method: 'DELETE' }); // ─── Admin Plans ─────────────────────────────────────────────────────────── export const getAdminPlans = ()=>request('/admin/plans'); export const createPlan = (data)=>request('/admin/plans', { method: 'POST', body: JSON.stringify(data) }); export const updatePlan = (id, data)=>request(`/admin/plans/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); export const deletePlan = (id)=>request(`/admin/plans/${id}`, { method: 'DELETE' }); // ─── Admin Settings ──────────────────────────────────────────────────────── export const getAdminSettings = ()=>request('/admin/settings'); export const updateAdminSettings = (data)=>request('/admin/settings', { method: 'PUT', body: JSON.stringify(data) }); export const getAdminEmailTemplates = ()=>request('/admin/settings/templates'); export const updateAdminEmailTemplate = (key, data)=>request(`/admin/settings/templates/${key}`, { method: 'PUT', body: JSON.stringify(data) }); export const translateAdminEmailTemplate = (data)=>request('/admin/settings/templates/translate', { method: 'POST', body: JSON.stringify(data) }); export const sendTestEmail = ()=>request('/admin/settings/test-email', { method: 'POST' }); export const testTelegramConnection = (botToken, chatId)=>fetch(`${BASE}/api/admin/settings/test-telegram`, { method: 'POST', credentials: 'include', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ botToken, chatId }) }).then((r)=>r.json()); export const verifyTelegramToken = (botToken)=>fetch(`${BASE}/api/admin/settings/verify-telegram-token`, { method: 'POST', credentials: 'include', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ botToken }) }).then((r)=>r.json()); export const getTranslationsStats = ()=>request('/admin/translations/stats'); export const getTranslationsMissing = (table, missingLang, page = 1, limit = 50)=>request(`/admin/translations/${table}?missingLang=${missingLang}&page=${page}&limit=${limit}`); export const saveTranslations = (table, items)=>request(`/admin/translations/${table}/save`, { method: 'POST', body: JSON.stringify({ items }) }); export const autoTranslate = (table, missingLang, fromLang, batchSize = 500)=>request('/admin/translations/auto-translate', { method: 'POST', body: JSON.stringify({ table, missingLang, fromLang, batchSize }) }); export const autoTranslateTasks = (batchSize = 500)=>request('/admin/translations/auto-translate-tasks', { method: 'POST', body: JSON.stringify({ batchSize }) }); export const getTasksTranslationPreview = (lang, limit = 50)=>request(`/admin/translations/tasks-preview?lang=${lang}&limit=${limit}`); export const autoTranslateEmailTemplates = (missingLang, fromLang = 'el')=>request('/admin/translations/auto-translate-templates', { method: 'POST', body: JSON.stringify({ missingLang, fromLang }) }); // ─── Availability ────────────────────────────────────────────────────────── export const getMyAvailability = (month)=>request(`/availability/my${month ? `?month=${month}` : ''}`); export const setAvailability = (date, status, note)=>request('/availability/set', { method: 'POST', body: JSON.stringify({ date, status, note }) }); export const setAvailabilityRange = (from, to, status)=>request('/availability/set-range', { method: 'POST', body: JSON.stringify({ from, to, status }) }); export const getSpecialistAvailability = (userId, month)=>request(`/availability/user/${userId}${month ? `?month=${month}` : ''}`); export const getMyPortfolio = ()=>request('/portfolio/my'); export const addPortfolioItem = (formData)=>fetch(`${BASE}/api/portfolio`, { method: 'POST', credentials: 'include', body: formData }).then(async (res)=>{ if (!res.ok) { const err = await res.json().catch(()=>({ error: res.statusText })); throw new Error(err.error || 'Upload failed'); } return res.json(); }); export const updatePortfolioItem = (id, data)=>request(`/portfolio/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); export const deletePortfolioItem = (id)=>request(`/portfolio/${id}`, { method: 'DELETE' }); export const getSpecialistPortfolio = (userId)=>request(`/portfolio/user/${userId}`); export const getMySpecialistCards = ()=>request('/specialist-cards/my'); export const createSpecialistCard = (data)=>request('/specialist-cards', { method: 'POST', body: JSON.stringify(data) }); export const updateSpecialistCard = (id, data)=>request(`/specialist-cards/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); export const saveSiteSeo = (data)=>request('/users/me/site-seo', { method: 'POST', body: JSON.stringify(data) }); export const deleteSpecialistCard = (id)=>request(`/specialist-cards/${id}`, { method: 'DELETE' }); export const getSpecialistCards = (userId, locale)=>request(`/specialist-cards/user/${userId}${locale ? `?locale=${encodeURIComponent(locale)}` : ''}`); export const getPriceList = (cardId, locale)=>request(`/price-list/${cardId}${locale ? `?locale=${encodeURIComponent(locale)}` : ''}`); export const createPriceListGroup = (cardId, data)=>request(`/price-list/${cardId}/groups`, { method: 'POST', body: JSON.stringify(data) }); export const updatePriceListGroup = (groupId, data)=>request(`/price-list/groups/${groupId}`, { method: 'PATCH', body: JSON.stringify(data) }); export const deletePriceListGroup = (groupId)=>request(`/price-list/groups/${groupId}`, { method: 'DELETE' }); export const createPriceListItem = (groupId, data)=>request(`/price-list/groups/${groupId}/items`, { method: 'POST', body: JSON.stringify(data) }); export const updatePriceListItem = (itemId, data)=>request(`/price-list/items/${itemId}`, { method: 'PATCH', body: JSON.stringify(data) }); export const deletePriceListItem = (itemId)=>request(`/price-list/items/${itemId}`, { method: 'DELETE' }); export const getSkillSuggestions = (categorySlugs)=>{ const params = categorySlugs?.length ? '?' + categorySlugs.map((s)=>`category=${encodeURIComponent(s)}`).join('&') : ''; return request(`/skill-suggestions${params}`); }; export const initiateTopUp = (amount)=>request('/payments/topup/init', { method: 'POST', body: JSON.stringify({ amount }) }); export const getPaymentHistory = ()=>request('/payments/history'); export const getBalanceHistory = (limit = 50)=>request(`/payments/balance-history?limit=${limit}`); export const getPlanHistory = (limit = 50)=>request(`/users/me/plan-history?limit=${limit}`); export const getAdminBalanceHistory = (params = {})=>{ const p = new URLSearchParams(); if (params.page) p.set('page', String(params.page)); if (params.userId) p.set('userId', params.userId); if (params.kind) p.set('kind', params.kind); p.set('limit', '50'); return request(`/admin/balance-history?${p}`); }; export const adminTopUpUserBalance = (id, data)=>request(`/admin/users/${id}/balance/topup`, { method: 'POST', body: JSON.stringify(data) }); export const adminWithdrawUserBalance = (id, data)=>request(`/admin/users/${id}/balance/withdraw`, { method: 'POST', body: JSON.stringify(data) }); export const previewPlanChange = (planId)=>request('/payments/plan/preview', { method: 'POST', body: JSON.stringify({ planId }) }); export const getPlans = (role)=>{ const qs = role ? `?role=${role}` : ''; return request(`/plans${qs}`); }; export const getMyDashboard = ()=>request('/dashboard/me'); export const getDailyUsage = ()=>request('/plans/daily-usage'); export const purchasePlan = (planId, payFromBalance = true)=>request('/payments/plan/purchase', { method: 'POST', body: JSON.stringify({ planId, payFromBalance }) }); // ─── Statuses ────────────────────────────────────────────────────────────── export const getMyStatuses = ()=>request('/statuses/me'); export const toggleStatus = (statusType, active)=>request('/statuses/toggle', { method: 'POST', body: JSON.stringify({ statusType, active }) }); export const getAutoResponseSettings = ()=>request('/auto-response'); export const updateAutoResponseSettings = (data)=>request('/auto-response', { method: 'PUT', body: JSON.stringify(data) }); // ─── FOMO ────────────────────────────────────────────────────────────────── export const getSpecialistFomoDashboard = ()=>request('/fomo/specialist'); export const getCustomerFomoDashboard = ()=>request('/fomo/customer'); export const getFomoRecommendations = ()=>request('/fomo/recommendations'); // ─── Auto-match ──────────────────────────────────────────────────────────── export const getAutoMatchResults = (taskId)=>request(`/auto-match/${taskId}`); export const runAutoMatch = (taskId)=>request(`/auto-match/${taskId}`, { method: 'POST' }); // ─── Google Calendar ─────────────────────────────────────────────────────── export const getGoogleCalendarStatus = ()=>request('/google/calendar/status'); export const disconnectGoogleCalendar = ()=>request('/google/calendar/disconnect', { method: 'DELETE' }); export const importFromGoogleCalendar = ()=>request('/google/calendar/import', { method: 'POST' }); export const getGoogleCalendarConnectUrl = ()=>`${BASE}/api/google/calendar/connect`; // ─── Personal site ───────────────────────────────────────────────────────── export const getPublicSiteProfile = (slug)=>request(`/users/site/${slug}`); export const getSiteStats = ()=>request('/users/me/site-stats'); export const trackSiteMessage = (slug)=>request(`/users/site/${slug}/track-message`, { method: 'POST' }).catch(()=>{}); // ─── Task stats (FOMO) ───────────────────────────────────────────────────── export const getTaskStats = (taskId)=>request(`/tasks/${taskId}/stats`); // ─── Support tickets ─────────────────────────────────────────────────────── export const sendPublicSupportMessage = (data)=>request('/support/public', { method: 'POST', body: JSON.stringify(data) }); export const createSupportTicket = (data)=>request('/support', { method: 'POST', body: JSON.stringify(data) }); export const getMySupportTickets = (page = 1)=>request(`/support/my?page=${page}`); export const getAdminSupportTickets = (params)=>request(`/support${params ? '?' + new URLSearchParams(params) : ''}`); export const replyToSupportTicket = (id, data)=>request(`/support/${id}/reply`, { method: 'PATCH', body: JSON.stringify(data) }); export const setSupportTicketStatus = (id, status)=>request(`/support/${id}/status`, { method: 'PATCH', body: JSON.stringify({ status }) });  164190 trueundefined2523090undefined312318undefined402428trueundefined10771083undefined12151221undefined13761382undefined14701476undefined15221528undefined16801686undefined17611767undefined18151821undefined19361942undefined20682074undefined21692175undefined23452351undefined24172423undefined24712477undefined25942600undefined26932699undefined27942800undefined29272933undefined30833089undefined32083214undefined32843290undefined34193425undefined34753481undefined35573563undefined36363642undefined37163722undefined39763982undefined41104116undefined41734179undefined42404246undefined43414347undefined44414447undefined45464552undefined47324738undefined48004806undefined50525058undefined51285134undefined52885294undefined54235429undefined55565562undefined56115617undefined57135719undefined58205826undefined58975903undefined60336039undefined63326338undefined64006406undefined65366542undefined66836689undefined68686874undefined69896995undefined71187124undefined72587264undefined73577363undefined75087514undefined77997805undefined78577863undefined81068112undefined82178223undefined83248330undefined84958501undefined85608566undefined86658671undefined88298835undefined90989104undefined92419247undefined93609366undefined96179623undefined97259731undefined98279833undefined1007910085undefined1026210268undefined1035310359undefined1080110807undefined1118611192undefined1157711583undefined1165311659undefined1172011726undefined1178611792undefined1194411950undefined1216712173undefined1223312239undefined1236812374undefined1251412520undefined1269812704undefined1275612762undefined1288312889undefined1302113027undefined1319713203undefined1326113267undefined1339913405undefined1347913485undefined1364413650undefined1381113817undefined1391513921undefined1426914275undefined1460014606undefined1467814684undefined1485614862undefined1504315049undefined1533115337undefined1553415540undefined1567015676undefined1600216008undefined1610616112undefined1631916325undefined1653916545undefined1667116677undefined1673116737undefined1715817164undefined1730317309undefined1740717413undefined1749317499undefined1756617572undefined1770817714undefined1786117867undefined1799518001undefined1810718113undefined1826018266undefined1839618402undefined1855718563undefined1872118727undefined1884418850undefined1901219018undefined1917219178undefined1929119297undefined1952419530undefined1969019696undefined1975719763undefined1985719863undefined1995119957undefined2028420290undefined2044620452undefined2061420620undefined2078620792undefined2090220908undefined2096220968undefined2102621032undefined2132421330undefined2138221388undefined2157921585undefined2164921655undefined2187221878undefined2194721953undefined2201822024undefined2217322179undefined2225222258undefined2243522441undefined2251422520undefined2263222638undefined2274422750undefined2290922915undefined2298522991undefined2305023056undefined2326123267undefined2341323419undefined2355723563undefined2368923695undefined2377323779undefined2389223898undefined2404224048undefined /***/ }) {/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ $7: () => (/* binding */ updateCategory), /* harmony export */ $H: () => (/* binding */ acceptOffer), /* harmony export */ $M: () => (/* binding */ getUnreadCount), /* harmony export */ Bb: () => (/* binding */ getMySpecialistCards), /* harmony export */ Bm: () => (/* binding */ getUserRating), /* harmony export */ Bq: () => (/* binding */ getSpecialistCards), /* harmony export */ Br: () => (/* binding */ getAdminNotifLogs), /* harmony export */ C0: () => (/* binding */ applyMyReferral), /* harmony export */ CX: () => (/* binding */ updateAdminSettings), /* harmony export */ Ck: () => (/* binding */ getPriceList), /* harmony export */ Cs: () => (/* binding */ previewPlanChange), /* harmony export */ D1: () => (/* binding */ setAvailabilityRange), /* harmony export */ Em: () => (/* binding */ request), /* harmony export */ F7: () => (/* binding */ getSpecialists), /* harmony export */ F9: () => (/* binding */ getTaskInvite), /* harmony export */ FI: () => (/* binding */ sendTestEmail), /* harmony export */ Fu: () => (/* binding */ getMyTasks), /* harmony export */ GB: () => (/* binding */ deleteTaskAdmin), /* harmony export */ GE: () => (/* binding */ getSkillDedup), /* harmony export */ Gp: () => (/* binding */ getAutoResponseSettings), /* harmony export */ H: () => (/* binding */ getMyDashboard), /* harmony export */ H6: () => (/* binding */ getTaskReviews), /* harmony export */ He: () => (/* binding */ activateUser), /* harmony export */ I: () => (/* binding */ autoTranslateTasks), /* harmony export */ Ic: () => (/* binding */ deletePriceListGroup), /* harmony export */ Ip: () => (/* binding */ markRead), /* harmony export */ Je: () => (/* binding */ purchasePlan), /* harmony export */ K7: () => (/* binding */ deleteCategory), /* harmony export */ KD: () => (/* binding */ getAdminCategories), /* harmony export */ KZ: () => (/* binding */ getAdminSupportTickets), /* harmony export */ Lb: () => (/* binding */ declineOffer), /* harmony export */ Lp: () => (/* binding */ getAdminEmailTemplates), /* harmony export */ ML: () => (/* binding */ getCustomerFomoDashboard), /* harmony export */ Mm: () => (/* binding */ changeUserRole), /* harmony export */ NL: () => (/* binding */ markAllRead), /* harmony export */ Nt: () => (/* binding */ updateLocation), /* harmony export */ O8: () => (/* binding */ sendPublicSupportMessage), /* harmony export */ OM: () => (/* binding */ setAvailability), /* harmony export */ OV: () => (/* binding */ runAutoMatch), /* harmony export */ OX: () => (/* binding */ getAdminPlans), /* harmony export */ On: () => (/* binding */ getCanMessage), /* harmony export */ P0: () => (/* binding */ adminTopUpUserBalance), /* harmony export */ QN: () => (/* binding */ getOrCreateDirectRoom), /* harmony export */ QY: () => (/* binding */ getTasksTranslationPreview), /* harmony export */ RN: () => (/* binding */ getSiteStats), /* harmony export */ RQ: () => (/* binding */ updateAutoResponseSettings), /* harmony export */ Rt: () => (/* binding */ completeTask), /* harmony export */ S$: () => (/* binding */ getPublicSiteProfile), /* harmony export */ S9: () => (/* binding */ createSkill), /* harmony export */ Sw: () => (/* binding */ getOffers), /* harmony export */ T9: () => (/* binding */ getPlans), /* harmony export */ Tr: () => (/* binding */ getNotifications), /* harmony export */ U9: () => (/* binding */ deletePriceListItem), /* harmony export */ UE: () => (/* binding */ trackSiteMessage), /* harmony export */ UT: () => (/* binding */ createTask), /* harmony export */ Uq: () => (/* binding */ mergeSkillDuplicates), /* harmony export */ V: () => (/* binding */ addSpecialistFavorite), /* harmony export */ V7: () => (/* binding */ adminBroadcastPush), /* harmony export */ VL: () => (/* binding */ getMessages), /* harmony export */ VM: () => (/* binding */ getUserProfile), /* harmony export */ Vs: () => (/* binding */ getLocations), /* harmony export */ Wi: () => (/* binding */ deactivateUser), /* harmony export */ Xz: () => (/* binding */ getSpecialistAvailability), /* harmony export */ YQ: () => (/* binding */ getTranslationsStats), /* harmony export */ Yj: () => (/* binding */ getAdminTasks), /* harmony export */ Z2: () => (/* binding */ createPriceListItem), /* harmony export */ Zp: () => (/* binding */ getChatRooms), /* harmony export */ _z: () => (/* binding */ sendMessage), /* harmony export */ aT: () => (/* binding */ getMyOffers), /* harmony export */ bR: () => (/* binding */ deletePlan), /* harmony export */ bW: () => (/* binding */ getCategories), /* harmony export */ bc: () => (/* binding */ toggleStatus), /* harmony export */ bi: () => (/* binding */ getAdminNotifStats), /* harmony export */ bx: () => (/* binding */ createReview), /* harmony export */ cJ: () => (/* binding */ getAdminReferrals), /* harmony export */ cS: () => (/* binding */ getAdminUsers), /* harmony export */ cl: () => (/* binding */ verifyTelegramToken), /* harmony export */ cp: () => (/* binding */ autoTranslate), /* harmony export */ dE: () => (/* binding */ getAdminStats), /* harmony export */ eR: () => (/* binding */ createSpecialistCard), /* harmony export */ eU: () => (/* binding */ updateReportStatus), /* harmony export */ ew: () => (/* binding */ getPlanHistory), /* harmony export */ f5: () => (/* binding */ deleteSpecialistCard), /* harmony export */ fP: () => (/* binding */ updateSkill), /* harmony export */ fm: () => (/* binding */ getBalanceHistory), /* harmony export */ fu: () => (/* binding */ autoTranslateEmailTemplates), /* harmony export */ g0: () => (/* binding */ getAdminBalanceHistory), /* harmony export */ g1: () => (/* binding */ adminSendPushToUser), /* harmony export */ gg: () => (/* binding */ getTask), /* harmony export */ hD: () => (/* binding */ adminWithdrawUserBalance), /* harmony export */ hl: () => (/* binding */ updatePortfolioItem), /* harmony export */ hp: () => (/* binding */ deleteSkill), /* harmony export */ iN: () => (/* binding */ getMyAvailability), /* harmony export */ i_: () => (/* binding */ getAdminSkills), /* harmony export */ j_: () => (/* binding */ getAdminAiLogs), /* harmony export */ jd: () => (/* binding */ getAdminUser), /* harmony export */ jg: () => (/* binding */ updateAdminEmailTemplate), /* harmony export */ k_: () => (/* binding */ getAdminLocations), /* harmony export */ lC: () => (/* binding */ updateTask), /* harmony export */ mq: () => (/* binding */ createSupportTicket), /* harmony export */ nT: () => (/* binding */ replyToSupportTicket), /* harmony export */ nf: () => (/* binding */ cancelTaskAdmin), /* harmony export */ oD: () => (/* binding */ updatePriceListGroup), /* harmony export */ oh: () => (/* binding */ initiateTopUp), /* harmony export */ oq: () => (/* binding */ adminUpdateSpecialistCard), /* harmony export */ pD: () => (/* binding */ getSpecialistFavorites), /* harmony export */ pK: () => (/* binding */ getPaymentHistory), /* harmony export */ q7: () => (/* binding */ getMyReviews), /* harmony export */ qT: () => (/* binding */ createPlan), /* harmony export */ qX: () => (/* binding */ testTelegramConnection), /* harmony export */ qt: () => (/* binding */ getAdminMailLogs), /* harmony export */ rC: () => (/* binding */ getAdminSettings), /* harmony export */ rl: () => (/* binding */ getSkillSuggestions), /* harmony export */ sD: () => (/* binding */ removeSpecialistFavorite), /* harmony export */ s_: () => (/* binding */ getAdminSpecialistCards), /* harmony export */ st: () => (/* binding */ getMyReferralInfo), /* harmony export */ td: () => (/* binding */ updatePlan), /* harmony export */ ts: () => (/* binding */ createOffer), /* harmony export */ u0: () => (/* binding */ setSupportTicketStatus), /* harmony export */ u4: () => (/* binding */ getAdminMailStats), /* harmony export */ uQ: () => (/* binding */ verifyAdminUserEmail), /* harmony export */ v9: () => (/* binding */ getUserReviews), /* harmony export */ vD: () => (/* binding */ createPriceListGroup), /* harmony export */ vh: () => (/* binding */ getTaskStats), /* harmony export */ vy: () => (/* binding */ getAdminUserSpecialistCards), /* harmony export */ wc: () => (/* binding */ translateAdminEmailTemplate), /* harmony export */ wl: () => (/* binding */ updateAdminUser), /* harmony export */ yJ: () => (/* binding */ createLocation), /* harmony export */ yO: () => (/* binding */ getAdminActivityLogs), /* harmony export */ yk: () => (/* binding */ dismissNotification), /* harmony export */ z4: () => (/* binding */ getDailyUsage), /* harmony export */ z5: () => (/* binding */ getAdminReports), /* harmony export */ z6: () => (/* binding */ getMyStatuses), /* harmony export */ zB: () => (/* binding */ deletePortfolioItem), /* harmony export */ zR: () => (/* binding */ deleteLocation), /* harmony export */ zZ: () => (/* binding */ createCategory), /* harmony export */ zc: () => (/* binding */ updateSpecialistCard), /* harmony export */ zk: () => (/* binding */ getSpecialistFomoDashboard) /* harmony export */ }); /* unused harmony exports getTasks, getTaskBudgetRange, searchTasks, getTasksForSpecialist, getTaskCountsByCategory, cancelTask, updateNotifSettings, getFavorites, addFavorite, removeFavorite, getTranslationsMissing, saveTranslations, getMyPortfolio, addPortfolioItem, getSpecialistPortfolio, saveSiteSeo, updatePriceListItem, getFomoRecommendations, getAutoMatchResults, getGoogleCalendarStatus, disconnectGoogleCalendar, importFromGoogleCalendar, getGoogleCalendarConnectUrl, getMySupportTickets */ // SSR: use INTERNAL_API_URL (http://localhost:4000) to avoid external DNS/SSL round-trip // Browser: use NEXT_PUBLIC_API_URL (https://api.canhelp.gr) const BASE = true ? process.env.INTERNAL_API_URL || 'http://localhost:4000' : 0; async function request(path, init) { const url = `${BASE}/api${path}`; if (true) console.log('[api] SSR fetch', url); const res = await fetch(url, { ...init, credentials: 'include', headers: { 'Content-Type': 'application/json', ...init?.headers } }); if (!res.ok) { const err = await res.json().catch(()=>({ error: res.statusText })); const msg = typeof err.error === 'string' ? err.error : typeof err.message === 'string' ? err.message : res.statusText || 'Request failed'; throw new Error(msg); } return res.json(); } // ─── Tasks ──────────────────────────────────────────────────────────────── const getTasks = (params)=>{ const qs = params ? '?' + new URLSearchParams(params) : ''; return request(`/tasks${qs}`); }; const getTaskBudgetRange = (params)=>{ const qs = params ? '?' + new URLSearchParams(params) : ''; return request(`/tasks/budget-range${qs}`); }; const searchTasks = (params)=>request(`/tasks/search?${new URLSearchParams(params)}`); const getMyTasks = ()=>request('/tasks/my'); const getTasksForSpecialist = (params)=>{ const qs = params ? '?' + new URLSearchParams(params) : ''; return request(`/tasks/for-me${qs}`); }; const getTaskCountsByCategory = ()=>request('/tasks/counts-by-category'); const getTask = (id)=>request(`/tasks/${id}`); const createTask = (data)=>request('/tasks', { method: 'POST', body: JSON.stringify(data) }); const updateTask = (id, data)=>request(`/tasks/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); const completeTask = (id)=>request(`/tasks/${id}/complete`, { method: 'PATCH' }); const cancelTask = (id)=>request(`/tasks/${id}/cancel`, { method: 'PATCH' }); // ─── Offers ──────────────────────────────────────────────────────────────── const getOffers = (taskId)=>request(`/offers?taskId=${taskId}`); const getMyOffers = ()=>request('/offers/my'); const createOffer = (data)=>request('/offers', { method: 'POST', body: JSON.stringify(data) }); const acceptOffer = (id)=>request(`/offers/${id}/accept`, { method: 'PATCH' }); const declineOffer = (id)=>request(`/offers/${id}/decline`, { method: 'PATCH' }); const getUserProfile = (id, locale)=>request(`/users/${id}/profile${locale ? `?locale=${encodeURIComponent(locale)}` : ''}`); const getSpecialists = (params)=>{ const qs = params ? '?' + new URLSearchParams(params) : ''; return request(`/users/specialists${qs}`); }; const createReview = (data)=>request('/reviews', { method: 'POST', body: JSON.stringify(data) }); const getTaskReviews = (taskId)=>request(`/reviews/task/${taskId}`); const getMyReviews = ()=>request('/reviews/my'); // ─── Chat ────────────────────────────────────────────────────────────────── const getChatRooms = ()=>request('/chat/rooms'); const getOrCreateDirectRoom = (userId)=>request(`/chat/direct/${userId}`); const getCanMessage = (userId)=>request(`/chat/can-message/${userId}`); const getMessages = (roomId)=>request(`/chat/rooms/${roomId}/messages`); const sendMessage = (roomId, body)=>request('/chat/messages', { method: 'POST', body: JSON.stringify({ roomId, body }) }); // ─── Notifications ──────────────────────────────────────────────────────── const updateNotifSettings = (data)=>request('/users/me', { method: 'PATCH', body: JSON.stringify(data) }); const getNotifications = ()=>request('/notifications'); const getUnreadCount = ()=>request('/notifications/count'); const markRead = (id)=>request(`/notifications/${id}/read`, { method: 'PATCH' }); const markAllRead = ()=>request('/notifications/read-all', { method: 'PATCH' }); const getTaskInvite = (taskId)=>request(`/notifications?type=task_invite&referenceId=${taskId}`); const dismissNotification = (id)=>request(`/notifications/${id}`, { method: 'DELETE' }); // ─── Referral ───────────────────────────────────────────────────────────── const getMyReferralInfo = ()=>request('/users/me/referral'); const applyMyReferral = (refCode)=>request('/users/me/referral/apply', { method: 'POST', body: JSON.stringify({ refCode }) }); // ─── Reviews ────────────────────────────────────────────────────────────── const getUserReviews = (userId)=>request(`/reviews/user/${userId}`); const getUserRating = (userId)=>request(`/reviews/user/${userId}/rating`); // ─── Categories ─────────────────────────────────────────────────────────── const getCategories = ()=>request('/categories'); // ─── Locations ──────────────────────────────────────────────────────────── const getLocations = ()=>request('/locations'); // ─── Favorites ──────────────────────────────────────────────────────────── const getFavorites = ()=>request('/favorites'); const addFavorite = (taskId)=>request(`/favorites/${taskId}`, { method: 'POST' }); const removeFavorite = (taskId)=>request(`/favorites/${taskId}`, { method: 'DELETE' }); const getSpecialistFavorites = ()=>request('/favorites/specialists'); const addSpecialistFavorite = (specialistId)=>request(`/favorites/specialists/${specialistId}`, { method: 'POST' }); const removeSpecialistFavorite = (specialistId)=>request(`/favorites/specialists/${specialistId}`, { method: 'DELETE' }); // ─── Admin ───────────────────────────────────────────────────────────────── // ─── Admin Categories ────────────────────────────────────────────────────── const getAdminCategories = ()=>request('/admin/categories'); const createCategory = (data)=>request('/admin/categories', { method: 'POST', body: JSON.stringify(data) }); const updateCategory = (id, data)=>request(`/admin/categories/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); const deleteCategory = (id)=>request(`/admin/categories/${id}`, { method: 'DELETE' }); // ─── Admin Skills ────────────────────────────────────────────────────────── const getAdminSkills = (categorySlug)=>request(`/admin/skills?categorySlug=${encodeURIComponent(categorySlug)}`); const createSkill = (data)=>request('/admin/skills', { method: 'POST', body: JSON.stringify(data) }); const updateSkill = (id, data)=>request(`/admin/skills/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); const deleteSkill = (id)=>request(`/admin/skills/${id}`, { method: 'DELETE' }); const getSkillDedup = (categorySlug)=>request(`/admin/skills/dedup${categorySlug ? `?categorySlug=${encodeURIComponent(categorySlug)}` : ''}`); const mergeSkillDuplicates = (keepId, deleteIds)=>request('/admin/skills/dedup/merge', { method: 'POST', body: JSON.stringify({ keepId, deleteIds }) }); // ─── Admin ───────────────────────────────────────────────────────────────── const getAdminStats = ()=>request('/admin/stats'); const getAdminUsers = (page = 1, q, role)=>{ const p = new URLSearchParams({ page: String(page), limit: '20' }); if (q) p.set('q', q); if (role) p.set('role', role); return request(`/admin/users?${p}`); }; const deactivateUser = (id)=>request(`/admin/users/${id}/deactivate`, { method: 'PATCH' }); const activateUser = (id)=>request(`/admin/users/${id}/activate`, { method: 'PATCH' }); const changeUserRole = (id, role)=>request(`/admin/users/${id}/role`, { method: 'PATCH', body: JSON.stringify({ role }) }); const getAdminUser = (id)=>request(`/admin/users/${id}`); const getAdminUserSpecialistCards = (userId)=>request(`/admin/users/${userId}/specialist-cards`); const adminUpdateSpecialistCard = (id, data)=>request(`/admin/specialist-cards/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); const getAdminSpecialistCards = (page = 1, status)=>{ const p = new URLSearchParams({ page: String(page), limit: '20' }); if (status && status !== 'all') p.set('status', status); return request(`/admin/specialist-cards?${p}`); }; const updateAdminUser = (id, data)=>request(`/admin/users/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); const verifyAdminUserEmail = (id)=>request(`/admin/users/${id}/verify-email`, { method: 'PATCH' }); const getAdminTasks = (page = 1, q, status)=>{ const p = new URLSearchParams({ page: String(page), limit: '20' }); if (q) p.set('q', q); if (status) p.set('status', status); return request(`/admin/tasks?${p}`); }; const cancelTaskAdmin = (id)=>request(`/admin/tasks/${id}/cancel`, { method: 'PATCH' }); const deleteTaskAdmin = (id)=>request(`/admin/tasks/${id}`, { method: 'DELETE' }); const getAdminReports = (page = 1, status)=>{ const p = new URLSearchParams({ page: String(page), limit: '20' }); if (status && status !== 'all') p.set('status', status); return request(`/admin/reports?${p}`); }; const updateReportStatus = (id, status)=>request(`/admin/reports/${id}/status`, { method: 'PATCH', body: JSON.stringify({ status }) }); const getAdminAiLogs = (page = 1)=>request(`/admin/ai-logs?page=${page}&limit=50`); const getAdminActivityLogs = (params = {})=>{ const p = new URLSearchParams(); if (params.page) p.set('page', String(params.page)); if (params.event) p.set('event', params.event); if (params.userId) p.set('userId', params.userId); if (params.dateFrom) p.set('dateFrom', params.dateFrom); if (params.dateTo) p.set('dateTo', params.dateTo); p.set('limit', '50'); return request(`/admin/activity-logs?${p}`); }; const getAdminMailLogs = (params = {})=>{ const p = new URLSearchParams(); if (params.page) p.set('page', String(params.page)); if (params.event) p.set('event', params.event); if (params.dateFrom) p.set('dateFrom', params.dateFrom); if (params.dateTo) p.set('dateTo', params.dateTo); p.set('limit', '50'); return request(`/admin/mail-logs?${p}`); }; const getAdminNotifLogs = (params = {})=>{ const p = new URLSearchParams(); if (params.page) p.set('page', String(params.page)); if (params.type) p.set('type', params.type); if (params.dateFrom) p.set('dateFrom', params.dateFrom); if (params.dateTo) p.set('dateTo', params.dateTo); p.set('limit', '50'); return request(`/admin/notification-logs?${p}`); }; const getAdminNotifStats = ()=>request('/admin/notification-stats'); const getAdminMailStats = ()=>request('/admin/mail-stats'); const getAdminReferrals = ()=>request('/admin/referrals'); const adminSendPushToUser = (userId, data)=>request(`/admin/push/user/${userId}`, { method: 'POST', body: JSON.stringify(data) }); const adminBroadcastPush = (data)=>request('/admin/push/broadcast', { method: 'POST', body: JSON.stringify(data) }); // ─── Admin Locations ─────────────────────────────────────────────────────── const getAdminLocations = ()=>request('/admin/locations'); const createLocation = (data)=>request('/admin/locations', { method: 'POST', body: JSON.stringify(data) }); const updateLocation = (id, data)=>request(`/admin/locations/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); const deleteLocation = (id)=>request(`/admin/locations/${id}`, { method: 'DELETE' }); // ─── Admin Plans ─────────────────────────────────────────────────────────── const getAdminPlans = ()=>request('/admin/plans'); const createPlan = (data)=>request('/admin/plans', { method: 'POST', body: JSON.stringify(data) }); const updatePlan = (id, data)=>request(`/admin/plans/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); const deletePlan = (id)=>request(`/admin/plans/${id}`, { method: 'DELETE' }); // ─── Admin Settings ──────────────────────────────────────────────────────── const getAdminSettings = ()=>request('/admin/settings'); const updateAdminSettings = (data)=>request('/admin/settings', { method: 'PUT', body: JSON.stringify(data) }); const getAdminEmailTemplates = ()=>request('/admin/settings/templates'); const updateAdminEmailTemplate = (key, data)=>request(`/admin/settings/templates/${key}`, { method: 'PUT', body: JSON.stringify(data) }); const translateAdminEmailTemplate = (data)=>request('/admin/settings/templates/translate', { method: 'POST', body: JSON.stringify(data) }); const sendTestEmail = ()=>request('/admin/settings/test-email', { method: 'POST' }); const testTelegramConnection = (botToken, chatId)=>fetch(`${BASE}/api/admin/settings/test-telegram`, { method: 'POST', credentials: 'include', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ botToken, chatId }) }).then((r)=>r.json()); const verifyTelegramToken = (botToken)=>fetch(`${BASE}/api/admin/settings/verify-telegram-token`, { method: 'POST', credentials: 'include', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ botToken }) }).then((r)=>r.json()); const getTranslationsStats = ()=>request('/admin/translations/stats'); const getTranslationsMissing = (table, missingLang, page = 1, limit = 50)=>request(`/admin/translations/${table}?missingLang=${missingLang}&page=${page}&limit=${limit}`); const saveTranslations = (table, items)=>request(`/admin/translations/${table}/save`, { method: 'POST', body: JSON.stringify({ items }) }); const autoTranslate = (table, missingLang, fromLang, batchSize = 500)=>request('/admin/translations/auto-translate', { method: 'POST', body: JSON.stringify({ table, missingLang, fromLang, batchSize }) }); const autoTranslateTasks = (batchSize = 500)=>request('/admin/translations/auto-translate-tasks', { method: 'POST', body: JSON.stringify({ batchSize }) }); const getTasksTranslationPreview = (lang, limit = 50)=>request(`/admin/translations/tasks-preview?lang=${lang}&limit=${limit}`); const autoTranslateEmailTemplates = (missingLang, fromLang = 'el')=>request('/admin/translations/auto-translate-templates', { method: 'POST', body: JSON.stringify({ missingLang, fromLang }) }); // ─── Availability ────────────────────────────────────────────────────────── const getMyAvailability = (month)=>request(`/availability/my${month ? `?month=${month}` : ''}`); const setAvailability = (date, status, note)=>request('/availability/set', { method: 'POST', body: JSON.stringify({ date, status, note }) }); const setAvailabilityRange = (from, to, status)=>request('/availability/set-range', { method: 'POST', body: JSON.stringify({ from, to, status }) }); const getSpecialistAvailability = (userId, month)=>request(`/availability/user/${userId}${month ? `?month=${month}` : ''}`); const getMyPortfolio = ()=>request('/portfolio/my'); const addPortfolioItem = (formData)=>fetch(`${BASE}/api/portfolio`, { method: 'POST', credentials: 'include', body: formData }).then(async (res)=>{ if (!res.ok) { const err = await res.json().catch(()=>({ error: res.statusText })); throw new Error(err.error || 'Upload failed'); } return res.json(); }); const updatePortfolioItem = (id, data)=>request(`/portfolio/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); const deletePortfolioItem = (id)=>request(`/portfolio/${id}`, { method: 'DELETE' }); const getSpecialistPortfolio = (userId)=>request(`/portfolio/user/${userId}`); const getMySpecialistCards = ()=>request('/specialist-cards/my'); const createSpecialistCard = (data)=>request('/specialist-cards', { method: 'POST', body: JSON.stringify(data) }); const updateSpecialistCard = (id, data)=>request(`/specialist-cards/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); const saveSiteSeo = (data)=>request('/users/me/site-seo', { method: 'POST', body: JSON.stringify(data) }); const deleteSpecialistCard = (id)=>request(`/specialist-cards/${id}`, { method: 'DELETE' }); const getSpecialistCards = (userId, locale)=>request(`/specialist-cards/user/${userId}${locale ? `?locale=${encodeURIComponent(locale)}` : ''}`); const getPriceList = (cardId, locale)=>request(`/price-list/${cardId}${locale ? `?locale=${encodeURIComponent(locale)}` : ''}`); const createPriceListGroup = (cardId, data)=>request(`/price-list/${cardId}/groups`, { method: 'POST', body: JSON.stringify(data) }); const updatePriceListGroup = (groupId, data)=>request(`/price-list/groups/${groupId}`, { method: 'PATCH', body: JSON.stringify(data) }); const deletePriceListGroup = (groupId)=>request(`/price-list/groups/${groupId}`, { method: 'DELETE' }); const createPriceListItem = (groupId, data)=>request(`/price-list/groups/${groupId}/items`, { method: 'POST', body: JSON.stringify(data) }); const updatePriceListItem = (itemId, data)=>request(`/price-list/items/${itemId}`, { method: 'PATCH', body: JSON.stringify(data) }); const deletePriceListItem = (itemId)=>request(`/price-list/items/${itemId}`, { method: 'DELETE' }); const getSkillSuggestions = (categorySlugs)=>{ const params = categorySlugs?.length ? '?' + categorySlugs.map((s)=>`category=${encodeURIComponent(s)}`).join('&') : ''; return request(`/skill-suggestions${params}`); }; const initiateTopUp = (amount)=>request('/payments/topup/init', { method: 'POST', body: JSON.stringify({ amount }) }); const getPaymentHistory = ()=>request('/payments/history'); const getBalanceHistory = (limit = 50)=>request(`/payments/balance-history?limit=${limit}`); const getPlanHistory = (limit = 50)=>request(`/users/me/plan-history?limit=${limit}`); const getAdminBalanceHistory = (params = {})=>{ const p = new URLSearchParams(); if (params.page) p.set('page', String(params.page)); if (params.userId) p.set('userId', params.userId); if (params.kind) p.set('kind', params.kind); p.set('limit', '50'); return request(`/admin/balance-history?${p}`); }; const adminTopUpUserBalance = (id, data)=>request(`/admin/users/${id}/balance/topup`, { method: 'POST', body: JSON.stringify(data) }); const adminWithdrawUserBalance = (id, data)=>request(`/admin/users/${id}/balance/withdraw`, { method: 'POST', body: JSON.stringify(data) }); const previewPlanChange = (planId)=>request('/payments/plan/preview', { method: 'POST', body: JSON.stringify({ planId }) }); const getPlans = (role)=>{ const qs = role ? `?role=${role}` : ''; return request(`/plans${qs}`); }; const getMyDashboard = ()=>request('/dashboard/me'); const getDailyUsage = ()=>request('/plans/daily-usage'); const purchasePlan = (planId, payFromBalance = true)=>request('/payments/plan/purchase', { method: 'POST', body: JSON.stringify({ planId, payFromBalance }) }); // ─── Statuses ────────────────────────────────────────────────────────────── const getMyStatuses = ()=>request('/statuses/me'); const toggleStatus = (statusType, active)=>request('/statuses/toggle', { method: 'POST', body: JSON.stringify({ statusType, active }) }); const getAutoResponseSettings = ()=>request('/auto-response'); const updateAutoResponseSettings = (data)=>request('/auto-response', { method: 'PUT', body: JSON.stringify(data) }); // ─── FOMO ────────────────────────────────────────────────────────────────── const getSpecialistFomoDashboard = ()=>request('/fomo/specialist'); const getCustomerFomoDashboard = ()=>request('/fomo/customer'); const getFomoRecommendations = ()=>request('/fomo/recommendations'); // ─── Auto-match ──────────────────────────────────────────────────────────── const getAutoMatchResults = (taskId)=>request(`/auto-match/${taskId}`); const runAutoMatch = (taskId)=>request(`/auto-match/${taskId}`, { method: 'POST' }); // ─── Google Calendar ─────────────────────────────────────────────────────── const getGoogleCalendarStatus = ()=>request('/google/calendar/status'); const disconnectGoogleCalendar = ()=>request('/google/calendar/disconnect', { method: 'DELETE' }); const importFromGoogleCalendar = ()=>request('/google/calendar/import', { method: 'POST' }); const getGoogleCalendarConnectUrl = ()=>`${BASE}/api/google/calendar/connect`; // ─── Personal site ───────────────────────────────────────────────────────── const getPublicSiteProfile = (slug)=>request(`/users/site/${slug}`); const getSiteStats = ()=>request('/users/me/site-stats'); const trackSiteMessage = (slug)=>request(`/users/site/${slug}/track-message`, { method: 'POST' }).catch(()=>{}); // ─── Task stats (FOMO) ───────────────────────────────────────────────────── const getTaskStats = (taskId)=>request(`/tasks/${taskId}/stats`); // ─── Support tickets ─────────────────────────────────────────────────────── const sendPublicSupportMessage = (data)=>request('/support/public', { method: 'POST', body: JSON.stringify(data) }); const createSupportTicket = (data)=>request('/support', { method: 'POST', body: JSON.stringify(data) }); const getMySupportTickets = (page = 1)=>request(`/support/my?page=${page}`); const getAdminSupportTickets = (params)=>request(`/support${params ? '?' + new URLSearchParams(params) : ''}`); const replyToSupportTicket = (id, data)=>request(`/support/${id}/reply`, { method: 'PATCH', body: JSON.stringify(data) }); const setSupportTicketStatus = (id, status)=>request(`/support/${id}/status`, { method: 'PATCH', body: JSON.stringify({ status }) }); /***/ })   &/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ $7: () => (/* binding */ updateCategory), /* harmony export */ $H: () => (/* binding */ acceptOffer), /* harmony export */ $M: () => (/* binding */ getUnreadCount), /* harmony export */ Bb: () => (/* binding */ getMySpecialistCards), /* harmony export */ Bm: () => (/* binding */ getUserRating), /* harmony export */ Bq: () => (/* binding */ getSpecialistCards), /* harmony export */ Br: () => (/* binding */ getAdminNotifLogs), /* harmony export */ C0: () => (/* binding */ applyMyReferral), /* harmony export */ CX: () => (/* binding */ updateAdminSettings), /* harmony export */ Ck: () => (/* binding */ getPriceList), /* harmony export */ Cs: () => (/* binding */ previewPlanChange), /* harmony export */ D1: () => (/* binding */ setAvailabilityRange), /* harmony export */ Em: () => (/* binding */ request), /* harmony export */ F7: () => (/* binding */ getSpecialists), /* harmony export */ F9: () => (/* binding */ getTaskInvite), /* harmony export */ FI: () => (/* binding */ sendTestEmail), /* harmony export */ Fu: () => (/* binding */ getMyTasks), /* harmony export */ GB: () => (/* binding */ deleteTaskAdmin), /* harmony export */ GE: () => (/* binding */ getSkillDedup), /* harmony export */ Gp: () => (/* binding */ getAutoResponseSettings), /* harmony export */ H: () => (/* binding */ getMyDashboard), /* harmony export */ H6: () => (/* binding */ getTaskReviews), /* harmony export */ He: () => (/* binding */ activateUser), /* harmony export */ I: () => (/* binding */ autoTranslateTasks), /* harmony export */ Ic: () => (/* binding */ deletePriceListGroup), /* harmony export */ Ip: () => (/* binding */ markRead), /* harmony export */ Je: () => (/* binding */ purchasePlan), /* harmony export */ K7: () => (/* binding */ deleteCategory), /* harmony export */ KD: () => (/* binding */ getAdminCategories), /* harmony export */ KZ: () => (/* binding */ getAdminSupportTickets), /* harmony export */ Lb: () => (/* binding */ declineOffer), /* harmony export */ Lp: () => (/* binding */ getAdminEmailTemplates), /* harmony export */ ML: () => (/* binding */ getCustomerFomoDashboard), /* harmony export */ Mm: () => (/* binding */ changeUserRole), /* harmony export */ NL: () => (/* binding */ markAllRead), /* harmony export */ Nt: () => (/* binding */ updateLocation), /* harmony export */ O8: () => (/* binding */ sendPublicSupportMessage), /* harmony export */ OM: () => (/* binding */ setAvailability), /* harmony export */ OV: () => (/* binding */ runAutoMatch), /* harmony export */ OX: () => (/* binding */ getAdminPlans), /* harmony export */ On: () => (/* binding */ getCanMessage), /* harmony export */ P0: () => (/* binding */ adminTopUpUserBalance), /* harmony export */ QN: () => (/* binding */ getOrCreateDirectRoom), /* harmony export */ QY: () => (/* binding */ getTasksTranslationPreview), /* harmony export */ RN: () => (/* binding */ getSiteStats), /* harmony export */ RQ: () => (/* binding */ updateAutoResponseSettings), /* harmony export */ Rt: () => (/* binding */ completeTask), /* harmony export */ S$: () => (/* binding */ getPublicSiteProfile), /* harmony export */ S9: () => (/* binding */ createSkill), /* harmony export */ Sw: () => (/* binding */ getOffers), /* harmony export */ T9: () => (/* binding */ getPlans), /* harmony export */ Tr: () => (/* binding */ getNotifications), /* harmony export */ U9: () => (/* binding */ deletePriceListItem), /* harmony export */ UE: () => (/* binding */ trackSiteMessage), /* harmony export */ UT: () => (/* binding */ createTask), /* harmony export */ Uq: () => (/* binding */ mergeSkillDuplicates), /* harmony export */ V: () => (/* binding */ addSpecialistFavorite), /* harmony export */ V7: () => (/* binding */ adminBroadcastPush), /* harmony export */ VL: () => (/* binding */ getMessages), /* harmony export */ VM: () => (/* binding */ getUserProfile), /* harmony export */ Vs: () => (/* binding */ getLocations), /* harmony export */ Wi: () => (/* binding */ deactivateUser), /* harmony export */ Xz: () => (/* binding */ getSpecialistAvailability), /* harmony export */ YQ: () => (/* binding */ getTranslationsStats), /* harmony export */ Yj: () => (/* binding */ getAdminTasks), /* harmony export */ Z2: () => (/* binding */ createPriceListItem), /* harmony export */ Zp: () => (/* binding */ getChatRooms), /* harmony export */ _z: () => (/* binding */ sendMessage), /* harmony export */ aT: () => (/* binding */ getMyOffers), /* harmony export */ bR: () => (/* binding */ deletePlan), /* harmony export */ bW: () => (/* binding */ getCategories), /* harmony export */ bc: () => (/* binding */ toggleStatus), /* harmony export */ bi: () => (/* binding */ getAdminNotifStats), /* harmony export */ bx: () => (/* binding */ createReview), /* harmony export */ cJ: () => (/* binding */ getAdminReferrals), /* harmony export */ cS: () => (/* binding */ getAdminUsers), /* harmony export */ cl: () => (/* binding */ verifyTelegramToken), /* harmony export */ cp: () => (/* binding */ autoTranslate), /* harmony export */ dE: () => (/* binding */ getAdminStats), /* harmony export */ eR: () => (/* binding */ createSpecialistCard), /* harmony export */ eU: () => (/* binding */ updateReportStatus), /* harmony export */ ew: () => (/* binding */ getPlanHistory), /* harmony export */ f5: () => (/* binding */ deleteSpecialistCard), /* harmony export */ fP: () => (/* binding */ updateSkill), /* harmony export */ fm: () => (/* binding */ getBalanceHistory), /* harmony export */ fu: () => (/* binding */ autoTranslateEmailTemplates), /* harmony export */ g0: () => (/* binding */ getAdminBalanceHistory), /* harmony export */ g1: () => (/* binding */ adminSendPushToUser), /* harmony export */ gg: () => (/* binding */ getTask), /* harmony export */ hD: () => (/* binding */ adminWithdrawUserBalance), /* harmony export */ hl: () => (/* binding */ updatePortfolioItem), /* harmony export */ hp: () => (/* binding */ deleteSkill), /* harmony export */ iN: () => (/* binding */ getMyAvailability), /* harmony export */ i_: () => (/* binding */ getAdminSkills), /* harmony export */ j_: () => (/* binding */ getAdminAiLogs), /* harmony export */ jd: () => (/* binding */ getAdminUser), /* harmony export */ jg: () => (/* binding */ updateAdminEmailTemplate), /* harmony export */ k_: () => (/* binding */ getAdminLocations), /* harmony export */ lC: () => (/* binding */ updateTask), /* harmony export */ mq: () => (/* binding */ createSupportTicket), /* harmony export */ nT: () => (/* binding */ replyToSupportTicket), /* harmony export */ nf: () => (/* binding */ cancelTaskAdmin), /* harmony export */ oD: () => (/* binding */ updatePriceListGroup), /* harmony export */ oh: () => (/* binding */ initiateTopUp), /* harmony export */ oq: () => (/* binding */ adminUpdateSpecialistCard), /* harmony export */ pD: () => (/* binding */ getSpecialistFavorites), /* harmony export */ pK: () => (/* binding */ getPaymentHistory), /* harmony export */ q7: () => (/* binding */ getMyReviews), /* harmony export */ qT: () => (/* binding */ createPlan), /* harmony export */ qX: () => (/* binding */ testTelegramConnection), /* harmony export */ qt: () => (/* binding */ getAdminMailLogs), /* harmony export */ rC: () => (/* binding */ getAdminSettings), /* harmony export */ rl: () => (/* binding */ getSkillSuggestions), /* harmony export */ sD: () => (/* binding */ removeSpecialistFavorite), /* harmony export */ s_: () => (/* binding */ getAdminSpecialistCards), /* harmony export */ st: () => (/* binding */ getMyReferralInfo), /* harmony export */ td: () => (/* binding */ updatePlan), /* harmony export */ ts: () => (/* binding */ createOffer), /* harmony export */ u0: () => (/* binding */ setSupportTicketStatus), /* harmony export */ u4: () => (/* binding */ getAdminMailStats), /* harmony export */ uQ: () => (/* binding */ verifyAdminUserEmail), /* harmony export */ v9: () => (/* binding */ getUserReviews), /* harmony export */ vD: () => (/* binding */ createPriceListGroup), /* harmony export */ vh: () => (/* binding */ getTaskStats), /* harmony export */ vy: () => (/* binding */ getAdminUserSpecialistCards), /* harmony export */ wc: () => (/* binding */ translateAdminEmailTemplate), /* harmony export */ wl: () => (/* binding */ updateAdminUser), /* harmony export */ yJ: () => (/* binding */ createLocation), /* harmony export */ yO: () => (/* binding */ getAdminActivityLogs), /* harmony export */ yk: () => (/* binding */ dismissNotification), /* harmony export */ z4: () => (/* binding */ getDailyUsage), /* harmony export */ z5: () => (/* binding */ getAdminReports), /* harmony export */ z6: () => (/* binding */ getMyStatuses), /* harmony export */ zB: () => (/* binding */ deletePortfolioItem), /* harmony export */ zR: () => (/* binding */ deleteLocation), /* harmony export */ zZ: () => (/* binding */ createCategory), /* harmony export */ zc: () => (/* binding */ updateSpecialistCard), /* harmony export */ zk: () => (/* binding */ getSpecialistFomoDashboard) /* harmony export */ }); /* unused harmony exports getTasks, getTaskBudgetRange, searchTasks, getTasksForSpecialist, getTaskCountsByCategory, cancelTask, updateNotifSettings, getFavorites, addFavorite, removeFavorite, getTranslationsMissing, saveTranslations, getMyPortfolio, addPortfolioItem, getSpecialistPortfolio, saveSiteSeo, updatePriceListItem, getFomoRecommendations, getAutoMatchResults, getGoogleCalendarStatus, disconnectGoogleCalendar, importFromGoogleCalendar, getGoogleCalendarConnectUrl, getMySupportTickets */ [j// SSR: use INTERNAL_API_URL (http://localhost:4000) to avoid external DNS/SSL round-trip // Browser: use NEXT_PUBLIC_API_URL (https://api.canhelp.gr) const BASE = "undefined" === 'undefined' ? process.env.INTERNAL_API_URL || 'http://localhost:4000' : process.env.NEXT_PUBLIC_API_URL || 'http://localhost:4000'; export async function request(path, init) { const url = `${BASE}/api${path}`; if ("undefined" === 'undefined') console.log('[api] SSR fetch', url); const res = await fetch(url, { ...init, credentials: 'include', headers: { 'Content-Type': 'application/json', ...init?.headers } }); if (!res.ok) { const err = await res.json().catch(()=>({ error: res.statusText })); const msg = typeof err.error === 'string' ? err.error : typeof err.message === 'string' ? err.message : res.statusText || 'Request failed'; throw new Error(msg); } return res.json(); } // ─── Tasks ──────────────────────────────────────────────────────────────── export const getTasks = (params)=>{ const qs = params ? '?' + new URLSearchParams(params) : ''; return request(`/tasks${qs}`); }; export const getTaskBudgetRange = (params)=>{ const qs = params ? '?' + new URLSearchParams(params) : ''; return request(`/tasks/budget-range${qs}`); }; export const searchTasks = (params)=>request(`/tasks/search?${new URLSearchParams(params)}`); export const getMyTasks = ()=>request('/tasks/my'); export const getTasksForSpecialist = (params)=>{ const qs = params ? '?' + new URLSearchParams(params) : ''; return request(`/tasks/for-me${qs}`); }; export const getTaskCountsByCategory = ()=>request('/tasks/counts-by-category'); export const getTask = (id)=>request(`/tasks/${id}`); export const createTask = (data)=>request('/tasks', { method: 'POST', body: JSON.stringify(data) }); export const updateTask = (id, data)=>request(`/tasks/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); export const completeTask = (id)=>request(`/tasks/${id}/complete`, { method: 'PATCH' }); export const cancelTask = (id)=>request(`/tasks/${id}/cancel`, { method: 'PATCH' }); // ─── Offers ──────────────────────────────────────────────────────────────── export const getOffers = (taskId)=>request(`/offers?taskId=${taskId}`); export const getMyOffers = ()=>request('/offers/my'); export const createOffer = (data)=>request('/offers', { method: 'POST', body: JSON.stringify(data) }); export const acceptOffer = (id)=>request(`/offers/${id}/accept`, { method: 'PATCH' }); export const declineOffer = (id)=>request(`/offers/${id}/decline`, { method: 'PATCH' }); export const getUserProfile = (id, locale)=>request(`/users/${id}/profile${locale ? `?locale=${encodeURIComponent(locale)}` : ''}`); export const getSpecialists = (params)=>{ const qs = params ? '?' + new URLSearchParams(params) : ''; return request(`/users/specialists${qs}`); }; export const createReview = (data)=>request('/reviews', { method: 'POST', body: JSON.stringify(data) }); export const getTaskReviews = (taskId)=>request(`/reviews/task/${taskId}`); export const getMyReviews = ()=>request('/reviews/my'); // ─── Chat ────────────────────────────────────────────────────────────────── export const getChatRooms = ()=>request('/chat/rooms'); export const getOrCreateDirectRoom = (userId)=>request(`/chat/direct/${userId}`); export const getCanMessage = (userId)=>request(`/chat/can-message/${userId}`); export const getMessages = (roomId)=>request(`/chat/rooms/${roomId}/messages`); export const sendMessage = (roomId, body)=>request('/chat/messages', { method: 'POST', body: JSON.stringify({ roomId, body }) }); // ─── Notifications ──────────────────────────────────────────────────────── export const updateNotifSettings = (data)=>request('/users/me', { method: 'PATCH', body: JSON.stringify(data) }); export const getNotifications = ()=>request('/notifications'); export const getUnreadCount = ()=>request('/notifications/count'); export const markRead = (id)=>request(`/notifications/${id}/read`, { method: 'PATCH' }); export const markAllRead = ()=>request('/notifications/read-all', { method: 'PATCH' }); export const getTaskInvite = (taskId)=>request(`/notifications?type=task_invite&referenceId=${taskId}`); export const dismissNotification = (id)=>request(`/notifications/${id}`, { method: 'DELETE' }); // ─── Referral ───────────────────────────────────────────────────────────── export const getMyReferralInfo = ()=>request('/users/me/referral'); export const applyMyReferral = (refCode)=>request('/users/me/referral/apply', { method: 'POST', body: JSON.stringify({ refCode }) }); // ─── Reviews ────────────────────────────────────────────────────────────── export const getUserReviews = (userId)=>request(`/reviews/user/${userId}`); export const getUserRating = (userId)=>request(`/reviews/user/${userId}/rating`); // ─── Categories ─────────────────────────────────────────────────────────── export const getCategories = ()=>request('/categories'); // ─── Locations ──────────────────────────────────────────────────────────── export const getLocations = ()=>request('/locations'); // ─── Favorites ──────────────────────────────────────────────────────────── export const getFavorites = ()=>request('/favorites'); export const addFavorite = (taskId)=>request(`/favorites/${taskId}`, { method: 'POST' }); export const removeFavorite = (taskId)=>request(`/favorites/${taskId}`, { method: 'DELETE' }); export const getSpecialistFavorites = ()=>request('/favorites/specialists'); export const addSpecialistFavorite = (specialistId)=>request(`/favorites/specialists/${specialistId}`, { method: 'POST' }); export const removeSpecialistFavorite = (specialistId)=>request(`/favorites/specialists/${specialistId}`, { method: 'DELETE' }); // ─── Admin ───────────────────────────────────────────────────────────────── // ─── Admin Categories ────────────────────────────────────────────────────── export const getAdminCategories = ()=>request('/admin/categories'); export const createCategory = (data)=>request('/admin/categories', { method: 'POST', body: JSON.stringify(data) }); export const updateCategory = (id, data)=>request(`/admin/categories/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); export const deleteCategory = (id)=>request(`/admin/categories/${id}`, { method: 'DELETE' }); // ─── Admin Skills ────────────────────────────────────────────────────────── export const getAdminSkills = (categorySlug)=>request(`/admin/skills?categorySlug=${encodeURIComponent(categorySlug)}`); export const createSkill = (data)=>request('/admin/skills', { method: 'POST', body: JSON.stringify(data) }); export const updateSkill = (id, data)=>request(`/admin/skills/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); export const deleteSkill = (id)=>request(`/admin/skills/${id}`, { method: 'DELETE' }); export const getSkillDedup = (categorySlug)=>request(`/admin/skills/dedup${categorySlug ? `?categorySlug=${encodeURIComponent(categorySlug)}` : ''}`); export const mergeSkillDuplicates = (keepId, deleteIds)=>request('/admin/skills/dedup/merge', { method: 'POST', body: JSON.stringify({ keepId, deleteIds }) }); // ─── Admin ───────────────────────────────────────────────────────────────── export const getAdminStats = ()=>request('/admin/stats'); export const getAdminUsers = (page = 1, q, role)=>{ const p = new URLSearchParams({ page: String(page), limit: '20' }); if (q) p.set('q', q); if (role) p.set('role', role); return request(`/admin/users?${p}`); }; export const deactivateUser = (id)=>request(`/admin/users/${id}/deactivate`, { method: 'PATCH' }); export const activateUser = (id)=>request(`/admin/users/${id}/activate`, { method: 'PATCH' }); export const changeUserRole = (id, role)=>request(`/admin/users/${id}/role`, { method: 'PATCH', body: JSON.stringify({ role }) }); export const getAdminUser = (id)=>request(`/admin/users/${id}`); export const getAdminUserSpecialistCards = (userId)=>request(`/admin/users/${userId}/specialist-cards`); export const adminUpdateSpecialistCard = (id, data)=>request(`/admin/specialist-cards/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); export const getAdminSpecialistCards = (page = 1, status)=>{ const p = new URLSearchParams({ page: String(page), limit: '20' }); if (status && status !== 'all') p.set('status', status); return request(`/admin/specialist-cards?${p}`); }; export const updateAdminUser = (id, data)=>request(`/admin/users/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); export const verifyAdminUserEmail = (id)=>request(`/admin/users/${id}/verify-email`, { method: 'PATCH' }); export const getAdminTasks = (page = 1, q, status)=>{ const p = new URLSearchParams({ page: String(page), limit: '20' }); if (q) p.set('q', q); if (status) p.set('status', status); return request(`/admin/tasks?${p}`); }; export const cancelTaskAdmin = (id)=>request(`/admin/tasks/${id}/cancel`, { method: 'PATCH' }); export const deleteTaskAdmin = (id)=>request(`/admin/tasks/${id}`, { method: 'DELETE' }); export const getAdminReports = (page = 1, status)=>{ const p = new URLSearchParams({ page: String(page), limit: '20' }); if (status && status !== 'all') p.set('status', status); return request(`/admin/reports?${p}`); }; export const updateReportStatus = (id, status)=>request(`/admin/reports/${id}/status`, { method: 'PATCH', body: JSON.stringify({ status }) }); export const getAdminAiLogs = (page = 1)=>request(`/admin/ai-logs?page=${page}&limit=50`); export const getAdminActivityLogs = (params = {})=>{ const p = new URLSearchParams(); if (params.page) p.set('page', String(params.page)); if (params.event) p.set('event', params.event); if (params.userId) p.set('userId', params.userId); if (params.dateFrom) p.set('dateFrom', params.dateFrom); if (params.dateTo) p.set('dateTo', params.dateTo); p.set('limit', '50'); return request(`/admin/activity-logs?${p}`); }; export const getAdminMailLogs = (params = {})=>{ const p = new URLSearchParams(); if (params.page) p.set('page', String(params.page)); if (params.event) p.set('event', params.event); if (params.dateFrom) p.set('dateFrom', params.dateFrom); if (params.dateTo) p.set('dateTo', params.dateTo); p.set('limit', '50'); return request(`/admin/mail-logs?${p}`); }; export const getAdminNotifLogs = (params = {})=>{ const p = new URLSearchParams(); if (params.page) p.set('page', String(params.page)); if (params.type) p.set('type', params.type); if (params.dateFrom) p.set('dateFrom', params.dateFrom); if (params.dateTo) p.set('dateTo', params.dateTo); p.set('limit', '50'); return request(`/admin/notification-logs?${p}`); }; export const getAdminNotifStats = ()=>request('/admin/notification-stats'); export const getAdminMailStats = ()=>request('/admin/mail-stats'); export const getAdminReferrals = ()=>request('/admin/referrals'); export const adminSendPushToUser = (userId, data)=>request(`/admin/push/user/${userId}`, { method: 'POST', body: JSON.stringify(data) }); export const adminBroadcastPush = (data)=>request('/admin/push/broadcast', { method: 'POST', body: JSON.stringify(data) }); // ─── Admin Locations ─────────────────────────────────────────────────────── export const getAdminLocations = ()=>request('/admin/locations'); export const createLocation = (data)=>request('/admin/locations', { method: 'POST', body: JSON.stringify(data) }); export const updateLocation = (id, data)=>request(`/admin/locations/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); export const deleteLocation = (id)=>request(`/admin/locations/${id}`, { method: 'DELETE' }); // ─── Admin Plans ─────────────────────────────────────────────────────────── export const getAdminPlans = ()=>request('/admin/plans'); export const createPlan = (data)=>request('/admin/plans', { method: 'POST', body: JSON.stringify(data) }); export const updatePlan = (id, data)=>request(`/admin/plans/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); export const deletePlan = (id)=>request(`/admin/plans/${id}`, { method: 'DELETE' }); // ─── Admin Settings ──────────────────────────────────────────────────────── export const getAdminSettings = ()=>request('/admin/settings'); export const updateAdminSettings = (data)=>request('/admin/settings', { method: 'PUT', body: JSON.stringify(data) }); export const getAdminEmailTemplates = ()=>request('/admin/settings/templates'); export const updateAdminEmailTemplate = (key, data)=>request(`/admin/settings/templates/${key}`, { method: 'PUT', body: JSON.stringify(data) }); export const translateAdminEmailTemplate = (data)=>request('/admin/settings/templates/translate', { method: 'POST', body: JSON.stringify(data) }); export const sendTestEmail = ()=>request('/admin/settings/test-email', { method: 'POST' }); export const testTelegramConnection = (botToken, chatId)=>fetch(`${BASE}/api/admin/settings/test-telegram`, { method: 'POST', credentials: 'include', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ botToken, chatId }) }).then((r)=>r.json()); export const verifyTelegramToken = (botToken)=>fetch(`${BASE}/api/admin/settings/verify-telegram-token`, { method: 'POST', credentials: 'include', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ botToken }) }).then((r)=>r.json()); export const getTranslationsStats = ()=>request('/admin/translations/stats'); export const getTranslationsMissing = (table, missingLang, page = 1, limit = 50)=>request(`/admin/translations/${table}?missingLang=${missingLang}&page=${page}&limit=${limit}`); export const saveTranslations = (table, items)=>request(`/admin/translations/${table}/save`, { method: 'POST', body: JSON.stringify({ items }) }); export const autoTranslate = (table, missingLang, fromLang, batchSize = 500)=>request('/admin/translations/auto-translate', { method: 'POST', body: JSON.stringify({ table, missingLang, fromLang, batchSize }) }); export const autoTranslateTasks = (batchSize = 500)=>request('/admin/translations/auto-translate-tasks', { method: 'POST', body: JSON.stringify({ batchSize }) }); export const getTasksTranslationPreview = (lang, limit = 50)=>request(`/admin/translations/tasks-preview?lang=${lang}&limit=${limit}`); export const autoTranslateEmailTemplates = (missingLang, fromLang = 'el')=>request('/admin/translations/auto-translate-templates', { method: 'POST', body: JSON.stringify({ missingLang, fromLang }) }); // ─── Availability ────────────────────────────────────────────────────────── export const getMyAvailability = (month)=>request(`/availability/my${month ? `?month=${month}` : ''}`); export const setAvailability = (date, status, note)=>request('/availability/set', { method: 'POST', body: JSON.stringify({ date, status, note }) }); export const setAvailabilityRange = (from, to, status)=>request('/availability/set-range', { method: 'POST', body: JSON.stringify({ from, to, status }) }); export const getSpecialistAvailability = (userId, month)=>request(`/availability/user/${userId}${month ? `?month=${month}` : ''}`); export const getMyPortfolio = ()=>request('/portfolio/my'); export const addPortfolioItem = (formData)=>fetch(`${BASE}/api/portfolio`, { method: 'POST', credentials: 'include', body: formData }).then(async (res)=>{ if (!res.ok) { const err = await res.json().catch(()=>({ error: res.statusText })); throw new Error(err.error || 'Upload failed'); } return res.json(); }); export const updatePortfolioItem = (id, data)=>request(`/portfolio/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); export const deletePortfolioItem = (id)=>request(`/portfolio/${id}`, { method: 'DELETE' }); export const getSpecialistPortfolio = (userId)=>request(`/portfolio/user/${userId}`); export const getMySpecialistCards = ()=>request('/specialist-cards/my'); export const createSpecialistCard = (data)=>request('/specialist-cards', { method: 'POST', body: JSON.stringify(data) }); export const updateSpecialistCard = (id, data)=>request(`/specialist-cards/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); export const saveSiteSeo = (data)=>request('/users/me/site-seo', { method: 'POST', body: JSON.stringify(data) }); export const deleteSpecialistCard = (id)=>request(`/specialist-cards/${id}`, { method: 'DELETE' }); export const getSpecialistCards = (userId, locale)=>request(`/specialist-cards/user/${userId}${locale ? `?locale=${encodeURIComponent(locale)}` : ''}`); export const getPriceList = (cardId, locale)=>request(`/price-list/${cardId}${locale ? `?locale=${encodeURIComponent(locale)}` : ''}`); export const createPriceListGroup = (cardId, data)=>request(`/price-list/${cardId}/groups`, { method: 'POST', body: JSON.stringify(data) }); export const updatePriceListGroup = (groupId, data)=>request(`/price-list/groups/${groupId}`, { method: 'PATCH', body: JSON.stringify(data) }); export const deletePriceListGroup = (groupId)=>request(`/price-list/groups/${groupId}`, { method: 'DELETE' }); export const createPriceListItem = (groupId, data)=>request(`/price-list/groups/${groupId}/items`, { method: 'POST', body: JSON.stringify(data) }); export const updatePriceListItem = (itemId, data)=>request(`/price-list/items/${itemId}`, { method: 'PATCH', body: JSON.stringify(data) }); export const deletePriceListItem = (itemId)=>request(`/price-list/items/${itemId}`, { method: 'DELETE' }); export const getSkillSuggestions = (categorySlugs)=>{ const params = categorySlugs?.length ? '?' + categorySlugs.map((s)=>`category=${encodeURIComponent(s)}`).join('&') : ''; return request(`/skill-suggestions${params}`); }; export const initiateTopUp = (amount)=>request('/payments/topup/init', { method: 'POST', body: JSON.stringify({ amount }) }); export const getPaymentHistory = ()=>request('/payments/history'); export const getBalanceHistory = (limit = 50)=>request(`/payments/balance-history?limit=${limit}`); export const getPlanHistory = (limit = 50)=>request(`/users/me/plan-history?limit=${limit}`); export const getAdminBalanceHistory = (params = {})=>{ const p = new URLSearchParams(); if (params.page) p.set('page', String(params.page)); if (params.userId) p.set('userId', params.userId); if (params.kind) p.set('kind', params.kind); p.set('limit', '50'); return request(`/admin/balance-history?${p}`); }; export const adminTopUpUserBalance = (id, data)=>request(`/admin/users/${id}/balance/topup`, { method: 'POST', body: JSON.stringify(data) }); export const adminWithdrawUserBalance = (id, data)=>request(`/admin/users/${id}/balance/withdraw`, { method: 'POST', body: JSON.stringify(data) }); export const previewPlanChange = (planId)=>request('/payments/plan/preview', { method: 'POST', body: JSON.stringify({ planId }) }); export const getPlans = (role)=>{ const qs = role ? `?role=${role}` : ''; return request(`/plans${qs}`); }; export const getMyDashboard = ()=>request('/dashboard/me'); export const getDailyUsage = ()=>request('/plans/daily-usage'); export const purchasePlan = (planId, payFromBalance = true)=>request('/payments/plan/purchase', { method: 'POST', body: JSON.stringify({ planId, payFromBalance }) }); // ─── Statuses ────────────────────────────────────────────────────────────── export const getMyStatuses = ()=>request('/statuses/me'); export const toggleStatus = (statusType, active)=>request('/statuses/toggle', { method: 'POST', body: JSON.stringify({ statusType, active }) }); export const getAutoResponseSettings = ()=>request('/auto-response'); export const updateAutoResponseSettings = (data)=>request('/auto-response', { method: 'PUT', body: JSON.stringify(data) }); // ─── FOMO ────────────────────────────────────────────────────────────────── export const getSpecialistFomoDashboard = ()=>request('/fomo/specialist'); export const getCustomerFomoDashboard = ()=>request('/fomo/customer'); export const getFomoRecommendations = ()=>request('/fomo/recommendations'); // ─── Auto-match ──────────────────────────────────────────────────────────── export const getAutoMatchResults = (taskId)=>request(`/auto-match/${taskId}`); export const runAutoMatch = (taskId)=>request(`/auto-match/${taskId}`, { method: 'POST' }); // ─── Google Calendar ─────────────────────────────────────────────────────── export const getGoogleCalendarStatus = ()=>request('/google/calendar/status'); export const disconnectGoogleCalendar = ()=>request('/google/calendar/disconnect', { method: 'DELETE' }); export const importFromGoogleCalendar = ()=>request('/google/calendar/import', { method: 'POST' }); export const getGoogleCalendarConnectUrl = ()=>`${BASE}/api/google/calendar/connect`; // ─── Personal site ───────────────────────────────────────────────────────── export const getPublicSiteProfile = (slug)=>request(`/users/site/${slug}`); export const getSiteStats = ()=>request('/users/me/site-stats'); export const trackSiteMessage = (slug)=>request(`/users/site/${slug}/track-message`, { method: 'POST' }).catch(()=>{}); // ─── Task stats (FOMO) ───────────────────────────────────────────────────── export const getTaskStats = (taskId)=>request(`/tasks/${taskId}/stats`); // ─── Support tickets ─────────────────────────────────────────────────────── export const sendPublicSupportMessage = (data)=>request('/support/public', { method: 'POST', body: JSON.stringify(data) }); export const createSupportTicket = (data)=>request('/support', { method: 'POST', body: JSON.stringify(data) }); export const getMySupportTickets = (page = 1)=>request(`/support/my?page=${page}`); export const getAdminSupportTickets = (params)=>request(`/support${params ? '?' + new URLSearchParams(params) : ''}`); export const replyToSupportTicket = (id, data)=>request(`/support/${id}/reply`, { method: 'PATCH', body: JSON.stringify(data) }); export const setSupportTicketStatus = (id, status)=>request(`/support/${id}/status`, { method: 'PATCH', body: JSON.stringify({ status }) });  164190 trueundefined2523090undefined312318undefined402428trueundefined10771083undefined12151221undefined13761382undefined14701476undefined15221528undefined16801686undefined17611767undefined18151821undefined19361942undefined20682074undefined21692175undefined23452351undefined24172423undefined24712477undefined25942600undefined26932699undefined27942800undefined29272933undefined30833089undefined32083214undefined32843290undefined34193425undefined34753481undefined35573563undefined36363642undefined37163722undefined39763982undefined41104116undefined41734179undefined42404246undefined43414347undefined44414447undefined45464552undefined47324738undefined48004806undefined50525058undefined51285134undefined52885294undefined54235429undefined55565562undefined56115617undefined57135719undefined58205826undefined58975903undefined60336039undefined63326338undefined64006406undefined65366542undefined66836689undefined68686874undefined69896995undefined71187124undefined72587264undefined73577363undefined75087514undefined77997805undefined78577863undefined81068112undefined82178223undefined83248330undefined84958501undefined85608566undefined86658671undefined88298835undefined90989104undefined92419247undefined93609366undefined96179623undefined97259731undefined98279833undefined1007910085undefined1026210268undefined1035310359undefined1080110807undefined1118611192undefined1157711583undefined1165311659undefined1172011726undefined1178611792undefined1194411950undefined1216712173undefined1223312239undefined1236812374undefined1251412520undefined1269812704undefined1275612762undefined1288312889undefined1302113027undefined1319713203undefined1326113267undefined1339913405undefined1347913485undefined1364413650undefined1381113817undefined1391513921undefined1426914275undefined1460014606undefined1467814684undefined1485614862undefined1504315049undefined1533115337undefined1553415540undefined1567015676undefined1600216008undefined1610616112undefined1631916325undefined1653916545undefined1667116677undefined1673116737undefined1715817164undefined1730317309undefined1740717413undefined1749317499undefined1756617572undefined1770817714undefined1786117867undefined1799518001undefined1810718113undefined1826018266undefined1839618402undefined1855718563undefined1872118727undefined1884418850undefined1901219018undefined1917219178undefined1929119297undefined1952419530undefined1969019696undefined1975719763undefined1985719863undefined1995119957undefined2028420290undefined2044620452undefined2061420620undefined2078620792undefined2090220908undefined2096220968undefined2102621032undefined2132421330undefined2138221388undefined2157921585undefined2164921655undefined2187221878undefined2194721953undefined2201822024undefined2217322179undefined2225222258undefined2243522441undefined2251422520undefined2263222638undefined2274422750undefined2290922915undefined2298522991undefined2305023056undefined2326123267undefined2341323419undefined2355723563undefined2368923695undefined2377323779undefined2389223898undefined2404224048undefined, /***/ 96484:  d5webpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource_/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; webpack/lib/util/registerExternalSerializerwebpack-sources/CachedSource 9webpack/lib/util/registerExternalSerializerwebpack-sources/ConcatSourcewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ LocaleProvider: () => (/* binding */ LocaleProvider), /* harmony export */ Y: () => (/* binding */ useLocale) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(78157); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(31768); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(71159); /* harmony import */ var _lib_translations__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(12998); webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSource /* __next_internal_client_entry_do_not_use__ LocaleProvider,useLocale auto */ import { jsx as _jsx } from "react/jsx-runtime"; import { createContext, useContext, useState, useEffect, useCallback } from 'react'; import { useRouter } from 'next/navigation'; import { getTranslations } from '@/lib/translations'; const COOKIE_KEY = 'canhelp_locale'; const DEFAULT_LOCALE = 'el'; const LocaleContext = /*#__PURE__*/ createContext({ locale: DEFAULT_LOCALE, setLocale: ()=>{}, t: (key)=>key }); function readCookieLocale() { if (typeof document === 'undefined') return DEFAULT_LOCALE; const match = document.cookie.match(/canhelp_locale=([^;]+)/); const val = match?.[1]; return val && [ 'el', 'en', 'uk', 'ru' ].includes(val) ? val : DEFAULT_LOCALE; } export function LocaleProvider({ children, initialLocale }) { const router = useRouter(); const [locale, setLocaleState] = useState(initialLocale ?? DEFAULT_LOCALE); // Sync from cookie on mount (client-side) process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ const cookieLocale = readCookieLocale(); if (cookieLocale !== locale) setLocaleState(cookieLocale); // Sync cookie locale to DB on first load (in case DB is out of sync) const apiBase = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:4000'; fetch(`${apiBase}/api/users/me`, { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, credentials: 'include', body: JSON.stringify({ locale: cookieLocale }) }).catch(()=>{}); }, []); const setLocale = useCallback((next)=>{ setLocaleState(next); document.cookie = `${COOKIE_KEY}=${next}; path=/; max-age=31536000; SameSite=Lax`; document.documentElement.lang = next; // Persist locale to user profile in DB (best-effort, non-blocking) const apiBase = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:4000'; fetch(`${apiBase}/api/users/me`, { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, credentials: 'include', body: JSON.stringify({ locale: next }) }).catch(()=>{}); // Re-render server components with new cookie router.refresh(); }, [ router ]); const t = useCallback((key, fallback)=>getTranslations(locale)(key, fallback), [ locale ]); return /*#__PURE__*/ _jsx(LocaleContext.Provider, { value: { locale, setLocale, t }, children: children }); } export function useLocale() { return useContext(LocaleContext); } cN}_5,2}@H*HMc ? B B  (0,react__WEBPACK_IMPORTED_MODULE_1__.createContext)(0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)"https://api.canhelp.gr"0(0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)0(0,_lib_translations__WEBPACK_IMPORTED_MODULE_3__/* .getTranslations */ .$)(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)buffersourcesizemapshash/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ LocaleProvider: () => (/* binding */ LocaleProvider), /* harmony export */ Y: () => (/* binding */ useLocale) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(78157); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(31768); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(71159); /* harmony import */ var _lib_translations__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(12998); /* __next_internal_client_entry_do_not_use__ LocaleProvider,useLocale auto */ const COOKIE_KEY = 'canhelp_locale'; const DEFAULT_LOCALE = 'el'; const LocaleContext = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_1__.createContext)({ locale: DEFAULT_LOCALE, setLocale: ()=>{}, t: (key)=>key }); function readCookieLocale() { if (typeof document === 'undefined') return DEFAULT_LOCALE; const match = document.cookie.match(/canhelp_locale=([^;]+)/); const val = match?.[1]; return val && [ 'el', 'en', 'uk', 'ru' ].includes(val) ? val : DEFAULT_LOCALE; } function LocaleProvider({ children, initialLocale }) { const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)(); const [locale, setLocaleState] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(initialLocale ?? DEFAULT_LOCALE); // Sync from cookie on mount (client-side) process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{ const cookieLocale = readCookieLocale(); if (cookieLocale !== locale) setLocaleState(cookieLocale); // Sync cookie locale to DB on first load (in case DB is out of sync) const apiBase = "https://api.canhelp.gr" || 0; fetch(`${apiBase}/api/users/me`, { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, credentials: 'include', body: JSON.stringify({ locale: cookieLocale }) }).catch(()=>{}); }, []); const setLocale = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((next)=>{ setLocaleState(next); document.cookie = `${COOKIE_KEY}=${next}; path=/; max-age=31536000; SameSite=Lax`; document.documentElement.lang = next; // Persist locale to user profile in DB (best-effort, non-blocking) const apiBase = "https://api.canhelp.gr" || 0; fetch(`${apiBase}/api/users/me`, { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, credentials: 'include', body: JSON.stringify({ locale: next }) }).catch(()=>{}); // Re-render server components with new cookie router.refresh(); }, [ router ]); const t = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((key, fallback)=>(0,_lib_translations__WEBPACK_IMPORTED_MODULE_3__/* .getTranslations */ .$)(locale)(key, fallback), [ locale ]); return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(LocaleContext.Provider, { value: { locale, setLocale, t }, children: children }); } function useLocale() { return (0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)(LocaleContext); } {"finalSource":true}mapbufferedMap ConcatSourceRawSource/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ LocaleProvider: () => (/* binding */ LocaleProvider), /* harmony export */ Y: () => (/* binding */ useLocale) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(78157); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(31768); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(71159); /* harmony import */ var _lib_translations__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(12998); ReplaceSourceRawSource /* __next_internal_client_entry_do_not_use__ LocaleProvider,useLocale auto */ import { jsx as _jsx } from "react/jsx-runtime"; import { createContext, useContext, useState, useEffect, useCallback } from 'react'; import { useRouter } from 'next/navigation'; import { getTranslations } from '@/lib/translations'; const COOKIE_KEY = 'canhelp_locale'; const DEFAULT_LOCALE = 'el'; const LocaleContext = /*#__PURE__*/ createContext({ locale: DEFAULT_LOCALE, setLocale: ()=>{}, t: (key)=>key }); function readCookieLocale() { if (typeof document === 'undefined') return DEFAULT_LOCALE; const match = document.cookie.match(/canhelp_locale=([^;]+)/); const val = match?.[1]; return val && [ 'el', 'en', 'uk', 'ru' ].includes(val) ? val : DEFAULT_LOCALE; } export function LocaleProvider({ children, initialLocale }) { const router = useRouter(); const [locale, setLocaleState] = useState(initialLocale ?? DEFAULT_LOCALE); // Sync from cookie on mount (client-side) process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ const cookieLocale = readCookieLocale(); if (cookieLocale !== locale) setLocaleState(cookieLocale); // Sync cookie locale to DB on first load (in case DB is out of sync) const apiBase = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:4000'; fetch(`${apiBase}/api/users/me`, { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, credentials: 'include', body: JSON.stringify({ locale: cookieLocale }) }).catch(()=>{}); }, []); const setLocale = useCallback((next)=>{ setLocaleState(next); document.cookie = `${COOKIE_KEY}=${next}; path=/; max-age=31536000; SameSite=Lax`; document.documentElement.lang = next; // Persist locale to user profile in DB (best-effort, non-blocking) const apiBase = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:4000'; fetch(`${apiBase}/api/users/me`, { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, credentials: 'include', body: JSON.stringify({ locale: next }) }).catch(()=>{}); // Re-render server components with new cookie router.refresh(); }, [ router ]); const t = useCallback((key, fallback)=>getTranslations(locale)(key, fallback), [ locale ]); return /*#__PURE__*/ _jsx(LocaleContext.Provider, { value: { locale, setLocale, t }, children: children }); } export function useLocale() { return useContext(LocaleContext); } G78125undefined127210undefined212255undefined257309undefined413425(0,react__WEBPACK_IMPORTED_MODULE_1__.createContext)undefined812818undefined893901(0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)undefined943950(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined10881096(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined13221352"https://api.canhelp.gr"undefined135713790undefined17261736(0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)undefined20152045"https://api.canhelp.gr"undefined205020720undefined25042514(0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)undefined25332547(0,_lib_translations__WEBPACK_IMPORTED_MODULE_3__/* .getTranslations */ .$)undefined26232626(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined27762782undefined28172826(0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)undefined /***/ }) /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ LocaleProvider: () => (/* binding */ LocaleProvider), /* harmony export */ Y: () => (/* binding */ useLocale) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(78157); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(31768); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(71159); /* harmony import */ var _lib_translations__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(12998); /* __next_internal_client_entry_do_not_use__ LocaleProvider,useLocale auto */ const COOKIE_KEY = 'canhelp_locale'; const DEFAULT_LOCALE = 'el'; const LocaleContext = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_1__.createContext)({ locale: DEFAULT_LOCALE, setLocale: ()=>{}, t: (key)=>key }); function readCookieLocale() { if (typeof document === 'undefined') return DEFAULT_LOCALE; const match = document.cookie.match(/canhelp_locale=([^;]+)/); const val = match?.[1]; return val && [ 'el', 'en', 'uk', 'ru' ].includes(val) ? val : DEFAULT_LOCALE; } function LocaleProvider({ children, initialLocale }) { const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)(); const [locale, setLocaleState] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(initialLocale ?? DEFAULT_LOCALE); // Sync from cookie on mount (client-side) process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{ const cookieLocale = readCookieLocale(); if (cookieLocale !== locale) setLocaleState(cookieLocale); // Sync cookie locale to DB on first load (in case DB is out of sync) const apiBase = "https://api.canhelp.gr" || 0; fetch(`${apiBase}/api/users/me`, { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, credentials: 'include', body: JSON.stringify({ locale: cookieLocale }) }).catch(()=>{}); }, []); const setLocale = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((next)=>{ setLocaleState(next); document.cookie = `${COOKIE_KEY}=${next}; path=/; max-age=31536000; SameSite=Lax`; document.documentElement.lang = next; // Persist locale to user profile in DB (best-effort, non-blocking) const apiBase = "https://api.canhelp.gr" || 0; fetch(`${apiBase}/api/users/me`, { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, credentials: 'include', body: JSON.stringify({ locale: next }) }).catch(()=>{}); // Re-render server components with new cookie router.refresh(); }, [ router ]); const t = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((key, fallback)=>(0,_lib_translations__WEBPACK_IMPORTED_MODULE_3__/* .getTranslations */ .$)(locale)(key, fallback), [ locale ]); return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(LocaleContext.Provider, { value: { locale, setLocale, t }, children: children }); } function useLocale() { return (0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)(LocaleContext); } /***/ })   /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ LocaleProvider: () => (/* binding */ LocaleProvider), /* harmony export */ Y: () => (/* binding */ useLocale) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(78157); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(31768); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(71159); /* harmony import */ var _lib_translations__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(12998);  /* __next_internal_client_entry_do_not_use__ LocaleProvider,useLocale auto */ import { jsx as _jsx } from "react/jsx-runtime"; import { createContext, useContext, useState, useEffect, useCallback } from 'react'; import { useRouter } from 'next/navigation'; import { getTranslations } from '@/lib/translations'; const COOKIE_KEY = 'canhelp_locale'; const DEFAULT_LOCALE = 'el'; const LocaleContext = /*#__PURE__*/ createContext({ locale: DEFAULT_LOCALE, setLocale: ()=>{}, t: (key)=>key }); function readCookieLocale() { if (typeof document === 'undefined') return DEFAULT_LOCALE; const match = document.cookie.match(/canhelp_locale=([^;]+)/); const val = match?.[1]; return val && [ 'el', 'en', 'uk', 'ru' ].includes(val) ? val : DEFAULT_LOCALE; } export function LocaleProvider({ children, initialLocale }) { const router = useRouter(); const [locale, setLocaleState] = useState(initialLocale ?? DEFAULT_LOCALE); // Sync from cookie on mount (client-side) process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ const cookieLocale = readCookieLocale(); if (cookieLocale !== locale) setLocaleState(cookieLocale); // Sync cookie locale to DB on first load (in case DB is out of sync) const apiBase = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:4000'; fetch(`${apiBase}/api/users/me`, { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, credentials: 'include', body: JSON.stringify({ locale: cookieLocale }) }).catch(()=>{}); }, []); const setLocale = useCallback((next)=>{ setLocaleState(next); document.cookie = `${COOKIE_KEY}=${next}; path=/; max-age=31536000; SameSite=Lax`; document.documentElement.lang = next; // Persist locale to user profile in DB (best-effort, non-blocking) const apiBase = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:4000'; fetch(`${apiBase}/api/users/me`, { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, credentials: 'include', body: JSON.stringify({ locale: next }) }).catch(()=>{}); // Re-render server components with new cookie router.refresh(); }, [ router ]); const t = useCallback((key, fallback)=>getTranslations(locale)(key, fallback), [ locale ]); return /*#__PURE__*/ _jsx(LocaleContext.Provider, { value: { locale, setLocale, t }, children: children }); } export function useLocale() { return useContext(LocaleContext); } G78125undefined127210undefined212255undefined257309undefined413425(0,react__WEBPACK_IMPORTED_MODULE_1__.createContext)undefined812818undefined893901(0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)undefined943950(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined10881096(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined13221352"https://api.canhelp.gr"undefined135713790undefined17261736(0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)undefined20152045"https://api.canhelp.gr"undefined205020720undefined25042514(0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)undefined25332547(0,_lib_translations__WEBPACK_IMPORTED_MODULE_3__/* .getTranslations */ .$)undefined26232626(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined27762782undefined28172826(0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)undefined }; ; texports.id = 809; exports.ids = [809]; exports.modules = { /***/ 1241: /***/ (() => { /* (ignored) */ /***/ }), /***/ 1697: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ LocationProvider: () => (/* binding */ LocationProvider) /* harmony export */ }); /* unused harmony export useLocation */ /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25459); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__); // This file is generated by the Webpack next-flight-loader. const LocationProvider = (0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)( function() { throw new Error("Attempted to call LocationProvider() from the server but LocationProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/context/location.tsx", "LocationProvider", );const useLocation = (0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)( function() { throw new Error("Attempted to call useLocation() from the server but useLocation is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/context/location.tsx", "useLocation", ); /***/ }), /***/ 2645: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(43560); /* harmony import */ var next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0__); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (async (props) => { const imageData = {"type":"image/png","sizes":"1024x1024"} const imageUrl = (0,next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0__.fillMetadataSegment)(".", await props.params, "icon.png") return [{ ...imageData, url: imageUrl + "?5d298b9734cd2682", }] }); /***/ }), /***/ 12696: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ AdminRolePreview: () => (/* binding */ AdminRolePreview) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(78157); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(13260); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(71159); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(31768); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(91864); /* __next_internal_client_entry_do_not_use__ AdminRolePreview auto */ const ORIG_PLAN_KEY = 'canhelp_admin_orig_plan'; function getPreviewRole() { return null; } const TIER_COLORS = { free: 'bg-slate-100 text-slate-600', pro: 'bg-green-100 text-green-700', ultimate: 'bg-amber-100 text-amber-700' }; function AdminRolePreview() { const { data: session } = (0,_lib_auth__WEBPACK_IMPORTED_MODULE_1__/* .useSession */ .wV)(); const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)(); const isAdmin = session?.user?.role === 'admin'; const userId = session?.user?.id; const [mounted, setMounted] = (0,react__WEBPACK_IMPORTED_MODULE_3__.useState)(false); const [plans, setPlans] = (0,react__WEBPACK_IMPORTED_MODULE_3__.useState)([]); const [activePlanId, setActivePlanId] = (0,react__WEBPACK_IMPORTED_MODULE_3__.useState)(null); const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_3__.useState)(false); const [expanded, setExpanded] = (0,react__WEBPACK_IMPORTED_MODULE_3__.useState)(false); const origPlanRef = (0,react__WEBPACK_IMPORTED_MODULE_3__.useRef)(null); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)(()=>setMounted(true), []); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)(()=>{ if (false) {} }, []); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)(()=>{ if (!isAdmin) return; (0,_lib_api__WEBPACK_IMPORTED_MODULE_4__/* .getPlans */ .T9)().then(setPlans).catch(()=>{}); }, [ isAdmin ]); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)(()=>{ // Sync active plan from session const currentPlanId = session?.user?.planId ?? null; setActivePlanId(currentPlanId); }, [ session ]); if (!mounted || !isAdmin) return null; const setPlan = async (planId)=>{ if (!userId) return; setLoading(true); try { // Save original plan on first change if (!origPlanRef.current && activePlanId) { localStorage.setItem(ORIG_PLAN_KEY, activePlanId); origPlanRef.current = activePlanId; } await (0,_lib_api__WEBPACK_IMPORTED_MODULE_4__/* .updateAdminUser */ .wl)(userId, { planId }); setActivePlanId(planId); window.dispatchEvent(new CustomEvent('canhelp:plan-changed', { detail: { planId } })); router.refresh(); } catch {} setLoading(false); }; const restorePlan = async ()=>{ const orig = origPlanRef.current; localStorage.removeItem(ORIG_PLAN_KEY); origPlanRef.current = null; await setPlan(orig ?? null); }; const visiblePlans = plans; const hasOrigPlan = !!origPlanRef.current; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "fixed bottom-20 right-4 z-50 bg-white border border-slate-200 rounded-2xl shadow-lg text-xs font-medium select-none", style: { minWidth: 130 }, children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("button", { onClick: ()=>setExpanded((v)=>!v), className: "flex items-center justify-between gap-2 w-full px-3 py-2 text-slate-500 hover:text-slate-700 transition rounded-2xl", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { children: "\uD83D\uDC41 Preview" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "text-slate-300", children: expanded ? '▲' : '▼' }) ] }), expanded && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "flex flex-col gap-1 px-2 pb-2 border-t border-slate-100 pt-2", children: visiblePlans.length > 0 && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "text-slate-400 px-1 mt-2 mb-0.5", children: "Plan" }), visiblePlans.map((plan)=>/*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("button", { disabled: loading, onClick: ()=>setPlan(plan.id === activePlanId ? null : plan.id), className: `flex items-center justify-between gap-2 px-3 py-1.5 rounded-xl transition text-left ${activePlanId === plan.id ? 'bg-indigo-600 text-white' : 'text-slate-600 hover:bg-slate-100'} ${loading ? 'opacity-50' : ''}`, children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "truncate max-w-[90px]", children: plan.name }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: `px-1.5 py-0.5 rounded-full text-[10px] font-semibold ${activePlanId === plan.id ? 'bg-white/20 text-white' : TIER_COLORS[plan.tier] ?? TIER_COLORS.free}`, children: plan.tier }) ] }, plan.id)), activePlanId && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { disabled: loading, onClick: ()=>setPlan(null), className: "px-3 py-1 rounded-xl text-slate-400 hover:text-red-500 hover:bg-red-50 transition text-left", children: "✕ No plan" }), hasOrigPlan && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { disabled: loading, onClick: restorePlan, className: "px-3 py-1 rounded-xl text-green-600 hover:bg-green-50 transition text-left", children: "↩ Restore" }) ] }) }) ] }); } /***/ }), /***/ 12998: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ $: () => (/* binding */ getTranslations), /* harmony export */ YZ: () => (/* binding */ LOCALES) /* harmony export */ }); /* unused harmony export translations */ const LOCALES = [ { code: 'el', label: 'Ελληνικά', flag: '🇬🇷' }, { code: 'en', label: 'English', flag: '🇬🇧' }, { code: 'uk', label: 'Українська', flag: '🇺🇦' }, { code: 'ru', label: 'Русский', flag: '🇷🇺' } ]; const translations = { el: { 'footer.slogan': 'Η εργασία σου — η φροντίδα μας! Λύνουμε κάθε ζήτημα γρήγορα και εύκολα.', 'footer.links': 'Σύνδεσμοι', 'footer.socials': 'Στα κοινωνικά δίκτυα', // Nav 'nav.home': 'Αρχική', 'nav.tasks': 'Εργασίες', 'nav.post': '+ Δημοσίευση', 'nav.dashboard': 'Οι εργασίες μου', 'nav.chat': 'Μηνύματα', 'nav.notifications': 'Ειδοποιήσεις', 'nav.profile': 'Προφίλ', 'nav.admin': 'Διαχείριση', 'nav.specialists': 'Προσφορές', 'nav.new_task': 'Νέα εργασία', 'nav.login': 'Σύνδεση', 'nav.register': 'Εγγραφή', 'nav.logout': 'Έξοδος', // Hero 'hero.title': 'Κάθε άνθρωπος έχει κάτι να προσφέρει', 'hero.subtitle': 'Βρες βοήθεια, πρόσφερε τις δεξιότητές σου ή κέρδισε χρήματα βοηθώντας άλλους', 'hero.cta.post': 'Ζήτησε βοήθεια', 'hero.cta.browse': 'Πρόσφερε βοήθεια', 'hero.cta.specialists': 'Βρες εργασία', 'hero.search.placeholder': 'Τι χρειάζεσαι; π.χ. ηλεκτρολόγος, καθαρισμός...', 'hero.specialist.title': 'Βρες εργασίες κοντά σου', 'hero.specialist.subtitle': 'Ανακάλυψε εργασίες στις κατηγορίες σου και στείλε προσφορά', 'hero.specialist.cta': 'Βρες εργασίες', 'hero.specialist.search.placeholder': 'Αναζήτηση εργασιών... π.χ. ηλεκτρολογία, καθαρισμός', 'section.categories.specialist': 'Βρες εργασίες ανά κατηγορία', 'section.cities.specialist': 'Εργασίες ανά πόλη', 'how.specialist.step1.title': 'Δημιούργησε κάρτα ειδικού', 'how.specialist.step1.desc': 'Δήλωσε κατηγορίες, δεξιότητες και περιοχές — το σύστημα βρίσκει εργασίες αυτόματα', 'how.specialist.step2.title': 'Βρες σχετικές εργασίες', 'how.specialist.step2.desc': 'Ανακάλυψε εργασίες στις κατηγορίες σου και ξεκίνα αμέσως', 'how.specialist.step3.title': 'Στείλε προσφορά & κέρδισε', 'how.specialist.step3.desc': 'Υποβάλε προσφορά με τιμή και χρόνο, επικοινωνήσε και ολοκλήρωσε εργασίες', 'stats.specialists': 'προσφορές', 'stats.tasks': 'εργασίες', 'stats.categories': 'κατηγορίες', 'stats.free': 'δωρεάν εγγραφή', 'promo.title': 'Αποκτήσε Pro δωρεάν — μόνο μέχρι το τέλος του χρόνου', 'promo.subtitle': 'Εγγράψου τώρα και απόλαυσε το πλάνο Pro χωρίς χρέωση. Η προσφορά λήγει στις 31 Δεκεμβρίου.', 'promo.cta': 'Εγγραφή δωρεάν', 'promo.days': 'μέρες', 'promo.hours': 'ώρες', 'promo.minutes': 'λεπτά', 'promo.seconds': 'δευτ.', // Sections 'section.categories': 'Δημιούργησε εργασία σε οποιαδήποτε κατηγορία', 'section.how': 'Πώς λειτουργεί', 'section.recent': 'Πρόσφατες εργασίες', 'section.all': 'Δες όλες →', 'section.more': 'ακόμα', 'section.cities': 'Πόλεις & Περιοχές', 'section.community': 'Ένα κοινοτικό έργο για όλους', 'community.subtitle': 'Το CanHelp δεν είναι απλώς μια αγορά — είναι μια κοινότητα αμοιβαίας βοήθειας. Οποιοσδήποτε έχει γνώση ή δεξιότητα μπορεί να βρει έναν πελάτη. Οποιοσδήποτε έχει ένα πρόβλημα μπορεί να βρει έναν ειδικό.', 'community.point1.title': 'Είσαι ειδικός σε κάτι;', 'community.point1.desc': 'Επισκευές, μαθήματα, σχεδιασμός, μεταφράσεις, φροντίδα — κάθε δεξιότητα αξίζει. Δημιούργησε προφίλ και βρες πελάτες κοντά σου.', 'community.point2.title': 'Χρειάζεσαι βοήθεια;', 'community.point2.desc': 'Δημοσίευσε εργασία σε λιγότερο από ένα λεπτό και λάβε προσφορές από επαληθευμένους ειδικούς στην πόλη σου.', 'community.point3.title': 'Βοήθησε το έργο να αναπτυχθεί', 'community.point3.desc': 'Το CanHelp αναπτύσσεται χάρη στις κοινότητες. Μοιράσου το σύνδεσμο με φίλους και γνωστούς — μαζί χτίζουμε κάτι χρήσιμο για όλους.', 'community.share': 'Μοιράσου με φίλους', 'community.share.copied': 'Σύνδεσμος αντιγράφηκε!', // Referral section on home page 'section.referral': 'Πρόγραμμα παραπομπών', 'referral.home.subtitle': 'Μοιράσου τον σύνδεσμό σου — κάθε νέος χρήστης που εγγράφεται μέσα από αυτόν σου αποφέρει ανταμοιβή.', 'referral.home.step1.title': 'Εγγραφείσε και λάβε σύνδεσμο', 'referral.home.step1.desc': 'Δημιούργησε λογαριασμό και βρες τον μοναδικό σου σύνδεσμο παραπομπής στο προφίλ σου.', 'referral.home.step2.title': 'Μοιράσου με φίλους', 'referral.home.step2.desc': 'Στείλε τον σύνδεσμο σε φίλους, γνωστούς ή δημοσίευσέ τον στα social media.', 'referral.home.step3.title': 'Κέρδισε ανταμοιβές', 'referral.home.step3.desc': 'Μόλις ο φίλος σου επαληθεύσει το email του, λαμβάνεις αυτόματα την ανταμοιβή σου.', 'referral.home.cta': 'Πάρε τον σύνδεσμό σου', 'referral.home.badge': 'Πρόγραμμα παραπομπών', // FAQ section 'section.faq': 'Συχνές Ερωτήσεις', 'faq.q1': 'Πώς λειτουργεί το CanHelp;', 'faq.a1': 'Δημοσίευσε μια εργασία, λάβε προσφορές από ειδικούς, επέλεξε τον καλύτερο και ξεκίνα τη συνεργασία. Είναι γρήγορο, απλό και δωρεάν για πελάτες.', 'faq.q2': 'Πόσο κοστίζει η χρήση της πλατφόρμας;', 'faq.a2': 'Η εγγραφή και η δημοσίευση εργασιών είναι εντελώς δωρεάν για πελάτες. Οι ειδικοί έχουν στη διάθεσή τους δωρεάν πλάνο καθώς και premium επιλογές.', 'faq.q3': 'Πώς μπορώ να γίνω ειδικός;', 'faq.a3': 'Κάνε εγγραφή, πήγαινε στο «Γίνε Ειδικός», συμπλήρωσε το προφίλ σου με δεξιότητες και κατηγορίες και αρχίνισε να λαμβάνεις εργασίες.', 'faq.q4': 'Πώς επιλέγω τον κατάλληλο ειδικό;', 'faq.a4': 'Δες τις αξιολογήσεις, την εμπειρία, τις δεξιότητες και το χαρτοφυλάκιο κάθε ειδικού. Επικοινώνησε μαζί του μέσω chat και συζήτα τις λεπτομέρειες πριν αποφασίσεις.', 'faq.q5': 'Τι γίνεται αν δεν είμαι ικανοποιημένος;', 'faq.a5': 'Μπορείς να αφήσεις αξιολόγηση για τον ειδικό και να τον βαθμολογήσεις από 1 έως 5 αστέρια. Οι αξιολογήσεις βοηθούν άλλους χρήστες να επιλέξουν έμπιστους επαγγελματίες.', 'faq.q6': 'Μπορώ να επικοινωνήσω με τον ειδικό πριν την αποδοχή;', 'faq.a6': 'Ναι. Μόλις λάβεις μια προσφορά, μπορείς να ανοίξεις chat με τον ειδικό, να κάνεις ερωτήσεις και να συντονίσεις τις λεπτομέρειες πριν αποφασίσεις.', 'faq.q7': 'Πόσος χρόνος χρειάζεται για να λάβω προσφορές;', 'faq.a7': 'Συνήθως μέσα σε λίγες ώρες. Οι ειδικοί λαμβάνουν ειδοποίηση για νέες εργασίες και μπορούν να απαντήσουν γρήγορα.', 'faq.q8': 'Μπορώ να δημοσιεύσω εργασία σε οποιαδήποτε πόλη της Ελλάδας;', 'faq.a8': 'Ναι! Το CanHelp καλύπτει όλη την Ελλάδα. Μπορείς να βρεις ειδικούς στην Αθήνα, στη Θεσσαλονίκη, στην Πάτρα και αλλού.', 'faq.q9': 'Τι είδη εργασιών μπορώ να βρω στο CanHelp;', 'faq.a9': 'Επισκευές, καθαρισμό, ηλεκτρολόγους, μαθήματα, σχεδιασμό, IT, μετακομίσεις, ομορφιά και πολλά άλλα. Οι κατηγορίες αυξάνονται συνεχώς.', 'faq.q10': 'Υπάρχει εφαρμογή για κινητό;', 'faq.a10': 'Ναι! Το CanHelp διατίθεται για Android και iOS. Κατέβασε την εφαρμογή και διαχειρίσου τα πάντα από το τηλέφωνό σου.', // How it works 'how.step1.title': 'Δημοσίευσε εργασία', 'how.step1.desc': 'Περίγραψε τι χρειάζεσαι και ορίζε τον προϋπολογισμό σου', 'how.step2.title': 'Λάβε προσφορές', 'how.step2.desc': 'Ειδικοί θα σου στείλουν προσφορές με τιμή και χρόνο', 'how.step3.title': 'Επίλεξε & ξεκίνα', 'how.step3.desc': 'Επέλεξε τον καλύτερο επαγγελματία και ξεκίνα τη συνεργασία', // Tasks page 'tasks.title': 'εργασίες', 'tasks.filters': 'Φίλτρα', 'tasks.search': 'Αναζήτηση', 'tasks.search.placeholder': 'Τίτλος ή λέξη κλειδί...', 'tasks.search.btn': 'Αναζήτηση', 'tasks.publish': 'Δημοσίευση', 'tasks.category.all': 'Όλες', 'tasks.category.all_in': 'Όλα στην', 'tasks.category.label': 'Κατηγορία', 'tasks.location.label': 'Πόλη', 'tasks.location.placeholder': 'π.χ. Αθήνα', 'tasks.empty': 'Δεν βρέθηκαν εργασίες', 'tasks.empty.cta': 'Δημοσίευσε την πρώτη', // Task detail 'task.status.open': 'Ανοιχτή', 'task.status.in_progress': 'Σε εξέλιξη', 'task.status.completed': 'Ολοκληρωμένη', 'task.status.cancelled': 'Ακυρωμένη', 'task.status.draft': 'Πρόχειρο', 'task.budget': 'Προϋπολογισμός', 'task.location': 'Τοποθεσία', 'task.deadline': 'Ημερομηνία έναρξης', 'task.expires_at': 'Ενεργό έως', 'task.created_at': 'Δημιουργήθηκε', 'task.customer': 'Πελάτης', 'task.offer.btn': 'Υποβολή προσφοράς', 'task.invite.banner_title': 'Σας προσκαλούν σε αυτήν την εργασία', 'task.invite.banner_hint': 'Ο πελάτης σας πρόσκαλεσε προσωπικά', 'task.invite.accept': 'Αποστολή προσφοράς', 'task.invite.decline': 'Άρνηση', 'offer.accept': 'Αποδοχή', 'offer.decline': 'Απόρριψη', 'task.complete': 'Ολοκλήρωση εργασίας', 'task.complete.confirm': 'Να ολοκληρωθεί η εργασία;', 'task.edit': 'Επεξεργασία', 'task.status_label': 'Κατάσταση', 'task.yours': 'Η εργασία σου', 'task.offer.yours': 'Η προσφορά σου', 'review.leave': 'Άφησε αξιολόγηση', 'review.rating': 'Βαθμολογία', 'review.comment': 'Σχόλιο', 'review.comment.placeholder': 'Πες μας για την εμπειρία σου...', 'review.submit': 'Υποβολή αξιολόγησης', 'review.submitting': 'Αποστολή...', 'review.done': 'Η αξιολόγηση καταχωρήθηκε!', 'profile.reviews': 'Αξιολογήσεις', 'profile.no_reviews': 'Δεν υπάρχουν αξιολογήσεις ακόμα', 'profile.rating': 'Βαθμολογία', 'profile.skills.label': 'Δεξιότητες', 'profile.member_since': 'Μέλος από', 'task.offers': 'Προσφορές', 'task.offers.none': 'Δεν υπάρχουν ακόμα προσφορές', // Create task 'create.title': 'Δημοσίευση εργασίας', 'create.field.title': 'Τίτλος', 'create.field.description': 'Περιγραφή', 'create.field.category': 'Κατηγορία', 'create.field.category.select': 'Επιλέξτε...', 'create.field.location': 'Τοποθεσία', 'create.field.location.any': 'Οπουδήποτε', 'create.field.location.all': 'Ολόκληρη η πόλη', 'create.field.budget': 'Προϋπολογισμός (€)', 'create.field.deadline': 'Ημερομηνία έναρξης', 'create.field.expires_at': 'Αγγελία ενεργή έως', 'create.field.expires_at.days': '{n} ημέρες', 'create.field.budget_negotiable': 'Η τιμή είναι διαπραγματεύσιμη', 'create.field.time_slot': 'Χρόνος εκτέλεσης', 'create.field.time_slot.any': 'Οποιαδήποτε', 'create.field.time_slot.morning': 'Πρωινό (08:00–13:00)', 'create.field.time_slot.afternoon': 'Μεσημέρι (13:00–18:00)', 'create.field.time_slot.evening': 'Βράδυ (18:00–22:00)', 'create.field.time_slot.weekend': 'Σαββατοκύριακο', 'create.field.address': 'Διεύθυνση (προαιρετικά)', 'create.field.address.district': 'Συνοικία', 'create.field.address.street': 'Οδός', 'create.field.address.house': 'Αριθμός', 'create.field.confidential': 'Εμπιστευτική σημείωση', 'create.field.confidential.placeholder': 'Λεπτομέρειες που θα δει μόνο ο αναδοχόμενος...', 'create.field.confidential.hint': 'Δεν εμφανίζεται δημόσια', 'create.field.photos': 'Φωτογραφίες', 'create.field.photos.add': 'Προσθήκη φωτογραφίας', 'create.field.photos.uploading': 'Ανέβασμα...', 'task.budget_negotiable': 'Τιμή διαπραγματεύσιμη', 'task.time_slot': 'Χρόνος', 'task.confidential': 'Εμπιστευτική σημείωση', 'create.field.title.placeholder': 'π.χ. Καθαρισμός διαμερίσματος 80τμ', 'create.field.description.placeholder': 'Περίγραψε λεπτομερώς τι χρειάζεσαι...', 'create.field.location.placeholder': 'π.χ. Αθήνα, Κολωνάκι', 'create.field.budget.placeholder': 'π.χ. 100', 'create.submit': 'Δημοσίευση εργασίας', 'create.submitting': 'Δημοσίευση...', // Auth 'login.title': 'Καλωσόρισες', 'login.subtitle': 'Σύνδεση στο CanHelp', 'login.email': 'Email', 'login.password': 'Κωδικός', 'login.submit': 'Σύνδεση', 'login.submitting': 'Σύνδεση...', 'login.error': 'Λάθος email ή κωδικός', 'login.unverified.title': 'Επιβεβαιώστε το email σας', 'login.unverified.desc': 'Στείλαμε σύνδεσμο επαλήθευσης στο email σας. Ελέγξτε τα εισερχόμενα (ή spam) και πατήστε το σύνδεσμο.', 'login.unverified.resend': 'Αποστολή νέου email επαλήθευσης', 'login.unverified.sending': 'Αποστολή...', 'login.unverified.sent': '✓ Εστάλη — ελέγξτε τα εισερχόμενα', 'profile.email.verified': 'Email επαληθεύτηκε', 'profile.email.not_verified': 'Email δεν επαληθεύτηκε', 'login.no_account': 'Δεν έχεις λογαριασμό;', 'login.register_link': 'Εγγραφή', 'login.forgot_password': 'Ξέχασα τον κωδικό', 'login.or_continue_with': 'ή συνεχίστε με', 'login.continue_google': 'Σύνδεση με Google', 'forgot.title': 'Ξέχασα τον κωδικό', 'forgot.subtitle': 'Εισάγετε το email σας για να λάβετε σύνδεσμο ανάκτησης', 'forgot.email': 'Email', 'forgot.submit': 'Αποστολή', 'forgot.submitting': 'Αποστολή...', 'forgot.sent.title': 'Ελέγξτε τα εισερχόμενά σας', 'forgot.sent.desc': 'Αν υπάρχει λογαριασμός με αυτό το email, θα σας στείλουμε σύνδεσμο ανάκτησης κωδικού.', 'forgot.back_to_login': 'Επιστροφή στη σύνδεση', 'forgot.error': 'Αποτυχία αποστολής. Ελέγξτε το email σας ή δοκιμάστε ξανά.', 'forgot.error.not_found': 'Δεν βρέθηκε λογαριασμός με αυτό το email.', 'forgot.error.send_failed': 'Αποτυχία αποστολής email. Δοκιμάστε ξανά αργότερα', 'reset.title': 'Νέος κωδικός', 'reset.subtitle': 'Εισάγετε τον νέο σας κωδικό', 'reset.password': 'Νέος κωδικός', 'reset.confirm': 'Επιβεβαίωση κωδικού', 'reset.submit': 'Αλλαγή κωδικού', 'reset.submitting': 'Αποθήκευση...', 'reset.success': 'Ο κωδικός άλλαξε επιτυχώς. Ανακατεύθυνση στη σύνδεση...', 'reset.back_to_login': 'Επιστροφή στη σύνδεση', 'reset.error.mismatch': 'Οι κωδικοί δεν ταιριάζουν', 'reset.error.invalid': 'Μη έγκυρος σύνδεσμος. Παρακαλώ ζητήστε νέο.', 'register.title': 'Εγγραφή', 'register.subtitle': 'Δημιουργία λογαριασμού στο CanHelp', 'register.first_name': 'Όνομα', 'register.last_name': 'Επώνυμο', 'register.email': 'Email', 'register.password': 'Κωδικός (min 8 χαρακτήρες)', 'register.role': 'Ρόλος', 'register.role.customer': 'Χρήστης', 'register.role.customer.desc': 'Δημοσιεύω εργασίες', 'register.role.specialist': 'Ειδικός', 'register.role.specialist.desc': 'Αναλαμβάνω εργασίες', 'register.submit': 'Δημιουργία λογαριασμού', 'register.submitting': 'Εγγραφή...', 'register.has_account': 'Έχεις ήδη λογαριασμό;', 'register.login_link': 'Σύνδεση', 'register.continue_google': 'Εγγραφή με Google', 'register.check_email.title': 'Ελέγξτε το email σας', 'register.check_email.desc': 'Στείλαμε σύνδεσμο επαλήθευσης στη διεύθυνση email σας. Ελέγξτε τα εισερχόμενα (ή spam) και πατήστε τον σύνδεσμο.', 'register.check_email.login': 'Επιστροφή στη σύνδεση', 'register.captcha_failed': 'Η επαλήθευση CAPTCHA απέτυχε. Παρακαλώ δοκιμάστε ξανά.', // Dashboard 'dashboard.title': 'Πίνακας ελέγχου', 'dashboard.new_task': '+ Νέα εργασία', 'dashboard.onboarding.title': 'Καλωσήλθατε στο CanHelp 👋', 'dashboard.onboarding.subtitle': 'Διαλέξτε πώς θέλετε να ξεκινήσετε.', 'dashboard.onboarding.helper.title': 'Πρόσφερε τη βοήθειά σου', 'dashboard.onboarding.helper.desc': 'Συμπλήρωσε το προφίλ σου — δεξιότητες, κατηγορίες και περιοχές. Παίρνει μόνο λίγα λεπτά και αρχίζεις να δέχεσαι παραγγελίες.', 'dashboard.onboarding.helper.cta': 'Συμπλήρωσε το προφίλ', 'dashboard.onboarding.requester.title': 'Χρειάζεσαι βοήθεια;', 'dashboard.onboarding.requester.desc': 'Δημοσίευσε μια εργασία και οι βοηθοί θα σου στείλουν προσφορές.', 'dashboard.onboarding.requester.cta': 'Δημοσίευσε εργασία', 'dashboard.my_tasks': 'Οι εργασίες μου', 'dashboard.my_offers': 'Οι προσφορές μου', 'dashboard.invitations': 'Προσκλήσεις για εργασία', 'dashboard.offers_count': 'προσφορές', 'dashboard.declined_count': 'απορρίφθηκαν', 'dashboard.completed_tasks': 'Ολοκληρωμένες εργασίες', 'dashboard.completed_offers': 'Ολοκληρωμένες προσφορές', 'dashboard.review_pending': 'Η αξιολόγηση δεν έχει υποβληθεί ακόμα', 'tasks.new.top_specialists': 'Κορυφαίοι ειδικοί', 'tasks.new.select_category': 'Επιλέξτε κατηγορία για να δείτε ειδικούς', 'tasks.new.invite': 'Πρόσκληση', 'tasks.new.invited': 'Επιλέχθηκε ✓', 'reviews.count': 'αξιολογήσεις', 'filter.location': 'Τοποθεσία', 'filter.language': 'Γλώσσες', 'filter.language.any': 'Οποιαδήποτε γλώσσα', 'filter.category.all': 'Όλες οι κατηγορίες', 'user.categories': 'Κατηγορίες', 'user.work_area': 'Περιοχή εργασίας', 'user.specialist_cards': 'Κάρτες υπηρεσιών', 'card.skills': 'Δεξιότητες', 'card.categories': 'Κατηγορίες', 'card.geography': 'Περιοχή εργασίας', 'card.portfolio': 'Χαρτοφυλάκιο', 'card.close': 'Κλείσιμο', 'dashboard.tasks.empty': 'Δεν έχεις δημοσιεύσει εργασίες', 'dashboard.tasks.empty.cta': 'Δημοσίευσε την πρώτη σου', 'dashboard.tasks.add_new': 'Πρόσθεσε νέα εργασία', 'dashboard.offers.empty': 'Δεν έχεις υποβάλλει προσφορές', 'dashboard.offers.empty.cta': 'Βρες εργασίες', 'dashboard.customer.specialists_title': 'Ψάχνεις εκτελεστή;', 'dashboard.customer.specialists_hint': 'Δες προφίλ ειδικών, διάβασε αξιολογήσεις και κάλεσέ τους στις εργασίες σου', 'dashboard.customer.specialists_cta': 'Βρες ειδικό', 'dashboard.customer.how_title': 'Πώς λειτουργεί', 'dashboard.customer.step1': 'Δημιούργησε εργασία με περιγραφή και προϋπολογισμό', 'dashboard.customer.step2': 'Οι ειδικοί θα στείλουν προσφορές με τιμή και χρόνο', 'dashboard.customer.step3': 'Επίλεξε τον κατάλληλο και ξεκίνα τη συνεργασία', // Notifications 'notif.title': 'Ειδοποιήσεις', 'notif.mark_all': 'Σήμανση όλων ως αναγνωσμένα', 'notif.empty': 'Δεν υπάρχουν ειδοποιήσεις', 'notif.type.generic': 'Ειδοποίηση', 'notif.type.new_offer': 'Νέα προσφορά', 'notif.type.offer_accepted': 'Η προσφορά σας έγινε δεκτή', 'notif.type.offer_declined': 'Η προσφορά σας απορρίφθηκε', 'notif.type.task_completed': 'Η εργασία ολοκληρώθηκε', 'notif.type.task_cancelled': 'Η εργασία ακυρώθηκε', 'notif.type.new_message': 'Νέο μήνυμα', 'notif.type.new_review': 'Νέα αξιολόγηση', 'notif.type.task_invite': 'Πρόσκληση σε εργασία', 'notif.type.referral_reward': 'Ανταμοιβή παραπομπής', 'notif.type.specialist_card_submitted': 'Η κάρτα στάλθηκε για έλεγχο', 'notif.type.specialist_card_approved': 'Η κάρτα εγκρίθηκε', 'notif.type.specialist_card_rejected': 'Η κάρτα απορρίφθηκε', 'notif.body.new_offer': 'Νέα προσφορά για «{title}»', 'notif.body.offer_accepted': 'Η προσφορά σας για «{title}» έγινε δεκτή', 'notif.body.offer_declined': 'Η προσφορά σας για «{title}» απορρίφθηκε', 'notif.body.task_invite': 'Σας προσκαλούν για «{title}»', 'notif.body.new_review': 'Λάβατε αξιολόγηση {rating}★', 'notif.body.referral_reward': 'Προστέθηκαν {days} ημέρες πρόσβασης στο πλάνο «{plan}» στον λογαριασμό σας!', 'notif.body.specialist_card_submitted': 'Η κάρτα «{title}» στάλθηκε για έλεγχο', 'notif.body.specialist_card_approved': 'Η κάρτα «{title}» εγκρίθηκε και δημοσιεύτηκε', 'notif.body.specialist_card_rejected': 'Η κάρτα «{title}» δεν εγκρίθηκε. Διορθώστε την και στείλτε την ξανά.', // Offer status 'offer.status.pending': 'Εκκρεμεί', 'offer.status.accepted': 'Αποδεκτή', 'offer.status.declined': 'Απορρίφθηκε', 'offer.status.withdrawn': 'Αποσύρθηκε', 'offer.status.other_accepted': 'Επιλέχθηκε άλλος ειδικός', // Common 'common.loading': 'Φόρτωση...', 'common.error': 'Σφάλμα', 'common.save': 'Αποθήκευση', 'common.saving': 'Αποθήκευση...', 'common.cancel': 'Ακύρωση', 'common.add': 'Προσθήκη', 'common.close': 'Κλείσιμο', 'common.edit': 'Επεξεργασία', 'common.delete': 'Διαγραφή', 'common.from': 'από', 'common.currency': '€', 'common.greece': 'Ελλάδα', // Chat 'chat.connected': 'Συνδεδεμένος', 'chat.disconnected': 'Αποσυνδεδεμένος', 'chat.no_rooms': 'Δεν υπάρχουν συνομιλίες ακόμα', 'chat.task_fallback': 'Εργασία', 'chat.select': 'Επίλεξε συνομιλία', 'chat.no_messages': 'Δεν υπάρχουν μηνύματα', 'chat.placeholder': 'Γράψε μήνυμα... (Enter για αποστολή)', 'chat.conversation_fallback': 'Συνομιλία', 'chat.direct_chat': 'Απευθείας συνομιλία', 'chat.linked_task': 'Συνδεδεμένη εργασία', 'chat.write_btn': 'Μήνυμα', 'chat.just_now': 'μόλις τώρα', 'chat.min_ago': 'λ', 'chat.write_specialist': 'Γράψε στον ειδικό', 'chat.write_customer': 'Γράψε στον πελάτη', 'chat.notif_settings': 'Ρυθμίσεις ειδοποιήσεων', 'chat.notif_messages': 'Ειδοποιήσεις για νέα μηνύματα', 'chat.toast_title': 'Νέο μήνυμα', 'chat.toast_open': 'Άνοιγμα συνομιλίας', // Offer form 'offer.price': 'Τιμή', 'offer.price.placeholder': 'π.χ. 80', 'offer.customer_budget': 'Προϋπολογισμός πελάτη', 'offer.message': 'Μήνυμα', 'offer.optional': 'προαιρετικό', 'offer.message.placeholder': 'Παρουσίασε τον εαυτό σου, την εμπειρία σου και γιατί είσαι η καλύτερη επιλογή...', 'offer.submitting': 'Αποστολή...', // Profile 'profile.photo': 'Φωτογραφία προφίλ', 'profile.photo.change': 'Αλλαγή φωτογραφίας', 'profile.photo.hint': 'JPEG, PNG, WebP · έως 5MB', 'profile.basic_info': 'Βασικά στοιχεία', 'profile.phone': 'Τηλέφωνο', 'profile.phone.placeholder': '+30 6901234567', 'profile.bio': 'Σύντομη περιγραφή', 'profile.bio.placeholder': 'Πες μας λίγα λόγια για εσένα...', 'profile.language': 'Γλώσσα', 'profile.language.hint': 'Γλώσσα διεπαφής και email ειδοποιήσεων', 'profile.languages': 'Γλώσσες επικοινωνίας', 'profile.languages.hint': 'Επιλέξτε όλες τις γλώσσες που μιλάτε', 'profile.skills': 'Δεξιότητες', 'profile.skills.subtitle': 'Προσθέσε τις υπηρεσίες που προσφέρεις', 'profile.skills.placeholder': 'π.χ. Καθαρισμός, IT, Μαθήματα...', 'profile.role': 'Ρόλος λογαριασμού', 'profile.role.specialist': '🔧 Βοηθός', 'profile.role.admin': '👑 Admin', 'profile.role.customer': '👤 Χρήστης', 'profile.role.user': '👤 Χρήστης', 'profile.role.change': 'Για αλλαγή ρόλου επικοινωνήστε με την υποστήριξη.', 'profile.become_specialist': 'Πρόσφερε βοήθεια', 'profile.become_specialist.desc': 'Δημιούργησε το προφίλ βοηθού σου, πρόσφερε τις δεξιότητές σου και αρχίνισε να λαμβάνεις εργασίες.', 'become_specialist.hero.title': 'Πρόσφερε τις δεξιότητές σου', 'become_specialist.hero.subtitle': 'Δημιούργησε προφίλ βοηθού και λάβε αιτήματα από ανθρώπους που χρειάζονται βοήθεια', 'become_specialist.how.title': 'Πώς λειτουργεί', 'become_specialist.step1.title': 'Δημιούργησε κάρτα ειδικού', 'become_specialist.step1.desc': 'Δήλωσε κατηγορίες, δεξιότητες και περιοχές κάλυψης — το σύστημα θα βρει τις κατάλληλες εργασίες για σένα αυτόματα', 'become_specialist.step2.title': 'Βρες εργασίες', 'become_specialist.step2.desc': 'Ανακάλυψε εργασίες στις κατηγορίες σου στην ενότητα «Αναζήτηση εργασιών»', 'become_specialist.step3.title': 'Στείλε προσφορά & κέρδισε', 'become_specialist.step3.desc': 'Υποβάλε προσφορές με τιμή και χρόνο, επικοινωνήσε με πελάτες και ολοκλήρωσε εργασίες', 'become_specialist.benefits.title': 'Πλεονεκτήματα προφίλ ειδικού', 'become_specialist.benefit1': 'Αναζήτηση εργασιών ανά κατηγορία και τοποθεσία', 'become_specialist.benefit2': 'Δημόσιο προφίλ με αξιολογήσεις πελατών', 'become_specialist.benefit3': 'Πρόγραμμα διαθεσιμότητας ορατό στους πελάτες', 'become_specialist.benefit4': 'Προσθήκη σε αγαπημένα από πελάτες', 'become_specialist.cta': 'Περισσότερα', 'become_specialist.free_badge': 'Δωρεάν εγγραφή', 'profile.tab.notifications': 'Ειδοποιήσεις', 'profile.tab.reviews': 'Αξιολογήσεις', 'profile.tab.referral': 'Παραπομπές', 'profile.tab.auto_response': 'Αυτόματη απάντηση', 'profile.tab.site': 'Site', 'profile.site.title': 'Προσωπική σελίδα', 'profile.site.url_label': 'Προσωπικό site', 'profile.site.copy': 'Αντιγραφή', 'profile.site.copied': 'Αντιγράφηκε', 'profile.site.visible_title': 'Τι εμφανίζεται στη σελίδα σας', 'profile.site.visible.name': 'Όνομα και φωτογραφία', 'profile.site.visible.bio': 'Βιογραφικό', 'profile.site.visible.rating': 'Αξιολόγηση και κριτικές', 'profile.site.visible.portfolio': 'Χαρτοφυλάκιο / Κάρτες', 'profile.site.visible.contacts': 'Στοιχεία επικοινωνίας', 'profile.site.visible.full_last_name': 'Πλήρες επώνυμο', 'profile.site.visible.services': 'Κάρτες υπηρεσιών', 'profile.site.visible.reviews': 'Ενότητα κριτικών', 'profile.site.visible.status': 'Κατάσταση «Έτοιμος να βοηθήσω»', 'profile.site.theme': 'Θέμα εμφάνισης', 'profile.site.theme.dark': 'Σκοτεινό', 'profile.site.theme.light': 'Φωτεινό', 'profile.site.slug_taken': 'Αυτή η διεύθυνση είναι ήδη κατειλημμένη', 'profile.site.stats.title': 'Στατιστικά επισκεψιμότητας', 'profile.site.stats.days': 'τελευταίες 30 ημέρες', 'profile.site.stats.views': 'Προβολές', 'profile.site.stats.unique': 'Μοναδικοί επισκέπτες', 'profile.site.stats.messages': 'Μηνύματα', 'profile.site.stats.total_views': 'Συνολικές προβολές', 'profile.site.stats.total_unique': 'Μοναδικοί επισκέπτες', 'profile.site.stats.total_messages': 'Μηνύματα', 'profile.site.stats.empty': 'Δεν υπάρχουν δεδομένα ακόμη', 'profile.site.stats.loading': 'Φόρτωση στατιστικών...', 'profile.site.stats.no_slug': 'Ορίστε τη διεύθυνση του site για να δείτε στατιστικά', 'profile.site.edit_bio_hint': 'Το βιογραφικό και η φωτογραφία ρυθμίζονται στην καρτέλα «Βασικά».', 'profile.site.seo.title': 'SEO — μεταδεδομένα σελίδας', 'profile.site.seo.hint': 'Εμφανίζεται στα αποτελέσματα αναζήτησης. Αποθηκεύστε για αυτόματη μετάφραση σε όλες τις γλώσσες.', 'profile.site.seo.site_title': 'Τίτλος σελίδας', 'profile.site.seo.site_title_placeholder': 'Γιάννης Παπαδόπουλος — Υδραυλικός στην Αθήνα', 'profile.site.seo.site_desc': 'Μετα-περιγραφή', 'profile.site.seo.site_desc_placeholder': 'Σύντομη περιγραφή για τις μηχανές αναζήτησης...', 'status.can_help_now_hint': 'Η κάρτα σου εμφανίζεται ψηλότερα', 'status.need_help_hint': 'Οι ειδικοί μπορούν να σε βοηθήσουν', 'profile.referral.title': 'Πρόγραμμα παραπομπών', 'profile.referral.desc': 'Μοιράσου τον σύνδεσμο σου και κέρδισε ανταμοιβές για κάθε νέο χρήστη.', 'profile.referral.link_label': 'Ο σύνδεσμος παραπομπής σου', 'profile.referral.copy': 'Αντιγραφή', 'profile.referral.copied': 'Αντιγράφηκε!', 'profile.referral.invited_count': 'επιτυχείς παραπομπές', 'profile.referral.no_code': 'Ο κωδικός παραπομπής δεν είναι διαθέσιμος.', 'notifications.title': 'Ρυθμίσεις ειδοποιήσεων', 'notifications.email.new_tasks': 'Email για νέες εργασίες', 'notifications.email.new_tasks.desc': 'Λάβε email όταν δημοσιευτεί νέα εργασία στις κατηγορίες σου', 'notifications.messages.desc': 'Λαμβάνεις ειδοποίηση όταν έρθει νέο μήνυμα', 'notifications.saved': 'Ρυθμίσεις αποθηκεύτηκαν', 'notifications.plan_required': 'Συνδρομή απαιτείται για αυτή τη λειτουργία', 'profile.tab.info': 'Βασικά στοιχεία', 'profile.tab.finance': 'Οικονομικά', 'profile.tab.skills': 'Δεξιότητες', 'profile.tab.categories': 'Κατηγορίες', 'profile.tab.geography': 'Γεωγραφία', 'profile.specialist.categories': 'Κατηγορίες εργασιών', 'profile.specialist.categories.desc': 'Επίλεξε τις κατηγορίες στις οποίες εργάζεσαι', 'profile.specialist.geography': 'Περιοχές κάλυψης', 'profile.specialist.geography.desc': 'Επίλεξε τις πόλεις / περιοχές όπου δραστηριοποιείσαι', 'profile.saving': 'Αποθήκευση...', 'profile.upload.error': 'Σφάλμα κατά την αναφόρτωση', 'profile.saved': 'Αποθηκεύτηκε', 'profile.tab.cards': 'Προσφορές', 'profile.cards.count': 'Προσφορές', 'profile.cards.add': 'Νέα προσφορά', 'profile.cards.new_title': 'Τίτλος νέας προσφοράς', 'profile.cards.placeholder': 'π.χ. Υδραυλικά', 'profile.cards.create': 'Δημιουργία', 'profile.cards.cancel': 'Ακύρωση', 'profile.cards.empty': 'Δεν έχετε προσφορές', 'profile.cards.empty_hint': 'Δημιουργήστε την πρώτη σας κάρτα για να προβάλετε τις υπηρεσίες σας στους πελάτες.', 'profile.cards.create_first': 'Δημιουργήστε την πρώτη σας προσφορά', 'profile.cards.delete_confirm': 'Διαγραφή προσφοράς;', 'profile.listing_requirements.published_card': 'Δημοσιεύστε τουλάχιστον μία κάρτα', 'profile.listing_requirements.title': 'Το προφίλ σας δεν εμφανίζεται ακόμη στις προσφορές', 'profile.listing_requirements.hint': 'Για να γίνει ορατή η κάρτα, ολοκληρώστε αυτές τις προϋποθέσεις:', 'profile.listing_requirements.bio': 'Προσθέστε ένα σύντομο βιογραφικό στην ενότητα προφίλ', 'profile.listing_requirements.categories': 'Προσθέστε τουλάχιστον μία κατηγορία στην ενεργή κάρτα', 'profile.listing_requirements.locations': 'Προσθέστε τουλάχιστον μία τοποθεσία στην ενεργή κάρτα', 'profile.listing_requirements.card_inactive': 'Κάντε την κάρτα ενεργή', 'profile.listing_requirements.review_pending': 'Η κάρτα είναι υπό έλεγχο', 'profile.card.visibility_issue': 'Η κάρτα δεν εμφανίζεται στις προσφορές', 'profile.card.tab.main': 'Γενικά', 'profile.card.tab.skills': 'Δεξιότητες', 'profile.card.tab.categories': 'Κατηγορίες', 'profile.card.tab.geography': 'Γεωγραφία', 'profile.card.tab.portfolio': 'Γκαλερί', 'profile.card.tab.pricelist': 'Τιμοκατάλογος', 'profile.card.pricelist.empty': 'Δεν έχουν οριστεί ομάδες τιμοκαταλόγου.', 'profile.card.pricelist.add_group': 'Προσθήκη ομάδας', 'profile.card.pricelist.group_title': 'Τίτλος ομάδας', 'profile.card.pricelist.add_item': 'Προσθήκη στοιχείου', 'profile.card.pricelist.item_name': 'Υπηρεσία / εργασία', 'profile.card.pricelist.item_desc': 'Περιγραφή (προαιρετικό)', 'profile.card.pricelist.item_price': 'Τιμή', 'profile.card.pricelist.item_unit': 'Μονάδα (π.χ. /ώρα)', 'profile.card.pricelist.save_group': 'Αποθήκευση ομάδας', 'profile.card.pricelist.save_item': 'Αποθήκευση', 'profile.card.pricelist.delete_group': 'Διαγραφή ομάδας', 'profile.card.pricelist.delete_item': 'Διαγραφή', 'profile.card.active': 'Ενεργή', 'profile.card.review_pending': 'Σε αναμονή έγκρισης', 'profile.card.review_pending_hint': 'Η κάρτα σας ελέγχεται τώρα από τη διαχείριση.', 'profile.card.review_submitted': 'Η κάρτα στάλθηκε για έλεγχο', 'profile.card.review_approved': 'Η κάρτα εγκρίθηκε', 'profile.card.review_approved_hint': 'Η κάρτα σας εμφανίζεται τώρα στις προσφορές.', 'profile.card.review_rejected': 'Η κάρτα απορρίφθηκε', 'profile.card.review_rejected_hint': 'Η κάρτα σας δεν εγκρίθηκε. Διορθώστε την και στείλτε την ξανά.', 'profile.card.submit_review': 'Αποστολή για έλεγχο', 'profile.card.withdraw_review': 'Ανάκληση αίτησης', 'profile.card.unpublish': 'Αφαίρεση από δημοσίευση', 'profile.card.save': 'Αποθήκευση', 'profile.card.saved': 'Αποθηκεύτηκε', 'profile.card.delete': 'Διαγραφή', 'profile.card.skill.add': 'Προσθήκη δεξιότητας', 'profile.card.photo.add': 'Προσθήκη φωτογραφίας', 'profile.card.photo.uploading': 'Μεταφόρτωση...', 'profile.card.photo.empty': 'Δεν υπάρχουν φωτογραφίες', 'profile.card.item.title': 'Τίτλος', 'profile.card.item.desc': 'Περιγραφή', 'profile.card.item.save': 'Αποθήκευση', 'profile.card.item.cancel': 'Ακύρωση', 'profile.card.item.edit': 'Επεξεργασία', 'profile.card.description': 'Περιγραφή κάρτας', 'profile.card.desc_auto_translate': 'Κατά την αποθήκευση θα μεταφραστεί αυτόματα σε άλλες γλώσσες', 'profile.card.desc_translated': 'Υπάρχουν μεταφράσεις:', 'profile.upgrade.cards_limit': 'Όριο χαρτοφυλακίων εξαντλήθηκε', 'profile.upgrade.plan': 'Τρέχον πλάνο:', 'profile.upgrade.contact': 'Επικοινωνήστε με τον διαχειριστή για αλλαγή πλάνου', 'profile.upgrade.ok': 'Εντάξει', 'profile.plan.title': 'Πλάνο συνδρομής', 'profile.balance': 'Υπόλοιπο', 'profile.balance.topup': 'Αναπλήρωση υπολοίπου', 'profile.balance.topup.title': 'Αναπλήρωση υπολοίπου', 'profile.balance.topup.amount': 'Ποσό (σε EUR)', 'profile.balance.topup.hint': 'Επιλέξτε ποσό ή εισαγάγετε μανούαλα', 'profile.balance.topup.submit': 'Πληρωμή', 'profile.balance.topup.loading': 'Ρεδιρεκτάρισμα...', 'profile.balance.topup.error': 'Σφάλμα μετάβασης στην πληρωμή. Προσπαθήστε ξανά.', 'payment.success.title': 'Πληρωμή επιτυχής!', 'payment.success.desc': 'Το υπόλοιπό σας ενημερώθηκε.', 'payment.cancelled.title': 'Ακύρωση πληρωμής', 'payment.cancelled.desc': 'Η πληρωμή ακυρώθηκε. Κανένα χρήμα δεν χρεώθηκε.', 'payment.pending.title': 'Σε εξέλιξη...', 'payment.pending.desc': 'Επεξεργαζόμαστε την πληρωμή σας.', 'payment.back_to_profile': 'Επιστροφή στο προφίλ', 'profile.plan.basic': 'Βασικό (δωρεάν)', 'profile.plan.contact_upgrade': 'Επικοινωνήστε με τον διαχειριστή για αναβάθμιση', 'profile.plan.cards_up_to': 'Χαρτοφυλάκια: έως', 'profile.plan.cards_unlimited': 'Χαρτοφυλάκια: απεριόριστα', 'profile.plan.tasks_up_to': 'Εργασίες: έως', 'profile.plan.offers_up_to': 'Προσφορές: έως', 'profile.plan.valid_until': 'Ισχύει έως', 'profile.plan.no_expiry': 'Δεν λήγει', // Create task 'create.error': 'Σφάλμα κατά τη δημοσίευση', // Tasks list extras 'tasks.category.general': 'Γενικά', 'tasks.budget.range': 'Εύρος:', 'tasks.budget.from': 'από', 'tasks.budget.to': 'έως', 'tasks.filter.reset': 'Εκκαθάριση φίλτρων', 'tasks.load_more': 'Φόρτωση ακόμα', 'tasks.showing': 'Αποτελέσματα:', 'tasks.field.budget': 'Προϋπολογισμός, €', // Admin 'admin.title': 'Πίνακας Διαχείρισης', 'admin.tab.stats': 'Στατιστικά', 'admin.tab.users': 'Χρήστες', 'admin.tab.tasks': 'Εργασίες', 'admin.tab.reports': 'Αναφορές', 'admin.tab.moderation': 'Μονάδα ελέγχου', 'admin.stats.users': 'Χρήστες', 'admin.stats.tasks': 'Εργασίες', 'admin.stats.offers': 'Προσφορές', 'admin.stats.reviews': 'Αξιολογήσεις', 'admin.tasks.by_status': 'Εργασίες ανά κατάσταση', 'admin.col.user': 'Χρήστης', 'admin.col.email': 'Email', 'admin.col.role': 'Ρόλος', 'admin.col.registered': 'Εγγραφή', 'admin.col.status': 'Κατάσταση', 'admin.col.title': 'Τίτλος', 'admin.col.budget': 'Προϋπολογισμός', 'admin.col.created': 'Δημιουργία', 'admin.users.active': 'Ενεργός', 'admin.users.inactive': 'Ανενεργός', 'admin.users.deactivate': 'Απενεργοποίηση', 'admin.users.activate': 'Ενεργοποίηση', 'admin.tasks.cancel': 'Ακύρωση', 'admin.reports.none': 'Δεν υπάρχουν αναφορές', 'admin.moderation.none': 'Δεν βρέθηκαν προσφορές για έλεγχο', 'admin.moderation.pending': 'Σε αναμονή', 'admin.moderation.active': 'Ενεργό', 'admin.moderation.approve': 'Έγκριση', 'admin.moderation.block': 'Μπλοκάρισμα', 'admin.moderation.pending_title': 'Προσφορές προς έγκριση', 'admin.moderation.active_title': 'Ενεργές προσφορές', 'admin.moderation.pending_count': 'Σε αναμονή', 'admin.moderation.active_count': 'Ενεργές', 'admin.moderation.pending_hint': 'Νέες προσφορές που περιμένουν έγκριση', 'admin.moderation.active_hint': 'Ενεργές προσφορές που μπορείτε να μπλοκάρετε', 'admin.moderation.pending_empty': 'Δεν υπάρχουν νέες προσφορές προς έγκριση', 'admin.moderation.active_empty': 'Δεν βρέθηκαν ενεργές προσφορές', 'admin.reports.reviewed': 'Αναθεωρήθηκε', 'admin.reports.dismiss': 'Απόρριψη', 'admin.pagination.total': 'Σύνολο', 'admin.users.role.change': 'Αλλαγή ρόλου', 'admin.users.search.placeholder': 'Αναζήτηση ονόματος ή email...', 'admin.tasks.delete': 'Διαγραφή', 'admin.tasks.delete.confirm': 'Διαγραφή αυτής της εργασίας μόνιμα;', 'admin.tasks.search.placeholder': 'Αναζήτηση τίτλου...', 'admin.col.customer': 'Πελάτης', 'admin.col.reporter': 'Καταγγέλλων', 'admin.col.target': 'Στόχος', 'admin.filter.all_roles': 'Όλοι οι ρόλοι', 'admin.filter.all_statuses': 'Όλες οι καταστάσεις', 'admin.reports.target.task': 'Εργασία', 'admin.reports.target.user': 'Χρήστης', 'admin.tab.categories': 'Κατηγορίες', 'admin.tab.locations': 'Πόλεις & Περιοχές', 'admin.tab.logs': 'Αρχεία', 'admin.tab.plans': 'Πακέτα', 'admin.tab.settings': 'Ρυθμίσεις', 'admin.logs.subtab.ai': 'AI Logs', 'admin.logs.subtab.activity': 'Δραστηριότητα', 'admin.logs.subtab.mail': 'Mail', 'admin.logs.subtab.notifications': 'Ειδοποιήσεις', 'admin.notif_logs.type': 'Τύπος', 'admin.notif_logs.title': 'Τίτλος', 'admin.notif_logs.read': 'Διαβασμένο', 'admin.notif_logs.empty': 'Δεν υπάρχουν αρχεία ειδοποιήσεων', 'admin.stats.notif_chart_title': 'Ειδοποιήσεις ανά ημέρα', 'admin.stats.notif_label': 'Ειδοποιήσεις', 'admin.stats.mail_chart_title': 'Emails ανά ημέρα', 'admin.stats.mail_label': 'Emails', 'admin.filter.all': 'Όλα', 'admin.stats.specialists': 'Βοηθοί', 'admin.col.plan': 'Πακέτο', 'admin.back_home': 'Αρχική', 'admin.plans.title': 'Πακέτα συνδρομής', 'admin.plans.add': '+ Νέο πακέτο', 'admin.plans.empty': 'Δεν υπάρχουν πακέτα', 'admin.plans.form.new': 'Νέο πακέτο', 'admin.plans.form.edit': 'Επεξεργασία πακέτου', 'admin.plans.form.name': 'Όνομα', 'admin.plans.form.price': 'Τιμή (EUR)', 'admin.plans.form.old_price': 'Παλιά τιμή (EUR, προαιρετικό)', 'admin.plans.form.max_offers': 'Μέγ. προσφορές (κενό = χωρίς όριο)', 'admin.plans.form.max_cards': 'Μέγ. προσφορές (κενό = χωρίς όριο)', 'admin.plans.form.duration_days': 'Διάρκεια (ημέρες, κενό = χωρίς λήξη)', 'admin.plans.form.description': 'Περιγραφή', 'admin.plans.form.features': 'Δυνατότητες (μία ανά γραμμή)', 'admin.plans.form.notify': 'Ειδοποιήσεις νέων εργασιών', 'admin.plans.form.default': 'Προεπιλογή', 'admin.plans.form.active': 'Ενεργό', 'admin.plans.form.order': 'Σειρά', 'admin.plans.form.role': 'Ρόλος', 'admin.plans.form.tier': 'Επίπεδο', 'admin.plans.form.role.customer': 'Πελάτης', 'admin.plans.form.role.specialist': 'Βοηθός', 'admin.plans.form.tier.free': 'Δωρεάν', 'admin.plans.form.tier.pro': 'Pro', 'admin.plans.form.tier.ultimate': 'Ultimate', 'admin.plans.form.section.limits': 'Όρια (κενό = χωρίς όριο)', 'admin.plans.form.max_messages_day': 'Μέγ. μηνύματα/ημέρα', 'admin.plans.form.max_orders_day': 'Μέγ. παραγγελίες/ημέρα', 'admin.plans.form.max_skills': 'Μέγ. δεξιότητες', 'admin.plans.form.max_profiles': 'Μέγ. προφίλ', 'admin.plans.form.max_portfolio': 'Μέγ. στοιχεία χαρτοφυλακίου', 'admin.plans.form.section.boost': 'Πολλαπλασιαστές & Ενίσχυση', 'admin.plans.form.search_boost': 'Ενίσχυση αναζήτησης', 'admin.plans.form.offers_multiplier': 'Πολλαπλασιαστής προσφορών', 'admin.plans.form.section.contact': 'Δικαιώματα επικοινωνίας', 'admin.plans.form.can_contact_free': 'Επικοινωνία με δωρεάν χρήστες', 'admin.plans.form.can_contact_pro': 'Επικοινωνία με Pro χρήστες', 'admin.plans.form.can_contact_all': 'Επικοινωνία με όλους', 'admin.plans.form.can_show_contact': 'Εμφάνιση στοιχείων επικοινωνίας', 'admin.plans.form.can_view_phone': 'Προβολή τηλεφώνου', 'admin.plans.form.section.features': 'Λειτουργίες', 'admin.plans.form.upload_video': 'Μεταφόρτωση βίντεο', 'admin.plans.form.favorites': 'Αγαπημένα', 'admin.plans.form.google_calendar': 'Google Calendar', 'admin.plans.form.verified_badge': 'Σήμα επαλήθευσης', 'admin.plans.form.highlighted_reviews': 'Προβεβλημένες κριτικές', 'admin.plans.form.personal_site': 'Προσωπική σελίδα', 'admin.plans.form.can_help_now': 'Κατάσταση «Μπορώ να βοηθήσω»', 'admin.plans.form.need_help': 'Κατάσταση «Χρειάζομαι βοήθεια»', 'admin.plans.form.auto_response': 'Αυτόματη απάντηση', 'admin.plans.form.auto_match': 'Αυτόματη αντιστοίχιση', 'admin.plans.form.price_list': 'Τιμοκατάλογος', 'admin.plans.form.instant_dispatch_free': 'Άμεση αποστολή (δωρεάν)', 'admin.plans.form.instant_dispatch_pro': 'Άμεση αποστολή (Pro)', 'admin.plans.badge.default': 'Προεπιλογή', 'admin.plans.badge.inactive': 'Ανενεργό', 'admin.plans.make_default': 'Ορισμός ως προεπιλογή', 'admin.plans.tasks': 'Εργασίες', 'admin.plans.offers': 'Προσφορές', 'admin.plans.cards': 'Προσφορές', 'admin.plans.notify_tasks': 'Ειδοποιήσεις εργασιών', 'admin.plans.delete.confirm': 'Διαγραφή πακέτου', 'admin.activity.title': 'Αρχείο δραστηριότητας', 'admin.activity.event': 'Γεγονός', 'admin.activity.all_events': 'Όλα τα γεγονότα', 'admin.activity.from': 'Από', 'admin.activity.to': 'Έως', 'admin.activity.reset': 'Επαναφορά', 'admin.activity.total': 'Σύνολο', 'admin.activity.empty': 'Δεν υπάρχουν εγγραφές', 'admin.mail.event': 'Συμβάν email', 'admin.mail.all_events': 'Όλα τα email συμβάντα', 'admin.mail.from': 'Από', 'admin.mail.to': 'Έως', 'admin.mail.reset': 'Επαναφορά', 'admin.mail.total': 'Σύνολο', 'admin.mail.empty': 'Δεν υπάρχουν email logs', 'admin.mail.recipient': 'Παραλήπτης', 'admin.mail.provider': 'Πάροχος', 'admin.mail.details': 'Λεπτομέρειες', 'admin.mail.status': 'Κατάσταση', 'admin.mail.success': 'Επιτυχία', 'admin.mail.failed': 'Σφάλμα', 'admin.event.email_sent': 'Email sent', 'admin.event.email_failed': 'Email failed', 'admin.event.email_dev': 'Email DEV fallback', 'admin.event.admin_email_test_sent': 'Admin test email sent', 'admin.event.admin_email_test_failed': 'Admin test email failed', 'admin.logs.empty': 'Δεν υπάρχουν εγγραφές', 'admin.logs.date': 'Ημερομηνία', 'admin.logs.provider': 'Πάροχος', 'admin.logs.model': 'Μοντέλο', 'admin.logs.action': 'Ενέργεια', 'admin.logs.langs': 'Γλώσσες', 'admin.logs.in': 'Είσοδος', 'admin.logs.out': 'Έξοδος', 'admin.logs.total': 'Σύνολο', 'admin.logs.ms': 'ms', 'admin.logs.status': 'Κατάσταση', 'admin.stats.activity_30d': 'Δραστηριότητα 30 ημερών', 'admin.stats.tasks_label': 'Εργασίες', 'admin.stats.users_label': 'Χρήστες', 'admin.stats.specialists_label': 'Βοηθοί', 'admin.stats.tokens_title': 'Χρήση tokens (ανά μήνα)', 'admin.stats.tokens_out': 'Εξερχόμενα', 'admin.stats.tokens_in': 'Εισερχόμενα', 'admin.stats.tokens_out_label': 'Εξερχόμενα tokens', 'admin.stats.tokens_in_label': 'Εισερχόμενα tokens', 'admin.stats.cost_label': 'Κόστος (USD)', 'admin.stats.tasks_by_status': 'Εργασίες ανά κατάσταση', 'admin.task_status.open': 'Ανοιχτές', 'admin.task_status.in_progress': 'Σε εξέλιξη', 'admin.task_status.completed': 'Ολοκληρωμένες', 'admin.task_status.cancelled': 'Ακυρωμένες', 'admin.task_status.draft': 'Προσχέδια', 'admin.settings.tab.general': 'Γενικά', 'admin.settings.tab.smtp': 'E-Mail', 'admin.settings.tab.notifications': 'Ειδοποιήσεις', 'admin.settings.tab.payment': 'Πληρωμή', 'admin.settings.tab.referral': 'Παραπομπές', 'admin.settings.tab.seo': 'SEO', 'admin.settings.tab.socials': 'Κοινωνικά δίκτυα', 'admin.settings.tab.telegram': 'Telegram Bot', 'admin.settings.telegram.title': 'Ρυθμίσεις Telegram Bot', 'admin.settings.telegram.help': 'Δημιουργήστε bot μέσω @BotFather. Για chat ID χρησιμοποιήστε @userinfobot.', 'admin.settings.telegram.bot_token': 'Bot Token', 'admin.settings.telegram.admin_chat_id': 'Admin Chat ID', 'admin.settings.telegram.admin_chat_hint': 'Γράψτε /start στο bot σας, μετά στείλτε μήνυμα μέσω @userinfobot για να λάβετε το chat ID', 'admin.settings.telegram.channel_id': 'Channel ID', 'admin.settings.telegram.channels_title': 'Κανάλια ανά γλώσσα', 'admin.settings.telegram.channel_hint': 'Αναγνωριστικό δημόσιου καναλιού ή @όνομα καναλιού', 'admin.settings.telegram.notify_registrations': 'Ειδοποίηση νέων εγγραφών', 'admin.settings.telegram.notify_registrations_hint': 'Αποστολή μηνύματος στον admin κατά την εγγραφή νέου χρήστη', 'admin.settings.telegram.post_new_tasks': 'Δημοσίευση νέων εργασιών', 'admin.settings.telegram.post_new_tasks_hint': 'Αυτόματη δημοσίευση νέων εργασιών στο κανάλι', 'admin.settings.telegram.test': 'Δοκιμή', 'admin.settings.telegram.verify': 'Επαλήθευση', 'admin.settings.telegram.test_ok': 'Η σύνδεση λειτουργεί', 'admin.settings.telegram.test_fail': 'Σφάλμα σύνδεσης', 'admin.settings.socials.title': 'Σύνδεσμοι κοινωνικών δικτύων', 'admin.settings.socials.hint': 'Συμπληρωμένες εγγραφές εμφανίζονται στο υπόγειο', 'admin.settings.seo.maintenance_label': 'Λειτουργία συντήρησης', 'admin.settings.seo.maintenance_hint': 'Εμφάνιση σελίδας συντήρησης σε όλους τους επισκέπτες', 'admin.settings.seo.indexing_label': 'Ευρετηρίαση από μηχανές αναζήτησης', 'admin.settings.seo.indexing_hint': 'Επιτρέπει στις μηχανές αναζήτησης να ευρετηριάσουν τον ιστότοπο', 'admin.settings.seo.head_scripts_label': 'Scripts στο (JS)', 'admin.settings.seo.head_scripts_hint': 'Εκτελείται σε κάθε σελίδα (Google Tag Manager, analytics κ.λπ.)', 'admin.settings.seo.site_title_label': 'Τίτλος ιστότοπου', 'admin.settings.seo.site_description_label': 'Περιγραφή ιστότοπου (meta description)', 'admin.settings.referral.title': 'Πρόγραμμα παραπομπών', 'admin.settings.referral.hint': 'Επιβράβευσε χρήστες που φέρνουν νέους εγγεγραμμένους.', 'admin.settings.referral.enabled_label': 'Ενεργό', 'admin.settings.referral.enabled_hint': 'Ενεργοποίηση / απενεργοποίηση εφαρμογής ανταμοιβών', 'admin.settings.referral.customer_section': 'Για πελάτες', 'admin.settings.referral.specialist_section': 'Για βοηθούς', 'admin.settings.referral.plan_label': 'Πλάνο ανταμοιβής', 'admin.settings.referral.no_plan': '— χωρίς πλάνο —', 'admin.settings.referral.plan_hint': 'Αυτό το πλάνο θα ανατεθεί στον χρήστη που έφερε νέους. Εάν το τρέχον πλάνο του είναι υψηλότερο, θα προστεθούν μόνο οι μέρες.', 'admin.settings.referral.days_label': 'Ημέρες ανταμοιβής', 'admin.settings.referral.days_hint': 'Αριθμός ημερών που θα προστεθούν στη λήξη του πλάνου.', 'admin.settings.general.title': 'Γενικές ρυθμίσεις', 'admin.settings.general.site_name': 'Όνομα ιστότοπου', 'admin.settings.general.site_url': 'URL ιστότοπου', 'admin.settings.general.contact_email': 'Email επικοινωνίας', 'admin.settings.general.support_phone': 'Τηλέφωνο υποστήριξης', 'admin.settings.smtp.title': 'Ρυθμίσεις SMTP', 'admin.settings.smtp.hint': 'Χρησιμοποιείται για αποστολή ειδοποιήσεων email.', 'admin.settings.smtp.host': 'SMTP Host', 'admin.settings.smtp.port': 'Θύρα', 'admin.settings.smtp.encryption': 'Κρυπτογράφηση', 'admin.settings.smtp.enc.none': 'Χωρίς', 'admin.settings.smtp.enc.tls': 'STARTTLS (θύρα 587)', 'admin.settings.smtp.enc.ssl': 'SSL/TLS (θύρα 465)', 'admin.settings.smtp.username': 'Όνομα χρήστη', 'admin.settings.smtp.password': 'Κωδικός / App Password', 'admin.settings.smtp.from_name': 'Όνομα αποστολέα', 'admin.settings.smtp.from_email': 'Email αποστολέα', 'admin.settings.smtp.test': 'Αποστολή δοκιμαστικού email', 'admin.settings.smtp.sending': 'Αποστολή...', 'admin.settings.payment.hint': 'Τα στοιχεία για ePay Piraeus Bank.', 'admin.settings.env.test': 'Δοκιμαστικό (sandbox)', 'admin.settings.env.prod': 'Παραγωγή', 'admin.settings.env.label': 'Περιβάλλον', 'admin.settings.merchant_id': 'Merchant ID', 'admin.settings.api_user': 'API User', 'admin.settings.api_password': 'API Password', 'admin.settings.confirm_url': 'Confirmation URL (webhook)', 'admin.settings.cancel_url': 'Cancel URL', 'admin.settings.active': 'Ενεργό', 'admin.settings.saving': 'Αποθήκευση...', 'admin.settings.saved': '✓ Αποθηκεύτηκε', 'admin.notif.vars_hint': 'Διαθέσιμες μεταβλητές στα πρότυπα', 'admin.notif.tmpl.not_set': 'Πρότυπο δεν έχει οριστεί', 'admin.notif.tmpl.subject_label': 'Θέμα email', 'admin.notif.tmpl.body_label': 'Κείμενο email (HTML)', 'admin.notif.tmpl.save': 'Αποθήκευση', 'admin.notif.tmpl.close': 'Κλείσιμο', 'admin.notif.tmpl.translate': 'Αυτόματη μετάφραση', 'admin.notif.tmpl.translating': 'Μετάφραση...', 'admin.notif.tmpl.saving': 'Αποθήκευση...', 'admin.notif.email_verification': 'Επαλήθευση email', 'admin.notif.registration_success': 'Επιτυχής εγγραφή', 'admin.notif.password_reset': 'Επαναφορά κωδικού', 'admin.notif.new_offer': 'Νέα προσφορά', 'admin.notif.new_task': 'Νέα εργασία', 'admin.notif.offer_accepted': 'Προσφορά αποδεκτή', 'admin.notif.new_message': 'Νέο μήνυμα', 'admin.notif.offer_declined': 'Απόρριψη προσφοράς', 'admin.notif.offer_other_accepted': 'Επιλέχθηκε άλλος ειδικός', 'admin.notif.task_updated': 'Ενημέρωση εργασίας', 'admin.notif.deadline_reminder': 'Υπενθύμιση προθεσμίας', 'admin.notif.task_archived': 'Αυτόματη απόσυρση εργασίας', 'admin.notif.referral_reward': 'Ανταμοιβή παραπομπής', // Plan lifecycle email templates 'admin.email_template.plan_activated': 'Τιμολόγιο — ενεργοποίηση πλάνου', 'admin.email_template.plan_upgraded': 'Τιμολόγιο — αναβάθμιση πλάνου', 'admin.email_template.plan_downgrade_scheduled': 'Τιμολόγιο — προγραμματισμένη υποβάθμιση', 'admin.email_template.plan_downgrade_applied': 'Τιμολόγιο — εφαρμογή υποβάθμισης', 'admin.email_template.plan_renewal_reminder': 'Τιμολόγιο — υπενθύμιση ανανέωσης', 'admin.email_template.plan_insufficient_funds': 'Τιμολόγιο — ανεπαρκές υπόλοιπο', // Pricing confirm modal 'pricing.confirm.title': 'Επιβεβαίωση επιλογής πλάνου', 'pricing.confirm.plan': 'Πλάνο', 'pricing.confirm.prorated': 'Αναλογική έκπτωση', 'pricing.confirm.effective_price': 'Προς πληρωμή', 'pricing.confirm.your_balance': 'Το υπόλοιπό σας', 'pricing.confirm.downgrade_info': 'Η μετάβαση στο νέο πλάνο θα γίνει αυτόματα μετά τη λήξη της τρέχουσας περιόδου.', 'pricing.confirm.insufficient': 'Ανεπαρκές υπόλοιπο.', 'pricing.confirm.top_up': 'Ανανέωση', 'pricing.confirm.schedule_downgrade': 'Προγραμματισμός μετάβασης', 'pricing.confirm.pay': 'Πληρωμή', 'admin.user_edit.title': 'Επεξεργασία χρήστη', 'admin.user_edit.email': 'Email', 'admin.user_edit.email_verified': 'Διευθυνση email επαληθεύτηκε', 'admin.user_edit.email_not_verified': 'Email δεν έχει επαληθευτεί', 'admin.user_edit.verify_email_btn': 'Χειροκίνητη επαλήθευση', 'admin.user_edit.verify_email_done': 'Email επαληθεύτηκε!', 'admin.user_edit.id': 'ID', 'admin.user_edit.registered': 'Εγγραφή', 'admin.user_edit.last_seen': 'Τελευταία σύνδεση', 'admin.user_edit.lang': 'Γλώσσα', 'admin.user_edit.first_name': 'Όνομα', 'admin.user_edit.last_name': 'Επώνυμο', 'admin.user_edit.phone': 'Τηλέφωνο', 'admin.user_edit.bio': 'Βιογραφικό', 'admin.user_edit.role': 'Ρόλος', 'admin.user_edit.plan': 'Πακέτο', 'admin.user_edit.no_plan': '— Χωρίς πακέτο —', 'admin.user_edit.active': 'Ενεργός λογαριασμός', 'admin.user_edit.published': 'Δημοσιευμένη', 'admin.user_edit.balance': 'Υπόλοιπο (EUR)', 'admin.user_edit.skills': 'Δεξιότητες', 'admin.user_edit.tab.profile': 'Προφίλ', 'admin.user_edit.tab.account': 'Λογαριασμός', 'admin.user_edit.tab.balance': 'Υπόλοιπο', 'admin.user_edit.tab.settings': 'Ρυθμίσεις', 'admin.user_edit.tab.specialist': 'Προσφορές', 'admin.user_edit.tab.site': 'Ιστοσελίδα', 'admin.user_edit.plan_expires': 'Λήξη πλάνου', 'admin.user_edit.interface_lang': 'Γλώσσα διεπαφής', 'admin.user_edit.comm_languages': 'Γλώσσες επικοινωνίας', 'admin.user_edit.personal_site_slug': 'Προσωπική σελίδα', 'admin.user_edit.show_contact_info': 'Εμφάνιση στοιχείων επικοινωνίας', 'admin.user_edit.show_contact_info.hint': 'Ορατό στους πελάτες', 'admin.user_edit.notify_new_tasks': 'Ειδοποίηση για νέες εργασίες', 'admin.user_edit.notify_new_tasks.hint': 'Push και email ειδοποιήσεις', 'admin.user_edit.notif_messages': 'Ειδοποιήσεις μηνυμάτων', 'admin.user_edit.notif_messages.hint': 'Νέα μηνύματα στη συνομιλία', 'admin.user_edit.site_settings': 'Ρυθμίσεις προσωπικής σελίδας', 'admin.user_edit.categories': 'Κατηγορίες υπηρεσιών', 'admin.user_edit.locations': 'Περιοχές εξυπηρέτησης', 'admin.user_edit.skill_placeholder': 'Νέα δεξιότητα...', 'admin.user_edit.add_category': '— Επιλέξτε κατηγορία —', 'admin.user_edit.add_location': '— Επιλέξτε περιοχή —', 'admin.user_edit.specialist_cards': 'Προσφορές ειδικού', 'admin.user_edit.no_cards': 'Δεν βρέθηκαν προσφορές', 'admin.user_edit.card_title': 'Τίτλος προσφοράς', 'admin.user_edit.card_description': 'Περιγραφή', 'admin.balance.topup.btn': 'Αναπλήρωση', 'admin.balance.withdraw.btn': 'Αφαίρεση', 'admin.balance.modal_hint': 'Οι αλλαγές ισχύουν άμεσα και καταγράφονται στο ιστορικό', 'admin.balance.topup.title': 'Αναπλήρωση υπολοίπου', 'admin.balance.topup.amount': 'Ποσό', 'admin.balance.topup.description': 'Σχόλιο', 'admin.balance.topup.description.placeholder': 'Για παράδειγμα: bonus ή χειροκίνητη αναπλήρωση', 'admin.balance.topup.submit': 'Αναπλήρωση υπολοίπου', 'admin.balance.withdraw.title': 'Αφαίρεση υπολοίπου', 'admin.balance.withdraw.amount': 'Ποσό', 'admin.balance.withdraw.description': 'Σχόλιο', 'admin.balance.withdraw.description.placeholder': 'Για παράδειγμα: επιστροφή ή χειροκίνητη χρέωση', 'admin.balance.withdraw.submit': 'Αφαίρεση από το υπόλοιπο', 'admin.user_edit.role.customer': 'Πελάτης', 'admin.user_edit.role.user': 'Χρήστης', 'admin.user_edit.role.specialist': 'Βοηθός', 'admin.user_edit.role.admin': 'Διαχειριστής', 'common.refresh': 'Ανανέωση', 'common.back_home': 'Αρχική', 'admin.loc.hint': 'Διαχείριση πόλεων και συνοικιών', 'admin.loc.add_city': 'Νέα πόλη', 'admin.loc.add_district': 'Προσθήκη συνοικίας', 'admin.loc.new': 'Νέα τοποθεσία', 'admin.loc.edit': 'Επεξεργασία τοποθεσίας', 'admin.loc.district': 'συνοικία', 'admin.loc.empty': 'Δεν υπάρχουν τοποθεσίες', 'admin.loc.delete.confirm': 'Διαγραφή τοποθεσίας; Όλες οι συνοικίες θα διαγραφούν επίσης.', 'admin.cat.add_root': 'Νέα κατηγορία', 'admin.cat.add_sub': 'Υποκατηγορία', 'admin.cat.edit': 'Επεξεργασία', 'admin.cat.delete': 'Διαγραφή', 'admin.cat.delete.confirm': 'Διαγραφή κατηγορίας; Όλες οι υποκατηγορίες θα διαγραφούν επίσης.', 'admin.cat.slug': 'Slug', 'admin.cat.icon': 'Εικονίδιο', 'admin.cat.name_el': 'Ελληνικά', 'admin.cat.name_en': 'Αγγλικά', 'admin.cat.name_ru': 'Ρωσικά', 'admin.cat.name_uk': 'Ουκρανικά', 'admin.cat.active': 'Ενεργή', 'admin.cat.parent': 'Γονική κατηγορία', 'admin.cat.no_parent': 'Κορυφαίο επίπεδο', 'admin.cat.save': 'Αποθήκευση', 'admin.cat.cancel': 'Ακύρωση', 'admin.cat.empty': 'Δεν υπάρχουν κατηγορίες', 'admin.cat.hint': 'Διαχείριση κατηγοριών με πολυεπίπεδη ιεραρχία', 'admin.cat.new': 'Νέα κατηγορία', 'admin.cat.subcategory': 'υποκατηγορία', 'admin.cat.add_child': 'Προσθήκη υποκατηγορίας', 'admin.cat.inactive': 'Ανενεργή', 'admin.event.user_login': 'Σύνδεση', 'admin.event.user_register': 'Εγγραφή', 'admin.event.admin_user_deactivate': 'Αποκλεισμός χρήστη', 'admin.event.admin_user_activate': 'Ενεργοποίηση χρήστη', 'admin.event.admin_user_role_changed': 'Αλλαγή ρόλου', 'admin.event.admin_task_cancelled': 'Ακύρωση εργασίας', 'admin.event.admin_task_deleted': 'Διαγραφή εργασίας', 'admin.event.admin_report_reviewed': 'Αναφορά εξετάστηκε', 'admin.event.admin_report_dismissed': 'Αναφορά απορρίφθηκε', 'admin.event.task_created': 'Δημιουργία εργασίας', 'user.online': 'Σε σύνδεση', 'user.seen_minutes': 'ήταν εδώ πριν {n} λεπτά', 'user.seen_hours': 'ήταν εδώ πριν {n} ώρες', 'user.seen_yesterday': 'ήταν εδώ χθες', 'user.seen_days': 'ήταν εδώ πριν {n} μέρες', // Specialists 'specialists.title': 'Προσφορές', 'specialists.search': 'Αναζήτηση ειδικού...', 'specialists.search.btn': 'Αναζήτηση', 'specialists.empty': 'Δεν βρέθηκαν ειδικοί', 'specialists.no_bio': 'Χωρίς περιγραφή', 'specialists.view': 'Προβολή προφίλ', 'specialists.reviews': 'αξιολογήσεις', 'specialist.favorite': 'Προσθήκη στα αγαπημένα', 'specialist.unfavorite': 'Αφαίρεση από αγαπημένα', 'specialist.site_link': 'Προσωπικό site', 'favorites.specialists.title': 'Αγαπημένοι ειδικοί', 'favorites.specialists.empty': 'Δεν έχετε αγαπημένους ειδικούς', 'nav.favorites': 'Αγαπημένα', 'nav.schedule': 'Πρόγραμμα', 'nav.find_tasks': 'Αναζήτηση εργασιών', 'schedule.title': 'Το πρόγραμμά μου', 'schedule.subtitle': 'Σημειώστε τις ημέρες που είστε ελεύθεροι ή απασχολημένοι — οι πελάτες θα δουν τη διαθεσιμότητά σας', 'schedule.available': 'Ελεύθερος', 'schedule.busy': 'Απασχολημένος', 'schedule.unset': 'Μη ορισμένο', 'schedule.click_hint': '← κλικ για εναλλαγή κατάστασης', 'schedule.range_mode': 'Επιλογή εύρους', 'schedule.range_from': 'Από {date} — επιλέξτε τελική ημερομηνία', 'schedule.click_to_set': 'Κλικ για ορισμό', 'schedule.free': 'ελεύθερα', 'schedule.busy_count': 'απασχολημένα', 'schedule.free_days': 'ελεύθερες ημέρες', 'schedule.googleCalendar': 'Google Calendar', 'schedule.connectGoogle': 'Σύνδεση με Google Calendar', 'schedule.disconnectGoogle': 'Αποσύνδεση', 'schedule.connectedAs': 'Συνδεδεμένο ως', 'schedule.importFromGoogle': 'Συγχρονισμός από Google', 'schedule.gcalConnected': '✓ Google Calendar συνδέθηκε', 'schedule.gcalError': 'Σφάλμα σύνδεσης Google Calendar', 'schedule.gcalImportDone': 'Εισήχθησαν {n} ημερ. από Google Calendar', 'schedule.gcalAutoSyncNote': 'Οι αλλαγές αποστέλλονται αυτόματα στο Google Calendar', 'schedule.gcalConnectDesc': 'Συνδέστε το Google Calendar για αυτόματο συγχρονισμό', 'schedule.gcalDisconnectConfirm': 'Αποσύνδεση Google Calendar;', 'find_tasks.title': 'Αναζήτηση εργασιών', 'find_tasks.for_me': 'Για μένα', 'find_tasks.all': 'Όλες οι εργασίες', 'find_tasks.by_category': 'Ανά κατηγορία', 'find_tasks.list': 'Λίστα', 'find_tasks.already_offered': 'Προσφορά υποβλήθηκε', 'find_tasks.offer_now': 'Υποβολή προσφοράς', 'find_tasks.empty_for_me': 'Δεν βρέθηκαν εργασίες στις κατηγορίες σας', 'find_tasks.banner_hint': 'Βρείτε εργασίες που ταιριάζουν με το χαρτοφυλάκιό σας', 'find_tasks.no_cards': 'Δημιουργήστε ένα χαρτοφυλάκιο ειδικού για να δείτε εργασίες για εσάς', 'find_tasks.add_card': 'Δημιουργία χαρτοφυλακίου', 'find_tasks.search': 'Αναζήτηση εργασιών...', 'find_tasks.tasks_count': 'εργασίες', // Footer 'footer.tagline': 'Η πλατφόρμα εργασιών για την Ελλάδα', 'footer.rights': 'Όλα τα δικαιώματα διατηρούνται.', 'nav.privacy': 'Πολιτική απορρήτου', 'nav.delete_account': 'Διαγραφή λογαριασμού', 'delete_account.title': 'Αίτηση διαγραφής λογαριασμού', 'delete_account.subtitle': 'Αφού επαληθεύσουμε την αίτησή σας, θα διαγράψουμε μόνιμα τον λογαριασμό και τα δεδομένα σας εντός 30 ημερών.', 'delete_account.warning': 'Αυτή η ενέργεια δεν μπορεί να αναιρεθεί. Όλα τα δεδομένα σας θα διαγραφούν μόνιμα.', 'delete_account.reason_label': 'Αιτία (προαιρετικό)', 'delete_account.reason_placeholder': 'Πείτε μας γιατί θέλετε να διαγράψετε τον λογαριασμό σας...', 'delete_account.confirm_label': 'Επιβεβαιώνω ότι θέλω να διαγράψω μόνιμα τον λογαριασμό μου', 'delete_account.submit': 'Υποβολή αίτησης', 'delete_account.submitting': 'Αποστολή...', 'delete_account.success_title': 'Η αίτησή σας ελήφθη', 'delete_account.success_body': 'Θα επεξεργαστούμε την αίτησή σας εντός 30 ημερών και θα σας ειδοποιήσουμε μέσω email.', 'delete_account.login_required': 'Πρέπει να συνδεθείτε για να υποβάλετε αίτηση διαγραφής.', 'delete_account.login_btn': 'Σύνδεση', // App download section 'app.download_title': 'Κατεβάστε την εφαρμογή CanHelp', 'app.download_desc': 'Όλο το CanHelp — πάντα μαζί σας. Διαθέσιμο για Android και iOS.', // Nav 'nav.pricing': 'Τιμές', // Pricing page 'pricing.title': 'Τιμολόγηση', 'pricing.subtitle': 'Επιλέξτε το κατάλληλο πρόγραμμα', 'pricing.role.customer': 'Πελάτης', 'pricing.role.specialist': 'Ειδικός', 'pricing.free': 'Δωρεάν', 'pricing.per_month': 'μήνα', 'pricing.duration': 'Διάρκεια', 'pricing.days': 'ημ.', 'pricing.current_plan': 'Το πρόγραμμά σας', 'pricing.popular': 'Δημοφιλές', 'pricing.choose': 'Επιλογή', 'pricing.your_plan': 'Ενεργό πρόγραμμα', 'pricing.free_default': 'Προεπιλογή', 'pricing.compare': 'Σύγκριση λειτουργιών', 'pricing.feature': 'Λειτουργία', 'pricing.faq_note': 'Η πληρωμή γίνεται από το υπόλοιπο CanHelp. Ανατροφοδότηση διαθέσιμη στην Πληρωμή.', 'pricing.feat.messages': 'Μηνύματα / ημέρα', 'pricing.feat.orders': 'Παραγγελίες / ημέρα', 'pricing.feat.contact_all': 'Επικοινωνία με όλους', 'pricing.feat.view_phone': 'Εμφάνιση τηλεφώνου', 'pricing.feat.show_contact': 'Εμφάνιση στοιχείων επαφής', 'pricing.feat.favorites': 'Αγαπημένα', 'pricing.feat.verified_badge': 'Επαληθευμένο badge', 'pricing.feat.google_calendar': 'Google Calendar', 'pricing.feat.personal_site': 'Προσωπικό site', 'pricing.feat.auto_response': 'Αυτόματη απάντηση', 'pricing.feat.auto_match': 'Αυτόματη αντιστοίχιση', 'pricing.feat.highlighted_reviews': 'Επισημασμένες αξιολογήσεις', 'pricing.feat.portfolio': 'Στοιχεία προσφοράς', 'pricing.feat.cards': 'Αριθμός προσφορών', 'pricing.feat.notify_tasks': 'Ειδοποιήσεις νέων εργασιών', 'pricing.feat.video': 'Βίντεο στην προσφορά', // Upgrade prompt 'upgrade.available_in': 'Διαθέσιμο στο', 'upgrade.cta': 'Αναβάθμιση', // Dashboard plan block 'dashboard.plan.title': 'Το πρόγραμμά μου', 'dashboard.plan.expires': 'Λήγει σε {n} ημέρες', 'dashboard.plan.upgrade': 'Αναβάθμιση προγράμματος', 'dashboard.plan.no_plan': 'Δωρεάν πρόγραμμα', 'dashboard.plan.messages': 'Μηνύματα σήμερα', 'dashboard.plan.orders': 'Παραγγελίες σήμερα', 'dashboard.plan.limits': 'Ημερήσια όρια', 'dashboard.plan.features': 'Λειτουργίες', 'dashboard.plan.stats': 'Στατιστικά', 'dashboard.stats.cards': 'Χαρτοφυλάκια', 'dashboard.stats.maxCards': 'Μέγ. χαρτοφυλάκια', 'dashboard.stats.portfolioItems': 'Στοιχεία portfolio', 'dashboard.stats.maxPortfolioItems': 'Μέγ. στοιχεία', 'dashboard.stats.activeOffers': 'Ενεργές προσφορές', 'dashboard.stats.reviewsReceived': 'Αξιολογήσεις', 'dashboard.stats.activeTasks': 'Ενεργές εργασίες', 'dashboard.stats.completedTasks': 'Ολοκληρωμένες', 'status.can_help_now': 'Είμαι διαθέσιμος τώρα', 'status.need_help': 'Χρειάζομαι βοήθεια', 'status.active': 'Ενεργό', 'status.toggle_on': 'Ενεργοποίηση', 'status.toggle_off': 'Απενεργοποίηση', // FOMO 'fomo.missed_orders': 'Χάσατε {n} παραγγελίες', 'fomo.missed_value': 'Αξία €{v}', 'fomo.upgrade_hint': 'Αναβαθμίστε για να λαμβάνετε περισσότερες παραγγελίες', 'fomo.conversion': 'Μετατροπές εργασιών', 'fomo.active': 'Ενεργές', 'fomo.with_offers': 'Με προσφορές', 'fomo.completed': 'Ολοκληρωμένες', 'fomo.already_offered': '{n} ειδικοί έχουν ήδη απαντήσει', 'fomo.specialist_missed': 'Χάσατε {n} παραγγελίες', 'fomo.top_categories': 'Κατηγορίες', 'fomo.offers_received': 'προσφορές ελήφθησαν', 'fomo.avg_offers': 'Μέσο {n}/εργασία', 'fomo.completion_rate': 'ολοκληρωμένες', // Task auto-match 'task.auto_match': 'Αυτόματη αντιστοίχιση', 'task.auto_match_results': 'Κορυφαίοι ειδικοί', 'task.no_offer_yet': 'Δεν έχετε στείλει προσφορά ακόμα', 'task.make_offer': 'Αποστολή προσφοράς', 'auto_response.title': 'Αυτόματη Απάντηση', 'auto_response.enabled': 'Ενεργοποίηση αυτόματης απάντησης', 'auto_response.min_budget': 'Ελάχ. προϋπολογισμός', 'auto_response.max_budget': 'Μέγ. προϋπολογισμός', 'auto_response.default_price': 'Προεπιλεγμένη τιμή', 'auto_response.default_message': 'Προεπιλεγμένο μήνυμα', 'auto_response.max_per_day': 'Μέγ. αυτόματες προσφορές/ημέρα', 'auto_response.save': 'Αποθήκευση', 'auto_response.saved': 'Αποθηκεύτηκε', 'auto_response.categories': 'Κατηγορίες', 'auto_response.locations': 'Τοποθεσίες', // Personal site 'profile.personal_site': 'Προσωπικό Site', 'profile.site_slug': 'Slug URL', 'profile.site_slug_hint': 'Μόνο λατινικοί χαρακτήρες, αριθμοί, - και _', 'profile.site_open': 'Άνοιγμα site', 'profile.site_preview': 'Το site σας', 'profile.show_contact': 'Εμφάνιση στοιχείων επαφής', 'profile.show_contact_hint': 'Πελάτες με Pro/Ultimate πρόγραμμα θα βλέπουν το τηλέφωνό σας', // Google Calendar plan gate 'gcal.upgrade_required': 'Το Google Calendar απαιτεί Pro ή Ultimate πρόγραμμα', // Chat limits 'chat.limit_warning': 'Απομένουν {n} μηνύματα σήμερα', 'chat.limit_reached': 'Εξαντλήθηκαν τα μηνύματα. Αναβαθμίστε το πρόγραμμά σας', 'chat.upgrade': 'Αναβάθμιση', // Site page 'site.member_since': 'Μαζί μας από', 'site.rating': 'Βαθμολογία', 'site.completed_tasks': 'Ολοκληρώθηκαν', 'site.languages': 'Γλώσσες', 'site.photos': 'φωτ.', 'site.contact_form': 'Επικοινωνία', 'site.contact_sent': 'Το μήνυμα στάλθηκε!', 'site.contact_sent_desc': 'Ο ειδικός θα επικοινωνήσει μαζί σας σύντομα', 'site.contact_name': 'Όνομα', 'site.contact_name_ph': 'Το όνομά σας', 'site.contact_email_ph': 'your@email.com', 'site.contact_message': 'Μήνυμα', 'site.contact_message_ph': 'Περιγράψτε την εργασία σας...', 'site.contact_send': 'Αποστολή', 'site.share': 'Κοινοποίηση', 'site.speaks_languages': 'Μιλάει', 'site.message_sent': 'Το μήνυμα εστάλη!', 'site.message_sent_desc': 'Ο ειδικός θα το λάβει στη συνομιλία', 'site.message_placeholder': 'Γράψτε το μήνυμά σας...', 'site.write_to_chat': 'Γράψτε στο chat', 'site.auth_required_title': 'Απαιτείται σύνδεση', 'site.auth_required_desc': 'Για να γράψετε στο chat, χρειάζεται να συνδεθείτε στο λογαριασμό σας.', 'site.auth_login_btn': 'Σύνδεση', 'site.auth_contact_form_btn': 'Επικοινωνία μέσω φόρμας', 'specialist.services': 'Υπηρεσίες', 'portfolio.title': 'Χαρτοφυλάκιο', 'common.not_found': 'Η σελίδα δεν βρέθηκε', 'common.anonymous': 'Ανώνυμα', 'specialist_setup.page_title': 'Ρύθμιση προφίλ ειδικού', 'specialist_setup.step_of': 'Βήμα {current} από {total}', 'specialist_setup.next': 'Επόμενο', 'specialist_setup.back': 'Πίσω', 'specialist_setup.skip': 'Παράλειψη', 'specialist_setup.finish': 'Ολοκλήρωση', 'specialist_setup.go_to_profile': 'Μεταβείτε στο προφίλ', 'specialist_setup.browse_tasks': 'Εξερεύνηση εργασιών', 'specialist_setup.step1.title': 'Καλωσήλθατε!', 'specialist_setup.step1.subtitle': 'Ας ρυθμίσουμε το προφίλ σας', 'specialist_setup.step1.desc': 'Ένα πλήρες προφίλ σας βοηθά να βρείτε περισσότερους πελάτες. Ακολουθήστε τα βήματα για να δημιουργήσετε το τέλειο προφίλ ειδικού.', 'specialist_setup.step1.what_next': 'Τι θα κάνουμε:', 'specialist_setup.step1.item1': 'Συμπλήρωση βασικών πληροφοριών', 'specialist_setup.step1.item2': 'Δημιουργία κάρτας υπηρεσίας', 'specialist_setup.step1.item3': 'Προσθήκη δεξιοτήτων και κατηγοριών', 'specialist_setup.step1.item4': 'Επιλογή γεωγραφικής περιοχής', 'specialist_setup.step1.item5': 'Μεταφόρτωση φωτογραφιών χαρτοφυλακίου', 'specialist_setup.step2.title': 'Βασικό προφίλ', 'specialist_setup.step2.subtitle': 'Πείτε μας για σας', 'specialist_setup.step2.bio_label': 'Σχετικά με εμένα', 'specialist_setup.step2.bio_placeholder': 'Περιγράψτε την εμπειρία σας, τις υπηρεσίες που προσφέρετε...', 'specialist_setup.step2.phone_label': 'Τηλέφωνο', 'specialist_setup.step2.phone_placeholder': '+30 6900000000', 'specialist_setup.step2.photo_label': 'Φωτογραφία προφίλ', 'specialist_setup.step2.photo_btn': 'Μεταφόρτωση φωτογραφίας', 'specialist_setup.step2.photo_uploading': 'Μεταφόρτωση...', 'specialist_setup.step2.photo_hint': 'Εμφανίζεται στο προφίλ σας', 'specialist_setup.step3.title': 'Κάρτα υπηρεσίας', 'specialist_setup.step3.subtitle': 'Δημιουργήστε την πρώτη σας κάρτα υπηρεσίας', 'specialist_setup.step3.title_label': 'Τίτλος κάρτας', 'specialist_setup.step3.title_placeholder': 'Π.χ. Υδραυλικός, Ηλεκτρολόγος, Καθαρισμός...', 'specialist_setup.step3.desc_label': 'Περιγραφή', 'specialist_setup.step3.desc_placeholder': 'Περιγράψτε λεπτομερώς τι προσφέρετε, εμπειρία, πλεονεκτήματα...', 'specialist_setup.step3.title_required': 'Απαιτείται τίτλος', 'specialist_setup.step4.title': 'Δεξιότητες & Κατηγορίες', 'specialist_setup.step4.subtitle': 'Προσθέστε δεξιότητες και επιλέξτε κατηγορίες', 'specialist_setup.step4.skills_label': 'Δεξιότητες', 'specialist_setup.step4.skills_placeholder': 'Π.χ. Εγκατάσταση σωληνώσεων...', 'specialist_setup.step4.skills_add': 'Προσθήκη', 'specialist_setup.step4.categories_label': 'Κατηγορίες', 'specialist_setup.step5.title': 'Γεωγραφική περιοχή', 'specialist_setup.step5.subtitle': 'Πού παρέχετε υπηρεσίες;', 'specialist_setup.step5.hint': 'Επιλέξτε πόλεις ή συγκεκριμένες περιοχές', 'specialist_setup.done.title': 'Το προφίλ σας είναι έτοιμο!', 'specialist_setup.done.subtitle': 'Συγχαρητήρια! Το προφίλ σας έχει ρυθμιστεί', 'specialist_setup.done.desc': 'Τώρα μπορείτε να λαμβάνετε παραγγελίες από πελάτες. Αναζητήστε εργασίες που ταιριάζουν με τις δεξιότητές σας.', // Support 'support.title': 'Υποστήριξη', 'support.type.label': 'Τύπος αιτήματος', 'support.type.bug': 'Σφάλμα', 'support.type.suggestion': 'Πρόταση', 'support.type.other': 'Άλλο', 'support.subject': 'Θέμα', 'support.subject.placeholder': 'Σύντομη περιγραφή...', 'support.body': 'Μήνυμα', 'support.body.placeholder': 'Περιγράψτε λεπτομερώς το πρόβλημα ή την πρότασή σας...', 'support.submit': 'Αποστολή', 'support.cancel': 'Ακύρωση', 'support.error': 'Σφάλμα αποστολής. Παρακαλώ δοκιμάστε ξανά.', 'support.sent.title': 'Λάβαμε το αίτημά σας!', 'support.sent.body': 'Θα σας απαντήσουμε στο email σας το συντομότερο δυνατόν.', 'support.sent.close': 'Κλείσιμο', 'admin.tab.support': 'Υποστήριξη', 'admin.tab.backup': 'Αντίγραφα ασφαλείας', 'admin.tab.translations': 'Μεταφράσεις', 'admin.tab.dbcheck': 'Έλεγχος ΒΔ', 'admin.tab.balances': 'Υπόλοιπα', 'admin.tab.push': 'Push', 'admin.tab.referrals': 'Παραπομπές', 'admin.search': 'Αναζήτηση', 'admin.noData': 'Δεν υπάρχουν δεδομένα', 'admin.cat.order': 'Σειρά', 'admin.cat.skills': 'Δεξιότητες', 'admin.plans.form.max_tasks': 'Μέγιστες εργασίες', 'admin.settings.referral.shared_section': 'Κοινές ρυθμίσεις referral', 'admin.settings.seo.title': 'Ρυθμίσεις SEO', 'admin.backup.title': 'Αντίγραφα ασφαλείας', 'admin.backup.tables': 'Πίνακες', 'admin.backup.exportAll': 'Εξαγωγή όλων', 'admin.backup.importAll': 'Εισαγωγή όλων', 'admin.backup.exportTable': 'Εξαγωγή πίνακα', 'admin.backup.importTable': 'Εισαγωγή πίνακα', 'admin.backup.exporting': 'Εξαγωγή...', 'admin.backup.importing': 'Εισαγωγή...', 'admin.backup.exportSuccess': 'Η εξαγωγή ολοκληρώθηκε', 'admin.backup.importSuccess': 'Η εισαγωγή ολοκληρώθηκε', 'admin.backup.autoBackup': 'Αυτόματο backup', 'admin.backup.autoBackupDesc': 'Καθημερινό αυτόματο backup', 'admin.backup.storedBackups': 'Αποθηκευμένα backups', 'admin.backup.noStoredBackups': 'Δεν υπάρχουν αποθηκευμένα backups', 'admin.backup.restore': 'Επαναφορά', 'admin.backup.restoreConfirm': 'Επαναφορά από backup;', 'admin.backup.restoreSuccess': 'Η επαναφορά ολοκληρώθηκε', 'admin.backup.restoring': 'Επαναφορά...', 'admin.backup.date': 'Ημερομηνία', 'admin.backup.size': 'Μέγεθος', 'admin.backup.today': 'Σήμερα', 'admin.backup.yesterday': 'Χθες', 'admin.balance.col.operation': 'Ενέργεια', 'admin.balance.col.amount': 'Ποσό', 'admin.balance.col.result': 'Υπόλοιπο', 'admin.balance.col.description': 'Περιγραφή', 'admin.balance.col.date': 'Ημερομηνία', 'admin.balance.empty': 'Δεν υπάρχουν εγγραφές', 'admin.balance.filter.all': 'Όλες οι ενέργειες', 'admin.balance.filter.user_id': 'Φίλτρο ανά userId', 'admin.balance.kind.topup': 'Αναπλήρωση', 'admin.balance.kind.plan_purchase': 'Χρέωση πλάνου', 'admin.balance.kind.admin_topup': 'Αναπλήρωση από διαχειριστή', 'admin.balance.kind.admin_adjustment': 'Διόρθωση', 'admin.support.search': 'Αναζήτηση', 'admin.support.all_statuses': 'Όλες οι καταστάσεις', 'admin.support.all_types': 'Όλοι οι τύποι', 'admin.support.none': 'Δεν υπάρχουν αιτήματα', 'admin.support.reply': 'Απάντηση', 'admin.support.reply_placeholder': 'Πληκτρολογήστε απάντηση...', 'admin.support.send_reply': 'Αποστολή απάντησης', 'admin.support.cancel': 'Ακύρωση', 'admin.support.close': 'Κλείσιμο', 'admin.support.status.open': 'Ανοιχτό', 'admin.support.status.in_progress': 'Σε εξέλιξη', 'admin.support.status.resolved': 'Επιλύθηκε', 'admin.support.status.closed': 'Κλειστό', 'admin.support.your_reply': 'Η απάντησή σας', 'admin.user_edit.visibility_requirements.title': 'Το προφίλ δεν εμφανίζεται ακόμη στις Προσφορές', 'admin.user_edit.visibility_requirements.hint': 'Απαιτήσεις ορατότητας:', 'admin.user_edit.visibility_requirements.bio': 'Συμπληρώστε το βιογραφικό', 'admin.user_edit.visibility_requirements.published_card': 'Δημοσιεύστε τουλάχιστον μία κάρτα', 'admin.user_edit.visibility_requirements.categories': 'Προσθέστε κατηγορία σε δημοσιευμένη κάρτα', 'admin.user_edit.visibility_requirements.locations': 'Προσθέστε τοποθεσία σε δημοσιευμένη κάρτα', 'auto_response.desc': 'Αυτόματη απάντηση σε κατάλληλες εργασίες', 'auto_response.budget_range': 'Προϋπολογισμός εργασίας', 'auto_response.message_placeholder': 'Γεια σας! Μπορώ να βοηθήσω με αυτήν την εργασία...', 'profile.background.title': 'Φόντο κεφαλίδας προφίλ', 'profile.background.hint': 'Εμφανίζεται στην κεφαλίδα του δημόσιου προφίλ σε web και mobile.', 'profile.photo.uploading': 'Μεταφόρτωση...', 'profile.balance.history': 'Ιστορικό ενεργειών', 'profile.balance.history.last': 'Τελευταίες ενέργειες', 'profile.balance.history.empty': 'Δεν υπάρχουν ενέργειες', 'profile.balance.history.balance_after': 'Υπόλοιπο μετά', 'profile.balance.history.kind.topup': 'Αναπλήρωση υπολοίπου', 'profile.balance.history.kind.plan_purchase': 'Χρέωση πλάνου', 'profile.balance.history.kind.admin_topup': 'Αναπλήρωση από διαχειριστή', 'profile.balance.history.kind.admin_adjustment': 'Διόρθωση από διαχειριστή', 'profile.plan_history.title': 'Ιστορικό πλάνου', 'profile.plan_history.empty': 'Το ιστορικό πλάνου είναι άδειο', 'profile.plan_history.expires': 'Έως', 'profile.plan_history.days': 'ημέρες', 'profile.plan_history.event.activated': 'Ενεργοποιήθηκε', 'profile.plan_history.event.renewed': 'Ανανεώθηκε', 'profile.plan_history.event.downgraded': 'Υποβαθμίστηκε', 'profile.plan_history.event.referral_reward': 'Ανταμοιβή referral', 'profile.plan_history.event.admin_change': 'Αλλαγή από διαχειριστή', 'profile.plan_history.event.expired': 'Έληξε', 'profile.show_contact_desc': 'Επιτρέπει στους πελάτες να επικοινωνούν απευθείας', 'profile.site.visible.price_list': 'Τιμοκατάλογος', 'site.pricelist': 'Τιμοκατάλογος', 'status.plan_required': 'Η κατάσταση δεν είναι διαθέσιμη στο τρέχον πλάνο', 'status.admin_not_applicable': 'Η κατάσταση χρήστη δεν ισχύει για διαχειριστές' }, en: { 'footer.slogan': 'Your task — our care! We solve any issue quickly and easily.', 'footer.links': 'Links', 'footer.socials': 'Socials', 'nav.home': 'Home', 'nav.tasks': 'Tasks', 'nav.post': '+ Post task', 'nav.dashboard': 'My Tasks', 'nav.chat': 'Messages', 'nav.notifications': 'Notifications', 'nav.profile': 'Profile', 'nav.admin': 'Admin Panel', 'nav.specialists': 'Offers', 'nav.new_task': 'New task', 'nav.login': 'Login', 'nav.register': 'Register', 'nav.logout': 'Logout', 'hero.title': 'Everyone has something valuable to offer', 'hero.subtitle': 'Find help, offer your skills, or earn money helping others', 'hero.cta.post': 'Find help', 'hero.cta.browse': 'Offer your help', 'hero.cta.specialists': 'Find a job', 'hero.search.placeholder': 'What do you need? e.g. electrician, cleaning...', 'hero.specialist.title': 'Find tasks near you', 'hero.specialist.subtitle': 'Discover tasks in your categories and send your offer', 'hero.specialist.cta': 'Browse tasks', 'hero.specialist.search.placeholder': 'Search tasks... e.g. electrical, cleaning', 'section.categories.specialist': 'Find tasks by category', 'section.cities.specialist': 'Tasks by city', 'how.specialist.step1.title': 'Create a specialist card', 'how.specialist.step1.desc': 'Set your categories, skills and areas — the system finds tasks automatically', 'how.specialist.step2.title': 'Find relevant tasks', 'how.specialist.step2.desc': 'Discover tasks in your categories and get started right away', 'how.specialist.step3.title': 'Send an offer & earn', 'how.specialist.step3.desc': 'Submit an offer with price and timeline, communicate with clients and complete tasks', 'stats.specialists': 'offers', 'stats.tasks': 'tasks', 'stats.categories': 'categories', 'stats.free': 'free sign-up', 'promo.title': 'Get Pro for free — until end of year', 'promo.subtitle': 'Sign up now and enjoy the Pro plan at no cost. Offer ends December 31.', 'promo.cta': 'Sign up free', 'promo.days': 'days', 'promo.hours': 'hrs', 'promo.minutes': 'min', 'promo.seconds': 'sec', 'section.categories': 'Create a task in any category', 'section.how': 'How it works', 'section.recent': 'Recent tasks', 'section.all': 'See all →', 'section.more': 'more', 'section.cities': 'Cities & Districts', 'section.community': 'A community project for everyone', 'community.subtitle': 'CanHelp is not just a marketplace — it\'s a community of mutual help. Anyone with knowledge or a skill can find a client. Anyone with a problem can find a specialist.', 'community.point1.title': 'Are you good at something?', 'community.point1.desc': 'Repairs, tutoring, design, translation, care — every skill has value. Create a profile and find clients near you.', 'community.point2.title': 'Need help with something?', 'community.point2.desc': 'Post a task in under a minute and receive offers from verified specialists in your city.', 'community.point3.title': 'Help the project grow', 'community.point3.desc': 'CanHelp grows through communities. Share the link with friends and acquaintances — together we build something useful for everyone.', 'community.share': 'Share with friends', 'community.share.copied': 'Link copied!', // Referral section on home page 'section.referral': 'Referral Program', 'referral.home.subtitle': 'Share your link — every new user who signs up through it earns you a reward.', 'referral.home.step1.title': 'Sign up and get your link', 'referral.home.step1.desc': 'Create an account and find your unique referral link in your profile.', 'referral.home.step2.title': 'Share with friends', 'referral.home.step2.desc': 'Send the link to friends, acquaintances, or post it on social media.', 'referral.home.step3.title': 'Earn rewards', 'referral.home.step3.desc': 'Once your friend verifies their email, you automatically receive your reward.', 'referral.home.cta': 'Get your link', 'referral.home.badge': 'Referral Program', // FAQ section 'section.faq': 'Frequently Asked Questions', 'faq.q1': 'How does CanHelp work?', 'faq.a1': 'Post a task, receive offers from specialists, choose the best one and start working together. It\'s fast, simple and free for customers.', 'faq.q2': 'How much does it cost to use the platform?', 'faq.a2': 'Registration and task posting is completely free for customers. Specialists have access to a free plan as well as premium options.', 'faq.q3': 'How can I become a specialist?', 'faq.a3': 'Register, go to «Become a Specialist», fill in your profile with skills and categories, and start receiving tasks.', 'faq.q4': 'How do I choose the right specialist?', 'faq.a4': 'Check their reviews, experience, skills and portfolio. Chat with them through the platform and discuss the details before deciding.', 'faq.q5': 'What if I am not satisfied?', 'faq.a5': 'You can leave a review about the specialist and rate them from 1 to 5 stars. Reviews help other users find trusted professionals.', 'faq.q6': 'Can I contact a specialist before accepting their offer?', 'faq.a6': 'Yes. Once you receive an offer, you can open a chat with the specialist, ask questions and discuss all the details before making a decision.', 'faq.q7': 'How long does it take to receive offers?', 'faq.a7': 'Usually within a few hours. Specialists get notified about new tasks and can respond quickly.', 'faq.q8': 'Can I post a task in any city in Greece?', 'faq.a8': 'Yes! CanHelp covers all of Greece — Athens, Thessaloniki, Patras and more.', 'faq.q9': 'What types of tasks can I find on CanHelp?', 'faq.a9': 'Repairs, cleaning, electricians, tutoring, design, IT, moving, beauty and much more. Categories are constantly expanding.', 'faq.q10': 'Is there a mobile app?', 'faq.a10': 'Yes! CanHelp is available for Android and iOS. Download the app and manage everything from your phone.', 'how.step1.title': 'Post a task', 'how.step1.desc': 'Describe what you need and set your budget', 'how.step2.title': 'Receive offers', 'how.step2.desc': 'Specialists will send you offers with price and timeline', 'how.step3.title': 'Choose & start', 'how.step3.desc': 'Pick the best professional and start the collaboration', 'tasks.title': 'tasks', 'tasks.filters': 'Filters', 'tasks.search': 'Search', 'tasks.search.placeholder': 'Title or keyword...', 'tasks.search.btn': 'Search', 'tasks.publish': 'Post', 'tasks.category.all': 'All', 'tasks.category.all_in': 'All in', 'tasks.category.label': 'Category', 'tasks.location.label': 'City', 'tasks.location.placeholder': 'e.g. Athens', 'tasks.empty': 'No tasks found', 'tasks.empty.cta': 'Post the first one', 'task.status.open': 'Open', 'task.status.in_progress': 'In progress', 'task.status.completed': 'Completed', 'task.status.cancelled': 'Cancelled', 'task.status.draft': 'Draft', 'task.budget': 'Budget', 'task.location': 'Location', 'task.deadline': 'Start date', 'task.expires_at': 'Active until', 'task.created_at': 'Created', 'task.customer': 'Customer', 'task.offer.btn': 'Submit offer', 'task.invite.banner_title': "You've been invited to this task", 'task.invite.banner_hint': 'The customer personally invited you', 'task.invite.accept': 'Send offer', 'task.invite.decline': 'Decline', 'offer.accept': 'Accept', 'offer.decline': 'Decline', 'task.complete': 'Complete task', 'task.complete.confirm': 'Mark this task as complete?', 'task.edit': 'Edit', 'task.status_label': 'Status', 'task.yours': 'Your task', 'task.offer.yours': 'Your offer', 'review.leave': 'Leave a review', 'review.rating': 'Rating', 'review.comment': 'Comment', 'review.comment.placeholder': 'Tell us about your experience...', 'review.submit': 'Submit review', 'review.submitting': 'Submitting...', 'review.done': 'Review submitted!', 'profile.reviews': 'Reviews', 'profile.no_reviews': 'No reviews yet', 'profile.rating': 'Rating', 'profile.skills.label': 'Skills', 'profile.member_since': 'Member since', 'task.offers': 'Offers', 'task.offers.none': 'No offers yet', 'create.title': 'Post a task', 'create.field.title': 'Title', 'create.field.description': 'Description', 'create.field.category': 'Category', 'create.field.category.select': 'Select...', 'create.field.location': 'Location', 'create.field.location.any': 'Anywhere', 'create.field.location.all': 'Entire city', 'create.field.budget': 'Budget (€)', 'create.field.deadline': 'Start date', 'create.field.expires_at': 'Listing active for', 'create.field.expires_at.days': '{n} days', 'create.field.budget_negotiable': 'Price is negotiable', 'create.field.time_slot': 'Time slot', 'create.field.time_slot.any': 'Anytime', 'create.field.time_slot.morning': 'Morning (08:00–13:00)', 'create.field.time_slot.afternoon': 'Afternoon (13:00–18:00)', 'create.field.time_slot.evening': 'Evening (18:00–22:00)', 'create.field.time_slot.weekend': 'Weekend', 'create.field.address': 'Address (optional)', 'create.field.address.district': 'District', 'create.field.address.street': 'Street', 'create.field.address.house': 'Number', 'create.field.confidential': 'Confidential note', 'create.field.confidential.placeholder': 'Details visible only to the assigned specialist...', 'create.field.confidential.hint': 'Not shown publicly', 'create.field.photos': 'Photos', 'create.field.photos.add': 'Add photo', 'create.field.photos.uploading': 'Uploading...', 'task.budget_negotiable': 'Price negotiable', 'task.time_slot': 'Time slot', 'task.confidential': 'Confidential note', 'create.field.title.placeholder': 'e.g. Clean 80sqm apartment', 'create.field.description.placeholder': 'Describe in detail what you need...', 'create.field.location.placeholder': 'e.g. Athens, Kolonaki', 'create.field.budget.placeholder': 'e.g. 100', 'create.submit': 'Post task', 'create.submitting': 'Posting...', 'login.title': 'Welcome back', 'login.subtitle': 'Sign in to CanHelp', 'login.email': 'Email', 'login.password': 'Password', 'login.submit': 'Sign in', 'login.submitting': 'Signing in...', 'login.error': 'Invalid email or password', 'login.unverified.title': 'Verify your email address', 'login.unverified.desc': 'We sent a verification link to your email. Check your inbox (or spam) and click the link.', 'login.unverified.resend': 'Resend verification email', 'login.unverified.sending': 'Sending...', 'login.unverified.sent': '✓ Sent — check your inbox', 'profile.email.verified': 'Email verified', 'profile.email.not_verified': 'Email not verified', 'login.no_account': "Don't have an account?", 'login.register_link': 'Register', 'login.forgot_password': 'Forgot password?', 'login.or_continue_with': 'or continue with', 'login.continue_google': 'Continue with Google', 'forgot.title': 'Forgot password', 'forgot.subtitle': 'Enter your email to receive a reset link', 'forgot.email': 'Email', 'forgot.submit': 'Send reset link', 'forgot.submitting': 'Sending...', 'forgot.sent.title': 'Check your inbox', 'forgot.sent.desc': 'If an account exists with that email, we\'ll send you a password reset link.', 'forgot.back_to_login': 'Back to sign in', 'forgot.error': 'Could not send reset link. Check the email address and try again.', 'forgot.error.not_found': 'No account found with this email address.', 'forgot.error.send_failed': 'Failed to send email. Please try again later.', 'reset.title': 'New password', 'reset.subtitle': 'Enter your new password', 'reset.password': 'New password', 'reset.confirm': 'Confirm password', 'reset.submit': 'Change password', 'reset.submitting': 'Saving...', 'reset.success': 'Password changed successfully. Redirecting to sign in...', 'reset.back_to_login': 'Back to sign in', 'reset.error.mismatch': 'Passwords do not match', 'reset.error.invalid': 'Invalid or expired link. Please request a new one.', 'register.title': 'Register', 'register.subtitle': 'Create a CanHelp account', 'register.first_name': 'First name', 'register.last_name': 'Last name', 'register.email': 'Email', 'register.password': 'Password (min 8 characters)', 'register.role': 'Role', 'register.role.customer': 'User', 'register.role.customer.desc': 'I post tasks', 'register.role.specialist': 'Specialist', 'register.role.specialist.desc': 'I take on tasks', 'register.submit': 'Create account', 'register.submitting': 'Registering...', 'register.has_account': 'Already have an account?', 'register.login_link': 'Sign in', 'register.continue_google': 'Continue with Google', 'register.check_email.title': 'Check your email', 'register.check_email.desc': 'We sent a verification link to your email address. Check your inbox (or spam) and click the link.', 'register.check_email.login': 'Back to sign in', 'register.captcha_failed': 'CAPTCHA verification failed. Please complete the security check and try again.', 'dashboard.title': 'Dashboard', 'dashboard.new_task': '+ New task', 'dashboard.onboarding.title': 'Welcome to CanHelp 👋', 'dashboard.onboarding.subtitle': 'Choose how you want to get started.', 'dashboard.onboarding.helper.title': 'Offer your help', 'dashboard.onboarding.helper.desc': 'Complete your profile — skills, categories and areas. It takes a couple of minutes and you start receiving orders.', 'dashboard.onboarding.helper.cta': 'Complete your profile', 'dashboard.onboarding.requester.title': 'Need help?', 'dashboard.onboarding.requester.desc': 'Post a task and helpers will send you their offers.', 'dashboard.onboarding.requester.cta': 'Post a task', 'dashboard.my_tasks': 'My tasks', 'dashboard.my_offers': 'My offers', 'dashboard.invitations': 'Job invitations', 'dashboard.offers_count': 'offers', 'dashboard.declined_count': 'declined', 'dashboard.completed_tasks': 'Completed tasks', 'dashboard.completed_offers': 'Completed offers', 'dashboard.review_pending': 'Review not yet submitted', 'tasks.new.top_specialists': 'Top specialists', 'tasks.new.select_category': 'Select a category to see matching specialists', 'tasks.new.invite': 'Offer work', 'tasks.new.invited': 'Selected ✓', 'reviews.count': 'reviews', 'filter.location': 'Location', 'filter.language': 'Languages', 'filter.language.any': 'Any language', 'filter.category.all': 'All categories', 'user.categories': 'Categories', 'user.work_area': 'Work area', 'user.specialist_cards': 'Service cards', 'card.skills': 'Skills', 'card.categories': 'Categories', 'card.geography': 'Work area', 'card.portfolio': 'Portfolio', 'card.close': 'Close', 'dashboard.tasks.empty': "You haven't posted any tasks", 'dashboard.tasks.empty.cta': 'Post your first one', 'dashboard.tasks.add_new': 'Add a new task', 'dashboard.offers.empty': "You haven't submitted any offers", 'dashboard.offers.empty.cta': 'Find tasks', 'dashboard.customer.specialists_title': 'Looking for a specialist?', 'dashboard.customer.specialists_hint': 'Browse specialist profiles, read reviews and invite them to your tasks', 'dashboard.customer.specialists_cta': 'Find a specialist', 'dashboard.customer.how_title': 'How it works', 'dashboard.customer.step1': 'Create a task with a description and budget', 'dashboard.customer.step2': 'Specialists will send offers with price and timeline', 'dashboard.customer.step3': 'Choose the right one and start working', 'notif.title': 'Notifications', 'notif.mark_all': 'Mark all as read', 'notif.empty': 'No notifications', 'notif.type.generic': 'Notification', 'notif.type.new_offer': 'New offer', 'notif.type.offer_accepted': 'Your offer was accepted', 'notif.type.offer_declined': 'Your offer was declined', 'notif.type.task_completed': 'Task completed', 'notif.type.task_cancelled': 'Task cancelled', 'notif.type.new_message': 'New message', 'notif.type.new_review': 'New review', 'notif.type.task_invite': 'Job invitation', 'notif.type.referral_reward': 'Referral reward', 'notif.type.specialist_card_submitted': 'Card submitted for review', 'notif.type.specialist_card_approved': 'Card approved', 'notif.type.specialist_card_rejected': 'Card rejected', 'notif.body.new_offer': 'New offer for «{title}»', 'notif.body.offer_accepted': 'Your offer for «{title}» was accepted', 'notif.body.offer_declined': 'Your offer for «{title}» was declined', 'notif.body.task_invite': 'You\'ve been invited for «{title}»', 'notif.body.new_review': 'You received a {rating}★ review', 'notif.body.referral_reward': '{days} days of «{plan}» plan access have been added to your account!', 'notif.body.specialist_card_submitted': 'The card «{title}» was sent for review', 'notif.body.specialist_card_approved': 'The card «{title}» was approved and published', 'notif.body.specialist_card_rejected': 'The card «{title}» was not approved. You can fix it and submit again.', 'offer.status.pending': 'Pending', 'offer.status.accepted': 'Accepted', 'offer.status.declined': 'Declined', 'offer.status.withdrawn': 'Withdrawn', 'offer.status.other_accepted': 'Another specialist was chosen', 'common.loading': 'Loading...', 'common.error': 'Error', 'common.save': 'Save', 'common.saving': 'Saving...', 'common.cancel': 'Cancel', 'common.add': 'Add', 'common.close': 'Close', 'common.edit': 'Edit', 'common.delete': 'Delete', 'common.from': 'by', 'common.currency': '€', 'common.greece': 'Greece', // Chat 'chat.connected': 'Connected', 'chat.disconnected': 'Disconnected', 'chat.no_rooms': 'No conversations yet', 'chat.task_fallback': 'Task', 'chat.select': 'Select a conversation', 'chat.no_messages': 'No messages yet', 'chat.placeholder': 'Write a message... (Enter to send)', 'chat.conversation_fallback': 'Conversation', 'chat.direct_chat': 'Direct chat', 'chat.linked_task': 'Linked task', 'chat.write_btn': 'Message', 'chat.just_now': 'just now', 'chat.min_ago': 'm', 'chat.write_specialist': 'Write to specialist', 'chat.write_customer': 'Write to customer', 'chat.notif_settings': 'Notification settings', 'chat.notif_messages': 'Notifications for new messages', 'chat.toast_title': 'New message', 'chat.toast_open': 'Open chat', // Offer form 'offer.price': 'Price', 'offer.price.placeholder': 'e.g. 80', 'offer.customer_budget': 'Client budget', 'offer.message': 'Message', 'offer.optional': 'optional', 'offer.message.placeholder': 'Introduce yourself, your experience and why you are the best choice...', 'offer.submitting': 'Sending...', // Profile 'profile.photo': 'Profile photo', 'profile.photo.change': 'Change photo', 'profile.photo.hint': 'JPEG, PNG, WebP · up to 5MB', 'profile.basic_info': 'Basic info', 'profile.phone': 'Phone', 'profile.phone.placeholder': '+30 6901234567', 'profile.bio': 'Short bio', 'profile.bio.placeholder': 'Tell us a bit about yourself...', 'profile.language': 'Language', 'profile.language.hint': 'App interface and email notification language', 'profile.languages': 'Languages spoken', 'profile.languages.hint': 'Select all languages you speak', 'profile.skills': 'Skills', 'profile.skills.subtitle': 'Add the services you offer', 'profile.skills.placeholder': 'e.g. Cleaning, IT, Tutoring...', 'profile.role': 'Account role', 'profile.role.specialist': '🔧 Helper', 'profile.role.admin': '👑 Admin', 'profile.role.customer': '👤 User', 'profile.role.user': '👤 User', 'profile.role.change': 'To change your role please contact support.', 'profile.become_specialist': 'Offer your help', 'profile.become_specialist.desc': 'Create your helper profile, offer your skills and start receiving tasks.', 'become_specialist.hero.title': 'Offer your skills and start earning', 'become_specialist.hero.subtitle': 'Create a helper profile and receive requests from people who need help', 'become_specialist.how.title': 'How it works', 'become_specialist.step1.title': 'Create a specialist portfolio', 'become_specialist.step1.desc': 'Set your categories, skills and coverage areas — the system will automatically match you with relevant tasks', 'become_specialist.step2.title': 'Find tasks', 'become_specialist.step2.desc': 'Discover tasks in your categories in the "Find Orders" section', 'become_specialist.step3.title': 'Send an offer & earn', 'become_specialist.step3.desc': 'Submit offers with price and timeline, chat with clients and complete tasks', 'become_specialist.benefits.title': 'Specialist profile advantages', 'become_specialist.benefit1': 'Task search filtered by your categories and location', 'become_specialist.benefit2': 'Public profile with client reviews', 'become_specialist.benefit3': 'Availability schedule visible to clients', 'become_specialist.benefit4': 'Saved to favourites by clients', 'become_specialist.cta': 'Learn more', 'become_specialist.free_badge': 'Free registration', 'profile.tab.notifications': 'Notifications', 'profile.tab.reviews': 'Reviews', 'profile.tab.referral': 'Referrals', 'profile.tab.auto_response': 'Auto-response', 'profile.tab.site': 'Site', 'profile.site.title': 'Personal page', 'profile.site.url_label': 'Personal site', 'profile.site.copy': 'Copy', 'profile.site.copied': 'Copied', 'profile.site.visible_title': "What's on your page", 'profile.site.visible.name': 'Name and photo', 'profile.site.visible.bio': 'Bio', 'profile.site.visible.rating': 'Rating and reviews', 'profile.site.visible.portfolio': 'Portfolio / Cards', 'profile.site.visible.contacts': 'Contact info', 'profile.site.visible.full_last_name': 'Full last name', 'profile.site.visible.services': 'Service cards', 'profile.site.visible.reviews': 'Reviews section', 'profile.site.visible.status': '"Ready to help" status', 'profile.site.theme': 'Appearance theme', 'profile.site.theme.dark': 'Dark', 'profile.site.theme.light': 'Light', 'profile.site.slug_taken': 'This address is already taken', 'profile.site.stats.title': 'Site analytics', 'profile.site.stats.days': 'last 30 days', 'profile.site.stats.views': 'Views', 'profile.site.stats.unique': 'Unique visitors', 'profile.site.stats.messages': 'Messages', 'profile.site.stats.total_views': 'Total views', 'profile.site.stats.total_unique': 'Unique visitors', 'profile.site.stats.total_messages': 'Messages', 'profile.site.stats.empty': 'No data yet', 'profile.site.stats.loading': 'Loading analytics...', 'profile.site.stats.no_slug': 'Set your site URL to see analytics', 'profile.site.edit_bio_hint': 'Bio and photo are edited in the "Basic info" tab.', 'profile.site.seo.title': 'SEO — Page Metadata', 'profile.site.seo.hint': 'Shown in search results. Saved values are auto-translated into all languages.', 'profile.site.seo.site_title': 'Page title', 'profile.site.seo.site_title_placeholder': 'John Doe — Plumber in Athens', 'profile.site.seo.site_desc': 'Meta description', 'profile.site.seo.site_desc_placeholder': 'Brief description for search engines...', 'status.title': 'Status', 'status.can_help_now_hint': 'Your card is shown higher in search', 'status.need_help_hint': 'Specialists can offer you help', 'profile.referral.title': 'Referral program', 'profile.referral.desc': 'Share your link and earn rewards for every new user you invite.', 'profile.referral.link_label': 'Your referral link', 'profile.referral.copy': 'Copy', 'profile.referral.copied': 'Copied!', 'profile.referral.invited_count': 'successful referrals', 'profile.referral.no_code': 'Referral code is not available.', 'notifications.title': 'Notification settings', 'notifications.email.new_tasks': 'Email for new tasks', 'notifications.email.new_tasks.desc': 'Receive an email when a new task is posted in your categories', 'notifications.messages.desc': 'Receive a notification when a new message arrives', 'notifications.saved': 'Settings saved', 'notifications.plan_required': 'Not available in your plan', 'profile.tab.info': 'Basic info', 'profile.tab.finance': 'Finance', 'profile.tab.skills': 'Skills', 'profile.tab.categories': 'Categories', 'profile.tab.geography': 'Geography', 'profile.specialist.categories': 'Work categories', 'profile.specialist.categories.desc': 'Select the categories you work in', 'profile.specialist.geography': 'Coverage areas', 'profile.specialist.geography.desc': 'Select the cities / districts where you are active', 'profile.saving': 'Saving...', 'profile.upload.error': 'Error uploading photo', 'profile.saved': 'Saved', 'profile.tab.cards': 'Offers', 'profile.cards.count': 'Offers', 'profile.cards.add': 'Add offer', 'profile.cards.new_title': 'New offer title', 'profile.cards.placeholder': 'e.g. Plumbing', 'profile.cards.create': 'Create', 'profile.cards.cancel': 'Cancel', 'profile.cards.empty': 'No offers yet', 'profile.cards.empty_hint': 'Create your first card to show your services to clients.', 'profile.cards.create_first': 'Create your first offer', 'profile.cards.delete_confirm': 'Delete offer?', 'profile.background.change': 'Change background', 'profile.background.remove': 'Remove background', 'profile.listing_requirements.published_card': 'Publish at least one card', 'profile.listing_requirements.title': 'Your profile is not shown yet in offers', 'profile.listing_requirements.hint': 'To make the card visible, complete these conditions:', 'profile.listing_requirements.bio': 'Add a short bio in the main profile section', 'profile.listing_requirements.categories': 'Add at least one category to the active card', 'profile.listing_requirements.locations': 'Add at least one location to the active card', 'profile.listing_requirements.card_inactive': 'Make the card active', 'profile.listing_requirements.review_pending': 'Card is under review', 'profile.card.visibility_issue': 'Card is not shown in offers', 'profile.card.tab.main': 'General', 'profile.card.tab.skills': 'Skills', 'profile.card.tab.categories': 'Categories', 'profile.card.tab.geography': 'Geography', 'profile.card.tab.portfolio': 'Portfolio', 'profile.card.tab.pricelist': 'Price list', 'profile.card.pricelist.empty': 'No price list groups yet.', 'profile.card.pricelist.add_group': 'Add group', 'profile.card.pricelist.group_title': 'Group title', 'profile.card.pricelist.add_item': 'Add item', 'profile.card.pricelist.item_name': 'Service / work', 'profile.card.pricelist.item_desc': 'Description (optional)', 'profile.card.pricelist.item_price': 'Price', 'profile.card.pricelist.item_unit': 'Unit (e.g. /hour)', 'profile.card.pricelist.save_group': 'Save group', 'profile.card.pricelist.save_item': 'Save', 'profile.card.pricelist.delete_group': 'Delete group', 'profile.card.pricelist.delete_item': 'Delete', 'profile.card.active': 'Active', 'profile.card.review_pending': 'Pending approval', 'profile.card.review_pending_hint': 'Your card is being reviewed by the admin team.', 'profile.card.review_submitted': 'Card submitted for review', 'profile.card.review_approved': 'Card approved', 'profile.card.review_approved_hint': 'Your card is now visible in offers.', 'profile.card.review_rejected': 'Card rejected', 'profile.card.review_rejected_hint': 'Your card was not approved. Please update it and submit again.', 'profile.card.submit_review': 'Submit for review', 'profile.card.withdraw_review': 'Withdraw request', 'profile.card.unpublish': 'Unpublish', 'profile.card.save': 'Save', 'profile.card.saved': 'Saved', 'profile.card.delete': 'Delete', 'profile.card.skill.add': 'Add skill', 'profile.card.photo.add': 'Add photo', 'profile.card.photo.uploading': 'Uploading...', 'profile.card.photo.empty': 'No photos yet', 'profile.card.item.title': 'Title', 'profile.card.item.desc': 'Description', 'profile.card.item.save': 'Save', 'profile.card.item.cancel': 'Cancel', 'profile.card.item.edit': 'Edit', 'profile.card.description': 'Card description', 'profile.card.desc_auto_translate': 'Will be automatically translated into other languages on save', 'profile.card.desc_translated': 'Translations available:', 'profile.upgrade.cards_limit': 'Portfolio limit reached', 'profile.upgrade.plan': 'Current plan:', 'profile.upgrade.contact': 'Contact the administrator to change your plan', 'profile.upgrade.ok': 'Got it', 'profile.plan.title': 'Subscription plan', 'profile.balance': 'Balance', 'profile.balance.topup': 'Top Up Balance', 'profile.balance.topup.title': 'Top Up Balance', 'profile.balance.topup.amount': 'Amount (EUR)', 'profile.balance.topup.hint': 'Choose a preset or enter a custom amount', 'profile.balance.topup.submit': 'Proceed to Payment', 'profile.balance.topup.loading': 'Redirecting...', 'profile.balance.topup.error': 'Payment initiation failed. Please try again.', 'payment.success.title': 'Payment Successful!', 'payment.success.desc': 'Your balance has been updated.', 'payment.cancelled.title': 'Payment Cancelled', 'payment.cancelled.desc': 'Payment was cancelled. No charges were made.', 'payment.pending.title': 'Processing...', 'payment.pending.desc': 'Your payment is being processed.', 'payment.back_to_profile': 'Back to Profile', 'profile.plan.basic': 'Basic (free)', 'profile.plan.contact_upgrade': 'Contact admin to upgrade your plan', 'profile.plan.cards_up_to': 'Portfolio: up to', 'profile.plan.cards_unlimited': 'Portfolio: unlimited', 'profile.plan.tasks_up_to': 'Tasks: up to', 'profile.plan.offers_up_to': 'Offers: up to', 'profile.plan.valid_until': 'Valid until', 'profile.plan.no_expiry': 'No expiry', // Create task 'create.error': 'Error posting task', // Tasks list extras 'tasks.category.general': 'General', 'tasks.budget.range': 'Range:', 'tasks.budget.from': 'from', 'tasks.budget.to': 'to', 'tasks.filter.reset': 'Reset filters', 'tasks.load_more': 'Load more', 'tasks.showing': 'Results:', 'tasks.field.budget': 'Budget, €', // Admin 'admin.title': 'Admin Panel', 'admin.tab.stats': 'Statistics', 'admin.tab.users': 'Users', 'admin.tab.tasks': 'Tasks', 'admin.tab.reports': 'Reports', 'admin.tab.moderation': 'Moderation', 'admin.stats.users': 'Users', 'admin.stats.tasks': 'Tasks', 'admin.stats.offers': 'Offers', 'admin.stats.reviews': 'Reviews', 'admin.tasks.by_status': 'Tasks by status', 'admin.col.user': 'User', 'admin.col.email': 'Email', 'admin.col.role': 'Role', 'admin.col.registered': 'Registered', 'admin.col.status': 'Status', 'admin.col.title': 'Title', 'admin.col.budget': 'Budget', 'admin.col.created': 'Created', 'admin.users.active': 'Active', 'admin.users.inactive': 'Inactive', 'admin.users.deactivate': 'Deactivate', 'admin.users.activate': 'Activate', 'admin.tasks.cancel': 'Cancel', 'admin.reports.none': 'No reports', 'admin.moderation.none': 'No offers to review', 'admin.moderation.pending': 'Pending', 'admin.moderation.active': 'Active', 'admin.moderation.approve': 'Approve', 'admin.moderation.block': 'Block', 'admin.moderation.pending_title': 'Offers pending approval', 'admin.moderation.active_title': 'Active offers', 'admin.moderation.pending_count': 'Pending', 'admin.moderation.active_count': 'Active', 'admin.moderation.pending_hint': 'New offers waiting for approval', 'admin.moderation.active_hint': 'Visible offers you can block', 'admin.moderation.pending_empty': 'No new offers to approve', 'admin.moderation.active_empty': 'No active offers found', 'admin.reports.reviewed': 'Reviewed', 'admin.reports.dismiss': 'Dismiss', 'admin.pagination.total': 'Total', 'admin.users.role.change': 'Change role', 'admin.users.search.placeholder': 'Search name or email...', 'admin.tasks.delete': 'Delete', 'admin.tasks.delete.confirm': 'Permanently delete this task?', 'admin.tasks.search.placeholder': 'Search title...', 'admin.col.customer': 'Customer', 'admin.col.reporter': 'Reporter', 'admin.col.target': 'Target', 'admin.filter.all_roles': 'All roles', 'admin.filter.all_statuses': 'All statuses', 'admin.reports.target.task': 'Task', 'admin.reports.target.user': 'User', 'admin.tab.categories': 'Categories', 'admin.tab.locations': 'Cities & Districts', 'admin.tab.logs': 'Logs', 'admin.tab.plans': 'Plans', 'admin.tab.settings': 'Settings', 'admin.logs.subtab.ai': 'AI Logs', 'admin.logs.subtab.activity': 'Activity', 'admin.logs.subtab.mail': 'Mail', 'admin.logs.subtab.notifications': 'Notifications', 'admin.notif_logs.type': 'Type', 'admin.notif_logs.title': 'Title', 'admin.notif_logs.read': 'Read', 'admin.notif_logs.empty': 'No notification logs', 'admin.stats.notif_chart_title': 'Notifications per day', 'admin.stats.notif_label': 'Notifications', 'admin.stats.mail_chart_title': 'Emails per day', 'admin.stats.mail_label': 'Emails', 'admin.filter.all': 'All', 'admin.stats.specialists': 'Helpers', 'admin.col.plan': 'Plan', 'admin.back_home': 'Home', 'admin.plans.title': 'Subscription plans', 'admin.plans.add': '+ New plan', 'admin.plans.empty': 'No plans created', 'admin.plans.form.new': 'New plan', 'admin.plans.form.edit': 'Edit plan', 'admin.plans.form.name': 'Name', 'admin.plans.form.price': 'Price (EUR)', 'admin.plans.form.old_price': 'Old price (EUR, optional)', 'admin.plans.form.max_offers': 'Max offers (empty = no limit)', 'admin.plans.form.max_cards': 'Max offers (empty = no limit)', 'admin.plans.form.duration_days': 'Duration (days, empty = no expiry)', 'admin.plans.form.description': 'Description', 'admin.plans.form.features': 'Features (one per line)', 'admin.plans.form.notify': 'Notify about new tasks', 'admin.plans.form.default': 'Default', 'admin.plans.form.active': 'Active', 'admin.plans.form.order': 'Order', 'admin.plans.form.role': 'Role', 'admin.plans.form.tier': 'Tier', 'admin.plans.form.role.customer': 'Customer', 'admin.plans.form.role.specialist': 'Helper', 'admin.plans.form.tier.free': 'Free', 'admin.plans.form.tier.pro': 'Pro', 'admin.plans.form.tier.ultimate': 'Ultimate', 'admin.plans.form.section.limits': 'Limits (empty = unlimited)', 'admin.plans.form.max_messages_day': 'Max Messages/Day', 'admin.plans.form.max_orders_day': 'Max Orders/Day', 'admin.plans.form.max_skills': 'Max Skills', 'admin.plans.form.max_profiles': 'Max Profiles', 'admin.plans.form.max_portfolio': 'Max Portfolio Items', 'admin.plans.form.section.boost': 'Multipliers & Boost', 'admin.plans.form.search_boost': 'Search Boost', 'admin.plans.form.offers_multiplier': 'Offers Multiplier', 'admin.plans.form.section.contact': 'Contact Permissions', 'admin.plans.form.can_contact_free': 'Contact Free Plan users', 'admin.plans.form.can_contact_pro': 'Contact Pro Plan users', 'admin.plans.form.can_contact_all': 'Contact All users', 'admin.plans.form.can_show_contact': 'Show Contact Info', 'admin.plans.form.can_view_phone': 'View Phone', 'admin.plans.form.section.features': 'Feature Flags', 'admin.plans.form.upload_video': 'Upload Video', 'admin.plans.form.favorites': 'Favorites', 'admin.plans.form.google_calendar': 'Google Calendar', 'admin.plans.form.verified_badge': 'Verified Badge', 'admin.plans.form.highlighted_reviews': 'Highlighted Reviews', 'admin.plans.form.personal_site': 'Personal Site', 'admin.plans.form.can_help_now': 'Can Help Now Status', 'admin.plans.form.need_help': 'Need Help Status', 'admin.plans.form.auto_response': 'Auto Response', 'admin.plans.form.auto_match': 'Auto Match', 'admin.plans.form.price_list': 'Price List', 'admin.plans.form.instant_dispatch_free': 'Instant Dispatch (Free)', 'admin.plans.form.instant_dispatch_pro': 'Instant Dispatch (Pro)', 'admin.plans.badge.default': 'Default', 'admin.plans.badge.inactive': 'Inactive', 'admin.plans.make_default': 'Set as default', 'admin.plans.tasks': 'Tasks', 'admin.plans.offers': 'Offers', 'admin.plans.cards': 'Offers', 'admin.plans.notify_tasks': 'Task notifications', 'admin.plans.delete.confirm': 'Delete plan', 'admin.activity.title': 'Activity log', 'admin.activity.event': 'Event', 'admin.activity.all_events': 'All events', 'admin.activity.from': 'From', 'admin.activity.to': 'To', 'admin.activity.reset': 'Reset', 'admin.activity.total': 'Total', 'admin.activity.empty': 'No records', 'admin.mail.event': 'Email event', 'admin.mail.all_events': 'All email events', 'admin.mail.from': 'From', 'admin.mail.to': 'To', 'admin.mail.reset': 'Reset', 'admin.mail.total': 'Total', 'admin.mail.empty': 'No email logs', 'admin.mail.recipient': 'Recipient', 'admin.mail.provider': 'Provider', 'admin.mail.details': 'Details', 'admin.mail.status': 'Status', 'admin.mail.success': 'Success', 'admin.mail.failed': 'Failed', 'admin.event.email_sent': 'Email sent', 'admin.event.email_failed': 'Email failed', 'admin.event.email_dev': 'Email DEV fallback', 'admin.event.admin_email_test_sent': 'Admin test email sent', 'admin.event.admin_email_test_failed': 'Admin test email failed', 'admin.logs.empty': 'No records', 'admin.logs.date': 'Date', 'admin.logs.provider': 'Provider', 'admin.logs.model': 'Model', 'admin.logs.action': 'Action', 'admin.logs.langs': 'Languages', 'admin.logs.in': 'In', 'admin.logs.out': 'Out', 'admin.logs.total': 'Total', 'admin.logs.ms': 'ms', 'admin.logs.status': 'Status', 'admin.stats.activity_30d': 'Activity over 30 days', 'admin.stats.tasks_label': 'Tasks', 'admin.stats.users_label': 'Users', 'admin.stats.specialists_label': 'Helpers', 'admin.stats.tokens_title': 'Token usage (by month)', 'admin.stats.tokens_out': 'Output', 'admin.stats.tokens_in': 'Input', 'admin.stats.tokens_out_label': 'Output tokens', 'admin.stats.tokens_in_label': 'Input tokens', 'admin.stats.cost_label': 'Cost (USD)', 'admin.stats.tasks_by_status': 'Tasks by status', 'admin.task_status.open': 'Open', 'admin.task_status.in_progress': 'In progress', 'admin.task_status.completed': 'Completed', 'admin.task_status.cancelled': 'Cancelled', 'admin.task_status.draft': 'Drafts', 'admin.settings.tab.general': 'General', 'admin.settings.tab.smtp': 'E-Mail', 'admin.settings.tab.notifications': 'Notifications', 'admin.settings.tab.payment': 'Payment', 'admin.settings.tab.referral': 'Referrals', 'admin.settings.tab.seo': 'SEO', 'admin.settings.tab.socials': 'Socials', 'admin.settings.tab.telegram': 'Telegram Bot', 'admin.settings.telegram.title': 'Telegram Bot Settings', 'admin.settings.telegram.help': 'Create a bot via @BotFather. Use @userinfobot to get chat IDs.', 'admin.settings.telegram.bot_token': 'Bot Token', 'admin.settings.telegram.admin_chat_id': 'Admin Chat ID', 'admin.settings.telegram.admin_chat_hint': 'First send /start to your bot, then use @userinfobot to get your chat ID', 'admin.settings.telegram.channel_id': 'Channel ID', 'admin.settings.telegram.channels_title': 'Language Channels', 'admin.settings.telegram.channel_hint': 'Public channel @username or numeric ID', 'admin.settings.telegram.notify_registrations': 'Notify on new registrations', 'admin.settings.telegram.notify_registrations_hint': 'Send admin a message when a new user registers', 'admin.settings.telegram.post_new_tasks': 'Post new tasks to channel', 'admin.settings.telegram.post_new_tasks_hint': 'Automatically publish new tasks to the Telegram channel', 'admin.settings.telegram.test': 'Test', 'admin.settings.telegram.verify': 'Verify', 'admin.settings.telegram.test_ok': 'Connection successful', 'admin.settings.telegram.test_fail': 'Connection failed', 'admin.settings.socials.title': 'Social Network Links', 'admin.settings.socials.hint': 'Filled links are displayed in the site footer', 'admin.settings.seo.maintenance_label': 'Maintenance Mode', 'admin.settings.seo.maintenance_hint': 'Show a maintenance page to all visitors', 'admin.settings.seo.indexing_label': 'Search Engine Indexing', 'admin.settings.seo.indexing_hint': 'Allow search engines to index the site', 'admin.settings.seo.head_scripts_label': ' Scripts (JS)', 'admin.settings.seo.head_scripts_hint': 'Runs on every page (Google Tag Manager, analytics, etc.)', 'admin.settings.seo.site_title_label': 'Site Title', 'admin.settings.seo.site_description_label': 'Site Description (meta description)', 'admin.settings.referral.title': 'Referral program', 'admin.settings.referral.hint': 'Reward users who bring new registrations.', 'admin.settings.referral.enabled_label': 'Enabled', 'admin.settings.referral.enabled_hint': 'Enable / disable reward application', 'admin.settings.referral.customer_section': 'For customers', 'admin.settings.referral.specialist_section': 'For helpers', 'admin.settings.referral.plan_label': 'Reward plan', 'admin.settings.referral.no_plan': '— no plan —', 'admin.settings.referral.plan_hint': 'This plan will be assigned to the referrer. If their current plan is higher, only days will be added.', 'admin.settings.referral.days_label': 'Reward days', 'admin.settings.referral.days_hint': 'Number of days added to the plan expiry.', 'admin.settings.general.title': 'General settings', 'admin.settings.general.site_name': 'Site name', 'admin.settings.general.site_url': 'Site URL', 'admin.settings.general.contact_email': 'Contact email', 'admin.settings.general.support_phone': 'Support phone', 'admin.settings.smtp.title': 'SMTP settings', 'admin.settings.smtp.hint': 'Used to send email notifications.', 'admin.settings.smtp.host': 'SMTP Host', 'admin.settings.smtp.port': 'Port', 'admin.settings.smtp.encryption': 'Encryption', 'admin.settings.smtp.enc.none': 'None', 'admin.settings.smtp.enc.tls': 'STARTTLS (port 587)', 'admin.settings.smtp.enc.ssl': 'SSL/TLS (port 465)', 'admin.settings.smtp.username': 'Username', 'admin.settings.smtp.password': 'Password / App Password', 'admin.settings.smtp.from_name': 'Sender name', 'admin.settings.smtp.from_email': 'Sender email', 'admin.settings.smtp.test': 'Send test email', 'admin.settings.smtp.sending': 'Sending...', 'admin.settings.payment.hint': 'ePay Piraeus Bank credentials.', 'admin.settings.env.test': 'Test (sandbox)', 'admin.settings.env.prod': 'Production', 'admin.settings.env.label': 'Environment', 'admin.settings.merchant_id': 'Merchant ID', 'admin.settings.api_user': 'API User', 'admin.settings.api_password': 'API Password', 'admin.settings.confirm_url': 'Confirmation URL (webhook)', 'admin.settings.cancel_url': 'Cancel URL', 'admin.settings.active': 'Active', 'admin.settings.saving': 'Saving...', 'admin.settings.saved': 'Saved', 'admin.notif.vars_hint': 'Available variables in templates', 'admin.notif.tmpl.not_set': 'Template not configured', 'admin.notif.tmpl.subject_label': 'Email subject', 'admin.notif.tmpl.body_label': 'Email body (HTML)', 'admin.notif.tmpl.save': 'Save', 'admin.notif.tmpl.close': 'Close', 'admin.notif.tmpl.translate': 'Auto-translate to other languages', 'admin.notif.tmpl.translating': 'Translating...', 'admin.notif.tmpl.saving': 'Saving...', 'admin.notif.email_verification': 'Email verification', 'admin.notif.registration_success': 'Successful registration', 'admin.notif.password_reset': 'Password reset', 'admin.notif.new_offer': 'New offer', 'admin.notif.new_task': 'New task', 'admin.notif.offer_accepted': 'Offer accepted', 'admin.notif.new_message': 'New message', 'admin.notif.offer_declined': 'Offer declined', 'admin.notif.offer_other_accepted': 'Another specialist chosen', 'admin.notif.task_updated': 'Task updated', 'admin.notif.deadline_reminder': 'Deadline reminder', 'admin.notif.task_archived': 'Task unpublished automatically', 'admin.notif.referral_reward': 'Referral reward', // Plan lifecycle email templates 'admin.email_template.plan_activated': 'Plan activated', 'admin.email_template.plan_upgraded': 'Plan upgraded', 'admin.email_template.plan_downgrade_scheduled': 'Downgrade scheduled', 'admin.email_template.plan_downgrade_applied': 'Downgrade applied', 'admin.email_template.plan_renewal_reminder': 'Renewal reminder', 'admin.email_template.plan_insufficient_funds': 'Insufficient funds warning', // Pricing confirm modal 'pricing.confirm.title': 'Confirm plan selection', 'pricing.confirm.plan': 'Plan', 'pricing.confirm.prorated': 'Prorated credit', 'pricing.confirm.effective_price': 'Amount due', 'pricing.confirm.your_balance': 'Your balance', 'pricing.confirm.downgrade_info': 'The switch to the new plan will happen automatically after the current period ends.', 'pricing.confirm.insufficient': 'Insufficient balance.', 'pricing.confirm.top_up': 'Top up', 'pricing.confirm.schedule_downgrade': 'Schedule downgrade', 'pricing.confirm.pay': 'Pay', 'admin.user_edit.title': 'Edit user', 'admin.user_edit.email': 'Email', 'admin.user_edit.email_verified': 'Email verified', 'admin.user_edit.email_not_verified': 'Email not verified', 'admin.user_edit.verify_email_btn': 'Verify manually', 'admin.user_edit.verify_email_done': 'Email verified!', 'admin.user_edit.id': 'ID', 'admin.user_edit.registered': 'Registered', 'admin.user_edit.last_seen': 'Last seen', 'admin.user_edit.lang': 'Language', 'admin.user_edit.first_name': 'First name', 'admin.user_edit.last_name': 'Last name', 'admin.user_edit.phone': 'Phone', 'admin.user_edit.bio': 'Bio', 'admin.user_edit.role': 'Role', 'admin.user_edit.plan': 'Plan', 'admin.user_edit.no_plan': '— No plan —', 'admin.user_edit.active': 'Active account', 'admin.user_edit.published': 'Published', 'admin.user_edit.balance': 'Balance (EUR)', 'admin.user_edit.skills': 'Skills', 'admin.user_edit.tab.profile': 'Profile', 'admin.user_edit.tab.account': 'Account', 'admin.user_edit.tab.balance': 'Balance', 'admin.user_edit.tab.settings': 'Settings', 'admin.user_edit.tab.specialist': 'Offers', 'admin.user_edit.tab.site': 'Website', 'admin.user_edit.plan_expires': 'Plan expires', 'admin.user_edit.interface_lang': 'Interface language', 'admin.user_edit.comm_languages': 'Communication languages', 'admin.user_edit.personal_site_slug': 'Personal page', 'admin.user_edit.show_contact_info': 'Show contact info', 'admin.user_edit.show_contact_info.hint': 'Visible to customers', 'admin.user_edit.notify_new_tasks': 'Notify about new tasks', 'admin.user_edit.notify_new_tasks.hint': 'Push and email notifications', 'admin.user_edit.notif_messages': 'Message notifications', 'admin.user_edit.notif_messages.hint': 'New messages in chat', 'admin.user_edit.site_settings': 'Personal page settings', 'admin.user_edit.categories': 'Service categories', 'admin.user_edit.locations': 'Service areas', 'admin.user_edit.skill_placeholder': 'New skill...', 'admin.user_edit.add_category': '— Select category —', 'admin.user_edit.add_location': '— Select location —', 'admin.user_edit.specialist_cards': 'Offers', 'admin.user_edit.no_cards': 'No offers found', 'admin.user_edit.card_title': 'Offer title', 'admin.user_edit.card_description': 'Description', 'admin.balance.topup.btn': 'Top up', 'admin.balance.withdraw.btn': 'Withdraw', 'admin.balance.modal_hint': 'Changes take effect immediately and are recorded in history', 'admin.balance.topup.title': 'Top up balance', 'admin.balance.topup.amount': 'Amount', 'admin.balance.topup.description': 'Comment', 'admin.balance.topup.description.placeholder': 'For example: bonus or manual top-up', 'admin.balance.topup.submit': 'Top up balance', 'admin.balance.withdraw.title': 'Withdraw balance', 'admin.balance.withdraw.amount': 'Amount', 'admin.balance.withdraw.description': 'Comment', 'admin.balance.withdraw.description.placeholder': 'For example: refund or manual debit', 'admin.balance.withdraw.submit': 'Withdraw from balance', 'admin.user_edit.role.customer': 'Customer', 'admin.user_edit.role.user': 'User', 'admin.user_edit.role.specialist': 'Helper', 'admin.user_edit.role.admin': 'Administrator', 'common.refresh': 'Refresh', 'common.back_home': 'Home', 'admin.loc.hint': 'Manage cities and districts', 'admin.loc.add_city': 'New city', 'admin.loc.add_district': 'Add district', 'admin.loc.new': 'New location', 'admin.loc.edit': 'Edit location', 'admin.loc.district': 'district', 'admin.loc.empty': 'No locations', 'admin.loc.delete.confirm': 'Delete location? All districts will also be deleted.', 'admin.cat.add_root': 'New category', 'admin.cat.add_sub': 'Subcategory', 'admin.cat.edit': 'Edit', 'admin.cat.delete': 'Delete', 'admin.cat.delete.confirm': 'Delete category? All subcategories will also be deleted.', 'admin.cat.slug': 'Slug', 'admin.cat.icon': 'Icon', 'admin.cat.name_el': 'Greek', 'admin.cat.name_en': 'English', 'admin.cat.name_ru': 'Russian', 'admin.cat.name_uk': 'Ukrainian', 'admin.cat.active': 'Active', 'admin.cat.parent': 'Parent category', 'admin.cat.no_parent': 'Top level', 'admin.cat.save': 'Save', 'admin.cat.cancel': 'Cancel', 'admin.cat.empty': 'No categories', 'admin.cat.hint': 'Manage categories with multi-level hierarchy', 'admin.cat.new': 'New category', 'admin.cat.subcategory': 'subcategory', 'admin.cat.add_child': 'Add subcategory', 'admin.cat.inactive': 'Inactive', 'admin.event.user_login': 'Login', 'admin.event.user_register': 'Registration', 'admin.event.admin_user_deactivate': 'User blocked', 'admin.event.admin_user_activate': 'User activated', 'admin.event.admin_user_role_changed': 'Role changed', 'admin.event.admin_task_cancelled': 'Task cancelled', 'admin.event.admin_task_deleted': 'Task deleted', 'admin.event.admin_report_reviewed': 'Report reviewed', 'admin.event.admin_report_dismissed': 'Report dismissed', 'admin.event.task_created': 'Task created', // User status 'user.online': 'Online', 'user.seen_minutes': 'was here {n} min ago', 'user.seen_hours': 'was here {n} hr ago', 'user.seen_yesterday': 'was here yesterday', 'user.seen_days': 'was here {n} days ago', // Specialists 'specialists.title': 'Offers', 'specialists.search': 'Search specialist...', 'specialists.search.btn': 'Search', 'specialists.empty': 'No specialists found', 'specialists.no_bio': 'No description', 'specialists.view': 'View profile', 'specialists.reviews': 'reviews', 'specialist.favorite': 'Add to favorites', 'specialist.unfavorite': 'Remove from favorites', 'specialist.site_link': 'Personal site', 'favorites.specialists.title': 'Favourite specialists', 'favorites.specialists.empty': 'No favourite specialists yet', 'nav.favorites': 'Favourites', 'nav.schedule': 'Schedule', 'nav.find_tasks': 'Find Orders', 'schedule.title': 'My Schedule', 'schedule.subtitle': 'Mark the days when you are free or busy — clients will see your availability', 'schedule.available': 'Available', 'schedule.busy': 'Busy', 'schedule.unset': 'Not set', 'schedule.click_hint': '← click to cycle status', 'schedule.range_mode': 'Select range', 'schedule.range_from': 'From {date} — select end date', 'schedule.click_to_set': 'Click to set', 'schedule.free': 'free', 'schedule.busy_count': 'busy', 'schedule.free_days': 'free days', 'schedule.googleCalendar': 'Google Calendar', 'schedule.connectGoogle': 'Connect Google Calendar', 'schedule.disconnectGoogle': 'Disconnect', 'schedule.connectedAs': 'Connected as', 'schedule.importFromGoogle': 'Sync from Google', 'schedule.gcalConnected': '\u2713 Google Calendar connected', 'schedule.gcalError': 'Google Calendar connection error', 'schedule.gcalImportDone': 'Imported {n} days from Google Calendar', 'schedule.gcalAutoSyncNote': 'Availability changes are automatically synced to Google Calendar', 'schedule.gcalConnectDesc': 'Connect Google Calendar to automatically sync your availability', 'schedule.gcalDisconnectConfirm': 'Disconnect Google Calendar?', 'find_tasks.title': 'Find Orders', 'find_tasks.for_me': 'For me', 'find_tasks.all': 'All orders', 'find_tasks.by_category': 'By category', 'find_tasks.list': 'List', 'find_tasks.already_offered': 'Offer sent', 'find_tasks.offer_now': 'Make an offer', 'find_tasks.empty_for_me': 'No tasks found in your categories', 'find_tasks.banner_hint': 'Find tasks matching your portfolio categories', 'find_tasks.no_cards': 'Create a specialist portfolio to see tasks matched to you', 'find_tasks.add_card': 'Create portfolio', 'find_tasks.search': 'Search tasks...', 'find_tasks.tasks_count': 'tasks', 'footer.tagline': 'The task platform for Greece', 'footer.rights': 'All rights reserved.', 'nav.privacy': 'Privacy Policy', 'nav.delete_account': 'Delete Account', 'delete_account.title': 'Request Account Deletion', 'delete_account.subtitle': 'Once we verify your request, we will permanently delete your account and data within 30 days.', 'delete_account.warning': 'This action cannot be undone. All your data will be permanently deleted.', 'delete_account.reason_label': 'Reason (optional)', 'delete_account.reason_placeholder': 'Tell us why you want to delete your account...', 'delete_account.confirm_label': 'I confirm that I want to permanently delete my account', 'delete_account.submit': 'Submit request', 'delete_account.submitting': 'Submitting...', 'delete_account.success_title': 'Your request has been received', 'delete_account.success_body': 'We will process your request within 30 days and notify you by email.', 'delete_account.login_required': 'You must be logged in to submit a deletion request.', 'delete_account.login_btn': 'Log in', // App download section 'app.download_title': 'Download the CanHelp mobile app', 'app.download_desc': 'All of CanHelp — always at your fingertips. Available for Android and iOS.', // Nav 'nav.pricing': 'Pricing', // Pricing page 'pricing.title': 'Pricing', 'pricing.subtitle': 'Choose the right plan for you', 'pricing.role.customer': 'Customer', 'pricing.role.specialist': 'Specialist', 'pricing.free': 'Free', 'pricing.per_month': 'mo', 'pricing.duration': 'Duration', 'pricing.days': 'days', 'pricing.current_plan': 'Your plan', 'pricing.popular': 'Popular', 'pricing.choose': 'Choose', 'pricing.your_plan': 'Active plan', 'pricing.free_default': 'Default', 'pricing.compare': 'Compare features', 'pricing.feature': 'Feature', 'pricing.faq_note': 'Payment is deducted from your CanHelp balance. Top up available in Payments.', 'pricing.feat.messages': 'Messages / day', 'pricing.feat.orders': 'Orders / day', 'pricing.feat.contact_all': 'Contact everyone', 'pricing.feat.view_phone': 'View phone number', 'pricing.feat.show_contact': 'Show contact info', 'pricing.feat.favorites': 'Favorites', 'pricing.feat.verified_badge': 'Verified badge', 'pricing.feat.google_calendar': 'Google Calendar', 'pricing.feat.personal_site': 'Personal site', 'pricing.feat.auto_response': 'Auto-response', 'pricing.feat.auto_match': 'Auto-match', 'pricing.feat.highlighted_reviews': 'Highlighted reviews', 'pricing.feat.portfolio': 'Offer items', 'pricing.feat.cards': 'Number of offers', 'pricing.feat.notify_tasks': 'New task notifications', 'pricing.feat.video': 'Video in offer', // Upgrade prompt 'upgrade.available_in': 'Available in', 'upgrade.cta': 'Upgrade', // Dashboard plan block 'dashboard.plan.title': 'My Plan', 'dashboard.plan.expires': 'Expires in {n} days', 'dashboard.plan.upgrade': 'Upgrade plan', 'dashboard.plan.no_plan': 'Free plan', 'dashboard.plan.messages': 'Messages today', 'dashboard.plan.orders': 'Orders today', 'dashboard.plan.limits': 'Daily limits', 'dashboard.plan.features': 'Features', 'dashboard.plan.stats': 'Stats', 'dashboard.stats.cards': 'Portfolios', 'dashboard.stats.maxCards': 'Max portfolios', 'dashboard.stats.portfolioItems': 'Portfolio items', 'dashboard.stats.maxPortfolioItems': 'Max items', 'dashboard.stats.activeOffers': 'Active offers', 'dashboard.stats.reviewsReceived': 'Reviews', 'dashboard.stats.activeTasks': 'Active tasks', 'dashboard.stats.completedTasks': 'Completed', 'status.need_help': 'I need help', 'status.active': 'Active', 'status.toggle_on': 'Enable', 'status.toggle_off': 'Disable', // FOMO 'fomo.missed_orders': 'Missed {n} orders', 'fomo.missed_value': 'Worth €{v}', 'fomo.upgrade_hint': 'Upgrade to receive more orders', 'fomo.conversion': 'Task conversion', 'fomo.active': 'Active', 'fomo.with_offers': 'With offers', 'fomo.completed': 'Completed', 'fomo.already_offered': '{n} specialists have already responded', 'fomo.specialist_missed': 'You missed {n} orders', 'fomo.top_categories': 'Categories', 'fomo.offers_received': 'offers received', 'fomo.avg_offers': 'Avg {n}/task', 'fomo.completion_rate': 'completed', // Task auto-match 'task.auto_match': 'Auto-match', 'task.auto_match_results': 'Top specialists', 'task.no_offer_yet': 'You haven\'t sent an offer yet', 'task.make_offer': 'Send offer', 'auto_response.title': 'Auto-Response', 'auto_response.enabled': 'Enable auto-response', 'auto_response.min_budget': 'Min budget', 'auto_response.max_budget': 'Max budget', 'auto_response.default_price': 'Default price', 'auto_response.default_message': 'Default message', 'auto_response.max_per_day': 'Max auto-offers per day', 'auto_response.save': 'Save', 'auto_response.saved': 'Saved', 'auto_response.categories': 'Categories', 'auto_response.locations': 'Locations', // Personal site 'profile.personal_site': 'Personal Site', 'profile.site_slug': 'URL slug', 'profile.site_slug_hint': 'Only latin letters, numbers, - and _', 'profile.site_open': 'Open site', 'profile.site_preview': 'Your site', 'profile.show_contact': 'Show contact info', 'profile.show_contact_hint': 'Customers with Pro/Ultimate plans will see your phone number', // Google Calendar plan gate 'gcal.upgrade_required': 'Google Calendar requires a Pro or Ultimate plan', // Chat limits 'chat.limit_warning': '{n} messages left today', 'chat.limit_reached': 'Message limit reached. Upgrade your plan', 'chat.upgrade': 'Upgrade', // Site page 'site.member_since': 'Member since', 'site.rating': 'Rating', 'site.completed_tasks': 'Completed', 'site.languages': 'Languages', 'site.photos': 'photos', 'site.contact_form': 'Get in touch', 'site.contact_sent': 'Message sent!', 'site.contact_sent_desc': 'The specialist will contact you soon', 'site.contact_name': 'Name', 'site.contact_name_ph': 'Your name', 'site.contact_email_ph': 'your@email.com', 'site.contact_message': 'Message', 'site.contact_message_ph': 'Describe your task...', 'site.contact_send': 'Send', 'site.share': 'Share', 'site.speaks_languages': 'Speaks', 'site.message_sent': 'Message sent!', 'site.message_sent_desc': 'The specialist will receive it in the chat', 'site.message_placeholder': 'Write your message...', 'site.write_to_chat': 'Write to chat', 'site.auth_required_title': 'Sign in required', 'site.auth_required_desc': 'To write in the chat, you need to sign in to your CanHelp account.', 'site.auth_login_btn': 'Sign in', 'site.auth_contact_form_btn': 'Contact via feedback form', 'specialist.services': 'Services', 'portfolio.title': 'Portfolio', 'status.can_help_now': 'Available now', 'common.not_found': 'Page not found', 'common.anonymous': 'Anonymous', 'specialist_setup.page_title': 'Specialist profile setup', 'specialist_setup.step_of': 'Step {current} of {total}', 'specialist_setup.next': 'Next', 'specialist_setup.back': 'Back', 'specialist_setup.skip': 'Skip', 'specialist_setup.finish': 'Finish', 'specialist_setup.go_to_profile': 'Go to profile', 'specialist_setup.browse_tasks': 'Browse tasks', 'specialist_setup.step1.title': 'Welcome!', 'specialist_setup.step1.subtitle': "Let's set up your profile", 'specialist_setup.step1.desc': 'A complete profile helps you find more clients. Follow the steps to create the perfect specialist profile.', 'specialist_setup.step1.what_next': 'What we will do:', 'specialist_setup.step1.item1': 'Fill in basic information', 'specialist_setup.step1.item2': 'Create a service card', 'specialist_setup.step1.item3': 'Add skills and categories', 'specialist_setup.step1.item4': 'Select service area', 'specialist_setup.step1.item5': 'Upload portfolio photos', 'specialist_setup.step2.title': 'Basic profile', 'specialist_setup.step2.subtitle': 'Tell us about yourself', 'specialist_setup.step2.bio_label': 'About me', 'specialist_setup.step2.bio_placeholder': 'Describe your experience, services you offer...', 'specialist_setup.step2.phone_label': 'Phone', 'specialist_setup.step2.phone_placeholder': '+30 6900000000', 'specialist_setup.step2.photo_label': 'Profile photo', 'specialist_setup.step2.photo_btn': 'Upload photo', 'specialist_setup.step2.photo_uploading': 'Uploading...', 'specialist_setup.step2.photo_hint': 'Shown on your profile', 'specialist_setup.step3.title': 'Service card', 'specialist_setup.step3.subtitle': 'Create your first service card', 'specialist_setup.step3.title_label': 'Card title', 'specialist_setup.step3.title_placeholder': 'E.g. Plumber, Electrician, Cleaning...', 'specialist_setup.step3.desc_label': 'Description', 'specialist_setup.step3.desc_placeholder': 'Describe in detail what you offer, your experience, advantages...', 'specialist_setup.step3.title_required': 'Title is required', 'specialist_setup.step4.title': 'Skills & Categories', 'specialist_setup.step4.subtitle': 'Add skills and select categories', 'specialist_setup.step4.skills_label': 'Skills', 'specialist_setup.step4.skills_placeholder': 'E.g. Pipe installation...', 'specialist_setup.step4.skills_add': 'Add', 'specialist_setup.step4.categories_label': 'Categories', 'specialist_setup.step5.title': 'Service area', 'specialist_setup.step5.subtitle': 'Where do you provide services?', 'specialist_setup.step5.hint': 'Select cities or specific areas', 'specialist_setup.done.title': 'Your profile is ready!', 'specialist_setup.done.subtitle': 'Congratulations! Your profile has been set up', 'specialist_setup.done.desc': 'You can now receive orders from clients. Browse tasks that match your skills.', // Support 'support.title': 'Support', 'support.type.label': 'Request type', 'support.type.bug': 'Bug report', 'support.type.suggestion': 'Suggestion', 'support.type.other': 'Other', 'support.subject': 'Subject', 'support.subject.placeholder': 'Brief description...', 'support.body': 'Message', 'support.body.placeholder': 'Describe the issue or suggestion in detail...', 'support.submit': 'Submit', 'support.cancel': 'Cancel', 'support.error': 'Failed to send. Please try again.', 'support.sent.title': 'Request received!', 'support.sent.body': 'We will reply to your email as soon as possible.', 'support.sent.close': 'Close', 'admin.tab.support': 'Support', 'admin.tab.backup': 'Backup', 'admin.tab.translations': 'Translations', 'admin.tab.dbcheck': 'DB Check', 'admin.tab.balances': 'Balances', 'admin.tab.push': 'Push', 'admin.tab.referrals': 'Referrals', 'admin.search': 'Search', 'admin.noData': 'No data', 'admin.cat.order': 'Order', 'admin.cat.skills': 'Skills', 'admin.plans.form.max_tasks': 'Max tasks', 'admin.settings.referral.shared_section': 'Shared referral settings', 'admin.settings.seo.title': 'SEO settings', 'admin.backup.title': 'Backup', 'admin.backup.tables': 'Tables', 'admin.backup.exportAll': 'Export all', 'admin.backup.importAll': 'Import all', 'admin.backup.exportTable': 'Export table', 'admin.backup.importTable': 'Import table', 'admin.backup.exporting': 'Exporting...', 'admin.backup.importing': 'Importing...', 'admin.backup.exportSuccess': 'Export completed', 'admin.backup.importSuccess': 'Import completed', 'admin.backup.autoBackup': 'Auto backup', 'admin.backup.autoBackupDesc': 'Automatic daily backup', 'admin.backup.storedBackups': 'Stored backups', 'admin.backup.noStoredBackups': 'No stored backups', 'admin.backup.restore': 'Restore', 'admin.backup.restoreConfirm': 'Restore from backup?', 'admin.backup.restoreSuccess': 'Restore completed', 'admin.backup.restoring': 'Restoring...', 'admin.backup.date': 'Date', 'admin.backup.size': 'Size', 'admin.backup.today': 'Today', 'admin.backup.yesterday': 'Yesterday', 'admin.balance.col.operation': 'Operation', 'admin.balance.col.amount': 'Amount', 'admin.balance.col.result': 'Balance', 'admin.balance.col.description': 'Description', 'admin.balance.col.date': 'Date', 'admin.balance.empty': 'No records yet', 'admin.balance.filter.all': 'All operations', 'admin.balance.filter.user_id': 'Filter by userId', 'admin.balance.kind.topup': 'Top-up', 'admin.balance.kind.plan_purchase': 'Plan charge', 'admin.balance.kind.admin_topup': 'Admin top-up', 'admin.balance.kind.admin_adjustment': 'Adjustment', 'admin.support.search': 'Search', 'admin.support.all_statuses': 'All statuses', 'admin.support.all_types': 'All types', 'admin.support.none': 'No tickets', 'admin.support.reply': 'Reply', 'admin.support.reply_placeholder': 'Type your reply...', 'admin.support.send_reply': 'Send reply', 'admin.support.cancel': 'Cancel', 'admin.support.close': 'Close', 'admin.support.status.open': 'Open', 'admin.support.status.in_progress': 'In progress', 'admin.support.status.resolved': 'Resolved', 'admin.support.status.closed': 'Closed', 'admin.support.your_reply': 'Your reply', 'admin.user_edit.visibility_requirements.title': 'Profile is not yet visible in Offers', 'admin.user_edit.visibility_requirements.hint': 'Visibility requirements:', 'admin.user_edit.visibility_requirements.bio': 'Fill in bio', 'admin.user_edit.visibility_requirements.published_card': 'Publish at least one card', 'admin.user_edit.visibility_requirements.categories': 'Add a category to a published card', 'admin.user_edit.visibility_requirements.locations': 'Add a location to a published card', 'auto_response.desc': 'Automatically respond to matching tasks', 'auto_response.budget_range': 'Task budget', 'auto_response.message_placeholder': 'Hello! I can help with this task...', 'profile.background.title': 'Profile header background', 'profile.background.hint': 'Shown in the public profile header on web and mobile app.', 'profile.photo.uploading': 'Uploading...', 'profile.balance.history': 'Operation history', 'profile.balance.history.last': 'Latest operations', 'profile.balance.history.empty': 'No operations yet', 'profile.balance.history.balance_after': 'Balance after', 'profile.balance.history.kind.topup': 'Balance top-up', 'profile.balance.history.kind.plan_purchase': 'Plan charge', 'profile.balance.history.kind.admin_topup': 'Admin top-up', 'profile.balance.history.kind.admin_adjustment': 'Admin adjustment', 'profile.plan_history.title': 'Plan history', 'profile.plan_history.empty': 'Plan change history is empty', 'profile.plan_history.expires': 'Until', 'profile.plan_history.days': 'days', 'profile.plan_history.event.activated': 'Activated', 'profile.plan_history.event.renewed': 'Renewed', 'profile.plan_history.event.downgraded': 'Downgraded', 'profile.plan_history.event.referral_reward': 'Referral reward', 'profile.plan_history.event.admin_change': 'Changed by admin', 'profile.plan_history.event.expired': 'Expired', 'profile.show_contact_desc': 'Lets clients contact you directly', 'profile.site.visible.price_list': 'Price list', 'site.pricelist': 'Price list', 'status.plan_required': 'Status is unavailable on your current plan', 'status.admin_not_applicable': 'User status is not applicable to admin accounts' }, ru: { 'footer.slogan': 'Ваша задача — наша забота! Решаем любые вопросы быстро и удобно.', 'footer.links': 'Ссылки', 'footer.socials': 'Мы в соцсетях', 'nav.home': 'Главная', 'nav.tasks': 'Задачи', 'nav.post': '+ Опубликовать', 'nav.dashboard': 'Мои задачи', 'nav.chat': 'Сообщения', 'nav.notifications': 'Уведомления', 'nav.profile': 'Профиль', 'nav.admin': 'Админка', 'nav.specialists': 'Предложения', 'nav.new_task': 'Новая задача', 'nav.login': 'Войти', 'nav.register': 'Регистрация', 'nav.logout': 'Выйти', 'hero.title': 'Каждый человек может чем-то помочь', 'hero.subtitle': 'Найди помощь, предложи свои навыки или зарабатывай, помогая другим', 'hero.cta.post': 'Найти помощь', 'hero.cta.browse': 'Предложить помощь', 'hero.cta.specialists': 'Найти работу', 'hero.search.placeholder': 'Что нужно? напр. электрик, уборка...', 'hero.specialist.title': 'Найдите заказы рядом с вами', 'hero.specialist.subtitle': 'Откройте заказы в своих категориях и отправьте предложение', 'hero.specialist.cta': 'Найти заказы', 'hero.specialist.search.placeholder': 'Поиск заказов... напр. электрика, уборка', 'section.categories.specialist': 'Найдите заказы по категории', 'section.cities.specialist': 'Заказы по городу', 'how.specialist.step1.title': 'Создайте карточку специалиста', 'how.specialist.step1.desc': 'Укажите категории, навыки и районы — система найдёт подходящие заказы автоматически', 'how.specialist.step2.title': 'Найдите подходящие заказы', 'how.specialist.step2.desc': 'Просматривайте заказы в своих категориях и начните работу сразу', 'how.specialist.step3.title': 'Отправьте предложение и зарабатывайте', 'how.specialist.step3.desc': 'Подайте предложение с ценой и сроками, общайтесь с клиентами и выполняйте заказы', 'stats.specialists': 'предложений', 'stats.tasks': 'задач', 'stats.categories': 'категорий', 'stats.free': 'бесплатная регистрация', 'promo.title': 'Получи Pro бесплатно — только до конца года', 'promo.subtitle': 'Зарегистрируйся сейчас и пользуйся тарифом Pro без оплаты. Акция заканчивается 31 декабря.', 'promo.cta': 'Зарегистрироваться', 'promo.days': 'дней', 'promo.hours': 'часов', 'promo.minutes': 'минут', 'promo.seconds': 'сек.', 'section.categories': 'Создай задачу в любой категории', 'section.how': 'Как это работает', 'section.recent': 'Последние задачи', 'section.all': 'Смотреть все →', 'section.more': 'ещё', 'section.cities': 'Города и районы', 'section.community': 'Общественный проект для всех', 'community.subtitle': 'CanHelp — не просто маркетплейс, это сообщество взаимопомощи. Любой, у кого есть знания или навык, может найти клиента. Любой, у кого есть задача, может найти специалиста.', 'community.point1.title': 'Умеете что-то делать?', 'community.point1.desc': 'Ремонт, репетиторство, дизайн, переводы, уход — каждый навык имеет ценность. Создайте профиль и находите клиентов рядом с вами.', 'community.point2.title': 'Нужна помощь?', 'community.point2.desc': 'Опубликуйте задачу за минуту и получайте предложения от проверенных специалистов в вашем городе.', 'community.point3.title': 'Помогите проекту расти', 'community.point3.desc': 'CanHelp развивается благодаря сообществам. Поделитесь ссылкой с друзьями и знакомыми — вместе мы строим что-то полезное для всех.', 'community.share': 'Поделиться с друзьями', 'community.share.copied': 'Ссылка скопирована!', // Referral section on home page 'section.referral': 'Реферальная программа', 'referral.home.subtitle': 'Поделитесь ссылкой — каждый новый пользователь, зарегистрировавшийся по ней, принесёт вам награду.', 'referral.home.step1.title': 'Зарегистрируйтесь и получите ссылку', 'referral.home.step1.desc': 'Создайте аккаунт и найдите свою уникальную реферальную ссылку в профиле.', 'referral.home.step2.title': 'Поделитесь с друзьями', 'referral.home.step2.desc': 'Отправьте ссылку друзьям, знакомым или опубликуйте в социальных сетях.', 'referral.home.step3.title': 'Получайте награды', 'referral.home.step3.desc': 'Как только друг подтвердит email, вы автоматически получите свою награду.', 'referral.home.cta': 'Получить ссылку', 'referral.home.badge': 'Реферальная программа', // FAQ section 'section.faq': 'Частые вопросы', 'faq.q1': 'Как работает CanHelp?', 'faq.a1': 'Опубликуйте задачу, получите предложения от специалистов, выберите лучшего и начните сотрудничество. Это быстро, просто и бесплатно для клиентов.', 'faq.q2': 'Сколько стоит использование платформы?', 'faq.a2': 'Регистрация и публикация задач полностью бесплатны для клиентов. Специалисты имеют доступ к бесплатному плану, а также к премиум-опциям.', 'faq.q3': 'Как стать специалистом?', 'faq.a3': 'Зарегистрируйтесь, перейдите в «Стать специалистом», заполните профиль навыками и категориями и начните получать задачи.', 'faq.q4': 'Как выбрать подходящего специалиста?', 'faq.a4': 'Оцените отзывы, опыт, навыки и портфолио каждого специалиста. Общайтесь через чат платформы и уточняйте детали до принятия решения.', 'faq.q5': 'Что если я не доволен результатом?', 'faq.a5': 'Вы можете оставить отзыв о специалисте и поставить оценку от 1 до 5 звёзд. Отзывы помогают другим пользователям выбирать проверенных профессионалов.', 'faq.q6': 'Можно ли связаться со специалистом до принятия предложения?', 'faq.a6': 'Да. Как только вы получили предложение, можно открыть чат со специалистом, задать вопросы и уточнить все детали до принятия решения.', 'faq.q7': 'Сколько времени ждать предложений?', 'faq.a7': 'Как правило, в течение нескольких часов. Специалисты получают уведомление о новых задачах и могут быстро ответить.', 'faq.q8': 'Можно ли разместить задачу в любом городе Греции?', 'faq.a8': 'Да! CanHelp охватывает всю Грецию — Афины, Фессалоники, Патры и другие города.', 'faq.q9': 'Какие виды задач есть на CanHelp?', 'faq.a9': 'Ремонт, уборка, электрики, репетиторство, дизайн, IT, переезды, красота и многое другое. Категории постоянно расширяются.', 'faq.q10': 'Есть ли мобильное приложение?', 'faq.a10': 'Да! CanHelp доступно для Android и iOS. Скачайте приложение и управляйте всем со своего телефона.', 'how.step1.title': 'Опубликуй задачу', 'how.step1.desc': 'Опиши что нужно и установи бюджет', 'how.step2.title': 'Получи предложения', 'how.step2.desc': 'Специалисты пришлют предложения с ценой и сроками', 'how.step3.title': 'Выбери и начни', 'how.step3.desc': 'Выбери лучшего профессионала и начни сотрудничество', 'tasks.title': 'задач', 'tasks.filters': 'Фильтры', 'tasks.search': 'Поиск', 'tasks.search.placeholder': 'Название или ключевое слово...', 'tasks.search.btn': 'Поиск', 'tasks.publish': 'Опубликовать', 'tasks.category.all': 'Все', 'tasks.category.all_in': 'Все в', 'tasks.category.label': 'Категория', 'tasks.location.label': 'Город', 'tasks.location.placeholder': 'напр. Афины', 'tasks.empty': 'Задачи не найдены', 'tasks.empty.cta': 'Опубликуй первую', 'task.status.open': 'Открыта', 'task.status.in_progress': 'В работе', 'task.status.completed': 'Завершена', 'task.status.cancelled': 'Отменена', 'task.status.draft': 'Черновик', 'task.budget': 'Бюджет', 'task.location': 'Местоположение', 'task.deadline': 'Дата начала', 'task.expires_at': 'Активно до', 'task.created_at': 'Создано', 'task.customer': 'Заказчик', 'task.offer.btn': 'Отправить предложение', 'task.invite.banner_title': 'Вас пригласили на это задание', 'task.invite.banner_hint': 'Заказчик лично пригласил вас', 'task.invite.accept': 'Отправить предложение', 'task.invite.decline': 'Отказаться', 'offer.accept': 'Принять', 'offer.decline': 'Отклонить', 'task.complete': 'Завершить задачу', 'task.complete.confirm': 'Отметить задачу как выполненную?', 'task.edit': 'Редактировать', 'task.status_label': 'Статус', 'task.yours': 'Ваша задача', 'task.offer.yours': 'Ваше предложение', 'review.leave': 'Оставить отзыв', 'review.rating': 'Оценка', 'review.comment': 'Комментарий', 'review.comment.placeholder': 'Расскажите о своём опыте...', 'review.submit': 'Отправить отзыв', 'review.submitting': 'Отправка...', 'review.done': 'Отзыв отправлен!', 'profile.reviews': 'Отзывы', 'profile.no_reviews': 'Отзывов пока нет', 'profile.rating': 'Рейтинг', 'profile.skills.label': 'Навыки', 'profile.member_since': 'Участник с', 'task.offers': 'Предложения', 'task.offers.none': 'Предложений пока нет', 'create.title': 'Опубликовать задачу', 'create.field.title': 'Название', 'create.field.description': 'Описание', 'create.field.category': 'Категория', 'create.field.category.select': 'Выберите...', 'create.field.location': 'Местоположение', 'create.field.location.any': 'Где угодно', 'create.field.location.all': 'Весь город', 'create.field.budget': 'Бюджет (€)', 'create.field.deadline': 'Дата начала', 'create.field.expires_at': 'Объявление активно', 'create.field.expires_at.days': '{n} дней', 'create.field.budget_negotiable': 'Цена обсуждается', 'create.field.time_slot': 'Время выполнения', 'create.field.time_slot.any': 'В любое время', 'create.field.time_slot.morning': 'Утром (08:00–13:00)', 'create.field.time_slot.afternoon': 'Днём (13:00–18:00)', 'create.field.time_slot.evening': 'Вечером (18:00–22:00)', 'create.field.time_slot.weekend': 'Выходной', 'create.field.address': 'Адрес (необязательно)', 'create.field.address.district': 'Квартал', 'create.field.address.street': 'Улица', 'create.field.address.house': 'Дом', 'create.field.confidential': 'Конфиденциальная заметка', 'create.field.confidential.placeholder': 'Детали, видные только назначенному специалисту...', 'create.field.confidential.hint': 'Не отображается публично', 'create.field.photos': 'Фотографии', 'create.field.photos.add': 'Добавить фото', 'create.field.photos.uploading': 'Загрузка...', 'task.budget_negotiable': 'Цена обсуждается', 'task.time_slot': 'Время', 'task.confidential': 'Конфид. заметка', 'create.field.title.placeholder': 'напр. Уборка квартиры 80кв', 'create.field.description.placeholder': 'Подробно опишите что нужно...', 'create.field.location.placeholder': 'напр. Афины, Колонаки', 'create.field.budget.placeholder': 'напр. 100', 'create.submit': 'Опубликовать задачу', 'create.submitting': 'Публикация...', 'login.title': 'Добро пожаловать', 'login.subtitle': 'Вход в CanHelp', 'login.email': 'Email', 'login.password': 'Пароль', 'login.submit': 'Войти', 'login.submitting': 'Вход...', 'login.error': 'Неверный email или пароль', 'login.unverified.title': 'Подтвердите ваш email', 'login.unverified.desc': 'Мы отправили ссылку для подтверждения на ваш email. Проверьте входящие (или спам) и перейдите по ссылке.', 'login.unverified.resend': 'Отправить письмо повторно', 'login.unverified.sending': 'Отправка...', 'login.unverified.sent': '✓ Отправлено — проверьте входящие', 'profile.email.verified': 'Email подтверждён', 'profile.email.not_verified': 'Email не подтверждён', 'login.no_account': 'Нет аккаунта?', 'login.register_link': 'Зарегистрироваться', 'login.forgot_password': 'Забыл пароль?', 'login.or_continue_with': 'или продолжите через', 'login.continue_google': 'Войти через Google', 'forgot.title': 'Забыл пароль', 'forgot.subtitle': 'Введите email для получения ссылки восстановления', 'forgot.email': 'Email', 'forgot.submit': 'Отправить ссылку', 'forgot.submitting': 'Отправка...', 'forgot.sent.title': 'Проверьте входящие', 'forgot.sent.desc': 'Если аккаунт с таким email существует, мы отправим ссылку для сброса пароля.', 'forgot.back_to_login': 'Вернуться ко входу', 'forgot.error': 'Не удалось отправить ссылку. Проверьте адрес и попробуйте снова.', 'forgot.error.not_found': 'Аккаунт с таким email не найден.', 'forgot.error.send_failed': 'Ошибка отправки письма. Попробуйте позже.', 'reset.title': 'Новый пароль', 'reset.subtitle': 'Введите новый пароль', 'reset.password': 'Новый пароль', 'reset.confirm': 'Подтвердите пароль', 'reset.submit': 'Изменить пароль', 'reset.submitting': 'Сохранение...', 'reset.success': 'Пароль успешно изменён. Перенаправление ко входу...', 'reset.back_to_login': 'Вернуться ко входу', 'reset.error.mismatch': 'Пароли не совпадают', 'reset.error.invalid': 'Недействительная или устаревшая ссылка. Запросите новую.', 'register.title': 'Регистрация', 'register.subtitle': 'Создать аккаунт в CanHelp', 'register.first_name': 'Имя', 'register.last_name': 'Фамилия', 'register.email': 'Email', 'register.password': 'Пароль (мин. 8 символов)', 'register.role': 'Роль', 'register.role.customer': 'Пользователь', 'register.role.customer.desc': 'Публикую задачи', 'register.role.specialist': 'Специалист', 'register.role.specialist.desc': 'Беру задачи', 'register.submit': 'Создать аккаунт', 'register.submitting': 'Регистрация...', 'register.has_account': 'Уже есть аккаунт?', 'register.login_link': 'Войти', 'register.continue_google': 'Зарегистрироваться через Google', 'register.check_email.title': 'Проверьте почту', 'register.check_email.desc': 'Мы отправили ссылку для подтверждения на ваш email. Проверьте входящие (или спам) и перейдите по ссылке.', 'register.check_email.login': 'Вернуться к входу', 'register.captcha_failed': 'Проверка CAPTCHA не пройдена. Пройдите проверку безопасности и попробуйте снова.', 'dashboard.title': 'Панель управления', 'dashboard.new_task': '+ Новая задача', 'dashboard.onboarding.title': 'Добро пожаловать в CanHelp 👋', 'dashboard.onboarding.subtitle': 'Выберите, с чего хотите начать.', 'dashboard.onboarding.helper.title': 'Предложите свою помощь', 'dashboard.onboarding.helper.desc': 'Заполните анкету — навыки, категории и города. Это займёт пару минут, и вы начнёте получать заказы.', 'dashboard.onboarding.helper.cta': 'Заполнить анкету', 'dashboard.onboarding.requester.title': 'Нужна помощь?', 'dashboard.onboarding.requester.desc': 'Опубликуйте задачу — помощники пришлют вам свои предложения.', 'dashboard.onboarding.requester.cta': 'Опубликовать задачу', 'dashboard.my_tasks': 'Мои задачи', 'dashboard.my_offers': 'Мои предложения', 'dashboard.invitations': 'Приглашения на задания', 'dashboard.offers_count': 'предл.', 'dashboard.declined_count': 'откл.', 'dashboard.completed_tasks': 'Завершённые задачи', 'dashboard.completed_offers': 'Завершённые предложения', 'dashboard.review_pending': 'Оценка ещё не оставлена', 'tasks.new.top_specialists': 'Топ специалисты', 'tasks.new.select_category': 'Выберите категорию, чтобы увидеть специалистов', 'tasks.new.invite': 'Предложить работу', 'tasks.new.invited': 'Выбран ✓', 'reviews.count': 'отзывов', 'filter.location': 'Локация', 'filter.language': 'Языки', 'filter.language.any': 'Любой язык', 'filter.category.all': 'Все категории', 'user.categories': 'Категории', 'user.work_area': 'Район работы', 'user.specialist_cards': 'Карточки услуг', 'card.skills': 'Навыки', 'card.categories': 'Категории', 'card.geography': 'Район работы', 'card.portfolio': 'Галерея работ', 'card.close': 'Закрыть', 'dashboard.tasks.empty': 'Вы не публиковали задачи', 'dashboard.tasks.empty.cta': 'Опубликуйте первую', 'dashboard.tasks.add_new': 'Добавить новую задачу', 'dashboard.offers.empty': 'Вы не отправляли предложений', 'dashboard.offers.empty.cta': 'Найти задачи', 'dashboard.customer.specialists_title': 'Ищете исполнителя?', 'dashboard.customer.specialists_hint': 'Просматривайте профили специалистов, читайте отзывы и приглашайте их на свои задачи', 'dashboard.customer.specialists_cta': 'Найти исполнителя', 'dashboard.customer.how_title': 'Как это работает', 'dashboard.customer.step1': 'Создайте задачу с описанием и бюджетом', 'dashboard.customer.step2': 'Специалисты пришлют предложения с ценой и сроками', 'dashboard.customer.step3': 'Выберите подходящего и начните работу', 'notif.title': 'Уведомления', 'notif.mark_all': 'Отметить все как прочитанные', 'notif.empty': 'Нет уведомлений', 'notif.type.generic': 'Уведомление', 'notif.type.new_offer': 'Новое предложение', 'notif.type.offer_accepted': 'Ваше предложение принято', 'notif.type.offer_declined': 'Ваше предложение отклонено', 'notif.type.task_completed': 'Задание выполнено', 'notif.type.task_cancelled': 'Задание отменено', 'notif.type.new_message': 'Новое сообщение', 'notif.type.new_review': 'Новый отзыв', 'notif.type.task_invite': 'Приглашение на задание', 'notif.type.referral_reward': 'Реферальная награда', 'notif.type.specialist_card_submitted': 'Карточка отправлена на проверку', 'notif.type.specialist_card_approved': 'Карточка одобрена', 'notif.type.specialist_card_rejected': 'Карточка отклонена', 'notif.body.new_offer': 'Новое предложение на «{title}»', 'notif.body.offer_accepted': 'Ваше предложение на «{title}» принято', 'notif.body.offer_declined': 'Ваше предложение на «{title}» отклонено', 'notif.body.task_invite': 'Вас приглашают на «{title}»', 'notif.body.new_review': 'Вы получили оценку {rating}★', 'notif.body.referral_reward': 'На ваш аккаунт добавлено {days} дней доступа к плану «{plan}»!', 'notif.body.specialist_card_submitted': 'Карточка «{title}» отправлена на проверку', 'notif.body.specialist_card_approved': 'Карточка «{title}» одобрена и опубликована', 'notif.body.specialist_card_rejected': 'Карточка «{title}» не была одобрена. Исправьте её и отправьте снова.', 'offer.status.pending': 'Ожидает', 'offer.status.accepted': 'Принято', 'offer.status.declined': 'Отклонено', 'offer.status.withdrawn': 'Отозвано', 'offer.status.other_accepted': 'Выбран другой исполнитель', 'common.loading': 'Загрузка...', 'common.error': 'Ошибка', 'common.save': 'Сохранить', 'common.saving': 'Сохранение...', 'common.cancel': 'Отмена', 'common.add': 'Добавить', 'common.close': 'Закрыть', 'common.edit': 'Редактировать', 'common.delete': 'Удалить', 'common.from': 'от', 'common.currency': '€', 'common.greece': 'Греция', // Chat 'chat.connected': 'Подключено', 'chat.disconnected': 'Отключено', 'chat.no_rooms': 'Переписок пока нет', 'chat.task_fallback': 'Задача', 'chat.select': 'Выберите переписку', 'chat.no_messages': 'Сообщений пока нет', 'chat.placeholder': 'Напишите сообщение... (Enter для отправки)', 'chat.conversation_fallback': 'Переписка', 'chat.direct_chat': 'Личный чат', 'chat.linked_task': 'Прикреплённый заказ', 'chat.write_btn': 'Написать', 'chat.just_now': 'только что', 'chat.min_ago': 'м', 'chat.write_specialist': 'Написать специалисту', 'chat.write_customer': 'Написать заказчику', 'chat.notif_settings': 'Настройки уведомлений', 'chat.notif_messages': 'Уведомления о новых сообщениях', 'chat.toast_title': 'Новое сообщение', 'chat.toast_open': 'Открыть чат', // Offer form 'offer.price': 'Цена', 'offer.price.placeholder': 'напр. 80', 'offer.customer_budget': 'Бюджет заказчика', 'offer.message': 'Сообщение', 'offer.optional': 'необязательно', 'offer.message.placeholder': 'Представьтесь, расскажите об опыте и почему вы лучший выбор...', 'offer.submitting': 'Отправка...', // Profile 'profile.photo': 'Фото профиля', 'profile.photo.change': 'Изменить фото', 'profile.photo.hint': 'JPEG, PNG, WebP · до 5MB', 'profile.basic_info': 'Основная информация', 'profile.phone': 'Телефон', 'profile.phone.placeholder': '+30 6901234567', 'profile.bio': 'Краткое описание', 'profile.bio.placeholder': 'Расскажите немного о себе...', 'profile.language': 'Язык', 'profile.language.hint': 'Язык интерфейса и email-уведомлений', 'profile.languages': 'Языки общения', 'profile.languages.hint': 'Выберите все языки, на которых вы общаетесь', 'profile.skills': 'Навыки', 'profile.skills.subtitle': 'Добавьте услуги, которые вы предлагаете', 'profile.skills.placeholder': 'напр. Уборка, IT, Репетиторство...', 'profile.role': 'Роль аккаунта', 'profile.role.specialist': '🔧 Помощник', 'profile.role.admin': '👑 Admin', 'profile.role.customer': '👤 Пользователь', 'profile.role.user': '👤 Пользователь', 'profile.role.change': 'Для смены роли обратитесь в службу поддержки.', 'profile.become_specialist': 'Предложить помощь', 'profile.become_specialist.desc': 'Создай профиль помощника, предложи свои навыки и начни получать задачи.', 'become_specialist.hero.title': 'Предложи свои навыки и начни зарабатывать', 'become_specialist.hero.subtitle': 'Создай профиль помощника и получай запросы от людей, которым нужна помощь', 'become_specialist.how.title': 'Как это работает', 'become_specialist.step1.title': 'Создай портфолио специалиста', 'become_specialist.step1.desc': 'Укажи категории, навыки и зону покрытия — система автоматически подберёт подходящие заказы', 'become_specialist.step2.title': 'Ищи заказы', 'become_specialist.step2.desc': 'Просматривай задачи по своим категориям в разделе «Поиск заказов»', 'become_specialist.step3.title': 'Откликайся и зарабатывай', 'become_specialist.step3.desc': 'Отправляй предложения с ценой и сроками, общайся с клиентами и выполняй заказы', 'become_specialist.benefits.title': 'Преимущества профиля специалиста', 'become_specialist.benefit1': 'Поиск заказов по вашим категориям и локации', 'become_specialist.benefit2': 'Публичный профиль с отзывами клиентов', 'become_specialist.benefit3': 'Расписание доступности, видимое клиентам', 'become_specialist.benefit4': 'Добавление в избранное клиентами', 'become_specialist.cta': 'Подробнее', 'become_specialist.free_badge': 'Бесплатная регистрация', 'profile.tab.notifications': 'Уведомления', 'profile.tab.reviews': 'Отзывы', 'profile.tab.referral': 'Рефералы', 'profile.tab.auto_response': 'Авто-ответ', 'profile.tab.site': 'Сайт', 'profile.site.title': 'Персональная страница', 'profile.site.url_label': 'Личный сайт', 'profile.site.copy': 'Копировать', 'profile.site.copied': 'Скопировано', 'profile.site.visible_title': 'Что отображается на вашей странице', 'profile.site.visible.name': 'Имя и фото', 'profile.site.visible.bio': 'Биография', 'profile.site.visible.rating': 'Рейтинг и отзывы', 'profile.site.visible.portfolio': 'Портфолио / Карточки', 'profile.site.visible.contacts': 'Контактные данные', 'profile.site.visible.full_last_name': 'Фамилия полностью', 'profile.site.visible.services': 'Карточки услуг', 'profile.site.visible.reviews': 'Раздел с отзывами', 'profile.site.visible.status': 'Статус «Готов помочь»', 'profile.site.theme': 'Тема оформления', 'profile.site.theme.dark': 'Тёмная', 'profile.site.theme.light': 'Светлая', 'profile.site.slug_taken': 'Этот адрес уже занят', 'profile.site.stats.title': 'Аналитика сайта', 'profile.site.stats.days': 'последние 30 дней', 'profile.site.stats.views': 'Просмотры', 'profile.site.stats.unique': 'Уникальные посетители', 'profile.site.stats.messages': 'Сообщения', 'profile.site.stats.total_views': 'Просмотры', 'profile.site.stats.total_unique': 'Уник. посетители', 'profile.site.stats.total_messages': 'Сообщения', 'profile.site.stats.empty': 'Данных пока нет', 'profile.site.stats.loading': 'Загрузка аналитики...', 'profile.site.stats.no_slug': 'Укажите адрес сайта, чтобы видеть статистику', 'profile.site.edit_bio_hint': 'Биография и фото настраиваются во вкладке «Основное».', 'profile.site.seo.title': 'SEO — мета-данные сайта', 'profile.site.seo.hint': 'Отображается в поисковиках. При сохранении автоматически переводится на все языки.', 'profile.site.seo.site_title': 'Заголовок страницы', 'profile.site.seo.site_title_placeholder': 'Иван Иванов — Электрик в Афинах', 'profile.site.seo.site_desc': 'Мета-описание', 'profile.site.seo.site_desc_placeholder': 'Краткое описание для поисковиков...', 'status.title': 'Статус', 'status.can_help_now_hint': 'Ваша карточка показывается выше в поиске', 'status.need_help_hint': 'Специалисты могут предложить вам помощь', 'profile.referral.title': 'Партнёрская программа', 'profile.referral.desc': 'Поделитесь ссылкой и получайте награду за каждого привлечённого пользователя.', 'profile.referral.link_label': 'Ваша реферальная ссылка', 'profile.referral.copy': 'Копировать', 'profile.referral.copied': 'Скопировано!', 'profile.referral.invited_count': 'успешных приглашений', 'profile.referral.no_code': 'Реферальный код недоступен.', 'notifications.title': 'Настройки уведомлений', 'notifications.email.new_tasks': 'Email о новых заказах', 'notifications.email.new_tasks.desc': 'Получать email, когда в ваших категориях публикуется новый заказ', 'notifications.messages.desc': 'Получать уведомление при новом входящем сообщении', 'notifications.saved': 'Настройки сохранены', 'notifications.plan_required': 'Недоступно в вашем тарифе', 'profile.tab.info': 'Основное', 'profile.tab.finance': 'Финансы', 'profile.tab.skills': 'Навыки', 'profile.tab.categories': 'Категории', 'profile.tab.geography': 'География', 'profile.specialist.categories': 'Категории работ', 'profile.specialist.categories.desc': 'Выберите категории, в которых вы работаете', 'profile.specialist.geography': 'Города покрытия', 'profile.specialist.geography.desc': 'Выберите города / районы, где вы работаете', 'profile.saving': 'Сохранение...', 'profile.upload.error': 'Ошибка загрузки фото', 'profile.saved': 'Сохранено', 'profile.tab.cards': 'Предложения', 'profile.cards.count': 'Предложения', 'profile.cards.add': 'Добавить предложение', 'profile.cards.new_title': 'Название нового предложения', 'profile.cards.placeholder': 'Например: Сантехника', 'profile.cards.create': 'Создать', 'profile.cards.cancel': 'Отмена', 'profile.cards.empty': 'У вас нет предложений', 'profile.cards.empty_hint': 'Создайте первую карточку, чтобы показать услуги клиентам.', 'profile.cards.create_first': 'Создать первое предложение', 'profile.cards.delete_confirm': 'Удалить предложение?', 'profile.background.change': 'Изменить фон', 'profile.background.remove': 'Удалить фон', 'profile.listing_requirements.published_card': 'Опубликуйте хотя бы одну карточку', 'profile.listing_requirements.title': 'Ваш профиль пока не показывается в разделе «Предложения»', 'profile.listing_requirements.hint': 'Чтобы карточка отображалась, выполните условия:', 'profile.listing_requirements.bio': 'Добавьте краткую информацию о себе в «Основное»', 'profile.listing_requirements.categories': 'Укажите хотя бы одну категорию в активной карточке', 'profile.listing_requirements.locations': 'Укажите хотя бы одну локацию в активной карточке', 'profile.listing_requirements.card_inactive': 'Сделайте карточку активной', 'profile.listing_requirements.review_pending': 'Карточка на рассмотрении', 'profile.card.visibility_issue': 'Карточка не отображается в разделе «Предложения»', 'profile.card.tab.main': 'Основное', 'profile.card.tab.skills': 'Навыки', 'profile.card.tab.categories': 'Категории', 'profile.card.tab.geography': 'География', 'profile.card.tab.portfolio': 'Галерея', 'profile.card.tab.pricelist': 'Прайс-лист', 'profile.card.pricelist.empty': 'Группы прайс-листа ещё не добавлены.', 'profile.card.pricelist.add_group': 'Добавить группу', 'profile.card.pricelist.group_title': 'Название группы', 'profile.card.pricelist.add_item': 'Добавить позицию', 'profile.card.pricelist.item_name': 'Услуга / работа', 'profile.card.pricelist.item_desc': 'Описание (необязательно)', 'profile.card.pricelist.item_price': 'Цена', 'profile.card.pricelist.item_unit': 'Единица (например /час)', 'profile.card.pricelist.save_group': 'Сохранить группу', 'profile.card.pricelist.save_item': 'Сохранить', 'profile.card.pricelist.delete_group': 'Удалить группу', 'profile.card.pricelist.delete_item': 'Удалить', 'profile.card.active': 'Активна', 'profile.card.review_pending': 'На рассмотрении', 'profile.card.review_pending_hint': 'Ваша карточка сейчас проверяется администрацией.', 'profile.card.review_submitted': 'Карточка отправлена на проверку', 'profile.card.review_approved': 'Карточка одобрена', 'profile.card.review_approved_hint': 'Ваша карточка теперь отображается в предложениях.', 'profile.card.review_rejected': 'Карточка отклонена', 'profile.card.review_rejected_hint': 'Карточка не была одобрена. Исправьте её и отправьте снова.', 'profile.card.submit_review': 'Отправить на рассмотрение', 'profile.card.withdraw_review': 'Отозвать заявку', 'profile.card.unpublish': 'Снять с публикации', 'profile.card.save': 'Сохранить', 'profile.card.saved': 'Сохранено', 'profile.card.delete': 'Удалить', 'profile.card.skill.add': 'Добавить навык', 'profile.card.photo.add': 'Добавить фото', 'profile.card.photo.uploading': 'Загрузка...', 'profile.card.photo.empty': 'Нет фотографий', 'profile.card.item.title': 'Заголовок', 'profile.card.item.desc': 'Описание', 'profile.card.item.save': 'Сохранить', 'profile.card.item.cancel': 'Отмена', 'profile.card.item.edit': 'Описание работы', 'profile.card.description': 'Описание карточки', 'profile.card.desc_auto_translate': 'При сохранении будет автоматически переведено на другие языки', 'profile.card.desc_translated': 'Есть переводы:', 'profile.upgrade.cards_limit': 'Лимит портфолио исчерпан', 'profile.upgrade.plan': 'Текущий тариф:', 'profile.upgrade.contact': 'Обратитесь к администратору для смены тарифа', 'profile.upgrade.ok': 'Понятно', 'profile.plan.title': 'Тарифный план', 'profile.balance': 'Баланс', 'profile.balance.topup': 'Пополнить баланс', 'profile.balance.topup.title': 'Пополнить баланс', 'profile.balance.topup.amount': 'Сумма (в EUR)', 'profile.balance.topup.hint': 'Выберите сумму или введите вручную', 'profile.balance.topup.submit': 'Перейти к оплате', 'profile.balance.topup.loading': 'Перенаправление...', 'profile.balance.topup.error': 'Ошибка инициализации платежа. Попробуйте снова.', 'payment.success.title': 'Оплата прошла успешно!', 'payment.success.desc': 'Ваш баланс обновлён.', 'payment.cancelled.title': 'Оплата отменена', 'payment.cancelled.desc': 'Оплата была отменена. Средства не списаны.', 'payment.pending.title': 'Обрабатывается...', 'payment.pending.desc': 'Ваш платёж в обработке.', 'payment.back_to_profile': 'Вернуться в профиль', 'profile.plan.basic': 'Базовый (бесплатный)', 'profile.plan.contact_upgrade': 'Обратитесь к администратору для подключения тарифа', 'profile.plan.cards_up_to': 'Портфолио: до', 'profile.plan.cards_unlimited': 'Портфолио: безлимитно', 'profile.plan.tasks_up_to': 'Задач: до', 'profile.plan.offers_up_to': 'Откликов: до', 'profile.plan.valid_until': 'Действителен до', 'profile.plan.no_expiry': 'Бессрочно', // Create task 'create.error': 'Ошибка при публикации', // Tasks list extras 'tasks.category.general': 'Общее', 'tasks.budget.range': 'Диапазон:', 'tasks.budget.from': 'от', 'tasks.budget.to': 'до', 'tasks.filter.reset': 'Сбросить фильтры', 'tasks.load_more': 'Загрузить ещё', 'tasks.showing': 'Результатов:', 'tasks.field.budget': 'Бюджет, €', // Admin 'admin.title': 'Панель администратора', 'admin.tab.stats': 'Статистика', 'admin.tab.users': 'Пользователи', 'admin.tab.tasks': 'Задачи', 'admin.tab.reports': 'Жалобы', 'admin.tab.moderation': 'Модерация', 'admin.stats.users': 'Пользователи', 'admin.stats.tasks': 'Задачи', 'admin.stats.offers': 'Предложения', 'admin.stats.reviews': 'Отзывы', 'admin.tasks.by_status': 'Задачи по статусу', 'admin.col.user': 'Пользователь', 'admin.col.email': 'Email', 'admin.col.role': 'Роль', 'admin.col.registered': 'Регистрация', 'admin.col.status': 'Статус', 'admin.col.title': 'Название', 'admin.col.budget': 'Бюджет', 'admin.col.created': 'Создано', 'admin.users.active': 'Активен', 'admin.users.inactive': 'Неактивен', 'admin.users.deactivate': 'Деактивировать', 'admin.users.activate': 'Активировать', 'admin.tasks.cancel': 'Отменить', 'admin.reports.none': 'Жалоб нет', 'admin.moderation.none': 'Нет предложений для проверки', 'admin.moderation.pending': 'В ожидании', 'admin.moderation.active': 'Активно', 'admin.moderation.approve': 'Одобрить', 'admin.moderation.block': 'Заблокировать', 'admin.moderation.pending_title': 'Предложения на одобрение', 'admin.moderation.active_title': 'Активные предложения', 'admin.moderation.pending_count': 'В ожидании', 'admin.moderation.active_count': 'Активные', 'admin.moderation.pending_hint': 'Новые предложения, ожидающие проверки', 'admin.moderation.active_hint': 'Активные предложения, которые можно заблокировать', 'admin.moderation.pending_empty': 'Новых предложений для одобрения нет', 'admin.moderation.active_empty': 'Активных предложений не найдено', 'admin.reports.reviewed': 'Рассмотрено', 'admin.reports.dismiss': 'Отклонить', 'admin.pagination.total': 'Всего', 'admin.users.role.change': 'Изменить роль', 'admin.users.search.placeholder': 'Поиск по имени или email...', 'admin.tasks.delete': 'Удалить', 'admin.tasks.delete.confirm': 'Удалить эту задачу навсегда?', 'admin.tasks.search.placeholder': 'Поиск по названию...', 'admin.col.customer': 'Заказчик', 'admin.col.reporter': 'Жалобщик', 'admin.col.target': 'Цель', 'admin.filter.all_roles': 'Все роли', 'admin.filter.all_statuses': 'Все статусы', 'admin.reports.target.task': 'Задача', 'admin.reports.target.user': 'Пользователь', 'admin.tab.categories': 'Категории', 'admin.tab.locations': 'Города и районы', 'admin.tab.logs': 'Логи', 'admin.tab.plans': 'Тарифы', 'admin.tab.settings': 'Настройки', 'admin.logs.subtab.ai': 'AI логи', 'admin.logs.subtab.activity': 'Активность', 'admin.logs.subtab.mail': 'Mail', 'admin.logs.subtab.notifications': 'Уведомления', 'admin.notif_logs.type': 'Тип', 'admin.notif_logs.title': 'Заголовок', 'admin.notif_logs.read': 'Прочитано', 'admin.notif_logs.empty': 'Логи уведомлений пусты', 'admin.stats.notif_chart_title': 'Уведомления по дням', 'admin.stats.notif_label': 'Уведомления', 'admin.stats.mail_chart_title': 'Email по дням', 'admin.stats.mail_label': 'Emails', 'admin.filter.all': 'Все', 'admin.stats.specialists': 'Помощники', 'admin.col.plan': 'Тариф', 'admin.back_home': 'На главную', 'admin.plans.title': 'Тарифные пакеты', 'admin.plans.add': '+ Добавить тариф', 'admin.plans.empty': 'Тарифы не созданы', 'admin.plans.form.new': 'Новый тариф', 'admin.plans.form.edit': 'Редактировать тариф', 'admin.plans.form.name': 'Название', 'admin.plans.form.price': 'Цена (EUR)', 'admin.plans.form.old_price': 'Старая цена (EUR, необязательно)', 'admin.plans.form.max_offers': 'Макс. откликов (пусто = без лимита)', 'admin.plans.form.max_cards': 'Макс. предложений (пусто = без лимита)', 'admin.plans.form.duration_days': 'Срок (дней, пусто = без истечения)', 'admin.plans.form.description': 'Описание', 'admin.plans.form.features': 'Возможности (по одной на строку)', 'admin.plans.form.notify': 'Уведомления о новых заказах', 'admin.plans.form.default': 'По умолчанию', 'admin.plans.form.active': 'Активен', 'admin.plans.form.order': 'Порядок', 'admin.plans.form.role': 'Роль', 'admin.plans.form.tier': 'Уровень', 'admin.plans.form.role.customer': 'Заказчик', 'admin.plans.form.role.specialist': 'Помощник', 'admin.plans.form.tier.free': 'Бесплатный', 'admin.plans.form.tier.pro': 'Pro', 'admin.plans.form.tier.ultimate': 'Ultimate', 'admin.plans.form.section.limits': 'Лимиты (пусто = без ограничений)', 'admin.plans.form.max_messages_day': 'Макс. сообщений/день', 'admin.plans.form.max_orders_day': 'Макс. заказов/день', 'admin.plans.form.max_skills': 'Макс. навыков', 'admin.plans.form.max_profiles': 'Макс. профилей', 'admin.plans.form.max_portfolio': 'Макс. элементов портфолио', 'admin.plans.form.section.boost': 'Множители & Буст', 'admin.plans.form.search_boost': 'Буст в поиске', 'admin.plans.form.offers_multiplier': 'Множитель откликов', 'admin.plans.form.section.contact': 'Права контактов', 'admin.plans.form.can_contact_free': 'Контакт с бесплатными пользователями', 'admin.plans.form.can_contact_pro': 'Контакт с Pro пользователями', 'admin.plans.form.can_contact_all': 'Контакт со всеми', 'admin.plans.form.can_show_contact': 'Показывать контакты', 'admin.plans.form.can_view_phone': 'Просмотр телефона', 'admin.plans.form.section.features': 'Возможности', 'admin.plans.form.upload_video': 'Загрузка видео', 'admin.plans.form.favorites': 'Избранное', 'admin.plans.form.google_calendar': 'Google Calendar', 'admin.plans.form.verified_badge': 'Знак верификации', 'admin.plans.form.highlighted_reviews': 'Выделенные отзывы', 'admin.plans.form.personal_site': 'Личный сайт', 'admin.plans.form.can_help_now': 'Статус «Могу помочь»', 'admin.plans.form.need_help': 'Статус «Нужна помощь»', 'admin.plans.form.auto_response': 'Автоответ', 'admin.plans.form.auto_match': 'Автоподбор', 'admin.plans.form.price_list': 'Прайс-лист', 'admin.plans.form.instant_dispatch_free': 'Мгновенная рассылка (бесплатно)', 'admin.plans.form.instant_dispatch_pro': 'Мгновенная рассылка (Pro)', 'admin.plans.badge.default': 'По умолчанию', 'admin.plans.badge.inactive': 'Неактивен', 'admin.plans.make_default': 'Сделать по умолчанию', 'admin.plans.tasks': 'Задач', 'admin.plans.offers': 'Откликов', 'admin.plans.cards': 'Предложения', 'admin.plans.notify_tasks': 'Уведомления о заказах', 'admin.plans.delete.confirm': 'Удалить тариф', 'admin.activity.title': 'Журнал активности', 'admin.activity.event': 'Событие', 'admin.activity.all_events': 'Все события', 'admin.activity.from': 'От', 'admin.activity.to': 'До', 'admin.activity.reset': 'Сбросить', 'admin.activity.total': 'Всего', 'admin.activity.empty': 'Нет записей', 'admin.mail.event': 'Email событие', 'admin.mail.all_events': 'Все email события', 'admin.mail.from': 'От', 'admin.mail.to': 'До', 'admin.mail.reset': 'Сбросить', 'admin.mail.total': 'Всего', 'admin.mail.empty': 'Нет email логов', 'admin.mail.recipient': 'Получатель', 'admin.mail.provider': 'Провайдер', 'admin.mail.details': 'Детали', 'admin.mail.status': 'Статус', 'admin.mail.success': 'Успешно', 'admin.mail.failed': 'Ошибка', 'admin.event.email_sent': 'Email отправлен', 'admin.event.email_failed': 'Email не отправлен', 'admin.event.email_dev': 'Email DEV fallback', 'admin.event.admin_email_test_sent': 'Тестовый email отправлен', 'admin.event.admin_email_test_failed': 'Тестовый email не отправлен', 'admin.logs.empty': 'Нет записей', 'admin.logs.date': 'Дата', 'admin.logs.provider': 'Провайдер', 'admin.logs.model': 'Модель', 'admin.logs.action': 'Действие', 'admin.logs.langs': 'Языки', 'admin.logs.in': 'Вход', 'admin.logs.out': 'Выход', 'admin.logs.total': 'Итого', 'admin.logs.ms': 'мс', 'admin.logs.status': 'Статус', 'admin.stats.activity_30d': 'Активность за 30 дней', 'admin.stats.tasks_label': 'Заявки', 'admin.stats.users_label': 'Пользователи', 'admin.stats.specialists_label': 'Помощники', 'admin.stats.tokens_title': 'Расход токенов (по месяцам)', 'admin.stats.tokens_out': 'Исходящие', 'admin.stats.tokens_in': 'Входящие', 'admin.stats.tokens_out_label': 'Исходящие токены', 'admin.stats.tokens_in_label': 'Входящие токены', 'admin.stats.cost_label': 'Стоимость (USD)', 'admin.stats.tasks_by_status': 'Заявки по статусам', 'admin.task_status.open': 'Открытые', 'admin.task_status.in_progress': 'В работе', 'admin.task_status.completed': 'Завершённые', 'admin.task_status.cancelled': 'Отменённые', 'admin.task_status.draft': 'Черновики', 'admin.settings.tab.general': 'Общие', 'admin.settings.tab.smtp': 'E-Mail', 'admin.settings.tab.notifications': 'Уведомления', 'admin.settings.tab.payment': 'Оплата', 'admin.settings.tab.referral': 'Реферальная', 'admin.settings.tab.seo': 'SEO', 'admin.settings.tab.socials': 'Соцсети', 'admin.settings.tab.telegram': 'Telegram Bot', 'admin.settings.telegram.title': 'Настройки Telegram Bot', 'admin.settings.telegram.help': 'Создайте бота через @BotFather. ID чата узнайте через @userinfobot.', 'admin.settings.telegram.bot_token': 'Bot Token', 'admin.settings.telegram.admin_chat_id': 'Chat ID администратора', 'admin.settings.telegram.admin_chat_hint': 'Сначала отправьте /start своему боту, затем узнайте chat ID через @userinfobot', 'admin.settings.telegram.channel_id': 'неиспользуется', 'admin.settings.telegram.channels_title': 'Каналы по языкам', 'admin.settings.telegram.channel_hint': 'Username публичного канала (@канал) или числовой ID', 'admin.settings.telegram.notify_registrations': 'Уведомлять о новых регистрациях', 'admin.settings.telegram.notify_registrations_hint': 'Отправлять сообщение при регистрации нового пользователя', 'admin.settings.telegram.post_new_tasks': 'Публиковать новые задания в канал', 'admin.settings.telegram.post_new_tasks_hint': 'Автоматически публиковать новые задания в Telegram-канал', 'admin.settings.telegram.test': 'Тест', 'admin.settings.telegram.verify': 'Проверить токен', 'admin.settings.telegram.test_ok': 'Соединение работает', 'admin.settings.telegram.test_fail': 'Ошибка соединения', 'admin.settings.socials.title': 'Ссылки на социальные сети', 'admin.settings.socials.hint': 'Заполненные ссылки отображаются в подвале сайта', 'admin.settings.seo.maintenance_label': 'Режим обслуживания', 'admin.settings.seo.maintenance_hint': 'Показывать страницу обслуживания всем посетителям', 'admin.settings.seo.indexing_label': 'Индексация поисковыми системами', 'admin.settings.seo.indexing_hint': 'Разрешить поисковым системам индексировать сайт', 'admin.settings.seo.head_scripts_label': 'Скрипты в (JS)', 'admin.settings.seo.head_scripts_hint': 'Выполняется на каждой странице (Google Tag Manager, аналитика и т.д.)', 'admin.settings.seo.site_title_label': 'Заголовок сайта', 'admin.settings.seo.site_description_label': 'Описание сайта (meta description)', 'admin.settings.referral.title': 'Партнёрская программа', 'admin.settings.referral.hint': 'Награждайте пользователей, приводящих новых участников.', 'admin.settings.referral.enabled_label': 'Включено', 'admin.settings.referral.enabled_hint': 'Включить / отключить выдачу наград', 'admin.settings.referral.customer_section': 'Для клиентов', 'admin.settings.referral.specialist_section': 'Для помощников', 'admin.settings.referral.plan_label': 'Тарифный план за реферала', 'admin.settings.referral.no_plan': '— без плана —', 'admin.settings.referral.plan_hint': 'Этот план будет назначен пригласившему. Если его текущий план выше — добавятся только дни.', 'admin.settings.referral.days_label': 'Дней награды', 'admin.settings.referral.days_hint': 'Количество дней, добавляемых к сроку действия плана.', 'admin.settings.general.title': 'Общие настройки', 'admin.settings.general.site_name': 'Название сайта', 'admin.settings.general.site_url': 'URL сайта', 'admin.settings.general.contact_email': 'Email для связи', 'admin.settings.general.support_phone': 'Телефон поддержки', 'admin.settings.smtp.title': 'Настройки SMTP сервера', 'admin.settings.smtp.hint': 'Используется для отправки email-уведомлений.', 'admin.settings.smtp.host': 'SMTP Хост', 'admin.settings.smtp.port': 'Порт', 'admin.settings.smtp.encryption': 'Шифрование', 'admin.settings.smtp.enc.none': 'Нет', 'admin.settings.smtp.enc.tls': 'STARTTLS (порт 587)', 'admin.settings.smtp.enc.ssl': 'SSL/TLS (порт 465)', 'admin.settings.smtp.username': 'Имя пользователя', 'admin.settings.smtp.password': 'Пароль / App Password', 'admin.settings.smtp.from_name': 'Имя отправителя', 'admin.settings.smtp.from_email': 'Email отправителя', 'admin.settings.smtp.test': 'Отправить тестовый email', 'admin.settings.smtp.sending': 'Отправка...', 'admin.settings.payment.hint': 'Данные для подключения к ePay Piraeus Bank.', 'admin.settings.env.test': 'Тест (sandbox)', 'admin.settings.env.prod': 'Боевой режим', 'admin.settings.env.label': 'Среда', 'admin.settings.merchant_id': 'Merchant ID', 'admin.settings.api_user': 'API User', 'admin.settings.api_password': 'API Password', 'admin.settings.confirm_url': 'Confirmation URL (webhook)', 'admin.settings.cancel_url': 'Cancel URL', 'admin.settings.active': 'Активен', 'admin.settings.saving': 'Сохранение...', 'admin.settings.saved': 'Сохранено', 'admin.notif.vars_hint': 'Доступные переменные в шаблонах', 'admin.notif.tmpl.not_set': 'Шаблон не настроен', 'admin.notif.tmpl.subject_label': 'Тема письма', 'admin.notif.tmpl.body_label': 'Текст письма (HTML)', 'admin.notif.tmpl.save': 'Сохранить', 'admin.notif.tmpl.close': 'Закрыть', 'admin.notif.tmpl.translate': 'Авто-перевод на другие языки', 'admin.notif.tmpl.translating': 'Перевод...', 'admin.notif.tmpl.saving': 'Сохранение...', 'admin.notif.email_verification': 'Подтверждение email адреса', 'admin.notif.registration_success': 'Успешная регистрация', 'admin.notif.password_reset': 'Восстановление пароля', 'admin.notif.new_offer': 'Новое предложение', 'admin.notif.new_task': 'Новая задача', 'admin.notif.offer_accepted': 'Предложение принято', 'admin.notif.new_message': 'Новое сообщение', 'admin.notif.offer_declined': 'Отклонение предложения', 'admin.notif.offer_other_accepted': 'Выбран другой исполнитель', 'admin.notif.task_updated': 'Изменение задания', 'admin.notif.deadline_reminder': 'Напоминание о дедлайне', 'admin.notif.task_archived': 'Автоснятие задания', 'admin.notif.referral_reward': 'Реферальная награда', // Шаблоны email для тарифов 'admin.email_template.plan_activated': 'Тарифы — активация тарифа', 'admin.email_template.plan_upgraded': 'Тарифы — повышение тарифа', 'admin.email_template.plan_downgrade_scheduled': 'Тарифы — запланированное понижение', 'admin.email_template.plan_downgrade_applied': 'Тарифы — применение понижения', 'admin.email_template.plan_renewal_reminder': 'Тарифы — напоминание о продлении', 'admin.email_template.plan_insufficient_funds': 'Тарифы — нехватка средств', // Модальное окно подтверждения тарифа 'pricing.confirm.title': 'Подтвердите выбор тарифа', 'pricing.confirm.plan': 'Тариф', 'pricing.confirm.prorated': 'Зачёт остатка', 'pricing.confirm.effective_price': 'К оплате', 'pricing.confirm.your_balance': 'Ваш баланс', 'pricing.confirm.downgrade_info': 'Переход на новый тариф произойдёт автоматически после окончания текущего периода.', 'pricing.confirm.insufficient': 'Недостаточно средств на балансе.', 'pricing.confirm.top_up': 'Пополнить', 'pricing.confirm.schedule_downgrade': 'Запланировать переход', 'pricing.confirm.pay': 'Оплатить', 'admin.user_edit.title': 'Редактирование пользователя', 'admin.user_edit.email': 'Email', 'admin.user_edit.email_verified': 'Email подтверждён', 'admin.user_edit.email_not_verified': 'Email не подтверждён', 'admin.user_edit.verify_email_btn': 'Подтвердить вручную', 'admin.user_edit.verify_email_done': 'Email подтверждён!', 'admin.user_edit.id': 'ID', 'admin.user_edit.registered': 'Регистрация', 'admin.user_edit.last_seen': 'Последний визит', 'admin.user_edit.lang': 'Язык', 'admin.user_edit.first_name': 'Имя', 'admin.user_edit.last_name': 'Фамилия', 'admin.user_edit.phone': 'Телефон', 'admin.user_edit.bio': 'О себе', 'admin.user_edit.role': 'Роль', 'admin.user_edit.plan': 'Тариф', 'admin.user_edit.no_plan': '— Без тарифа —', 'admin.user_edit.active': 'Активный аккаунт', 'admin.user_edit.published': 'Опубликована', 'admin.user_edit.balance': 'Баланс (EUR)', 'admin.user_edit.skills': 'Навыки', 'admin.user_edit.tab.profile': 'Профиль', 'admin.user_edit.tab.account': 'Аккаунт', 'admin.user_edit.tab.balance': 'Баланс', 'admin.user_edit.tab.settings': 'Настройки', 'admin.user_edit.tab.specialist': 'Предложения', 'admin.user_edit.tab.site': 'Сайт', 'admin.user_edit.plan_expires': 'Тариф истекает', 'admin.user_edit.interface_lang': 'Язык интерфейса', 'admin.user_edit.comm_languages': 'Языки общения', 'admin.user_edit.personal_site_slug': 'Персональная страница', 'admin.user_edit.show_contact_info': 'Показывать контакты', 'admin.user_edit.show_contact_info.hint': 'Видно заказчикам', 'admin.user_edit.notify_new_tasks': 'Уведомлять о новых задачах', 'admin.user_edit.notify_new_tasks.hint': 'Push и email уведомления', 'admin.user_edit.notif_messages': 'Уведомления о сообщениях', 'admin.user_edit.notif_messages.hint': 'Новые сообщения в чате', 'admin.user_edit.site_settings': 'Настройки персональной страницы', 'admin.user_edit.categories': 'Категории услуг', 'admin.user_edit.locations': 'Районы обслуживания', 'admin.user_edit.skill_placeholder': 'Новый навык...', 'admin.user_edit.add_category': '— Выберите категорию —', 'admin.user_edit.add_location': '— Выберите район —', 'admin.user_edit.specialist_cards': 'Предложения специалиста', 'admin.user_edit.no_cards': 'Предложения не найдены', 'admin.user_edit.card_title': 'Заголовок предложения', 'admin.user_edit.card_description': 'Описание', 'admin.balance.topup.btn': 'Пополнить', 'admin.balance.withdraw.btn': 'Списать', 'admin.balance.modal_hint': 'Изменения применяются сразу и фиксируются в истории', 'admin.balance.topup.title': 'Пополнение баланса', 'admin.balance.topup.amount': 'Сумма', 'admin.balance.topup.description': 'Комментарий', 'admin.balance.topup.description.placeholder': 'Например: бонус или ручное пополнение', 'admin.balance.topup.submit': 'Пополнить баланс', 'admin.balance.withdraw.title': 'Снятие баланса', 'admin.balance.withdraw.amount': 'Сумма', 'admin.balance.withdraw.description': 'Комментарий', 'admin.balance.withdraw.description.placeholder': 'Например: возврат или ручное списание', 'admin.balance.withdraw.submit': 'Списать баланс', 'admin.user_edit.role.customer': 'Заказчик', 'admin.user_edit.role.user': 'Пользователь', 'admin.user_edit.role.specialist': 'Помощник', 'admin.user_edit.role.admin': 'Администратор', 'common.refresh': 'Обновить', 'common.back_home': 'На главную', 'admin.loc.hint': 'Управление городами и районами', 'admin.loc.add_city': 'Новый город', 'admin.loc.add_district': 'Добавить район', 'admin.loc.new': 'Новая локация', 'admin.loc.edit': 'Редактировать локацию', 'admin.loc.district': 'район', 'admin.loc.empty': 'Нет локаций', 'admin.loc.delete.confirm': 'Удалить локацию? Все районы также будут удалены.', 'admin.cat.add_root': 'Новая категория', 'admin.cat.add_sub': 'Подкатегория', 'admin.cat.edit': 'Редактировать', 'admin.cat.delete': 'Удалить', 'admin.cat.delete.confirm': 'Удалить категорию? Все подкатегории также будут удалены.', 'admin.cat.slug': 'Slug', 'admin.cat.icon': 'Иконка', 'admin.cat.name_el': 'Греческий', 'admin.cat.name_en': 'Английский', 'admin.cat.name_ru': 'Русский', 'admin.cat.name_uk': 'Украинский', 'admin.cat.active': 'Активна', 'admin.cat.parent': 'Родительская категория', 'admin.cat.no_parent': 'Верхний уровень', 'admin.cat.save': 'Сохранить', 'admin.cat.cancel': 'Отмена', 'admin.cat.empty': 'Нет категорий', 'admin.cat.hint': 'Управление категориями с многоуровневой иерархией', 'admin.cat.new': 'Новая категория', 'admin.cat.subcategory': 'подкатегория', 'admin.cat.add_child': 'Добавить подкатегорию', 'admin.cat.inactive': 'Неактивна', 'admin.event.user_login': 'Вход', 'admin.event.user_register': 'Регистрация', 'admin.event.admin_user_deactivate': 'Блокировка юзера', 'admin.event.admin_user_activate': 'Разблокировка юзера', 'admin.event.admin_user_role_changed': 'Смена роли', 'admin.event.admin_task_cancelled': 'Отмена задачи', 'admin.event.admin_task_deleted': 'Удаление задачи', 'admin.event.admin_report_reviewed': 'Жалоба рассмотрена', 'admin.event.admin_report_dismissed': 'Жалоба отклонена', 'admin.event.task_created': 'Создана задача', // User status 'user.online': 'Онлайн', 'user.seen_minutes': 'был здесь {n} мин назад', 'user.seen_hours': 'был здесь {n} ч назад', 'user.seen_yesterday': 'был здесь вчера', 'user.seen_days': 'был здесь {n} дн назад', // Specialists 'specialists.title': 'Предложения', 'specialists.search': 'Поиск специалиста...', 'specialists.search.btn': 'Поиск', 'specialists.empty': 'Специалисты не найдены', 'specialists.no_bio': 'Без описания', 'specialists.view': 'Смотреть профиль', 'specialists.reviews': 'отзывов', 'specialist.favorite': 'Добавить в избранное', 'specialist.unfavorite': 'Убрать из избранного', 'specialist.site_link': 'Личный сайт', 'favorites.specialists.title': 'Избранные специалисты', 'favorites.specialists.empty': 'Вы ещё не добавили специалистов в избранное', 'nav.favorites': 'Избранное', 'nav.schedule': 'Расписание', 'nav.find_tasks': 'Поиск заказов', 'schedule.title': 'Моё расписание', 'schedule.subtitle': 'Отмечайте дни когда вы свободны или заняты — заказчики увидят вашу доступность', 'schedule.available': 'Свободен', 'schedule.busy': 'Занят', 'schedule.unset': 'Не указано', 'schedule.click_hint': '← клик меняет статус по кругу', 'schedule.range_mode': 'Выделить диапазон', 'schedule.range_from': 'С {date} — выберите конечную дату', 'schedule.click_to_set': 'Нажмите чтобы отметить', 'schedule.free': 'свободно', 'schedule.busy_count': 'занято', 'schedule.free_days': 'свободных дней', 'schedule.googleCalendar': 'Google Календарь', 'schedule.connectGoogle': 'Подключить Google Календарь', 'schedule.disconnectGoogle': 'Отключить', 'schedule.connectedAs': 'Подключено как', 'schedule.importFromGoogle': 'Синхр. из Google', 'schedule.gcalConnected': '\u2713 Google Календарь подключён', 'schedule.gcalError': 'Ошибка подключения Google Календарь', 'schedule.gcalImportDone': 'Импортировано {n} дней из Google Календарь', 'schedule.gcalAutoSyncNote': 'Изменения доступности автоматически отправляются в Google Календарь', 'schedule.gcalConnectDesc': 'Подключите Google Календарь для автоматической синхронизации расписания', 'schedule.gcalDisconnectConfirm': 'Отключить Google Календарь?', 'find_tasks.title': 'Поиск заказов', 'find_tasks.for_me': 'Для меня', 'find_tasks.all': 'Все заказы', 'find_tasks.by_category': 'По категориям', 'find_tasks.list': 'Списком', 'find_tasks.already_offered': 'Предложение отправлено', 'find_tasks.offer_now': 'Откликнуться', 'find_tasks.empty_for_me': 'Нет заказов в ваших категориях', 'find_tasks.banner_hint': 'Найдите заказы по категориям вашего портфолио', 'find_tasks.no_cards': 'Создайте портфолио специалиста, чтобы видеть подходящие заказы', 'find_tasks.add_card': 'Создать портфолио', 'find_tasks.search': 'Поиск заказов...', 'find_tasks.tasks_count': 'заданий', 'footer.tagline': 'Платформа задач для Греции', 'footer.rights': 'Все права защищены.', 'nav.privacy': 'Политика конфиденциальности', 'nav.delete_account': 'Удаление аккаунта', 'delete_account.title': 'Запрос на удаление аккаунта', 'delete_account.subtitle': 'После проверки вашего запроса мы навсегда удалим ваш аккаунт и данные в течение 30 дней.', 'delete_account.warning': 'Это действие нельзя отменить. Все ваши данные будут удалены безвозвратно.', 'delete_account.reason_label': 'Причина (необязательно)', 'delete_account.reason_placeholder': 'Расскажите, почему вы хотите удалить аккаунт...', 'delete_account.confirm_label': 'Подтверждаю, что хочу навсегда удалить свой аккаунт', 'delete_account.submit': 'Отправить запрос', 'delete_account.submitting': 'Отправка...', 'delete_account.success_title': 'Ваш запрос получен', 'delete_account.success_body': 'Мы обработаем ваш запрос в течение 30 дней и уведомим вас по email.', 'delete_account.login_required': 'Для отправки запроса на удаление необходимо войти в аккаунт.', 'delete_account.login_btn': 'Войти', // App download section 'app.download_title': 'Скачайте мобильное приложение CanHelp', 'app.download_desc': 'Всё CanHelp — всегда под рукой. Доступно для Android и iOS.', // Nav 'nav.pricing': 'Тарифы', // Pricing page 'pricing.title': 'Тарифы', 'pricing.subtitle': 'Выберите подходящий план', 'pricing.role.customer': 'Заказчик', 'pricing.role.specialist': 'Специалист', 'pricing.free': 'Бесплатно', 'pricing.per_month': 'мес', 'pricing.duration': 'Срок', 'pricing.days': 'дн.', 'pricing.current_plan': 'Ваш план', 'pricing.popular': 'Популярный', 'pricing.choose': 'Выбрать', 'pricing.your_plan': 'Активный план', 'pricing.free_default': 'По умолчанию', 'pricing.compare': 'Сравнение функций', 'pricing.feature': 'Функция', 'pricing.faq_note': 'Оплата списывается с баланса CanHelp. Пополнение доступно в разделе Оплата.', 'pricing.feat.messages': 'Сообщений / день', 'pricing.feat.orders': 'Заказов / день', 'pricing.feat.contact_all': 'Связь со всеми', 'pricing.feat.view_phone': 'Просмотр телефона', 'pricing.feat.show_contact': 'Показывать контакты', 'pricing.feat.favorites': 'Избранное', 'pricing.feat.verified_badge': 'Верифицированный бейдж', 'pricing.feat.google_calendar': 'Google Календарь', 'pricing.feat.personal_site': 'Персональный сайт', 'pricing.feat.auto_response': 'Авто-ответ', 'pricing.feat.auto_match': 'Авто-подбор', 'pricing.feat.highlighted_reviews': 'Выделенные отзывы', 'pricing.feat.portfolio': 'Элементов предложения', 'pricing.feat.cards': 'Количество предложений', 'pricing.feat.notify_tasks': 'Уведомления о новых задачах', 'pricing.feat.video': 'Видео в предложении', // Upgrade prompt 'upgrade.available_in': 'Доступно в', 'upgrade.cta': 'Улучшить', // Dashboard plan block 'dashboard.plan.title': 'Мой план', 'dashboard.plan.expires': 'Истекает через {n} дней', 'dashboard.plan.upgrade': 'Улучшить план', 'dashboard.plan.no_plan': 'Бесплатный план', 'dashboard.plan.messages': 'Сообщений сегодня', 'dashboard.plan.orders': 'Заказов сегодня', 'dashboard.plan.limits': 'Дневные лимиты', 'dashboard.plan.features': 'Функции', 'dashboard.plan.stats': 'Статистика', 'dashboard.stats.cards': 'Портфолио', 'dashboard.stats.maxCards': 'Макс. портфолио', 'dashboard.stats.portfolioItems': 'Элементы портфолио', 'dashboard.stats.maxPortfolioItems': 'Макс. элементы', 'dashboard.stats.activeOffers': 'Активные отклики', 'dashboard.stats.reviewsReceived': 'Отзывы', 'dashboard.stats.activeTasks': 'Активные задачи', 'dashboard.stats.completedTasks': 'Завершённые', 'status.need_help': 'Нужна помощь', 'status.active': 'Активен', 'status.toggle_on': 'Включить', 'status.toggle_off': 'Выключить', // FOMO 'fomo.missed_orders': 'Пропущено {n} заказов', 'fomo.missed_value': 'На сумму €{v}', 'fomo.upgrade_hint': 'Улучшите план — получайте больше заказов', 'fomo.conversion': 'Конверсия задач', 'fomo.active': 'Активные', 'fomo.with_offers': 'С офертами', 'fomo.completed': 'Завершённые', 'fomo.already_offered': '{n} специалистов уже откликнулись', 'fomo.specialist_missed': 'Вы пропустили {n} заказов', 'fomo.top_categories': 'Категории', 'fomo.offers_received': 'предложений получено', 'fomo.avg_offers': 'В среднем {n}/задача', 'fomo.completion_rate': 'завершено', // Task auto-match 'task.auto_match': 'Авто-матч', 'task.auto_match_results': 'Топ специалисты', 'task.no_offer_yet': 'Вы ещё не отправили предложение', 'task.make_offer': 'Отправить предложение', 'auto_response.title': 'Авто-ответ', 'auto_response.enabled': 'Включить авто-ответ', 'auto_response.min_budget': 'Мин. бюджет', 'auto_response.max_budget': 'Макс. бюджет', 'auto_response.default_price': 'Цена по умолчанию', 'auto_response.default_message': 'Сообщение по умолчанию', 'auto_response.max_per_day': 'Макс. авто-офертов в день', 'auto_response.save': 'Сохранить', 'auto_response.saved': 'Сохранено', 'auto_response.categories': 'Категории', 'auto_response.locations': 'Локации', // Personal site 'profile.personal_site': 'Персональный сайт', 'profile.site_slug': 'URL slug', 'profile.site_slug_hint': 'Только латинские буквы, цифры, - и _', 'profile.site_open': 'Открыть сайт', 'profile.site_preview': 'Ваш сайт', 'profile.show_contact': 'Показывать контакты', 'profile.show_contact_hint': 'Заказчики с Pro/Ultimate-планом увидят ваш телефон', // Google Calendar plan gate 'gcal.upgrade_required': 'Google Календарь требует план Pro или Ultimate', // Chat limits 'chat.limit_warning': 'Осталось {n} сообщений сегодня', 'chat.limit_reached': 'Лимит сообщений исчерпан. Улучшите план', 'chat.upgrade': 'Улучшить', // Site page 'site.member_since': 'С нами с', 'site.rating': 'Рейтинг', 'site.completed_tasks': 'Выполнено', 'site.languages': 'Языков', 'site.photos': 'фото', 'site.contact_form': 'Связаться', 'site.contact_sent': 'Сообщение отправлено!', 'site.contact_sent_desc': 'Специалист свяжется с вами в ближайшее время', 'site.contact_name': 'Имя', 'site.contact_name_ph': 'Ваше имя', 'site.contact_email_ph': 'your@email.com', 'site.contact_message': 'Сообщение', 'site.contact_message_ph': 'Опишите вашу задачу...', 'site.contact_send': 'Отправить', 'site.share': 'Поделиться', 'site.speaks_languages': 'Говорит на языках', 'site.message_sent': 'Сообщение отправлено!', 'site.message_sent_desc': 'Специалист получит его в чате', 'site.message_placeholder': 'Напишите сообщение...', 'site.write_to_chat': 'Написать в чат', 'site.auth_required_title': 'Нужна авторизация', 'site.auth_required_desc': 'Чтобы написать в чат, необходимо войти в аккаунт CanHelp.', 'site.auth_login_btn': 'Войти в аккаунт', 'site.auth_contact_form_btn': 'Написать через форму обратной связи', 'specialist.services': 'Услуги', 'portfolio.title': 'Портфолио', 'status.can_help_now': 'Готов помочь', 'common.not_found': 'Страница не найдена', 'common.anonymous': 'Анонимно', 'specialist_setup.page_title': 'Настройка профиля специалиста', 'specialist_setup.step_of': 'Шаг {current} из {total}', 'specialist_setup.next': 'Далее', 'specialist_setup.back': 'Назад', 'specialist_setup.skip': 'Пропустить', 'specialist_setup.finish': 'Завершить', 'specialist_setup.go_to_profile': 'Перейти в профиль', 'specialist_setup.browse_tasks': 'Найти задачи', 'specialist_setup.step1.title': 'Добро пожаловать!', 'specialist_setup.step1.subtitle': 'Давайте настроим ваш профиль', 'specialist_setup.step1.desc': 'Полный профиль помогает находить больше клиентов. Следуйте шагам, чтобы создать идеальный профиль специалиста.', 'specialist_setup.step1.what_next': 'Что мы сделаем:', 'specialist_setup.step1.item1': 'Заполним основную информацию', 'specialist_setup.step1.item2': 'Создадим карточку услуги', 'specialist_setup.step1.item3': 'Добавим навыки и категории', 'specialist_setup.step1.item4': 'Выберем географию обслуживания', 'specialist_setup.step1.item5': 'Загрузим фото портфолио', 'specialist_setup.step2.title': 'Базовый профиль', 'specialist_setup.step2.subtitle': 'Расскажите о себе', 'specialist_setup.step2.bio_label': 'О себе', 'specialist_setup.step2.bio_placeholder': 'Опишите ваш опыт, услуги которые вы предлагаете...', 'specialist_setup.step2.phone_label': 'Телефон', 'specialist_setup.step2.phone_placeholder': '+30 6900000000', 'specialist_setup.step2.photo_label': 'Фото профиля', 'specialist_setup.step2.photo_btn': 'Загрузить фото', 'specialist_setup.step2.photo_uploading': 'Загрузка...', 'specialist_setup.step2.photo_hint': 'Отображается в вашем профиле', 'specialist_setup.step3.title': 'Карточка услуги', 'specialist_setup.step3.subtitle': 'Создайте вашу первую карточку услуги', 'specialist_setup.step3.title_label': 'Название карточки', 'specialist_setup.step3.title_placeholder': 'Напр. Сантехник, Электрик, Уборка...', 'specialist_setup.step3.desc_label': 'Описание', 'specialist_setup.step3.desc_placeholder': 'Подробно опишите что вы предлагаете, опыт, преимущества...', 'specialist_setup.step3.title_required': 'Название обязательно', 'specialist_setup.step4.title': 'Навыки и категории', 'specialist_setup.step4.subtitle': 'Добавьте навыки и выберите категории', 'specialist_setup.step4.skills_label': 'Навыки', 'specialist_setup.step4.skills_placeholder': 'Напр. Монтаж труб...', 'specialist_setup.step4.skills_add': 'Добавить', 'specialist_setup.step4.categories_label': 'Категории', 'specialist_setup.step5.title': 'География обслуживания', 'specialist_setup.step5.subtitle': 'Где вы оказываете услуги?', 'specialist_setup.step5.hint': 'Выберите города или конкретные районы', 'specialist_setup.done.title': 'Ваш профиль готов!', 'specialist_setup.done.subtitle': 'Поздравляем! Профиль настроен', 'specialist_setup.done.desc': 'Теперь вы можете получать заказы от клиентов. Найдите задачи, которые соответствуют вашим навыкам.', // Support 'support.title': 'Поддержка', 'support.type.label': 'Тип обращения', 'support.type.bug': 'Ошибка', 'support.type.suggestion': 'Предложение', 'support.type.other': 'Другое', 'support.subject': 'Тема', 'support.subject.placeholder': 'Кратко опишите проблему...', 'support.body': 'Сообщение', 'support.body.placeholder': 'Подробно опишите проблему или предложение...', 'support.submit': 'Отправить', 'support.cancel': 'Отмена', 'support.error': 'Ошибка отправки. Попробуйте ещё раз.', 'support.sent.title': 'Запрос получен!', 'support.sent.body': 'Мы ответим на ваш email в ближайшее время.', 'support.sent.close': 'Закрыть', 'admin.tab.support': 'Поддержка', 'admin.tab.backup': 'Бэкап', 'admin.tab.translations': 'Переводы', 'admin.tab.dbcheck': 'Проверка БД', 'admin.tab.balances': 'Баланс', 'admin.tab.push': 'Push', 'admin.tab.referrals': 'Рефералы', 'admin.search': 'Поиск', 'admin.noData': 'Нет данных', 'admin.cat.order': 'Порядок', 'admin.cat.skills': 'Навыки', 'admin.plans.form.max_tasks': 'Макс. задач', 'admin.settings.referral.shared_section': 'Общие настройки рефералов', 'admin.settings.seo.title': 'SEO настройки', 'admin.backup.title': 'Бэкап', 'admin.backup.tables': 'Таблицы', 'admin.backup.exportAll': 'Экспорт всего', 'admin.backup.importAll': 'Импорт всего', 'admin.backup.exportTable': 'Экспорт таблицы', 'admin.backup.importTable': 'Импорт таблицы', 'admin.backup.exporting': 'Экспорт...', 'admin.backup.importing': 'Импорт...', 'admin.backup.exportSuccess': 'Экспорт завершён', 'admin.backup.importSuccess': 'Импорт завершён', 'admin.backup.autoBackup': 'Автобэкап', 'admin.backup.autoBackupDesc': 'Автоматический ежедневный бэкап', 'admin.backup.storedBackups': 'Сохранённые бэкапы', 'admin.backup.noStoredBackups': 'Сохранённых бэкапов нет', 'admin.backup.restore': 'Восстановить', 'admin.backup.restoreConfirm': 'Восстановить из бэкапа?', 'admin.backup.restoreSuccess': 'Восстановление завершено', 'admin.backup.restoring': 'Восстановление...', 'admin.backup.date': 'Дата', 'admin.backup.size': 'Размер', 'admin.backup.today': 'Сегодня', 'admin.backup.yesterday': 'Вчера', 'admin.balance.col.operation': 'Операция', 'admin.balance.col.amount': 'Сумма', 'admin.balance.col.result': 'Баланс', 'admin.balance.col.description': 'Описание', 'admin.balance.col.date': 'Дата', 'admin.balance.empty': 'Записей пока нет', 'admin.balance.filter.all': 'Все операции', 'admin.balance.filter.user_id': 'Фильтр по userId', 'admin.balance.kind.topup': 'Пополнение', 'admin.balance.kind.plan_purchase': 'Списание за тариф', 'admin.balance.kind.admin_topup': 'Пополнение админом', 'admin.balance.kind.admin_adjustment': 'Корректировка', 'admin.support.search': 'Поиск', 'admin.support.all_statuses': 'Все статусы', 'admin.support.all_types': 'Все типы', 'admin.support.none': 'Обращений нет', 'admin.support.reply': 'Ответить', 'admin.support.reply_placeholder': 'Введите ответ...', 'admin.support.send_reply': 'Отправить ответ', 'admin.support.cancel': 'Отмена', 'admin.support.close': 'Закрыть', 'admin.support.status.open': 'Открыто', 'admin.support.status.in_progress': 'В работе', 'admin.support.status.resolved': 'Решено', 'admin.support.status.closed': 'Закрыто', 'admin.support.your_reply': 'Ваш ответ', 'admin.user_edit.visibility_requirements.title': 'Профиль пока не попадает в «Предложения»', 'admin.user_edit.visibility_requirements.hint': 'Нужно выполнить условия видимости:', 'admin.user_edit.visibility_requirements.bio': 'Заполнить описание (bio)', 'admin.user_edit.visibility_requirements.published_card': 'Опубликовать хотя бы одну карточку', 'admin.user_edit.visibility_requirements.categories': 'Указать категорию в опубликованной карточке', 'admin.user_edit.visibility_requirements.locations': 'Указать локацию в опубликованной карточке', 'auto_response.desc': 'Автоматически отвечать на подходящие задачи', 'auto_response.budget_range': 'Бюджет задачи', 'auto_response.message_placeholder': 'Здравствуйте! Я могу помочь с этой задачей...', 'profile.background.title': 'Фон шапки профиля', 'profile.background.hint': 'Показывается в шапке публичного профиля на web и в мобильном приложении.', 'profile.photo.uploading': 'Загрузка...', 'profile.balance.history': 'Архив операций', 'profile.balance.history.last': 'Последние операции', 'profile.balance.history.empty': 'Операций пока нет', 'profile.balance.history.balance_after': 'Баланс после', 'profile.balance.history.kind.topup': 'Пополнение баланса', 'profile.balance.history.kind.plan_purchase': 'Списание за тариф', 'profile.balance.history.kind.admin_topup': 'Пополнение администратором', 'profile.balance.history.kind.admin_adjustment': 'Корректировка администратором', 'profile.plan_history.title': 'История тарифного плана', 'profile.plan_history.empty': 'История изменений тарифа пока пуста', 'profile.plan_history.expires': 'До', 'profile.plan_history.days': 'дней', 'profile.plan_history.event.activated': 'Активирован', 'profile.plan_history.event.renewed': 'Продлён', 'profile.plan_history.event.downgraded': 'Понижен', 'profile.plan_history.event.referral_reward': 'Реферальная награда', 'profile.plan_history.event.admin_change': 'Изменён администратором', 'profile.plan_history.event.expired': 'Истёк', 'profile.show_contact_desc': 'Позволяет клиентам связаться напрямую', 'profile.site.visible.price_list': 'Прайслист', 'site.pricelist': 'Прайслист', 'status.plan_required': 'Статус недоступен на текущем тарифе', 'status.admin_not_applicable': 'Для аккаунта администратора пользовательский статус не применяется' }, uk: { 'footer.slogan': 'Ваше завдання — наша турбота! Вирішуємо будь-які питання швидко і зручно.', 'footer.links': 'Посилання', 'footer.socials': 'Ми в соцмережах', 'nav.home': 'Головна', 'nav.tasks': 'Завдання', 'nav.post': '+ Опублікувати', 'nav.dashboard': 'Мої завдання', 'nav.chat': 'Повідомлення', 'nav.notifications': 'Сповіщення', 'nav.profile': 'Профіль', 'nav.admin': 'Адмінка', 'nav.specialists': 'Пропозиції', 'nav.new_task': 'Нове завдання', 'nav.login': 'Увійти', 'nav.register': 'Реєстрація', 'nav.logout': 'Вийти', 'hero.title': 'Кожен має навичку, яка може допомогти іншому', 'hero.subtitle': 'Знайди допомогу, запропонуй свої навички або заробляй, допомагаючи іншим', 'hero.cta.post': 'Знайти допомогу', 'hero.cta.browse': 'Запропонувати допомогу', 'hero.cta.specialists': 'Знайти роботу', 'hero.search.placeholder': 'Що потрібно? напр. електрик, прибирання...', 'hero.specialist.title': 'Знайдіть замовлення поруч з вами', 'hero.specialist.subtitle': 'Відкрийте замовлення у своїх категоріях і надішліть пропозицію', 'hero.specialist.cta': 'Знайти замовлення', 'hero.specialist.search.placeholder': 'Пошук замовлень... напр. електрика, прибирання', 'section.categories.specialist': 'Знайдіть замовлення за категорією', 'section.cities.specialist': 'Замовлення за містом', 'how.specialist.step1.title': 'Створіть картку спеціаліста', 'how.specialist.step1.desc': 'Вкажіть категорії, навички і райони — система знайде підходящі замовлення автоматично', 'how.specialist.step2.title': 'Знайдіть підходящі замовлення', 'how.specialist.step2.desc': 'Переглядайте замовлення у своїх категоріях і починайте роботу одразу', 'how.specialist.step3.title': 'Надішліть пропозицію і заробляйте', 'how.specialist.step3.desc': 'Подайте пропозицію з ціною і термінами, спілкуйтеся з клієнтами і виконуйте замовлення', 'stats.specialists': 'пропозиції', 'stats.tasks': 'завдань', 'stats.categories': 'категорій', 'stats.free': 'безкоштовна реєстрація', 'promo.title': 'Отримай Pro безкоштовно — тільки до кінця року', 'promo.subtitle': 'Зареєструйся зараз і користуйся тарифом Pro без оплати. Акція закінчується 31 грудня.', 'promo.cta': 'Зареєструватися', 'promo.days': 'днів', 'promo.hours': 'годин', 'promo.minutes': 'хвилин', 'promo.seconds': 'сек.', 'section.categories': 'Створи завдання у будь-якій категорії', 'section.how': 'Як це працює', 'section.recent': 'Останні завдання', 'section.all': 'Дивитись всі →', 'section.more': 'ще', 'section.cities': 'Міста і райони', 'section.community': 'Суспільний проект для всіх', 'community.subtitle': 'CanHelp — не просто маркетплейс, це спільнота взаємодопомоги. Будь-хто, хто має знання або навичку, може знайти клієнта. Будь-хто, у кого є завдання, може знайти спеціаліста.', 'community.point1.title': 'Вмієте щось робити?', 'community.point1.desc': 'Ремонт, репетиторство, дизайн, переклади, догляд — кожна навичка має цінність. Створіть профіль і знаходьте клієнтів поруч.', 'community.point2.title': 'Потрібна допомога?', 'community.point2.desc': 'Опублікуйте завдання за хвилину і отримуйте пропозиції від перевірених спеціалістів у вашому місті.', 'community.point3.title': 'Допоможіть проекту рости', 'community.point3.desc': 'CanHelp розвивається завдяки спільнотам. Поділіться посиланням з друзями і знайомими — разом ми будуємо щось корисне для всіх.', 'community.share': 'Поділитися з друзями', 'community.share.copied': 'Посилання скопійовано!', 'section.referral': 'Реферальна програма', 'referral.home.subtitle': 'Поділіться посиланням — кожен новий користувач, зареєстрований через нього, принесе вам нагороду.', 'referral.home.step1.title': 'Зареєструйтесь і отримайте посилання', 'referral.home.step1.desc': 'Створіть акаунт і знайдіть своє унікальне реферальне посилання в профілі.', 'referral.home.step2.title': 'Поділіться з друзями', 'referral.home.step2.desc': 'Надішліть посилання друзям, знайомим або опублікуйте в соціальних мережах.', 'referral.home.step3.title': 'Отримуйте нагороди', 'referral.home.step3.desc': 'Як тільки друг підтвердить email, ви автоматично отримаєте свою нагороду.', 'referral.home.cta': 'Отримати посилання', 'referral.home.badge': 'Реферальна програма', 'section.faq': 'Часті запитання', 'faq.q1': 'Як працює CanHelp?', 'faq.a1': 'Опублікуйте завдання, отримайте пропозиції від спеціалістів, виберіть найкращого і почніть співпрацю. Це швидко, просто і безкоштовно для клієнтів.', 'faq.q2': 'Скільки коштує використання платформи?', 'faq.a2': 'Реєстрація і публікація завдань повністю безкоштовні для клієнтів. Спеціалісти мають доступ до безкоштовного плану, а також до преміум-опцій.', 'faq.q3': 'Як стати спеціалістом?', 'faq.a3': 'Зареєструйтесь, перейдіть у «Стати спеціалістом», заповніть профіль навичками і категоріями і починайте отримувати завдання.', 'faq.q4': 'Як вибрати підходящого спеціаліста?', 'faq.a4': 'Оцініть відгуки, досвід, навички і портфоліо кожного спеціаліста. Спілкуйтеся через чат платформи і уточнюйте деталі до прийняття рішення.', 'faq.q5': 'Що якщо я не задоволений результатом?', 'faq.a5': 'Ви можете залишити відгук про спеціаліста і поставити оцінку від 1 до 5 зірок. Відгуки допомагають іншим користувачам вибирати перевірених професіоналів.', 'faq.q6': 'Чи можна зв\'язатись зі спеціалістом до прийняття пропозиції?', 'faq.a6': 'Так. Як тільки ви отримали пропозицію, можна відкрити чат зі спеціалістом, задати питання і уточнити всі деталі до прийняття рішення.', 'faq.q7': 'Скільки часу чекати пропозицій?', 'faq.a7': 'Як правило, протягом кількох годин. Спеціалісти отримують сповіщення про нові завдання і можуть швидко відповісти.', 'faq.q8': 'Чи можна розмістити завдання у будь-якому місті Греції?', 'faq.a8': 'Так! CanHelp охоплює всю Грецію — Афіни, Салоніки, Патри та інші міста.', 'faq.q9': 'Які види завдань є на CanHelp?', 'faq.a9': 'Ремонт, прибирання, електрика, репетиторство, дизайн, IT, переїзди, краса та багато іншого. Категорії постійно розширюються.', 'faq.q10': 'Чи є мобільний додаток?', 'faq.a10': 'Так! CanHelp доступний для Android та iOS. Завантажте додаток і керуйте всім зі свого телефону.', 'how.step1.title': 'Опублікуй завдання', 'how.step1.desc': 'Опиши що потрібно і встанови бюджет', 'how.step2.title': 'Отримай пропозиції', 'how.step2.desc': 'Спеціалісти надішлють пропозиції з ціною і термінами', 'how.step3.title': 'Обери і почни', 'how.step3.desc': 'Обери найкращого професіонала і почни співпрацю', 'tasks.title': 'завдань', 'tasks.filters': 'Фільтри', 'tasks.search': 'Пошук', 'tasks.search.placeholder': 'Назва або ключове слово...', 'tasks.search.btn': 'Пошук', 'tasks.publish': 'Опублікувати', 'tasks.category.all': 'Всі', 'tasks.category.all_in': 'Всі в', 'tasks.category.label': 'Категорія', 'tasks.location.label': 'Місто', 'tasks.location.placeholder': 'напр. Афіни', 'tasks.empty': 'Завдань не знайдено', 'tasks.empty.cta': 'Опублікуй перше', 'task.status.open': 'Відкрито', 'task.status.in_progress': 'В роботі', 'task.status.completed': 'Завершено', 'task.status.cancelled': 'Скасовано', 'task.status.draft': 'Чернетка', 'task.budget': 'Бюджет', 'task.location': 'Місцезнаходження', 'task.deadline': 'Дата початку', 'task.expires_at': 'Активно до', 'task.created_at': 'Створено', 'task.customer': 'Замовник', 'task.offer.btn': 'Надіслати пропозицію', 'task.invite.banner_title': 'Вас запросили на це завдання', 'task.invite.banner_hint': 'Замовник особисто запросив вас', 'task.invite.accept': 'Надіслати пропозицію', 'task.invite.decline': 'Відмовитися', 'offer.accept': 'Прийняти', 'offer.decline': 'Відхилити', 'task.complete': 'Завершити завдання', 'task.complete.confirm': 'Позначити завдання як виконане?', 'task.edit': 'Редагувати', 'task.status_label': 'Статус', 'task.yours': 'Ваше завдання', 'task.offer.yours': 'Ваша пропозиція', 'review.leave': 'Залишити відгук', 'review.rating': 'Оцінка', 'review.comment': 'Коментар', 'review.comment.placeholder': 'Розкажіть про свій досвід...', 'review.submit': 'Надіслати відгук', 'review.submitting': 'Надсилання...', 'review.done': 'Відгук надіслано!', 'profile.reviews': 'Відгуки', 'profile.no_reviews': 'Відгуків поки немає', 'profile.rating': 'Рейтинг', 'profile.skills.label': 'Навички', 'profile.member_since': 'Учасник з', 'task.offers': 'Пропозиції', 'task.offers.none': 'Пропозицій поки немає', 'create.title': 'Опублікувати завдання', 'create.field.title': 'Назва', 'create.field.description': 'Опис', 'create.field.category': 'Категорія', 'create.field.category.select': 'Оберіть...', 'create.field.location': 'Місцезнаходження', 'create.field.location.any': 'Де завгодно', 'create.field.location.all': 'Все місто', 'create.field.budget': 'Бюджет (€)', 'create.field.deadline': 'Дата початку', 'create.field.expires_at': 'Оголошення активне', 'create.field.expires_at.days': '{n} днів', 'create.field.budget_negotiable': 'Ціна обговорюється', 'create.field.time_slot': 'Час виконання', 'create.field.time_slot.any': 'У будь-який час', 'create.field.time_slot.morning': 'Вранці (08:00–13:00)', 'create.field.time_slot.afternoon': 'Вдень (13:00–18:00)', 'create.field.time_slot.evening': 'Ввечері (18:00–22:00)', 'create.field.time_slot.weekend': 'Вихідний', 'create.field.address': 'Адреса (необов\'язково)', 'create.field.address.district': 'Квартал', 'create.field.address.street': 'Вулиця', 'create.field.address.house': 'Будинок', 'create.field.confidential': 'Конфіденційна нотатка', 'create.field.confidential.placeholder': 'Деталі, видні тільки призначеному спеціалісту...', 'create.field.confidential.hint': 'Не відображається публічно', 'create.field.photos': 'Фотографії', 'create.field.photos.add': 'Додати фото', 'create.field.photos.uploading': 'Завантаження...', 'task.budget_negotiable': 'Ціна обговорюється', 'task.time_slot': 'Час', 'task.confidential': 'Конфід. нотатка', 'create.field.title.placeholder': 'напр. Прибирання квартири 80кв', 'create.field.description.placeholder': 'Детально опишіть що потрібно...', 'create.field.location.placeholder': 'напр. Афіни, Колонаки', 'create.field.budget.placeholder': 'напр. 100', 'create.submit': 'Опублікувати завдання', 'create.submitting': 'Публікація...', 'login.title': 'Ласкаво просимо', 'login.subtitle': 'Вхід до CanHelp', 'login.email': 'Email', 'login.password': 'Пароль', 'login.submit': 'Увійти', 'login.submitting': 'Вхід...', 'login.error': 'Невірний email або пароль', 'login.unverified.title': 'Підтвердіть ваш email', 'login.unverified.desc': 'Ми надіслали посилання для підтвердження на ваш email. Перевірте вхідні (або спам) і перейдіть за посиланням.', 'login.unverified.resend': 'Надіслати лист повторно', 'login.unverified.sending': 'Надсилання...', 'login.unverified.sent': '✓ Надіслано — перевірте вхідні', 'profile.email.verified': 'Email підтверджено', 'profile.email.not_verified': 'Email не підтверджено', 'login.no_account': 'Немає акаунту?', 'login.register_link': 'Зареєструватися', 'login.forgot_password': 'Забув пароль?', 'login.or_continue_with': 'або продовжте через', 'login.continue_google': 'Увійти через Google', 'forgot.title': 'Забув пароль', 'forgot.subtitle': 'Введіть email для отримання посилання відновлення', 'forgot.email': 'Email', 'forgot.submit': 'Надіслати посилання', 'forgot.submitting': 'Надсилання...', 'forgot.sent.title': 'Перевірте вхідні', 'forgot.sent.desc': 'Якщо акаунт з таким email існує, ми надішлемо посилання для скидання пароля.', 'forgot.back_to_login': 'Повернутися до входу', 'forgot.error': 'Не вдалося надіслати посилання. Перевірте адресу і спробуйте знову.', 'forgot.error.not_found': 'Акаунт з таким email не знайдено.', 'forgot.error.send_failed': 'Помилка надсилання листа. Спробуйте пізніше.', 'reset.title': 'Новий пароль', 'reset.subtitle': 'Введіть новий пароль', 'reset.password': 'Новий пароль', 'reset.confirm': 'Підтвердіть пароль', 'reset.submit': 'Змінити пароль', 'reset.submitting': 'Збереження...', 'reset.success': 'Пароль успішно змінено. Перенаправлення до входу...', 'reset.back_to_login': 'Повернутися до входу', 'reset.error.mismatch': 'Паролі не збігаються', 'reset.error.invalid': 'Недійсне або застаріле посилання. Запросіть нове.', 'register.title': 'Реєстрація', 'register.subtitle': 'Створити акаунт в CanHelp', 'register.first_name': 'Ім\'я', 'register.last_name': 'Прізвище', 'register.email': 'Email', 'register.password': 'Пароль (мін. 8 символів)', 'register.role': 'Роль', 'register.role.customer': 'Користувач', 'register.role.customer.desc': 'Публікую завдання', 'register.role.specialist': 'Спеціаліст', 'register.role.specialist.desc': 'Беру завдання', 'register.submit': 'Створити акаунт', 'register.submitting': 'Реєстрація...', 'register.has_account': 'Вже є акаунт?', 'register.login_link': 'Увійти', 'register.continue_google': 'Зареєструватися через Google', 'register.check_email.title': 'Перевірте пошту', 'register.check_email.desc': 'Ми надіслали посилання для підтвердження на ваш email. Перевірте вхідні (або спам) і перейдіть за посиланням.', 'register.check_email.login': 'Повернутися до входу', 'register.captcha_failed': 'Перевірка CAPTCHA не пройдена. Пройдіть перевірку безпеки та спробуйте знову.', 'dashboard.title': 'Панель управління', 'dashboard.new_task': '+ Нове завдання', 'dashboard.onboarding.title': 'Ласкаво просимо до CanHelp 👋', 'dashboard.onboarding.subtitle': 'Оберіть, з чого хочете почати.', 'dashboard.onboarding.helper.title': 'Запропонуйте свою допомогу', 'dashboard.onboarding.helper.desc': 'Заповніть анкету — навички, категорії та міста. Це займе кілька хвилин, і ви почнете отримувати замовлення.', 'dashboard.onboarding.helper.cta': 'Заповнити анкету', 'dashboard.onboarding.requester.title': 'Потрібна допомога?', 'dashboard.onboarding.requester.desc': 'Опублікуйте завдання — помічники надішлють вам свої пропозиції.', 'dashboard.onboarding.requester.cta': 'Опублікувати завдання', 'dashboard.my_tasks': 'Мої завдання', 'dashboard.my_offers': 'Мої пропозиції', 'dashboard.invitations': 'Запрошення на завдання', 'dashboard.offers_count': 'проп.', 'dashboard.declined_count': 'відх.', 'dashboard.completed_tasks': 'Завершені завдання', 'dashboard.completed_offers': 'Завершені пропозиції', 'dashboard.review_pending': 'Оцінка ще не залишена', 'tasks.new.top_specialists': 'Топ спеціалісти', 'tasks.new.select_category': 'Виберіть категорію, щоб побачити спеціалістів', 'tasks.new.invite': 'Запропонувати роботу', 'tasks.new.invited': 'Вибрано ✓', 'reviews.count': 'відгуків', 'filter.location': 'Локація', 'filter.language': 'Мови', 'filter.language.any': 'Будь-яка мова', 'filter.category.all': 'Всі категорії', 'user.categories': 'Категорії', 'user.work_area': 'Район роботи', 'user.specialist_cards': 'Картки послуг', 'card.skills': 'Навички', 'card.categories': 'Категорії', 'card.geography': 'Район роботи', 'card.portfolio': 'Портфоліо', 'card.close': 'Закрити', 'dashboard.tasks.empty': 'Ви не публікували завдання', 'dashboard.tasks.empty.cta': 'Опублікуйте перше', 'dashboard.tasks.add_new': 'Додати нове завдання', 'dashboard.offers.empty': 'Ви не надсилали пропозицій', 'dashboard.offers.empty.cta': 'Знайти завдання', 'dashboard.customer.specialists_title': 'Шукаєте виконавця?', 'dashboard.customer.specialists_hint': 'Переглядайте профілі спеціалістів, читайте відгуки і запрошуйте їх на свої завдання', 'dashboard.customer.specialists_cta': 'Знайти виконавця', 'dashboard.customer.how_title': 'Як це працює', 'dashboard.customer.step1': 'Створіть завдання з описом і бюджетом', 'dashboard.customer.step2': 'Спеціалісти надішлють пропозиції з ціною і термінами', 'dashboard.customer.step3': 'Оберіть підходящого і почніть роботу', 'notif.title': 'Сповіщення', 'notif.mark_all': 'Позначити всі як прочитані', 'notif.empty': 'Немає сповіщень', 'notif.type.generic': 'Сповіщення', 'notif.type.new_offer': 'Нова пропозиція', 'notif.type.offer_accepted': 'Вашу пропозицію прийнято', 'notif.type.offer_declined': 'Вашу пропозицію відхилено', 'notif.type.task_completed': 'Завдання виконано', 'notif.type.task_cancelled': 'Завдання скасовано', 'notif.type.new_message': 'Нове повідомлення', 'notif.type.new_review': 'Новий відгук', 'notif.type.task_invite': 'Запрошення на завдання', 'notif.type.referral_reward': 'Реферальна нагорода', 'notif.type.specialist_card_submitted': 'Картку надіслано на перевірку', 'notif.type.specialist_card_approved': 'Картку схвалено', 'notif.type.specialist_card_rejected': 'Картку відхилено', 'notif.body.new_offer': 'Нова пропозиція на «{title}»', 'notif.body.offer_accepted': 'Вашу пропозицію на «{title}» прийнято', 'notif.body.offer_declined': 'Вашу пропозицію на «{title}» відхилено', 'notif.body.task_invite': 'Вас запрошують на «{title}»', 'notif.body.new_review': 'Ви отримали оцінку {rating}★', 'notif.body.referral_reward': 'На ваш акаунт додано {days} днів доступу до плану «{plan}»!', 'notif.body.specialist_card_submitted': 'Картку «{title}» надіслано на перевірку', 'notif.body.specialist_card_approved': 'Картку «{title}» схвалено та опубліковано', 'notif.body.specialist_card_rejected': 'Картку «{title}» не було схвалено. Виправте її та надішліть знову.', 'offer.status.pending': 'Очікує', 'offer.status.accepted': 'Прийнято', 'offer.status.declined': 'Відхилено', 'offer.status.withdrawn': 'Відкликано', 'offer.status.other_accepted': 'Вибрано іншого виконавця', 'common.loading': 'Завантаження...', 'common.error': 'Помилка', 'common.save': 'Зберегти', 'common.saving': 'Збереження...', 'common.cancel': 'Скасувати', 'common.add': 'Додати', 'common.close': 'Закрити', 'common.edit': 'Редагувати', 'common.delete': 'Видалити', 'common.from': 'від', 'common.currency': '€', 'common.greece': 'Греція', 'chat.connected': 'Підключено', 'chat.disconnected': 'Відключено', 'chat.no_rooms': 'Переписок поки немає', 'chat.task_fallback': 'Завдання', 'chat.select': 'Виберіть переписку', 'chat.no_messages': 'Повідомлень поки немає', 'chat.placeholder': 'Напишіть повідомлення... (Enter для надсилання)', 'chat.conversation_fallback': 'Переписка', 'chat.direct_chat': 'Особистий чат', 'chat.linked_task': 'Прикріплене замовлення', 'chat.write_btn': 'Написати', 'chat.just_now': 'щойно', 'chat.min_ago': 'хв', 'chat.write_specialist': 'Написати спеціалісту', 'chat.write_customer': 'Написати замовнику', 'chat.notif_settings': 'Налаштування сповіщень', 'chat.notif_messages': 'Сповіщення про нові повідомлення', 'chat.toast_title': 'Нове повідомлення', 'chat.toast_open': 'Відкрити чат', 'offer.price': 'Ціна', 'offer.price.placeholder': 'напр. 80', 'offer.customer_budget': 'Бюджет замовника', 'offer.message': 'Повідомлення', 'offer.optional': 'необов\'язково', 'offer.message.placeholder': 'Представтеся, розкажіть про досвід і чому ви найкращий вибір...', 'offer.submitting': 'Надсилання...', 'profile.photo': 'Фото профілю', 'profile.photo.change': 'Змінити фото', 'profile.photo.hint': 'JPEG, PNG, WebP · до 5MB', 'profile.basic_info': 'Основна інформація', 'profile.phone': 'Телефон', 'profile.phone.placeholder': '+30 6901234567', 'profile.bio': 'Короткий опис', 'profile.bio.placeholder': 'Розкажіть трохи про себе...', 'profile.language': 'Мова', 'profile.language.hint': 'Мова інтерфейсу і email-сповіщень', 'profile.languages': 'Мови спілкування', 'profile.languages.hint': 'Виберіть усі мови, якими ви спілкуєтесь', 'profile.skills': 'Навички', 'profile.skills.subtitle': 'Додайте послуги, які ви пропонуєте', 'profile.skills.placeholder': 'напр. Прибирання, IT, Репетиторство...', 'profile.role': 'Роль акаунту', 'profile.role.specialist': '🔧 Помічник', 'profile.role.admin': '👑 Admin', 'profile.role.customer': '👤 Користувач', 'profile.role.user': '👤 Користувач', 'profile.role.change': 'Для зміни ролі зверніться до служби підтримки.', 'profile.become_specialist': 'Запропонувати допомогу', 'profile.become_specialist.desc': 'Створи профіль помічника, запропонуй свої навички та почни отримувати завдання.', 'become_specialist.hero.title': 'Запропонуй свої навички і почни заробляти', 'become_specialist.hero.subtitle': 'Створи профіль помічника та отримуй запити від людей, яким потрібна допомога', 'become_specialist.how.title': 'Як це працює', 'become_specialist.step1.title': 'Створи портфоліо спеціаліста', 'become_specialist.step1.desc': 'Вкажи категорії, навички і зону покриття — система автоматично підбере підходящі замовлення', 'become_specialist.step2.title': 'Шукай замовлення', 'become_specialist.step2.desc': 'Переглядай завдання по своїх категоріях у розділі «Пошук замовлень»', 'become_specialist.step3.title': 'Відгукуйся і заробляй', 'become_specialist.step3.desc': 'Надсилай пропозиції з ціною і термінами, спілкуйся з клієнтами і виконуй замовлення', 'become_specialist.benefits.title': 'Переваги профілю спеціаліста', 'become_specialist.benefit1': 'Пошук замовлень за категоріями і локацією', 'become_specialist.benefit2': 'Публічний профіль з відгуками клієнтів', 'become_specialist.benefit3': 'Розклад доступності, видимий клієнтам', 'become_specialist.benefit4': 'Додавання до обраного клієнтами', 'become_specialist.cta': 'Детальніше', 'become_specialist.free_badge': 'Безкоштовна реєстрація', 'profile.tab.notifications': 'Сповіщення', 'profile.tab.reviews': 'Відгуки', 'profile.tab.referral': 'Реферали', 'profile.tab.auto_response': 'Авто-відповідь', 'profile.tab.site': 'Сайт', 'profile.site.title': 'Персональна сторінка', 'profile.site.url_label': 'Особистий сайт', 'profile.site.copy': 'Копіювати', 'profile.site.copied': 'Скопійовано', 'profile.site.visible_title': 'Що відображається на вашій сторінці', 'profile.site.visible.name': 'Ім\'я і фото', 'profile.site.visible.bio': 'Біографія', 'profile.site.visible.rating': 'Рейтинг і відгуки', 'profile.site.visible.portfolio': 'Портфоліо / Картки', 'profile.site.visible.contacts': 'Контактні дані', 'profile.site.visible.full_last_name': 'Прізвище повністю', 'profile.site.visible.services': 'Картки послуг', 'profile.site.visible.reviews': 'Розділ з відгуками', 'profile.site.visible.status': 'Статус «Готовий допомогти»', 'profile.site.theme': 'Тема оформлення', 'profile.site.theme.dark': 'Темна', 'profile.site.theme.light': 'Світла', 'profile.site.slug_taken': 'Ця адреса вже зайнята', 'profile.site.stats.title': 'Аналітика сайту', 'profile.site.stats.days': 'останні 30 днів', 'profile.site.stats.views': 'Перегляди', 'profile.site.stats.unique': 'Унікальні відвідувачі', 'profile.site.stats.messages': 'Повідомлення', 'profile.site.stats.total_views': 'Перегляди', 'profile.site.stats.total_unique': 'Унік. відвідувачі', 'profile.site.stats.total_messages': 'Повідомлення', 'profile.site.stats.empty': 'Даних поки немає', 'profile.site.stats.loading': 'Завантаження аналітики...', 'profile.site.stats.no_slug': 'Вкажіть адресу сайту, щоб бачити статистику', 'profile.site.edit_bio_hint': 'Біографія і фото налаштовуються у вкладці «Основне».', 'profile.site.seo.title': 'SEO — мета-дані сайту', 'profile.site.seo.hint': 'Відображається в пошуковиках. При збереженні автоматично перекладається на всі мови.', 'profile.site.seo.site_title': 'Заголовок сторінки', 'profile.site.seo.site_title_placeholder': 'Іван Іванов — Електрик в Афінах', 'profile.site.seo.site_desc': 'Мета-опис', 'profile.site.seo.site_desc_placeholder': 'Короткий опис для пошуковиків...', 'status.title': 'Статус', 'status.can_help_now_hint': 'Ваша картка показується вище у пошуку', 'status.need_help_hint': 'Спеціалісти можуть запропонувати вам допомогу', 'profile.referral.title': 'Партнерська програма', 'profile.referral.desc': 'Поділіться посиланням і отримуйте нагороду за кожного залученого користувача.', 'profile.referral.link_label': 'Ваше реферальне посилання', 'profile.referral.copy': 'Копіювати', 'profile.referral.copied': 'Скопійовано!', 'profile.referral.invited_count': 'успішних запрошень', 'profile.referral.no_code': 'Реферальний код недоступний.', 'notifications.title': 'Налаштування сповіщень', 'notifications.email.new_tasks': 'Email про нові замовлення', 'notifications.email.new_tasks.desc': 'Отримувати email, коли у ваших категоріях публікується нове замовлення', 'notifications.messages.desc': 'Отримувати сповіщення при новому вхідному повідомленні', 'notifications.saved': 'Налаштування збережено', 'notifications.plan_required': 'Недоступно у вашому тарифі', 'profile.tab.info': 'Основне', 'profile.tab.finance': 'Фінанси', 'profile.tab.skills': 'Навички', 'profile.tab.categories': 'Категорії', 'profile.tab.geography': 'Географія', 'profile.specialist.categories': 'Категорії робіт', 'profile.specialist.categories.desc': 'Виберіть категорії, в яких ви працюєте', 'profile.specialist.geography': 'Міста покриття', 'profile.specialist.geography.desc': 'Виберіть міста / райони, де ви працюєте', 'profile.saving': 'Збереження...', 'profile.upload.error': 'Помилка завантаження фото', 'profile.saved': 'Збережено', 'profile.tab.cards': 'Пропозиції', 'profile.cards.count': 'Пропозиції', 'profile.cards.add': 'Додати пропозицію', 'profile.cards.new_title': 'Назва нової пропозиції', 'profile.cards.placeholder': 'Наприклад: Сантехніка', 'profile.cards.create': 'Створити', 'profile.cards.cancel': 'Скасувати', 'profile.cards.empty': 'У вас немає пропозицій', 'profile.cards.empty_hint': 'Створіть першу картку, щоб показати послуги клієнтам.', 'profile.cards.create_first': 'Створити першу пропозицію', 'profile.cards.delete_confirm': 'Видалити пропозицію?', 'profile.background.change': 'Змінити фон', 'profile.background.remove': 'Видалити фон', 'profile.listing_requirements.published_card': 'Опублікуйте хоча б одну картку', 'profile.listing_requirements.title': 'Ваш профіль поки не показується в розділі «Пропозиції»', 'profile.listing_requirements.hint': 'Щоб картка відображалась, виконайте умови:', 'profile.listing_requirements.bio': 'Додайте коротку інформацію про себе в «Основне»', 'profile.listing_requirements.categories': 'Укажіть хоча б одну категорію в активній картці', 'profile.listing_requirements.locations': 'Укажіть хоча б одну локацію в активній картці', 'profile.listing_requirements.card_inactive': 'Зробіть картку активною', 'profile.listing_requirements.review_pending': 'Картка на розгляді', 'profile.card.visibility_issue': 'Картка не відображається в розділі «Пропозиції»', 'profile.card.tab.main': 'Основне', 'profile.card.tab.skills': 'Навички', 'profile.card.tab.categories': 'Категорії', 'profile.card.tab.geography': 'Географія', 'profile.card.tab.portfolio': 'Галерея', 'profile.card.tab.pricelist': 'Прайс-лист', 'profile.card.pricelist.empty': 'Групи прайс-листа ще не додані.', 'profile.card.pricelist.add_group': 'Додати групу', 'profile.card.pricelist.group_title': 'Назва групи', 'profile.card.pricelist.add_item': 'Додати позицію', 'profile.card.pricelist.item_name': 'Послуга / робота', 'profile.card.pricelist.item_desc': 'Опис (необов\'язково)', 'profile.card.pricelist.item_price': 'Ціна', 'profile.card.pricelist.item_unit': 'Одиниця (наприклад /год)', 'profile.card.pricelist.save_group': 'Зберегти групу', 'profile.card.pricelist.save_item': 'Зберегти', 'profile.card.pricelist.delete_group': 'Видалити групу', 'profile.card.pricelist.delete_item': 'Видалити', 'profile.card.active': 'Активна', 'profile.card.review_pending': 'На розгляді', 'profile.card.review_pending_hint': 'Вашу картку зараз перевіряє адміністрація.', 'profile.card.review_submitted': 'Картку надіслано на перевірку', 'profile.card.review_approved': 'Картку схвалено', 'profile.card.review_approved_hint': 'Ваша картка тепер відображається в пропозиціях.', 'profile.card.review_rejected': 'Картку відхилено', 'profile.card.review_rejected_hint': 'Картку не було схвалено. Виправте її та надішліть знову.', 'profile.card.submit_review': 'Надіслати на розгляд', 'profile.card.withdraw_review': 'Відкликати заявку', 'profile.card.unpublish': 'Зняти з публікації', 'profile.card.save': 'Зберегти', 'profile.card.saved': 'Збережено', 'profile.card.delete': 'Видалити', 'profile.card.skill.add': 'Додати навичку', 'profile.card.photo.add': 'Додати фото', 'profile.card.photo.uploading': 'Завантаження...', 'profile.card.photo.empty': 'Немає фотографій', 'profile.card.item.title': 'Заголовок', 'profile.card.item.desc': 'Опис', 'profile.card.item.save': 'Зберегти', 'profile.card.item.cancel': 'Скасувати', 'profile.card.item.edit': 'Опис роботи', 'profile.card.description': 'Опис картки', 'profile.card.desc_auto_translate': 'При збереженні буде автоматично перекладено на інші мови', 'profile.card.desc_translated': 'Є переклади:', 'profile.upgrade.cards_limit': 'Ліміт портфоліо вичерпано', 'profile.upgrade.plan': 'Поточний тариф:', 'profile.upgrade.contact': 'Зверніться до адміністратора для зміни тарифу', 'profile.upgrade.ok': 'Зрозуміло', 'profile.plan.title': 'Тарифний план', 'profile.balance': 'Баланс', 'profile.balance.topup': 'Поповнити баланс', 'profile.balance.topup.title': 'Поповнити баланс', 'profile.balance.topup.amount': 'Сума (в EUR)', 'profile.balance.topup.hint': 'Виберіть суму або введіть вручну', 'profile.balance.topup.submit': 'Перейти до оплати', 'profile.balance.topup.loading': 'Перенаправлення...', 'profile.balance.topup.error': 'Помилка ініціалізації платежу. Спробуйте знову.', 'payment.success.title': 'Оплата пройшла успішно!', 'payment.success.desc': 'Ваш баланс оновлено.', 'payment.cancelled.title': 'Оплату скасовано', 'payment.cancelled.desc': 'Оплату було скасовано. Кошти не списано.', 'payment.pending.title': 'Обробляється...', 'payment.pending.desc': 'Ваш платіж в обробці.', 'payment.back_to_profile': 'Повернутися в профіль', 'profile.plan.basic': 'Базовий (безкоштовний)', 'profile.plan.contact_upgrade': 'Зверніться до адміністратора для підключення тарифу', 'profile.plan.cards_up_to': 'Портфоліо: до', 'profile.plan.cards_unlimited': 'Портфоліо: безліміт', 'profile.plan.tasks_up_to': 'Завдань: до', 'profile.plan.offers_up_to': 'Відгуків: до', 'profile.plan.valid_until': 'Дійсний до', 'profile.plan.no_expiry': 'Безстроково', 'create.error': 'Помилка при публікації', 'tasks.category.general': 'Загальне', 'tasks.budget.range': 'Діапазон:', 'tasks.budget.from': 'від', 'tasks.budget.to': 'до', 'tasks.filter.reset': 'Скинути фільтри', 'tasks.load_more': 'Завантажити ще', 'tasks.showing': 'Результатів:', 'tasks.field.budget': 'Бюджет, €', 'admin.title': 'Панель адміністратора', 'admin.tab.stats': 'Статистика', 'admin.tab.users': 'Користувачі', 'admin.tab.tasks': 'Завдання', 'admin.tab.reports': 'Скарги', 'admin.tab.moderation': 'Модерація', 'admin.stats.users': 'Користувачі', 'admin.stats.tasks': 'Завдання', 'admin.stats.offers': 'Пропозиції', 'admin.stats.reviews': 'Відгуки', 'admin.tasks.by_status': 'Завдання за статусом', 'admin.col.user': 'Користувач', 'admin.col.email': 'Email', 'admin.col.role': 'Роль', 'admin.col.registered': 'Реєстрація', 'admin.col.status': 'Статус', 'admin.col.title': 'Назва', 'admin.col.budget': 'Бюджет', 'admin.col.created': 'Створено', 'admin.users.active': 'Активний', 'admin.users.inactive': 'Неактивний', 'admin.users.deactivate': 'Деактивувати', 'admin.users.activate': 'Активувати', 'admin.tasks.cancel': 'Скасувати', 'admin.reports.none': 'Скарг немає', 'admin.moderation.none': 'Немає пропозицій для перевірки', 'admin.moderation.pending': 'В очікуванні', 'admin.moderation.active': 'Активно', 'admin.moderation.approve': 'Підтвердити', 'admin.moderation.block': 'Заблокувати', 'admin.moderation.pending_title': 'Пропозиції на підтвердження', 'admin.moderation.active_title': 'Активні пропозиції', 'admin.moderation.pending_count': 'В очікуванні', 'admin.moderation.active_count': 'Активні', 'admin.moderation.pending_hint': 'Нові пропозиції, які очікують підтвердження', 'admin.moderation.active_hint': 'Активні пропозиції, які можна заблокувати', 'admin.moderation.pending_empty': 'Немає нових пропозицій для підтвердження', 'admin.moderation.active_empty': 'Активних пропозицій не знайдено', 'admin.reports.reviewed': 'Розглянуто', 'admin.reports.dismiss': 'Відхилити', 'admin.pagination.total': 'Всього', 'admin.users.role.change': 'Змінити роль', 'admin.users.search.placeholder': 'Пошук за ім\'ям або email...', 'admin.tasks.delete': 'Видалити', 'admin.tasks.delete.confirm': 'Видалити це завдання назавжди?', 'admin.tasks.search.placeholder': 'Пошук за назвою...', 'admin.col.customer': 'Замовник', 'admin.col.reporter': 'Скаржник', 'admin.col.target': 'Ціль', 'admin.filter.all_roles': 'Всі ролі', 'admin.filter.all_statuses': 'Всі статуси', 'admin.reports.target.task': 'Завдання', 'admin.reports.target.user': 'Користувач', 'admin.tab.categories': 'Категорії', 'admin.tab.locations': 'Міста і райони', 'admin.tab.logs': 'Логи', 'admin.tab.plans': 'Тарифи', 'admin.tab.settings': 'Налаштування', 'admin.logs.subtab.ai': 'AI логи', 'admin.logs.subtab.activity': 'Активність', 'admin.logs.subtab.mail': 'Mail', 'admin.logs.subtab.notifications': 'Сповіщення', 'admin.notif_logs.type': 'Тип', 'admin.notif_logs.title': 'Заголовок', 'admin.notif_logs.read': 'Прочитано', 'admin.notif_logs.empty': 'Логи сповіщень порожні', 'admin.stats.notif_chart_title': 'Сповіщення по днях', 'admin.stats.notif_label': 'Сповіщення', 'admin.stats.mail_chart_title': 'Email по днях', 'admin.stats.mail_label': 'Emails', 'admin.filter.all': 'Всі', 'admin.stats.specialists': 'Помічники', 'admin.col.plan': 'Тариф', 'admin.back_home': 'На головну', 'admin.plans.title': 'Тарифні пакети', 'admin.plans.add': '+ Додати тариф', 'admin.plans.empty': 'Тарифи не створено', 'admin.plans.form.new': 'Новий тариф', 'admin.plans.form.edit': 'Редагувати тариф', 'admin.plans.form.name': 'Назва', 'admin.plans.form.price': 'Ціна (EUR)', 'admin.plans.form.old_price': 'Стара ціна (EUR, необов\'язково)', 'admin.plans.form.max_offers': 'Макс. відгуків (порожньо = без ліміту)', 'admin.plans.form.max_cards': 'Макс. пропозицій (порожньо = без ліміту)', 'admin.plans.form.duration_days': 'Термін (днів, порожньо = без закінчення)', 'admin.plans.form.description': 'Опис', 'admin.plans.form.features': 'Можливості (по одному на рядок)', 'admin.plans.form.notify': 'Сповіщення про нові замовлення', 'admin.plans.form.default': 'За замовчуванням', 'admin.plans.form.active': 'Активний', 'admin.plans.form.order': 'Порядок', 'admin.plans.form.role': 'Роль', 'admin.plans.form.tier': 'Рівень', 'admin.plans.form.role.customer': 'Замовник', 'admin.plans.form.role.specialist': 'Помічник', 'admin.plans.form.tier.free': 'Безкоштовний', 'admin.plans.form.tier.pro': 'Pro', 'admin.plans.form.tier.ultimate': 'Ultimate', 'admin.plans.form.section.limits': 'Ліміти (порожньо = без обмежень)', 'admin.plans.form.max_messages_day': 'Макс. повідомлень/день', 'admin.plans.form.max_orders_day': 'Макс. замовлень/день', 'admin.plans.form.max_skills': 'Макс. навичок', 'admin.plans.form.max_profiles': 'Макс. профілів', 'admin.plans.form.max_portfolio': 'Макс. елементів портфоліо', 'admin.plans.form.section.boost': 'Множники & Буст', 'admin.plans.form.search_boost': 'Буст у пошуку', 'admin.plans.form.offers_multiplier': 'Множник відгуків', 'admin.plans.form.section.contact': 'Права контактів', 'admin.plans.form.can_contact_free': 'Контакт з безкоштовними користувачами', 'admin.plans.form.can_contact_pro': 'Контакт з Pro користувачами', 'admin.plans.form.can_contact_all': 'Контакт з усіма', 'admin.plans.form.can_show_contact': 'Показувати контакти', 'admin.plans.form.can_view_phone': 'Перегляд телефону', 'admin.plans.form.section.features': 'Можливості', 'admin.plans.form.upload_video': 'Завантаження відео', 'admin.plans.form.favorites': 'Обране', 'admin.plans.form.google_calendar': 'Google Calendar', 'admin.plans.form.verified_badge': 'Знак верифікації', 'admin.plans.form.highlighted_reviews': 'Виділені відгуки', 'admin.plans.form.personal_site': 'Особистий сайт', 'admin.plans.form.can_help_now': 'Статус «Можу допомогти»', 'admin.plans.form.need_help': 'Статус «Потрібна допомога»', 'admin.plans.form.auto_response': 'Авто-відповідь', 'admin.plans.form.auto_match': 'Авто-підбір', 'admin.plans.form.price_list': 'Прайс-лист', 'admin.plans.form.instant_dispatch_free': 'Миттєва розсилка (безкоштовно)', 'admin.plans.form.instant_dispatch_pro': 'Миттєва розсилка (Pro)', 'admin.plans.badge.default': 'За замовчуванням', 'admin.plans.badge.inactive': 'Неактивний', 'admin.plans.make_default': 'Зробити за замовчуванням', 'admin.plans.tasks': 'Завдань', 'admin.plans.offers': 'Відгуків', 'admin.plans.cards': 'Пропозиції', 'admin.plans.notify_tasks': 'Сповіщення про замовлення', 'admin.plans.delete.confirm': 'Видалити тариф', 'admin.activity.title': 'Журнал активності', 'admin.activity.event': 'Подія', 'admin.activity.all_events': 'Всі події', 'admin.activity.from': 'Від', 'admin.activity.to': 'До', 'admin.activity.reset': 'Скинути', 'admin.activity.total': 'Всього', 'admin.activity.empty': 'Немає записів', 'admin.mail.event': 'Email подія', 'admin.mail.all_events': 'Всі email події', 'admin.mail.from': 'Від', 'admin.mail.to': 'До', 'admin.mail.reset': 'Скинути', 'admin.mail.total': 'Всього', 'admin.mail.empty': 'Немає email логів', 'admin.mail.recipient': 'Отримувач', 'admin.mail.provider': 'Провайдер', 'admin.mail.details': 'Деталі', 'admin.mail.status': 'Статус', 'admin.mail.success': 'Успішно', 'admin.mail.failed': 'Помилка', 'admin.event.email_sent': 'Email надіслано', 'admin.event.email_failed': 'Email не надіслано', 'admin.event.email_dev': 'Email DEV fallback', 'admin.event.admin_email_test_sent': 'Тестовий email надіслано', 'admin.event.admin_email_test_failed': 'Тестовий email не надіслано', 'admin.logs.empty': 'Немає записів', 'admin.logs.date': 'Дата', 'admin.logs.provider': 'Провайдер', 'admin.logs.model': 'Модель', 'admin.logs.action': 'Дія', 'admin.logs.langs': 'Мови', 'admin.logs.in': 'Вхід', 'admin.logs.out': 'Вихід', 'admin.logs.total': 'Разом', 'admin.logs.ms': 'мс', 'admin.logs.status': 'Статус', 'admin.stats.activity_30d': 'Активність за 30 днів', 'admin.stats.tasks_label': 'Заявки', 'admin.stats.users_label': 'Користувачі', 'admin.stats.specialists_label': 'Помічники', 'admin.stats.tokens_title': 'Витрата токенів (по місяцях)', 'admin.stats.tokens_out': 'Вихідні', 'admin.stats.tokens_in': 'Вхідні', 'admin.stats.tokens_out_label': 'Вихідні токени', 'admin.stats.tokens_in_label': 'Вхідні токени', 'admin.stats.cost_label': 'Вартість (USD)', 'admin.stats.tasks_by_status': 'Заявки за статусами', 'admin.task_status.open': 'Відкриті', 'admin.task_status.in_progress': 'В роботі', 'admin.task_status.completed': 'Завершені', 'admin.task_status.cancelled': 'Скасовані', 'admin.task_status.draft': 'Чернетки', 'admin.settings.tab.general': 'Загальні', 'admin.settings.tab.smtp': 'E-Mail', 'admin.settings.tab.notifications': 'Сповіщення', 'admin.settings.tab.payment': 'Оплата', 'admin.settings.tab.referral': 'Реферальна', 'admin.settings.tab.seo': 'SEO', 'admin.settings.tab.socials': 'Соцмережі', 'admin.settings.tab.telegram': 'Telegram Bot', 'admin.settings.telegram.title': 'Налаштування Telegram Bot', 'admin.settings.telegram.help': 'Створіть бота через @BotFather. ID чату дізнайтесь через @userinfobot.', 'admin.settings.telegram.bot_token': 'Bot Token', 'admin.settings.telegram.admin_chat_id': 'Chat ID адміністратора', 'admin.settings.telegram.admin_chat_hint': 'Спочатку надішліть /start своєму боту, потім дізнайтесь chat ID через @userinfobot', 'admin.settings.telegram.channel_id': 'невикористовується', 'admin.settings.telegram.channels_title': 'Канали за мовами', 'admin.settings.telegram.channel_hint': 'Username публічного каналу (@канал) або числовий ID', 'admin.settings.telegram.notify_registrations': 'Сповіщати про нові реєстрації', 'admin.settings.telegram.notify_registrations_hint': 'Надсилати повідомлення при реєстрації нового користувача', 'admin.settings.telegram.post_new_tasks': 'Публікувати нові завдання в канал', 'admin.settings.telegram.post_new_tasks_hint': 'Автоматично публікувати нові завдання в Telegram-канал', 'admin.settings.telegram.test': 'Тест', 'admin.settings.telegram.verify': 'Перевірити токен', 'admin.settings.telegram.test_fail': 'Помилка з\'єднання', 'admin.settings.socials.title': 'Посилання на соціальні мережі', 'admin.settings.socials.hint': 'Заповнені посилання відображаються у підвалі сайту', 'admin.settings.seo.maintenance_label': 'Режим обслуговування', 'admin.settings.seo.maintenance_hint': 'Показувати сторінку обслуговування всім відвідувачам', 'admin.settings.seo.indexing_label': 'Індексація пошуковими системами', 'admin.settings.seo.indexing_hint': 'Дозволити пошуковим системам індексувати сайт', 'admin.settings.seo.head_scripts_label': 'Скрипти в (JS)', 'admin.settings.seo.head_scripts_hint': 'Виконується на кожній сторінці (Google Tag Manager, аналітика тощо)', 'admin.settings.seo.site_title_label': 'Заголовок сайту', 'admin.settings.seo.site_description_label': 'Опис сайту (meta description)', 'admin.settings.referral.title': 'Партнерська програма', 'admin.settings.referral.hint': 'Нагороджуйте користувачів, що приводять нових учасників.', 'admin.settings.referral.enabled_label': 'Увімкнено', 'admin.settings.referral.enabled_hint': 'Увімкнути / вимкнути видачу нагород', 'admin.settings.referral.customer_section': 'Для клієнтів', 'admin.settings.referral.specialist_section': 'Для помічників', 'admin.settings.referral.plan_label': 'Тарифний план за реферала', 'admin.settings.referral.no_plan': '— без плану —', 'admin.settings.referral.plan_hint': 'Цей план буде призначений тому, хто запросив. Якщо його поточний план вищий — додадуться тільки дні.', 'admin.settings.referral.days_label': 'Днів нагороди', 'admin.settings.referral.days_hint': 'Кількість днів, що додаються до терміну дії плану.', 'admin.settings.general.title': 'Загальні налаштування', 'admin.settings.general.site_name': 'Назва сайту', 'admin.settings.general.site_url': 'URL сайту', 'admin.settings.general.contact_email': 'Email для зв\'язку', 'admin.settings.general.support_phone': 'Телефон підтримки', 'admin.settings.smtp.title': 'Налаштування SMTP сервера', 'admin.settings.smtp.hint': 'Використовується для надсилання email-сповіщень.', 'admin.settings.smtp.host': 'SMTP Хост', 'admin.settings.smtp.port': 'Порт', 'admin.settings.smtp.encryption': 'Шифрування', 'admin.settings.smtp.enc.none': 'Немає', 'admin.settings.smtp.enc.tls': 'STARTTLS (порт 587)', 'admin.settings.smtp.enc.ssl': 'SSL/TLS (порт 465)', 'admin.settings.smtp.username': 'Ім\'я користувача', 'admin.settings.smtp.password': 'Пароль / App Password', 'admin.settings.smtp.from_name': 'Ім\'я відправника', 'admin.settings.smtp.from_email': 'Email відправника', 'admin.settings.smtp.test': 'Надіслати тестовий email', 'admin.settings.smtp.sending': 'Надсилання...', 'admin.settings.payment.hint': 'Дані для підключення до ePay Piraeus Bank.', 'admin.settings.env.test': 'Тест (sandbox)', 'admin.settings.env.prod': 'Бойовий режим', 'admin.settings.env.label': 'Середовище', 'admin.settings.merchant_id': 'Merchant ID', 'admin.settings.api_user': 'API User', 'admin.settings.api_password': 'API Password', 'admin.settings.confirm_url': 'Confirmation URL (webhook)', 'admin.settings.cancel_url': 'Cancel URL', 'admin.settings.active': 'Активний', 'admin.settings.saving': 'Збереження...', 'admin.settings.saved': 'Збережено', 'admin.notif.vars_hint': 'Доступні змінні в шаблонах', 'admin.notif.tmpl.not_set': 'Шаблон не налаштовано', 'admin.notif.tmpl.subject_label': 'Тема листа', 'admin.notif.tmpl.body_label': 'Текст листа (HTML)', 'admin.notif.tmpl.save': 'Зберегти', 'admin.notif.tmpl.close': 'Закрити', 'admin.notif.tmpl.translate': 'Авто-переклад на інші мови', 'admin.notif.tmpl.translating': 'Переклад...', 'admin.notif.tmpl.saving': 'Збереження...', 'admin.notif.email_verification': 'Підтвердження email адреси', 'admin.notif.registration_success': 'Успішна реєстрація', 'admin.notif.password_reset': 'Відновлення пароля', 'admin.notif.new_offer': 'Нова пропозиція', 'admin.notif.new_task': 'Нове завдання', 'admin.notif.offer_accepted': 'Пропозицію прийнято', 'admin.notif.new_message': 'Нове повідомлення', 'admin.notif.offer_declined': 'Відхилення пропозиції', 'admin.notif.offer_other_accepted': 'Вибрано іншого виконавця', 'admin.notif.task_updated': 'Зміна завдання', 'admin.notif.deadline_reminder': 'Нагадування про дедлайн', 'admin.notif.task_archived': 'Автознняття завдання', 'admin.notif.referral_reward': 'Реферальна нагорода', 'admin.email_template.plan_activated': 'Тарифи — активація тарифу', 'admin.email_template.plan_upgraded': 'Тарифи — підвищення тарифу', 'admin.email_template.plan_downgrade_scheduled': 'Тарифи — запланований перехід', 'admin.email_template.plan_downgrade_applied': 'Тарифи — застосування переходу', 'admin.email_template.plan_renewal_reminder': 'Тарифи — нагадування про продовження', 'admin.email_template.plan_insufficient_funds': 'Тарифи — недостатньо коштів', 'pricing.confirm.title': 'Підтвердіть вибір тарифу', 'pricing.confirm.plan': 'Тариф', 'pricing.confirm.prorated': 'Залік залишку', 'pricing.confirm.effective_price': 'До оплати', 'pricing.confirm.your_balance': 'Ваш баланс', 'pricing.confirm.downgrade_info': 'Перехід на новий тариф відбудеться автоматично після закінчення поточного періоду.', 'pricing.confirm.insufficient': 'Недостатньо коштів на балансі.', 'pricing.confirm.top_up': 'Поповнити', 'pricing.confirm.schedule_downgrade': 'Запланувати перехід', 'pricing.confirm.pay': 'Оплатити', 'admin.user_edit.title': 'Редагування користувача', 'admin.user_edit.email': 'Email', 'admin.user_edit.email_verified': 'Email підтверджено', 'admin.user_edit.email_not_verified': 'Email не підтверджено', 'admin.user_edit.verify_email_btn': 'Підтвердити вручну', 'admin.user_edit.verify_email_done': 'Email підтверджено!', 'admin.user_edit.id': 'ID', 'admin.user_edit.registered': 'Реєстрація', 'admin.user_edit.last_seen': 'Останній візит', 'admin.user_edit.lang': 'Мова', 'admin.user_edit.first_name': 'Ім\'я', 'admin.user_edit.last_name': 'Прізвище', 'admin.user_edit.phone': 'Телефон', 'admin.user_edit.bio': 'Про себе', 'admin.user_edit.role': 'Роль', 'admin.user_edit.plan': 'Тариф', 'admin.user_edit.no_plan': '— Без тарифу —', 'admin.user_edit.active': 'Активний акаунт', 'admin.user_edit.published': 'Опублікована', 'admin.user_edit.balance': 'Баланс (EUR)', 'admin.user_edit.skills': 'Навички', 'admin.user_edit.tab.profile': 'Профіль', 'admin.user_edit.tab.account': 'Акаунт', 'admin.user_edit.tab.balance': 'Баланс', 'admin.user_edit.tab.settings': 'Налаштування', 'admin.user_edit.tab.specialist': 'Пропозиції', 'admin.user_edit.tab.site': 'Сайт', 'admin.user_edit.plan_expires': 'Тариф закінчується', 'admin.user_edit.interface_lang': 'Мова інтерфейсу', 'admin.user_edit.comm_languages': 'Мови спілкування', 'admin.user_edit.personal_site_slug': 'Персональна сторінка', 'admin.user_edit.show_contact_info': 'Показувати контакти', 'admin.user_edit.show_contact_info.hint': 'Видно замовникам', 'admin.user_edit.notify_new_tasks': 'Сповіщати про нові завдання', 'admin.user_edit.notify_new_tasks.hint': 'Push і email сповіщення', 'admin.user_edit.notif_messages': 'Сповіщення про повідомлення', 'admin.user_edit.notif_messages.hint': 'Нові повідомлення в чаті', 'admin.user_edit.site_settings': 'Налаштування персональної сторінки', 'admin.user_edit.categories': 'Категорії послуг', 'admin.user_edit.locations': 'Райони обслуговування', 'admin.user_edit.skill_placeholder': 'Нова навичка...', 'admin.user_edit.add_category': '— Виберіть категорію —', 'admin.user_edit.add_location': '— Виберіть район —', 'admin.user_edit.specialist_cards': 'Пропозиції спеціаліста', 'admin.user_edit.no_cards': 'Пропозиції не знайдено', 'admin.user_edit.card_title': 'Заголовок пропозиції', 'admin.user_edit.card_description': 'Опис', 'admin.balance.topup.btn': 'Поповнити', 'admin.balance.withdraw.btn': 'Списати', 'admin.balance.modal_hint': 'Зміни застосовуються одразу і фіксуються в історії', 'admin.balance.topup.title': 'Поповнення балансу', 'admin.balance.topup.amount': 'Сума', 'admin.balance.topup.description': 'Коментар', 'admin.balance.topup.description.placeholder': 'Наприклад: бонус або ручне поповнення', 'admin.balance.topup.submit': 'Поповнити баланс', 'admin.balance.withdraw.title': 'Зняття балансу', 'admin.balance.withdraw.amount': 'Сума', 'admin.balance.withdraw.description': 'Коментар', 'admin.balance.withdraw.description.placeholder': 'Наприклад: повернення або ручне списання', 'admin.balance.withdraw.submit': 'Списати баланс', 'admin.user_edit.role.customer': 'Замовник', 'admin.user_edit.role.user': 'Користувач', 'admin.user_edit.role.specialist': 'Помічник', 'admin.user_edit.role.admin': 'Адміністратор', 'common.refresh': 'Оновити', 'common.back_home': 'На головну', 'admin.loc.hint': 'Управління містами і районами', 'admin.loc.add_city': 'Нове місто', 'admin.loc.add_district': 'Додати район', 'admin.loc.new': 'Нова локація', 'admin.loc.edit': 'Редагувати локацію', 'admin.loc.district': 'район', 'admin.loc.empty': 'Немає локацій', 'admin.loc.delete.confirm': 'Видалити локацію? Всі райони також будуть видалені.', 'admin.cat.add_root': 'Нова категорія', 'admin.cat.add_sub': 'Підкатегорія', 'admin.cat.edit': 'Редагувати', 'admin.cat.delete': 'Видалити', 'admin.cat.delete.confirm': 'Видалити категорію? Всі підкатегорії також будуть видалені.', 'admin.cat.slug': 'Slug', 'admin.cat.icon': 'Іконка', 'admin.cat.name_el': 'Грецька', 'admin.cat.name_en': 'Англійська', 'admin.cat.name_ru': 'Російська', 'admin.cat.name_uk': 'Українська', 'admin.cat.active': 'Активна', 'admin.cat.parent': 'Батьківська категорія', 'admin.cat.no_parent': 'Верхній рівень', 'admin.cat.save': 'Зберегти', 'admin.cat.cancel': 'Скасувати', 'admin.cat.empty': 'Немає категорій', 'admin.cat.hint': 'Управління категоріями з багаторівневою ієрархією', 'admin.cat.new': 'Нова категорія', 'admin.cat.subcategory': 'підкатегорія', 'admin.cat.add_child': 'Додати підкатегорію', 'admin.cat.inactive': 'Неактивна', 'admin.event.user_login': 'Вхід', 'admin.event.user_register': 'Реєстрація', 'admin.event.admin_user_deactivate': 'Блокування юзера', 'admin.event.admin_user_activate': 'Розблокування юзера', 'admin.event.admin_user_role_changed': 'Зміна ролі', 'admin.event.admin_task_cancelled': 'Скасування завдання', 'admin.event.admin_task_deleted': 'Видалення завдання', 'admin.event.admin_report_reviewed': 'Скаргу розглянуто', 'admin.event.admin_report_dismissed': 'Скаргу відхилено', 'admin.event.task_created': 'Створено завдання', 'user.online': 'Онлайн', 'user.seen_minutes': 'був тут {n} хв тому', 'user.seen_hours': 'був тут {n} год тому', 'user.seen_yesterday': 'був тут вчора', 'user.seen_days': 'був тут {n} дн тому', 'specialists.title': 'Пропозиції', 'specialists.search': 'Пошук спеціаліста...', 'specialists.search.btn': 'Пошук', 'specialists.empty': 'Спеціалістів не знайдено', 'specialists.no_bio': 'Без опису', 'specialists.view': 'Дивитись профіль', 'specialists.reviews': 'відгуків', 'specialist.favorite': 'Додати до обраного', 'specialist.unfavorite': 'Прибрати з обраного', 'specialist.site_link': 'Особистий сайт', 'favorites.specialists.title': 'Обрані спеціалісти', 'favorites.specialists.empty': 'Ви ще не додали спеціалістів до обраного', 'nav.favorites': 'Обране', 'nav.schedule': 'Розклад', 'nav.find_tasks': 'Пошук замовлень', 'schedule.title': 'Мій розклад', 'schedule.subtitle': 'Позначайте дні коли ви вільні або зайняті — замовники побачать вашу доступність', 'schedule.available': 'Вільний', 'schedule.busy': 'Зайнятий', 'schedule.unset': 'Не вказано', 'schedule.click_hint': '← клік змінює статус по колу', 'schedule.range_mode': 'Виділити діапазон', 'schedule.range_from': 'З {date} — оберіть кінцеву дату', 'schedule.click_to_set': 'Натисніть щоб позначити', 'schedule.free': 'вільно', 'schedule.busy_count': 'зайнято', 'schedule.free_days': 'вільних днів', 'schedule.googleCalendar': 'Google Календар', 'schedule.connectGoogle': 'Підключити Google Календар', 'schedule.disconnectGoogle': 'Відключити', 'schedule.connectedAs': 'Підключено як', 'schedule.importFromGoogle': 'Синхр. з Google', 'schedule.gcalConnected': '✓ Google Календар підключено', 'schedule.gcalError': 'Помилка підключення Google Календар', 'schedule.gcalImportDone': 'Імпортовано {n} днів з Google Календар', 'schedule.gcalAutoSyncNote': 'Зміни доступності автоматично надсилаються в Google Календар', 'schedule.gcalConnectDesc': 'Підключіть Google Календар для автоматичної синхронізації розкладу', 'schedule.gcalDisconnectConfirm': 'Відключити Google Календар?', 'find_tasks.title': 'Пошук замовлень', 'find_tasks.for_me': 'Для мене', 'find_tasks.all': 'Всі замовлення', 'find_tasks.by_category': 'За категоріями', 'find_tasks.list': 'Списком', 'find_tasks.already_offered': 'Пропозицію надіслано', 'find_tasks.offer_now': 'Відгукнутися', 'find_tasks.empty_for_me': 'Немає замовлень у ваших категоріях', 'find_tasks.banner_hint': 'Знайдіть замовлення за категоріями вашого портфоліо', 'find_tasks.no_cards': 'Створіть портфоліо спеціаліста, щоб бачити підходящі замовлення', 'find_tasks.add_card': 'Створити портфоліо', 'find_tasks.search': 'Пошук замовлень...', 'find_tasks.tasks_count': 'завдань', 'footer.tagline': 'Платформа завдань для Греції', 'footer.rights': 'Всі права захищені.', 'nav.privacy': 'Політика конфіденційності', 'nav.delete_account': 'Видалення акаунту', 'delete_account.title': 'Запит на видалення акаунту', 'delete_account.subtitle': 'Після перевірки вашого запиту ми назавжди видалимо ваш акаунт і дані протягом 30 днів.', 'delete_account.warning': 'Цю дію не можна скасувати. Всі ваші дані будуть видалені безповоротно.', 'delete_account.reason_label': 'Причина (необов\'язково)', 'delete_account.reason_placeholder': 'Розкажіть, чому ви хочете видалити акаунт...', 'delete_account.confirm_label': 'Підтверджую, що хочу назавжди видалити свій акаунт', 'delete_account.submit': 'Надіслати запит', 'delete_account.submitting': 'Надсилання...', 'delete_account.success_title': 'Ваш запит отримано', 'delete_account.success_body': 'Ми опрацюємо ваш запит протягом 30 днів і повідомимо вас електронною поштою.', 'delete_account.login_required': 'Для надсилання запиту на видалення необхідно увійти в акаунт.', 'delete_account.login_btn': 'Увійти', 'app.download_title': 'Завантажте мобільний додаток CanHelp', 'app.download_desc': 'Все CanHelp — завжди під рукою. Доступно для Android та iOS.', 'nav.pricing': 'Тарифи', 'pricing.title': 'Тарифи', 'pricing.subtitle': 'Виберіть підходящий план', 'pricing.role.customer': 'Замовник', 'pricing.role.specialist': 'Спеціаліст', 'pricing.free': 'Безкоштовно', 'pricing.per_month': 'міс', 'pricing.duration': 'Термін', 'pricing.days': 'дн.', 'pricing.current_plan': 'Ваш план', 'pricing.popular': 'Популярний', 'pricing.choose': 'Вибрати', 'pricing.your_plan': 'Активний план', 'pricing.free_default': 'За замовчуванням', 'pricing.compare': 'Порівняння функцій', 'pricing.feature': 'Функція', 'pricing.faq_note': 'Оплата списується з балансу CanHelp. Поповнення доступне в розділі Оплата.', 'pricing.feat.messages': 'Повідомлень / день', 'pricing.feat.orders': 'Замовлень / день', 'pricing.feat.contact_all': 'Зв\'язок з усіма', 'pricing.feat.view_phone': 'Перегляд телефону', 'pricing.feat.show_contact': 'Показувати контакти', 'pricing.feat.favorites': 'Обране', 'pricing.feat.verified_badge': 'Верифікований бейдж', 'pricing.feat.google_calendar': 'Google Календар', 'pricing.feat.personal_site': 'Персональний сайт', 'pricing.feat.auto_response': 'Авто-відповідь', 'pricing.feat.auto_match': 'Авто-підбір', 'pricing.feat.highlighted_reviews': 'Виділені відгуки', 'pricing.feat.portfolio': 'Елементів пропозиції', 'pricing.feat.cards': 'Кількість пропозицій', 'pricing.feat.notify_tasks': 'Сповіщення про нові завдання', 'pricing.feat.video': 'Відео в пропозиції', 'upgrade.available_in': 'Доступно в', 'upgrade.cta': 'Покращити', 'dashboard.plan.title': 'Мій план', 'dashboard.plan.expires': 'Закінчується через {n} днів', 'dashboard.plan.upgrade': 'Покращити план', 'dashboard.plan.no_plan': 'Безкоштовний план', 'dashboard.plan.messages': 'Повідомлень сьогодні', 'dashboard.plan.orders': 'Замовлень сьогодні', 'dashboard.plan.limits': 'Денні ліміти', 'dashboard.plan.features': 'Функції', 'dashboard.plan.stats': 'Статистика', 'dashboard.stats.cards': 'Портфоліо', 'dashboard.stats.maxCards': 'Макс. портфоліо', 'dashboard.stats.portfolioItems': 'Елементи портфоліо', 'dashboard.stats.maxPortfolioItems': 'Макс. елементи', 'dashboard.stats.activeOffers': 'Активні відгуки', 'dashboard.stats.reviewsReceived': 'Відгуки', 'dashboard.stats.activeTasks': 'Активні завдання', 'dashboard.stats.completedTasks': 'Завершені', 'status.need_help': 'Потрібна допомога', 'status.active': 'Активний', 'status.toggle_on': 'Увімкнути', 'status.toggle_off': 'Вимкнути', 'fomo.missed_orders': 'Пропущено {n} замовлень', 'fomo.missed_value': 'На суму €{v}', 'fomo.upgrade_hint': 'Покращте план — отримуйте більше замовлень', 'fomo.conversion': 'Конверсія завдань', 'fomo.active': 'Активні', 'fomo.with_offers': 'З офертами', 'fomo.completed': 'Завершені', 'fomo.already_offered': '{n} спеціалістів вже відгукнулися', 'fomo.specialist_missed': 'Ви пропустили {n} замовлень', 'fomo.top_categories': 'Категорії', 'fomo.offers_received': 'пропозицій отримано', 'fomo.avg_offers': 'В середньому {n}/завдання', 'fomo.completion_rate': 'завершено', 'task.auto_match': 'Авто-матч', 'task.auto_match_results': 'Топ спеціалісти', 'task.no_offer_yet': 'Ви ще не надіслали пропозицію', 'task.make_offer': 'Надіслати пропозицію', 'auto_response.title': 'Авто-відповідь', 'auto_response.enabled': 'Увімкнути авто-відповідь', 'auto_response.min_budget': 'Мін. бюджет', 'auto_response.max_budget': 'Макс. бюджет', 'auto_response.default_price': 'Ціна за замовчуванням', 'auto_response.default_message': 'Повідомлення за замовчуванням', 'auto_response.max_per_day': 'Макс. авто-офертів на день', 'auto_response.save': 'Зберегти', 'auto_response.saved': 'Збережено', 'auto_response.categories': 'Категорії', 'auto_response.locations': 'Локації', 'profile.personal_site': 'Персональний сайт', 'profile.site_slug': 'URL slug', 'profile.site_slug_hint': 'Тільки латинські букви, цифри, - і _', 'profile.site_open': 'Відкрити сайт', 'profile.site_preview': 'Ваш сайт', 'profile.show_contact': 'Показувати контакти', 'profile.show_contact_hint': 'Замовники з Pro/Ultimate-планом побачать ваш телефон', 'gcal.upgrade_required': 'Google Календар вимагає план Pro або Ultimate', 'chat.limit_warning': 'Залишилось {n} повідомлень сьогодні', 'chat.limit_reached': 'Ліміт повідомлень вичерпано. Покращте план', 'chat.upgrade': 'Покращити', 'site.member_since': 'З нами з', 'site.rating': 'Рейтинг', 'site.completed_tasks': 'Виконано', 'site.languages': 'Мов', 'site.photos': 'фото', 'site.contact_form': 'Зв\'язатися', 'site.contact_sent': 'Повідомлення надіслано!', 'site.contact_sent_desc': 'Спеціаліст зв\'яжеться з вами найближчим часом', 'site.contact_name': 'Ім\'я', 'site.contact_name_ph': 'Ваше ім\'я', 'site.contact_email_ph': 'your@email.com', 'site.contact_message': 'Повідомлення', 'site.contact_message_ph': 'Опишіть ваше завдання...', 'site.contact_send': 'Надіслати', 'site.share': 'Поділитися', 'site.speaks_languages': 'Розмовляє мовами', 'site.message_sent': 'Повідомлення надіслано!', 'site.message_sent_desc': 'Спеціаліст отримає його в чаті', 'site.message_placeholder': 'Напишіть повідомлення...', 'site.write_to_chat': 'Написати в чат', 'site.auth_required_title': 'Потрібна авторизація', 'site.auth_required_desc': 'Щоб написати в чат, необхідно увійти в акаунт CanHelp.', 'site.auth_login_btn': 'Увійти в акаунт', 'site.auth_contact_form_btn': 'Написати через форму зворотного зв\'язку', 'specialist.services': 'Послуги', 'portfolio.title': 'Портфоліо', 'status.can_help_now': 'Готовий допомогти', 'common.not_found': 'Сторінку не знайдено', 'common.anonymous': 'Анонімно', 'specialist_setup.page_title': 'Налаштування профілю спеціаліста', 'specialist_setup.step_of': 'Крок {current} з {total}', 'specialist_setup.next': 'Далі', 'specialist_setup.back': 'Назад', 'specialist_setup.skip': 'Пропустити', 'specialist_setup.finish': 'Завершити', 'specialist_setup.go_to_profile': 'Перейти в профіль', 'specialist_setup.browse_tasks': 'Знайти завдання', 'specialist_setup.step1.title': 'Ласкаво просимо!', 'specialist_setup.step1.subtitle': 'Давайте налаштуємо ваш профіль', 'specialist_setup.step1.desc': 'Повний профіль допомагає знаходити більше клієнтів. Слідуйте крокам, щоб створити ідеальний профіль спеціаліста.', 'specialist_setup.step1.what_next': 'Що ми зробимо:', 'specialist_setup.step1.item1': 'Заповнимо основну інформацію', 'specialist_setup.step1.item2': 'Створимо картку послуги', 'specialist_setup.step1.item3': 'Додамо навички і категорії', 'specialist_setup.step1.item4': 'Оберемо географію обслуговування', 'specialist_setup.step1.item5': 'Завантажимо фото портфоліо', 'specialist_setup.step2.title': 'Базовий профіль', 'specialist_setup.step2.subtitle': 'Розкажіть про себе', 'specialist_setup.step2.bio_label': 'Про себе', 'specialist_setup.step2.bio_placeholder': 'Опишіть ваш досвід, послуги які ви пропонуєте...', 'specialist_setup.step2.phone_label': 'Телефон', 'specialist_setup.step2.phone_placeholder': '+30 6900000000', 'specialist_setup.step2.photo_label': 'Фото профілю', 'specialist_setup.step2.photo_btn': 'Завантажити фото', 'specialist_setup.step2.photo_uploading': 'Завантаження...', 'specialist_setup.step2.photo_hint': 'Відображається у вашому профілі', 'specialist_setup.step3.title': 'Картка послуги', 'specialist_setup.step3.subtitle': 'Створіть вашу першу картку послуги', 'specialist_setup.step3.title_label': 'Назва картки', 'specialist_setup.step3.title_placeholder': 'Напр. Сантехнік, Електрик, Прибирання...', 'specialist_setup.step3.desc_label': 'Опис', 'specialist_setup.step3.desc_placeholder': 'Детально опишіть що ви пропонуєте, досвід, переваги...', 'specialist_setup.step3.title_required': 'Назва обов\'язкова', 'specialist_setup.step4.title': 'Навички і категорії', 'specialist_setup.step4.subtitle': 'Додайте навички і виберіть категорії', 'specialist_setup.step4.skills_label': 'Навички', 'specialist_setup.step4.skills_placeholder': 'Напр. Монтаж труб...', 'specialist_setup.step4.skills_add': 'Додати', 'specialist_setup.step4.categories_label': 'Категорії', 'specialist_setup.step5.title': 'Географія обслуговування', 'specialist_setup.step5.subtitle': 'Де ви надаєте послуги?', 'specialist_setup.step5.hint': 'Виберіть міста або конкретні райони', 'specialist_setup.done.title': 'Ваш профіль готовий!', 'specialist_setup.done.subtitle': 'Вітаємо! Профіль налаштовано', 'specialist_setup.done.desc': 'Тепер ви можете отримувати замовлення від клієнтів. Знайдіть завдання, що відповідають вашим навичкам.', 'support.title': 'Підтримка', 'support.type.label': 'Тип звернення', 'support.type.bug': 'Помилка', 'support.type.suggestion': 'Пропозиція', 'support.type.other': 'Інше', 'support.subject': 'Тема', 'support.subject.placeholder': 'Коротко опишіть проблему...', 'support.body': 'Повідомлення', 'support.body.placeholder': 'Детально опишіть проблему або пропозицію...', 'support.submit': 'Надіслати', 'support.cancel': 'Скасувати', 'support.error': 'Помилка надсилання. Спробуйте ще раз.', 'support.sent.title': 'Запит отримано!', 'support.sent.body': 'Ми відповімо на ваш email якнайшвидше.', 'support.sent.close': 'Закрити', 'admin.tab.support': 'Підтримка', 'admin.tab.backup': 'Резервні копії', 'admin.tab.translations': 'Переклади', 'admin.tab.dbcheck': 'Перевірка БД', 'admin.tab.balances': 'Баланс', 'admin.tab.push': 'Push', 'admin.tab.referrals': 'Реферали', 'admin.search': 'Пошук', 'admin.noData': 'Немає даних', 'admin.cat.order': 'Порядок', 'admin.cat.skills': 'Навички', 'admin.plans.form.max_tasks': 'Макс. завдань', 'admin.settings.referral.shared_section': 'Спільні налаштування рефералів', 'admin.settings.seo.title': 'SEO налаштування', 'admin.backup.title': 'Резервні копії', 'admin.backup.tables': 'Таблиці', 'admin.backup.exportAll': 'Експорт всього', 'admin.backup.importAll': 'Імпорт всього', 'admin.backup.exportTable': 'Експорт таблиці', 'admin.backup.importTable': 'Імпорт таблиці', 'admin.backup.exporting': 'Експорт...', 'admin.backup.importing': 'Імпорт...', 'admin.backup.exportSuccess': 'Експорт завершено', 'admin.backup.importSuccess': 'Імпорт завершено', 'admin.backup.autoBackup': 'Автобекап', 'admin.backup.autoBackupDesc': 'Автоматичний щоденний бекап', 'admin.backup.storedBackups': 'Збережені бекапи', 'admin.backup.noStoredBackups': 'Збережених бекапів немає', 'admin.backup.restore': 'Відновити', 'admin.backup.restoreConfirm': 'Відновити з бекапу?', 'admin.backup.restoreSuccess': 'Відновлення завершено', 'admin.backup.restoring': 'Відновлення...', 'admin.backup.date': 'Дата', 'admin.backup.size': 'Розмір', 'admin.backup.today': 'Сьогодні', 'admin.backup.yesterday': 'Вчора', 'admin.balance.col.operation': 'Операція', 'admin.balance.col.amount': 'Сума', 'admin.balance.col.result': 'Баланс', 'admin.balance.col.description': 'Опис', 'admin.balance.col.date': 'Дата', 'admin.balance.empty': 'Записів поки немає', 'admin.balance.filter.all': 'Всі операції', 'admin.balance.filter.user_id': 'Фільтр за userId', 'admin.balance.kind.topup': 'Поповнення', 'admin.balance.kind.plan_purchase': 'Списання за тариф', 'admin.balance.kind.admin_topup': 'Поповнення адміном', 'admin.balance.kind.admin_adjustment': 'Коригування', 'admin.support.search': 'Пошук', 'admin.support.all_statuses': 'Всі статуси', 'admin.support.all_types': 'Всі типи', 'admin.support.none': 'Звернень немає', 'admin.support.reply': 'Відповісти', 'admin.support.reply_placeholder': 'Введіть відповідь...', 'admin.support.send_reply': 'Надіслати відповідь', 'admin.support.cancel': 'Скасувати', 'admin.support.close': 'Закрити', 'admin.support.status.open': 'Відкрито', 'admin.support.status.in_progress': 'В роботі', 'admin.support.status.resolved': 'Вирішено', 'admin.support.status.closed': 'Закрито', 'admin.support.your_reply': 'Ваша відповідь', 'admin.user_edit.visibility_requirements.title': 'Профіль поки не потрапляє в «Пропозиції»', 'admin.user_edit.visibility_requirements.hint': 'Потрібно виконати умови видимості:', 'admin.user_edit.visibility_requirements.bio': 'Заповнити опис (bio)', 'admin.user_edit.visibility_requirements.published_card': 'Опублікувати хоча б одну картку', 'admin.user_edit.visibility_requirements.categories': 'Вказати категорію в опублікованій картці', 'admin.user_edit.visibility_requirements.locations': 'Вказати локацію в опублікованій картці', 'auto_response.desc': 'Автоматично відповідати на відповідні завдання', 'auto_response.budget_range': 'Бюджет завдання', 'auto_response.message_placeholder': 'Вітаю! Я можу допомогти з цим завданням...', 'profile.background.title': 'Фон шапки профілю', 'profile.background.hint': 'Показується в шапці публічного профілю на web і в мобільному застосунку.', 'profile.photo.uploading': 'Завантаження...', 'profile.balance.history': 'Архів операцій', 'profile.balance.history.last': 'Останні операції', 'profile.balance.history.empty': 'Операцій поки немає', 'profile.balance.history.balance_after': 'Баланс після', 'profile.balance.history.kind.topup': 'Поповнення балансу', 'profile.balance.history.kind.plan_purchase': 'Списання за тариф', 'profile.balance.history.kind.admin_topup': 'Поповнення адміністратором', 'profile.balance.history.kind.admin_adjustment': 'Коригування адміністратором', 'profile.plan_history.title': 'Історія тарифного плану', 'profile.plan_history.empty': 'Історія змін тарифу поки порожня', 'profile.plan_history.expires': 'До', 'profile.plan_history.days': 'днів', 'profile.plan_history.event.activated': 'Активовано', 'profile.plan_history.event.renewed': 'Продовжено', 'profile.plan_history.event.downgraded': 'Понижено', 'profile.plan_history.event.referral_reward': 'Реферальна нагорода', 'profile.plan_history.event.admin_change': 'Змінено адміністратором', 'profile.plan_history.event.expired': 'Закінчився', 'profile.show_contact_desc': 'Дозволяє клієнтам зв’язатися напряму', 'profile.site.visible.price_list': 'Прайслист', 'site.pricelist': 'Прайслист', 'status.plan_required': 'Статус недоступний на поточному тарифі', 'status.admin_not_applicable': 'Для акаунта адміністратора користувацький статус не застосовується' } }; function getTranslations(locale) { const t = translations[locale] ?? translations.el; return (key, fallback)=>t[key] ?? translations.el[key] ?? fallback ?? key; } /***/ }), /***/ 13260: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ CI: () => (/* binding */ signOut), /* harmony export */ Hh: () => (/* binding */ signUp), /* harmony export */ Jv: () => (/* binding */ signIn), /* harmony export */ wV: () => (/* binding */ useSession), /* harmony export */ yK: () => (/* binding */ authClient) /* harmony export */ }); /* harmony import */ var better_auth_react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69183); const API_URL = "https://api.canhelp.gr" || 0; const authClient = (0,better_auth_react__WEBPACK_IMPORTED_MODULE_0__/* .createAuthClient */ .M)({ baseURL: API_URL }); const { signIn, signOut, signUp, useSession } = authClient; /***/ }), /***/ 14276: /***/ (() => { /***/ }), /***/ 14365: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; // EXPORTS __webpack_require__.d(__webpack_exports__, { Header: () => (/* binding */ Header) }); // EXTERNAL MODULE: ../../node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.js var react_jsx_runtime = __webpack_require__(78157); // EXTERNAL MODULE: ../../node_modules/next/dist/client/app-dir/link.js var app_dir_link = __webpack_require__(94496); var link_default = /*#__PURE__*/__webpack_require__.n(app_dir_link); // EXTERNAL MODULE: ../../node_modules/next/dist/api/navigation.js var navigation = __webpack_require__(71159); // EXTERNAL MODULE: ./src/lib/auth.ts var auth = __webpack_require__(13260); // EXTERNAL MODULE: ./src/context/locale.tsx var context_locale = __webpack_require__(96484); // EXTERNAL MODULE: ./src/lib/formatName.ts var formatName = __webpack_require__(48178); // EXTERNAL MODULE: ../../node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js var react = __webpack_require__(31768); // EXTERNAL MODULE: ./src/lib/translations.ts var translations = __webpack_require__(12998); ;// ./src/components/LanguageSwitcher.tsx /* __next_internal_client_entry_do_not_use__ LanguageSwitcher auto */ function LanguageSwitcher() { const { locale, setLocale } = (0,context_locale/* useLocale */.Y)(); const [open, setOpen] = (0,react.useState)(false); const ref = (0,react.useRef)(null); const current = translations/* LOCALES */.YZ.find((l)=>l.code === locale) ?? translations/* LOCALES */.YZ[0]; // Close on outside click process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react.useEffect)(()=>{ function handleClick(e) { if (ref.current && !ref.current.contains(e.target)) setOpen(false); } document.addEventListener('mousedown', handleClick); return ()=>document.removeEventListener('mousedown', handleClick); }, []); return /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { ref: ref, className: "relative", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("button", { onClick: ()=>setOpen(!open), className: "flex items-center gap-1.5 px-2.5 py-1.5 rounded-lg border border-gray-200 hover:border-green-400 hover:bg-green-50 transition text-sm font-medium text-gray-700", "aria-label": "Change language", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", { children: current.code.toUpperCase() }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: `w-3.5 h-3.5 text-gray-400 transition-transform ${open ? 'rotate-180' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19 9l-7 7-7-7" }) }) ] }), open && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("div", { className: "absolute right-0 mt-1 w-40 bg-white border border-gray-200 rounded-xl shadow-lg z-50 overflow-hidden", children: translations/* LOCALES */.YZ.map((loc)=>/*#__PURE__*/ (0,react_jsx_runtime.jsxs)("button", { onClick: ()=>{ setLocale(loc.code); setOpen(false); }, className: `w-full flex items-center gap-2.5 px-3.5 py-2.5 text-sm hover:bg-green-50 transition ${locale === loc.code ? 'bg-green-50 text-green-700 font-medium' : 'text-gray-700'}`, children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", { children: loc.label }), locale === loc.code && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-3.5 h-3.5 ml-auto text-green-600", fill: "currentColor", viewBox: "0 0 20 20", children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { fillRule: "evenodd", d: "M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z", clipRule: "evenodd" }) }) ] }, loc.code)) }) ] }); } // EXTERNAL MODULE: ./src/lib/api.ts var api = __webpack_require__(91864); // EXTERNAL MODULE: ../../node_modules/socket.io-client/build/esm-debug/index.js + 30 modules var esm_debug = __webpack_require__(44826); ;// ./src/hooks/useEffectiveRole.ts /* __next_internal_client_entry_do_not_use__ useEffectiveRole auto */ function readPreviewRole() { if (typeof document === 'undefined') return null; const m = document.cookie.match(/(?:^|;\s*)canhelp_preview_role=([^;]+)/); return m?.[1] ?? null; } /** * Returns the effective role for the current user. * For admins, respects the `canhelp_preview_role` cookie set by AdminRolePreview widget. * Updates reactively when the widget dispatches `canhelp:preview-role`. */ function useEffectiveRole() { const { data: session } = (0,auth/* useSession */.wV)(); const userRole = session?.user?.role; const isAdmin = userRole === 'admin'; const [previewRole, setPreviewRole] = (0,react.useState)(null); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react.useEffect)(()=>{ if (!isAdmin) return; setPreviewRole(readPreviewRole()); const sync = ()=>setPreviewRole(readPreviewRole()); window.addEventListener('canhelp:preview-role', sync); document.addEventListener('visibilitychange', sync); return ()=>{ window.removeEventListener('canhelp:preview-role', sync); document.removeEventListener('visibilitychange', sync); }; }, [ isAdmin ]); if (!userRole) return null; if (isAdmin && previewRole) return previewRole; return userRole; } // EXTERNAL MODULE: ../../node_modules/next/dist/api/app-dynamic.js var app_dynamic = __webpack_require__(47262); ;// ./src/components/Header.tsx /* __next_internal_client_entry_do_not_use__ Header auto */ const SupportModal = (0,app_dynamic["default"])(async ()=>{ true && /*require.resolve*/(null /* weak dependency, without id */); }, { loadableGenerated: { modules: [ "components/Header.tsx -> " + "./SupportModal" ] }, ssr: false }); const API_URL = "https://api.canhelp.gr" || 0; function Header() { const router = (0,navigation.useRouter)(); const pathname = (0,navigation.usePathname)(); const { data: session } = (0,auth/* useSession */.wV)(); const { t, locale } = (0,context_locale/* useLocale */.Y)(); const [menuOpen, setMenuOpen] = (0,react.useState)(false); const [profileOpen, setProfileOpen] = (0,react.useState)(false); const [supportOpen, setSupportOpen] = (0,react.useState)(false); const [unreadNotif, setUnreadNotif] = (0,react.useState)(0); const [unreadChat, setUnreadChat] = (0,react.useState)(0); const [msgToast, setMsgToast] = (0,react.useState)(null); const [planTier, setPlanTier] = (0,react.useState)(null); const profileRef = (0,react.useRef)(null); const headerRef = (0,react.useRef)(null); const toastTimer = (0,react.useRef)(null); const pathnameRef = (0,react.useRef)(pathname); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react.useEffect)(()=>{ pathnameRef.current = pathname; }, [ pathname ]); // Close dropdowns on outside click process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react.useEffect)(()=>{ function handleClick(e) { if (profileRef.current && !profileRef.current.contains(e.target)) { setProfileOpen(false); } } document.addEventListener('mousedown', handleClick); return ()=>document.removeEventListener('mousedown', handleClick); }, []); const isAdmin = session?.user?.role === 'admin'; const effectiveRole = useEffectiveRole(); const isSpecialist = effectiveRole === 'specialist'; const isActive = (href, exact = false)=>exact ? pathname === href : pathname === href || pathname.startsWith(href + '/'); const navCls = (href, exact = false)=>`font-medium text-sm transition ${isActive(href, exact) ? 'text-green-600' : 'text-gray-600 hover:text-green-600'}`; const mobileNavCls = (href, exact = false)=>`flex items-center gap-2 font-medium py-1 ${isActive(href, exact) ? 'text-green-600' : 'text-gray-700'}`; // Reset chat badge when entering chat process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react.useEffect)(()=>{ if (pathname === '/chat') setUnreadChat(0); }, [ pathname ]); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react.useEffect)(()=>{ if (!session) return; const socket = (0,esm_debug.io)(API_URL, { withCredentials: true, transports: [ 'websocket', 'polling' ] }); socket.on('new_message', (msg)=>{ if (pathnameRef.current === '/chat') return; setUnreadChat((c)=>c + 1); if (toastTimer.current) clearTimeout(toastTimer.current); setMsgToast(msg); toastTimer.current = setTimeout(()=>setMsgToast(null), 5000); }); return ()=>{ socket.disconnect(); if (toastTimer.current) clearTimeout(toastTimer.current); }; }, [ session ]); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react.useEffect)(()=>{ if (!session) { setUnreadNotif(0); return; } const fetch = ()=>(0,api/* getUnreadCount */.$M)().then((r)=>setUnreadNotif(r.count)).catch(()=>{}); fetch(); const timer = setInterval(fetch, 30000); return ()=>clearInterval(timer); }, [ session ]); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react.useEffect)(()=>{ if (!session) { setPlanTier(null); return; } (0,api/* getMyDashboard */.H)().then((d)=>setPlanTier(d.plan?.tier ?? null)).catch(()=>{}); }, [ session ]); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react.useEffect)(()=>{ const onScroll = ()=>{ if (!headerRef.current) return; if (window.scrollY > 40) { headerRef.current.classList.add('header-shrink'); } else { headerRef.current.classList.remove('header-shrink'); } }; window.addEventListener('scroll', onScroll); return ()=>window.removeEventListener('scroll', onScroll); }, []); return /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("header", { ref: headerRef, className: "header-base bg-white border-b border-gray-200 sticky top-0 z-50 transition-all duration-300", children: /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "flex items-center justify-between h-16 header-content transition-all duration-300", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/", className: "flex items-center gap-2 shrink-0", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("img", { src: "/logo.png", alt: "CanHelp", className: "w-8 h-8 object-contain" }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", { className: "logo-text text-2xl font-bold text-green-600 transition-all duration-300", children: "CanHelp" }) ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("nav", { className: "hidden md:flex items-center gap-5 ml-auto", children: [ isSpecialist ? /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/tasks", className: navCls('/tasks'), children: t('nav.find_tasks') }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/dashboard", className: navCls('/dashboard'), children: t('nav.dashboard') }) ] }) : /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/tasks/new", className: navCls('/tasks/new', true), children: t('dashboard.new_task') }), " ", /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/tasks", className: navCls('/tasks'), children: t('nav.tasks') }), " ", /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/specialists", className: navCls('/specialists'), children: t('nav.specialists') }) ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/pricing", className: navCls('/pricing', true), children: t('nav.pricing', 'Pricing') }), session ? /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/notifications", className: "relative text-gray-600 hover:text-gray-900 flex items-center", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: `w-5 h-5 ${unreadNotif > 0 ? 'text-green-600' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75v-.7V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0" }) }), unreadNotif > 0 && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", { className: "absolute -top-1.5 -right-1.5 min-w-[16px] h-4 px-0.5 bg-red-500 text-white text-[10px] font-bold rounded-full flex items-center justify-center leading-none", children: unreadNotif > 99 ? '99+' : unreadNotif }) ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/chat", className: "relative text-gray-600 hover:text-gray-900 flex items-center", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: `w-5 h-5 ${unreadChat > 0 ? 'text-green-500' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 10h.01M12 10h.01M16 10h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z" }) }), unreadChat > 0 && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", { className: "absolute -top-1.5 -right-1.5 min-w-[16px] h-4 px-0.5 bg-green-500 text-white text-[10px] font-bold rounded-full flex items-center justify-center leading-none", children: unreadChat > 99 ? '99+' : unreadChat }) ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "relative", ref: profileRef, children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("button", { onClick: ()=>setProfileOpen(!profileOpen), className: "flex items-center gap-1.5 text-sm font-medium text-gray-600 hover:text-green-600", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", { className: "truncate max-w-[100px]", children: (0,formatName/* formatShortName */.H)(session.user.firstName, session.user.lastName, session.user.name) }), planTier === 'pro' && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", { className: "inline-flex items-center px-1.5 py-0.5 rounded-full text-[10px] font-bold bg-green-100 text-green-700 leading-none", children: "Pro" }), planTier === 'ultimate' && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", { className: "inline-flex items-center px-1.5 py-0.5 rounded-full text-[10px] font-bold bg-gradient-to-r from-amber-400 via-yellow-400 to-amber-400 text-gray-900 shadow-sm shadow-amber-300/50 leading-none", children: "★" }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19 9l-7 7-7-7" }) }) ] }), profileOpen && /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "absolute right-0 mt-2 w-52 bg-white border border-gray-200 rounded-xl shadow-lg py-1 z-50", children: [ isSpecialist ? /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/tasks/new", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 4v16m8-8H4" }) }), t('nav.new_task') ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/specialists", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z" }) }), t('nav.specialists') ] }) ] }) : /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/notifications", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: `w-4 h-4 shrink-0 ${unreadNotif > 0 ? 'text-green-600' : 'text-gray-400'}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75v-.7V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0" }) }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("span", { className: "flex items-center gap-1.5", children: [ t('nav.notifications'), unreadNotif > 0 && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", { className: "px-1.5 py-0.5 bg-red-500 text-white text-[10px] font-bold rounded-full leading-none", children: unreadNotif > 99 ? '99+' : unreadNotif }) ] }) ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/chat", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: `w-4 h-4 shrink-0 ${unreadChat > 0 ? 'text-green-500' : 'text-gray-400'}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 10h.01M12 10h.01M16 10h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z" }) }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("span", { className: "flex items-center gap-1.5", children: [ t('nav.chat'), unreadChat > 0 && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", { className: "px-1.5 py-0.5 bg-green-500 text-white text-[10px] font-bold rounded-full leading-none", children: unreadChat > 99 ? '99+' : unreadChat }) ] }) ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/dashboard", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" }) }), t('nav.dashboard') ] }) ] }), (isSpecialist || isAdmin) && /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/schedule", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" }) }), t('nav.schedule') ] }), isAdmin && /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/admin", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z" }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z" }) ] }), t('nav.admin') ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/profile", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z" }) }), t('nav.profile') ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/favorites", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z" }) }), t('nav.favorites') ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("hr", { className: "my-1 border-gray-100" }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("button", { className: "w-full flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-green-50", onClick: ()=>{ setProfileOpen(false); setSupportOpen(true); }, children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M18.364 5.636l-3.536 3.536m0 5.656l3.536 3.536M9.172 9.172L5.636 5.636m3.536 9.192l-3.536 3.536M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-5 0a4 4 0 11-8 0 4 4 0 018 0z" }) }), t('support.title') ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("hr", { className: "my-1 border-gray-100" }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("button", { className: "w-full flex items-center gap-2.5 px-4 py-2 text-sm text-red-500 hover:bg-red-50", onClick: ()=>{ setProfileOpen(false); (0,auth/* signOut */.CI)().then(()=>{ window.location.href = '/'; }); }, children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1" }) }), t('nav.logout') ] }) ] }) ] }) ] }) : /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/login", className: "text-gray-600 hover:text-green-600 font-medium text-sm", children: t('nav.login') }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/register", className: "bg-green-600 text-white px-4 py-2 rounded-lg hover:bg-green-700 font-medium text-sm", children: t('nav.register') }) ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)(LanguageSwitcher, {}) ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "md:hidden flex items-center gap-2", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)(LanguageSwitcher, {}), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("button", { className: "p-2", onClick: ()=>setMenuOpen(!menuOpen), "aria-label": "Toggle menu", children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-5 h-5 text-gray-600", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: menuOpen ? /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6 18L18 6M6 6l12 12" }) : /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4 6h16M4 12h16M4 18h16" }) }) }) ] }) ] }), menuOpen && /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "md:hidden py-4 border-t border-gray-100 flex flex-col gap-3", children: [ isSpecialist ? /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/tasks", className: mobileNavCls('/tasks'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" }) }), t('nav.find_tasks') ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/dashboard", className: mobileNavCls('/dashboard'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" }) }), t('nav.dashboard') ] }) ] }) : /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/tasks/new", className: mobileNavCls('/tasks/new', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 4v16m8-8H4" }) }), t('nav.new_task') ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/tasks", className: mobileNavCls('/tasks'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2" }) }), t('nav.tasks') ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/specialists", className: mobileNavCls('/specialists'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z" }) }), t('nav.specialists') ] }) ] }), session ? /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/chat", className: mobileNavCls('/chat', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: `w-4 h-4 shrink-0 ${unreadChat > 0 ? 'text-green-500' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 10h.01M12 10h.01M16 10h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z" }) }), t('nav.chat'), unreadChat > 0 && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", { className: "ml-1 px-1.5 py-0.5 bg-green-500 text-white text-[10px] font-bold rounded-full", children: unreadChat }) ] }), isSpecialist ? /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/tasks/new", className: mobileNavCls('/tasks/new', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 4v16m8-8H4" }) }), t('nav.new_task') ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/specialists", className: mobileNavCls('/specialists'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z" }) }), t('nav.specialists') ] }) ] }) : /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/notifications", className: mobileNavCls('/notifications', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: `w-4 h-4 shrink-0 ${unreadNotif > 0 ? 'text-green-600' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75v-.7V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0" }) }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("span", { className: "flex items-center gap-1.5", children: [ t('nav.notifications'), unreadNotif > 0 && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", { className: "px-1.5 py-0.5 bg-red-500 text-white text-[10px] font-bold rounded-full", children: unreadNotif > 99 ? '99+' : unreadNotif }) ] }) ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/dashboard", className: mobileNavCls('/dashboard'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" }) }), t('nav.dashboard') ] }) ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/favorites", className: mobileNavCls('/favorites', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z" }) }), t('nav.favorites') ] }), (isSpecialist || isAdmin) && /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/schedule", className: mobileNavCls('/schedule', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 text-gray-400", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" }) }), t('nav.schedule') ] }), isAdmin && /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/admin", className: mobileNavCls('/admin'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("svg", { className: "w-4 h-4 text-gray-400", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z" }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z" }) ] }), t('nav.admin') ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)((link_default()), { href: "/profile", className: mobileNavCls('/profile', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4 text-gray-400", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z" }) }), t('nav.profile') ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("button", { onClick: ()=>{ setMenuOpen(false); (0,auth/* signOut */.CI)().then(()=>{ window.location.href = '/'; }); }, className: "flex items-center gap-2 text-left text-red-500 py-1 font-medium", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { className: "w-4 h-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1" }) }), t('nav.logout') ] }) ] }) : /*#__PURE__*/ (0,react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/login", className: "text-gray-700 font-medium py-1", onClick: ()=>setMenuOpen(false), children: t('nav.login') }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/register", className: "text-green-600 font-medium py-1", onClick: ()=>setMenuOpen(false), children: t('nav.register') }) ] }) ] }) ] }) }), msgToast && /*#__PURE__*/ (0,react_jsx_runtime.jsx)("div", { className: "fixed bottom-5 right-5 z-[200] max-w-sm w-full", children: /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "bg-white border border-gray-200 rounded-xl shadow-xl p-4 flex items-start gap-3 animate-fade-in", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", { className: "text-2xl shrink-0", children: "\uD83D\uDCAC" }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "flex-1 min-w-0", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("p", { className: "font-semibold text-gray-900 text-sm", children: t('chat.toast_title') }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("p", { className: "text-xs text-gray-500 truncate mt-0.5", children: msgToast.body }) ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "flex flex-col items-end gap-2 shrink-0", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("button", { onClick: ()=>setMsgToast(null), className: "text-gray-400 hover:text-gray-600 text-lg leading-none", "aria-label": "close", children: "\xd7" }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: `/chat?room=${msgToast.roomId}`, onClick: ()=>setMsgToast(null), className: "text-xs text-green-600 hover:underline font-medium", children: t('chat.toast_open') }) ] }) ] }) }), supportOpen && /*#__PURE__*/ (0,react_jsx_runtime.jsx)(SupportModal, { onClose: ()=>setSupportOpen(false) }) ] }); } /***/ }), /***/ 15043: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; // EXPORTS __webpack_require__.d(__webpack_exports__, { Footer: () => (/* binding */ Footer) }); // EXTERNAL MODULE: ../../node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.js var react_jsx_runtime = __webpack_require__(78157); // EXTERNAL MODULE: ./src/context/locale.tsx var locale = __webpack_require__(96484); // EXTERNAL MODULE: ../../node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js var react = __webpack_require__(31768); // EXTERNAL MODULE: ../../node_modules/next/dist/client/app-dir/link.js var app_dir_link = __webpack_require__(94496); var link_default = /*#__PURE__*/__webpack_require__.n(app_dir_link); ;// ./src/components/SocialIcons.tsx const ICONS = [ { key: 'telegram', label: 'Telegram', hoverClass: 'hover:text-sky-500', svg: '' }, { key: 'instagram', label: 'Instagram', hoverClass: 'hover:text-pink-500', svg: '' }, { key: 'facebook', label: 'Facebook', hoverClass: 'hover:text-green-600', svg: '' }, { key: 'twitter', label: 'X', hoverClass: 'hover:text-gray-900', svg: '' }, { key: 'youtube', label: 'YouTube', hoverClass: 'hover:text-red-600', svg: '' }, { key: 'tiktok', label: 'TikTok', hoverClass: 'hover:text-black', svg: '' }, { key: 'whatsapp', label: 'WhatsApp', hoverClass: 'hover:text-green-500', svg: '' }, { key: 'viber', label: 'Viber', hoverClass: 'hover:text-purple-600', svg: '' } ]; function SocialIcons({ className = '', links }) { const active = ICONS.filter(({ key })=>links?.[key]); if (active.length === 0) return null; return /*#__PURE__*/ (0,react_jsx_runtime.jsx)("div", { className: `flex gap-4 flex-wrap ${className}`, children: active.map(({ key, label, hoverClass, svg })=>/*#__PURE__*/ (0,react_jsx_runtime.jsx)("a", { href: links[key], target: "_blank", rel: "noopener noreferrer", "aria-label": label, className: `text-gray-500 transition ${hoverClass}`, children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)("svg", { width: "22", height: "22", viewBox: "0 0 24 24", fill: "currentColor", dangerouslySetInnerHTML: { __html: svg } }) }, key)) }); } ;// ./src/components/Footer.tsx /* __next_internal_client_entry_do_not_use__ Footer auto */ const API = "https://api.canhelp.gr" || 0; function Footer() { const { t } = (0,locale/* useLocale */.Y)(); const year = new Date().getFullYear(); const [socialLinks, setSocialLinks] = (0,react.useState)({}); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react.useEffect)(()=>{ fetch(`${API}/api/admin/social-public`).then((r)=>r.ok ? r.json() : {}).then((kv)=>{ const links = {}; for (const [k, v] of Object.entries(kv)){ if (v) links[k.replace('social.', '')] = v; } setSocialLinks(links); }).catch(()=>{}); }, []); return /*#__PURE__*/ (0,react_jsx_runtime.jsx)("footer", { className: "bg-white border-t border-gray-200 mt-16", children: /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "flex flex-col md:flex-row justify-between items-start gap-10", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "flex-1 min-w-[200px] flex flex-col items-start", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("span", { className: "logo-text text-3xl text-green-700 font-bold mb-2", children: "CanHelp" }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("p", { className: "text-base text-gray-600 mb-4", children: t('footer.slogan') }) ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "flex-1 min-w-[180px]", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("h3", { className: "text-lg font-semibold text-gray-900 mb-3", children: t('footer.links') }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("ul", { className: "space-y-2", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("li", { children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/", className: "hover:text-green-600 transition", children: t('nav.home') }) }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("li", { children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/tasks", className: "hover:text-green-600 transition", children: t('nav.tasks') }) }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("li", { children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/specialists", className: "hover:text-green-600 transition", children: t('nav.specialists') }) }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("li", { children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/pricing", className: "hover:text-green-600 transition", children: t('nav.pricing') }) }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("li", { children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/support", className: "hover:text-green-600 transition", children: t('support.title') }) }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("li", { children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/privacy", className: "hover:text-green-600 transition", children: t('nav.privacy') }) }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("li", { children: /*#__PURE__*/ (0,react_jsx_runtime.jsx)((link_default()), { href: "/delete-account", className: "hover:text-red-500 transition", children: t('nav.delete_account') }) }) ] }) ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "flex-1 min-w-[180px]", children: [ /*#__PURE__*/ (0,react_jsx_runtime.jsx)("h3", { className: "text-lg font-semibold text-gray-900 mb-3", children: t('footer.socials') }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)("p", { className: "text-gray-500 text-sm mb-2", children: "info@canhelp.gr" }), /*#__PURE__*/ (0,react_jsx_runtime.jsx)(SocialIcons, { className: "mt-2", links: socialLinks }) ] }) ] }), /*#__PURE__*/ (0,react_jsx_runtime.jsxs)("div", { className: "mt-10 border-t border-gray-100 pt-6 text-center text-gray-400 text-sm", children: [ "\xa9 ", year, " CanHelp. ", t('footer.rights') ] }) ] }) }); } /***/ }), /***/ 20138: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ LocaleProvider: () => (/* binding */ LocaleProvider) /* harmony export */ }); /* unused harmony export useLocale */ /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25459); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__); // This file is generated by the Webpack next-flight-loader. const LocaleProvider = (0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)( function() { throw new Error("Attempted to call LocaleProvider() from the server but LocaleProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/context/locale.tsx", "LocaleProvider", );const useLocale = (0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)( function() { throw new Error("Attempted to call useLocale() from the server but useLocale is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/context/locale.tsx", "useLocale", ); /***/ }), /***/ 21046: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ScrollToTopButton: () => (/* binding */ ScrollToTopButton) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(78157); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(31768); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* __next_internal_client_entry_do_not_use__ ScrollToTopButton auto */ function ScrollToTopButton() { const [visible, setVisible] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{ const onScroll = ()=>{ setVisible(window.scrollY > 200); }; window.addEventListener('scroll', onScroll); return ()=>window.removeEventListener('scroll', onScroll); }, []); return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { className: `scroll-to-top-btn${visible ? ' visible' : ''}`, "aria-label": "Back to top", onClick: ()=>window.scrollTo({ top: 0, behavior: 'smooth' }), children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path", { d: "M10 16V4M10 4L4 10M10 4L16 10", stroke: "white", strokeWidth: "2.8", strokeLinecap: "round", strokeLinejoin: "round" }) }) }); } /***/ }), /***/ 28222: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ AdminRolePreview: () => (/* binding */ AdminRolePreview) /* harmony export */ }); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25459); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__); // This file is generated by the Webpack next-flight-loader. const AdminRolePreview = (0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)( function() { throw new Error("Attempted to call AdminRolePreview() from the server but AdminRolePreview is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/components/AdminRolePreview.tsx", "AdminRolePreview", ); /***/ }), /***/ 29072: /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 28222)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 39348)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 67674)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 32948)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 20138)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 1697)); /***/ }), /***/ 30460: /***/ (() => { /* (ignored) */ /***/ }), /***/ 32948: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ScrollToTopButton: () => (/* binding */ ScrollToTopButton) /* harmony export */ }); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25459); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__); // This file is generated by the Webpack next-flight-loader. const ScrollToTopButton = (0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)( function() { throw new Error("Attempted to call ScrollToTopButton() from the server but ScrollToTopButton is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/components/ScrollToTopButton.tsx", "ScrollToTopButton", ); /***/ }), /***/ 33506: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ NotFound) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5939); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3498); /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_1__); function NotFound() { return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "min-h-screen flex items-center justify-center text-center px-4", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h1", { className: "text-8xl font-bold text-green-600 mb-4", children: "404" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { className: "text-xl text-gray-700 mb-6", children: "Η σελίδα δεν βρέθηκε" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)((next_link__WEBPACK_IMPORTED_MODULE_1___default()), { href: "/", className: "bg-green-600 text-white px-6 py-3 rounded-xl font-semibold hover:bg-green-700", children: "Επιστροφή στην Αρχική" }) ] }) }); } /***/ }), /***/ 38800: /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 12696)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 15043)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 14365)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 21046)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 96484)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 56003)); /***/ }), /***/ 39348: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Footer: () => (/* binding */ Footer) /* harmony export */ }); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25459); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__); // This file is generated by the Webpack next-flight-loader. const Footer = (0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)( function() { throw new Error("Attempted to call Footer() from the server but Footer is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/components/Footer.tsx", "Footer", ); /***/ }), /***/ 45639: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(43560); /* harmony import */ var next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0__); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (async (props) => { const imageData = {"type":"image/png","sizes":"1024x1024"} const imageUrl = (0,next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0__.fillMetadataSegment)(".", await props.params, "apple-icon.png") return [{ ...imageData, url: imageUrl + "?5d298b9734cd2682", }] }); /***/ }), /***/ 47570: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ RootLayout), /* harmony export */ generateMetadata: () => (/* binding */ generateMetadata) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5939); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var next_headers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(56057); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(11110); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _globals_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(14276); /* harmony import */ var _globals_css__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_globals_css__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _components_Header__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(67674); /* harmony import */ var _components_Footer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(39348); /* harmony import */ var _context_locale__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(20138); /* harmony import */ var _context_location__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(1697); /* harmony import */ var _components_ScrollToTopButton__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(32948); /* harmony import */ var _components_AdminRolePreview__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(28222); // React.cache() deduplicates identical calls within the same request render pass const fetchSeoSettings = (0,react__WEBPACK_IMPORTED_MODULE_2__.cache)(async ()=>{ try { const apiBase = process.env.INTERNAL_API_URL || 'http://localhost:4000'; const res = await fetch(`${apiBase}/api/admin/seo-public`, { next: { revalidate: 60 } }); if (!res.ok) return {}; return res.json(); } catch { return {}; } }); async function generateMetadata() { const seo = await fetchSeoSettings(); const cookieStore = await (0,next_headers__WEBPACK_IMPORTED_MODULE_1__/* .cookies */ .UL)(); const rawLocale = cookieStore.get('canhelp_locale')?.value; const locale = [ 'el', 'en', 'ru', 'uk' ].includes(rawLocale ?? '') ? rawLocale : 'el'; const title = seo[`seo.siteTitle.${locale}`] || seo['seo.siteTitle.el'] || seo['seo.siteTitle'] || 'CanHelp — Βρες ειδικό για κάθε δουλειά'; const description = seo[`seo.siteDescription.${locale}`] || seo['seo.siteDescription.el'] || seo['seo.siteDescription'] || 'Η ελληνική πλατφόρμα για online ανάθεση εργασιών. Βρες επαγγελματίες για καθαρισμό, υδραυλικά, μαθήματα και πολλά άλλα.'; return { title, description, keywords: 'εργασίες, ειδικοί, Ελλάδα, freelance, καθαρισμός, υδραυλικά', robots: seo['seo.indexingEnabled'] === 'false' ? 'noindex, nofollow' : undefined }; } async function RootLayout({ children }) { const cookieStore = await (0,next_headers__WEBPACK_IMPORTED_MODULE_1__/* .cookies */ .UL)(); const headerStore = await (0,next_headers__WEBPACK_IMPORTED_MODULE_1__/* .headers */ .b3)(); const pathname = headerStore.get('x-pathname') ?? ''; const isStandalone = pathname.startsWith('/site/'); const rawLocale = cookieStore.get('canhelp_locale')?.value; const locales = [ 'el', 'en', 'uk', 'ru' ]; const initialLocale = locales.includes(rawLocale) ? rawLocale : 'el'; const initialLocation = decodeURIComponent(cookieStore.get('canhelp_location')?.value ?? ''); const seo = await fetchSeoSettings(); const headScripts = seo['seo.headScripts'] ?? ''; const parsedScripts = []; if (headScripts.trim()) { const re = /]*)>([\s\S]*?)<\/script>|]*)\/>/gi; let m; while((m = re.exec(headScripts)) !== null){ const attrs = m[1] ?? m[3] ?? ''; const inline = (m[2] ?? '').trim(); const srcMatch = attrs.match(/src=["']([^"']+)["']/); parsedScripts.push({ src: srcMatch?.[1], async: /\basync\b/i.test(attrs), defer: /\bdefer\b/i.test(attrs), inline: inline || undefined }); } } return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("html", { lang: initialLocale, suppressHydrationWarning: true, children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("head", { children: parsedScripts.map((s, i)=>{ if (s.src) return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("script", { src: s.src, async: s.async, defer: s.defer }, i); if (s.inline) return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("script", { dangerouslySetInnerHTML: { __html: s.inline } }, i); return null; }) }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("body", { children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_context_locale__WEBPACK_IMPORTED_MODULE_6__.LocaleProvider, { initialLocale: initialLocale, children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_context_location__WEBPACK_IMPORTED_MODULE_7__.LocationProvider, { initialSlug: initialLocation, children: !isStandalone ? /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_Header__WEBPACK_IMPORTED_MODULE_4__.Header, {}), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("main", { className: "min-h-screen", children: children }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_ScrollToTopButton__WEBPACK_IMPORTED_MODULE_8__.ScrollToTopButton, {}), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_AdminRolePreview__WEBPACK_IMPORTED_MODULE_9__.AdminRolePreview, {}), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_Footer__WEBPACK_IMPORTED_MODULE_5__.Footer, {}) ] }) : /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("main", { className: "min-h-screen", children: children }) }) }) }) ] }); } /***/ }), /***/ 48178: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ E: () => (/* binding */ shortName), /* harmony export */ H: () => (/* binding */ formatShortName) /* harmony export */ }); /** * Shortens the last name to first letter + period. * "Иван Петров" → "Иван П." * Works with a pre-composed full name string. */ function shortName(fullName) { if (!fullName?.trim()) return '—'; const parts = fullName.trim().split(/\s+/); if (parts.length < 2 || !parts[1]) return parts[0]; return `${parts[0]} ${parts[1][0].toUpperCase()}.`; } /** * Formats separate firstName + lastName fields, shortening the last name. * Falls back to parsing fullName if firstName is not available. */ function formatShortName(firstName, lastName, fallbackName) { if (firstName?.trim()) { const l = lastName?.trim(); return l ? `${firstName.trim()} ${l[0].toUpperCase()}.` : firstName.trim(); } return shortName(fallbackName); } /***/ }), /***/ 49046: /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 94496, 23)); /***/ }), /***/ 56003: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ LocationProvider: () => (/* binding */ LocationProvider), /* harmony export */ z: () => (/* binding */ useLocation) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(78157); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(31768); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(91864); /* __next_internal_client_entry_do_not_use__ LocationProvider,useLocation auto */ const LocationContext = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_1__.createContext)({ locationSlug: '', locationTree: [], locationLoading: true, setLocation: ()=>{}, getLabel: ()=>'' }); function readCookieLocation() { if (typeof document === 'undefined') return ''; const match = document.cookie.match(/(?:^|;\s*)canhelp_location=([^;]+)/); return match?.[1] ? decodeURIComponent(match[1]) : ''; } function LocationProvider({ children, initialSlug = '' }) { const [locationSlug, setLocationSlug] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(initialSlug); const [locationTree, setLocationTree] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]); const [locationLoading, setLocationLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true); // Sync from cookie on client mount process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{ const cookieSlug = readCookieLocation(); setLocationSlug(cookieSlug); }, []); // Load location tree once process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{ (0,_lib_api__WEBPACK_IMPORTED_MODULE_2__/* .getLocations */ .Vs)().then((tree)=>setLocationTree(tree)).catch(()=>{}).finally(()=>setLocationLoading(false)); }, []); const setLocation = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((slug)=>{ setLocationSlug(slug); const encoded = encodeURIComponent(slug); document.cookie = `canhelp_location=${encoded}; path=/; max-age=31536000; SameSite=Lax`; }, []); const getLabel = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((locale)=>{ if (!locationSlug) return ''; for (const city of locationTree){ if (city.slug === locationSlug) return city.names[locale] ?? city.names.el; for (const d of city.children ?? []){ if (d.slug === locationSlug) return d.names[locale] ?? d.names.el; } } return locationSlug; }, [ locationSlug, locationTree ]); return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(LocationContext.Provider, { value: { locationSlug, locationTree, locationLoading, setLocation, getLabel }, children: children }); } function useLocation() { return (0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)(LocationContext); } /***/ }), /***/ 64271: /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 58671, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 56542, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 88248, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 49743, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 96231, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 10959, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 72041, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 95094, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 67487, 23)); /***/ }), /***/ 67674: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Header: () => (/* binding */ Header) /* harmony export */ }); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25459); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__); // This file is generated by the Webpack next-flight-loader. const Header = (0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)( function() { throw new Error("Attempted to call Header() from the server but Header is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/components/Header.tsx", "Header", ); /***/ }), /***/ 72088: /***/ (() => { /* (ignored) */ /***/ }), /***/ 72519: /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 48365, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 64596, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 56186, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 67805, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 27561, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 47569, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 42747, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 56676, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 97225)); /***/ }), /***/ 85998: /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 3498, 23)); /***/ }), /***/ 91864: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ $7: () => (/* binding */ updateCategory), /* harmony export */ $H: () => (/* binding */ acceptOffer), /* harmony export */ $M: () => (/* binding */ getUnreadCount), /* harmony export */ Bb: () => (/* binding */ getMySpecialistCards), /* harmony export */ Bm: () => (/* binding */ getUserRating), /* harmony export */ Bq: () => (/* binding */ getSpecialistCards), /* harmony export */ Br: () => (/* binding */ getAdminNotifLogs), /* harmony export */ C0: () => (/* binding */ applyMyReferral), /* harmony export */ CX: () => (/* binding */ updateAdminSettings), /* harmony export */ Ck: () => (/* binding */ getPriceList), /* harmony export */ Cs: () => (/* binding */ previewPlanChange), /* harmony export */ D1: () => (/* binding */ setAvailabilityRange), /* harmony export */ Em: () => (/* binding */ request), /* harmony export */ F7: () => (/* binding */ getSpecialists), /* harmony export */ F9: () => (/* binding */ getTaskInvite), /* harmony export */ FI: () => (/* binding */ sendTestEmail), /* harmony export */ Fu: () => (/* binding */ getMyTasks), /* harmony export */ GB: () => (/* binding */ deleteTaskAdmin), /* harmony export */ GE: () => (/* binding */ getSkillDedup), /* harmony export */ Gp: () => (/* binding */ getAutoResponseSettings), /* harmony export */ H: () => (/* binding */ getMyDashboard), /* harmony export */ H6: () => (/* binding */ getTaskReviews), /* harmony export */ He: () => (/* binding */ activateUser), /* harmony export */ I: () => (/* binding */ autoTranslateTasks), /* harmony export */ Ic: () => (/* binding */ deletePriceListGroup), /* harmony export */ Ip: () => (/* binding */ markRead), /* harmony export */ Je: () => (/* binding */ purchasePlan), /* harmony export */ K7: () => (/* binding */ deleteCategory), /* harmony export */ KD: () => (/* binding */ getAdminCategories), /* harmony export */ KZ: () => (/* binding */ getAdminSupportTickets), /* harmony export */ Lb: () => (/* binding */ declineOffer), /* harmony export */ Lp: () => (/* binding */ getAdminEmailTemplates), /* harmony export */ ML: () => (/* binding */ getCustomerFomoDashboard), /* harmony export */ Mm: () => (/* binding */ changeUserRole), /* harmony export */ NL: () => (/* binding */ markAllRead), /* harmony export */ Nt: () => (/* binding */ updateLocation), /* harmony export */ O8: () => (/* binding */ sendPublicSupportMessage), /* harmony export */ OM: () => (/* binding */ setAvailability), /* harmony export */ OV: () => (/* binding */ runAutoMatch), /* harmony export */ OX: () => (/* binding */ getAdminPlans), /* harmony export */ On: () => (/* binding */ getCanMessage), /* harmony export */ P0: () => (/* binding */ adminTopUpUserBalance), /* harmony export */ QN: () => (/* binding */ getOrCreateDirectRoom), /* harmony export */ QY: () => (/* binding */ getTasksTranslationPreview), /* harmony export */ RN: () => (/* binding */ getSiteStats), /* harmony export */ RQ: () => (/* binding */ updateAutoResponseSettings), /* harmony export */ Rt: () => (/* binding */ completeTask), /* harmony export */ S$: () => (/* binding */ getPublicSiteProfile), /* harmony export */ S9: () => (/* binding */ createSkill), /* harmony export */ Sw: () => (/* binding */ getOffers), /* harmony export */ T9: () => (/* binding */ getPlans), /* harmony export */ Tr: () => (/* binding */ getNotifications), /* harmony export */ U9: () => (/* binding */ deletePriceListItem), /* harmony export */ UE: () => (/* binding */ trackSiteMessage), /* harmony export */ UT: () => (/* binding */ createTask), /* harmony export */ Uq: () => (/* binding */ mergeSkillDuplicates), /* harmony export */ V: () => (/* binding */ addSpecialistFavorite), /* harmony export */ V7: () => (/* binding */ adminBroadcastPush), /* harmony export */ VL: () => (/* binding */ getMessages), /* harmony export */ VM: () => (/* binding */ getUserProfile), /* harmony export */ Vs: () => (/* binding */ getLocations), /* harmony export */ Wi: () => (/* binding */ deactivateUser), /* harmony export */ Xz: () => (/* binding */ getSpecialistAvailability), /* harmony export */ YQ: () => (/* binding */ getTranslationsStats), /* harmony export */ Yj: () => (/* binding */ getAdminTasks), /* harmony export */ Z2: () => (/* binding */ createPriceListItem), /* harmony export */ Zp: () => (/* binding */ getChatRooms), /* harmony export */ _z: () => (/* binding */ sendMessage), /* harmony export */ aT: () => (/* binding */ getMyOffers), /* harmony export */ bR: () => (/* binding */ deletePlan), /* harmony export */ bW: () => (/* binding */ getCategories), /* harmony export */ bc: () => (/* binding */ toggleStatus), /* harmony export */ bi: () => (/* binding */ getAdminNotifStats), /* harmony export */ bx: () => (/* binding */ createReview), /* harmony export */ cJ: () => (/* binding */ getAdminReferrals), /* harmony export */ cS: () => (/* binding */ getAdminUsers), /* harmony export */ cl: () => (/* binding */ verifyTelegramToken), /* harmony export */ cp: () => (/* binding */ autoTranslate), /* harmony export */ dE: () => (/* binding */ getAdminStats), /* harmony export */ eR: () => (/* binding */ createSpecialistCard), /* harmony export */ eU: () => (/* binding */ updateReportStatus), /* harmony export */ ew: () => (/* binding */ getPlanHistory), /* harmony export */ f5: () => (/* binding */ deleteSpecialistCard), /* harmony export */ fP: () => (/* binding */ updateSkill), /* harmony export */ fm: () => (/* binding */ getBalanceHistory), /* harmony export */ fu: () => (/* binding */ autoTranslateEmailTemplates), /* harmony export */ g0: () => (/* binding */ getAdminBalanceHistory), /* harmony export */ g1: () => (/* binding */ adminSendPushToUser), /* harmony export */ gg: () => (/* binding */ getTask), /* harmony export */ hD: () => (/* binding */ adminWithdrawUserBalance), /* harmony export */ hl: () => (/* binding */ updatePortfolioItem), /* harmony export */ hp: () => (/* binding */ deleteSkill), /* harmony export */ iN: () => (/* binding */ getMyAvailability), /* harmony export */ i_: () => (/* binding */ getAdminSkills), /* harmony export */ j_: () => (/* binding */ getAdminAiLogs), /* harmony export */ jd: () => (/* binding */ getAdminUser), /* harmony export */ jg: () => (/* binding */ updateAdminEmailTemplate), /* harmony export */ k_: () => (/* binding */ getAdminLocations), /* harmony export */ lC: () => (/* binding */ updateTask), /* harmony export */ mq: () => (/* binding */ createSupportTicket), /* harmony export */ nT: () => (/* binding */ replyToSupportTicket), /* harmony export */ nf: () => (/* binding */ cancelTaskAdmin), /* harmony export */ oD: () => (/* binding */ updatePriceListGroup), /* harmony export */ oh: () => (/* binding */ initiateTopUp), /* harmony export */ oq: () => (/* binding */ adminUpdateSpecialistCard), /* harmony export */ pD: () => (/* binding */ getSpecialistFavorites), /* harmony export */ pK: () => (/* binding */ getPaymentHistory), /* harmony export */ q7: () => (/* binding */ getMyReviews), /* harmony export */ qT: () => (/* binding */ createPlan), /* harmony export */ qX: () => (/* binding */ testTelegramConnection), /* harmony export */ qt: () => (/* binding */ getAdminMailLogs), /* harmony export */ rC: () => (/* binding */ getAdminSettings), /* harmony export */ rl: () => (/* binding */ getSkillSuggestions), /* harmony export */ sD: () => (/* binding */ removeSpecialistFavorite), /* harmony export */ s_: () => (/* binding */ getAdminSpecialistCards), /* harmony export */ st: () => (/* binding */ getMyReferralInfo), /* harmony export */ td: () => (/* binding */ updatePlan), /* harmony export */ ts: () => (/* binding */ createOffer), /* harmony export */ u0: () => (/* binding */ setSupportTicketStatus), /* harmony export */ u4: () => (/* binding */ getAdminMailStats), /* harmony export */ uQ: () => (/* binding */ verifyAdminUserEmail), /* harmony export */ v9: () => (/* binding */ getUserReviews), /* harmony export */ vD: () => (/* binding */ createPriceListGroup), /* harmony export */ vh: () => (/* binding */ getTaskStats), /* harmony export */ vy: () => (/* binding */ getAdminUserSpecialistCards), /* harmony export */ wc: () => (/* binding */ translateAdminEmailTemplate), /* harmony export */ wl: () => (/* binding */ updateAdminUser), /* harmony export */ yJ: () => (/* binding */ createLocation), /* harmony export */ yO: () => (/* binding */ getAdminActivityLogs), /* harmony export */ yk: () => (/* binding */ dismissNotification), /* harmony export */ z4: () => (/* binding */ getDailyUsage), /* harmony export */ z5: () => (/* binding */ getAdminReports), /* harmony export */ z6: () => (/* binding */ getMyStatuses), /* harmony export */ zB: () => (/* binding */ deletePortfolioItem), /* harmony export */ zR: () => (/* binding */ deleteLocation), /* harmony export */ zZ: () => (/* binding */ createCategory), /* harmony export */ zc: () => (/* binding */ updateSpecialistCard), /* harmony export */ zk: () => (/* binding */ getSpecialistFomoDashboard) /* harmony export */ }); /* unused harmony exports getTasks, getTaskBudgetRange, searchTasks, getTasksForSpecialist, getTaskCountsByCategory, cancelTask, updateNotifSettings, getFavorites, addFavorite, removeFavorite, getTranslationsMissing, saveTranslations, getMyPortfolio, addPortfolioItem, getSpecialistPortfolio, saveSiteSeo, updatePriceListItem, getFomoRecommendations, getAutoMatchResults, getGoogleCalendarStatus, disconnectGoogleCalendar, importFromGoogleCalendar, getGoogleCalendarConnectUrl, getMySupportTickets */ // SSR: use INTERNAL_API_URL (http://localhost:4000) to avoid external DNS/SSL round-trip // Browser: use NEXT_PUBLIC_API_URL (https://api.canhelp.gr) const BASE = true ? process.env.INTERNAL_API_URL || 'http://localhost:4000' : 0; async function request(path, init) { const url = `${BASE}/api${path}`; if (true) console.log('[api] SSR fetch', url); const res = await fetch(url, { ...init, credentials: 'include', headers: { 'Content-Type': 'application/json', ...init?.headers } }); if (!res.ok) { const err = await res.json().catch(()=>({ error: res.statusText })); const msg = typeof err.error === 'string' ? err.error : typeof err.message === 'string' ? err.message : res.statusText || 'Request failed'; throw new Error(msg); } return res.json(); } // ─── Tasks ──────────────────────────────────────────────────────────────── const getTasks = (params)=>{ const qs = params ? '?' + new URLSearchParams(params) : ''; return request(`/tasks${qs}`); }; const getTaskBudgetRange = (params)=>{ const qs = params ? '?' + new URLSearchParams(params) : ''; return request(`/tasks/budget-range${qs}`); }; const searchTasks = (params)=>request(`/tasks/search?${new URLSearchParams(params)}`); const getMyTasks = ()=>request('/tasks/my'); const getTasksForSpecialist = (params)=>{ const qs = params ? '?' + new URLSearchParams(params) : ''; return request(`/tasks/for-me${qs}`); }; const getTaskCountsByCategory = ()=>request('/tasks/counts-by-category'); const getTask = (id)=>request(`/tasks/${id}`); const createTask = (data)=>request('/tasks', { method: 'POST', body: JSON.stringify(data) }); const updateTask = (id, data)=>request(`/tasks/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); const completeTask = (id)=>request(`/tasks/${id}/complete`, { method: 'PATCH' }); const cancelTask = (id)=>request(`/tasks/${id}/cancel`, { method: 'PATCH' }); // ─── Offers ──────────────────────────────────────────────────────────────── const getOffers = (taskId)=>request(`/offers?taskId=${taskId}`); const getMyOffers = ()=>request('/offers/my'); const createOffer = (data)=>request('/offers', { method: 'POST', body: JSON.stringify(data) }); const acceptOffer = (id)=>request(`/offers/${id}/accept`, { method: 'PATCH' }); const declineOffer = (id)=>request(`/offers/${id}/decline`, { method: 'PATCH' }); const getUserProfile = (id, locale)=>request(`/users/${id}/profile${locale ? `?locale=${encodeURIComponent(locale)}` : ''}`); const getSpecialists = (params)=>{ const qs = params ? '?' + new URLSearchParams(params) : ''; return request(`/users/specialists${qs}`); }; const createReview = (data)=>request('/reviews', { method: 'POST', body: JSON.stringify(data) }); const getTaskReviews = (taskId)=>request(`/reviews/task/${taskId}`); const getMyReviews = ()=>request('/reviews/my'); // ─── Chat ────────────────────────────────────────────────────────────────── const getChatRooms = ()=>request('/chat/rooms'); const getOrCreateDirectRoom = (userId)=>request(`/chat/direct/${userId}`); const getCanMessage = (userId)=>request(`/chat/can-message/${userId}`); const getMessages = (roomId)=>request(`/chat/rooms/${roomId}/messages`); const sendMessage = (roomId, body)=>request('/chat/messages', { method: 'POST', body: JSON.stringify({ roomId, body }) }); // ─── Notifications ──────────────────────────────────────────────────────── const updateNotifSettings = (data)=>request('/users/me', { method: 'PATCH', body: JSON.stringify(data) }); const getNotifications = ()=>request('/notifications'); const getUnreadCount = ()=>request('/notifications/count'); const markRead = (id)=>request(`/notifications/${id}/read`, { method: 'PATCH' }); const markAllRead = ()=>request('/notifications/read-all', { method: 'PATCH' }); const getTaskInvite = (taskId)=>request(`/notifications?type=task_invite&referenceId=${taskId}`); const dismissNotification = (id)=>request(`/notifications/${id}`, { method: 'DELETE' }); // ─── Referral ───────────────────────────────────────────────────────────── const getMyReferralInfo = ()=>request('/users/me/referral'); const applyMyReferral = (refCode)=>request('/users/me/referral/apply', { method: 'POST', body: JSON.stringify({ refCode }) }); // ─── Reviews ────────────────────────────────────────────────────────────── const getUserReviews = (userId)=>request(`/reviews/user/${userId}`); const getUserRating = (userId)=>request(`/reviews/user/${userId}/rating`); // ─── Categories ─────────────────────────────────────────────────────────── const getCategories = ()=>request('/categories'); // ─── Locations ──────────────────────────────────────────────────────────── const getLocations = ()=>request('/locations'); // ─── Favorites ──────────────────────────────────────────────────────────── const getFavorites = ()=>request('/favorites'); const addFavorite = (taskId)=>request(`/favorites/${taskId}`, { method: 'POST' }); const removeFavorite = (taskId)=>request(`/favorites/${taskId}`, { method: 'DELETE' }); const getSpecialistFavorites = ()=>request('/favorites/specialists'); const addSpecialistFavorite = (specialistId)=>request(`/favorites/specialists/${specialistId}`, { method: 'POST' }); const removeSpecialistFavorite = (specialistId)=>request(`/favorites/specialists/${specialistId}`, { method: 'DELETE' }); // ─── Admin ───────────────────────────────────────────────────────────────── // ─── Admin Categories ────────────────────────────────────────────────────── const getAdminCategories = ()=>request('/admin/categories'); const createCategory = (data)=>request('/admin/categories', { method: 'POST', body: JSON.stringify(data) }); const updateCategory = (id, data)=>request(`/admin/categories/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); const deleteCategory = (id)=>request(`/admin/categories/${id}`, { method: 'DELETE' }); // ─── Admin Skills ────────────────────────────────────────────────────────── const getAdminSkills = (categorySlug)=>request(`/admin/skills?categorySlug=${encodeURIComponent(categorySlug)}`); const createSkill = (data)=>request('/admin/skills', { method: 'POST', body: JSON.stringify(data) }); const updateSkill = (id, data)=>request(`/admin/skills/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); const deleteSkill = (id)=>request(`/admin/skills/${id}`, { method: 'DELETE' }); const getSkillDedup = (categorySlug)=>request(`/admin/skills/dedup${categorySlug ? `?categorySlug=${encodeURIComponent(categorySlug)}` : ''}`); const mergeSkillDuplicates = (keepId, deleteIds)=>request('/admin/skills/dedup/merge', { method: 'POST', body: JSON.stringify({ keepId, deleteIds }) }); // ─── Admin ───────────────────────────────────────────────────────────────── const getAdminStats = ()=>request('/admin/stats'); const getAdminUsers = (page = 1, q, role)=>{ const p = new URLSearchParams({ page: String(page), limit: '20' }); if (q) p.set('q', q); if (role) p.set('role', role); return request(`/admin/users?${p}`); }; const deactivateUser = (id)=>request(`/admin/users/${id}/deactivate`, { method: 'PATCH' }); const activateUser = (id)=>request(`/admin/users/${id}/activate`, { method: 'PATCH' }); const changeUserRole = (id, role)=>request(`/admin/users/${id}/role`, { method: 'PATCH', body: JSON.stringify({ role }) }); const getAdminUser = (id)=>request(`/admin/users/${id}`); const getAdminUserSpecialistCards = (userId)=>request(`/admin/users/${userId}/specialist-cards`); const adminUpdateSpecialistCard = (id, data)=>request(`/admin/specialist-cards/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); const getAdminSpecialistCards = (page = 1, status)=>{ const p = new URLSearchParams({ page: String(page), limit: '20' }); if (status && status !== 'all') p.set('status', status); return request(`/admin/specialist-cards?${p}`); }; const updateAdminUser = (id, data)=>request(`/admin/users/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); const verifyAdminUserEmail = (id)=>request(`/admin/users/${id}/verify-email`, { method: 'PATCH' }); const getAdminTasks = (page = 1, q, status)=>{ const p = new URLSearchParams({ page: String(page), limit: '20' }); if (q) p.set('q', q); if (status) p.set('status', status); return request(`/admin/tasks?${p}`); }; const cancelTaskAdmin = (id)=>request(`/admin/tasks/${id}/cancel`, { method: 'PATCH' }); const deleteTaskAdmin = (id)=>request(`/admin/tasks/${id}`, { method: 'DELETE' }); const getAdminReports = (page = 1, status)=>{ const p = new URLSearchParams({ page: String(page), limit: '20' }); if (status && status !== 'all') p.set('status', status); return request(`/admin/reports?${p}`); }; const updateReportStatus = (id, status)=>request(`/admin/reports/${id}/status`, { method: 'PATCH', body: JSON.stringify({ status }) }); const getAdminAiLogs = (page = 1)=>request(`/admin/ai-logs?page=${page}&limit=50`); const getAdminActivityLogs = (params = {})=>{ const p = new URLSearchParams(); if (params.page) p.set('page', String(params.page)); if (params.event) p.set('event', params.event); if (params.userId) p.set('userId', params.userId); if (params.dateFrom) p.set('dateFrom', params.dateFrom); if (params.dateTo) p.set('dateTo', params.dateTo); p.set('limit', '50'); return request(`/admin/activity-logs?${p}`); }; const getAdminMailLogs = (params = {})=>{ const p = new URLSearchParams(); if (params.page) p.set('page', String(params.page)); if (params.event) p.set('event', params.event); if (params.dateFrom) p.set('dateFrom', params.dateFrom); if (params.dateTo) p.set('dateTo', params.dateTo); p.set('limit', '50'); return request(`/admin/mail-logs?${p}`); }; const getAdminNotifLogs = (params = {})=>{ const p = new URLSearchParams(); if (params.page) p.set('page', String(params.page)); if (params.type) p.set('type', params.type); if (params.dateFrom) p.set('dateFrom', params.dateFrom); if (params.dateTo) p.set('dateTo', params.dateTo); p.set('limit', '50'); return request(`/admin/notification-logs?${p}`); }; const getAdminNotifStats = ()=>request('/admin/notification-stats'); const getAdminMailStats = ()=>request('/admin/mail-stats'); const getAdminReferrals = ()=>request('/admin/referrals'); const adminSendPushToUser = (userId, data)=>request(`/admin/push/user/${userId}`, { method: 'POST', body: JSON.stringify(data) }); const adminBroadcastPush = (data)=>request('/admin/push/broadcast', { method: 'POST', body: JSON.stringify(data) }); // ─── Admin Locations ─────────────────────────────────────────────────────── const getAdminLocations = ()=>request('/admin/locations'); const createLocation = (data)=>request('/admin/locations', { method: 'POST', body: JSON.stringify(data) }); const updateLocation = (id, data)=>request(`/admin/locations/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); const deleteLocation = (id)=>request(`/admin/locations/${id}`, { method: 'DELETE' }); // ─── Admin Plans ─────────────────────────────────────────────────────────── const getAdminPlans = ()=>request('/admin/plans'); const createPlan = (data)=>request('/admin/plans', { method: 'POST', body: JSON.stringify(data) }); const updatePlan = (id, data)=>request(`/admin/plans/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); const deletePlan = (id)=>request(`/admin/plans/${id}`, { method: 'DELETE' }); // ─── Admin Settings ──────────────────────────────────────────────────────── const getAdminSettings = ()=>request('/admin/settings'); const updateAdminSettings = (data)=>request('/admin/settings', { method: 'PUT', body: JSON.stringify(data) }); const getAdminEmailTemplates = ()=>request('/admin/settings/templates'); const updateAdminEmailTemplate = (key, data)=>request(`/admin/settings/templates/${key}`, { method: 'PUT', body: JSON.stringify(data) }); const translateAdminEmailTemplate = (data)=>request('/admin/settings/templates/translate', { method: 'POST', body: JSON.stringify(data) }); const sendTestEmail = ()=>request('/admin/settings/test-email', { method: 'POST' }); const testTelegramConnection = (botToken, chatId)=>fetch(`${BASE}/api/admin/settings/test-telegram`, { method: 'POST', credentials: 'include', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ botToken, chatId }) }).then((r)=>r.json()); const verifyTelegramToken = (botToken)=>fetch(`${BASE}/api/admin/settings/verify-telegram-token`, { method: 'POST', credentials: 'include', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ botToken }) }).then((r)=>r.json()); const getTranslationsStats = ()=>request('/admin/translations/stats'); const getTranslationsMissing = (table, missingLang, page = 1, limit = 50)=>request(`/admin/translations/${table}?missingLang=${missingLang}&page=${page}&limit=${limit}`); const saveTranslations = (table, items)=>request(`/admin/translations/${table}/save`, { method: 'POST', body: JSON.stringify({ items }) }); const autoTranslate = (table, missingLang, fromLang, batchSize = 500)=>request('/admin/translations/auto-translate', { method: 'POST', body: JSON.stringify({ table, missingLang, fromLang, batchSize }) }); const autoTranslateTasks = (batchSize = 500)=>request('/admin/translations/auto-translate-tasks', { method: 'POST', body: JSON.stringify({ batchSize }) }); const getTasksTranslationPreview = (lang, limit = 50)=>request(`/admin/translations/tasks-preview?lang=${lang}&limit=${limit}`); const autoTranslateEmailTemplates = (missingLang, fromLang = 'el')=>request('/admin/translations/auto-translate-templates', { method: 'POST', body: JSON.stringify({ missingLang, fromLang }) }); // ─── Availability ────────────────────────────────────────────────────────── const getMyAvailability = (month)=>request(`/availability/my${month ? `?month=${month}` : ''}`); const setAvailability = (date, status, note)=>request('/availability/set', { method: 'POST', body: JSON.stringify({ date, status, note }) }); const setAvailabilityRange = (from, to, status)=>request('/availability/set-range', { method: 'POST', body: JSON.stringify({ from, to, status }) }); const getSpecialistAvailability = (userId, month)=>request(`/availability/user/${userId}${month ? `?month=${month}` : ''}`); const getMyPortfolio = ()=>request('/portfolio/my'); const addPortfolioItem = (formData)=>fetch(`${BASE}/api/portfolio`, { method: 'POST', credentials: 'include', body: formData }).then(async (res)=>{ if (!res.ok) { const err = await res.json().catch(()=>({ error: res.statusText })); throw new Error(err.error || 'Upload failed'); } return res.json(); }); const updatePortfolioItem = (id, data)=>request(`/portfolio/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); const deletePortfolioItem = (id)=>request(`/portfolio/${id}`, { method: 'DELETE' }); const getSpecialistPortfolio = (userId)=>request(`/portfolio/user/${userId}`); const getMySpecialistCards = ()=>request('/specialist-cards/my'); const createSpecialistCard = (data)=>request('/specialist-cards', { method: 'POST', body: JSON.stringify(data) }); const updateSpecialistCard = (id, data)=>request(`/specialist-cards/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); const saveSiteSeo = (data)=>request('/users/me/site-seo', { method: 'POST', body: JSON.stringify(data) }); const deleteSpecialistCard = (id)=>request(`/specialist-cards/${id}`, { method: 'DELETE' }); const getSpecialistCards = (userId, locale)=>request(`/specialist-cards/user/${userId}${locale ? `?locale=${encodeURIComponent(locale)}` : ''}`); const getPriceList = (cardId, locale)=>request(`/price-list/${cardId}${locale ? `?locale=${encodeURIComponent(locale)}` : ''}`); const createPriceListGroup = (cardId, data)=>request(`/price-list/${cardId}/groups`, { method: 'POST', body: JSON.stringify(data) }); const updatePriceListGroup = (groupId, data)=>request(`/price-list/groups/${groupId}`, { method: 'PATCH', body: JSON.stringify(data) }); const deletePriceListGroup = (groupId)=>request(`/price-list/groups/${groupId}`, { method: 'DELETE' }); const createPriceListItem = (groupId, data)=>request(`/price-list/groups/${groupId}/items`, { method: 'POST', body: JSON.stringify(data) }); const updatePriceListItem = (itemId, data)=>request(`/price-list/items/${itemId}`, { method: 'PATCH', body: JSON.stringify(data) }); const deletePriceListItem = (itemId)=>request(`/price-list/items/${itemId}`, { method: 'DELETE' }); const getSkillSuggestions = (categorySlugs)=>{ const params = categorySlugs?.length ? '?' + categorySlugs.map((s)=>`category=${encodeURIComponent(s)}`).join('&') : ''; return request(`/skill-suggestions${params}`); }; const initiateTopUp = (amount)=>request('/payments/topup/init', { method: 'POST', body: JSON.stringify({ amount }) }); const getPaymentHistory = ()=>request('/payments/history'); const getBalanceHistory = (limit = 50)=>request(`/payments/balance-history?limit=${limit}`); const getPlanHistory = (limit = 50)=>request(`/users/me/plan-history?limit=${limit}`); const getAdminBalanceHistory = (params = {})=>{ const p = new URLSearchParams(); if (params.page) p.set('page', String(params.page)); if (params.userId) p.set('userId', params.userId); if (params.kind) p.set('kind', params.kind); p.set('limit', '50'); return request(`/admin/balance-history?${p}`); }; const adminTopUpUserBalance = (id, data)=>request(`/admin/users/${id}/balance/topup`, { method: 'POST', body: JSON.stringify(data) }); const adminWithdrawUserBalance = (id, data)=>request(`/admin/users/${id}/balance/withdraw`, { method: 'POST', body: JSON.stringify(data) }); const previewPlanChange = (planId)=>request('/payments/plan/preview', { method: 'POST', body: JSON.stringify({ planId }) }); const getPlans = (role)=>{ const qs = role ? `?role=${role}` : ''; return request(`/plans${qs}`); }; const getMyDashboard = ()=>request('/dashboard/me'); const getDailyUsage = ()=>request('/plans/daily-usage'); const purchasePlan = (planId, payFromBalance = true)=>request('/payments/plan/purchase', { method: 'POST', body: JSON.stringify({ planId, payFromBalance }) }); // ─── Statuses ────────────────────────────────────────────────────────────── const getMyStatuses = ()=>request('/statuses/me'); const toggleStatus = (statusType, active)=>request('/statuses/toggle', { method: 'POST', body: JSON.stringify({ statusType, active }) }); const getAutoResponseSettings = ()=>request('/auto-response'); const updateAutoResponseSettings = (data)=>request('/auto-response', { method: 'PUT', body: JSON.stringify(data) }); // ─── FOMO ────────────────────────────────────────────────────────────────── const getSpecialistFomoDashboard = ()=>request('/fomo/specialist'); const getCustomerFomoDashboard = ()=>request('/fomo/customer'); const getFomoRecommendations = ()=>request('/fomo/recommendations'); // ─── Auto-match ──────────────────────────────────────────────────────────── const getAutoMatchResults = (taskId)=>request(`/auto-match/${taskId}`); const runAutoMatch = (taskId)=>request(`/auto-match/${taskId}`, { method: 'POST' }); // ─── Google Calendar ─────────────────────────────────────────────────────── const getGoogleCalendarStatus = ()=>request('/google/calendar/status'); const disconnectGoogleCalendar = ()=>request('/google/calendar/disconnect', { method: 'DELETE' }); const importFromGoogleCalendar = ()=>request('/google/calendar/import', { method: 'POST' }); const getGoogleCalendarConnectUrl = ()=>`${BASE}/api/google/calendar/connect`; // ─── Personal site ───────────────────────────────────────────────────────── const getPublicSiteProfile = (slug)=>request(`/users/site/${slug}`); const getSiteStats = ()=>request('/users/me/site-stats'); const trackSiteMessage = (slug)=>request(`/users/site/${slug}/track-message`, { method: 'POST' }).catch(()=>{}); // ─── Task stats (FOMO) ───────────────────────────────────────────────────── const getTaskStats = (taskId)=>request(`/tasks/${taskId}/stats`); // ─── Support tickets ─────────────────────────────────────────────────────── const sendPublicSupportMessage = (data)=>request('/support/public', { method: 'POST', body: JSON.stringify(data) }); const createSupportTicket = (data)=>request('/support', { method: 'POST', body: JSON.stringify(data) }); const getMySupportTickets = (page = 1)=>request(`/support/my?page=${page}`); const getAdminSupportTickets = (params)=>request(`/support${params ? '?' + new URLSearchParams(params) : ''}`); const replyToSupportTicket = (id, data)=>request(`/support/${id}/reply`, { method: 'PATCH', body: JSON.stringify(data) }); const setSupportTicketStatus = (id, status)=>request(`/support/${id}/status`, { method: 'PATCH', body: JSON.stringify({ status }) }); /***/ }), /***/ 96484: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ LocaleProvider: () => (/* binding */ LocaleProvider), /* harmony export */ Y: () => (/* binding */ useLocale) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(78157); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(31768); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(71159); /* harmony import */ var _lib_translations__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(12998); /* __next_internal_client_entry_do_not_use__ LocaleProvider,useLocale auto */ const COOKIE_KEY = 'canhelp_locale'; const DEFAULT_LOCALE = 'el'; const LocaleContext = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_1__.createContext)({ locale: DEFAULT_LOCALE, setLocale: ()=>{}, t: (key)=>key }); function readCookieLocale() { if (typeof document === 'undefined') return DEFAULT_LOCALE; const match = document.cookie.match(/canhelp_locale=([^;]+)/); const val = match?.[1]; return val && [ 'el', 'en', 'uk', 'ru' ].includes(val) ? val : DEFAULT_LOCALE; } function LocaleProvider({ children, initialLocale }) { const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)(); const [locale, setLocaleState] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(initialLocale ?? DEFAULT_LOCALE); // Sync from cookie on mount (client-side) process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{ const cookieLocale = readCookieLocale(); if (cookieLocale !== locale) setLocaleState(cookieLocale); // Sync cookie locale to DB on first load (in case DB is out of sync) const apiBase = "https://api.canhelp.gr" || 0; fetch(`${apiBase}/api/users/me`, { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, credentials: 'include', body: JSON.stringify({ locale: cookieLocale }) }).catch(()=>{}); }, []); const setLocale = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((next)=>{ setLocaleState(next); document.cookie = `${COOKIE_KEY}=${next}; path=/; max-age=31536000; SameSite=Lax`; document.documentElement.lang = next; // Persist locale to user profile in DB (best-effort, non-blocking) const apiBase = "https://api.canhelp.gr" || 0; fetch(`${apiBase}/api/users/me`, { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, credentials: 'include', body: JSON.stringify({ locale: next }) }).catch(()=>{}); // Re-render server components with new cookie router.refresh(); }, [ router ]); const t = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((key, fallback)=>(0,_lib_translations__WEBPACK_IMPORTED_MODULE_3__/* .getTranslations */ .$)(locale)(key, fallback), [ locale ]); return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(LocaleContext.Provider, { value: { locale, setLocale, t }, children: children }); } function useLocale() { return (0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)(LocaleContext); } /***/ }) }; ; {} @KHexports.id = 809; exports.ids = [809]; exports.modules = { /***/ 1241: /***/ (() => {  RawSource/* (ignored) */ /***/ }), /***/ 1697: _/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict";  /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ LocationProvider: () => (/* binding */ LocationProvider) /* harmony export */ }); /* unused harmony export useLocation */ /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25459); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__); // This file is generated by the Webpack next-flight-loader. import { registerClientReference } from "react-server-dom-webpack/server"; export const LocationProvider = registerClientReference( function() { throw new Error("Attempted to call LocationProvider() from the server but LocationProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/context/location.tsx", "LocationProvider", );export const useLocation = registerClientReference( function() { throw new Error("Attempted to call useLocation() from the server but useLocation is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/context/location.tsx", "useLocation", );61134undefined136142undefined168190(0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)undefined537543undefined564586(0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)undefined, /***/ 2645:  __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(43560); /* harmony import */ var next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0__); \ import { fillMetadataSegment } from 'next/dist/lib/metadata/get-metadata-route' export default async (props) => { const imageData = {"type":"image/png","sizes":"1024x1024"} const imageUrl = fillMetadataSegment(".", await props.params, "icon.png") return [{ ...imageData, url: imageUrl + "?5d298b9734cd2682", }] }280undefined8599/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (undefined8599undefined203221(0,next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0__.fillMetadataSegment)undefined348347.5);undefined, /***/ 12696: /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ AdminRolePreview: () => (/* binding */ AdminRolePreview) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(78157); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(13260); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(71159); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(31768); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(91864); `/* __next_internal_client_entry_do_not_use__ AdminRolePreview auto */ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime"; import { useSession } from '@/lib/auth'; import { useRouter } from 'next/navigation'; import { useEffect, useState, useRef } from 'react'; import { getPlans, updateAdminUser } from '@/lib/api'; const ORIG_PLAN_KEY = 'canhelp_admin_orig_plan'; function getPreviewRole() { return null; } const TIER_COLORS = { free: 'bg-slate-100 text-slate-600', pro: 'bg-green-100 text-green-700', ultimate: 'bg-amber-100 text-amber-700' }; export function AdminRolePreview() { const { data: session } = useSession(); const router = useRouter(); const isAdmin = session?.user?.role === 'admin'; const userId = session?.user?.id; const [mounted, setMounted] = useState(false); const [plans, setPlans] = useState([]); const [activePlanId, setActivePlanId] = useState(null); const [loading, setLoading] = useState(false); const [expanded, setExpanded] = useState(false); const origPlanRef = useRef(null); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>setMounted(true), []); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ if ("undefined" !== 'undefined') { origPlanRef.current = localStorage.getItem(ORIG_PLAN_KEY); } }, []); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ if (!isAdmin) return; getPlans().then(setPlans).catch(()=>{}); }, [ isAdmin ]); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ // Sync active plan from session const currentPlanId = session?.user?.planId ?? null; setActivePlanId(currentPlanId); }, [ session ]); if (!mounted || !isAdmin) return null; const setPlan = async (planId)=>{ if (!userId) return; setLoading(true); try { // Save original plan on first change if (!origPlanRef.current && activePlanId) { localStorage.setItem(ORIG_PLAN_KEY, activePlanId); origPlanRef.current = activePlanId; } await updateAdminUser(userId, { planId }); setActivePlanId(planId); window.dispatchEvent(new CustomEvent('canhelp:plan-changed', { detail: { planId } })); router.refresh(); } catch {} setLoading(false); }; const restorePlan = async ()=>{ const orig = origPlanRef.current; localStorage.removeItem(ORIG_PLAN_KEY); origPlanRef.current = null; await setPlan(orig ?? null); }; const visiblePlans = plans; const hasOrigPlan = !!origPlanRef.current; return /*#__PURE__*/ _jsxs("div", { className: "fixed bottom-20 right-4 z-50 bg-white border border-slate-200 rounded-2xl shadow-lg text-xs font-medium select-none", style: { minWidth: 130 }, children: [ /*#__PURE__*/ _jsxs("button", { onClick: ()=>setExpanded((v)=>!v), className: "flex items-center justify-between gap-2 w-full px-3 py-2 text-slate-500 hover:text-slate-700 transition rounded-2xl", children: [ /*#__PURE__*/ _jsx("span", { children: "\uD83D\uDC41 Preview" }), /*#__PURE__*/ _jsx("span", { className: "text-slate-300", children: expanded ? '▲' : '▼' }) ] }), expanded && /*#__PURE__*/ _jsx("div", { className: "flex flex-col gap-1 px-2 pb-2 border-t border-slate-100 pt-2", children: visiblePlans.length > 0 && /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx("div", { className: "text-slate-400 px-1 mt-2 mb-0.5", children: "Plan" }), visiblePlans.map((plan)=>/*#__PURE__*/ _jsxs("button", { disabled: loading, onClick: ()=>setPlan(plan.id === activePlanId ? null : plan.id), className: `flex items-center justify-between gap-2 px-3 py-1.5 rounded-xl transition text-left ${activePlanId === plan.id ? 'bg-indigo-600 text-white' : 'text-slate-600 hover:bg-slate-100'} ${loading ? 'opacity-50' : ''}`, children: [ /*#__PURE__*/ _jsx("span", { className: "truncate max-w-[90px]", children: plan.name }), /*#__PURE__*/ _jsx("span", { className: `px-1.5 py-0.5 rounded-full text-[10px] font-semibold ${activePlanId === plan.id ? 'bg-white/20 text-white' : TIER_COLORS[plan.tier] ?? TIER_COLORS.free}`, children: plan.tier }) ] }, plan.id)), activePlanId && /*#__PURE__*/ _jsx("button", { disabled: loading, onClick: ()=>setPlan(null), className: "px-3 py-1 rounded-xl text-slate-400 hover:text-red-500 hover:bg-red-50 transition text-left", children: "✕ No plan" }), hasOrigPlan && /*#__PURE__*/ _jsx("button", { disabled: loading, onClick: restorePlan, className: "px-3 py-1 rounded-xl text-green-600 hover:bg-green-50 transition text-left", children: "↩ Restore" }) ] }) }) ] }); } 70155undefined157196undefined198241undefined243294undefined296349undefined597603undefined664673(0,_lib_auth__WEBPACK_IMPORTED_MODULE_1__/* .useSession */ .wV)undefined697705(0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)undefined835842(0,react__WEBPACK_IMPORTED_MODULE_3__.useState)undefined882889(0,react__WEBPACK_IMPORTED_MODULE_3__.useState)undefined940947(0,react__WEBPACK_IMPORTED_MODULE_3__.useState)undefined990997(0,react__WEBPACK_IMPORTED_MODULE_3__.useState)undefined10431050(0,react__WEBPACK_IMPORTED_MODULE_3__.useState)undefined10841089(0,react__WEBPACK_IMPORTED_MODULE_3__.useRef)undefined11531161(0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)undefined12451253(0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)undefined12731299falseundefined13021383{}undefined14521460(0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)undefined15061513(0,_lib_api__WEBPACK_IMPORTED_MODULE_4__/* .getPlans */ .T9)undefined16351643(0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)undefined22332247(0,_lib_api__WEBPACK_IMPORTED_MODULE_4__/* .updateAdminUser */ .wl)undefined28922896(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined31453149(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined34223425(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined35523555(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined37703773(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined39423946(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined39483956react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragmentundefined40314034(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined42554259(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined47714774(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined50125015(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined54635466(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined58485851(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined, /***/ 12998: /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ $: () => (/* binding */ getTranslations), /* harmony export */ YZ: () => (/* binding */ LOCALES) /* harmony export */ }); /* unused harmony export translations */ Sexport const LOCALES = [ { code: 'el', label: 'Ελληνικά', flag: '🇬🇷' }, { code: 'en', label: 'English', flag: '🇬🇧' }, { code: 'uk', label: 'Українська', flag: '🇺🇦' }, { code: 'ru', label: 'Русский', flag: '🇷🇺' } ]; export const translations = { el: { 'footer.slogan': 'Η εργασία σου — η φροντίδα μας! Λύνουμε κάθε ζήτημα γρήγορα και εύκολα.', 'footer.links': 'Σύνδεσμοι', 'footer.socials': 'Στα κοινωνικά δίκτυα', // Nav 'nav.home': 'Αρχική', 'nav.tasks': 'Εργασίες', 'nav.post': '+ Δημοσίευση', 'nav.dashboard': 'Οι εργασίες μου', 'nav.chat': 'Μηνύματα', 'nav.notifications': 'Ειδοποιήσεις', 'nav.profile': 'Προφίλ', 'nav.admin': 'Διαχείριση', 'nav.specialists': 'Προσφορές', 'nav.new_task': 'Νέα εργασία', 'nav.login': 'Σύνδεση', 'nav.register': 'Εγγραφή', 'nav.logout': 'Έξοδος', // Hero 'hero.title': 'Κάθε άνθρωπος έχει κάτι να προσφέρει', 'hero.subtitle': 'Βρες βοήθεια, πρόσφερε τις δεξιότητές σου ή κέρδισε χρήματα βοηθώντας άλλους', 'hero.cta.post': 'Ζήτησε βοήθεια', 'hero.cta.browse': 'Πρόσφερε βοήθεια', 'hero.cta.specialists': 'Βρες εργασία', 'hero.search.placeholder': 'Τι χρειάζεσαι; π.χ. ηλεκτρολόγος, καθαρισμός...', 'hero.specialist.title': 'Βρες εργασίες κοντά σου', 'hero.specialist.subtitle': 'Ανακάλυψε εργασίες στις κατηγορίες σου και στείλε προσφορά', 'hero.specialist.cta': 'Βρες εργασίες', 'hero.specialist.search.placeholder': 'Αναζήτηση εργασιών... π.χ. ηλεκτρολογία, καθαρισμός', 'section.categories.specialist': 'Βρες εργασίες ανά κατηγορία', 'section.cities.specialist': 'Εργασίες ανά πόλη', 'how.specialist.step1.title': 'Δημιούργησε κάρτα ειδικού', 'how.specialist.step1.desc': 'Δήλωσε κατηγορίες, δεξιότητες και περιοχές — το σύστημα βρίσκει εργασίες αυτόματα', 'how.specialist.step2.title': 'Βρες σχετικές εργασίες', 'how.specialist.step2.desc': 'Ανακάλυψε εργασίες στις κατηγορίες σου και ξεκίνα αμέσως', 'how.specialist.step3.title': 'Στείλε προσφορά & κέρδισε', 'how.specialist.step3.desc': 'Υποβάλε προσφορά με τιμή και χρόνο, επικοινωνήσε και ολοκλήρωσε εργασίες', 'stats.specialists': 'προσφορές', 'stats.tasks': 'εργασίες', 'stats.categories': 'κατηγορίες', 'stats.free': 'δωρεάν εγγραφή', 'promo.title': 'Αποκτήσε Pro δωρεάν — μόνο μέχρι το τέλος του χρόνου', 'promo.subtitle': 'Εγγράψου τώρα και απόλαυσε το πλάνο Pro χωρίς χρέωση. Η προσφορά λήγει στις 31 Δεκεμβρίου.', 'promo.cta': 'Εγγραφή δωρεάν', 'promo.days': 'μέρες', 'promo.hours': 'ώρες', 'promo.minutes': 'λεπτά', 'promo.seconds': 'δευτ.', // Sections 'section.categories': 'Δημιούργησε εργασία σε οποιαδήποτε κατηγορία', 'section.how': 'Πώς λειτουργεί', 'section.recent': 'Πρόσφατες εργασίες', 'section.all': 'Δες όλες →', 'section.more': 'ακόμα', 'section.cities': 'Πόλεις & Περιοχές', 'section.community': 'Ένα κοινοτικό έργο για όλους', 'community.subtitle': 'Το CanHelp δεν είναι απλώς μια αγορά — είναι μια κοινότητα αμοιβαίας βοήθειας. Οποιοσδήποτε έχει γνώση ή δεξιότητα μπορεί να βρει έναν πελάτη. Οποιοσδήποτε έχει ένα πρόβλημα μπορεί να βρει έναν ειδικό.', 'community.point1.title': 'Είσαι ειδικός σε κάτι;', 'community.point1.desc': 'Επισκευές, μαθήματα, σχεδιασμός, μεταφράσεις, φροντίδα — κάθε δεξιότητα αξίζει. Δημιούργησε προφίλ και βρες πελάτες κοντά σου.', 'community.point2.title': 'Χρειάζεσαι βοήθεια;', 'community.point2.desc': 'Δημοσίευσε εργασία σε λιγότερο από ένα λεπτό και λάβε προσφορές από επαληθευμένους ειδικούς στην πόλη σου.', 'community.point3.title': 'Βοήθησε το έργο να αναπτυχθεί', 'community.point3.desc': 'Το CanHelp αναπτύσσεται χάρη στις κοινότητες. Μοιράσου το σύνδεσμο με φίλους και γνωστούς — μαζί χτίζουμε κάτι χρήσιμο για όλους.', 'community.share': 'Μοιράσου με φίλους', 'community.share.copied': 'Σύνδεσμος αντιγράφηκε!', // Referral section on home page 'section.referral': 'Πρόγραμμα παραπομπών', 'referral.home.subtitle': 'Μοιράσου τον σύνδεσμό σου — κάθε νέος χρήστης που εγγράφεται μέσα από αυτόν σου αποφέρει ανταμοιβή.', 'referral.home.step1.title': 'Εγγραφείσε και λάβε σύνδεσμο', 'referral.home.step1.desc': 'Δημιούργησε λογαριασμό και βρες τον μοναδικό σου σύνδεσμο παραπομπής στο προφίλ σου.', 'referral.home.step2.title': 'Μοιράσου με φίλους', 'referral.home.step2.desc': 'Στείλε τον σύνδεσμο σε φίλους, γνωστούς ή δημοσίευσέ τον στα social media.', 'referral.home.step3.title': 'Κέρδισε ανταμοιβές', 'referral.home.step3.desc': 'Μόλις ο φίλος σου επαληθεύσει το email του, λαμβάνεις αυτόματα την ανταμοιβή σου.', 'referral.home.cta': 'Πάρε τον σύνδεσμό σου', 'referral.home.badge': 'Πρόγραμμα παραπομπών', // FAQ section 'section.faq': 'Συχνές Ερωτήσεις', 'faq.q1': 'Πώς λειτουργεί το CanHelp;', 'faq.a1': 'Δημοσίευσε μια εργασία, λάβε προσφορές από ειδικούς, επέλεξε τον καλύτερο και ξεκίνα τη συνεργασία. Είναι γρήγορο, απλό και δωρεάν για πελάτες.', 'faq.q2': 'Πόσο κοστίζει η χρήση της πλατφόρμας;', 'faq.a2': 'Η εγγραφή και η δημοσίευση εργασιών είναι εντελώς δωρεάν για πελάτες. Οι ειδικοί έχουν στη διάθεσή τους δωρεάν πλάνο καθώς και premium επιλογές.', 'faq.q3': 'Πώς μπορώ να γίνω ειδικός;', 'faq.a3': 'Κάνε εγγραφή, πήγαινε στο «Γίνε Ειδικός», συμπλήρωσε το προφίλ σου με δεξιότητες και κατηγορίες και αρχίνισε να λαμβάνεις εργασίες.', 'faq.q4': 'Πώς επιλέγω τον κατάλληλο ειδικό;', 'faq.a4': 'Δες τις αξιολογήσεις, την εμπειρία, τις δεξιότητες και το χαρτοφυλάκιο κάθε ειδικού. Επικοινώνησε μαζί του μέσω chat και συζήτα τις λεπτομέρειες πριν αποφασίσεις.', 'faq.q5': 'Τι γίνεται αν δεν είμαι ικανοποιημένος;', 'faq.a5': 'Μπορείς να αφήσεις αξιολόγηση για τον ειδικό και να τον βαθμολογήσεις από 1 έως 5 αστέρια. Οι αξιολογήσεις βοηθούν άλλους χρήστες να επιλέξουν έμπιστους επαγγελματίες.', 'faq.q6': 'Μπορώ να επικοινωνήσω με τον ειδικό πριν την αποδοχή;', 'faq.a6': 'Ναι. Μόλις λάβεις μια προσφορά, μπορείς να ανοίξεις chat με τον ειδικό, να κάνεις ερωτήσεις και να συντονίσεις τις λεπτομέρειες πριν αποφασίσεις.', 'faq.q7': 'Πόσος χρόνος χρειάζεται για να λάβω προσφορές;', 'faq.a7': 'Συνήθως μέσα σε λίγες ώρες. Οι ειδικοί λαμβάνουν ειδοποίηση για νέες εργασίες και μπορούν να απαντήσουν γρήγορα.', 'faq.q8': 'Μπορώ να δημοσιεύσω εργασία σε οποιαδήποτε πόλη της Ελλάδας;', 'faq.a8': 'Ναι! Το CanHelp καλύπτει όλη την Ελλάδα. Μπορείς να βρεις ειδικούς στην Αθήνα, στη Θεσσαλονίκη, στην Πάτρα και αλλού.', 'faq.q9': 'Τι είδη εργασιών μπορώ να βρω στο CanHelp;', 'faq.a9': 'Επισκευές, καθαρισμό, ηλεκτρολόγους, μαθήματα, σχεδιασμό, IT, μετακομίσεις, ομορφιά και πολλά άλλα. Οι κατηγορίες αυξάνονται συνεχώς.', 'faq.q10': 'Υπάρχει εφαρμογή για κινητό;', 'faq.a10': 'Ναι! Το CanHelp διατίθεται για Android και iOS. Κατέβασε την εφαρμογή και διαχειρίσου τα πάντα από το τηλέφωνό σου.', // How it works 'how.step1.title': 'Δημοσίευσε εργασία', 'how.step1.desc': 'Περίγραψε τι χρειάζεσαι και ορίζε τον προϋπολογισμό σου', 'how.step2.title': 'Λάβε προσφορές', 'how.step2.desc': 'Ειδικοί θα σου στείλουν προσφορές με τιμή και χρόνο', 'how.step3.title': 'Επίλεξε & ξεκίνα', 'how.step3.desc': 'Επέλεξε τον καλύτερο επαγγελματία και ξεκίνα τη συνεργασία', // Tasks page 'tasks.title': 'εργασίες', 'tasks.filters': 'Φίλτρα', 'tasks.search': 'Αναζήτηση', 'tasks.search.placeholder': 'Τίτλος ή λέξη κλειδί...', 'tasks.search.btn': 'Αναζήτηση', 'tasks.publish': 'Δημοσίευση', 'tasks.category.all': 'Όλες', 'tasks.category.all_in': 'Όλα στην', 'tasks.category.label': 'Κατηγορία', 'tasks.location.label': 'Πόλη', 'tasks.location.placeholder': 'π.χ. Αθήνα', 'tasks.empty': 'Δεν βρέθηκαν εργασίες', 'tasks.empty.cta': 'Δημοσίευσε την πρώτη', // Task detail 'task.status.open': 'Ανοιχτή', 'task.status.in_progress': 'Σε εξέλιξη', 'task.status.completed': 'Ολοκληρωμένη', 'task.status.cancelled': 'Ακυρωμένη', 'task.status.draft': 'Πρόχειρο', 'task.budget': 'Προϋπολογισμός', 'task.location': 'Τοποθεσία', 'task.deadline': 'Ημερομηνία έναρξης', 'task.expires_at': 'Ενεργό έως', 'task.created_at': 'Δημιουργήθηκε', 'task.customer': 'Πελάτης', 'task.offer.btn': 'Υποβολή προσφοράς', 'task.invite.banner_title': 'Σας προσκαλούν σε αυτήν την εργασία', 'task.invite.banner_hint': 'Ο πελάτης σας πρόσκαλεσε προσωπικά', 'task.invite.accept': 'Αποστολή προσφοράς', 'task.invite.decline': 'Άρνηση', 'offer.accept': 'Αποδοχή', 'offer.decline': 'Απόρριψη', 'task.complete': 'Ολοκλήρωση εργασίας', 'task.complete.confirm': 'Να ολοκληρωθεί η εργασία;', 'task.edit': 'Επεξεργασία', 'task.status_label': 'Κατάσταση', 'task.yours': 'Η εργασία σου', 'task.offer.yours': 'Η προσφορά σου', 'review.leave': 'Άφησε αξιολόγηση', 'review.rating': 'Βαθμολογία', 'review.comment': 'Σχόλιο', 'review.comment.placeholder': 'Πες μας για την εμπειρία σου...', 'review.submit': 'Υποβολή αξιολόγησης', 'review.submitting': 'Αποστολή...', 'review.done': 'Η αξιολόγηση καταχωρήθηκε!', 'profile.reviews': 'Αξιολογήσεις', 'profile.no_reviews': 'Δεν υπάρχουν αξιολογήσεις ακόμα', 'profile.rating': 'Βαθμολογία', 'profile.skills.label': 'Δεξιότητες', 'profile.member_since': 'Μέλος από', 'task.offers': 'Προσφορές', 'task.offers.none': 'Δεν υπάρχουν ακόμα προσφορές', // Create task 'create.title': 'Δημοσίευση εργασίας', 'create.field.title': 'Τίτλος', 'create.field.description': 'Περιγραφή', 'create.field.category': 'Κατηγορία', 'create.field.category.select': 'Επιλέξτε...', 'create.field.location': 'Τοποθεσία', 'create.field.location.any': 'Οπουδήποτε', 'create.field.location.all': 'Ολόκληρη η πόλη', 'create.field.budget': 'Προϋπολογισμός (€)', 'create.field.deadline': 'Ημερομηνία έναρξης', 'create.field.expires_at': 'Αγγελία ενεργή έως', 'create.field.expires_at.days': '{n} ημέρες', 'create.field.budget_negotiable': 'Η τιμή είναι διαπραγματεύσιμη', 'create.field.time_slot': 'Χρόνος εκτέλεσης', 'create.field.time_slot.any': 'Οποιαδήποτε', 'create.field.time_slot.morning': 'Πρωινό (08:00–13:00)', 'create.field.time_slot.afternoon': 'Μεσημέρι (13:00–18:00)', 'create.field.time_slot.evening': 'Βράδυ (18:00–22:00)', 'create.field.time_slot.weekend': 'Σαββατοκύριακο', 'create.field.address': 'Διεύθυνση (προαιρετικά)', 'create.field.address.district': 'Συνοικία', 'create.field.address.street': 'Οδός', 'create.field.address.house': 'Αριθμός', 'create.field.confidential': 'Εμπιστευτική σημείωση', 'create.field.confidential.placeholder': 'Λεπτομέρειες που θα δει μόνο ο αναδοχόμενος...', 'create.field.confidential.hint': 'Δεν εμφανίζεται δημόσια', 'create.field.photos': 'Φωτογραφίες', 'create.field.photos.add': 'Προσθήκη φωτογραφίας', 'create.field.photos.uploading': 'Ανέβασμα...', 'task.budget_negotiable': 'Τιμή διαπραγματεύσιμη', 'task.time_slot': 'Χρόνος', 'task.confidential': 'Εμπιστευτική σημείωση', 'create.field.title.placeholder': 'π.χ. Καθαρισμός διαμερίσματος 80τμ', 'create.field.description.placeholder': 'Περίγραψε λεπτομερώς τι χρειάζεσαι...', 'create.field.location.placeholder': 'π.χ. Αθήνα, Κολωνάκι', 'create.field.budget.placeholder': 'π.χ. 100', 'create.submit': 'Δημοσίευση εργασίας', 'create.submitting': 'Δημοσίευση...', // Auth 'login.title': 'Καλωσόρισες', 'login.subtitle': 'Σύνδεση στο CanHelp', 'login.email': 'Email', 'login.password': 'Κωδικός', 'login.submit': 'Σύνδεση', 'login.submitting': 'Σύνδεση...', 'login.error': 'Λάθος email ή κωδικός', 'login.unverified.title': 'Επιβεβαιώστε το email σας', 'login.unverified.desc': 'Στείλαμε σύνδεσμο επαλήθευσης στο email σας. Ελέγξτε τα εισερχόμενα (ή spam) και πατήστε το σύνδεσμο.', 'login.unverified.resend': 'Αποστολή νέου email επαλήθευσης', 'login.unverified.sending': 'Αποστολή...', 'login.unverified.sent': '✓ Εστάλη — ελέγξτε τα εισερχόμενα', 'profile.email.verified': 'Email επαληθεύτηκε', 'profile.email.not_verified': 'Email δεν επαληθεύτηκε', 'login.no_account': 'Δεν έχεις λογαριασμό;', 'login.register_link': 'Εγγραφή', 'login.forgot_password': 'Ξέχασα τον κωδικό', 'login.or_continue_with': 'ή συνεχίστε με', 'login.continue_google': 'Σύνδεση με Google', 'forgot.title': 'Ξέχασα τον κωδικό', 'forgot.subtitle': 'Εισάγετε το email σας για να λάβετε σύνδεσμο ανάκτησης', 'forgot.email': 'Email', 'forgot.submit': 'Αποστολή', 'forgot.submitting': 'Αποστολή...', 'forgot.sent.title': 'Ελέγξτε τα εισερχόμενά σας', 'forgot.sent.desc': 'Αν υπάρχει λογαριασμός με αυτό το email, θα σας στείλουμε σύνδεσμο ανάκτησης κωδικού.', 'forgot.back_to_login': 'Επιστροφή στη σύνδεση', 'forgot.error': 'Αποτυχία αποστολής. Ελέγξτε το email σας ή δοκιμάστε ξανά.', 'forgot.error.not_found': 'Δεν βρέθηκε λογαριασμός με αυτό το email.', 'forgot.error.send_failed': 'Αποτυχία αποστολής email. Δοκιμάστε ξανά αργότερα', 'reset.title': 'Νέος κωδικός', 'reset.subtitle': 'Εισάγετε τον νέο σας κωδικό', 'reset.password': 'Νέος κωδικός', 'reset.confirm': 'Επιβεβαίωση κωδικού', 'reset.submit': 'Αλλαγή κωδικού', 'reset.submitting': 'Αποθήκευση...', 'reset.success': 'Ο κωδικός άλλαξε επιτυχώς. Ανακατεύθυνση στη σύνδεση...', 'reset.back_to_login': 'Επιστροφή στη σύνδεση', 'reset.error.mismatch': 'Οι κωδικοί δεν ταιριάζουν', 'reset.error.invalid': 'Μη έγκυρος σύνδεσμος. Παρακαλώ ζητήστε νέο.', 'register.title': 'Εγγραφή', 'register.subtitle': 'Δημιουργία λογαριασμού στο CanHelp', 'register.first_name': 'Όνομα', 'register.last_name': 'Επώνυμο', 'register.email': 'Email', 'register.password': 'Κωδικός (min 8 χαρακτήρες)', 'register.role': 'Ρόλος', 'register.role.customer': 'Χρήστης', 'register.role.customer.desc': 'Δημοσιεύω εργασίες', 'register.role.specialist': 'Ειδικός', 'register.role.specialist.desc': 'Αναλαμβάνω εργασίες', 'register.submit': 'Δημιουργία λογαριασμού', 'register.submitting': 'Εγγραφή...', 'register.has_account': 'Έχεις ήδη λογαριασμό;', 'register.login_link': 'Σύνδεση', 'register.continue_google': 'Εγγραφή με Google', 'register.check_email.title': 'Ελέγξτε το email σας', 'register.check_email.desc': 'Στείλαμε σύνδεσμο επαλήθευσης στη διεύθυνση email σας. Ελέγξτε τα εισερχόμενα (ή spam) και πατήστε τον σύνδεσμο.', 'register.check_email.login': 'Επιστροφή στη σύνδεση', 'register.captcha_failed': 'Η επαλήθευση CAPTCHA απέτυχε. Παρακαλώ δοκιμάστε ξανά.', // Dashboard 'dashboard.title': 'Πίνακας ελέγχου', 'dashboard.new_task': '+ Νέα εργασία', 'dashboard.onboarding.title': 'Καλωσήλθατε στο CanHelp 👋', 'dashboard.onboarding.subtitle': 'Διαλέξτε πώς θέλετε να ξεκινήσετε.', 'dashboard.onboarding.helper.title': 'Πρόσφερε τη βοήθειά σου', 'dashboard.onboarding.helper.desc': 'Συμπλήρωσε το προφίλ σου — δεξιότητες, κατηγορίες και περιοχές. Παίρνει μόνο λίγα λεπτά και αρχίζεις να δέχεσαι παραγγελίες.', 'dashboard.onboarding.helper.cta': 'Συμπλήρωσε το προφίλ', 'dashboard.onboarding.requester.title': 'Χρειάζεσαι βοήθεια;', 'dashboard.onboarding.requester.desc': 'Δημοσίευσε μια εργασία και οι βοηθοί θα σου στείλουν προσφορές.', 'dashboard.onboarding.requester.cta': 'Δημοσίευσε εργασία', 'dashboard.my_tasks': 'Οι εργασίες μου', 'dashboard.my_offers': 'Οι προσφορές μου', 'dashboard.invitations': 'Προσκλήσεις για εργασία', 'dashboard.offers_count': 'προσφορές', 'dashboard.declined_count': 'απορρίφθηκαν', 'dashboard.completed_tasks': 'Ολοκληρωμένες εργασίες', 'dashboard.completed_offers': 'Ολοκληρωμένες προσφορές', 'dashboard.review_pending': 'Η αξιολόγηση δεν έχει υποβληθεί ακόμα', 'tasks.new.top_specialists': 'Κορυφαίοι ειδικοί', 'tasks.new.select_category': 'Επιλέξτε κατηγορία για να δείτε ειδικούς', 'tasks.new.invite': 'Πρόσκληση', 'tasks.new.invited': 'Επιλέχθηκε ✓', 'reviews.count': 'αξιολογήσεις', 'filter.location': 'Τοποθεσία', 'filter.language': 'Γλώσσες', 'filter.language.any': 'Οποιαδήποτε γλώσσα', 'filter.category.all': 'Όλες οι κατηγορίες', 'user.categories': 'Κατηγορίες', 'user.work_area': 'Περιοχή εργασίας', 'user.specialist_cards': 'Κάρτες υπηρεσιών', 'card.skills': 'Δεξιότητες', 'card.categories': 'Κατηγορίες', 'card.geography': 'Περιοχή εργασίας', 'card.portfolio': 'Χαρτοφυλάκιο', 'card.close': 'Κλείσιμο', 'dashboard.tasks.empty': 'Δεν έχεις δημοσιεύσει εργασίες', 'dashboard.tasks.empty.cta': 'Δημοσίευσε την πρώτη σου', 'dashboard.tasks.add_new': 'Πρόσθεσε νέα εργασία', 'dashboard.offers.empty': 'Δεν έχεις υποβάλλει προσφορές', 'dashboard.offers.empty.cta': 'Βρες εργασίες', 'dashboard.customer.specialists_title': 'Ψάχνεις εκτελεστή;', 'dashboard.customer.specialists_hint': 'Δες προφίλ ειδικών, διάβασε αξιολογήσεις και κάλεσέ τους στις εργασίες σου', 'dashboard.customer.specialists_cta': 'Βρες ειδικό', 'dashboard.customer.how_title': 'Πώς λειτουργεί', 'dashboard.customer.step1': 'Δημιούργησε εργασία με περιγραφή και προϋπολογισμό', 'dashboard.customer.step2': 'Οι ειδικοί θα στείλουν προσφορές με τιμή και χρόνο', 'dashboard.customer.step3': 'Επίλεξε τον κατάλληλο και ξεκίνα τη συνεργασία', // Notifications 'notif.title': 'Ειδοποιήσεις', 'notif.mark_all': 'Σήμανση όλων ως αναγνωσμένα', 'notif.empty': 'Δεν υπάρχουν ειδοποιήσεις', 'notif.type.generic': 'Ειδοποίηση', 'notif.type.new_offer': 'Νέα προσφορά', 'notif.type.offer_accepted': 'Η προσφορά σας έγινε δεκτή', 'notif.type.offer_declined': 'Η προσφορά σας απορρίφθηκε', 'notif.type.task_completed': 'Η εργασία ολοκληρώθηκε', 'notif.type.task_cancelled': 'Η εργασία ακυρώθηκε', 'notif.type.new_message': 'Νέο μήνυμα', 'notif.type.new_review': 'Νέα αξιολόγηση', 'notif.type.task_invite': 'Πρόσκληση σε εργασία', 'notif.type.referral_reward': 'Ανταμοιβή παραπομπής', 'notif.type.specialist_card_submitted': 'Η κάρτα στάλθηκε για έλεγχο', 'notif.type.specialist_card_approved': 'Η κάρτα εγκρίθηκε', 'notif.type.specialist_card_rejected': 'Η κάρτα απορρίφθηκε', 'notif.body.new_offer': 'Νέα προσφορά για «{title}»', 'notif.body.offer_accepted': 'Η προσφορά σας για «{title}» έγινε δεκτή', 'notif.body.offer_declined': 'Η προσφορά σας για «{title}» απορρίφθηκε', 'notif.body.task_invite': 'Σας προσκαλούν για «{title}»', 'notif.body.new_review': 'Λάβατε αξιολόγηση {rating}★', 'notif.body.referral_reward': 'Προστέθηκαν {days} ημέρες πρόσβασης στο πλάνο «{plan}» στον λογαριασμό σας!', 'notif.body.specialist_card_submitted': 'Η κάρτα «{title}» στάλθηκε για έλεγχο', 'notif.body.specialist_card_approved': 'Η κάρτα «{title}» εγκρίθηκε και δημοσιεύτηκε', 'notif.body.specialist_card_rejected': 'Η κάρτα «{title}» δεν εγκρίθηκε. Διορθώστε την και στείλτε την ξανά.', // Offer status 'offer.status.pending': 'Εκκρεμεί', 'offer.status.accepted': 'Αποδεκτή', 'offer.status.declined': 'Απορρίφθηκε', 'offer.status.withdrawn': 'Αποσύρθηκε', 'offer.status.other_accepted': 'Επιλέχθηκε άλλος ειδικός', // Common 'common.loading': 'Φόρτωση...', 'common.error': 'Σφάλμα', 'common.save': 'Αποθήκευση', 'common.saving': 'Αποθήκευση...', 'common.cancel': 'Ακύρωση', 'common.add': 'Προσθήκη', 'common.close': 'Κλείσιμο', 'common.edit': 'Επεξεργασία', 'common.delete': 'Διαγραφή', 'common.from': 'από', 'common.currency': '€', 'common.greece': 'Ελλάδα', // Chat 'chat.connected': 'Συνδεδεμένος', 'chat.disconnected': 'Αποσυνδεδεμένος', 'chat.no_rooms': 'Δεν υπάρχουν συνομιλίες ακόμα', 'chat.task_fallback': 'Εργασία', 'chat.select': 'Επίλεξε συνομιλία', 'chat.no_messages': 'Δεν υπάρχουν μηνύματα', 'chat.placeholder': 'Γράψε μήνυμα... (Enter για αποστολή)', 'chat.conversation_fallback': 'Συνομιλία', 'chat.direct_chat': 'Απευθείας συνομιλία', 'chat.linked_task': 'Συνδεδεμένη εργασία', 'chat.write_btn': 'Μήνυμα', 'chat.just_now': 'μόλις τώρα', 'chat.min_ago': 'λ', 'chat.write_specialist': 'Γράψε στον ειδικό', 'chat.write_customer': 'Γράψε στον πελάτη', 'chat.notif_settings': 'Ρυθμίσεις ειδοποιήσεων', 'chat.notif_messages': 'Ειδοποιήσεις για νέα μηνύματα', 'chat.toast_title': 'Νέο μήνυμα', 'chat.toast_open': 'Άνοιγμα συνομιλίας', // Offer form 'offer.price': 'Τιμή', 'offer.price.placeholder': 'π.χ. 80', 'offer.customer_budget': 'Προϋπολογισμός πελάτη', 'offer.message': 'Μήνυμα', 'offer.optional': 'προαιρετικό', 'offer.message.placeholder': 'Παρουσίασε τον εαυτό σου, την εμπειρία σου και γιατί είσαι η καλύτερη επιλογή...', 'offer.submitting': 'Αποστολή...', // Profile 'profile.photo': 'Φωτογραφία προφίλ', 'profile.photo.change': 'Αλλαγή φωτογραφίας', 'profile.photo.hint': 'JPEG, PNG, WebP · έως 5MB', 'profile.basic_info': 'Βασικά στοιχεία', 'profile.phone': 'Τηλέφωνο', 'profile.phone.placeholder': '+30 6901234567', 'profile.bio': 'Σύντομη περιγραφή', 'profile.bio.placeholder': 'Πες μας λίγα λόγια για εσένα...', 'profile.language': 'Γλώσσα', 'profile.language.hint': 'Γλώσσα διεπαφής και email ειδοποιήσεων', 'profile.languages': 'Γλώσσες επικοινωνίας', 'profile.languages.hint': 'Επιλέξτε όλες τις γλώσσες που μιλάτε', 'profile.skills': 'Δεξιότητες', 'profile.skills.subtitle': 'Προσθέσε τις υπηρεσίες που προσφέρεις', 'profile.skills.placeholder': 'π.χ. Καθαρισμός, IT, Μαθήματα...', 'profile.role': 'Ρόλος λογαριασμού', 'profile.role.specialist': '🔧 Βοηθός', 'profile.role.admin': '👑 Admin', 'profile.role.customer': '👤 Χρήστης', 'profile.role.user': '👤 Χρήστης', 'profile.role.change': 'Για αλλαγή ρόλου επικοινωνήστε με την υποστήριξη.', 'profile.become_specialist': 'Πρόσφερε βοήθεια', 'profile.become_specialist.desc': 'Δημιούργησε το προφίλ βοηθού σου, πρόσφερε τις δεξιότητές σου και αρχίνισε να λαμβάνεις εργασίες.', 'become_specialist.hero.title': 'Πρόσφερε τις δεξιότητές σου', 'become_specialist.hero.subtitle': 'Δημιούργησε προφίλ βοηθού και λάβε αιτήματα από ανθρώπους που χρειάζονται βοήθεια', 'become_specialist.how.title': 'Πώς λειτουργεί', 'become_specialist.step1.title': 'Δημιούργησε κάρτα ειδικού', 'become_specialist.step1.desc': 'Δήλωσε κατηγορίες, δεξιότητες και περιοχές κάλυψης — το σύστημα θα βρει τις κατάλληλες εργασίες για σένα αυτόματα', 'become_specialist.step2.title': 'Βρες εργασίες', 'become_specialist.step2.desc': 'Ανακάλυψε εργασίες στις κατηγορίες σου στην ενότητα «Αναζήτηση εργασιών»', 'become_specialist.step3.title': 'Στείλε προσφορά & κέρδισε', 'become_specialist.step3.desc': 'Υποβάλε προσφορές με τιμή και χρόνο, επικοινωνήσε με πελάτες και ολοκλήρωσε εργασίες', 'become_specialist.benefits.title': 'Πλεονεκτήματα προφίλ ειδικού', 'become_specialist.benefit1': 'Αναζήτηση εργασιών ανά κατηγορία και τοποθεσία', 'become_specialist.benefit2': 'Δημόσιο προφίλ με αξιολογήσεις πελατών', 'become_specialist.benefit3': 'Πρόγραμμα διαθεσιμότητας ορατό στους πελάτες', 'become_specialist.benefit4': 'Προσθήκη σε αγαπημένα από πελάτες', 'become_specialist.cta': 'Περισσότερα', 'become_specialist.free_badge': 'Δωρεάν εγγραφή', 'profile.tab.notifications': 'Ειδοποιήσεις', 'profile.tab.reviews': 'Αξιολογήσεις', 'profile.tab.referral': 'Παραπομπές', 'profile.tab.auto_response': 'Αυτόματη απάντηση', 'profile.tab.site': 'Site', 'profile.site.title': 'Προσωπική σελίδα', 'profile.site.url_label': 'Προσωπικό site', 'profile.site.copy': 'Αντιγραφή', 'profile.site.copied': 'Αντιγράφηκε', 'profile.site.visible_title': 'Τι εμφανίζεται στη σελίδα σας', 'profile.site.visible.name': 'Όνομα και φωτογραφία', 'profile.site.visible.bio': 'Βιογραφικό', 'profile.site.visible.rating': 'Αξιολόγηση και κριτικές', 'profile.site.visible.portfolio': 'Χαρτοφυλάκιο / Κάρτες', 'profile.site.visible.contacts': 'Στοιχεία επικοινωνίας', 'profile.site.visible.full_last_name': 'Πλήρες επώνυμο', 'profile.site.visible.services': 'Κάρτες υπηρεσιών', 'profile.site.visible.reviews': 'Ενότητα κριτικών', 'profile.site.visible.status': 'Κατάσταση «Έτοιμος να βοηθήσω»', 'profile.site.theme': 'Θέμα εμφάνισης', 'profile.site.theme.dark': 'Σκοτεινό', 'profile.site.theme.light': 'Φωτεινό', 'profile.site.slug_taken': 'Αυτή η διεύθυνση είναι ήδη κατειλημμένη', 'profile.site.stats.title': 'Στατιστικά επισκεψιμότητας', 'profile.site.stats.days': 'τελευταίες 30 ημέρες', 'profile.site.stats.views': 'Προβολές', 'profile.site.stats.unique': 'Μοναδικοί επισκέπτες', 'profile.site.stats.messages': 'Μηνύματα', 'profile.site.stats.total_views': 'Συνολικές προβολές', 'profile.site.stats.total_unique': 'Μοναδικοί επισκέπτες', 'profile.site.stats.total_messages': 'Μηνύματα', 'profile.site.stats.empty': 'Δεν υπάρχουν δεδομένα ακόμη', 'profile.site.stats.loading': 'Φόρτωση στατιστικών...', 'profile.site.stats.no_slug': 'Ορίστε τη διεύθυνση του site για να δείτε στατιστικά', 'profile.site.edit_bio_hint': 'Το βιογραφικό και η φωτογραφία ρυθμίζονται στην καρτέλα «Βασικά».', 'profile.site.seo.title': 'SEO — μεταδεδομένα σελίδας', 'profile.site.seo.hint': 'Εμφανίζεται στα αποτελέσματα αναζήτησης. Αποθηκεύστε για αυτόματη μετάφραση σε όλες τις γλώσσες.', 'profile.site.seo.site_title': 'Τίτλος σελίδας', 'profile.site.seo.site_title_placeholder': 'Γιάννης Παπαδόπουλος — Υδραυλικός στην Αθήνα', 'profile.site.seo.site_desc': 'Μετα-περιγραφή', 'profile.site.seo.site_desc_placeholder': 'Σύντομη περιγραφή για τις μηχανές αναζήτησης...', 'status.can_help_now_hint': 'Η κάρτα σου εμφανίζεται ψηλότερα', 'status.need_help_hint': 'Οι ειδικοί μπορούν να σε βοηθήσουν', 'profile.referral.title': 'Πρόγραμμα παραπομπών', 'profile.referral.desc': 'Μοιράσου τον σύνδεσμο σου και κέρδισε ανταμοιβές για κάθε νέο χρήστη.', 'profile.referral.link_label': 'Ο σύνδεσμος παραπομπής σου', 'profile.referral.copy': 'Αντιγραφή', 'profile.referral.copied': 'Αντιγράφηκε!', 'profile.referral.invited_count': 'επιτυχείς παραπομπές', 'profile.referral.no_code': 'Ο κωδικός παραπομπής δεν είναι διαθέσιμος.', 'notifications.title': 'Ρυθμίσεις ειδοποιήσεων', 'notifications.email.new_tasks': 'Email για νέες εργασίες', 'notifications.email.new_tasks.desc': 'Λάβε email όταν δημοσιευτεί νέα εργασία στις κατηγορίες σου', 'notifications.messages.desc': 'Λαμβάνεις ειδοποίηση όταν έρθει νέο μήνυμα', 'notifications.saved': 'Ρυθμίσεις αποθηκεύτηκαν', 'notifications.plan_required': 'Συνδρομή απαιτείται για αυτή τη λειτουργία', 'profile.tab.info': 'Βασικά στοιχεία', 'profile.tab.finance': 'Οικονομικά', 'profile.tab.skills': 'Δεξιότητες', 'profile.tab.categories': 'Κατηγορίες', 'profile.tab.geography': 'Γεωγραφία', 'profile.specialist.categories': 'Κατηγορίες εργασιών', 'profile.specialist.categories.desc': 'Επίλεξε τις κατηγορίες στις οποίες εργάζεσαι', 'profile.specialist.geography': 'Περιοχές κάλυψης', 'profile.specialist.geography.desc': 'Επίλεξε τις πόλεις / περιοχές όπου δραστηριοποιείσαι', 'profile.saving': 'Αποθήκευση...', 'profile.upload.error': 'Σφάλμα κατά την αναφόρτωση', 'profile.saved': 'Αποθηκεύτηκε', 'profile.tab.cards': 'Προσφορές', 'profile.cards.count': 'Προσφορές', 'profile.cards.add': 'Νέα προσφορά', 'profile.cards.new_title': 'Τίτλος νέας προσφοράς', 'profile.cards.placeholder': 'π.χ. Υδραυλικά', 'profile.cards.create': 'Δημιουργία', 'profile.cards.cancel': 'Ακύρωση', 'profile.cards.empty': 'Δεν έχετε προσφορές', 'profile.cards.empty_hint': 'Δημιουργήστε την πρώτη σας κάρτα για να προβάλετε τις υπηρεσίες σας στους πελάτες.', 'profile.cards.create_first': 'Δημιουργήστε την πρώτη σας προσφορά', 'profile.cards.delete_confirm': 'Διαγραφή προσφοράς;', 'profile.listing_requirements.published_card': 'Δημοσιεύστε τουλάχιστον μία κάρτα', 'profile.listing_requirements.title': 'Το προφίλ σας δεν εμφανίζεται ακόμη στις προσφορές', 'profile.listing_requirements.hint': 'Για να γίνει ορατή η κάρτα, ολοκληρώστε αυτές τις προϋποθέσεις:', 'profile.listing_requirements.bio': 'Προσθέστε ένα σύντομο βιογραφικό στην ενότητα προφίλ', 'profile.listing_requirements.categories': 'Προσθέστε τουλάχιστον μία κατηγορία στην ενεργή κάρτα', 'profile.listing_requirements.locations': 'Προσθέστε τουλάχιστον μία τοποθεσία στην ενεργή κάρτα', 'profile.listing_requirements.card_inactive': 'Κάντε την κάρτα ενεργή', 'profile.listing_requirements.review_pending': 'Η κάρτα είναι υπό έλεγχο', 'profile.card.visibility_issue': 'Η κάρτα δεν εμφανίζεται στις προσφορές', 'profile.card.tab.main': 'Γενικά', 'profile.card.tab.skills': 'Δεξιότητες', 'profile.card.tab.categories': 'Κατηγορίες', 'profile.card.tab.geography': 'Γεωγραφία', 'profile.card.tab.portfolio': 'Γκαλερί', 'profile.card.tab.pricelist': 'Τιμοκατάλογος', 'profile.card.pricelist.empty': 'Δεν έχουν οριστεί ομάδες τιμοκαταλόγου.', 'profile.card.pricelist.add_group': 'Προσθήκη ομάδας', 'profile.card.pricelist.group_title': 'Τίτλος ομάδας', 'profile.card.pricelist.add_item': 'Προσθήκη στοιχείου', 'profile.card.pricelist.item_name': 'Υπηρεσία / εργασία', 'profile.card.pricelist.item_desc': 'Περιγραφή (προαιρετικό)', 'profile.card.pricelist.item_price': 'Τιμή', 'profile.card.pricelist.item_unit': 'Μονάδα (π.χ. /ώρα)', 'profile.card.pricelist.save_group': 'Αποθήκευση ομάδας', 'profile.card.pricelist.save_item': 'Αποθήκευση', 'profile.card.pricelist.delete_group': 'Διαγραφή ομάδας', 'profile.card.pricelist.delete_item': 'Διαγραφή', 'profile.card.active': 'Ενεργή', 'profile.card.review_pending': 'Σε αναμονή έγκρισης', 'profile.card.review_pending_hint': 'Η κάρτα σας ελέγχεται τώρα από τη διαχείριση.', 'profile.card.review_submitted': 'Η κάρτα στάλθηκε για έλεγχο', 'profile.card.review_approved': 'Η κάρτα εγκρίθηκε', 'profile.card.review_approved_hint': 'Η κάρτα σας εμφανίζεται τώρα στις προσφορές.', 'profile.card.review_rejected': 'Η κάρτα απορρίφθηκε', 'profile.card.review_rejected_hint': 'Η κάρτα σας δεν εγκρίθηκε. Διορθώστε την και στείλτε την ξανά.', 'profile.card.submit_review': 'Αποστολή για έλεγχο', 'profile.card.withdraw_review': 'Ανάκληση αίτησης', 'profile.card.unpublish': 'Αφαίρεση από δημοσίευση', 'profile.card.save': 'Αποθήκευση', 'profile.card.saved': 'Αποθηκεύτηκε', 'profile.card.delete': 'Διαγραφή', 'profile.card.skill.add': 'Προσθήκη δεξιότητας', 'profile.card.photo.add': 'Προσθήκη φωτογραφίας', 'profile.card.photo.uploading': 'Μεταφόρτωση...', 'profile.card.photo.empty': 'Δεν υπάρχουν φωτογραφίες', 'profile.card.item.title': 'Τίτλος', 'profile.card.item.desc': 'Περιγραφή', 'profile.card.item.save': 'Αποθήκευση', 'profile.card.item.cancel': 'Ακύρωση', 'profile.card.item.edit': 'Επεξεργασία', 'profile.card.description': 'Περιγραφή κάρτας', 'profile.card.desc_auto_translate': 'Κατά την αποθήκευση θα μεταφραστεί αυτόματα σε άλλες γλώσσες', 'profile.card.desc_translated': 'Υπάρχουν μεταφράσεις:', 'profile.upgrade.cards_limit': 'Όριο χαρτοφυλακίων εξαντλήθηκε', 'profile.upgrade.plan': 'Τρέχον πλάνο:', 'profile.upgrade.contact': 'Επικοινωνήστε με τον διαχειριστή για αλλαγή πλάνου', 'profile.upgrade.ok': 'Εντάξει', 'profile.plan.title': 'Πλάνο συνδρομής', 'profile.balance': 'Υπόλοιπο', 'profile.balance.topup': 'Αναπλήρωση υπολοίπου', 'profile.balance.topup.title': 'Αναπλήρωση υπολοίπου', 'profile.balance.topup.amount': 'Ποσό (σε EUR)', 'profile.balance.topup.hint': 'Επιλέξτε ποσό ή εισαγάγετε μανούαλα', 'profile.balance.topup.submit': 'Πληρωμή', 'profile.balance.topup.loading': 'Ρεδιρεκτάρισμα...', 'profile.balance.topup.error': 'Σφάλμα μετάβασης στην πληρωμή. Προσπαθήστε ξανά.', 'payment.success.title': 'Πληρωμή επιτυχής!', 'payment.success.desc': 'Το υπόλοιπό σας ενημερώθηκε.', 'payment.cancelled.title': 'Ακύρωση πληρωμής', 'payment.cancelled.desc': 'Η πληρωμή ακυρώθηκε. Κανένα χρήμα δεν χρεώθηκε.', 'payment.pending.title': 'Σε εξέλιξη...', 'payment.pending.desc': 'Επεξεργαζόμαστε την πληρωμή σας.', 'payment.back_to_profile': 'Επιστροφή στο προφίλ', 'profile.plan.basic': 'Βασικό (δωρεάν)', 'profile.plan.contact_upgrade': 'Επικοινωνήστε με τον διαχειριστή για αναβάθμιση', 'profile.plan.cards_up_to': 'Χαρτοφυλάκια: έως', 'profile.plan.cards_unlimited': 'Χαρτοφυλάκια: απεριόριστα', 'profile.plan.tasks_up_to': 'Εργασίες: έως', 'profile.plan.offers_up_to': 'Προσφορές: έως', 'profile.plan.valid_until': 'Ισχύει έως', 'profile.plan.no_expiry': 'Δεν λήγει', // Create task 'create.error': 'Σφάλμα κατά τη δημοσίευση', // Tasks list extras 'tasks.category.general': 'Γενικά', 'tasks.budget.range': 'Εύρος:', 'tasks.budget.from': 'από', 'tasks.budget.to': 'έως', 'tasks.filter.reset': 'Εκκαθάριση φίλτρων', 'tasks.load_more': 'Φόρτωση ακόμα', 'tasks.showing': 'Αποτελέσματα:', 'tasks.field.budget': 'Προϋπολογισμός, €', // Admin 'admin.title': 'Πίνακας Διαχείρισης', 'admin.tab.stats': 'Στατιστικά', 'admin.tab.users': 'Χρήστες', 'admin.tab.tasks': 'Εργασίες', 'admin.tab.reports': 'Αναφορές', 'admin.tab.moderation': 'Μονάδα ελέγχου', 'admin.stats.users': 'Χρήστες', 'admin.stats.tasks': 'Εργασίες', 'admin.stats.offers': 'Προσφορές', 'admin.stats.reviews': 'Αξιολογήσεις', 'admin.tasks.by_status': 'Εργασίες ανά κατάσταση', 'admin.col.user': 'Χρήστης', 'admin.col.email': 'Email', 'admin.col.role': 'Ρόλος', 'admin.col.registered': 'Εγγραφή', 'admin.col.status': 'Κατάσταση', 'admin.col.title': 'Τίτλος', 'admin.col.budget': 'Προϋπολογισμός', 'admin.col.created': 'Δημιουργία', 'admin.users.active': 'Ενεργός', 'admin.users.inactive': 'Ανενεργός', 'admin.users.deactivate': 'Απενεργοποίηση', 'admin.users.activate': 'Ενεργοποίηση', 'admin.tasks.cancel': 'Ακύρωση', 'admin.reports.none': 'Δεν υπάρχουν αναφορές', 'admin.moderation.none': 'Δεν βρέθηκαν προσφορές για έλεγχο', 'admin.moderation.pending': 'Σε αναμονή', 'admin.moderation.active': 'Ενεργό', 'admin.moderation.approve': 'Έγκριση', 'admin.moderation.block': 'Μπλοκάρισμα', 'admin.moderation.pending_title': 'Προσφορές προς έγκριση', 'admin.moderation.active_title': 'Ενεργές προσφορές', 'admin.moderation.pending_count': 'Σε αναμονή', 'admin.moderation.active_count': 'Ενεργές', 'admin.moderation.pending_hint': 'Νέες προσφορές που περιμένουν έγκριση', 'admin.moderation.active_hint': 'Ενεργές προσφορές που μπορείτε να μπλοκάρετε', 'admin.moderation.pending_empty': 'Δεν υπάρχουν νέες προσφορές προς έγκριση', 'admin.moderation.active_empty': 'Δεν βρέθηκαν ενεργές προσφορές', 'admin.reports.reviewed': 'Αναθεωρήθηκε', 'admin.reports.dismiss': 'Απόρριψη', 'admin.pagination.total': 'Σύνολο', 'admin.users.role.change': 'Αλλαγή ρόλου', 'admin.users.search.placeholder': 'Αναζήτηση ονόματος ή email...', 'admin.tasks.delete': 'Διαγραφή', 'admin.tasks.delete.confirm': 'Διαγραφή αυτής της εργασίας μόνιμα;', 'admin.tasks.search.placeholder': 'Αναζήτηση τίτλου...', 'admin.col.customer': 'Πελάτης', 'admin.col.reporter': 'Καταγγέλλων', 'admin.col.target': 'Στόχος', 'admin.filter.all_roles': 'Όλοι οι ρόλοι', 'admin.filter.all_statuses': 'Όλες οι καταστάσεις', 'admin.reports.target.task': 'Εργασία', 'admin.reports.target.user': 'Χρήστης', 'admin.tab.categories': 'Κατηγορίες', 'admin.tab.locations': 'Πόλεις & Περιοχές', 'admin.tab.logs': 'Αρχεία', 'admin.tab.plans': 'Πακέτα', 'admin.tab.settings': 'Ρυθμίσεις', 'admin.logs.subtab.ai': 'AI Logs', 'admin.logs.subtab.activity': 'Δραστηριότητα', 'admin.logs.subtab.mail': 'Mail', 'admin.logs.subtab.notifications': 'Ειδοποιήσεις', 'admin.notif_logs.type': 'Τύπος', 'admin.notif_logs.title': 'Τίτλος', 'admin.notif_logs.read': 'Διαβασμένο', 'admin.notif_logs.empty': 'Δεν υπάρχουν αρχεία ειδοποιήσεων', 'admin.stats.notif_chart_title': 'Ειδοποιήσεις ανά ημέρα', 'admin.stats.notif_label': 'Ειδοποιήσεις', 'admin.stats.mail_chart_title': 'Emails ανά ημέρα', 'admin.stats.mail_label': 'Emails', 'admin.filter.all': 'Όλα', 'admin.stats.specialists': 'Βοηθοί', 'admin.col.plan': 'Πακέτο', 'admin.back_home': 'Αρχική', 'admin.plans.title': 'Πακέτα συνδρομής', 'admin.plans.add': '+ Νέο πακέτο', 'admin.plans.empty': 'Δεν υπάρχουν πακέτα', 'admin.plans.form.new': 'Νέο πακέτο', 'admin.plans.form.edit': 'Επεξεργασία πακέτου', 'admin.plans.form.name': 'Όνομα', 'admin.plans.form.price': 'Τιμή (EUR)', 'admin.plans.form.old_price': 'Παλιά τιμή (EUR, προαιρετικό)', 'admin.plans.form.max_offers': 'Μέγ. προσφορές (κενό = χωρίς όριο)', 'admin.plans.form.max_cards': 'Μέγ. προσφορές (κενό = χωρίς όριο)', 'admin.plans.form.duration_days': 'Διάρκεια (ημέρες, κενό = χωρίς λήξη)', 'admin.plans.form.description': 'Περιγραφή', 'admin.plans.form.features': 'Δυνατότητες (μία ανά γραμμή)', 'admin.plans.form.notify': 'Ειδοποιήσεις νέων εργασιών', 'admin.plans.form.default': 'Προεπιλογή', 'admin.plans.form.active': 'Ενεργό', 'admin.plans.form.order': 'Σειρά', 'admin.plans.form.role': 'Ρόλος', 'admin.plans.form.tier': 'Επίπεδο', 'admin.plans.form.role.customer': 'Πελάτης', 'admin.plans.form.role.specialist': 'Βοηθός', 'admin.plans.form.tier.free': 'Δωρεάν', 'admin.plans.form.tier.pro': 'Pro', 'admin.plans.form.tier.ultimate': 'Ultimate', 'admin.plans.form.section.limits': 'Όρια (κενό = χωρίς όριο)', 'admin.plans.form.max_messages_day': 'Μέγ. μηνύματα/ημέρα', 'admin.plans.form.max_orders_day': 'Μέγ. παραγγελίες/ημέρα', 'admin.plans.form.max_skills': 'Μέγ. δεξιότητες', 'admin.plans.form.max_profiles': 'Μέγ. προφίλ', 'admin.plans.form.max_portfolio': 'Μέγ. στοιχεία χαρτοφυλακίου', 'admin.plans.form.section.boost': 'Πολλαπλασιαστές & Ενίσχυση', 'admin.plans.form.search_boost': 'Ενίσχυση αναζήτησης', 'admin.plans.form.offers_multiplier': 'Πολλαπλασιαστής προσφορών', 'admin.plans.form.section.contact': 'Δικαιώματα επικοινωνίας', 'admin.plans.form.can_contact_free': 'Επικοινωνία με δωρεάν χρήστες', 'admin.plans.form.can_contact_pro': 'Επικοινωνία με Pro χρήστες', 'admin.plans.form.can_contact_all': 'Επικοινωνία με όλους', 'admin.plans.form.can_show_contact': 'Εμφάνιση στοιχείων επικοινωνίας', 'admin.plans.form.can_view_phone': 'Προβολή τηλεφώνου', 'admin.plans.form.section.features': 'Λειτουργίες', 'admin.plans.form.upload_video': 'Μεταφόρτωση βίντεο', 'admin.plans.form.favorites': 'Αγαπημένα', 'admin.plans.form.google_calendar': 'Google Calendar', 'admin.plans.form.verified_badge': 'Σήμα επαλήθευσης', 'admin.plans.form.highlighted_reviews': 'Προβεβλημένες κριτικές', 'admin.plans.form.personal_site': 'Προσωπική σελίδα', 'admin.plans.form.can_help_now': 'Κατάσταση «Μπορώ να βοηθήσω»', 'admin.plans.form.need_help': 'Κατάσταση «Χρειάζομαι βοήθεια»', 'admin.plans.form.auto_response': 'Αυτόματη απάντηση', 'admin.plans.form.auto_match': 'Αυτόματη αντιστοίχιση', 'admin.plans.form.price_list': 'Τιμοκατάλογος', 'admin.plans.form.instant_dispatch_free': 'Άμεση αποστολή (δωρεάν)', 'admin.plans.form.instant_dispatch_pro': 'Άμεση αποστολή (Pro)', 'admin.plans.badge.default': 'Προεπιλογή', 'admin.plans.badge.inactive': 'Ανενεργό', 'admin.plans.make_default': 'Ορισμός ως προεπιλογή', 'admin.plans.tasks': 'Εργασίες', 'admin.plans.offers': 'Προσφορές', 'admin.plans.cards': 'Προσφορές', 'admin.plans.notify_tasks': 'Ειδοποιήσεις εργασιών', 'admin.plans.delete.confirm': 'Διαγραφή πακέτου', 'admin.activity.title': 'Αρχείο δραστηριότητας', 'admin.activity.event': 'Γεγονός', 'admin.activity.all_events': 'Όλα τα γεγονότα', 'admin.activity.from': 'Από', 'admin.activity.to': 'Έως', 'admin.activity.reset': 'Επαναφορά', 'admin.activity.total': 'Σύνολο', 'admin.activity.empty': 'Δεν υπάρχουν εγγραφές', 'admin.mail.event': 'Συμβάν email', 'admin.mail.all_events': 'Όλα τα email συμβάντα', 'admin.mail.from': 'Από', 'admin.mail.to': 'Έως', 'admin.mail.reset': 'Επαναφορά', 'admin.mail.total': 'Σύνολο', 'admin.mail.empty': 'Δεν υπάρχουν email logs', 'admin.mail.recipient': 'Παραλήπτης', 'admin.mail.provider': 'Πάροχος', 'admin.mail.details': 'Λεπτομέρειες', 'admin.mail.status': 'Κατάσταση', 'admin.mail.success': 'Επιτυχία', 'admin.mail.failed': 'Σφάλμα', 'admin.event.email_sent': 'Email sent', 'admin.event.email_failed': 'Email failed', 'admin.event.email_dev': 'Email DEV fallback', 'admin.event.admin_email_test_sent': 'Admin test email sent', 'admin.event.admin_email_test_failed': 'Admin test email failed', 'admin.logs.empty': 'Δεν υπάρχουν εγγραφές', 'admin.logs.date': 'Ημερομηνία', 'admin.logs.provider': 'Πάροχος', 'admin.logs.model': 'Μοντέλο', 'admin.logs.action': 'Ενέργεια', 'admin.logs.langs': 'Γλώσσες', 'admin.logs.in': 'Είσοδος', 'admin.logs.out': 'Έξοδος', 'admin.logs.total': 'Σύνολο', 'admin.logs.ms': 'ms', 'admin.logs.status': 'Κατάσταση', 'admin.stats.activity_30d': 'Δραστηριότητα 30 ημερών', 'admin.stats.tasks_label': 'Εργασίες', 'admin.stats.users_label': 'Χρήστες', 'admin.stats.specialists_label': 'Βοηθοί', 'admin.stats.tokens_title': 'Χρήση tokens (ανά μήνα)', 'admin.stats.tokens_out': 'Εξερχόμενα', 'admin.stats.tokens_in': 'Εισερχόμενα', 'admin.stats.tokens_out_label': 'Εξερχόμενα tokens', 'admin.stats.tokens_in_label': 'Εισερχόμενα tokens', 'admin.stats.cost_label': 'Κόστος (USD)', 'admin.stats.tasks_by_status': 'Εργασίες ανά κατάσταση', 'admin.task_status.open': 'Ανοιχτές', 'admin.task_status.in_progress': 'Σε εξέλιξη', 'admin.task_status.completed': 'Ολοκληρωμένες', 'admin.task_status.cancelled': 'Ακυρωμένες', 'admin.task_status.draft': 'Προσχέδια', 'admin.settings.tab.general': 'Γενικά', 'admin.settings.tab.smtp': 'E-Mail', 'admin.settings.tab.notifications': 'Ειδοποιήσεις', 'admin.settings.tab.payment': 'Πληρωμή', 'admin.settings.tab.referral': 'Παραπομπές', 'admin.settings.tab.seo': 'SEO', 'admin.settings.tab.socials': 'Κοινωνικά δίκτυα', 'admin.settings.tab.telegram': 'Telegram Bot', 'admin.settings.telegram.title': 'Ρυθμίσεις Telegram Bot', 'admin.settings.telegram.help': 'Δημιουργήστε bot μέσω @BotFather. Για chat ID χρησιμοποιήστε @userinfobot.', 'admin.settings.telegram.bot_token': 'Bot Token', 'admin.settings.telegram.admin_chat_id': 'Admin Chat ID', 'admin.settings.telegram.admin_chat_hint': 'Γράψτε /start στο bot σας, μετά στείλτε μήνυμα μέσω @userinfobot για να λάβετε το chat ID', 'admin.settings.telegram.channel_id': 'Channel ID', 'admin.settings.telegram.channels_title': 'Κανάλια ανά γλώσσα', 'admin.settings.telegram.channel_hint': 'Αναγνωριστικό δημόσιου καναλιού ή @όνομα καναλιού', 'admin.settings.telegram.notify_registrations': 'Ειδοποίηση νέων εγγραφών', 'admin.settings.telegram.notify_registrations_hint': 'Αποστολή μηνύματος στον admin κατά την εγγραφή νέου χρήστη', 'admin.settings.telegram.post_new_tasks': 'Δημοσίευση νέων εργασιών', 'admin.settings.telegram.post_new_tasks_hint': 'Αυτόματη δημοσίευση νέων εργασιών στο κανάλι', 'admin.settings.telegram.test': 'Δοκιμή', 'admin.settings.telegram.verify': 'Επαλήθευση', 'admin.settings.telegram.test_ok': 'Η σύνδεση λειτουργεί', 'admin.settings.telegram.test_fail': 'Σφάλμα σύνδεσης', 'admin.settings.socials.title': 'Σύνδεσμοι κοινωνικών δικτύων', 'admin.settings.socials.hint': 'Συμπληρωμένες εγγραφές εμφανίζονται στο υπόγειο', 'admin.settings.seo.maintenance_label': 'Λειτουργία συντήρησης', 'admin.settings.seo.maintenance_hint': 'Εμφάνιση σελίδας συντήρησης σε όλους τους επισκέπτες', 'admin.settings.seo.indexing_label': 'Ευρετηρίαση από μηχανές αναζήτησης', 'admin.settings.seo.indexing_hint': 'Επιτρέπει στις μηχανές αναζήτησης να ευρετηριάσουν τον ιστότοπο', 'admin.settings.seo.head_scripts_label': 'Scripts στο (JS)', 'admin.settings.seo.head_scripts_hint': 'Εκτελείται σε κάθε σελίδα (Google Tag Manager, analytics κ.λπ.)', 'admin.settings.seo.site_title_label': 'Τίτλος ιστότοπου', 'admin.settings.seo.site_description_label': 'Περιγραφή ιστότοπου (meta description)', 'admin.settings.referral.title': 'Πρόγραμμα παραπομπών', 'admin.settings.referral.hint': 'Επιβράβευσε χρήστες που φέρνουν νέους εγγεγραμμένους.', 'admin.settings.referral.enabled_label': 'Ενεργό', 'admin.settings.referral.enabled_hint': 'Ενεργοποίηση / απενεργοποίηση εφαρμογής ανταμοιβών', 'admin.settings.referral.customer_section': 'Για πελάτες', 'admin.settings.referral.specialist_section': 'Για βοηθούς', 'admin.settings.referral.plan_label': 'Πλάνο ανταμοιβής', 'admin.settings.referral.no_plan': '— χωρίς πλάνο —', 'admin.settings.referral.plan_hint': 'Αυτό το πλάνο θα ανατεθεί στον χρήστη που έφερε νέους. Εάν το τρέχον πλάνο του είναι υψηλότερο, θα προστεθούν μόνο οι μέρες.', 'admin.settings.referral.days_label': 'Ημέρες ανταμοιβής', 'admin.settings.referral.days_hint': 'Αριθμός ημερών που θα προστεθούν στη λήξη του πλάνου.', 'admin.settings.general.title': 'Γενικές ρυθμίσεις', 'admin.settings.general.site_name': 'Όνομα ιστότοπου', 'admin.settings.general.site_url': 'URL ιστότοπου', 'admin.settings.general.contact_email': 'Email επικοινωνίας', 'admin.settings.general.support_phone': 'Τηλέφωνο υποστήριξης', 'admin.settings.smtp.title': 'Ρυθμίσεις SMTP', 'admin.settings.smtp.hint': 'Χρησιμοποιείται για αποστολή ειδοποιήσεων email.', 'admin.settings.smtp.host': 'SMTP Host', 'admin.settings.smtp.port': 'Θύρα', 'admin.settings.smtp.encryption': 'Κρυπτογράφηση', 'admin.settings.smtp.enc.none': 'Χωρίς', 'admin.settings.smtp.enc.tls': 'STARTTLS (θύρα 587)', 'admin.settings.smtp.enc.ssl': 'SSL/TLS (θύρα 465)', 'admin.settings.smtp.username': 'Όνομα χρήστη', 'admin.settings.smtp.password': 'Κωδικός / App Password', 'admin.settings.smtp.from_name': 'Όνομα αποστολέα', 'admin.settings.smtp.from_email': 'Email αποστολέα', 'admin.settings.smtp.test': 'Αποστολή δοκιμαστικού email', 'admin.settings.smtp.sending': 'Αποστολή...', 'admin.settings.payment.hint': 'Τα στοιχεία για ePay Piraeus Bank.', 'admin.settings.env.test': 'Δοκιμαστικό (sandbox)', 'admin.settings.env.prod': 'Παραγωγή', 'admin.settings.env.label': 'Περιβάλλον', 'admin.settings.merchant_id': 'Merchant ID', 'admin.settings.api_user': 'API User', 'admin.settings.api_password': 'API Password', 'admin.settings.confirm_url': 'Confirmation URL (webhook)', 'admin.settings.cancel_url': 'Cancel URL', 'admin.settings.active': 'Ενεργό', 'admin.settings.saving': 'Αποθήκευση...', 'admin.settings.saved': '✓ Αποθηκεύτηκε', 'admin.notif.vars_hint': 'Διαθέσιμες μεταβλητές στα πρότυπα', 'admin.notif.tmpl.not_set': 'Πρότυπο δεν έχει οριστεί', 'admin.notif.tmpl.subject_label': 'Θέμα email', 'admin.notif.tmpl.body_label': 'Κείμενο email (HTML)', 'admin.notif.tmpl.save': 'Αποθήκευση', 'admin.notif.tmpl.close': 'Κλείσιμο', 'admin.notif.tmpl.translate': 'Αυτόματη μετάφραση', 'admin.notif.tmpl.translating': 'Μετάφραση...', 'admin.notif.tmpl.saving': 'Αποθήκευση...', 'admin.notif.email_verification': 'Επαλήθευση email', 'admin.notif.registration_success': 'Επιτυχής εγγραφή', 'admin.notif.password_reset': 'Επαναφορά κωδικού', 'admin.notif.new_offer': 'Νέα προσφορά', 'admin.notif.new_task': 'Νέα εργασία', 'admin.notif.offer_accepted': 'Προσφορά αποδεκτή', 'admin.notif.new_message': 'Νέο μήνυμα', 'admin.notif.offer_declined': 'Απόρριψη προσφοράς', 'admin.notif.offer_other_accepted': 'Επιλέχθηκε άλλος ειδικός', 'admin.notif.task_updated': 'Ενημέρωση εργασίας', 'admin.notif.deadline_reminder': 'Υπενθύμιση προθεσμίας', 'admin.notif.task_archived': 'Αυτόματη απόσυρση εργασίας', 'admin.notif.referral_reward': 'Ανταμοιβή παραπομπής', // Plan lifecycle email templates 'admin.email_template.plan_activated': 'Τιμολόγιο — ενεργοποίηση πλάνου', 'admin.email_template.plan_upgraded': 'Τιμολόγιο — αναβάθμιση πλάνου', 'admin.email_template.plan_downgrade_scheduled': 'Τιμολόγιο — προγραμματισμένη υποβάθμιση', 'admin.email_template.plan_downgrade_applied': 'Τιμολόγιο — εφαρμογή υποβάθμισης', 'admin.email_template.plan_renewal_reminder': 'Τιμολόγιο — υπενθύμιση ανανέωσης', 'admin.email_template.plan_insufficient_funds': 'Τιμολόγιο — ανεπαρκές υπόλοιπο', // Pricing confirm modal 'pricing.confirm.title': 'Επιβεβαίωση επιλογής πλάνου', 'pricing.confirm.plan': 'Πλάνο', 'pricing.confirm.prorated': 'Αναλογική έκπτωση', 'pricing.confirm.effective_price': 'Προς πληρωμή', 'pricing.confirm.your_balance': 'Το υπόλοιπό σας', 'pricing.confirm.downgrade_info': 'Η μετάβαση στο νέο πλάνο θα γίνει αυτόματα μετά τη λήξη της τρέχουσας περιόδου.', 'pricing.confirm.insufficient': 'Ανεπαρκές υπόλοιπο.', 'pricing.confirm.top_up': 'Ανανέωση', 'pricing.confirm.schedule_downgrade': 'Προγραμματισμός μετάβασης', 'pricing.confirm.pay': 'Πληρωμή', 'admin.user_edit.title': 'Επεξεργασία χρήστη', 'admin.user_edit.email': 'Email', 'admin.user_edit.email_verified': 'Διευθυνση email επαληθεύτηκε', 'admin.user_edit.email_not_verified': 'Email δεν έχει επαληθευτεί', 'admin.user_edit.verify_email_btn': 'Χειροκίνητη επαλήθευση', 'admin.user_edit.verify_email_done': 'Email επαληθεύτηκε!', 'admin.user_edit.id': 'ID', 'admin.user_edit.registered': 'Εγγραφή', 'admin.user_edit.last_seen': 'Τελευταία σύνδεση', 'admin.user_edit.lang': 'Γλώσσα', 'admin.user_edit.first_name': 'Όνομα', 'admin.user_edit.last_name': 'Επώνυμο', 'admin.user_edit.phone': 'Τηλέφωνο', 'admin.user_edit.bio': 'Βιογραφικό', 'admin.user_edit.role': 'Ρόλος', 'admin.user_edit.plan': 'Πακέτο', 'admin.user_edit.no_plan': '— Χωρίς πακέτο —', 'admin.user_edit.active': 'Ενεργός λογαριασμός', 'admin.user_edit.published': 'Δημοσιευμένη', 'admin.user_edit.balance': 'Υπόλοιπο (EUR)', 'admin.user_edit.skills': 'Δεξιότητες', 'admin.user_edit.tab.profile': 'Προφίλ', 'admin.user_edit.tab.account': 'Λογαριασμός', 'admin.user_edit.tab.balance': 'Υπόλοιπο', 'admin.user_edit.tab.settings': 'Ρυθμίσεις', 'admin.user_edit.tab.specialist': 'Προσφορές', 'admin.user_edit.tab.site': 'Ιστοσελίδα', 'admin.user_edit.plan_expires': 'Λήξη πλάνου', 'admin.user_edit.interface_lang': 'Γλώσσα διεπαφής', 'admin.user_edit.comm_languages': 'Γλώσσες επικοινωνίας', 'admin.user_edit.personal_site_slug': 'Προσωπική σελίδα', 'admin.user_edit.show_contact_info': 'Εμφάνιση στοιχείων επικοινωνίας', 'admin.user_edit.show_contact_info.hint': 'Ορατό στους πελάτες', 'admin.user_edit.notify_new_tasks': 'Ειδοποίηση για νέες εργασίες', 'admin.user_edit.notify_new_tasks.hint': 'Push και email ειδοποιήσεις', 'admin.user_edit.notif_messages': 'Ειδοποιήσεις μηνυμάτων', 'admin.user_edit.notif_messages.hint': 'Νέα μηνύματα στη συνομιλία', 'admin.user_edit.site_settings': 'Ρυθμίσεις προσωπικής σελίδας', 'admin.user_edit.categories': 'Κατηγορίες υπηρεσιών', 'admin.user_edit.locations': 'Περιοχές εξυπηρέτησης', 'admin.user_edit.skill_placeholder': 'Νέα δεξιότητα...', 'admin.user_edit.add_category': '— Επιλέξτε κατηγορία —', 'admin.user_edit.add_location': '— Επιλέξτε περιοχή —', 'admin.user_edit.specialist_cards': 'Προσφορές ειδικού', 'admin.user_edit.no_cards': 'Δεν βρέθηκαν προσφορές', 'admin.user_edit.card_title': 'Τίτλος προσφοράς', 'admin.user_edit.card_description': 'Περιγραφή', 'admin.balance.topup.btn': 'Αναπλήρωση', 'admin.balance.withdraw.btn': 'Αφαίρεση', 'admin.balance.modal_hint': 'Οι αλλαγές ισχύουν άμεσα και καταγράφονται στο ιστορικό', 'admin.balance.topup.title': 'Αναπλήρωση υπολοίπου', 'admin.balance.topup.amount': 'Ποσό', 'admin.balance.topup.description': 'Σχόλιο', 'admin.balance.topup.description.placeholder': 'Για παράδειγμα: bonus ή χειροκίνητη αναπλήρωση', 'admin.balance.topup.submit': 'Αναπλήρωση υπολοίπου', 'admin.balance.withdraw.title': 'Αφαίρεση υπολοίπου', 'admin.balance.withdraw.amount': 'Ποσό', 'admin.balance.withdraw.description': 'Σχόλιο', 'admin.balance.withdraw.description.placeholder': 'Για παράδειγμα: επιστροφή ή χειροκίνητη χρέωση', 'admin.balance.withdraw.submit': 'Αφαίρεση από το υπόλοιπο', 'admin.user_edit.role.customer': 'Πελάτης', 'admin.user_edit.role.user': 'Χρήστης', 'admin.user_edit.role.specialist': 'Βοηθός', 'admin.user_edit.role.admin': 'Διαχειριστής', 'common.refresh': 'Ανανέωση', 'common.back_home': 'Αρχική', 'admin.loc.hint': 'Διαχείριση πόλεων και συνοικιών', 'admin.loc.add_city': 'Νέα πόλη', 'admin.loc.add_district': 'Προσθήκη συνοικίας', 'admin.loc.new': 'Νέα τοποθεσία', 'admin.loc.edit': 'Επεξεργασία τοποθεσίας', 'admin.loc.district': 'συνοικία', 'admin.loc.empty': 'Δεν υπάρχουν τοποθεσίες', 'admin.loc.delete.confirm': 'Διαγραφή τοποθεσίας; Όλες οι συνοικίες θα διαγραφούν επίσης.', 'admin.cat.add_root': 'Νέα κατηγορία', 'admin.cat.add_sub': 'Υποκατηγορία', 'admin.cat.edit': 'Επεξεργασία', 'admin.cat.delete': 'Διαγραφή', 'admin.cat.delete.confirm': 'Διαγραφή κατηγορίας; Όλες οι υποκατηγορίες θα διαγραφούν επίσης.', 'admin.cat.slug': 'Slug', 'admin.cat.icon': 'Εικονίδιο', 'admin.cat.name_el': 'Ελληνικά', 'admin.cat.name_en': 'Αγγλικά', 'admin.cat.name_ru': 'Ρωσικά', 'admin.cat.name_uk': 'Ουκρανικά', 'admin.cat.active': 'Ενεργή', 'admin.cat.parent': 'Γονική κατηγορία', 'admin.cat.no_parent': 'Κορυφαίο επίπεδο', 'admin.cat.save': 'Αποθήκευση', 'admin.cat.cancel': 'Ακύρωση', 'admin.cat.empty': 'Δεν υπάρχουν κατηγορίες', 'admin.cat.hint': 'Διαχείριση κατηγοριών με πολυεπίπεδη ιεραρχία', 'admin.cat.new': 'Νέα κατηγορία', 'admin.cat.subcategory': 'υποκατηγορία', 'admin.cat.add_child': 'Προσθήκη υποκατηγορίας', 'admin.cat.inactive': 'Ανενεργή', 'admin.event.user_login': 'Σύνδεση', 'admin.event.user_register': 'Εγγραφή', 'admin.event.admin_user_deactivate': 'Αποκλεισμός χρήστη', 'admin.event.admin_user_activate': 'Ενεργοποίηση χρήστη', 'admin.event.admin_user_role_changed': 'Αλλαγή ρόλου', 'admin.event.admin_task_cancelled': 'Ακύρωση εργασίας', 'admin.event.admin_task_deleted': 'Διαγραφή εργασίας', 'admin.event.admin_report_reviewed': 'Αναφορά εξετάστηκε', 'admin.event.admin_report_dismissed': 'Αναφορά απορρίφθηκε', 'admin.event.task_created': 'Δημιουργία εργασίας', 'user.online': 'Σε σύνδεση', 'user.seen_minutes': 'ήταν εδώ πριν {n} λεπτά', 'user.seen_hours': 'ήταν εδώ πριν {n} ώρες', 'user.seen_yesterday': 'ήταν εδώ χθες', 'user.seen_days': 'ήταν εδώ πριν {n} μέρες', // Specialists 'specialists.title': 'Προσφορές', 'specialists.search': 'Αναζήτηση ειδικού...', 'specialists.search.btn': 'Αναζήτηση', 'specialists.empty': 'Δεν βρέθηκαν ειδικοί', 'specialists.no_bio': 'Χωρίς περιγραφή', 'specialists.view': 'Προβολή προφίλ', 'specialists.reviews': 'αξιολογήσεις', 'specialist.favorite': 'Προσθήκη στα αγαπημένα', 'specialist.unfavorite': 'Αφαίρεση από αγαπημένα', 'specialist.site_link': 'Προσωπικό site', 'favorites.specialists.title': 'Αγαπημένοι ειδικοί', 'favorites.specialists.empty': 'Δεν έχετε αγαπημένους ειδικούς', 'nav.favorites': 'Αγαπημένα', 'nav.schedule': 'Πρόγραμμα', 'nav.find_tasks': 'Αναζήτηση εργασιών', 'schedule.title': 'Το πρόγραμμά μου', 'schedule.subtitle': 'Σημειώστε τις ημέρες που είστε ελεύθεροι ή απασχολημένοι — οι πελάτες θα δουν τη διαθεσιμότητά σας', 'schedule.available': 'Ελεύθερος', 'schedule.busy': 'Απασχολημένος', 'schedule.unset': 'Μη ορισμένο', 'schedule.click_hint': '← κλικ για εναλλαγή κατάστασης', 'schedule.range_mode': 'Επιλογή εύρους', 'schedule.range_from': 'Από {date} — επιλέξτε τελική ημερομηνία', 'schedule.click_to_set': 'Κλικ για ορισμό', 'schedule.free': 'ελεύθερα', 'schedule.busy_count': 'απασχολημένα', 'schedule.free_days': 'ελεύθερες ημέρες', 'schedule.googleCalendar': 'Google Calendar', 'schedule.connectGoogle': 'Σύνδεση με Google Calendar', 'schedule.disconnectGoogle': 'Αποσύνδεση', 'schedule.connectedAs': 'Συνδεδεμένο ως', 'schedule.importFromGoogle': 'Συγχρονισμός από Google', 'schedule.gcalConnected': '✓ Google Calendar συνδέθηκε', 'schedule.gcalError': 'Σφάλμα σύνδεσης Google Calendar', 'schedule.gcalImportDone': 'Εισήχθησαν {n} ημερ. από Google Calendar', 'schedule.gcalAutoSyncNote': 'Οι αλλαγές αποστέλλονται αυτόματα στο Google Calendar', 'schedule.gcalConnectDesc': 'Συνδέστε το Google Calendar για αυτόματο συγχρονισμό', 'schedule.gcalDisconnectConfirm': 'Αποσύνδεση Google Calendar;', 'find_tasks.title': 'Αναζήτηση εργασιών', 'find_tasks.for_me': 'Για μένα', 'find_tasks.all': 'Όλες οι εργασίες', 'find_tasks.by_category': 'Ανά κατηγορία', 'find_tasks.list': 'Λίστα', 'find_tasks.already_offered': 'Προσφορά υποβλήθηκε', 'find_tasks.offer_now': 'Υποβολή προσφοράς', 'find_tasks.empty_for_me': 'Δεν βρέθηκαν εργασίες στις κατηγορίες σας', 'find_tasks.banner_hint': 'Βρείτε εργασίες που ταιριάζουν με το χαρτοφυλάκιό σας', 'find_tasks.no_cards': 'Δημιουργήστε ένα χαρτοφυλάκιο ειδικού για να δείτε εργασίες για εσάς', 'find_tasks.add_card': 'Δημιουργία χαρτοφυλακίου', 'find_tasks.search': 'Αναζήτηση εργασιών...', 'find_tasks.tasks_count': 'εργασίες', // Footer 'footer.tagline': 'Η πλατφόρμα εργασιών για την Ελλάδα', 'footer.rights': 'Όλα τα δικαιώματα διατηρούνται.', 'nav.privacy': 'Πολιτική απορρήτου', 'nav.delete_account': 'Διαγραφή λογαριασμού', 'delete_account.title': 'Αίτηση διαγραφής λογαριασμού', 'delete_account.subtitle': 'Αφού επαληθεύσουμε την αίτησή σας, θα διαγράψουμε μόνιμα τον λογαριασμό και τα δεδομένα σας εντός 30 ημερών.', 'delete_account.warning': 'Αυτή η ενέργεια δεν μπορεί να αναιρεθεί. Όλα τα δεδομένα σας θα διαγραφούν μόνιμα.', 'delete_account.reason_label': 'Αιτία (προαιρετικό)', 'delete_account.reason_placeholder': 'Πείτε μας γιατί θέλετε να διαγράψετε τον λογαριασμό σας...', 'delete_account.confirm_label': 'Επιβεβαιώνω ότι θέλω να διαγράψω μόνιμα τον λογαριασμό μου', 'delete_account.submit': 'Υποβολή αίτησης', 'delete_account.submitting': 'Αποστολή...', 'delete_account.success_title': 'Η αίτησή σας ελήφθη', 'delete_account.success_body': 'Θα επεξεργαστούμε την αίτησή σας εντός 30 ημερών και θα σας ειδοποιήσουμε μέσω email.', 'delete_account.login_required': 'Πρέπει να συνδεθείτε για να υποβάλετε αίτηση διαγραφής.', 'delete_account.login_btn': 'Σύνδεση', // App download section 'app.download_title': 'Κατεβάστε την εφαρμογή CanHelp', 'app.download_desc': 'Όλο το CanHelp — πάντα μαζί σας. Διαθέσιμο για Android και iOS.', // Nav 'nav.pricing': 'Τιμές', // Pricing page 'pricing.title': 'Τιμολόγηση', 'pricing.subtitle': 'Επιλέξτε το κατάλληλο πρόγραμμα', 'pricing.role.customer': 'Πελάτης', 'pricing.role.specialist': 'Ειδικός', 'pricing.free': 'Δωρεάν', 'pricing.per_month': 'μήνα', 'pricing.duration': 'Διάρκεια', 'pricing.days': 'ημ.', 'pricing.current_plan': 'Το πρόγραμμά σας', 'pricing.popular': 'Δημοφιλές', 'pricing.choose': 'Επιλογή', 'pricing.your_plan': 'Ενεργό πρόγραμμα', 'pricing.free_default': 'Προεπιλογή', 'pricing.compare': 'Σύγκριση λειτουργιών', 'pricing.feature': 'Λειτουργία', 'pricing.faq_note': 'Η πληρωμή γίνεται από το υπόλοιπο CanHelp. Ανατροφοδότηση διαθέσιμη στην Πληρωμή.', 'pricing.feat.messages': 'Μηνύματα / ημέρα', 'pricing.feat.orders': 'Παραγγελίες / ημέρα', 'pricing.feat.contact_all': 'Επικοινωνία με όλους', 'pricing.feat.view_phone': 'Εμφάνιση τηλεφώνου', 'pricing.feat.show_contact': 'Εμφάνιση στοιχείων επαφής', 'pricing.feat.favorites': 'Αγαπημένα', 'pricing.feat.verified_badge': 'Επαληθευμένο badge', 'pricing.feat.google_calendar': 'Google Calendar', 'pricing.feat.personal_site': 'Προσωπικό site', 'pricing.feat.auto_response': 'Αυτόματη απάντηση', 'pricing.feat.auto_match': 'Αυτόματη αντιστοίχιση', 'pricing.feat.highlighted_reviews': 'Επισημασμένες αξιολογήσεις', 'pricing.feat.portfolio': 'Στοιχεία προσφοράς', 'pricing.feat.cards': 'Αριθμός προσφορών', 'pricing.feat.notify_tasks': 'Ειδοποιήσεις νέων εργασιών', 'pricing.feat.video': 'Βίντεο στην προσφορά', // Upgrade prompt 'upgrade.available_in': 'Διαθέσιμο στο', 'upgrade.cta': 'Αναβάθμιση', // Dashboard plan block 'dashboard.plan.title': 'Το πρόγραμμά μου', 'dashboard.plan.expires': 'Λήγει σε {n} ημέρες', 'dashboard.plan.upgrade': 'Αναβάθμιση προγράμματος', 'dashboard.plan.no_plan': 'Δωρεάν πρόγραμμα', 'dashboard.plan.messages': 'Μηνύματα σήμερα', 'dashboard.plan.orders': 'Παραγγελίες σήμερα', 'dashboard.plan.limits': 'Ημερήσια όρια', 'dashboard.plan.features': 'Λειτουργίες', 'dashboard.plan.stats': 'Στατιστικά', 'dashboard.stats.cards': 'Χαρτοφυλάκια', 'dashboard.stats.maxCards': 'Μέγ. χαρτοφυλάκια', 'dashboard.stats.portfolioItems': 'Στοιχεία portfolio', 'dashboard.stats.maxPortfolioItems': 'Μέγ. στοιχεία', 'dashboard.stats.activeOffers': 'Ενεργές προσφορές', 'dashboard.stats.reviewsReceived': 'Αξιολογήσεις', 'dashboard.stats.activeTasks': 'Ενεργές εργασίες', 'dashboard.stats.completedTasks': 'Ολοκληρωμένες', 'status.can_help_now': 'Είμαι διαθέσιμος τώρα', 'status.need_help': 'Χρειάζομαι βοήθεια', 'status.active': 'Ενεργό', 'status.toggle_on': 'Ενεργοποίηση', 'status.toggle_off': 'Απενεργοποίηση', // FOMO 'fomo.missed_orders': 'Χάσατε {n} παραγγελίες', 'fomo.missed_value': 'Αξία €{v}', 'fomo.upgrade_hint': 'Αναβαθμίστε για να λαμβάνετε περισσότερες παραγγελίες', 'fomo.conversion': 'Μετατροπές εργασιών', 'fomo.active': 'Ενεργές', 'fomo.with_offers': 'Με προσφορές', 'fomo.completed': 'Ολοκληρωμένες', 'fomo.already_offered': '{n} ειδικοί έχουν ήδη απαντήσει', 'fomo.specialist_missed': 'Χάσατε {n} παραγγελίες', 'fomo.top_categories': 'Κατηγορίες', 'fomo.offers_received': 'προσφορές ελήφθησαν', 'fomo.avg_offers': 'Μέσο {n}/εργασία', 'fomo.completion_rate': 'ολοκληρωμένες', // Task auto-match 'task.auto_match': 'Αυτόματη αντιστοίχιση', 'task.auto_match_results': 'Κορυφαίοι ειδικοί', 'task.no_offer_yet': 'Δεν έχετε στείλει προσφορά ακόμα', 'task.make_offer': 'Αποστολή προσφοράς', 'auto_response.title': 'Αυτόματη Απάντηση', 'auto_response.enabled': 'Ενεργοποίηση αυτόματης απάντησης', 'auto_response.min_budget': 'Ελάχ. προϋπολογισμός', 'auto_response.max_budget': 'Μέγ. προϋπολογισμός', 'auto_response.default_price': 'Προεπιλεγμένη τιμή', 'auto_response.default_message': 'Προεπιλεγμένο μήνυμα', 'auto_response.max_per_day': 'Μέγ. αυτόματες προσφορές/ημέρα', 'auto_response.save': 'Αποθήκευση', 'auto_response.saved': 'Αποθηκεύτηκε', 'auto_response.categories': 'Κατηγορίες', 'auto_response.locations': 'Τοποθεσίες', // Personal site 'profile.personal_site': 'Προσωπικό Site', 'profile.site_slug': 'Slug URL', 'profile.site_slug_hint': 'Μόνο λατινικοί χαρακτήρες, αριθμοί, - και _', 'profile.site_open': 'Άνοιγμα site', 'profile.site_preview': 'Το site σας', 'profile.show_contact': 'Εμφάνιση στοιχείων επαφής', 'profile.show_contact_hint': 'Πελάτες με Pro/Ultimate πρόγραμμα θα βλέπουν το τηλέφωνό σας', // Google Calendar plan gate 'gcal.upgrade_required': 'Το Google Calendar απαιτεί Pro ή Ultimate πρόγραμμα', // Chat limits 'chat.limit_warning': 'Απομένουν {n} μηνύματα σήμερα', 'chat.limit_reached': 'Εξαντλήθηκαν τα μηνύματα. Αναβαθμίστε το πρόγραμμά σας', 'chat.upgrade': 'Αναβάθμιση', // Site page 'site.member_since': 'Μαζί μας από', 'site.rating': 'Βαθμολογία', 'site.completed_tasks': 'Ολοκληρώθηκαν', 'site.languages': 'Γλώσσες', 'site.photos': 'φωτ.', 'site.contact_form': 'Επικοινωνία', 'site.contact_sent': 'Το μήνυμα στάλθηκε!', 'site.contact_sent_desc': 'Ο ειδικός θα επικοινωνήσει μαζί σας σύντομα', 'site.contact_name': 'Όνομα', 'site.contact_name_ph': 'Το όνομά σας', 'site.contact_email_ph': 'your@email.com', 'site.contact_message': 'Μήνυμα', 'site.contact_message_ph': 'Περιγράψτε την εργασία σας...', 'site.contact_send': 'Αποστολή', 'site.share': 'Κοινοποίηση', 'site.speaks_languages': 'Μιλάει', 'site.message_sent': 'Το μήνυμα εστάλη!', 'site.message_sent_desc': 'Ο ειδικός θα το λάβει στη συνομιλία', 'site.message_placeholder': 'Γράψτε το μήνυμά σας...', 'site.write_to_chat': 'Γράψτε στο chat', 'site.auth_required_title': 'Απαιτείται σύνδεση', 'site.auth_required_desc': 'Για να γράψετε στο chat, χρειάζεται να συνδεθείτε στο λογαριασμό σας.', 'site.auth_login_btn': 'Σύνδεση', 'site.auth_contact_form_btn': 'Επικοινωνία μέσω φόρμας', 'specialist.services': 'Υπηρεσίες', 'portfolio.title': 'Χαρτοφυλάκιο', 'common.not_found': 'Η σελίδα δεν βρέθηκε', 'common.anonymous': 'Ανώνυμα', 'specialist_setup.page_title': 'Ρύθμιση προφίλ ειδικού', 'specialist_setup.step_of': 'Βήμα {current} από {total}', 'specialist_setup.next': 'Επόμενο', 'specialist_setup.back': 'Πίσω', 'specialist_setup.skip': 'Παράλειψη', 'specialist_setup.finish': 'Ολοκλήρωση', 'specialist_setup.go_to_profile': 'Μεταβείτε στο προφίλ', 'specialist_setup.browse_tasks': 'Εξερεύνηση εργασιών', 'specialist_setup.step1.title': 'Καλωσήλθατε!', 'specialist_setup.step1.subtitle': 'Ας ρυθμίσουμε το προφίλ σας', 'specialist_setup.step1.desc': 'Ένα πλήρες προφίλ σας βοηθά να βρείτε περισσότερους πελάτες. Ακολουθήστε τα βήματα για να δημιουργήσετε το τέλειο προφίλ ειδικού.', 'specialist_setup.step1.what_next': 'Τι θα κάνουμε:', 'specialist_setup.step1.item1': 'Συμπλήρωση βασικών πληροφοριών', 'specialist_setup.step1.item2': 'Δημιουργία κάρτας υπηρεσίας', 'specialist_setup.step1.item3': 'Προσθήκη δεξιοτήτων και κατηγοριών', 'specialist_setup.step1.item4': 'Επιλογή γεωγραφικής περιοχής', 'specialist_setup.step1.item5': 'Μεταφόρτωση φωτογραφιών χαρτοφυλακίου', 'specialist_setup.step2.title': 'Βασικό προφίλ', 'specialist_setup.step2.subtitle': 'Πείτε μας για σας', 'specialist_setup.step2.bio_label': 'Σχετικά με εμένα', 'specialist_setup.step2.bio_placeholder': 'Περιγράψτε την εμπειρία σας, τις υπηρεσίες που προσφέρετε...', 'specialist_setup.step2.phone_label': 'Τηλέφωνο', 'specialist_setup.step2.phone_placeholder': '+30 6900000000', 'specialist_setup.step2.photo_label': 'Φωτογραφία προφίλ', 'specialist_setup.step2.photo_btn': 'Μεταφόρτωση φωτογραφίας', 'specialist_setup.step2.photo_uploading': 'Μεταφόρτωση...', 'specialist_setup.step2.photo_hint': 'Εμφανίζεται στο προφίλ σας', 'specialist_setup.step3.title': 'Κάρτα υπηρεσίας', 'specialist_setup.step3.subtitle': 'Δημιουργήστε την πρώτη σας κάρτα υπηρεσίας', 'specialist_setup.step3.title_label': 'Τίτλος κάρτας', 'specialist_setup.step3.title_placeholder': 'Π.χ. Υδραυλικός, Ηλεκτρολόγος, Καθαρισμός...', 'specialist_setup.step3.desc_label': 'Περιγραφή', 'specialist_setup.step3.desc_placeholder': 'Περιγράψτε λεπτομερώς τι προσφέρετε, εμπειρία, πλεονεκτήματα...', 'specialist_setup.step3.title_required': 'Απαιτείται τίτλος', 'specialist_setup.step4.title': 'Δεξιότητες & Κατηγορίες', 'specialist_setup.step4.subtitle': 'Προσθέστε δεξιότητες και επιλέξτε κατηγορίες', 'specialist_setup.step4.skills_label': 'Δεξιότητες', 'specialist_setup.step4.skills_placeholder': 'Π.χ. Εγκατάσταση σωληνώσεων...', 'specialist_setup.step4.skills_add': 'Προσθήκη', 'specialist_setup.step4.categories_label': 'Κατηγορίες', 'specialist_setup.step5.title': 'Γεωγραφική περιοχή', 'specialist_setup.step5.subtitle': 'Πού παρέχετε υπηρεσίες;', 'specialist_setup.step5.hint': 'Επιλέξτε πόλεις ή συγκεκριμένες περιοχές', 'specialist_setup.done.title': 'Το προφίλ σας είναι έτοιμο!', 'specialist_setup.done.subtitle': 'Συγχαρητήρια! Το προφίλ σας έχει ρυθμιστεί', 'specialist_setup.done.desc': 'Τώρα μπορείτε να λαμβάνετε παραγγελίες από πελάτες. Αναζητήστε εργασίες που ταιριάζουν με τις δεξιότητές σας.', // Support 'support.title': 'Υποστήριξη', 'support.type.label': 'Τύπος αιτήματος', 'support.type.bug': 'Σφάλμα', 'support.type.suggestion': 'Πρόταση', 'support.type.other': 'Άλλο', 'support.subject': 'Θέμα', 'support.subject.placeholder': 'Σύντομη περιγραφή...', 'support.body': 'Μήνυμα', 'support.body.placeholder': 'Περιγράψτε λεπτομερώς το πρόβλημα ή την πρότασή σας...', 'support.submit': 'Αποστολή', 'support.cancel': 'Ακύρωση', 'support.error': 'Σφάλμα αποστολής. Παρακαλώ δοκιμάστε ξανά.', 'support.sent.title': 'Λάβαμε το αίτημά σας!', 'support.sent.body': 'Θα σας απαντήσουμε στο email σας το συντομότερο δυνατόν.', 'support.sent.close': 'Κλείσιμο', 'admin.tab.support': 'Υποστήριξη', 'admin.tab.backup': 'Αντίγραφα ασφαλείας', 'admin.tab.translations': 'Μεταφράσεις', 'admin.tab.dbcheck': 'Έλεγχος ΒΔ', 'admin.tab.balances': 'Υπόλοιπα', 'admin.tab.push': 'Push', 'admin.tab.referrals': 'Παραπομπές', 'admin.search': 'Αναζήτηση', 'admin.noData': 'Δεν υπάρχουν δεδομένα', 'admin.cat.order': 'Σειρά', 'admin.cat.skills': 'Δεξιότητες', 'admin.plans.form.max_tasks': 'Μέγιστες εργασίες', 'admin.settings.referral.shared_section': 'Κοινές ρυθμίσεις referral', 'admin.settings.seo.title': 'Ρυθμίσεις SEO', 'admin.backup.title': 'Αντίγραφα ασφαλείας', 'admin.backup.tables': 'Πίνακες', 'admin.backup.exportAll': 'Εξαγωγή όλων', 'admin.backup.importAll': 'Εισαγωγή όλων', 'admin.backup.exportTable': 'Εξαγωγή πίνακα', 'admin.backup.importTable': 'Εισαγωγή πίνακα', 'admin.backup.exporting': 'Εξαγωγή...', 'admin.backup.importing': 'Εισαγωγή...', 'admin.backup.exportSuccess': 'Η εξαγωγή ολοκληρώθηκε', 'admin.backup.importSuccess': 'Η εισαγωγή ολοκληρώθηκε', 'admin.backup.autoBackup': 'Αυτόματο backup', 'admin.backup.autoBackupDesc': 'Καθημερινό αυτόματο backup', 'admin.backup.storedBackups': 'Αποθηκευμένα backups', 'admin.backup.noStoredBackups': 'Δεν υπάρχουν αποθηκευμένα backups', 'admin.backup.restore': 'Επαναφορά', 'admin.backup.restoreConfirm': 'Επαναφορά από backup;', 'admin.backup.restoreSuccess': 'Η επαναφορά ολοκληρώθηκε', 'admin.backup.restoring': 'Επαναφορά...', 'admin.backup.date': 'Ημερομηνία', 'admin.backup.size': 'Μέγεθος', 'admin.backup.today': 'Σήμερα', 'admin.backup.yesterday': 'Χθες', 'admin.balance.col.operation': 'Ενέργεια', 'admin.balance.col.amount': 'Ποσό', 'admin.balance.col.result': 'Υπόλοιπο', 'admin.balance.col.description': 'Περιγραφή', 'admin.balance.col.date': 'Ημερομηνία', 'admin.balance.empty': 'Δεν υπάρχουν εγγραφές', 'admin.balance.filter.all': 'Όλες οι ενέργειες', 'admin.balance.filter.user_id': 'Φίλτρο ανά userId', 'admin.balance.kind.topup': 'Αναπλήρωση', 'admin.balance.kind.plan_purchase': 'Χρέωση πλάνου', 'admin.balance.kind.admin_topup': 'Αναπλήρωση από διαχειριστή', 'admin.balance.kind.admin_adjustment': 'Διόρθωση', 'admin.support.search': 'Αναζήτηση', 'admin.support.all_statuses': 'Όλες οι καταστάσεις', 'admin.support.all_types': 'Όλοι οι τύποι', 'admin.support.none': 'Δεν υπάρχουν αιτήματα', 'admin.support.reply': 'Απάντηση', 'admin.support.reply_placeholder': 'Πληκτρολογήστε απάντηση...', 'admin.support.send_reply': 'Αποστολή απάντησης', 'admin.support.cancel': 'Ακύρωση', 'admin.support.close': 'Κλείσιμο', 'admin.support.status.open': 'Ανοιχτό', 'admin.support.status.in_progress': 'Σε εξέλιξη', 'admin.support.status.resolved': 'Επιλύθηκε', 'admin.support.status.closed': 'Κλειστό', 'admin.support.your_reply': 'Η απάντησή σας', 'admin.user_edit.visibility_requirements.title': 'Το προφίλ δεν εμφανίζεται ακόμη στις Προσφορές', 'admin.user_edit.visibility_requirements.hint': 'Απαιτήσεις ορατότητας:', 'admin.user_edit.visibility_requirements.bio': 'Συμπληρώστε το βιογραφικό', 'admin.user_edit.visibility_requirements.published_card': 'Δημοσιεύστε τουλάχιστον μία κάρτα', 'admin.user_edit.visibility_requirements.categories': 'Προσθέστε κατηγορία σε δημοσιευμένη κάρτα', 'admin.user_edit.visibility_requirements.locations': 'Προσθέστε τοποθεσία σε δημοσιευμένη κάρτα', 'auto_response.desc': 'Αυτόματη απάντηση σε κατάλληλες εργασίες', 'auto_response.budget_range': 'Προϋπολογισμός εργασίας', 'auto_response.message_placeholder': 'Γεια σας! Μπορώ να βοηθήσω με αυτήν την εργασία...', 'profile.background.title': 'Φόντο κεφαλίδας προφίλ', 'profile.background.hint': 'Εμφανίζεται στην κεφαλίδα του δημόσιου προφίλ σε web και mobile.', 'profile.photo.uploading': 'Μεταφόρτωση...', 'profile.balance.history': 'Ιστορικό ενεργειών', 'profile.balance.history.last': 'Τελευταίες ενέργειες', 'profile.balance.history.empty': 'Δεν υπάρχουν ενέργειες', 'profile.balance.history.balance_after': 'Υπόλοιπο μετά', 'profile.balance.history.kind.topup': 'Αναπλήρωση υπολοίπου', 'profile.balance.history.kind.plan_purchase': 'Χρέωση πλάνου', 'profile.balance.history.kind.admin_topup': 'Αναπλήρωση από διαχειριστή', 'profile.balance.history.kind.admin_adjustment': 'Διόρθωση από διαχειριστή', 'profile.plan_history.title': 'Ιστορικό πλάνου', 'profile.plan_history.empty': 'Το ιστορικό πλάνου είναι άδειο', 'profile.plan_history.expires': 'Έως', 'profile.plan_history.days': 'ημέρες', 'profile.plan_history.event.activated': 'Ενεργοποιήθηκε', 'profile.plan_history.event.renewed': 'Ανανεώθηκε', 'profile.plan_history.event.downgraded': 'Υποβαθμίστηκε', 'profile.plan_history.event.referral_reward': 'Ανταμοιβή referral', 'profile.plan_history.event.admin_change': 'Αλλαγή από διαχειριστή', 'profile.plan_history.event.expired': 'Έληξε', 'profile.show_contact_desc': 'Επιτρέπει στους πελάτες να επικοινωνούν απευθείας', 'profile.site.visible.price_list': 'Τιμοκατάλογος', 'site.pricelist': 'Τιμοκατάλογος', 'status.plan_required': 'Η κατάσταση δεν είναι διαθέσιμη στο τρέχον πλάνο', 'status.admin_not_applicable': 'Η κατάσταση χρήστη δεν ισχύει για διαχειριστές' }, en: { 'footer.slogan': 'Your task — our care! We solve any issue quickly and easily.', 'footer.links': 'Links', 'footer.socials': 'Socials', 'nav.home': 'Home', 'nav.tasks': 'Tasks', 'nav.post': '+ Post task', 'nav.dashboard': 'My Tasks', 'nav.chat': 'Messages', 'nav.notifications': 'Notifications', 'nav.profile': 'Profile', 'nav.admin': 'Admin Panel', 'nav.specialists': 'Offers', 'nav.new_task': 'New task', 'nav.login': 'Login', 'nav.register': 'Register', 'nav.logout': 'Logout', 'hero.title': 'Everyone has something valuable to offer', 'hero.subtitle': 'Find help, offer your skills, or earn money helping others', 'hero.cta.post': 'Find help', 'hero.cta.browse': 'Offer your help', 'hero.cta.specialists': 'Find a job', 'hero.search.placeholder': 'What do you need? e.g. electrician, cleaning...', 'hero.specialist.title': 'Find tasks near you', 'hero.specialist.subtitle': 'Discover tasks in your categories and send your offer', 'hero.specialist.cta': 'Browse tasks', 'hero.specialist.search.placeholder': 'Search tasks... e.g. electrical, cleaning', 'section.categories.specialist': 'Find tasks by category', 'section.cities.specialist': 'Tasks by city', 'how.specialist.step1.title': 'Create a specialist card', 'how.specialist.step1.desc': 'Set your categories, skills and areas — the system finds tasks automatically', 'how.specialist.step2.title': 'Find relevant tasks', 'how.specialist.step2.desc': 'Discover tasks in your categories and get started right away', 'how.specialist.step3.title': 'Send an offer & earn', 'how.specialist.step3.desc': 'Submit an offer with price and timeline, communicate with clients and complete tasks', 'stats.specialists': 'offers', 'stats.tasks': 'tasks', 'stats.categories': 'categories', 'stats.free': 'free sign-up', 'promo.title': 'Get Pro for free — until end of year', 'promo.subtitle': 'Sign up now and enjoy the Pro plan at no cost. Offer ends December 31.', 'promo.cta': 'Sign up free', 'promo.days': 'days', 'promo.hours': 'hrs', 'promo.minutes': 'min', 'promo.seconds': 'sec', 'section.categories': 'Create a task in any category', 'section.how': 'How it works', 'section.recent': 'Recent tasks', 'section.all': 'See all →', 'section.more': 'more', 'section.cities': 'Cities & Districts', 'section.community': 'A community project for everyone', 'community.subtitle': 'CanHelp is not just a marketplace — it\'s a community of mutual help. Anyone with knowledge or a skill can find a client. Anyone with a problem can find a specialist.', 'community.point1.title': 'Are you good at something?', 'community.point1.desc': 'Repairs, tutoring, design, translation, care — every skill has value. Create a profile and find clients near you.', 'community.point2.title': 'Need help with something?', 'community.point2.desc': 'Post a task in under a minute and receive offers from verified specialists in your city.', 'community.point3.title': 'Help the project grow', 'community.point3.desc': 'CanHelp grows through communities. Share the link with friends and acquaintances — together we build something useful for everyone.', 'community.share': 'Share with friends', 'community.share.copied': 'Link copied!', // Referral section on home page 'section.referral': 'Referral Program', 'referral.home.subtitle': 'Share your link — every new user who signs up through it earns you a reward.', 'referral.home.step1.title': 'Sign up and get your link', 'referral.home.step1.desc': 'Create an account and find your unique referral link in your profile.', 'referral.home.step2.title': 'Share with friends', 'referral.home.step2.desc': 'Send the link to friends, acquaintances, or post it on social media.', 'referral.home.step3.title': 'Earn rewards', 'referral.home.step3.desc': 'Once your friend verifies their email, you automatically receive your reward.', 'referral.home.cta': 'Get your link', 'referral.home.badge': 'Referral Program', // FAQ section 'section.faq': 'Frequently Asked Questions', 'faq.q1': 'How does CanHelp work?', 'faq.a1': 'Post a task, receive offers from specialists, choose the best one and start working together. It\'s fast, simple and free for customers.', 'faq.q2': 'How much does it cost to use the platform?', 'faq.a2': 'Registration and task posting is completely free for customers. Specialists have access to a free plan as well as premium options.', 'faq.q3': 'How can I become a specialist?', 'faq.a3': 'Register, go to «Become a Specialist», fill in your profile with skills and categories, and start receiving tasks.', 'faq.q4': 'How do I choose the right specialist?', 'faq.a4': 'Check their reviews, experience, skills and portfolio. Chat with them through the platform and discuss the details before deciding.', 'faq.q5': 'What if I am not satisfied?', 'faq.a5': 'You can leave a review about the specialist and rate them from 1 to 5 stars. Reviews help other users find trusted professionals.', 'faq.q6': 'Can I contact a specialist before accepting their offer?', 'faq.a6': 'Yes. Once you receive an offer, you can open a chat with the specialist, ask questions and discuss all the details before making a decision.', 'faq.q7': 'How long does it take to receive offers?', 'faq.a7': 'Usually within a few hours. Specialists get notified about new tasks and can respond quickly.', 'faq.q8': 'Can I post a task in any city in Greece?', 'faq.a8': 'Yes! CanHelp covers all of Greece — Athens, Thessaloniki, Patras and more.', 'faq.q9': 'What types of tasks can I find on CanHelp?', 'faq.a9': 'Repairs, cleaning, electricians, tutoring, design, IT, moving, beauty and much more. Categories are constantly expanding.', 'faq.q10': 'Is there a mobile app?', 'faq.a10': 'Yes! CanHelp is available for Android and iOS. Download the app and manage everything from your phone.', 'how.step1.title': 'Post a task', 'how.step1.desc': 'Describe what you need and set your budget', 'how.step2.title': 'Receive offers', 'how.step2.desc': 'Specialists will send you offers with price and timeline', 'how.step3.title': 'Choose & start', 'how.step3.desc': 'Pick the best professional and start the collaboration', 'tasks.title': 'tasks', 'tasks.filters': 'Filters', 'tasks.search': 'Search', 'tasks.search.placeholder': 'Title or keyword...', 'tasks.search.btn': 'Search', 'tasks.publish': 'Post', 'tasks.category.all': 'All', 'tasks.category.all_in': 'All in', 'tasks.category.label': 'Category', 'tasks.location.label': 'City', 'tasks.location.placeholder': 'e.g. Athens', 'tasks.empty': 'No tasks found', 'tasks.empty.cta': 'Post the first one', 'task.status.open': 'Open', 'task.status.in_progress': 'In progress', 'task.status.completed': 'Completed', 'task.status.cancelled': 'Cancelled', 'task.status.draft': 'Draft', 'task.budget': 'Budget', 'task.location': 'Location', 'task.deadline': 'Start date', 'task.expires_at': 'Active until', 'task.created_at': 'Created', 'task.customer': 'Customer', 'task.offer.btn': 'Submit offer', 'task.invite.banner_title': "You've been invited to this task", 'task.invite.banner_hint': 'The customer personally invited you', 'task.invite.accept': 'Send offer', 'task.invite.decline': 'Decline', 'offer.accept': 'Accept', 'offer.decline': 'Decline', 'task.complete': 'Complete task', 'task.complete.confirm': 'Mark this task as complete?', 'task.edit': 'Edit', 'task.status_label': 'Status', 'task.yours': 'Your task', 'task.offer.yours': 'Your offer', 'review.leave': 'Leave a review', 'review.rating': 'Rating', 'review.comment': 'Comment', 'review.comment.placeholder': 'Tell us about your experience...', 'review.submit': 'Submit review', 'review.submitting': 'Submitting...', 'review.done': 'Review submitted!', 'profile.reviews': 'Reviews', 'profile.no_reviews': 'No reviews yet', 'profile.rating': 'Rating', 'profile.skills.label': 'Skills', 'profile.member_since': 'Member since', 'task.offers': 'Offers', 'task.offers.none': 'No offers yet', 'create.title': 'Post a task', 'create.field.title': 'Title', 'create.field.description': 'Description', 'create.field.category': 'Category', 'create.field.category.select': 'Select...', 'create.field.location': 'Location', 'create.field.location.any': 'Anywhere', 'create.field.location.all': 'Entire city', 'create.field.budget': 'Budget (€)', 'create.field.deadline': 'Start date', 'create.field.expires_at': 'Listing active for', 'create.field.expires_at.days': '{n} days', 'create.field.budget_negotiable': 'Price is negotiable', 'create.field.time_slot': 'Time slot', 'create.field.time_slot.any': 'Anytime', 'create.field.time_slot.morning': 'Morning (08:00–13:00)', 'create.field.time_slot.afternoon': 'Afternoon (13:00–18:00)', 'create.field.time_slot.evening': 'Evening (18:00–22:00)', 'create.field.time_slot.weekend': 'Weekend', 'create.field.address': 'Address (optional)', 'create.field.address.district': 'District', 'create.field.address.street': 'Street', 'create.field.address.house': 'Number', 'create.field.confidential': 'Confidential note', 'create.field.confidential.placeholder': 'Details visible only to the assigned specialist...', 'create.field.confidential.hint': 'Not shown publicly', 'create.field.photos': 'Photos', 'create.field.photos.add': 'Add photo', 'create.field.photos.uploading': 'Uploading...', 'task.budget_negotiable': 'Price negotiable', 'task.time_slot': 'Time slot', 'task.confidential': 'Confidential note', 'create.field.title.placeholder': 'e.g. Clean 80sqm apartment', 'create.field.description.placeholder': 'Describe in detail what you need...', 'create.field.location.placeholder': 'e.g. Athens, Kolonaki', 'create.field.budget.placeholder': 'e.g. 100', 'create.submit': 'Post task', 'create.submitting': 'Posting...', 'login.title': 'Welcome back', 'login.subtitle': 'Sign in to CanHelp', 'login.email': 'Email', 'login.password': 'Password', 'login.submit': 'Sign in', 'login.submitting': 'Signing in...', 'login.error': 'Invalid email or password', 'login.unverified.title': 'Verify your email address', 'login.unverified.desc': 'We sent a verification link to your email. Check your inbox (or spam) and click the link.', 'login.unverified.resend': 'Resend verification email', 'login.unverified.sending': 'Sending...', 'login.unverified.sent': '✓ Sent — check your inbox', 'profile.email.verified': 'Email verified', 'profile.email.not_verified': 'Email not verified', 'login.no_account': "Don't have an account?", 'login.register_link': 'Register', 'login.forgot_password': 'Forgot password?', 'login.or_continue_with': 'or continue with', 'login.continue_google': 'Continue with Google', 'forgot.title': 'Forgot password', 'forgot.subtitle': 'Enter your email to receive a reset link', 'forgot.email': 'Email', 'forgot.submit': 'Send reset link', 'forgot.submitting': 'Sending...', 'forgot.sent.title': 'Check your inbox', 'forgot.sent.desc': 'If an account exists with that email, we\'ll send you a password reset link.', 'forgot.back_to_login': 'Back to sign in', 'forgot.error': 'Could not send reset link. Check the email address and try again.', 'forgot.error.not_found': 'No account found with this email address.', 'forgot.error.send_failed': 'Failed to send email. Please try again later.', 'reset.title': 'New password', 'reset.subtitle': 'Enter your new password', 'reset.password': 'New password', 'reset.confirm': 'Confirm password', 'reset.submit': 'Change password', 'reset.submitting': 'Saving...', 'reset.success': 'Password changed successfully. Redirecting to sign in...', 'reset.back_to_login': 'Back to sign in', 'reset.error.mismatch': 'Passwords do not match', 'reset.error.invalid': 'Invalid or expired link. Please request a new one.', 'register.title': 'Register', 'register.subtitle': 'Create a CanHelp account', 'register.first_name': 'First name', 'register.last_name': 'Last name', 'register.email': 'Email', 'register.password': 'Password (min 8 characters)', 'register.role': 'Role', 'register.role.customer': 'User', 'register.role.customer.desc': 'I post tasks', 'register.role.specialist': 'Specialist', 'register.role.specialist.desc': 'I take on tasks', 'register.submit': 'Create account', 'register.submitting': 'Registering...', 'register.has_account': 'Already have an account?', 'register.login_link': 'Sign in', 'register.continue_google': 'Continue with Google', 'register.check_email.title': 'Check your email', 'register.check_email.desc': 'We sent a verification link to your email address. Check your inbox (or spam) and click the link.', 'register.check_email.login': 'Back to sign in', 'register.captcha_failed': 'CAPTCHA verification failed. Please complete the security check and try again.', 'dashboard.title': 'Dashboard', 'dashboard.new_task': '+ New task', 'dashboard.onboarding.title': 'Welcome to CanHelp 👋', 'dashboard.onboarding.subtitle': 'Choose how you want to get started.', 'dashboard.onboarding.helper.title': 'Offer your help', 'dashboard.onboarding.helper.desc': 'Complete your profile — skills, categories and areas. It takes a couple of minutes and you start receiving orders.', 'dashboard.onboarding.helper.cta': 'Complete your profile', 'dashboard.onboarding.requester.title': 'Need help?', 'dashboard.onboarding.requester.desc': 'Post a task and helpers will send you their offers.', 'dashboard.onboarding.requester.cta': 'Post a task', 'dashboard.my_tasks': 'My tasks', 'dashboard.my_offers': 'My offers', 'dashboard.invitations': 'Job invitations', 'dashboard.offers_count': 'offers', 'dashboard.declined_count': 'declined', 'dashboard.completed_tasks': 'Completed tasks', 'dashboard.completed_offers': 'Completed offers', 'dashboard.review_pending': 'Review not yet submitted', 'tasks.new.top_specialists': 'Top specialists', 'tasks.new.select_category': 'Select a category to see matching specialists', 'tasks.new.invite': 'Offer work', 'tasks.new.invited': 'Selected ✓', 'reviews.count': 'reviews', 'filter.location': 'Location', 'filter.language': 'Languages', 'filter.language.any': 'Any language', 'filter.category.all': 'All categories', 'user.categories': 'Categories', 'user.work_area': 'Work area', 'user.specialist_cards': 'Service cards', 'card.skills': 'Skills', 'card.categories': 'Categories', 'card.geography': 'Work area', 'card.portfolio': 'Portfolio', 'card.close': 'Close', 'dashboard.tasks.empty': "You haven't posted any tasks", 'dashboard.tasks.empty.cta': 'Post your first one', 'dashboard.tasks.add_new': 'Add a new task', 'dashboard.offers.empty': "You haven't submitted any offers", 'dashboard.offers.empty.cta': 'Find tasks', 'dashboard.customer.specialists_title': 'Looking for a specialist?', 'dashboard.customer.specialists_hint': 'Browse specialist profiles, read reviews and invite them to your tasks', 'dashboard.customer.specialists_cta': 'Find a specialist', 'dashboard.customer.how_title': 'How it works', 'dashboard.customer.step1': 'Create a task with a description and budget', 'dashboard.customer.step2': 'Specialists will send offers with price and timeline', 'dashboard.customer.step3': 'Choose the right one and start working', 'notif.title': 'Notifications', 'notif.mark_all': 'Mark all as read', 'notif.empty': 'No notifications', 'notif.type.generic': 'Notification', 'notif.type.new_offer': 'New offer', 'notif.type.offer_accepted': 'Your offer was accepted', 'notif.type.offer_declined': 'Your offer was declined', 'notif.type.task_completed': 'Task completed', 'notif.type.task_cancelled': 'Task cancelled', 'notif.type.new_message': 'New message', 'notif.type.new_review': 'New review', 'notif.type.task_invite': 'Job invitation', 'notif.type.referral_reward': 'Referral reward', 'notif.type.specialist_card_submitted': 'Card submitted for review', 'notif.type.specialist_card_approved': 'Card approved', 'notif.type.specialist_card_rejected': 'Card rejected', 'notif.body.new_offer': 'New offer for «{title}»', 'notif.body.offer_accepted': 'Your offer for «{title}» was accepted', 'notif.body.offer_declined': 'Your offer for «{title}» was declined', 'notif.body.task_invite': 'You\'ve been invited for «{title}»', 'notif.body.new_review': 'You received a {rating}★ review', 'notif.body.referral_reward': '{days} days of «{plan}» plan access have been added to your account!', 'notif.body.specialist_card_submitted': 'The card «{title}» was sent for review', 'notif.body.specialist_card_approved': 'The card «{title}» was approved and published', 'notif.body.specialist_card_rejected': 'The card «{title}» was not approved. You can fix it and submit again.', 'offer.status.pending': 'Pending', 'offer.status.accepted': 'Accepted', 'offer.status.declined': 'Declined', 'offer.status.withdrawn': 'Withdrawn', 'offer.status.other_accepted': 'Another specialist was chosen', 'common.loading': 'Loading...', 'common.error': 'Error', 'common.save': 'Save', 'common.saving': 'Saving...', 'common.cancel': 'Cancel', 'common.add': 'Add', 'common.close': 'Close', 'common.edit': 'Edit', 'common.delete': 'Delete', 'common.from': 'by', 'common.currency': '€', 'common.greece': 'Greece', // Chat 'chat.connected': 'Connected', 'chat.disconnected': 'Disconnected', 'chat.no_rooms': 'No conversations yet', 'chat.task_fallback': 'Task', 'chat.select': 'Select a conversation', 'chat.no_messages': 'No messages yet', 'chat.placeholder': 'Write a message... (Enter to send)', 'chat.conversation_fallback': 'Conversation', 'chat.direct_chat': 'Direct chat', 'chat.linked_task': 'Linked task', 'chat.write_btn': 'Message', 'chat.just_now': 'just now', 'chat.min_ago': 'm', 'chat.write_specialist': 'Write to specialist', 'chat.write_customer': 'Write to customer', 'chat.notif_settings': 'Notification settings', 'chat.notif_messages': 'Notifications for new messages', 'chat.toast_title': 'New message', 'chat.toast_open': 'Open chat', // Offer form 'offer.price': 'Price', 'offer.price.placeholder': 'e.g. 80', 'offer.customer_budget': 'Client budget', 'offer.message': 'Message', 'offer.optional': 'optional', 'offer.message.placeholder': 'Introduce yourself, your experience and why you are the best choice...', 'offer.submitting': 'Sending...', // Profile 'profile.photo': 'Profile photo', 'profile.photo.change': 'Change photo', 'profile.photo.hint': 'JPEG, PNG, WebP · up to 5MB', 'profile.basic_info': 'Basic info', 'profile.phone': 'Phone', 'profile.phone.placeholder': '+30 6901234567', 'profile.bio': 'Short bio', 'profile.bio.placeholder': 'Tell us a bit about yourself...', 'profile.language': 'Language', 'profile.language.hint': 'App interface and email notification language', 'profile.languages': 'Languages spoken', 'profile.languages.hint': 'Select all languages you speak', 'profile.skills': 'Skills', 'profile.skills.subtitle': 'Add the services you offer', 'profile.skills.placeholder': 'e.g. Cleaning, IT, Tutoring...', 'profile.role': 'Account role', 'profile.role.specialist': '🔧 Helper', 'profile.role.admin': '👑 Admin', 'profile.role.customer': '👤 User', 'profile.role.user': '👤 User', 'profile.role.change': 'To change your role please contact support.', 'profile.become_specialist': 'Offer your help', 'profile.become_specialist.desc': 'Create your helper profile, offer your skills and start receiving tasks.', 'become_specialist.hero.title': 'Offer your skills and start earning', 'become_specialist.hero.subtitle': 'Create a helper profile and receive requests from people who need help', 'become_specialist.how.title': 'How it works', 'become_specialist.step1.title': 'Create a specialist portfolio', 'become_specialist.step1.desc': 'Set your categories, skills and coverage areas — the system will automatically match you with relevant tasks', 'become_specialist.step2.title': 'Find tasks', 'become_specialist.step2.desc': 'Discover tasks in your categories in the "Find Orders" section', 'become_specialist.step3.title': 'Send an offer & earn', 'become_specialist.step3.desc': 'Submit offers with price and timeline, chat with clients and complete tasks', 'become_specialist.benefits.title': 'Specialist profile advantages', 'become_specialist.benefit1': 'Task search filtered by your categories and location', 'become_specialist.benefit2': 'Public profile with client reviews', 'become_specialist.benefit3': 'Availability schedule visible to clients', 'become_specialist.benefit4': 'Saved to favourites by clients', 'become_specialist.cta': 'Learn more', 'become_specialist.free_badge': 'Free registration', 'profile.tab.notifications': 'Notifications', 'profile.tab.reviews': 'Reviews', 'profile.tab.referral': 'Referrals', 'profile.tab.auto_response': 'Auto-response', 'profile.tab.site': 'Site', 'profile.site.title': 'Personal page', 'profile.site.url_label': 'Personal site', 'profile.site.copy': 'Copy', 'profile.site.copied': 'Copied', 'profile.site.visible_title': "What's on your page", 'profile.site.visible.name': 'Name and photo', 'profile.site.visible.bio': 'Bio', 'profile.site.visible.rating': 'Rating and reviews', 'profile.site.visible.portfolio': 'Portfolio / Cards', 'profile.site.visible.contacts': 'Contact info', 'profile.site.visible.full_last_name': 'Full last name', 'profile.site.visible.services': 'Service cards', 'profile.site.visible.reviews': 'Reviews section', 'profile.site.visible.status': '"Ready to help" status', 'profile.site.theme': 'Appearance theme', 'profile.site.theme.dark': 'Dark', 'profile.site.theme.light': 'Light', 'profile.site.slug_taken': 'This address is already taken', 'profile.site.stats.title': 'Site analytics', 'profile.site.stats.days': 'last 30 days', 'profile.site.stats.views': 'Views', 'profile.site.stats.unique': 'Unique visitors', 'profile.site.stats.messages': 'Messages', 'profile.site.stats.total_views': 'Total views', 'profile.site.stats.total_unique': 'Unique visitors', 'profile.site.stats.total_messages': 'Messages', 'profile.site.stats.empty': 'No data yet', 'profile.site.stats.loading': 'Loading analytics...', 'profile.site.stats.no_slug': 'Set your site URL to see analytics', 'profile.site.edit_bio_hint': 'Bio and photo are edited in the "Basic info" tab.', 'profile.site.seo.title': 'SEO — Page Metadata', 'profile.site.seo.hint': 'Shown in search results. Saved values are auto-translated into all languages.', 'profile.site.seo.site_title': 'Page title', 'profile.site.seo.site_title_placeholder': 'John Doe — Plumber in Athens', 'profile.site.seo.site_desc': 'Meta description', 'profile.site.seo.site_desc_placeholder': 'Brief description for search engines...', 'status.title': 'Status', 'status.can_help_now_hint': 'Your card is shown higher in search', 'status.need_help_hint': 'Specialists can offer you help', 'profile.referral.title': 'Referral program', 'profile.referral.desc': 'Share your link and earn rewards for every new user you invite.', 'profile.referral.link_label': 'Your referral link', 'profile.referral.copy': 'Copy', 'profile.referral.copied': 'Copied!', 'profile.referral.invited_count': 'successful referrals', 'profile.referral.no_code': 'Referral code is not available.', 'notifications.title': 'Notification settings', 'notifications.email.new_tasks': 'Email for new tasks', 'notifications.email.new_tasks.desc': 'Receive an email when a new task is posted in your categories', 'notifications.messages.desc': 'Receive a notification when a new message arrives', 'notifications.saved': 'Settings saved', 'notifications.plan_required': 'Not available in your plan', 'profile.tab.info': 'Basic info', 'profile.tab.finance': 'Finance', 'profile.tab.skills': 'Skills', 'profile.tab.categories': 'Categories', 'profile.tab.geography': 'Geography', 'profile.specialist.categories': 'Work categories', 'profile.specialist.categories.desc': 'Select the categories you work in', 'profile.specialist.geography': 'Coverage areas', 'profile.specialist.geography.desc': 'Select the cities / districts where you are active', 'profile.saving': 'Saving...', 'profile.upload.error': 'Error uploading photo', 'profile.saved': 'Saved', 'profile.tab.cards': 'Offers', 'profile.cards.count': 'Offers', 'profile.cards.add': 'Add offer', 'profile.cards.new_title': 'New offer title', 'profile.cards.placeholder': 'e.g. Plumbing', 'profile.cards.create': 'Create', 'profile.cards.cancel': 'Cancel', 'profile.cards.empty': 'No offers yet', 'profile.cards.empty_hint': 'Create your first card to show your services to clients.', 'profile.cards.create_first': 'Create your first offer', 'profile.cards.delete_confirm': 'Delete offer?', 'profile.background.change': 'Change background', 'profile.background.remove': 'Remove background', 'profile.listing_requirements.published_card': 'Publish at least one card', 'profile.listing_requirements.title': 'Your profile is not shown yet in offers', 'profile.listing_requirements.hint': 'To make the card visible, complete these conditions:', 'profile.listing_requirements.bio': 'Add a short bio in the main profile section', 'profile.listing_requirements.categories': 'Add at least one category to the active card', 'profile.listing_requirements.locations': 'Add at least one location to the active card', 'profile.listing_requirements.card_inactive': 'Make the card active', 'profile.listing_requirements.review_pending': 'Card is under review', 'profile.card.visibility_issue': 'Card is not shown in offers', 'profile.card.tab.main': 'General', 'profile.card.tab.skills': 'Skills', 'profile.card.tab.categories': 'Categories', 'profile.card.tab.geography': 'Geography', 'profile.card.tab.portfolio': 'Portfolio', 'profile.card.tab.pricelist': 'Price list', 'profile.card.pricelist.empty': 'No price list groups yet.', 'profile.card.pricelist.add_group': 'Add group', 'profile.card.pricelist.group_title': 'Group title', 'profile.card.pricelist.add_item': 'Add item', 'profile.card.pricelist.item_name': 'Service / work', 'profile.card.pricelist.item_desc': 'Description (optional)', 'profile.card.pricelist.item_price': 'Price', 'profile.card.pricelist.item_unit': 'Unit (e.g. /hour)', 'profile.card.pricelist.save_group': 'Save group', 'profile.card.pricelist.save_item': 'Save', 'profile.card.pricelist.delete_group': 'Delete group', 'profile.card.pricelist.delete_item': 'Delete', 'profile.card.active': 'Active', 'profile.card.review_pending': 'Pending approval', 'profile.card.review_pending_hint': 'Your card is being reviewed by the admin team.', 'profile.card.review_submitted': 'Card submitted for review', 'profile.card.review_approved': 'Card approved', 'profile.card.review_approved_hint': 'Your card is now visible in offers.', 'profile.card.review_rejected': 'Card rejected', 'profile.card.review_rejected_hint': 'Your card was not approved. Please update it and submit again.', 'profile.card.submit_review': 'Submit for review', 'profile.card.withdraw_review': 'Withdraw request', 'profile.card.unpublish': 'Unpublish', 'profile.card.save': 'Save', 'profile.card.saved': 'Saved', 'profile.card.delete': 'Delete', 'profile.card.skill.add': 'Add skill', 'profile.card.photo.add': 'Add photo', 'profile.card.photo.uploading': 'Uploading...', 'profile.card.photo.empty': 'No photos yet', 'profile.card.item.title': 'Title', 'profile.card.item.desc': 'Description', 'profile.card.item.save': 'Save', 'profile.card.item.cancel': 'Cancel', 'profile.card.item.edit': 'Edit', 'profile.card.description': 'Card description', 'profile.card.desc_auto_translate': 'Will be automatically translated into other languages on save', 'profile.card.desc_translated': 'Translations available:', 'profile.upgrade.cards_limit': 'Portfolio limit reached', 'profile.upgrade.plan': 'Current plan:', 'profile.upgrade.contact': 'Contact the administrator to change your plan', 'profile.upgrade.ok': 'Got it', 'profile.plan.title': 'Subscription plan', 'profile.balance': 'Balance', 'profile.balance.topup': 'Top Up Balance', 'profile.balance.topup.title': 'Top Up Balance', 'profile.balance.topup.amount': 'Amount (EUR)', 'profile.balance.topup.hint': 'Choose a preset or enter a custom amount', 'profile.balance.topup.submit': 'Proceed to Payment', 'profile.balance.topup.loading': 'Redirecting...', 'profile.balance.topup.error': 'Payment initiation failed. Please try again.', 'payment.success.title': 'Payment Successful!', 'payment.success.desc': 'Your balance has been updated.', 'payment.cancelled.title': 'Payment Cancelled', 'payment.cancelled.desc': 'Payment was cancelled. No charges were made.', 'payment.pending.title': 'Processing...', 'payment.pending.desc': 'Your payment is being processed.', 'payment.back_to_profile': 'Back to Profile', 'profile.plan.basic': 'Basic (free)', 'profile.plan.contact_upgrade': 'Contact admin to upgrade your plan', 'profile.plan.cards_up_to': 'Portfolio: up to', 'profile.plan.cards_unlimited': 'Portfolio: unlimited', 'profile.plan.tasks_up_to': 'Tasks: up to', 'profile.plan.offers_up_to': 'Offers: up to', 'profile.plan.valid_until': 'Valid until', 'profile.plan.no_expiry': 'No expiry', // Create task 'create.error': 'Error posting task', // Tasks list extras 'tasks.category.general': 'General', 'tasks.budget.range': 'Range:', 'tasks.budget.from': 'from', 'tasks.budget.to': 'to', 'tasks.filter.reset': 'Reset filters', 'tasks.load_more': 'Load more', 'tasks.showing': 'Results:', 'tasks.field.budget': 'Budget, €', // Admin 'admin.title': 'Admin Panel', 'admin.tab.stats': 'Statistics', 'admin.tab.users': 'Users', 'admin.tab.tasks': 'Tasks', 'admin.tab.reports': 'Reports', 'admin.tab.moderation': 'Moderation', 'admin.stats.users': 'Users', 'admin.stats.tasks': 'Tasks', 'admin.stats.offers': 'Offers', 'admin.stats.reviews': 'Reviews', 'admin.tasks.by_status': 'Tasks by status', 'admin.col.user': 'User', 'admin.col.email': 'Email', 'admin.col.role': 'Role', 'admin.col.registered': 'Registered', 'admin.col.status': 'Status', 'admin.col.title': 'Title', 'admin.col.budget': 'Budget', 'admin.col.created': 'Created', 'admin.users.active': 'Active', 'admin.users.inactive': 'Inactive', 'admin.users.deactivate': 'Deactivate', 'admin.users.activate': 'Activate', 'admin.tasks.cancel': 'Cancel', 'admin.reports.none': 'No reports', 'admin.moderation.none': 'No offers to review', 'admin.moderation.pending': 'Pending', 'admin.moderation.active': 'Active', 'admin.moderation.approve': 'Approve', 'admin.moderation.block': 'Block', 'admin.moderation.pending_title': 'Offers pending approval', 'admin.moderation.active_title': 'Active offers', 'admin.moderation.pending_count': 'Pending', 'admin.moderation.active_count': 'Active', 'admin.moderation.pending_hint': 'New offers waiting for approval', 'admin.moderation.active_hint': 'Visible offers you can block', 'admin.moderation.pending_empty': 'No new offers to approve', 'admin.moderation.active_empty': 'No active offers found', 'admin.reports.reviewed': 'Reviewed', 'admin.reports.dismiss': 'Dismiss', 'admin.pagination.total': 'Total', 'admin.users.role.change': 'Change role', 'admin.users.search.placeholder': 'Search name or email...', 'admin.tasks.delete': 'Delete', 'admin.tasks.delete.confirm': 'Permanently delete this task?', 'admin.tasks.search.placeholder': 'Search title...', 'admin.col.customer': 'Customer', 'admin.col.reporter': 'Reporter', 'admin.col.target': 'Target', 'admin.filter.all_roles': 'All roles', 'admin.filter.all_statuses': 'All statuses', 'admin.reports.target.task': 'Task', 'admin.reports.target.user': 'User', 'admin.tab.categories': 'Categories', 'admin.tab.locations': 'Cities & Districts', 'admin.tab.logs': 'Logs', 'admin.tab.plans': 'Plans', 'admin.tab.settings': 'Settings', 'admin.logs.subtab.ai': 'AI Logs', 'admin.logs.subtab.activity': 'Activity', 'admin.logs.subtab.mail': 'Mail', 'admin.logs.subtab.notifications': 'Notifications', 'admin.notif_logs.type': 'Type', 'admin.notif_logs.title': 'Title', 'admin.notif_logs.read': 'Read', 'admin.notif_logs.empty': 'No notification logs', 'admin.stats.notif_chart_title': 'Notifications per day', 'admin.stats.notif_label': 'Notifications', 'admin.stats.mail_chart_title': 'Emails per day', 'admin.stats.mail_label': 'Emails', 'admin.filter.all': 'All', 'admin.stats.specialists': 'Helpers', 'admin.col.plan': 'Plan', 'admin.back_home': 'Home', 'admin.plans.title': 'Subscription plans', 'admin.plans.add': '+ New plan', 'admin.plans.empty': 'No plans created', 'admin.plans.form.new': 'New plan', 'admin.plans.form.edit': 'Edit plan', 'admin.plans.form.name': 'Name', 'admin.plans.form.price': 'Price (EUR)', 'admin.plans.form.old_price': 'Old price (EUR, optional)', 'admin.plans.form.max_offers': 'Max offers (empty = no limit)', 'admin.plans.form.max_cards': 'Max offers (empty = no limit)', 'admin.plans.form.duration_days': 'Duration (days, empty = no expiry)', 'admin.plans.form.description': 'Description', 'admin.plans.form.features': 'Features (one per line)', 'admin.plans.form.notify': 'Notify about new tasks', 'admin.plans.form.default': 'Default', 'admin.plans.form.active': 'Active', 'admin.plans.form.order': 'Order', 'admin.plans.form.role': 'Role', 'admin.plans.form.tier': 'Tier', 'admin.plans.form.role.customer': 'Customer', 'admin.plans.form.role.specialist': 'Helper', 'admin.plans.form.tier.free': 'Free', 'admin.plans.form.tier.pro': 'Pro', 'admin.plans.form.tier.ultimate': 'Ultimate', 'admin.plans.form.section.limits': 'Limits (empty = unlimited)', 'admin.plans.form.max_messages_day': 'Max Messages/Day', 'admin.plans.form.max_orders_day': 'Max Orders/Day', 'admin.plans.form.max_skills': 'Max Skills', 'admin.plans.form.max_profiles': 'Max Profiles', 'admin.plans.form.max_portfolio': 'Max Portfolio Items', 'admin.plans.form.section.boost': 'Multipliers & Boost', 'admin.plans.form.search_boost': 'Search Boost', 'admin.plans.form.offers_multiplier': 'Offers Multiplier', 'admin.plans.form.section.contact': 'Contact Permissions', 'admin.plans.form.can_contact_free': 'Contact Free Plan users', 'admin.plans.form.can_contact_pro': 'Contact Pro Plan users', 'admin.plans.form.can_contact_all': 'Contact All users', 'admin.plans.form.can_show_contact': 'Show Contact Info', 'admin.plans.form.can_view_phone': 'View Phone', 'admin.plans.form.section.features': 'Feature Flags', 'admin.plans.form.upload_video': 'Upload Video', 'admin.plans.form.favorites': 'Favorites', 'admin.plans.form.google_calendar': 'Google Calendar', 'admin.plans.form.verified_badge': 'Verified Badge', 'admin.plans.form.highlighted_reviews': 'Highlighted Reviews', 'admin.plans.form.personal_site': 'Personal Site', 'admin.plans.form.can_help_now': 'Can Help Now Status', 'admin.plans.form.need_help': 'Need Help Status', 'admin.plans.form.auto_response': 'Auto Response', 'admin.plans.form.auto_match': 'Auto Match', 'admin.plans.form.price_list': 'Price List', 'admin.plans.form.instant_dispatch_free': 'Instant Dispatch (Free)', 'admin.plans.form.instant_dispatch_pro': 'Instant Dispatch (Pro)', 'admin.plans.badge.default': 'Default', 'admin.plans.badge.inactive': 'Inactive', 'admin.plans.make_default': 'Set as default', 'admin.plans.tasks': 'Tasks', 'admin.plans.offers': 'Offers', 'admin.plans.cards': 'Offers', 'admin.plans.notify_tasks': 'Task notifications', 'admin.plans.delete.confirm': 'Delete plan', 'admin.activity.title': 'Activity log', 'admin.activity.event': 'Event', 'admin.activity.all_events': 'All events', 'admin.activity.from': 'From', 'admin.activity.to': 'To', 'admin.activity.reset': 'Reset', 'admin.activity.total': 'Total', 'admin.activity.empty': 'No records', 'admin.mail.event': 'Email event', 'admin.mail.all_events': 'All email events', 'admin.mail.from': 'From', 'admin.mail.to': 'To', 'admin.mail.reset': 'Reset', 'admin.mail.total': 'Total', 'admin.mail.empty': 'No email logs', 'admin.mail.recipient': 'Recipient', 'admin.mail.provider': 'Provider', 'admin.mail.details': 'Details', 'admin.mail.status': 'Status', 'admin.mail.success': 'Success', 'admin.mail.failed': 'Failed', 'admin.event.email_sent': 'Email sent', 'admin.event.email_failed': 'Email failed', 'admin.event.email_dev': 'Email DEV fallback', 'admin.event.admin_email_test_sent': 'Admin test email sent', 'admin.event.admin_email_test_failed': 'Admin test email failed', 'admin.logs.empty': 'No records', 'admin.logs.date': 'Date', 'admin.logs.provider': 'Provider', 'admin.logs.model': 'Model', 'admin.logs.action': 'Action', 'admin.logs.langs': 'Languages', 'admin.logs.in': 'In', 'admin.logs.out': 'Out', 'admin.logs.total': 'Total', 'admin.logs.ms': 'ms', 'admin.logs.status': 'Status', 'admin.stats.activity_30d': 'Activity over 30 days', 'admin.stats.tasks_label': 'Tasks', 'admin.stats.users_label': 'Users', 'admin.stats.specialists_label': 'Helpers', 'admin.stats.tokens_title': 'Token usage (by month)', 'admin.stats.tokens_out': 'Output', 'admin.stats.tokens_in': 'Input', 'admin.stats.tokens_out_label': 'Output tokens', 'admin.stats.tokens_in_label': 'Input tokens', 'admin.stats.cost_label': 'Cost (USD)', 'admin.stats.tasks_by_status': 'Tasks by status', 'admin.task_status.open': 'Open', 'admin.task_status.in_progress': 'In progress', 'admin.task_status.completed': 'Completed', 'admin.task_status.cancelled': 'Cancelled', 'admin.task_status.draft': 'Drafts', 'admin.settings.tab.general': 'General', 'admin.settings.tab.smtp': 'E-Mail', 'admin.settings.tab.notifications': 'Notifications', 'admin.settings.tab.payment': 'Payment', 'admin.settings.tab.referral': 'Referrals', 'admin.settings.tab.seo': 'SEO', 'admin.settings.tab.socials': 'Socials', 'admin.settings.tab.telegram': 'Telegram Bot', 'admin.settings.telegram.title': 'Telegram Bot Settings', 'admin.settings.telegram.help': 'Create a bot via @BotFather. Use @userinfobot to get chat IDs.', 'admin.settings.telegram.bot_token': 'Bot Token', 'admin.settings.telegram.admin_chat_id': 'Admin Chat ID', 'admin.settings.telegram.admin_chat_hint': 'First send /start to your bot, then use @userinfobot to get your chat ID', 'admin.settings.telegram.channel_id': 'Channel ID', 'admin.settings.telegram.channels_title': 'Language Channels', 'admin.settings.telegram.channel_hint': 'Public channel @username or numeric ID', 'admin.settings.telegram.notify_registrations': 'Notify on new registrations', 'admin.settings.telegram.notify_registrations_hint': 'Send admin a message when a new user registers', 'admin.settings.telegram.post_new_tasks': 'Post new tasks to channel', 'admin.settings.telegram.post_new_tasks_hint': 'Automatically publish new tasks to the Telegram channel', 'admin.settings.telegram.test': 'Test', 'admin.settings.telegram.verify': 'Verify', 'admin.settings.telegram.test_ok': 'Connection successful', 'admin.settings.telegram.test_fail': 'Connection failed', 'admin.settings.socials.title': 'Social Network Links', 'admin.settings.socials.hint': 'Filled links are displayed in the site footer', 'admin.settings.seo.maintenance_label': 'Maintenance Mode', 'admin.settings.seo.maintenance_hint': 'Show a maintenance page to all visitors', 'admin.settings.seo.indexing_label': 'Search Engine Indexing', 'admin.settings.seo.indexing_hint': 'Allow search engines to index the site', 'admin.settings.seo.head_scripts_label': ' Scripts (JS)', 'admin.settings.seo.head_scripts_hint': 'Runs on every page (Google Tag Manager, analytics, etc.)', 'admin.settings.seo.site_title_label': 'Site Title', 'admin.settings.seo.site_description_label': 'Site Description (meta description)', 'admin.settings.referral.title': 'Referral program', 'admin.settings.referral.hint': 'Reward users who bring new registrations.', 'admin.settings.referral.enabled_label': 'Enabled', 'admin.settings.referral.enabled_hint': 'Enable / disable reward application', 'admin.settings.referral.customer_section': 'For customers', 'admin.settings.referral.specialist_section': 'For helpers', 'admin.settings.referral.plan_label': 'Reward plan', 'admin.settings.referral.no_plan': '— no plan —', 'admin.settings.referral.plan_hint': 'This plan will be assigned to the referrer. If their current plan is higher, only days will be added.', 'admin.settings.referral.days_label': 'Reward days', 'admin.settings.referral.days_hint': 'Number of days added to the plan expiry.', 'admin.settings.general.title': 'General settings', 'admin.settings.general.site_name': 'Site name', 'admin.settings.general.site_url': 'Site URL', 'admin.settings.general.contact_email': 'Contact email', 'admin.settings.general.support_phone': 'Support phone', 'admin.settings.smtp.title': 'SMTP settings', 'admin.settings.smtp.hint': 'Used to send email notifications.', 'admin.settings.smtp.host': 'SMTP Host', 'admin.settings.smtp.port': 'Port', 'admin.settings.smtp.encryption': 'Encryption', 'admin.settings.smtp.enc.none': 'None', 'admin.settings.smtp.enc.tls': 'STARTTLS (port 587)', 'admin.settings.smtp.enc.ssl': 'SSL/TLS (port 465)', 'admin.settings.smtp.username': 'Username', 'admin.settings.smtp.password': 'Password / App Password', 'admin.settings.smtp.from_name': 'Sender name', 'admin.settings.smtp.from_email': 'Sender email', 'admin.settings.smtp.test': 'Send test email', 'admin.settings.smtp.sending': 'Sending...', 'admin.settings.payment.hint': 'ePay Piraeus Bank credentials.', 'admin.settings.env.test': 'Test (sandbox)', 'admin.settings.env.prod': 'Production', 'admin.settings.env.label': 'Environment', 'admin.settings.merchant_id': 'Merchant ID', 'admin.settings.api_user': 'API User', 'admin.settings.api_password': 'API Password', 'admin.settings.confirm_url': 'Confirmation URL (webhook)', 'admin.settings.cancel_url': 'Cancel URL', 'admin.settings.active': 'Active', 'admin.settings.saving': 'Saving...', 'admin.settings.saved': 'Saved', 'admin.notif.vars_hint': 'Available variables in templates', 'admin.notif.tmpl.not_set': 'Template not configured', 'admin.notif.tmpl.subject_label': 'Email subject', 'admin.notif.tmpl.body_label': 'Email body (HTML)', 'admin.notif.tmpl.save': 'Save', 'admin.notif.tmpl.close': 'Close', 'admin.notif.tmpl.translate': 'Auto-translate to other languages', 'admin.notif.tmpl.translating': 'Translating...', 'admin.notif.tmpl.saving': 'Saving...', 'admin.notif.email_verification': 'Email verification', 'admin.notif.registration_success': 'Successful registration', 'admin.notif.password_reset': 'Password reset', 'admin.notif.new_offer': 'New offer', 'admin.notif.new_task': 'New task', 'admin.notif.offer_accepted': 'Offer accepted', 'admin.notif.new_message': 'New message', 'admin.notif.offer_declined': 'Offer declined', 'admin.notif.offer_other_accepted': 'Another specialist chosen', 'admin.notif.task_updated': 'Task updated', 'admin.notif.deadline_reminder': 'Deadline reminder', 'admin.notif.task_archived': 'Task unpublished automatically', 'admin.notif.referral_reward': 'Referral reward', // Plan lifecycle email templates 'admin.email_template.plan_activated': 'Plan activated', 'admin.email_template.plan_upgraded': 'Plan upgraded', 'admin.email_template.plan_downgrade_scheduled': 'Downgrade scheduled', 'admin.email_template.plan_downgrade_applied': 'Downgrade applied', 'admin.email_template.plan_renewal_reminder': 'Renewal reminder', 'admin.email_template.plan_insufficient_funds': 'Insufficient funds warning', // Pricing confirm modal 'pricing.confirm.title': 'Confirm plan selection', 'pricing.confirm.plan': 'Plan', 'pricing.confirm.prorated': 'Prorated credit', 'pricing.confirm.effective_price': 'Amount due', 'pricing.confirm.your_balance': 'Your balance', 'pricing.confirm.downgrade_info': 'The switch to the new plan will happen automatically after the current period ends.', 'pricing.confirm.insufficient': 'Insufficient balance.', 'pricing.confirm.top_up': 'Top up', 'pricing.confirm.schedule_downgrade': 'Schedule downgrade', 'pricing.confirm.pay': 'Pay', 'admin.user_edit.title': 'Edit user', 'admin.user_edit.email': 'Email', 'admin.user_edit.email_verified': 'Email verified', 'admin.user_edit.email_not_verified': 'Email not verified', 'admin.user_edit.verify_email_btn': 'Verify manually', 'admin.user_edit.verify_email_done': 'Email verified!', 'admin.user_edit.id': 'ID', 'admin.user_edit.registered': 'Registered', 'admin.user_edit.last_seen': 'Last seen', 'admin.user_edit.lang': 'Language', 'admin.user_edit.first_name': 'First name', 'admin.user_edit.last_name': 'Last name', 'admin.user_edit.phone': 'Phone', 'admin.user_edit.bio': 'Bio', 'admin.user_edit.role': 'Role', 'admin.user_edit.plan': 'Plan', 'admin.user_edit.no_plan': '— No plan —', 'admin.user_edit.active': 'Active account', 'admin.user_edit.published': 'Published', 'admin.user_edit.balance': 'Balance (EUR)', 'admin.user_edit.skills': 'Skills', 'admin.user_edit.tab.profile': 'Profile', 'admin.user_edit.tab.account': 'Account', 'admin.user_edit.tab.balance': 'Balance', 'admin.user_edit.tab.settings': 'Settings', 'admin.user_edit.tab.specialist': 'Offers', 'admin.user_edit.tab.site': 'Website', 'admin.user_edit.plan_expires': 'Plan expires', 'admin.user_edit.interface_lang': 'Interface language', 'admin.user_edit.comm_languages': 'Communication languages', 'admin.user_edit.personal_site_slug': 'Personal page', 'admin.user_edit.show_contact_info': 'Show contact info', 'admin.user_edit.show_contact_info.hint': 'Visible to customers', 'admin.user_edit.notify_new_tasks': 'Notify about new tasks', 'admin.user_edit.notify_new_tasks.hint': 'Push and email notifications', 'admin.user_edit.notif_messages': 'Message notifications', 'admin.user_edit.notif_messages.hint': 'New messages in chat', 'admin.user_edit.site_settings': 'Personal page settings', 'admin.user_edit.categories': 'Service categories', 'admin.user_edit.locations': 'Service areas', 'admin.user_edit.skill_placeholder': 'New skill...', 'admin.user_edit.add_category': '— Select category —', 'admin.user_edit.add_location': '— Select location —', 'admin.user_edit.specialist_cards': 'Offers', 'admin.user_edit.no_cards': 'No offers found', 'admin.user_edit.card_title': 'Offer title', 'admin.user_edit.card_description': 'Description', 'admin.balance.topup.btn': 'Top up', 'admin.balance.withdraw.btn': 'Withdraw', 'admin.balance.modal_hint': 'Changes take effect immediately and are recorded in history', 'admin.balance.topup.title': 'Top up balance', 'admin.balance.topup.amount': 'Amount', 'admin.balance.topup.description': 'Comment', 'admin.balance.topup.description.placeholder': 'For example: bonus or manual top-up', 'admin.balance.topup.submit': 'Top up balance', 'admin.balance.withdraw.title': 'Withdraw balance', 'admin.balance.withdraw.amount': 'Amount', 'admin.balance.withdraw.description': 'Comment', 'admin.balance.withdraw.description.placeholder': 'For example: refund or manual debit', 'admin.balance.withdraw.submit': 'Withdraw from balance', 'admin.user_edit.role.customer': 'Customer', 'admin.user_edit.role.user': 'User', 'admin.user_edit.role.specialist': 'Helper', 'admin.user_edit.role.admin': 'Administrator', 'common.refresh': 'Refresh', 'common.back_home': 'Home', 'admin.loc.hint': 'Manage cities and districts', 'admin.loc.add_city': 'New city', 'admin.loc.add_district': 'Add district', 'admin.loc.new': 'New location', 'admin.loc.edit': 'Edit location', 'admin.loc.district': 'district', 'admin.loc.empty': 'No locations', 'admin.loc.delete.confirm': 'Delete location? All districts will also be deleted.', 'admin.cat.add_root': 'New category', 'admin.cat.add_sub': 'Subcategory', 'admin.cat.edit': 'Edit', 'admin.cat.delete': 'Delete', 'admin.cat.delete.confirm': 'Delete category? All subcategories will also be deleted.', 'admin.cat.slug': 'Slug', 'admin.cat.icon': 'Icon', 'admin.cat.name_el': 'Greek', 'admin.cat.name_en': 'English', 'admin.cat.name_ru': 'Russian', 'admin.cat.name_uk': 'Ukrainian', 'admin.cat.active': 'Active', 'admin.cat.parent': 'Parent category', 'admin.cat.no_parent': 'Top level', 'admin.cat.save': 'Save', 'admin.cat.cancel': 'Cancel', 'admin.cat.empty': 'No categories', 'admin.cat.hint': 'Manage categories with multi-level hierarchy', 'admin.cat.new': 'New category', 'admin.cat.subcategory': 'subcategory', 'admin.cat.add_child': 'Add subcategory', 'admin.cat.inactive': 'Inactive', 'admin.event.user_login': 'Login', 'admin.event.user_register': 'Registration', 'admin.event.admin_user_deactivate': 'User blocked', 'admin.event.admin_user_activate': 'User activated', 'admin.event.admin_user_role_changed': 'Role changed', 'admin.event.admin_task_cancelled': 'Task cancelled', 'admin.event.admin_task_deleted': 'Task deleted', 'admin.event.admin_report_reviewed': 'Report reviewed', 'admin.event.admin_report_dismissed': 'Report dismissed', 'admin.event.task_created': 'Task created', // User status 'user.online': 'Online', 'user.seen_minutes': 'was here {n} min ago', 'user.seen_hours': 'was here {n} hr ago', 'user.seen_yesterday': 'was here yesterday', 'user.seen_days': 'was here {n} days ago', // Specialists 'specialists.title': 'Offers', 'specialists.search': 'Search specialist...', 'specialists.search.btn': 'Search', 'specialists.empty': 'No specialists found', 'specialists.no_bio': 'No description', 'specialists.view': 'View profile', 'specialists.reviews': 'reviews', 'specialist.favorite': 'Add to favorites', 'specialist.unfavorite': 'Remove from favorites', 'specialist.site_link': 'Personal site', 'favorites.specialists.title': 'Favourite specialists', 'favorites.specialists.empty': 'No favourite specialists yet', 'nav.favorites': 'Favourites', 'nav.schedule': 'Schedule', 'nav.find_tasks': 'Find Orders', 'schedule.title': 'My Schedule', 'schedule.subtitle': 'Mark the days when you are free or busy — clients will see your availability', 'schedule.available': 'Available', 'schedule.busy': 'Busy', 'schedule.unset': 'Not set', 'schedule.click_hint': '← click to cycle status', 'schedule.range_mode': 'Select range', 'schedule.range_from': 'From {date} — select end date', 'schedule.click_to_set': 'Click to set', 'schedule.free': 'free', 'schedule.busy_count': 'busy', 'schedule.free_days': 'free days', 'schedule.googleCalendar': 'Google Calendar', 'schedule.connectGoogle': 'Connect Google Calendar', 'schedule.disconnectGoogle': 'Disconnect', 'schedule.connectedAs': 'Connected as', 'schedule.importFromGoogle': 'Sync from Google', 'schedule.gcalConnected': '\u2713 Google Calendar connected', 'schedule.gcalError': 'Google Calendar connection error', 'schedule.gcalImportDone': 'Imported {n} days from Google Calendar', 'schedule.gcalAutoSyncNote': 'Availability changes are automatically synced to Google Calendar', 'schedule.gcalConnectDesc': 'Connect Google Calendar to automatically sync your availability', 'schedule.gcalDisconnectConfirm': 'Disconnect Google Calendar?', 'find_tasks.title': 'Find Orders', 'find_tasks.for_me': 'For me', 'find_tasks.all': 'All orders', 'find_tasks.by_category': 'By category', 'find_tasks.list': 'List', 'find_tasks.already_offered': 'Offer sent', 'find_tasks.offer_now': 'Make an offer', 'find_tasks.empty_for_me': 'No tasks found in your categories', 'find_tasks.banner_hint': 'Find tasks matching your portfolio categories', 'find_tasks.no_cards': 'Create a specialist portfolio to see tasks matched to you', 'find_tasks.add_card': 'Create portfolio', 'find_tasks.search': 'Search tasks...', 'find_tasks.tasks_count': 'tasks', 'footer.tagline': 'The task platform for Greece', 'footer.rights': 'All rights reserved.', 'nav.privacy': 'Privacy Policy', 'nav.delete_account': 'Delete Account', 'delete_account.title': 'Request Account Deletion', 'delete_account.subtitle': 'Once we verify your request, we will permanently delete your account and data within 30 days.', 'delete_account.warning': 'This action cannot be undone. All your data will be permanently deleted.', 'delete_account.reason_label': 'Reason (optional)', 'delete_account.reason_placeholder': 'Tell us why you want to delete your account...', 'delete_account.confirm_label': 'I confirm that I want to permanently delete my account', 'delete_account.submit': 'Submit request', 'delete_account.submitting': 'Submitting...', 'delete_account.success_title': 'Your request has been received', 'delete_account.success_body': 'We will process your request within 30 days and notify you by email.', 'delete_account.login_required': 'You must be logged in to submit a deletion request.', 'delete_account.login_btn': 'Log in', // App download section 'app.download_title': 'Download the CanHelp mobile app', 'app.download_desc': 'All of CanHelp — always at your fingertips. Available for Android and iOS.', // Nav 'nav.pricing': 'Pricing', // Pricing page 'pricing.title': 'Pricing', 'pricing.subtitle': 'Choose the right plan for you', 'pricing.role.customer': 'Customer', 'pricing.role.specialist': 'Specialist', 'pricing.free': 'Free', 'pricing.per_month': 'mo', 'pricing.duration': 'Duration', 'pricing.days': 'days', 'pricing.current_plan': 'Your plan', 'pricing.popular': 'Popular', 'pricing.choose': 'Choose', 'pricing.your_plan': 'Active plan', 'pricing.free_default': 'Default', 'pricing.compare': 'Compare features', 'pricing.feature': 'Feature', 'pricing.faq_note': 'Payment is deducted from your CanHelp balance. Top up available in Payments.', 'pricing.feat.messages': 'Messages / day', 'pricing.feat.orders': 'Orders / day', 'pricing.feat.contact_all': 'Contact everyone', 'pricing.feat.view_phone': 'View phone number', 'pricing.feat.show_contact': 'Show contact info', 'pricing.feat.favorites': 'Favorites', 'pricing.feat.verified_badge': 'Verified badge', 'pricing.feat.google_calendar': 'Google Calendar', 'pricing.feat.personal_site': 'Personal site', 'pricing.feat.auto_response': 'Auto-response', 'pricing.feat.auto_match': 'Auto-match', 'pricing.feat.highlighted_reviews': 'Highlighted reviews', 'pricing.feat.portfolio': 'Offer items', 'pricing.feat.cards': 'Number of offers', 'pricing.feat.notify_tasks': 'New task notifications', 'pricing.feat.video': 'Video in offer', // Upgrade prompt 'upgrade.available_in': 'Available in', 'upgrade.cta': 'Upgrade', // Dashboard plan block 'dashboard.plan.title': 'My Plan', 'dashboard.plan.expires': 'Expires in {n} days', 'dashboard.plan.upgrade': 'Upgrade plan', 'dashboard.plan.no_plan': 'Free plan', 'dashboard.plan.messages': 'Messages today', 'dashboard.plan.orders': 'Orders today', 'dashboard.plan.limits': 'Daily limits', 'dashboard.plan.features': 'Features', 'dashboard.plan.stats': 'Stats', 'dashboard.stats.cards': 'Portfolios', 'dashboard.stats.maxCards': 'Max portfolios', 'dashboard.stats.portfolioItems': 'Portfolio items', 'dashboard.stats.maxPortfolioItems': 'Max items', 'dashboard.stats.activeOffers': 'Active offers', 'dashboard.stats.reviewsReceived': 'Reviews', 'dashboard.stats.activeTasks': 'Active tasks', 'dashboard.stats.completedTasks': 'Completed', 'status.need_help': 'I need help', 'status.active': 'Active', 'status.toggle_on': 'Enable', 'status.toggle_off': 'Disable', // FOMO 'fomo.missed_orders': 'Missed {n} orders', 'fomo.missed_value': 'Worth €{v}', 'fomo.upgrade_hint': 'Upgrade to receive more orders', 'fomo.conversion': 'Task conversion', 'fomo.active': 'Active', 'fomo.with_offers': 'With offers', 'fomo.completed': 'Completed', 'fomo.already_offered': '{n} specialists have already responded', 'fomo.specialist_missed': 'You missed {n} orders', 'fomo.top_categories': 'Categories', 'fomo.offers_received': 'offers received', 'fomo.avg_offers': 'Avg {n}/task', 'fomo.completion_rate': 'completed', // Task auto-match 'task.auto_match': 'Auto-match', 'task.auto_match_results': 'Top specialists', 'task.no_offer_yet': 'You haven\'t sent an offer yet', 'task.make_offer': 'Send offer', 'auto_response.title': 'Auto-Response', 'auto_response.enabled': 'Enable auto-response', 'auto_response.min_budget': 'Min budget', 'auto_response.max_budget': 'Max budget', 'auto_response.default_price': 'Default price', 'auto_response.default_message': 'Default message', 'auto_response.max_per_day': 'Max auto-offers per day', 'auto_response.save': 'Save', 'auto_response.saved': 'Saved', 'auto_response.categories': 'Categories', 'auto_response.locations': 'Locations', // Personal site 'profile.personal_site': 'Personal Site', 'profile.site_slug': 'URL slug', 'profile.site_slug_hint': 'Only latin letters, numbers, - and _', 'profile.site_open': 'Open site', 'profile.site_preview': 'Your site', 'profile.show_contact': 'Show contact info', 'profile.show_contact_hint': 'Customers with Pro/Ultimate plans will see your phone number', // Google Calendar plan gate 'gcal.upgrade_required': 'Google Calendar requires a Pro or Ultimate plan', // Chat limits 'chat.limit_warning': '{n} messages left today', 'chat.limit_reached': 'Message limit reached. Upgrade your plan', 'chat.upgrade': 'Upgrade', // Site page 'site.member_since': 'Member since', 'site.rating': 'Rating', 'site.completed_tasks': 'Completed', 'site.languages': 'Languages', 'site.photos': 'photos', 'site.contact_form': 'Get in touch', 'site.contact_sent': 'Message sent!', 'site.contact_sent_desc': 'The specialist will contact you soon', 'site.contact_name': 'Name', 'site.contact_name_ph': 'Your name', 'site.contact_email_ph': 'your@email.com', 'site.contact_message': 'Message', 'site.contact_message_ph': 'Describe your task...', 'site.contact_send': 'Send', 'site.share': 'Share', 'site.speaks_languages': 'Speaks', 'site.message_sent': 'Message sent!', 'site.message_sent_desc': 'The specialist will receive it in the chat', 'site.message_placeholder': 'Write your message...', 'site.write_to_chat': 'Write to chat', 'site.auth_required_title': 'Sign in required', 'site.auth_required_desc': 'To write in the chat, you need to sign in to your CanHelp account.', 'site.auth_login_btn': 'Sign in', 'site.auth_contact_form_btn': 'Contact via feedback form', 'specialist.services': 'Services', 'portfolio.title': 'Portfolio', 'status.can_help_now': 'Available now', 'common.not_found': 'Page not found', 'common.anonymous': 'Anonymous', 'specialist_setup.page_title': 'Specialist profile setup', 'specialist_setup.step_of': 'Step {current} of {total}', 'specialist_setup.next': 'Next', 'specialist_setup.back': 'Back', 'specialist_setup.skip': 'Skip', 'specialist_setup.finish': 'Finish', 'specialist_setup.go_to_profile': 'Go to profile', 'specialist_setup.browse_tasks': 'Browse tasks', 'specialist_setup.step1.title': 'Welcome!', 'specialist_setup.step1.subtitle': "Let's set up your profile", 'specialist_setup.step1.desc': 'A complete profile helps you find more clients. Follow the steps to create the perfect specialist profile.', 'specialist_setup.step1.what_next': 'What we will do:', 'specialist_setup.step1.item1': 'Fill in basic information', 'specialist_setup.step1.item2': 'Create a service card', 'specialist_setup.step1.item3': 'Add skills and categories', 'specialist_setup.step1.item4': 'Select service area', 'specialist_setup.step1.item5': 'Upload portfolio photos', 'specialist_setup.step2.title': 'Basic profile', 'specialist_setup.step2.subtitle': 'Tell us about yourself', 'specialist_setup.step2.bio_label': 'About me', 'specialist_setup.step2.bio_placeholder': 'Describe your experience, services you offer...', 'specialist_setup.step2.phone_label': 'Phone', 'specialist_setup.step2.phone_placeholder': '+30 6900000000', 'specialist_setup.step2.photo_label': 'Profile photo', 'specialist_setup.step2.photo_btn': 'Upload photo', 'specialist_setup.step2.photo_uploading': 'Uploading...', 'specialist_setup.step2.photo_hint': 'Shown on your profile', 'specialist_setup.step3.title': 'Service card', 'specialist_setup.step3.subtitle': 'Create your first service card', 'specialist_setup.step3.title_label': 'Card title', 'specialist_setup.step3.title_placeholder': 'E.g. Plumber, Electrician, Cleaning...', 'specialist_setup.step3.desc_label': 'Description', 'specialist_setup.step3.desc_placeholder': 'Describe in detail what you offer, your experience, advantages...', 'specialist_setup.step3.title_required': 'Title is required', 'specialist_setup.step4.title': 'Skills & Categories', 'specialist_setup.step4.subtitle': 'Add skills and select categories', 'specialist_setup.step4.skills_label': 'Skills', 'specialist_setup.step4.skills_placeholder': 'E.g. Pipe installation...', 'specialist_setup.step4.skills_add': 'Add', 'specialist_setup.step4.categories_label': 'Categories', 'specialist_setup.step5.title': 'Service area', 'specialist_setup.step5.subtitle': 'Where do you provide services?', 'specialist_setup.step5.hint': 'Select cities or specific areas', 'specialist_setup.done.title': 'Your profile is ready!', 'specialist_setup.done.subtitle': 'Congratulations! Your profile has been set up', 'specialist_setup.done.desc': 'You can now receive orders from clients. Browse tasks that match your skills.', // Support 'support.title': 'Support', 'support.type.label': 'Request type', 'support.type.bug': 'Bug report', 'support.type.suggestion': 'Suggestion', 'support.type.other': 'Other', 'support.subject': 'Subject', 'support.subject.placeholder': 'Brief description...', 'support.body': 'Message', 'support.body.placeholder': 'Describe the issue or suggestion in detail...', 'support.submit': 'Submit', 'support.cancel': 'Cancel', 'support.error': 'Failed to send. Please try again.', 'support.sent.title': 'Request received!', 'support.sent.body': 'We will reply to your email as soon as possible.', 'support.sent.close': 'Close', 'admin.tab.support': 'Support', 'admin.tab.backup': 'Backup', 'admin.tab.translations': 'Translations', 'admin.tab.dbcheck': 'DB Check', 'admin.tab.balances': 'Balances', 'admin.tab.push': 'Push', 'admin.tab.referrals': 'Referrals', 'admin.search': 'Search', 'admin.noData': 'No data', 'admin.cat.order': 'Order', 'admin.cat.skills': 'Skills', 'admin.plans.form.max_tasks': 'Max tasks', 'admin.settings.referral.shared_section': 'Shared referral settings', 'admin.settings.seo.title': 'SEO settings', 'admin.backup.title': 'Backup', 'admin.backup.tables': 'Tables', 'admin.backup.exportAll': 'Export all', 'admin.backup.importAll': 'Import all', 'admin.backup.exportTable': 'Export table', 'admin.backup.importTable': 'Import table', 'admin.backup.exporting': 'Exporting...', 'admin.backup.importing': 'Importing...', 'admin.backup.exportSuccess': 'Export completed', 'admin.backup.importSuccess': 'Import completed', 'admin.backup.autoBackup': 'Auto backup', 'admin.backup.autoBackupDesc': 'Automatic daily backup', 'admin.backup.storedBackups': 'Stored backups', 'admin.backup.noStoredBackups': 'No stored backups', 'admin.backup.restore': 'Restore', 'admin.backup.restoreConfirm': 'Restore from backup?', 'admin.backup.restoreSuccess': 'Restore completed', 'admin.backup.restoring': 'Restoring...', 'admin.backup.date': 'Date', 'admin.backup.size': 'Size', 'admin.backup.today': 'Today', 'admin.backup.yesterday': 'Yesterday', 'admin.balance.col.operation': 'Operation', 'admin.balance.col.amount': 'Amount', 'admin.balance.col.result': 'Balance', 'admin.balance.col.description': 'Description', 'admin.balance.col.date': 'Date', 'admin.balance.empty': 'No records yet', 'admin.balance.filter.all': 'All operations', 'admin.balance.filter.user_id': 'Filter by userId', 'admin.balance.kind.topup': 'Top-up', 'admin.balance.kind.plan_purchase': 'Plan charge', 'admin.balance.kind.admin_topup': 'Admin top-up', 'admin.balance.kind.admin_adjustment': 'Adjustment', 'admin.support.search': 'Search', 'admin.support.all_statuses': 'All statuses', 'admin.support.all_types': 'All types', 'admin.support.none': 'No tickets', 'admin.support.reply': 'Reply', 'admin.support.reply_placeholder': 'Type your reply...', 'admin.support.send_reply': 'Send reply', 'admin.support.cancel': 'Cancel', 'admin.support.close': 'Close', 'admin.support.status.open': 'Open', 'admin.support.status.in_progress': 'In progress', 'admin.support.status.resolved': 'Resolved', 'admin.support.status.closed': 'Closed', 'admin.support.your_reply': 'Your reply', 'admin.user_edit.visibility_requirements.title': 'Profile is not yet visible in Offers', 'admin.user_edit.visibility_requirements.hint': 'Visibility requirements:', 'admin.user_edit.visibility_requirements.bio': 'Fill in bio', 'admin.user_edit.visibility_requirements.published_card': 'Publish at least one card', 'admin.user_edit.visibility_requirements.categories': 'Add a category to a published card', 'admin.user_edit.visibility_requirements.locations': 'Add a location to a published card', 'auto_response.desc': 'Automatically respond to matching tasks', 'auto_response.budget_range': 'Task budget', 'auto_response.message_placeholder': 'Hello! I can help with this task...', 'profile.background.title': 'Profile header background', 'profile.background.hint': 'Shown in the public profile header on web and mobile app.', 'profile.photo.uploading': 'Uploading...', 'profile.balance.history': 'Operation history', 'profile.balance.history.last': 'Latest operations', 'profile.balance.history.empty': 'No operations yet', 'profile.balance.history.balance_after': 'Balance after', 'profile.balance.history.kind.topup': 'Balance top-up', 'profile.balance.history.kind.plan_purchase': 'Plan charge', 'profile.balance.history.kind.admin_topup': 'Admin top-up', 'profile.balance.history.kind.admin_adjustment': 'Admin adjustment', 'profile.plan_history.title': 'Plan history', 'profile.plan_history.empty': 'Plan change history is empty', 'profile.plan_history.expires': 'Until', 'profile.plan_history.days': 'days', 'profile.plan_history.event.activated': 'Activated', 'profile.plan_history.event.renewed': 'Renewed', 'profile.plan_history.event.downgraded': 'Downgraded', 'profile.plan_history.event.referral_reward': 'Referral reward', 'profile.plan_history.event.admin_change': 'Changed by admin', 'profile.plan_history.event.expired': 'Expired', 'profile.show_contact_desc': 'Lets clients contact you directly', 'profile.site.visible.price_list': 'Price list', 'site.pricelist': 'Price list', 'status.plan_required': 'Status is unavailable on your current plan', 'status.admin_not_applicable': 'User status is not applicable to admin accounts' }, ru: { 'footer.slogan': 'Ваша задача — наша забота! Решаем любые вопросы быстро и удобно.', 'footer.links': 'Ссылки', 'footer.socials': 'Мы в соцсетях', 'nav.home': 'Главная', 'nav.tasks': 'Задачи', 'nav.post': '+ Опубликовать', 'nav.dashboard': 'Мои задачи', 'nav.chat': 'Сообщения', 'nav.notifications': 'Уведомления', 'nav.profile': 'Профиль', 'nav.admin': 'Админка', 'nav.specialists': 'Предложения', 'nav.new_task': 'Новая задача', 'nav.login': 'Войти', 'nav.register': 'Регистрация', 'nav.logout': 'Выйти', 'hero.title': 'Каждый человек может чем-то помочь', 'hero.subtitle': 'Найди помощь, предложи свои навыки или зарабатывай, помогая другим', 'hero.cta.post': 'Найти помощь', 'hero.cta.browse': 'Предложить помощь', 'hero.cta.specialists': 'Найти работу', 'hero.search.placeholder': 'Что нужно? напр. электрик, уборка...', 'hero.specialist.title': 'Найдите заказы рядом с вами', 'hero.specialist.subtitle': 'Откройте заказы в своих категориях и отправьте предложение', 'hero.specialist.cta': 'Найти заказы', 'hero.specialist.search.placeholder': 'Поиск заказов... напр. электрика, уборка', 'section.categories.specialist': 'Найдите заказы по категории', 'section.cities.specialist': 'Заказы по городу', 'how.specialist.step1.title': 'Создайте карточку специалиста', 'how.specialist.step1.desc': 'Укажите категории, навыки и районы — система найдёт подходящие заказы автоматически', 'how.specialist.step2.title': 'Найдите подходящие заказы', 'how.specialist.step2.desc': 'Просматривайте заказы в своих категориях и начните работу сразу', 'how.specialist.step3.title': 'Отправьте предложение и зарабатывайте', 'how.specialist.step3.desc': 'Подайте предложение с ценой и сроками, общайтесь с клиентами и выполняйте заказы', 'stats.specialists': 'предложений', 'stats.tasks': 'задач', 'stats.categories': 'категорий', 'stats.free': 'бесплатная регистрация', 'promo.title': 'Получи Pro бесплатно — только до конца года', 'promo.subtitle': 'Зарегистрируйся сейчас и пользуйся тарифом Pro без оплаты. Акция заканчивается 31 декабря.', 'promo.cta': 'Зарегистрироваться', 'promo.days': 'дней', 'promo.hours': 'часов', 'promo.minutes': 'минут', 'promo.seconds': 'сек.', 'section.categories': 'Создай задачу в любой категории', 'section.how': 'Как это работает', 'section.recent': 'Последние задачи', 'section.all': 'Смотреть все →', 'section.more': 'ещё', 'section.cities': 'Города и районы', 'section.community': 'Общественный проект для всех', 'community.subtitle': 'CanHelp — не просто маркетплейс, это сообщество взаимопомощи. Любой, у кого есть знания или навык, может найти клиента. Любой, у кого есть задача, может найти специалиста.', 'community.point1.title': 'Умеете что-то делать?', 'community.point1.desc': 'Ремонт, репетиторство, дизайн, переводы, уход — каждый навык имеет ценность. Создайте профиль и находите клиентов рядом с вами.', 'community.point2.title': 'Нужна помощь?', 'community.point2.desc': 'Опубликуйте задачу за минуту и получайте предложения от проверенных специалистов в вашем городе.', 'community.point3.title': 'Помогите проекту расти', 'community.point3.desc': 'CanHelp развивается благодаря сообществам. Поделитесь ссылкой с друзьями и знакомыми — вместе мы строим что-то полезное для всех.', 'community.share': 'Поделиться с друзьями', 'community.share.copied': 'Ссылка скопирована!', // Referral section on home page 'section.referral': 'Реферальная программа', 'referral.home.subtitle': 'Поделитесь ссылкой — каждый новый пользователь, зарегистрировавшийся по ней, принесёт вам награду.', 'referral.home.step1.title': 'Зарегистрируйтесь и получите ссылку', 'referral.home.step1.desc': 'Создайте аккаунт и найдите свою уникальную реферальную ссылку в профиле.', 'referral.home.step2.title': 'Поделитесь с друзьями', 'referral.home.step2.desc': 'Отправьте ссылку друзьям, знакомым или опубликуйте в социальных сетях.', 'referral.home.step3.title': 'Получайте награды', 'referral.home.step3.desc': 'Как только друг подтвердит email, вы автоматически получите свою награду.', 'referral.home.cta': 'Получить ссылку', 'referral.home.badge': 'Реферальная программа', // FAQ section 'section.faq': 'Частые вопросы', 'faq.q1': 'Как работает CanHelp?', 'faq.a1': 'Опубликуйте задачу, получите предложения от специалистов, выберите лучшего и начните сотрудничество. Это быстро, просто и бесплатно для клиентов.', 'faq.q2': 'Сколько стоит использование платформы?', 'faq.a2': 'Регистрация и публикация задач полностью бесплатны для клиентов. Специалисты имеют доступ к бесплатному плану, а также к премиум-опциям.', 'faq.q3': 'Как стать специалистом?', 'faq.a3': 'Зарегистрируйтесь, перейдите в «Стать специалистом», заполните профиль навыками и категориями и начните получать задачи.', 'faq.q4': 'Как выбрать подходящего специалиста?', 'faq.a4': 'Оцените отзывы, опыт, навыки и портфолио каждого специалиста. Общайтесь через чат платформы и уточняйте детали до принятия решения.', 'faq.q5': 'Что если я не доволен результатом?', 'faq.a5': 'Вы можете оставить отзыв о специалисте и поставить оценку от 1 до 5 звёзд. Отзывы помогают другим пользователям выбирать проверенных профессионалов.', 'faq.q6': 'Можно ли связаться со специалистом до принятия предложения?', 'faq.a6': 'Да. Как только вы получили предложение, можно открыть чат со специалистом, задать вопросы и уточнить все детали до принятия решения.', 'faq.q7': 'Сколько времени ждать предложений?', 'faq.a7': 'Как правило, в течение нескольких часов. Специалисты получают уведомление о новых задачах и могут быстро ответить.', 'faq.q8': 'Можно ли разместить задачу в любом городе Греции?', 'faq.a8': 'Да! CanHelp охватывает всю Грецию — Афины, Фессалоники, Патры и другие города.', 'faq.q9': 'Какие виды задач есть на CanHelp?', 'faq.a9': 'Ремонт, уборка, электрики, репетиторство, дизайн, IT, переезды, красота и многое другое. Категории постоянно расширяются.', 'faq.q10': 'Есть ли мобильное приложение?', 'faq.a10': 'Да! CanHelp доступно для Android и iOS. Скачайте приложение и управляйте всем со своего телефона.', 'how.step1.title': 'Опубликуй задачу', 'how.step1.desc': 'Опиши что нужно и установи бюджет', 'how.step2.title': 'Получи предложения', 'how.step2.desc': 'Специалисты пришлют предложения с ценой и сроками', 'how.step3.title': 'Выбери и начни', 'how.step3.desc': 'Выбери лучшего профессионала и начни сотрудничество', 'tasks.title': 'задач', 'tasks.filters': 'Фильтры', 'tasks.search': 'Поиск', 'tasks.search.placeholder': 'Название или ключевое слово...', 'tasks.search.btn': 'Поиск', 'tasks.publish': 'Опубликовать', 'tasks.category.all': 'Все', 'tasks.category.all_in': 'Все в', 'tasks.category.label': 'Категория', 'tasks.location.label': 'Город', 'tasks.location.placeholder': 'напр. Афины', 'tasks.empty': 'Задачи не найдены', 'tasks.empty.cta': 'Опубликуй первую', 'task.status.open': 'Открыта', 'task.status.in_progress': 'В работе', 'task.status.completed': 'Завершена', 'task.status.cancelled': 'Отменена', 'task.status.draft': 'Черновик', 'task.budget': 'Бюджет', 'task.location': 'Местоположение', 'task.deadline': 'Дата начала', 'task.expires_at': 'Активно до', 'task.created_at': 'Создано', 'task.customer': 'Заказчик', 'task.offer.btn': 'Отправить предложение', 'task.invite.banner_title': 'Вас пригласили на это задание', 'task.invite.banner_hint': 'Заказчик лично пригласил вас', 'task.invite.accept': 'Отправить предложение', 'task.invite.decline': 'Отказаться', 'offer.accept': 'Принять', 'offer.decline': 'Отклонить', 'task.complete': 'Завершить задачу', 'task.complete.confirm': 'Отметить задачу как выполненную?', 'task.edit': 'Редактировать', 'task.status_label': 'Статус', 'task.yours': 'Ваша задача', 'task.offer.yours': 'Ваше предложение', 'review.leave': 'Оставить отзыв', 'review.rating': 'Оценка', 'review.comment': 'Комментарий', 'review.comment.placeholder': 'Расскажите о своём опыте...', 'review.submit': 'Отправить отзыв', 'review.submitting': 'Отправка...', 'review.done': 'Отзыв отправлен!', 'profile.reviews': 'Отзывы', 'profile.no_reviews': 'Отзывов пока нет', 'profile.rating': 'Рейтинг', 'profile.skills.label': 'Навыки', 'profile.member_since': 'Участник с', 'task.offers': 'Предложения', 'task.offers.none': 'Предложений пока нет', 'create.title': 'Опубликовать задачу', 'create.field.title': 'Название', 'create.field.description': 'Описание', 'create.field.category': 'Категория', 'create.field.category.select': 'Выберите...', 'create.field.location': 'Местоположение', 'create.field.location.any': 'Где угодно', 'create.field.location.all': 'Весь город', 'create.field.budget': 'Бюджет (€)', 'create.field.deadline': 'Дата начала', 'create.field.expires_at': 'Объявление активно', 'create.field.expires_at.days': '{n} дней', 'create.field.budget_negotiable': 'Цена обсуждается', 'create.field.time_slot': 'Время выполнения', 'create.field.time_slot.any': 'В любое время', 'create.field.time_slot.morning': 'Утром (08:00–13:00)', 'create.field.time_slot.afternoon': 'Днём (13:00–18:00)', 'create.field.time_slot.evening': 'Вечером (18:00–22:00)', 'create.field.time_slot.weekend': 'Выходной', 'create.field.address': 'Адрес (необязательно)', 'create.field.address.district': 'Квартал', 'create.field.address.street': 'Улица', 'create.field.address.house': 'Дом', 'create.field.confidential': 'Конфиденциальная заметка', 'create.field.confidential.placeholder': 'Детали, видные только назначенному специалисту...', 'create.field.confidential.hint': 'Не отображается публично', 'create.field.photos': 'Фотографии', 'create.field.photos.add': 'Добавить фото', 'create.field.photos.uploading': 'Загрузка...', 'task.budget_negotiable': 'Цена обсуждается', 'task.time_slot': 'Время', 'task.confidential': 'Конфид. заметка', 'create.field.title.placeholder': 'напр. Уборка квартиры 80кв', 'create.field.description.placeholder': 'Подробно опишите что нужно...', 'create.field.location.placeholder': 'напр. Афины, Колонаки', 'create.field.budget.placeholder': 'напр. 100', 'create.submit': 'Опубликовать задачу', 'create.submitting': 'Публикация...', 'login.title': 'Добро пожаловать', 'login.subtitle': 'Вход в CanHelp', 'login.email': 'Email', 'login.password': 'Пароль', 'login.submit': 'Войти', 'login.submitting': 'Вход...', 'login.error': 'Неверный email или пароль', 'login.unverified.title': 'Подтвердите ваш email', 'login.unverified.desc': 'Мы отправили ссылку для подтверждения на ваш email. Проверьте входящие (или спам) и перейдите по ссылке.', 'login.unverified.resend': 'Отправить письмо повторно', 'login.unverified.sending': 'Отправка...', 'login.unverified.sent': '✓ Отправлено — проверьте входящие', 'profile.email.verified': 'Email подтверждён', 'profile.email.not_verified': 'Email не подтверждён', 'login.no_account': 'Нет аккаунта?', 'login.register_link': 'Зарегистрироваться', 'login.forgot_password': 'Забыл пароль?', 'login.or_continue_with': 'или продолжите через', 'login.continue_google': 'Войти через Google', 'forgot.title': 'Забыл пароль', 'forgot.subtitle': 'Введите email для получения ссылки восстановления', 'forgot.email': 'Email', 'forgot.submit': 'Отправить ссылку', 'forgot.submitting': 'Отправка...', 'forgot.sent.title': 'Проверьте входящие', 'forgot.sent.desc': 'Если аккаунт с таким email существует, мы отправим ссылку для сброса пароля.', 'forgot.back_to_login': 'Вернуться ко входу', 'forgot.error': 'Не удалось отправить ссылку. Проверьте адрес и попробуйте снова.', 'forgot.error.not_found': 'Аккаунт с таким email не найден.', 'forgot.error.send_failed': 'Ошибка отправки письма. Попробуйте позже.', 'reset.title': 'Новый пароль', 'reset.subtitle': 'Введите новый пароль', 'reset.password': 'Новый пароль', 'reset.confirm': 'Подтвердите пароль', 'reset.submit': 'Изменить пароль', 'reset.submitting': 'Сохранение...', 'reset.success': 'Пароль успешно изменён. Перенаправление ко входу...', 'reset.back_to_login': 'Вернуться ко входу', 'reset.error.mismatch': 'Пароли не совпадают', 'reset.error.invalid': 'Недействительная или устаревшая ссылка. Запросите новую.', 'register.title': 'Регистрация', 'register.subtitle': 'Создать аккаунт в CanHelp', 'register.first_name': 'Имя', 'register.last_name': 'Фамилия', 'register.email': 'Email', 'register.password': 'Пароль (мин. 8 символов)', 'register.role': 'Роль', 'register.role.customer': 'Пользователь', 'register.role.customer.desc': 'Публикую задачи', 'register.role.specialist': 'Специалист', 'register.role.specialist.desc': 'Беру задачи', 'register.submit': 'Создать аккаунт', 'register.submitting': 'Регистрация...', 'register.has_account': 'Уже есть аккаунт?', 'register.login_link': 'Войти', 'register.continue_google': 'Зарегистрироваться через Google', 'register.check_email.title': 'Проверьте почту', 'register.check_email.desc': 'Мы отправили ссылку для подтверждения на ваш email. Проверьте входящие (или спам) и перейдите по ссылке.', 'register.check_email.login': 'Вернуться к входу', 'register.captcha_failed': 'Проверка CAPTCHA не пройдена. Пройдите проверку безопасности и попробуйте снова.', 'dashboard.title': 'Панель управления', 'dashboard.new_task': '+ Новая задача', 'dashboard.onboarding.title': 'Добро пожаловать в CanHelp 👋', 'dashboard.onboarding.subtitle': 'Выберите, с чего хотите начать.', 'dashboard.onboarding.helper.title': 'Предложите свою помощь', 'dashboard.onboarding.helper.desc': 'Заполните анкету — навыки, категории и города. Это займёт пару минут, и вы начнёте получать заказы.', 'dashboard.onboarding.helper.cta': 'Заполнить анкету', 'dashboard.onboarding.requester.title': 'Нужна помощь?', 'dashboard.onboarding.requester.desc': 'Опубликуйте задачу — помощники пришлют вам свои предложения.', 'dashboard.onboarding.requester.cta': 'Опубликовать задачу', 'dashboard.my_tasks': 'Мои задачи', 'dashboard.my_offers': 'Мои предложения', 'dashboard.invitations': 'Приглашения на задания', 'dashboard.offers_count': 'предл.', 'dashboard.declined_count': 'откл.', 'dashboard.completed_tasks': 'Завершённые задачи', 'dashboard.completed_offers': 'Завершённые предложения', 'dashboard.review_pending': 'Оценка ещё не оставлена', 'tasks.new.top_specialists': 'Топ специалисты', 'tasks.new.select_category': 'Выберите категорию, чтобы увидеть специалистов', 'tasks.new.invite': 'Предложить работу', 'tasks.new.invited': 'Выбран ✓', 'reviews.count': 'отзывов', 'filter.location': 'Локация', 'filter.language': 'Языки', 'filter.language.any': 'Любой язык', 'filter.category.all': 'Все категории', 'user.categories': 'Категории', 'user.work_area': 'Район работы', 'user.specialist_cards': 'Карточки услуг', 'card.skills': 'Навыки', 'card.categories': 'Категории', 'card.geography': 'Район работы', 'card.portfolio': 'Галерея работ', 'card.close': 'Закрыть', 'dashboard.tasks.empty': 'Вы не публиковали задачи', 'dashboard.tasks.empty.cta': 'Опубликуйте первую', 'dashboard.tasks.add_new': 'Добавить новую задачу', 'dashboard.offers.empty': 'Вы не отправляли предложений', 'dashboard.offers.empty.cta': 'Найти задачи', 'dashboard.customer.specialists_title': 'Ищете исполнителя?', 'dashboard.customer.specialists_hint': 'Просматривайте профили специалистов, читайте отзывы и приглашайте их на свои задачи', 'dashboard.customer.specialists_cta': 'Найти исполнителя', 'dashboard.customer.how_title': 'Как это работает', 'dashboard.customer.step1': 'Создайте задачу с описанием и бюджетом', 'dashboard.customer.step2': 'Специалисты пришлют предложения с ценой и сроками', 'dashboard.customer.step3': 'Выберите подходящего и начните работу', 'notif.title': 'Уведомления', 'notif.mark_all': 'Отметить все как прочитанные', 'notif.empty': 'Нет уведомлений', 'notif.type.generic': 'Уведомление', 'notif.type.new_offer': 'Новое предложение', 'notif.type.offer_accepted': 'Ваше предложение принято', 'notif.type.offer_declined': 'Ваше предложение отклонено', 'notif.type.task_completed': 'Задание выполнено', 'notif.type.task_cancelled': 'Задание отменено', 'notif.type.new_message': 'Новое сообщение', 'notif.type.new_review': 'Новый отзыв', 'notif.type.task_invite': 'Приглашение на задание', 'notif.type.referral_reward': 'Реферальная награда', 'notif.type.specialist_card_submitted': 'Карточка отправлена на проверку', 'notif.type.specialist_card_approved': 'Карточка одобрена', 'notif.type.specialist_card_rejected': 'Карточка отклонена', 'notif.body.new_offer': 'Новое предложение на «{title}»', 'notif.body.offer_accepted': 'Ваше предложение на «{title}» принято', 'notif.body.offer_declined': 'Ваше предложение на «{title}» отклонено', 'notif.body.task_invite': 'Вас приглашают на «{title}»', 'notif.body.new_review': 'Вы получили оценку {rating}★', 'notif.body.referral_reward': 'На ваш аккаунт добавлено {days} дней доступа к плану «{plan}»!', 'notif.body.specialist_card_submitted': 'Карточка «{title}» отправлена на проверку', 'notif.body.specialist_card_approved': 'Карточка «{title}» одобрена и опубликована', 'notif.body.specialist_card_rejected': 'Карточка «{title}» не была одобрена. Исправьте её и отправьте снова.', 'offer.status.pending': 'Ожидает', 'offer.status.accepted': 'Принято', 'offer.status.declined': 'Отклонено', 'offer.status.withdrawn': 'Отозвано', 'offer.status.other_accepted': 'Выбран другой исполнитель', 'common.loading': 'Загрузка...', 'common.error': 'Ошибка', 'common.save': 'Сохранить', 'common.saving': 'Сохранение...', 'common.cancel': 'Отмена', 'common.add': 'Добавить', 'common.close': 'Закрыть', 'common.edit': 'Редактировать', 'common.delete': 'Удалить', 'common.from': 'от', 'common.currency': '€', 'common.greece': 'Греция', // Chat 'chat.connected': 'Подключено', 'chat.disconnected': 'Отключено', 'chat.no_rooms': 'Переписок пока нет', 'chat.task_fallback': 'Задача', 'chat.select': 'Выберите переписку', 'chat.no_messages': 'Сообщений пока нет', 'chat.placeholder': 'Напишите сообщение... (Enter для отправки)', 'chat.conversation_fallback': 'Переписка', 'chat.direct_chat': 'Личный чат', 'chat.linked_task': 'Прикреплённый заказ', 'chat.write_btn': 'Написать', 'chat.just_now': 'только что', 'chat.min_ago': 'м', 'chat.write_specialist': 'Написать специалисту', 'chat.write_customer': 'Написать заказчику', 'chat.notif_settings': 'Настройки уведомлений', 'chat.notif_messages': 'Уведомления о новых сообщениях', 'chat.toast_title': 'Новое сообщение', 'chat.toast_open': 'Открыть чат', // Offer form 'offer.price': 'Цена', 'offer.price.placeholder': 'напр. 80', 'offer.customer_budget': 'Бюджет заказчика', 'offer.message': 'Сообщение', 'offer.optional': 'необязательно', 'offer.message.placeholder': 'Представьтесь, расскажите об опыте и почему вы лучший выбор...', 'offer.submitting': 'Отправка...', // Profile 'profile.photo': 'Фото профиля', 'profile.photo.change': 'Изменить фото', 'profile.photo.hint': 'JPEG, PNG, WebP · до 5MB', 'profile.basic_info': 'Основная информация', 'profile.phone': 'Телефон', 'profile.phone.placeholder': '+30 6901234567', 'profile.bio': 'Краткое описание', 'profile.bio.placeholder': 'Расскажите немного о себе...', 'profile.language': 'Язык', 'profile.language.hint': 'Язык интерфейса и email-уведомлений', 'profile.languages': 'Языки общения', 'profile.languages.hint': 'Выберите все языки, на которых вы общаетесь', 'profile.skills': 'Навыки', 'profile.skills.subtitle': 'Добавьте услуги, которые вы предлагаете', 'profile.skills.placeholder': 'напр. Уборка, IT, Репетиторство...', 'profile.role': 'Роль аккаунта', 'profile.role.specialist': '🔧 Помощник', 'profile.role.admin': '👑 Admin', 'profile.role.customer': '👤 Пользователь', 'profile.role.user': '👤 Пользователь', 'profile.role.change': 'Для смены роли обратитесь в службу поддержки.', 'profile.become_specialist': 'Предложить помощь', 'profile.become_specialist.desc': 'Создай профиль помощника, предложи свои навыки и начни получать задачи.', 'become_specialist.hero.title': 'Предложи свои навыки и начни зарабатывать', 'become_specialist.hero.subtitle': 'Создай профиль помощника и получай запросы от людей, которым нужна помощь', 'become_specialist.how.title': 'Как это работает', 'become_specialist.step1.title': 'Создай портфолио специалиста', 'become_specialist.step1.desc': 'Укажи категории, навыки и зону покрытия — система автоматически подберёт подходящие заказы', 'become_specialist.step2.title': 'Ищи заказы', 'become_specialist.step2.desc': 'Просматривай задачи по своим категориям в разделе «Поиск заказов»', 'become_specialist.step3.title': 'Откликайся и зарабатывай', 'become_specialist.step3.desc': 'Отправляй предложения с ценой и сроками, общайся с клиентами и выполняй заказы', 'become_specialist.benefits.title': 'Преимущества профиля специалиста', 'become_specialist.benefit1': 'Поиск заказов по вашим категориям и локации', 'become_specialist.benefit2': 'Публичный профиль с отзывами клиентов', 'become_specialist.benefit3': 'Расписание доступности, видимое клиентам', 'become_specialist.benefit4': 'Добавление в избранное клиентами', 'become_specialist.cta': 'Подробнее', 'become_specialist.free_badge': 'Бесплатная регистрация', 'profile.tab.notifications': 'Уведомления', 'profile.tab.reviews': 'Отзывы', 'profile.tab.referral': 'Рефералы', 'profile.tab.auto_response': 'Авто-ответ', 'profile.tab.site': 'Сайт', 'profile.site.title': 'Персональная страница', 'profile.site.url_label': 'Личный сайт', 'profile.site.copy': 'Копировать', 'profile.site.copied': 'Скопировано', 'profile.site.visible_title': 'Что отображается на вашей странице', 'profile.site.visible.name': 'Имя и фото', 'profile.site.visible.bio': 'Биография', 'profile.site.visible.rating': 'Рейтинг и отзывы', 'profile.site.visible.portfolio': 'Портфолио / Карточки', 'profile.site.visible.contacts': 'Контактные данные', 'profile.site.visible.full_last_name': 'Фамилия полностью', 'profile.site.visible.services': 'Карточки услуг', 'profile.site.visible.reviews': 'Раздел с отзывами', 'profile.site.visible.status': 'Статус «Готов помочь»', 'profile.site.theme': 'Тема оформления', 'profile.site.theme.dark': 'Тёмная', 'profile.site.theme.light': 'Светлая', 'profile.site.slug_taken': 'Этот адрес уже занят', 'profile.site.stats.title': 'Аналитика сайта', 'profile.site.stats.days': 'последние 30 дней', 'profile.site.stats.views': 'Просмотры', 'profile.site.stats.unique': 'Уникальные посетители', 'profile.site.stats.messages': 'Сообщения', 'profile.site.stats.total_views': 'Просмотры', 'profile.site.stats.total_unique': 'Уник. посетители', 'profile.site.stats.total_messages': 'Сообщения', 'profile.site.stats.empty': 'Данных пока нет', 'profile.site.stats.loading': 'Загрузка аналитики...', 'profile.site.stats.no_slug': 'Укажите адрес сайта, чтобы видеть статистику', 'profile.site.edit_bio_hint': 'Биография и фото настраиваются во вкладке «Основное».', 'profile.site.seo.title': 'SEO — мета-данные сайта', 'profile.site.seo.hint': 'Отображается в поисковиках. При сохранении автоматически переводится на все языки.', 'profile.site.seo.site_title': 'Заголовок страницы', 'profile.site.seo.site_title_placeholder': 'Иван Иванов — Электрик в Афинах', 'profile.site.seo.site_desc': 'Мета-описание', 'profile.site.seo.site_desc_placeholder': 'Краткое описание для поисковиков...', 'status.title': 'Статус', 'status.can_help_now_hint': 'Ваша карточка показывается выше в поиске', 'status.need_help_hint': 'Специалисты могут предложить вам помощь', 'profile.referral.title': 'Партнёрская программа', 'profile.referral.desc': 'Поделитесь ссылкой и получайте награду за каждого привлечённого пользователя.', 'profile.referral.link_label': 'Ваша реферальная ссылка', 'profile.referral.copy': 'Копировать', 'profile.referral.copied': 'Скопировано!', 'profile.referral.invited_count': 'успешных приглашений', 'profile.referral.no_code': 'Реферальный код недоступен.', 'notifications.title': 'Настройки уведомлений', 'notifications.email.new_tasks': 'Email о новых заказах', 'notifications.email.new_tasks.desc': 'Получать email, когда в ваших категориях публикуется новый заказ', 'notifications.messages.desc': 'Получать уведомление при новом входящем сообщении', 'notifications.saved': 'Настройки сохранены', 'notifications.plan_required': 'Недоступно в вашем тарифе', 'profile.tab.info': 'Основное', 'profile.tab.finance': 'Финансы', 'profile.tab.skills': 'Навыки', 'profile.tab.categories': 'Категории', 'profile.tab.geography': 'География', 'profile.specialist.categories': 'Категории работ', 'profile.specialist.categories.desc': 'Выберите категории, в которых вы работаете', 'profile.specialist.geography': 'Города покрытия', 'profile.specialist.geography.desc': 'Выберите города / районы, где вы работаете', 'profile.saving': 'Сохранение...', 'profile.upload.error': 'Ошибка загрузки фото', 'profile.saved': 'Сохранено', 'profile.tab.cards': 'Предложения', 'profile.cards.count': 'Предложения', 'profile.cards.add': 'Добавить предложение', 'profile.cards.new_title': 'Название нового предложения', 'profile.cards.placeholder': 'Например: Сантехника', 'profile.cards.create': 'Создать', 'profile.cards.cancel': 'Отмена', 'profile.cards.empty': 'У вас нет предложений', 'profile.cards.empty_hint': 'Создайте первую карточку, чтобы показать услуги клиентам.', 'profile.cards.create_first': 'Создать первое предложение', 'profile.cards.delete_confirm': 'Удалить предложение?', 'profile.background.change': 'Изменить фон', 'profile.background.remove': 'Удалить фон', 'profile.listing_requirements.published_card': 'Опубликуйте хотя бы одну карточку', 'profile.listing_requirements.title': 'Ваш профиль пока не показывается в разделе «Предложения»', 'profile.listing_requirements.hint': 'Чтобы карточка отображалась, выполните условия:', 'profile.listing_requirements.bio': 'Добавьте краткую информацию о себе в «Основное»', 'profile.listing_requirements.categories': 'Укажите хотя бы одну категорию в активной карточке', 'profile.listing_requirements.locations': 'Укажите хотя бы одну локацию в активной карточке', 'profile.listing_requirements.card_inactive': 'Сделайте карточку активной', 'profile.listing_requirements.review_pending': 'Карточка на рассмотрении', 'profile.card.visibility_issue': 'Карточка не отображается в разделе «Предложения»', 'profile.card.tab.main': 'Основное', 'profile.card.tab.skills': 'Навыки', 'profile.card.tab.categories': 'Категории', 'profile.card.tab.geography': 'География', 'profile.card.tab.portfolio': 'Галерея', 'profile.card.tab.pricelist': 'Прайс-лист', 'profile.card.pricelist.empty': 'Группы прайс-листа ещё не добавлены.', 'profile.card.pricelist.add_group': 'Добавить группу', 'profile.card.pricelist.group_title': 'Название группы', 'profile.card.pricelist.add_item': 'Добавить позицию', 'profile.card.pricelist.item_name': 'Услуга / работа', 'profile.card.pricelist.item_desc': 'Описание (необязательно)', 'profile.card.pricelist.item_price': 'Цена', 'profile.card.pricelist.item_unit': 'Единица (например /час)', 'profile.card.pricelist.save_group': 'Сохранить группу', 'profile.card.pricelist.save_item': 'Сохранить', 'profile.card.pricelist.delete_group': 'Удалить группу', 'profile.card.pricelist.delete_item': 'Удалить', 'profile.card.active': 'Активна', 'profile.card.review_pending': 'На рассмотрении', 'profile.card.review_pending_hint': 'Ваша карточка сейчас проверяется администрацией.', 'profile.card.review_submitted': 'Карточка отправлена на проверку', 'profile.card.review_approved': 'Карточка одобрена', 'profile.card.review_approved_hint': 'Ваша карточка теперь отображается в предложениях.', 'profile.card.review_rejected': 'Карточка отклонена', 'profile.card.review_rejected_hint': 'Карточка не была одобрена. Исправьте её и отправьте снова.', 'profile.card.submit_review': 'Отправить на рассмотрение', 'profile.card.withdraw_review': 'Отозвать заявку', 'profile.card.unpublish': 'Снять с публикации', 'profile.card.save': 'Сохранить', 'profile.card.saved': 'Сохранено', 'profile.card.delete': 'Удалить', 'profile.card.skill.add': 'Добавить навык', 'profile.card.photo.add': 'Добавить фото', 'profile.card.photo.uploading': 'Загрузка...', 'profile.card.photo.empty': 'Нет фотографий', 'profile.card.item.title': 'Заголовок', 'profile.card.item.desc': 'Описание', 'profile.card.item.save': 'Сохранить', 'profile.card.item.cancel': 'Отмена', 'profile.card.item.edit': 'Описание работы', 'profile.card.description': 'Описание карточки', 'profile.card.desc_auto_translate': 'При сохранении будет автоматически переведено на другие языки', 'profile.card.desc_translated': 'Есть переводы:', 'profile.upgrade.cards_limit': 'Лимит портфолио исчерпан', 'profile.upgrade.plan': 'Текущий тариф:', 'profile.upgrade.contact': 'Обратитесь к администратору для смены тарифа', 'profile.upgrade.ok': 'Понятно', 'profile.plan.title': 'Тарифный план', 'profile.balance': 'Баланс', 'profile.balance.topup': 'Пополнить баланс', 'profile.balance.topup.title': 'Пополнить баланс', 'profile.balance.topup.amount': 'Сумма (в EUR)', 'profile.balance.topup.hint': 'Выберите сумму или введите вручную', 'profile.balance.topup.submit': 'Перейти к оплате', 'profile.balance.topup.loading': 'Перенаправление...', 'profile.balance.topup.error': 'Ошибка инициализации платежа. Попробуйте снова.', 'payment.success.title': 'Оплата прошла успешно!', 'payment.success.desc': 'Ваш баланс обновлён.', 'payment.cancelled.title': 'Оплата отменена', 'payment.cancelled.desc': 'Оплата была отменена. Средства не списаны.', 'payment.pending.title': 'Обрабатывается...', 'payment.pending.desc': 'Ваш платёж в обработке.', 'payment.back_to_profile': 'Вернуться в профиль', 'profile.plan.basic': 'Базовый (бесплатный)', 'profile.plan.contact_upgrade': 'Обратитесь к администратору для подключения тарифа', 'profile.plan.cards_up_to': 'Портфолио: до', 'profile.plan.cards_unlimited': 'Портфолио: безлимитно', 'profile.plan.tasks_up_to': 'Задач: до', 'profile.plan.offers_up_to': 'Откликов: до', 'profile.plan.valid_until': 'Действителен до', 'profile.plan.no_expiry': 'Бессрочно', // Create task 'create.error': 'Ошибка при публикации', // Tasks list extras 'tasks.category.general': 'Общее', 'tasks.budget.range': 'Диапазон:', 'tasks.budget.from': 'от', 'tasks.budget.to': 'до', 'tasks.filter.reset': 'Сбросить фильтры', 'tasks.load_more': 'Загрузить ещё', 'tasks.showing': 'Результатов:', 'tasks.field.budget': 'Бюджет, €', // Admin 'admin.title': 'Панель администратора', 'admin.tab.stats': 'Статистика', 'admin.tab.users': 'Пользователи', 'admin.tab.tasks': 'Задачи', 'admin.tab.reports': 'Жалобы', 'admin.tab.moderation': 'Модерация', 'admin.stats.users': 'Пользователи', 'admin.stats.tasks': 'Задачи', 'admin.stats.offers': 'Предложения', 'admin.stats.reviews': 'Отзывы', 'admin.tasks.by_status': 'Задачи по статусу', 'admin.col.user': 'Пользователь', 'admin.col.email': 'Email', 'admin.col.role': 'Роль', 'admin.col.registered': 'Регистрация', 'admin.col.status': 'Статус', 'admin.col.title': 'Название', 'admin.col.budget': 'Бюджет', 'admin.col.created': 'Создано', 'admin.users.active': 'Активен', 'admin.users.inactive': 'Неактивен', 'admin.users.deactivate': 'Деактивировать', 'admin.users.activate': 'Активировать', 'admin.tasks.cancel': 'Отменить', 'admin.reports.none': 'Жалоб нет', 'admin.moderation.none': 'Нет предложений для проверки', 'admin.moderation.pending': 'В ожидании', 'admin.moderation.active': 'Активно', 'admin.moderation.approve': 'Одобрить', 'admin.moderation.block': 'Заблокировать', 'admin.moderation.pending_title': 'Предложения на одобрение', 'admin.moderation.active_title': 'Активные предложения', 'admin.moderation.pending_count': 'В ожидании', 'admin.moderation.active_count': 'Активные', 'admin.moderation.pending_hint': 'Новые предложения, ожидающие проверки', 'admin.moderation.active_hint': 'Активные предложения, которые можно заблокировать', 'admin.moderation.pending_empty': 'Новых предложений для одобрения нет', 'admin.moderation.active_empty': 'Активных предложений не найдено', 'admin.reports.reviewed': 'Рассмотрено', 'admin.reports.dismiss': 'Отклонить', 'admin.pagination.total': 'Всего', 'admin.users.role.change': 'Изменить роль', 'admin.users.search.placeholder': 'Поиск по имени или email...', 'admin.tasks.delete': 'Удалить', 'admin.tasks.delete.confirm': 'Удалить эту задачу навсегда?', 'admin.tasks.search.placeholder': 'Поиск по названию...', 'admin.col.customer': 'Заказчик', 'admin.col.reporter': 'Жалобщик', 'admin.col.target': 'Цель', 'admin.filter.all_roles': 'Все роли', 'admin.filter.all_statuses': 'Все статусы', 'admin.reports.target.task': 'Задача', 'admin.reports.target.user': 'Пользователь', 'admin.tab.categories': 'Категории', 'admin.tab.locations': 'Города и районы', 'admin.tab.logs': 'Логи', 'admin.tab.plans': 'Тарифы', 'admin.tab.settings': 'Настройки', 'admin.logs.subtab.ai': 'AI логи', 'admin.logs.subtab.activity': 'Активность', 'admin.logs.subtab.mail': 'Mail', 'admin.logs.subtab.notifications': 'Уведомления', 'admin.notif_logs.type': 'Тип', 'admin.notif_logs.title': 'Заголовок', 'admin.notif_logs.read': 'Прочитано', 'admin.notif_logs.empty': 'Логи уведомлений пусты', 'admin.stats.notif_chart_title': 'Уведомления по дням', 'admin.stats.notif_label': 'Уведомления', 'admin.stats.mail_chart_title': 'Email по дням', 'admin.stats.mail_label': 'Emails', 'admin.filter.all': 'Все', 'admin.stats.specialists': 'Помощники', 'admin.col.plan': 'Тариф', 'admin.back_home': 'На главную', 'admin.plans.title': 'Тарифные пакеты', 'admin.plans.add': '+ Добавить тариф', 'admin.plans.empty': 'Тарифы не созданы', 'admin.plans.form.new': 'Новый тариф', 'admin.plans.form.edit': 'Редактировать тариф', 'admin.plans.form.name': 'Название', 'admin.plans.form.price': 'Цена (EUR)', 'admin.plans.form.old_price': 'Старая цена (EUR, необязательно)', 'admin.plans.form.max_offers': 'Макс. откликов (пусто = без лимита)', 'admin.plans.form.max_cards': 'Макс. предложений (пусто = без лимита)', 'admin.plans.form.duration_days': 'Срок (дней, пусто = без истечения)', 'admin.plans.form.description': 'Описание', 'admin.plans.form.features': 'Возможности (по одной на строку)', 'admin.plans.form.notify': 'Уведомления о новых заказах', 'admin.plans.form.default': 'По умолчанию', 'admin.plans.form.active': 'Активен', 'admin.plans.form.order': 'Порядок', 'admin.plans.form.role': 'Роль', 'admin.plans.form.tier': 'Уровень', 'admin.plans.form.role.customer': 'Заказчик', 'admin.plans.form.role.specialist': 'Помощник', 'admin.plans.form.tier.free': 'Бесплатный', 'admin.plans.form.tier.pro': 'Pro', 'admin.plans.form.tier.ultimate': 'Ultimate', 'admin.plans.form.section.limits': 'Лимиты (пусто = без ограничений)', 'admin.plans.form.max_messages_day': 'Макс. сообщений/день', 'admin.plans.form.max_orders_day': 'Макс. заказов/день', 'admin.plans.form.max_skills': 'Макс. навыков', 'admin.plans.form.max_profiles': 'Макс. профилей', 'admin.plans.form.max_portfolio': 'Макс. элементов портфолио', 'admin.plans.form.section.boost': 'Множители & Буст', 'admin.plans.form.search_boost': 'Буст в поиске', 'admin.plans.form.offers_multiplier': 'Множитель откликов', 'admin.plans.form.section.contact': 'Права контактов', 'admin.plans.form.can_contact_free': 'Контакт с бесплатными пользователями', 'admin.plans.form.can_contact_pro': 'Контакт с Pro пользователями', 'admin.plans.form.can_contact_all': 'Контакт со всеми', 'admin.plans.form.can_show_contact': 'Показывать контакты', 'admin.plans.form.can_view_phone': 'Просмотр телефона', 'admin.plans.form.section.features': 'Возможности', 'admin.plans.form.upload_video': 'Загрузка видео', 'admin.plans.form.favorites': 'Избранное', 'admin.plans.form.google_calendar': 'Google Calendar', 'admin.plans.form.verified_badge': 'Знак верификации', 'admin.plans.form.highlighted_reviews': 'Выделенные отзывы', 'admin.plans.form.personal_site': 'Личный сайт', 'admin.plans.form.can_help_now': 'Статус «Могу помочь»', 'admin.plans.form.need_help': 'Статус «Нужна помощь»', 'admin.plans.form.auto_response': 'Автоответ', 'admin.plans.form.auto_match': 'Автоподбор', 'admin.plans.form.price_list': 'Прайс-лист', 'admin.plans.form.instant_dispatch_free': 'Мгновенная рассылка (бесплатно)', 'admin.plans.form.instant_dispatch_pro': 'Мгновенная рассылка (Pro)', 'admin.plans.badge.default': 'По умолчанию', 'admin.plans.badge.inactive': 'Неактивен', 'admin.plans.make_default': 'Сделать по умолчанию', 'admin.plans.tasks': 'Задач', 'admin.plans.offers': 'Откликов', 'admin.plans.cards': 'Предложения', 'admin.plans.notify_tasks': 'Уведомления о заказах', 'admin.plans.delete.confirm': 'Удалить тариф', 'admin.activity.title': 'Журнал активности', 'admin.activity.event': 'Событие', 'admin.activity.all_events': 'Все события', 'admin.activity.from': 'От', 'admin.activity.to': 'До', 'admin.activity.reset': 'Сбросить', 'admin.activity.total': 'Всего', 'admin.activity.empty': 'Нет записей', 'admin.mail.event': 'Email событие', 'admin.mail.all_events': 'Все email события', 'admin.mail.from': 'От', 'admin.mail.to': 'До', 'admin.mail.reset': 'Сбросить', 'admin.mail.total': 'Всего', 'admin.mail.empty': 'Нет email логов', 'admin.mail.recipient': 'Получатель', 'admin.mail.provider': 'Провайдер', 'admin.mail.details': 'Детали', 'admin.mail.status': 'Статус', 'admin.mail.success': 'Успешно', 'admin.mail.failed': 'Ошибка', 'admin.event.email_sent': 'Email отправлен', 'admin.event.email_failed': 'Email не отправлен', 'admin.event.email_dev': 'Email DEV fallback', 'admin.event.admin_email_test_sent': 'Тестовый email отправлен', 'admin.event.admin_email_test_failed': 'Тестовый email не отправлен', 'admin.logs.empty': 'Нет записей', 'admin.logs.date': 'Дата', 'admin.logs.provider': 'Провайдер', 'admin.logs.model': 'Модель', 'admin.logs.action': 'Действие', 'admin.logs.langs': 'Языки', 'admin.logs.in': 'Вход', 'admin.logs.out': 'Выход', 'admin.logs.total': 'Итого', 'admin.logs.ms': 'мс', 'admin.logs.status': 'Статус', 'admin.stats.activity_30d': 'Активность за 30 дней', 'admin.stats.tasks_label': 'Заявки', 'admin.stats.users_label': 'Пользователи', 'admin.stats.specialists_label': 'Помощники', 'admin.stats.tokens_title': 'Расход токенов (по месяцам)', 'admin.stats.tokens_out': 'Исходящие', 'admin.stats.tokens_in': 'Входящие', 'admin.stats.tokens_out_label': 'Исходящие токены', 'admin.stats.tokens_in_label': 'Входящие токены', 'admin.stats.cost_label': 'Стоимость (USD)', 'admin.stats.tasks_by_status': 'Заявки по статусам', 'admin.task_status.open': 'Открытые', 'admin.task_status.in_progress': 'В работе', 'admin.task_status.completed': 'Завершённые', 'admin.task_status.cancelled': 'Отменённые', 'admin.task_status.draft': 'Черновики', 'admin.settings.tab.general': 'Общие', 'admin.settings.tab.smtp': 'E-Mail', 'admin.settings.tab.notifications': 'Уведомления', 'admin.settings.tab.payment': 'Оплата', 'admin.settings.tab.referral': 'Реферальная', 'admin.settings.tab.seo': 'SEO', 'admin.settings.tab.socials': 'Соцсети', 'admin.settings.tab.telegram': 'Telegram Bot', 'admin.settings.telegram.title': 'Настройки Telegram Bot', 'admin.settings.telegram.help': 'Создайте бота через @BotFather. ID чата узнайте через @userinfobot.', 'admin.settings.telegram.bot_token': 'Bot Token', 'admin.settings.telegram.admin_chat_id': 'Chat ID администратора', 'admin.settings.telegram.admin_chat_hint': 'Сначала отправьте /start своему боту, затем узнайте chat ID через @userinfobot', 'admin.settings.telegram.channel_id': 'неиспользуется', 'admin.settings.telegram.channels_title': 'Каналы по языкам', 'admin.settings.telegram.channel_hint': 'Username публичного канала (@канал) или числовой ID', 'admin.settings.telegram.notify_registrations': 'Уведомлять о новых регистрациях', 'admin.settings.telegram.notify_registrations_hint': 'Отправлять сообщение при регистрации нового пользователя', 'admin.settings.telegram.post_new_tasks': 'Публиковать новые задания в канал', 'admin.settings.telegram.post_new_tasks_hint': 'Автоматически публиковать новые задания в Telegram-канал', 'admin.settings.telegram.test': 'Тест', 'admin.settings.telegram.verify': 'Проверить токен', 'admin.settings.telegram.test_ok': 'Соединение работает', 'admin.settings.telegram.test_fail': 'Ошибка соединения', 'admin.settings.socials.title': 'Ссылки на социальные сети', 'admin.settings.socials.hint': 'Заполненные ссылки отображаются в подвале сайта', 'admin.settings.seo.maintenance_label': 'Режим обслуживания', 'admin.settings.seo.maintenance_hint': 'Показывать страницу обслуживания всем посетителям', 'admin.settings.seo.indexing_label': 'Индексация поисковыми системами', 'admin.settings.seo.indexing_hint': 'Разрешить поисковым системам индексировать сайт', 'admin.settings.seo.head_scripts_label': 'Скрипты в (JS)', 'admin.settings.seo.head_scripts_hint': 'Выполняется на каждой странице (Google Tag Manager, аналитика и т.д.)', 'admin.settings.seo.site_title_label': 'Заголовок сайта', 'admin.settings.seo.site_description_label': 'Описание сайта (meta description)', 'admin.settings.referral.title': 'Партнёрская программа', 'admin.settings.referral.hint': 'Награждайте пользователей, приводящих новых участников.', 'admin.settings.referral.enabled_label': 'Включено', 'admin.settings.referral.enabled_hint': 'Включить / отключить выдачу наград', 'admin.settings.referral.customer_section': 'Для клиентов', 'admin.settings.referral.specialist_section': 'Для помощников', 'admin.settings.referral.plan_label': 'Тарифный план за реферала', 'admin.settings.referral.no_plan': '— без плана —', 'admin.settings.referral.plan_hint': 'Этот план будет назначен пригласившему. Если его текущий план выше — добавятся только дни.', 'admin.settings.referral.days_label': 'Дней награды', 'admin.settings.referral.days_hint': 'Количество дней, добавляемых к сроку действия плана.', 'admin.settings.general.title': 'Общие настройки', 'admin.settings.general.site_name': 'Название сайта', 'admin.settings.general.site_url': 'URL сайта', 'admin.settings.general.contact_email': 'Email для связи', 'admin.settings.general.support_phone': 'Телефон поддержки', 'admin.settings.smtp.title': 'Настройки SMTP сервера', 'admin.settings.smtp.hint': 'Используется для отправки email-уведомлений.', 'admin.settings.smtp.host': 'SMTP Хост', 'admin.settings.smtp.port': 'Порт', 'admin.settings.smtp.encryption': 'Шифрование', 'admin.settings.smtp.enc.none': 'Нет', 'admin.settings.smtp.enc.tls': 'STARTTLS (порт 587)', 'admin.settings.smtp.enc.ssl': 'SSL/TLS (порт 465)', 'admin.settings.smtp.username': 'Имя пользователя', 'admin.settings.smtp.password': 'Пароль / App Password', 'admin.settings.smtp.from_name': 'Имя отправителя', 'admin.settings.smtp.from_email': 'Email отправителя', 'admin.settings.smtp.test': 'Отправить тестовый email', 'admin.settings.smtp.sending': 'Отправка...', 'admin.settings.payment.hint': 'Данные для подключения к ePay Piraeus Bank.', 'admin.settings.env.test': 'Тест (sandbox)', 'admin.settings.env.prod': 'Боевой режим', 'admin.settings.env.label': 'Среда', 'admin.settings.merchant_id': 'Merchant ID', 'admin.settings.api_user': 'API User', 'admin.settings.api_password': 'API Password', 'admin.settings.confirm_url': 'Confirmation URL (webhook)', 'admin.settings.cancel_url': 'Cancel URL', 'admin.settings.active': 'Активен', 'admin.settings.saving': 'Сохранение...', 'admin.settings.saved': 'Сохранено', 'admin.notif.vars_hint': 'Доступные переменные в шаблонах', 'admin.notif.tmpl.not_set': 'Шаблон не настроен', 'admin.notif.tmpl.subject_label': 'Тема письма', 'admin.notif.tmpl.body_label': 'Текст письма (HTML)', 'admin.notif.tmpl.save': 'Сохранить', 'admin.notif.tmpl.close': 'Закрыть', 'admin.notif.tmpl.translate': 'Авто-перевод на другие языки', 'admin.notif.tmpl.translating': 'Перевод...', 'admin.notif.tmpl.saving': 'Сохранение...', 'admin.notif.email_verification': 'Подтверждение email адреса', 'admin.notif.registration_success': 'Успешная регистрация', 'admin.notif.password_reset': 'Восстановление пароля', 'admin.notif.new_offer': 'Новое предложение', 'admin.notif.new_task': 'Новая задача', 'admin.notif.offer_accepted': 'Предложение принято', 'admin.notif.new_message': 'Новое сообщение', 'admin.notif.offer_declined': 'Отклонение предложения', 'admin.notif.offer_other_accepted': 'Выбран другой исполнитель', 'admin.notif.task_updated': 'Изменение задания', 'admin.notif.deadline_reminder': 'Напоминание о дедлайне', 'admin.notif.task_archived': 'Автоснятие задания', 'admin.notif.referral_reward': 'Реферальная награда', // Шаблоны email для тарифов 'admin.email_template.plan_activated': 'Тарифы — активация тарифа', 'admin.email_template.plan_upgraded': 'Тарифы — повышение тарифа', 'admin.email_template.plan_downgrade_scheduled': 'Тарифы — запланированное понижение', 'admin.email_template.plan_downgrade_applied': 'Тарифы — применение понижения', 'admin.email_template.plan_renewal_reminder': 'Тарифы — напоминание о продлении', 'admin.email_template.plan_insufficient_funds': 'Тарифы — нехватка средств', // Модальное окно подтверждения тарифа 'pricing.confirm.title': 'Подтвердите выбор тарифа', 'pricing.confirm.plan': 'Тариф', 'pricing.confirm.prorated': 'Зачёт остатка', 'pricing.confirm.effective_price': 'К оплате', 'pricing.confirm.your_balance': 'Ваш баланс', 'pricing.confirm.downgrade_info': 'Переход на новый тариф произойдёт автоматически после окончания текущего периода.', 'pricing.confirm.insufficient': 'Недостаточно средств на балансе.', 'pricing.confirm.top_up': 'Пополнить', 'pricing.confirm.schedule_downgrade': 'Запланировать переход', 'pricing.confirm.pay': 'Оплатить', 'admin.user_edit.title': 'Редактирование пользователя', 'admin.user_edit.email': 'Email', 'admin.user_edit.email_verified': 'Email подтверждён', 'admin.user_edit.email_not_verified': 'Email не подтверждён', 'admin.user_edit.verify_email_btn': 'Подтвердить вручную', 'admin.user_edit.verify_email_done': 'Email подтверждён!', 'admin.user_edit.id': 'ID', 'admin.user_edit.registered': 'Регистрация', 'admin.user_edit.last_seen': 'Последний визит', 'admin.user_edit.lang': 'Язык', 'admin.user_edit.first_name': 'Имя', 'admin.user_edit.last_name': 'Фамилия', 'admin.user_edit.phone': 'Телефон', 'admin.user_edit.bio': 'О себе', 'admin.user_edit.role': 'Роль', 'admin.user_edit.plan': 'Тариф', 'admin.user_edit.no_plan': '— Без тарифа —', 'admin.user_edit.active': 'Активный аккаунт', 'admin.user_edit.published': 'Опубликована', 'admin.user_edit.balance': 'Баланс (EUR)', 'admin.user_edit.skills': 'Навыки', 'admin.user_edit.tab.profile': 'Профиль', 'admin.user_edit.tab.account': 'Аккаунт', 'admin.user_edit.tab.balance': 'Баланс', 'admin.user_edit.tab.settings': 'Настройки', 'admin.user_edit.tab.specialist': 'Предложения', 'admin.user_edit.tab.site': 'Сайт', 'admin.user_edit.plan_expires': 'Тариф истекает', 'admin.user_edit.interface_lang': 'Язык интерфейса', 'admin.user_edit.comm_languages': 'Языки общения', 'admin.user_edit.personal_site_slug': 'Персональная страница', 'admin.user_edit.show_contact_info': 'Показывать контакты', 'admin.user_edit.show_contact_info.hint': 'Видно заказчикам', 'admin.user_edit.notify_new_tasks': 'Уведомлять о новых задачах', 'admin.user_edit.notify_new_tasks.hint': 'Push и email уведомления', 'admin.user_edit.notif_messages': 'Уведомления о сообщениях', 'admin.user_edit.notif_messages.hint': 'Новые сообщения в чате', 'admin.user_edit.site_settings': 'Настройки персональной страницы', 'admin.user_edit.categories': 'Категории услуг', 'admin.user_edit.locations': 'Районы обслуживания', 'admin.user_edit.skill_placeholder': 'Новый навык...', 'admin.user_edit.add_category': '— Выберите категорию —', 'admin.user_edit.add_location': '— Выберите район —', 'admin.user_edit.specialist_cards': 'Предложения специалиста', 'admin.user_edit.no_cards': 'Предложения не найдены', 'admin.user_edit.card_title': 'Заголовок предложения', 'admin.user_edit.card_description': 'Описание', 'admin.balance.topup.btn': 'Пополнить', 'admin.balance.withdraw.btn': 'Списать', 'admin.balance.modal_hint': 'Изменения применяются сразу и фиксируются в истории', 'admin.balance.topup.title': 'Пополнение баланса', 'admin.balance.topup.amount': 'Сумма', 'admin.balance.topup.description': 'Комментарий', 'admin.balance.topup.description.placeholder': 'Например: бонус или ручное пополнение', 'admin.balance.topup.submit': 'Пополнить баланс', 'admin.balance.withdraw.title': 'Снятие баланса', 'admin.balance.withdraw.amount': 'Сумма', 'admin.balance.withdraw.description': 'Комментарий', 'admin.balance.withdraw.description.placeholder': 'Например: возврат или ручное списание', 'admin.balance.withdraw.submit': 'Списать баланс', 'admin.user_edit.role.customer': 'Заказчик', 'admin.user_edit.role.user': 'Пользователь', 'admin.user_edit.role.specialist': 'Помощник', 'admin.user_edit.role.admin': 'Администратор', 'common.refresh': 'Обновить', 'common.back_home': 'На главную', 'admin.loc.hint': 'Управление городами и районами', 'admin.loc.add_city': 'Новый город', 'admin.loc.add_district': 'Добавить район', 'admin.loc.new': 'Новая локация', 'admin.loc.edit': 'Редактировать локацию', 'admin.loc.district': 'район', 'admin.loc.empty': 'Нет локаций', 'admin.loc.delete.confirm': 'Удалить локацию? Все районы также будут удалены.', 'admin.cat.add_root': 'Новая категория', 'admin.cat.add_sub': 'Подкатегория', 'admin.cat.edit': 'Редактировать', 'admin.cat.delete': 'Удалить', 'admin.cat.delete.confirm': 'Удалить категорию? Все подкатегории также будут удалены.', 'admin.cat.slug': 'Slug', 'admin.cat.icon': 'Иконка', 'admin.cat.name_el': 'Греческий', 'admin.cat.name_en': 'Английский', 'admin.cat.name_ru': 'Русский', 'admin.cat.name_uk': 'Украинский', 'admin.cat.active': 'Активна', 'admin.cat.parent': 'Родительская категория', 'admin.cat.no_parent': 'Верхний уровень', 'admin.cat.save': 'Сохранить', 'admin.cat.cancel': 'Отмена', 'admin.cat.empty': 'Нет категорий', 'admin.cat.hint': 'Управление категориями с многоуровневой иерархией', 'admin.cat.new': 'Новая категория', 'admin.cat.subcategory': 'подкатегория', 'admin.cat.add_child': 'Добавить подкатегорию', 'admin.cat.inactive': 'Неактивна', 'admin.event.user_login': 'Вход', 'admin.event.user_register': 'Регистрация', 'admin.event.admin_user_deactivate': 'Блокировка юзера', 'admin.event.admin_user_activate': 'Разблокировка юзера', 'admin.event.admin_user_role_changed': 'Смена роли', 'admin.event.admin_task_cancelled': 'Отмена задачи', 'admin.event.admin_task_deleted': 'Удаление задачи', 'admin.event.admin_report_reviewed': 'Жалоба рассмотрена', 'admin.event.admin_report_dismissed': 'Жалоба отклонена', 'admin.event.task_created': 'Создана задача', // User status 'user.online': 'Онлайн', 'user.seen_minutes': 'был здесь {n} мин назад', 'user.seen_hours': 'был здесь {n} ч назад', 'user.seen_yesterday': 'был здесь вчера', 'user.seen_days': 'был здесь {n} дн назад', // Specialists 'specialists.title': 'Предложения', 'specialists.search': 'Поиск специалиста...', 'specialists.search.btn': 'Поиск', 'specialists.empty': 'Специалисты не найдены', 'specialists.no_bio': 'Без описания', 'specialists.view': 'Смотреть профиль', 'specialists.reviews': 'отзывов', 'specialist.favorite': 'Добавить в избранное', 'specialist.unfavorite': 'Убрать из избранного', 'specialist.site_link': 'Личный сайт', 'favorites.specialists.title': 'Избранные специалисты', 'favorites.specialists.empty': 'Вы ещё не добавили специалистов в избранное', 'nav.favorites': 'Избранное', 'nav.schedule': 'Расписание', 'nav.find_tasks': 'Поиск заказов', 'schedule.title': 'Моё расписание', 'schedule.subtitle': 'Отмечайте дни когда вы свободны или заняты — заказчики увидят вашу доступность', 'schedule.available': 'Свободен', 'schedule.busy': 'Занят', 'schedule.unset': 'Не указано', 'schedule.click_hint': '← клик меняет статус по кругу', 'schedule.range_mode': 'Выделить диапазон', 'schedule.range_from': 'С {date} — выберите конечную дату', 'schedule.click_to_set': 'Нажмите чтобы отметить', 'schedule.free': 'свободно', 'schedule.busy_count': 'занято', 'schedule.free_days': 'свободных дней', 'schedule.googleCalendar': 'Google Календарь', 'schedule.connectGoogle': 'Подключить Google Календарь', 'schedule.disconnectGoogle': 'Отключить', 'schedule.connectedAs': 'Подключено как', 'schedule.importFromGoogle': 'Синхр. из Google', 'schedule.gcalConnected': '\u2713 Google Календарь подключён', 'schedule.gcalError': 'Ошибка подключения Google Календарь', 'schedule.gcalImportDone': 'Импортировано {n} дней из Google Календарь', 'schedule.gcalAutoSyncNote': 'Изменения доступности автоматически отправляются в Google Календарь', 'schedule.gcalConnectDesc': 'Подключите Google Календарь для автоматической синхронизации расписания', 'schedule.gcalDisconnectConfirm': 'Отключить Google Календарь?', 'find_tasks.title': 'Поиск заказов', 'find_tasks.for_me': 'Для меня', 'find_tasks.all': 'Все заказы', 'find_tasks.by_category': 'По категориям', 'find_tasks.list': 'Списком', 'find_tasks.already_offered': 'Предложение отправлено', 'find_tasks.offer_now': 'Откликнуться', 'find_tasks.empty_for_me': 'Нет заказов в ваших категориях', 'find_tasks.banner_hint': 'Найдите заказы по категориям вашего портфолио', 'find_tasks.no_cards': 'Создайте портфолио специалиста, чтобы видеть подходящие заказы', 'find_tasks.add_card': 'Создать портфолио', 'find_tasks.search': 'Поиск заказов...', 'find_tasks.tasks_count': 'заданий', 'footer.tagline': 'Платформа задач для Греции', 'footer.rights': 'Все права защищены.', 'nav.privacy': 'Политика конфиденциальности', 'nav.delete_account': 'Удаление аккаунта', 'delete_account.title': 'Запрос на удаление аккаунта', 'delete_account.subtitle': 'После проверки вашего запроса мы навсегда удалим ваш аккаунт и данные в течение 30 дней.', 'delete_account.warning': 'Это действие нельзя отменить. Все ваши данные будут удалены безвозвратно.', 'delete_account.reason_label': 'Причина (необязательно)', 'delete_account.reason_placeholder': 'Расскажите, почему вы хотите удалить аккаунт...', 'delete_account.confirm_label': 'Подтверждаю, что хочу навсегда удалить свой аккаунт', 'delete_account.submit': 'Отправить запрос', 'delete_account.submitting': 'Отправка...', 'delete_account.success_title': 'Ваш запрос получен', 'delete_account.success_body': 'Мы обработаем ваш запрос в течение 30 дней и уведомим вас по email.', 'delete_account.login_required': 'Для отправки запроса на удаление необходимо войти в аккаунт.', 'delete_account.login_btn': 'Войти', // App download section 'app.download_title': 'Скачайте мобильное приложение CanHelp', 'app.download_desc': 'Всё CanHelp — всегда под рукой. Доступно для Android и iOS.', // Nav 'nav.pricing': 'Тарифы', // Pricing page 'pricing.title': 'Тарифы', 'pricing.subtitle': 'Выберите подходящий план', 'pricing.role.customer': 'Заказчик', 'pricing.role.specialist': 'Специалист', 'pricing.free': 'Бесплатно', 'pricing.per_month': 'мес', 'pricing.duration': 'Срок', 'pricing.days': 'дн.', 'pricing.current_plan': 'Ваш план', 'pricing.popular': 'Популярный', 'pricing.choose': 'Выбрать', 'pricing.your_plan': 'Активный план', 'pricing.free_default': 'По умолчанию', 'pricing.compare': 'Сравнение функций', 'pricing.feature': 'Функция', 'pricing.faq_note': 'Оплата списывается с баланса CanHelp. Пополнение доступно в разделе Оплата.', 'pricing.feat.messages': 'Сообщений / день', 'pricing.feat.orders': 'Заказов / день', 'pricing.feat.contact_all': 'Связь со всеми', 'pricing.feat.view_phone': 'Просмотр телефона', 'pricing.feat.show_contact': 'Показывать контакты', 'pricing.feat.favorites': 'Избранное', 'pricing.feat.verified_badge': 'Верифицированный бейдж', 'pricing.feat.google_calendar': 'Google Календарь', 'pricing.feat.personal_site': 'Персональный сайт', 'pricing.feat.auto_response': 'Авто-ответ', 'pricing.feat.auto_match': 'Авто-подбор', 'pricing.feat.highlighted_reviews': 'Выделенные отзывы', 'pricing.feat.portfolio': 'Элементов предложения', 'pricing.feat.cards': 'Количество предложений', 'pricing.feat.notify_tasks': 'Уведомления о новых задачах', 'pricing.feat.video': 'Видео в предложении', // Upgrade prompt 'upgrade.available_in': 'Доступно в', 'upgrade.cta': 'Улучшить', // Dashboard plan block 'dashboard.plan.title': 'Мой план', 'dashboard.plan.expires': 'Истекает через {n} дней', 'dashboard.plan.upgrade': 'Улучшить план', 'dashboard.plan.no_plan': 'Бесплатный план', 'dashboard.plan.messages': 'Сообщений сегодня', 'dashboard.plan.orders': 'Заказов сегодня', 'dashboard.plan.limits': 'Дневные лимиты', 'dashboard.plan.features': 'Функции', 'dashboard.plan.stats': 'Статистика', 'dashboard.stats.cards': 'Портфолио', 'dashboard.stats.maxCards': 'Макс. портфолио', 'dashboard.stats.portfolioItems': 'Элементы портфолио', 'dashboard.stats.maxPortfolioItems': 'Макс. элементы', 'dashboard.stats.activeOffers': 'Активные отклики', 'dashboard.stats.reviewsReceived': 'Отзывы', 'dashboard.stats.activeTasks': 'Активные задачи', 'dashboard.stats.completedTasks': 'Завершённые', 'status.need_help': 'Нужна помощь', 'status.active': 'Активен', 'status.toggle_on': 'Включить', 'status.toggle_off': 'Выключить', // FOMO 'fomo.missed_orders': 'Пропущено {n} заказов', 'fomo.missed_value': 'На сумму €{v}', 'fomo.upgrade_hint': 'Улучшите план — получайте больше заказов', 'fomo.conversion': 'Конверсия задач', 'fomo.active': 'Активные', 'fomo.with_offers': 'С офертами', 'fomo.completed': 'Завершённые', 'fomo.already_offered': '{n} специалистов уже откликнулись', 'fomo.specialist_missed': 'Вы пропустили {n} заказов', 'fomo.top_categories': 'Категории', 'fomo.offers_received': 'предложений получено', 'fomo.avg_offers': 'В среднем {n}/задача', 'fomo.completion_rate': 'завершено', // Task auto-match 'task.auto_match': 'Авто-матч', 'task.auto_match_results': 'Топ специалисты', 'task.no_offer_yet': 'Вы ещё не отправили предложение', 'task.make_offer': 'Отправить предложение', 'auto_response.title': 'Авто-ответ', 'auto_response.enabled': 'Включить авто-ответ', 'auto_response.min_budget': 'Мин. бюджет', 'auto_response.max_budget': 'Макс. бюджет', 'auto_response.default_price': 'Цена по умолчанию', 'auto_response.default_message': 'Сообщение по умолчанию', 'auto_response.max_per_day': 'Макс. авто-офертов в день', 'auto_response.save': 'Сохранить', 'auto_response.saved': 'Сохранено', 'auto_response.categories': 'Категории', 'auto_response.locations': 'Локации', // Personal site 'profile.personal_site': 'Персональный сайт', 'profile.site_slug': 'URL slug', 'profile.site_slug_hint': 'Только латинские буквы, цифры, - и _', 'profile.site_open': 'Открыть сайт', 'profile.site_preview': 'Ваш сайт', 'profile.show_contact': 'Показывать контакты', 'profile.show_contact_hint': 'Заказчики с Pro/Ultimate-планом увидят ваш телефон', // Google Calendar plan gate 'gcal.upgrade_required': 'Google Календарь требует план Pro или Ultimate', // Chat limits 'chat.limit_warning': 'Осталось {n} сообщений сегодня', 'chat.limit_reached': 'Лимит сообщений исчерпан. Улучшите план', 'chat.upgrade': 'Улучшить', // Site page 'site.member_since': 'С нами с', 'site.rating': 'Рейтинг', 'site.completed_tasks': 'Выполнено', 'site.languages': 'Языков', 'site.photos': 'фото', 'site.contact_form': 'Связаться', 'site.contact_sent': 'Сообщение отправлено!', 'site.contact_sent_desc': 'Специалист свяжется с вами в ближайшее время', 'site.contact_name': 'Имя', 'site.contact_name_ph': 'Ваше имя', 'site.contact_email_ph': 'your@email.com', 'site.contact_message': 'Сообщение', 'site.contact_message_ph': 'Опишите вашу задачу...', 'site.contact_send': 'Отправить', 'site.share': 'Поделиться', 'site.speaks_languages': 'Говорит на языках', 'site.message_sent': 'Сообщение отправлено!', 'site.message_sent_desc': 'Специалист получит его в чате', 'site.message_placeholder': 'Напишите сообщение...', 'site.write_to_chat': 'Написать в чат', 'site.auth_required_title': 'Нужна авторизация', 'site.auth_required_desc': 'Чтобы написать в чат, необходимо войти в аккаунт CanHelp.', 'site.auth_login_btn': 'Войти в аккаунт', 'site.auth_contact_form_btn': 'Написать через форму обратной связи', 'specialist.services': 'Услуги', 'portfolio.title': 'Портфолио', 'status.can_help_now': 'Готов помочь', 'common.not_found': 'Страница не найдена', 'common.anonymous': 'Анонимно', 'specialist_setup.page_title': 'Настройка профиля специалиста', 'specialist_setup.step_of': 'Шаг {current} из {total}', 'specialist_setup.next': 'Далее', 'specialist_setup.back': 'Назад', 'specialist_setup.skip': 'Пропустить', 'specialist_setup.finish': 'Завершить', 'specialist_setup.go_to_profile': 'Перейти в профиль', 'specialist_setup.browse_tasks': 'Найти задачи', 'specialist_setup.step1.title': 'Добро пожаловать!', 'specialist_setup.step1.subtitle': 'Давайте настроим ваш профиль', 'specialist_setup.step1.desc': 'Полный профиль помогает находить больше клиентов. Следуйте шагам, чтобы создать идеальный профиль специалиста.', 'specialist_setup.step1.what_next': 'Что мы сделаем:', 'specialist_setup.step1.item1': 'Заполним основную информацию', 'specialist_setup.step1.item2': 'Создадим карточку услуги', 'specialist_setup.step1.item3': 'Добавим навыки и категории', 'specialist_setup.step1.item4': 'Выберем географию обслуживания', 'specialist_setup.step1.item5': 'Загрузим фото портфолио', 'specialist_setup.step2.title': 'Базовый профиль', 'specialist_setup.step2.subtitle': 'Расскажите о себе', 'specialist_setup.step2.bio_label': 'О себе', 'specialist_setup.step2.bio_placeholder': 'Опишите ваш опыт, услуги которые вы предлагаете...', 'specialist_setup.step2.phone_label': 'Телефон', 'specialist_setup.step2.phone_placeholder': '+30 6900000000', 'specialist_setup.step2.photo_label': 'Фото профиля', 'specialist_setup.step2.photo_btn': 'Загрузить фото', 'specialist_setup.step2.photo_uploading': 'Загрузка...', 'specialist_setup.step2.photo_hint': 'Отображается в вашем профиле', 'specialist_setup.step3.title': 'Карточка услуги', 'specialist_setup.step3.subtitle': 'Создайте вашу первую карточку услуги', 'specialist_setup.step3.title_label': 'Название карточки', 'specialist_setup.step3.title_placeholder': 'Напр. Сантехник, Электрик, Уборка...', 'specialist_setup.step3.desc_label': 'Описание', 'specialist_setup.step3.desc_placeholder': 'Подробно опишите что вы предлагаете, опыт, преимущества...', 'specialist_setup.step3.title_required': 'Название обязательно', 'specialist_setup.step4.title': 'Навыки и категории', 'specialist_setup.step4.subtitle': 'Добавьте навыки и выберите категории', 'specialist_setup.step4.skills_label': 'Навыки', 'specialist_setup.step4.skills_placeholder': 'Напр. Монтаж труб...', 'specialist_setup.step4.skills_add': 'Добавить', 'specialist_setup.step4.categories_label': 'Категории', 'specialist_setup.step5.title': 'География обслуживания', 'specialist_setup.step5.subtitle': 'Где вы оказываете услуги?', 'specialist_setup.step5.hint': 'Выберите города или конкретные районы', 'specialist_setup.done.title': 'Ваш профиль готов!', 'specialist_setup.done.subtitle': 'Поздравляем! Профиль настроен', 'specialist_setup.done.desc': 'Теперь вы можете получать заказы от клиентов. Найдите задачи, которые соответствуют вашим навыкам.', // Support 'support.title': 'Поддержка', 'support.type.label': 'Тип обращения', 'support.type.bug': 'Ошибка', 'support.type.suggestion': 'Предложение', 'support.type.other': 'Другое', 'support.subject': 'Тема', 'support.subject.placeholder': 'Кратко опишите проблему...', 'support.body': 'Сообщение', 'support.body.placeholder': 'Подробно опишите проблему или предложение...', 'support.submit': 'Отправить', 'support.cancel': 'Отмена', 'support.error': 'Ошибка отправки. Попробуйте ещё раз.', 'support.sent.title': 'Запрос получен!', 'support.sent.body': 'Мы ответим на ваш email в ближайшее время.', 'support.sent.close': 'Закрыть', 'admin.tab.support': 'Поддержка', 'admin.tab.backup': 'Бэкап', 'admin.tab.translations': 'Переводы', 'admin.tab.dbcheck': 'Проверка БД', 'admin.tab.balances': 'Баланс', 'admin.tab.push': 'Push', 'admin.tab.referrals': 'Рефералы', 'admin.search': 'Поиск', 'admin.noData': 'Нет данных', 'admin.cat.order': 'Порядок', 'admin.cat.skills': 'Навыки', 'admin.plans.form.max_tasks': 'Макс. задач', 'admin.settings.referral.shared_section': 'Общие настройки рефералов', 'admin.settings.seo.title': 'SEO настройки', 'admin.backup.title': 'Бэкап', 'admin.backup.tables': 'Таблицы', 'admin.backup.exportAll': 'Экспорт всего', 'admin.backup.importAll': 'Импорт всего', 'admin.backup.exportTable': 'Экспорт таблицы', 'admin.backup.importTable': 'Импорт таблицы', 'admin.backup.exporting': 'Экспорт...', 'admin.backup.importing': 'Импорт...', 'admin.backup.exportSuccess': 'Экспорт завершён', 'admin.backup.importSuccess': 'Импорт завершён', 'admin.backup.autoBackup': 'Автобэкап', 'admin.backup.autoBackupDesc': 'Автоматический ежедневный бэкап', 'admin.backup.storedBackups': 'Сохранённые бэкапы', 'admin.backup.noStoredBackups': 'Сохранённых бэкапов нет', 'admin.backup.restore': 'Восстановить', 'admin.backup.restoreConfirm': 'Восстановить из бэкапа?', 'admin.backup.restoreSuccess': 'Восстановление завершено', 'admin.backup.restoring': 'Восстановление...', 'admin.backup.date': 'Дата', 'admin.backup.size': 'Размер', 'admin.backup.today': 'Сегодня', 'admin.backup.yesterday': 'Вчера', 'admin.balance.col.operation': 'Операция', 'admin.balance.col.amount': 'Сумма', 'admin.balance.col.result': 'Баланс', 'admin.balance.col.description': 'Описание', 'admin.balance.col.date': 'Дата', 'admin.balance.empty': 'Записей пока нет', 'admin.balance.filter.all': 'Все операции', 'admin.balance.filter.user_id': 'Фильтр по userId', 'admin.balance.kind.topup': 'Пополнение', 'admin.balance.kind.plan_purchase': 'Списание за тариф', 'admin.balance.kind.admin_topup': 'Пополнение админом', 'admin.balance.kind.admin_adjustment': 'Корректировка', 'admin.support.search': 'Поиск', 'admin.support.all_statuses': 'Все статусы', 'admin.support.all_types': 'Все типы', 'admin.support.none': 'Обращений нет', 'admin.support.reply': 'Ответить', 'admin.support.reply_placeholder': 'Введите ответ...', 'admin.support.send_reply': 'Отправить ответ', 'admin.support.cancel': 'Отмена', 'admin.support.close': 'Закрыть', 'admin.support.status.open': 'Открыто', 'admin.support.status.in_progress': 'В работе', 'admin.support.status.resolved': 'Решено', 'admin.support.status.closed': 'Закрыто', 'admin.support.your_reply': 'Ваш ответ', 'admin.user_edit.visibility_requirements.title': 'Профиль пока не попадает в «Предложения»', 'admin.user_edit.visibility_requirements.hint': 'Нужно выполнить условия видимости:', 'admin.user_edit.visibility_requirements.bio': 'Заполнить описание (bio)', 'admin.user_edit.visibility_requirements.published_card': 'Опубликовать хотя бы одну карточку', 'admin.user_edit.visibility_requirements.categories': 'Указать категорию в опубликованной карточке', 'admin.user_edit.visibility_requirements.locations': 'Указать локацию в опубликованной карточке', 'auto_response.desc': 'Автоматически отвечать на подходящие задачи', 'auto_response.budget_range': 'Бюджет задачи', 'auto_response.message_placeholder': 'Здравствуйте! Я могу помочь с этой задачей...', 'profile.background.title': 'Фон шапки профиля', 'profile.background.hint': 'Показывается в шапке публичного профиля на web и в мобильном приложении.', 'profile.photo.uploading': 'Загрузка...', 'profile.balance.history': 'Архив операций', 'profile.balance.history.last': 'Последние операции', 'profile.balance.history.empty': 'Операций пока нет', 'profile.balance.history.balance_after': 'Баланс после', 'profile.balance.history.kind.topup': 'Пополнение баланса', 'profile.balance.history.kind.plan_purchase': 'Списание за тариф', 'profile.balance.history.kind.admin_topup': 'Пополнение администратором', 'profile.balance.history.kind.admin_adjustment': 'Корректировка администратором', 'profile.plan_history.title': 'История тарифного плана', 'profile.plan_history.empty': 'История изменений тарифа пока пуста', 'profile.plan_history.expires': 'До', 'profile.plan_history.days': 'дней', 'profile.plan_history.event.activated': 'Активирован', 'profile.plan_history.event.renewed': 'Продлён', 'profile.plan_history.event.downgraded': 'Понижен', 'profile.plan_history.event.referral_reward': 'Реферальная награда', 'profile.plan_history.event.admin_change': 'Изменён администратором', 'profile.plan_history.event.expired': 'Истёк', 'profile.show_contact_desc': 'Позволяет клиентам связаться напрямую', 'profile.site.visible.price_list': 'Прайслист', 'site.pricelist': 'Прайслист', 'status.plan_required': 'Статус недоступен на текущем тарифе', 'status.admin_not_applicable': 'Для аккаунта администратора пользовательский статус не применяется' }, uk: { 'footer.slogan': 'Ваше завдання — наша турбота! Вирішуємо будь-які питання швидко і зручно.', 'footer.links': 'Посилання', 'footer.socials': 'Ми в соцмережах', 'nav.home': 'Головна', 'nav.tasks': 'Завдання', 'nav.post': '+ Опублікувати', 'nav.dashboard': 'Мої завдання', 'nav.chat': 'Повідомлення', 'nav.notifications': 'Сповіщення', 'nav.profile': 'Профіль', 'nav.admin': 'Адмінка', 'nav.specialists': 'Пропозиції', 'nav.new_task': 'Нове завдання', 'nav.login': 'Увійти', 'nav.register': 'Реєстрація', 'nav.logout': 'Вийти', 'hero.title': 'Кожен має навичку, яка може допомогти іншому', 'hero.subtitle': 'Знайди допомогу, запропонуй свої навички або заробляй, допомагаючи іншим', 'hero.cta.post': 'Знайти допомогу', 'hero.cta.browse': 'Запропонувати допомогу', 'hero.cta.specialists': 'Знайти роботу', 'hero.search.placeholder': 'Що потрібно? напр. електрик, прибирання...', 'hero.specialist.title': 'Знайдіть замовлення поруч з вами', 'hero.specialist.subtitle': 'Відкрийте замовлення у своїх категоріях і надішліть пропозицію', 'hero.specialist.cta': 'Знайти замовлення', 'hero.specialist.search.placeholder': 'Пошук замовлень... напр. електрика, прибирання', 'section.categories.specialist': 'Знайдіть замовлення за категорією', 'section.cities.specialist': 'Замовлення за містом', 'how.specialist.step1.title': 'Створіть картку спеціаліста', 'how.specialist.step1.desc': 'Вкажіть категорії, навички і райони — система знайде підходящі замовлення автоматично', 'how.specialist.step2.title': 'Знайдіть підходящі замовлення', 'how.specialist.step2.desc': 'Переглядайте замовлення у своїх категоріях і починайте роботу одразу', 'how.specialist.step3.title': 'Надішліть пропозицію і заробляйте', 'how.specialist.step3.desc': 'Подайте пропозицію з ціною і термінами, спілкуйтеся з клієнтами і виконуйте замовлення', 'stats.specialists': 'пропозиції', 'stats.tasks': 'завдань', 'stats.categories': 'категорій', 'stats.free': 'безкоштовна реєстрація', 'promo.title': 'Отримай Pro безкоштовно — тільки до кінця року', 'promo.subtitle': 'Зареєструйся зараз і користуйся тарифом Pro без оплати. Акція закінчується 31 грудня.', 'promo.cta': 'Зареєструватися', 'promo.days': 'днів', 'promo.hours': 'годин', 'promo.minutes': 'хвилин', 'promo.seconds': 'сек.', 'section.categories': 'Створи завдання у будь-якій категорії', 'section.how': 'Як це працює', 'section.recent': 'Останні завдання', 'section.all': 'Дивитись всі →', 'section.more': 'ще', 'section.cities': 'Міста і райони', 'section.community': 'Суспільний проект для всіх', 'community.subtitle': 'CanHelp — не просто маркетплейс, це спільнота взаємодопомоги. Будь-хто, хто має знання або навичку, може знайти клієнта. Будь-хто, у кого є завдання, може знайти спеціаліста.', 'community.point1.title': 'Вмієте щось робити?', 'community.point1.desc': 'Ремонт, репетиторство, дизайн, переклади, догляд — кожна навичка має цінність. Створіть профіль і знаходьте клієнтів поруч.', 'community.point2.title': 'Потрібна допомога?', 'community.point2.desc': 'Опублікуйте завдання за хвилину і отримуйте пропозиції від перевірених спеціалістів у вашому місті.', 'community.point3.title': 'Допоможіть проекту рости', 'community.point3.desc': 'CanHelp розвивається завдяки спільнотам. Поділіться посиланням з друзями і знайомими — разом ми будуємо щось корисне для всіх.', 'community.share': 'Поділитися з друзями', 'community.share.copied': 'Посилання скопійовано!', 'section.referral': 'Реферальна програма', 'referral.home.subtitle': 'Поділіться посиланням — кожен новий користувач, зареєстрований через нього, принесе вам нагороду.', 'referral.home.step1.title': 'Зареєструйтесь і отримайте посилання', 'referral.home.step1.desc': 'Створіть акаунт і знайдіть своє унікальне реферальне посилання в профілі.', 'referral.home.step2.title': 'Поділіться з друзями', 'referral.home.step2.desc': 'Надішліть посилання друзям, знайомим або опублікуйте в соціальних мережах.', 'referral.home.step3.title': 'Отримуйте нагороди', 'referral.home.step3.desc': 'Як тільки друг підтвердить email, ви автоматично отримаєте свою нагороду.', 'referral.home.cta': 'Отримати посилання', 'referral.home.badge': 'Реферальна програма', 'section.faq': 'Часті запитання', 'faq.q1': 'Як працює CanHelp?', 'faq.a1': 'Опублікуйте завдання, отримайте пропозиції від спеціалістів, виберіть найкращого і почніть співпрацю. Це швидко, просто і безкоштовно для клієнтів.', 'faq.q2': 'Скільки коштує використання платформи?', 'faq.a2': 'Реєстрація і публікація завдань повністю безкоштовні для клієнтів. Спеціалісти мають доступ до безкоштовного плану, а також до преміум-опцій.', 'faq.q3': 'Як стати спеціалістом?', 'faq.a3': 'Зареєструйтесь, перейдіть у «Стати спеціалістом», заповніть профіль навичками і категоріями і починайте отримувати завдання.', 'faq.q4': 'Як вибрати підходящого спеціаліста?', 'faq.a4': 'Оцініть відгуки, досвід, навички і портфоліо кожного спеціаліста. Спілкуйтеся через чат платформи і уточнюйте деталі до прийняття рішення.', 'faq.q5': 'Що якщо я не задоволений результатом?', 'faq.a5': 'Ви можете залишити відгук про спеціаліста і поставити оцінку від 1 до 5 зірок. Відгуки допомагають іншим користувачам вибирати перевірених професіоналів.', 'faq.q6': 'Чи можна зв\'язатись зі спеціалістом до прийняття пропозиції?', 'faq.a6': 'Так. Як тільки ви отримали пропозицію, можна відкрити чат зі спеціалістом, задати питання і уточнити всі деталі до прийняття рішення.', 'faq.q7': 'Скільки часу чекати пропозицій?', 'faq.a7': 'Як правило, протягом кількох годин. Спеціалісти отримують сповіщення про нові завдання і можуть швидко відповісти.', 'faq.q8': 'Чи можна розмістити завдання у будь-якому місті Греції?', 'faq.a8': 'Так! CanHelp охоплює всю Грецію — Афіни, Салоніки, Патри та інші міста.', 'faq.q9': 'Які види завдань є на CanHelp?', 'faq.a9': 'Ремонт, прибирання, електрика, репетиторство, дизайн, IT, переїзди, краса та багато іншого. Категорії постійно розширюються.', 'faq.q10': 'Чи є мобільний додаток?', 'faq.a10': 'Так! CanHelp доступний для Android та iOS. Завантажте додаток і керуйте всім зі свого телефону.', 'how.step1.title': 'Опублікуй завдання', 'how.step1.desc': 'Опиши що потрібно і встанови бюджет', 'how.step2.title': 'Отримай пропозиції', 'how.step2.desc': 'Спеціалісти надішлють пропозиції з ціною і термінами', 'how.step3.title': 'Обери і почни', 'how.step3.desc': 'Обери найкращого професіонала і почни співпрацю', 'tasks.title': 'завдань', 'tasks.filters': 'Фільтри', 'tasks.search': 'Пошук', 'tasks.search.placeholder': 'Назва або ключове слово...', 'tasks.search.btn': 'Пошук', 'tasks.publish': 'Опублікувати', 'tasks.category.all': 'Всі', 'tasks.category.all_in': 'Всі в', 'tasks.category.label': 'Категорія', 'tasks.location.label': 'Місто', 'tasks.location.placeholder': 'напр. Афіни', 'tasks.empty': 'Завдань не знайдено', 'tasks.empty.cta': 'Опублікуй перше', 'task.status.open': 'Відкрито', 'task.status.in_progress': 'В роботі', 'task.status.completed': 'Завершено', 'task.status.cancelled': 'Скасовано', 'task.status.draft': 'Чернетка', 'task.budget': 'Бюджет', 'task.location': 'Місцезнаходження', 'task.deadline': 'Дата початку', 'task.expires_at': 'Активно до', 'task.created_at': 'Створено', 'task.customer': 'Замовник', 'task.offer.btn': 'Надіслати пропозицію', 'task.invite.banner_title': 'Вас запросили на це завдання', 'task.invite.banner_hint': 'Замовник особисто запросив вас', 'task.invite.accept': 'Надіслати пропозицію', 'task.invite.decline': 'Відмовитися', 'offer.accept': 'Прийняти', 'offer.decline': 'Відхилити', 'task.complete': 'Завершити завдання', 'task.complete.confirm': 'Позначити завдання як виконане?', 'task.edit': 'Редагувати', 'task.status_label': 'Статус', 'task.yours': 'Ваше завдання', 'task.offer.yours': 'Ваша пропозиція', 'review.leave': 'Залишити відгук', 'review.rating': 'Оцінка', 'review.comment': 'Коментар', 'review.comment.placeholder': 'Розкажіть про свій досвід...', 'review.submit': 'Надіслати відгук', 'review.submitting': 'Надсилання...', 'review.done': 'Відгук надіслано!', 'profile.reviews': 'Відгуки', 'profile.no_reviews': 'Відгуків поки немає', 'profile.rating': 'Рейтинг', 'profile.skills.label': 'Навички', 'profile.member_since': 'Учасник з', 'task.offers': 'Пропозиції', 'task.offers.none': 'Пропозицій поки немає', 'create.title': 'Опублікувати завдання', 'create.field.title': 'Назва', 'create.field.description': 'Опис', 'create.field.category': 'Категорія', 'create.field.category.select': 'Оберіть...', 'create.field.location': 'Місцезнаходження', 'create.field.location.any': 'Де завгодно', 'create.field.location.all': 'Все місто', 'create.field.budget': 'Бюджет (€)', 'create.field.deadline': 'Дата початку', 'create.field.expires_at': 'Оголошення активне', 'create.field.expires_at.days': '{n} днів', 'create.field.budget_negotiable': 'Ціна обговорюється', 'create.field.time_slot': 'Час виконання', 'create.field.time_slot.any': 'У будь-який час', 'create.field.time_slot.morning': 'Вранці (08:00–13:00)', 'create.field.time_slot.afternoon': 'Вдень (13:00–18:00)', 'create.field.time_slot.evening': 'Ввечері (18:00–22:00)', 'create.field.time_slot.weekend': 'Вихідний', 'create.field.address': 'Адреса (необов\'язково)', 'create.field.address.district': 'Квартал', 'create.field.address.street': 'Вулиця', 'create.field.address.house': 'Будинок', 'create.field.confidential': 'Конфіденційна нотатка', 'create.field.confidential.placeholder': 'Деталі, видні тільки призначеному спеціалісту...', 'create.field.confidential.hint': 'Не відображається публічно', 'create.field.photos': 'Фотографії', 'create.field.photos.add': 'Додати фото', 'create.field.photos.uploading': 'Завантаження...', 'task.budget_negotiable': 'Ціна обговорюється', 'task.time_slot': 'Час', 'task.confidential': 'Конфід. нотатка', 'create.field.title.placeholder': 'напр. Прибирання квартири 80кв', 'create.field.description.placeholder': 'Детально опишіть що потрібно...', 'create.field.location.placeholder': 'напр. Афіни, Колонаки', 'create.field.budget.placeholder': 'напр. 100', 'create.submit': 'Опублікувати завдання', 'create.submitting': 'Публікація...', 'login.title': 'Ласкаво просимо', 'login.subtitle': 'Вхід до CanHelp', 'login.email': 'Email', 'login.password': 'Пароль', 'login.submit': 'Увійти', 'login.submitting': 'Вхід...', 'login.error': 'Невірний email або пароль', 'login.unverified.title': 'Підтвердіть ваш email', 'login.unverified.desc': 'Ми надіслали посилання для підтвердження на ваш email. Перевірте вхідні (або спам) і перейдіть за посиланням.', 'login.unverified.resend': 'Надіслати лист повторно', 'login.unverified.sending': 'Надсилання...', 'login.unverified.sent': '✓ Надіслано — перевірте вхідні', 'profile.email.verified': 'Email підтверджено', 'profile.email.not_verified': 'Email не підтверджено', 'login.no_account': 'Немає акаунту?', 'login.register_link': 'Зареєструватися', 'login.forgot_password': 'Забув пароль?', 'login.or_continue_with': 'або продовжте через', 'login.continue_google': 'Увійти через Google', 'forgot.title': 'Забув пароль', 'forgot.subtitle': 'Введіть email для отримання посилання відновлення', 'forgot.email': 'Email', 'forgot.submit': 'Надіслати посилання', 'forgot.submitting': 'Надсилання...', 'forgot.sent.title': 'Перевірте вхідні', 'forgot.sent.desc': 'Якщо акаунт з таким email існує, ми надішлемо посилання для скидання пароля.', 'forgot.back_to_login': 'Повернутися до входу', 'forgot.error': 'Не вдалося надіслати посилання. Перевірте адресу і спробуйте знову.', 'forgot.error.not_found': 'Акаунт з таким email не знайдено.', 'forgot.error.send_failed': 'Помилка надсилання листа. Спробуйте пізніше.', 'reset.title': 'Новий пароль', 'reset.subtitle': 'Введіть новий пароль', 'reset.password': 'Новий пароль', 'reset.confirm': 'Підтвердіть пароль', 'reset.submit': 'Змінити пароль', 'reset.submitting': 'Збереження...', 'reset.success': 'Пароль успішно змінено. Перенаправлення до входу...', 'reset.back_to_login': 'Повернутися до входу', 'reset.error.mismatch': 'Паролі не збігаються', 'reset.error.invalid': 'Недійсне або застаріле посилання. Запросіть нове.', 'register.title': 'Реєстрація', 'register.subtitle': 'Створити акаунт в CanHelp', 'register.first_name': 'Ім\'я', 'register.last_name': 'Прізвище', 'register.email': 'Email', 'register.password': 'Пароль (мін. 8 символів)', 'register.role': 'Роль', 'register.role.customer': 'Користувач', 'register.role.customer.desc': 'Публікую завдання', 'register.role.specialist': 'Спеціаліст', 'register.role.specialist.desc': 'Беру завдання', 'register.submit': 'Створити акаунт', 'register.submitting': 'Реєстрація...', 'register.has_account': 'Вже є акаунт?', 'register.login_link': 'Увійти', 'register.continue_google': 'Зареєструватися через Google', 'register.check_email.title': 'Перевірте пошту', 'register.check_email.desc': 'Ми надіслали посилання для підтвердження на ваш email. Перевірте вхідні (або спам) і перейдіть за посиланням.', 'register.check_email.login': 'Повернутися до входу', 'register.captcha_failed': 'Перевірка CAPTCHA не пройдена. Пройдіть перевірку безпеки та спробуйте знову.', 'dashboard.title': 'Панель управління', 'dashboard.new_task': '+ Нове завдання', 'dashboard.onboarding.title': 'Ласкаво просимо до CanHelp 👋', 'dashboard.onboarding.subtitle': 'Оберіть, з чого хочете почати.', 'dashboard.onboarding.helper.title': 'Запропонуйте свою допомогу', 'dashboard.onboarding.helper.desc': 'Заповніть анкету — навички, категорії та міста. Це займе кілька хвилин, і ви почнете отримувати замовлення.', 'dashboard.onboarding.helper.cta': 'Заповнити анкету', 'dashboard.onboarding.requester.title': 'Потрібна допомога?', 'dashboard.onboarding.requester.desc': 'Опублікуйте завдання — помічники надішлють вам свої пропозиції.', 'dashboard.onboarding.requester.cta': 'Опублікувати завдання', 'dashboard.my_tasks': 'Мої завдання', 'dashboard.my_offers': 'Мої пропозиції', 'dashboard.invitations': 'Запрошення на завдання', 'dashboard.offers_count': 'проп.', 'dashboard.declined_count': 'відх.', 'dashboard.completed_tasks': 'Завершені завдання', 'dashboard.completed_offers': 'Завершені пропозиції', 'dashboard.review_pending': 'Оцінка ще не залишена', 'tasks.new.top_specialists': 'Топ спеціалісти', 'tasks.new.select_category': 'Виберіть категорію, щоб побачити спеціалістів', 'tasks.new.invite': 'Запропонувати роботу', 'tasks.new.invited': 'Вибрано ✓', 'reviews.count': 'відгуків', 'filter.location': 'Локація', 'filter.language': 'Мови', 'filter.language.any': 'Будь-яка мова', 'filter.category.all': 'Всі категорії', 'user.categories': 'Категорії', 'user.work_area': 'Район роботи', 'user.specialist_cards': 'Картки послуг', 'card.skills': 'Навички', 'card.categories': 'Категорії', 'card.geography': 'Район роботи', 'card.portfolio': 'Портфоліо', 'card.close': 'Закрити', 'dashboard.tasks.empty': 'Ви не публікували завдання', 'dashboard.tasks.empty.cta': 'Опублікуйте перше', 'dashboard.tasks.add_new': 'Додати нове завдання', 'dashboard.offers.empty': 'Ви не надсилали пропозицій', 'dashboard.offers.empty.cta': 'Знайти завдання', 'dashboard.customer.specialists_title': 'Шукаєте виконавця?', 'dashboard.customer.specialists_hint': 'Переглядайте профілі спеціалістів, читайте відгуки і запрошуйте їх на свої завдання', 'dashboard.customer.specialists_cta': 'Знайти виконавця', 'dashboard.customer.how_title': 'Як це працює', 'dashboard.customer.step1': 'Створіть завдання з описом і бюджетом', 'dashboard.customer.step2': 'Спеціалісти надішлють пропозиції з ціною і термінами', 'dashboard.customer.step3': 'Оберіть підходящого і почніть роботу', 'notif.title': 'Сповіщення', 'notif.mark_all': 'Позначити всі як прочитані', 'notif.empty': 'Немає сповіщень', 'notif.type.generic': 'Сповіщення', 'notif.type.new_offer': 'Нова пропозиція', 'notif.type.offer_accepted': 'Вашу пропозицію прийнято', 'notif.type.offer_declined': 'Вашу пропозицію відхилено', 'notif.type.task_completed': 'Завдання виконано', 'notif.type.task_cancelled': 'Завдання скасовано', 'notif.type.new_message': 'Нове повідомлення', 'notif.type.new_review': 'Новий відгук', 'notif.type.task_invite': 'Запрошення на завдання', 'notif.type.referral_reward': 'Реферальна нагорода', 'notif.type.specialist_card_submitted': 'Картку надіслано на перевірку', 'notif.type.specialist_card_approved': 'Картку схвалено', 'notif.type.specialist_card_rejected': 'Картку відхилено', 'notif.body.new_offer': 'Нова пропозиція на «{title}»', 'notif.body.offer_accepted': 'Вашу пропозицію на «{title}» прийнято', 'notif.body.offer_declined': 'Вашу пропозицію на «{title}» відхилено', 'notif.body.task_invite': 'Вас запрошують на «{title}»', 'notif.body.new_review': 'Ви отримали оцінку {rating}★', 'notif.body.referral_reward': 'На ваш акаунт додано {days} днів доступу до плану «{plan}»!', 'notif.body.specialist_card_submitted': 'Картку «{title}» надіслано на перевірку', 'notif.body.specialist_card_approved': 'Картку «{title}» схвалено та опубліковано', 'notif.body.specialist_card_rejected': 'Картку «{title}» не було схвалено. Виправте її та надішліть знову.', 'offer.status.pending': 'Очікує', 'offer.status.accepted': 'Прийнято', 'offer.status.declined': 'Відхилено', 'offer.status.withdrawn': 'Відкликано', 'offer.status.other_accepted': 'Вибрано іншого виконавця', 'common.loading': 'Завантаження...', 'common.error': 'Помилка', 'common.save': 'Зберегти', 'common.saving': 'Збереження...', 'common.cancel': 'Скасувати', 'common.add': 'Додати', 'common.close': 'Закрити', 'common.edit': 'Редагувати', 'common.delete': 'Видалити', 'common.from': 'від', 'common.currency': '€', 'common.greece': 'Греція', 'chat.connected': 'Підключено', 'chat.disconnected': 'Відключено', 'chat.no_rooms': 'Переписок поки немає', 'chat.task_fallback': 'Завдання', 'chat.select': 'Виберіть переписку', 'chat.no_messages': 'Повідомлень поки немає', 'chat.placeholder': 'Напишіть повідомлення... (Enter для надсилання)', 'chat.conversation_fallback': 'Переписка', 'chat.direct_chat': 'Особистий чат', 'chat.linked_task': 'Прикріплене замовлення', 'chat.write_btn': 'Написати', 'chat.just_now': 'щойно', 'chat.min_ago': 'хв', 'chat.write_specialist': 'Написати спеціалісту', 'chat.write_customer': 'Написати замовнику', 'chat.notif_settings': 'Налаштування сповіщень', 'chat.notif_messages': 'Сповіщення про нові повідомлення', 'chat.toast_title': 'Нове повідомлення', 'chat.toast_open': 'Відкрити чат', 'offer.price': 'Ціна', 'offer.price.placeholder': 'напр. 80', 'offer.customer_budget': 'Бюджет замовника', 'offer.message': 'Повідомлення', 'offer.optional': 'необов\'язково', 'offer.message.placeholder': 'Представтеся, розкажіть про досвід і чому ви найкращий вибір...', 'offer.submitting': 'Надсилання...', 'profile.photo': 'Фото профілю', 'profile.photo.change': 'Змінити фото', 'profile.photo.hint': 'JPEG, PNG, WebP · до 5MB', 'profile.basic_info': 'Основна інформація', 'profile.phone': 'Телефон', 'profile.phone.placeholder': '+30 6901234567', 'profile.bio': 'Короткий опис', 'profile.bio.placeholder': 'Розкажіть трохи про себе...', 'profile.language': 'Мова', 'profile.language.hint': 'Мова інтерфейсу і email-сповіщень', 'profile.languages': 'Мови спілкування', 'profile.languages.hint': 'Виберіть усі мови, якими ви спілкуєтесь', 'profile.skills': 'Навички', 'profile.skills.subtitle': 'Додайте послуги, які ви пропонуєте', 'profile.skills.placeholder': 'напр. Прибирання, IT, Репетиторство...', 'profile.role': 'Роль акаунту', 'profile.role.specialist': '🔧 Помічник', 'profile.role.admin': '👑 Admin', 'profile.role.customer': '👤 Користувач', 'profile.role.user': '👤 Користувач', 'profile.role.change': 'Для зміни ролі зверніться до служби підтримки.', 'profile.become_specialist': 'Запропонувати допомогу', 'profile.become_specialist.desc': 'Створи профіль помічника, запропонуй свої навички та почни отримувати завдання.', 'become_specialist.hero.title': 'Запропонуй свої навички і почни заробляти', 'become_specialist.hero.subtitle': 'Створи профіль помічника та отримуй запити від людей, яким потрібна допомога', 'become_specialist.how.title': 'Як це працює', 'become_specialist.step1.title': 'Створи портфоліо спеціаліста', 'become_specialist.step1.desc': 'Вкажи категорії, навички і зону покриття — система автоматично підбере підходящі замовлення', 'become_specialist.step2.title': 'Шукай замовлення', 'become_specialist.step2.desc': 'Переглядай завдання по своїх категоріях у розділі «Пошук замовлень»', 'become_specialist.step3.title': 'Відгукуйся і заробляй', 'become_specialist.step3.desc': 'Надсилай пропозиції з ціною і термінами, спілкуйся з клієнтами і виконуй замовлення', 'become_specialist.benefits.title': 'Переваги профілю спеціаліста', 'become_specialist.benefit1': 'Пошук замовлень за категоріями і локацією', 'become_specialist.benefit2': 'Публічний профіль з відгуками клієнтів', 'become_specialist.benefit3': 'Розклад доступності, видимий клієнтам', 'become_specialist.benefit4': 'Додавання до обраного клієнтами', 'become_specialist.cta': 'Детальніше', 'become_specialist.free_badge': 'Безкоштовна реєстрація', 'profile.tab.notifications': 'Сповіщення', 'profile.tab.reviews': 'Відгуки', 'profile.tab.referral': 'Реферали', 'profile.tab.auto_response': 'Авто-відповідь', 'profile.tab.site': 'Сайт', 'profile.site.title': 'Персональна сторінка', 'profile.site.url_label': 'Особистий сайт', 'profile.site.copy': 'Копіювати', 'profile.site.copied': 'Скопійовано', 'profile.site.visible_title': 'Що відображається на вашій сторінці', 'profile.site.visible.name': 'Ім\'я і фото', 'profile.site.visible.bio': 'Біографія', 'profile.site.visible.rating': 'Рейтинг і відгуки', 'profile.site.visible.portfolio': 'Портфоліо / Картки', 'profile.site.visible.contacts': 'Контактні дані', 'profile.site.visible.full_last_name': 'Прізвище повністю', 'profile.site.visible.services': 'Картки послуг', 'profile.site.visible.reviews': 'Розділ з відгуками', 'profile.site.visible.status': 'Статус «Готовий допомогти»', 'profile.site.theme': 'Тема оформлення', 'profile.site.theme.dark': 'Темна', 'profile.site.theme.light': 'Світла', 'profile.site.slug_taken': 'Ця адреса вже зайнята', 'profile.site.stats.title': 'Аналітика сайту', 'profile.site.stats.days': 'останні 30 днів', 'profile.site.stats.views': 'Перегляди', 'profile.site.stats.unique': 'Унікальні відвідувачі', 'profile.site.stats.messages': 'Повідомлення', 'profile.site.stats.total_views': 'Перегляди', 'profile.site.stats.total_unique': 'Унік. відвідувачі', 'profile.site.stats.total_messages': 'Повідомлення', 'profile.site.stats.empty': 'Даних поки немає', 'profile.site.stats.loading': 'Завантаження аналітики...', 'profile.site.stats.no_slug': 'Вкажіть адресу сайту, щоб бачити статистику', 'profile.site.edit_bio_hint': 'Біографія і фото налаштовуються у вкладці «Основне».', 'profile.site.seo.title': 'SEO — мета-дані сайту', 'profile.site.seo.hint': 'Відображається в пошуковиках. При збереженні автоматично перекладається на всі мови.', 'profile.site.seo.site_title': 'Заголовок сторінки', 'profile.site.seo.site_title_placeholder': 'Іван Іванов — Електрик в Афінах', 'profile.site.seo.site_desc': 'Мета-опис', 'profile.site.seo.site_desc_placeholder': 'Короткий опис для пошуковиків...', 'status.title': 'Статус', 'status.can_help_now_hint': 'Ваша картка показується вище у пошуку', 'status.need_help_hint': 'Спеціалісти можуть запропонувати вам допомогу', 'profile.referral.title': 'Партнерська програма', 'profile.referral.desc': 'Поділіться посиланням і отримуйте нагороду за кожного залученого користувача.', 'profile.referral.link_label': 'Ваше реферальне посилання', 'profile.referral.copy': 'Копіювати', 'profile.referral.copied': 'Скопійовано!', 'profile.referral.invited_count': 'успішних запрошень', 'profile.referral.no_code': 'Реферальний код недоступний.', 'notifications.title': 'Налаштування сповіщень', 'notifications.email.new_tasks': 'Email про нові замовлення', 'notifications.email.new_tasks.desc': 'Отримувати email, коли у ваших категоріях публікується нове замовлення', 'notifications.messages.desc': 'Отримувати сповіщення при новому вхідному повідомленні', 'notifications.saved': 'Налаштування збережено', 'notifications.plan_required': 'Недоступно у вашому тарифі', 'profile.tab.info': 'Основне', 'profile.tab.finance': 'Фінанси', 'profile.tab.skills': 'Навички', 'profile.tab.categories': 'Категорії', 'profile.tab.geography': 'Географія', 'profile.specialist.categories': 'Категорії робіт', 'profile.specialist.categories.desc': 'Виберіть категорії, в яких ви працюєте', 'profile.specialist.geography': 'Міста покриття', 'profile.specialist.geography.desc': 'Виберіть міста / райони, де ви працюєте', 'profile.saving': 'Збереження...', 'profile.upload.error': 'Помилка завантаження фото', 'profile.saved': 'Збережено', 'profile.tab.cards': 'Пропозиції', 'profile.cards.count': 'Пропозиції', 'profile.cards.add': 'Додати пропозицію', 'profile.cards.new_title': 'Назва нової пропозиції', 'profile.cards.placeholder': 'Наприклад: Сантехніка', 'profile.cards.create': 'Створити', 'profile.cards.cancel': 'Скасувати', 'profile.cards.empty': 'У вас немає пропозицій', 'profile.cards.empty_hint': 'Створіть першу картку, щоб показати послуги клієнтам.', 'profile.cards.create_first': 'Створити першу пропозицію', 'profile.cards.delete_confirm': 'Видалити пропозицію?', 'profile.background.change': 'Змінити фон', 'profile.background.remove': 'Видалити фон', 'profile.listing_requirements.published_card': 'Опублікуйте хоча б одну картку', 'profile.listing_requirements.title': 'Ваш профіль поки не показується в розділі «Пропозиції»', 'profile.listing_requirements.hint': 'Щоб картка відображалась, виконайте умови:', 'profile.listing_requirements.bio': 'Додайте коротку інформацію про себе в «Основне»', 'profile.listing_requirements.categories': 'Укажіть хоча б одну категорію в активній картці', 'profile.listing_requirements.locations': 'Укажіть хоча б одну локацію в активній картці', 'profile.listing_requirements.card_inactive': 'Зробіть картку активною', 'profile.listing_requirements.review_pending': 'Картка на розгляді', 'profile.card.visibility_issue': 'Картка не відображається в розділі «Пропозиції»', 'profile.card.tab.main': 'Основне', 'profile.card.tab.skills': 'Навички', 'profile.card.tab.categories': 'Категорії', 'profile.card.tab.geography': 'Географія', 'profile.card.tab.portfolio': 'Галерея', 'profile.card.tab.pricelist': 'Прайс-лист', 'profile.card.pricelist.empty': 'Групи прайс-листа ще не додані.', 'profile.card.pricelist.add_group': 'Додати групу', 'profile.card.pricelist.group_title': 'Назва групи', 'profile.card.pricelist.add_item': 'Додати позицію', 'profile.card.pricelist.item_name': 'Послуга / робота', 'profile.card.pricelist.item_desc': 'Опис (необов\'язково)', 'profile.card.pricelist.item_price': 'Ціна', 'profile.card.pricelist.item_unit': 'Одиниця (наприклад /год)', 'profile.card.pricelist.save_group': 'Зберегти групу', 'profile.card.pricelist.save_item': 'Зберегти', 'profile.card.pricelist.delete_group': 'Видалити групу', 'profile.card.pricelist.delete_item': 'Видалити', 'profile.card.active': 'Активна', 'profile.card.review_pending': 'На розгляді', 'profile.card.review_pending_hint': 'Вашу картку зараз перевіряє адміністрація.', 'profile.card.review_submitted': 'Картку надіслано на перевірку', 'profile.card.review_approved': 'Картку схвалено', 'profile.card.review_approved_hint': 'Ваша картка тепер відображається в пропозиціях.', 'profile.card.review_rejected': 'Картку відхилено', 'profile.card.review_rejected_hint': 'Картку не було схвалено. Виправте її та надішліть знову.', 'profile.card.submit_review': 'Надіслати на розгляд', 'profile.card.withdraw_review': 'Відкликати заявку', 'profile.card.unpublish': 'Зняти з публікації', 'profile.card.save': 'Зберегти', 'profile.card.saved': 'Збережено', 'profile.card.delete': 'Видалити', 'profile.card.skill.add': 'Додати навичку', 'profile.card.photo.add': 'Додати фото', 'profile.card.photo.uploading': 'Завантаження...', 'profile.card.photo.empty': 'Немає фотографій', 'profile.card.item.title': 'Заголовок', 'profile.card.item.desc': 'Опис', 'profile.card.item.save': 'Зберегти', 'profile.card.item.cancel': 'Скасувати', 'profile.card.item.edit': 'Опис роботи', 'profile.card.description': 'Опис картки', 'profile.card.desc_auto_translate': 'При збереженні буде автоматично перекладено на інші мови', 'profile.card.desc_translated': 'Є переклади:', 'profile.upgrade.cards_limit': 'Ліміт портфоліо вичерпано', 'profile.upgrade.plan': 'Поточний тариф:', 'profile.upgrade.contact': 'Зверніться до адміністратора для зміни тарифу', 'profile.upgrade.ok': 'Зрозуміло', 'profile.plan.title': 'Тарифний план', 'profile.balance': 'Баланс', 'profile.balance.topup': 'Поповнити баланс', 'profile.balance.topup.title': 'Поповнити баланс', 'profile.balance.topup.amount': 'Сума (в EUR)', 'profile.balance.topup.hint': 'Виберіть суму або введіть вручну', 'profile.balance.topup.submit': 'Перейти до оплати', 'profile.balance.topup.loading': 'Перенаправлення...', 'profile.balance.topup.error': 'Помилка ініціалізації платежу. Спробуйте знову.', 'payment.success.title': 'Оплата пройшла успішно!', 'payment.success.desc': 'Ваш баланс оновлено.', 'payment.cancelled.title': 'Оплату скасовано', 'payment.cancelled.desc': 'Оплату було скасовано. Кошти не списано.', 'payment.pending.title': 'Обробляється...', 'payment.pending.desc': 'Ваш платіж в обробці.', 'payment.back_to_profile': 'Повернутися в профіль', 'profile.plan.basic': 'Базовий (безкоштовний)', 'profile.plan.contact_upgrade': 'Зверніться до адміністратора для підключення тарифу', 'profile.plan.cards_up_to': 'Портфоліо: до', 'profile.plan.cards_unlimited': 'Портфоліо: безліміт', 'profile.plan.tasks_up_to': 'Завдань: до', 'profile.plan.offers_up_to': 'Відгуків: до', 'profile.plan.valid_until': 'Дійсний до', 'profile.plan.no_expiry': 'Безстроково', 'create.error': 'Помилка при публікації', 'tasks.category.general': 'Загальне', 'tasks.budget.range': 'Діапазон:', 'tasks.budget.from': 'від', 'tasks.budget.to': 'до', 'tasks.filter.reset': 'Скинути фільтри', 'tasks.load_more': 'Завантажити ще', 'tasks.showing': 'Результатів:', 'tasks.field.budget': 'Бюджет, €', 'admin.title': 'Панель адміністратора', 'admin.tab.stats': 'Статистика', 'admin.tab.users': 'Користувачі', 'admin.tab.tasks': 'Завдання', 'admin.tab.reports': 'Скарги', 'admin.tab.moderation': 'Модерація', 'admin.stats.users': 'Користувачі', 'admin.stats.tasks': 'Завдання', 'admin.stats.offers': 'Пропозиції', 'admin.stats.reviews': 'Відгуки', 'admin.tasks.by_status': 'Завдання за статусом', 'admin.col.user': 'Користувач', 'admin.col.email': 'Email', 'admin.col.role': 'Роль', 'admin.col.registered': 'Реєстрація', 'admin.col.status': 'Статус', 'admin.col.title': 'Назва', 'admin.col.budget': 'Бюджет', 'admin.col.created': 'Створено', 'admin.users.active': 'Активний', 'admin.users.inactive': 'Неактивний', 'admin.users.deactivate': 'Деактивувати', 'admin.users.activate': 'Активувати', 'admin.tasks.cancel': 'Скасувати', 'admin.reports.none': 'Скарг немає', 'admin.moderation.none': 'Немає пропозицій для перевірки', 'admin.moderation.pending': 'В очікуванні', 'admin.moderation.active': 'Активно', 'admin.moderation.approve': 'Підтвердити', 'admin.moderation.block': 'Заблокувати', 'admin.moderation.pending_title': 'Пропозиції на підтвердження', 'admin.moderation.active_title': 'Активні пропозиції', 'admin.moderation.pending_count': 'В очікуванні', 'admin.moderation.active_count': 'Активні', 'admin.moderation.pending_hint': 'Нові пропозиції, які очікують підтвердження', 'admin.moderation.active_hint': 'Активні пропозиції, які можна заблокувати', 'admin.moderation.pending_empty': 'Немає нових пропозицій для підтвердження', 'admin.moderation.active_empty': 'Активних пропозицій не знайдено', 'admin.reports.reviewed': 'Розглянуто', 'admin.reports.dismiss': 'Відхилити', 'admin.pagination.total': 'Всього', 'admin.users.role.change': 'Змінити роль', 'admin.users.search.placeholder': 'Пошук за ім\'ям або email...', 'admin.tasks.delete': 'Видалити', 'admin.tasks.delete.confirm': 'Видалити це завдання назавжди?', 'admin.tasks.search.placeholder': 'Пошук за назвою...', 'admin.col.customer': 'Замовник', 'admin.col.reporter': 'Скаржник', 'admin.col.target': 'Ціль', 'admin.filter.all_roles': 'Всі ролі', 'admin.filter.all_statuses': 'Всі статуси', 'admin.reports.target.task': 'Завдання', 'admin.reports.target.user': 'Користувач', 'admin.tab.categories': 'Категорії', 'admin.tab.locations': 'Міста і райони', 'admin.tab.logs': 'Логи', 'admin.tab.plans': 'Тарифи', 'admin.tab.settings': 'Налаштування', 'admin.logs.subtab.ai': 'AI логи', 'admin.logs.subtab.activity': 'Активність', 'admin.logs.subtab.mail': 'Mail', 'admin.logs.subtab.notifications': 'Сповіщення', 'admin.notif_logs.type': 'Тип', 'admin.notif_logs.title': 'Заголовок', 'admin.notif_logs.read': 'Прочитано', 'admin.notif_logs.empty': 'Логи сповіщень порожні', 'admin.stats.notif_chart_title': 'Сповіщення по днях', 'admin.stats.notif_label': 'Сповіщення', 'admin.stats.mail_chart_title': 'Email по днях', 'admin.stats.mail_label': 'Emails', 'admin.filter.all': 'Всі', 'admin.stats.specialists': 'Помічники', 'admin.col.plan': 'Тариф', 'admin.back_home': 'На головну', 'admin.plans.title': 'Тарифні пакети', 'admin.plans.add': '+ Додати тариф', 'admin.plans.empty': 'Тарифи не створено', 'admin.plans.form.new': 'Новий тариф', 'admin.plans.form.edit': 'Редагувати тариф', 'admin.plans.form.name': 'Назва', 'admin.plans.form.price': 'Ціна (EUR)', 'admin.plans.form.old_price': 'Стара ціна (EUR, необов\'язково)', 'admin.plans.form.max_offers': 'Макс. відгуків (порожньо = без ліміту)', 'admin.plans.form.max_cards': 'Макс. пропозицій (порожньо = без ліміту)', 'admin.plans.form.duration_days': 'Термін (днів, порожньо = без закінчення)', 'admin.plans.form.description': 'Опис', 'admin.plans.form.features': 'Можливості (по одному на рядок)', 'admin.plans.form.notify': 'Сповіщення про нові замовлення', 'admin.plans.form.default': 'За замовчуванням', 'admin.plans.form.active': 'Активний', 'admin.plans.form.order': 'Порядок', 'admin.plans.form.role': 'Роль', 'admin.plans.form.tier': 'Рівень', 'admin.plans.form.role.customer': 'Замовник', 'admin.plans.form.role.specialist': 'Помічник', 'admin.plans.form.tier.free': 'Безкоштовний', 'admin.plans.form.tier.pro': 'Pro', 'admin.plans.form.tier.ultimate': 'Ultimate', 'admin.plans.form.section.limits': 'Ліміти (порожньо = без обмежень)', 'admin.plans.form.max_messages_day': 'Макс. повідомлень/день', 'admin.plans.form.max_orders_day': 'Макс. замовлень/день', 'admin.plans.form.max_skills': 'Макс. навичок', 'admin.plans.form.max_profiles': 'Макс. профілів', 'admin.plans.form.max_portfolio': 'Макс. елементів портфоліо', 'admin.plans.form.section.boost': 'Множники & Буст', 'admin.plans.form.search_boost': 'Буст у пошуку', 'admin.plans.form.offers_multiplier': 'Множник відгуків', 'admin.plans.form.section.contact': 'Права контактів', 'admin.plans.form.can_contact_free': 'Контакт з безкоштовними користувачами', 'admin.plans.form.can_contact_pro': 'Контакт з Pro користувачами', 'admin.plans.form.can_contact_all': 'Контакт з усіма', 'admin.plans.form.can_show_contact': 'Показувати контакти', 'admin.plans.form.can_view_phone': 'Перегляд телефону', 'admin.plans.form.section.features': 'Можливості', 'admin.plans.form.upload_video': 'Завантаження відео', 'admin.plans.form.favorites': 'Обране', 'admin.plans.form.google_calendar': 'Google Calendar', 'admin.plans.form.verified_badge': 'Знак верифікації', 'admin.plans.form.highlighted_reviews': 'Виділені відгуки', 'admin.plans.form.personal_site': 'Особистий сайт', 'admin.plans.form.can_help_now': 'Статус «Можу допомогти»', 'admin.plans.form.need_help': 'Статус «Потрібна допомога»', 'admin.plans.form.auto_response': 'Авто-відповідь', 'admin.plans.form.auto_match': 'Авто-підбір', 'admin.plans.form.price_list': 'Прайс-лист', 'admin.plans.form.instant_dispatch_free': 'Миттєва розсилка (безкоштовно)', 'admin.plans.form.instant_dispatch_pro': 'Миттєва розсилка (Pro)', 'admin.plans.badge.default': 'За замовчуванням', 'admin.plans.badge.inactive': 'Неактивний', 'admin.plans.make_default': 'Зробити за замовчуванням', 'admin.plans.tasks': 'Завдань', 'admin.plans.offers': 'Відгуків', 'admin.plans.cards': 'Пропозиції', 'admin.plans.notify_tasks': 'Сповіщення про замовлення', 'admin.plans.delete.confirm': 'Видалити тариф', 'admin.activity.title': 'Журнал активності', 'admin.activity.event': 'Подія', 'admin.activity.all_events': 'Всі події', 'admin.activity.from': 'Від', 'admin.activity.to': 'До', 'admin.activity.reset': 'Скинути', 'admin.activity.total': 'Всього', 'admin.activity.empty': 'Немає записів', 'admin.mail.event': 'Email подія', 'admin.mail.all_events': 'Всі email події', 'admin.mail.from': 'Від', 'admin.mail.to': 'До', 'admin.mail.reset': 'Скинути', 'admin.mail.total': 'Всього', 'admin.mail.empty': 'Немає email логів', 'admin.mail.recipient': 'Отримувач', 'admin.mail.provider': 'Провайдер', 'admin.mail.details': 'Деталі', 'admin.mail.status': 'Статус', 'admin.mail.success': 'Успішно', 'admin.mail.failed': 'Помилка', 'admin.event.email_sent': 'Email надіслано', 'admin.event.email_failed': 'Email не надіслано', 'admin.event.email_dev': 'Email DEV fallback', 'admin.event.admin_email_test_sent': 'Тестовий email надіслано', 'admin.event.admin_email_test_failed': 'Тестовий email не надіслано', 'admin.logs.empty': 'Немає записів', 'admin.logs.date': 'Дата', 'admin.logs.provider': 'Провайдер', 'admin.logs.model': 'Модель', 'admin.logs.action': 'Дія', 'admin.logs.langs': 'Мови', 'admin.logs.in': 'Вхід', 'admin.logs.out': 'Вихід', 'admin.logs.total': 'Разом', 'admin.logs.ms': 'мс', 'admin.logs.status': 'Статус', 'admin.stats.activity_30d': 'Активність за 30 днів', 'admin.stats.tasks_label': 'Заявки', 'admin.stats.users_label': 'Користувачі', 'admin.stats.specialists_label': 'Помічники', 'admin.stats.tokens_title': 'Витрата токенів (по місяцях)', 'admin.stats.tokens_out': 'Вихідні', 'admin.stats.tokens_in': 'Вхідні', 'admin.stats.tokens_out_label': 'Вихідні токени', 'admin.stats.tokens_in_label': 'Вхідні токени', 'admin.stats.cost_label': 'Вартість (USD)', 'admin.stats.tasks_by_status': 'Заявки за статусами', 'admin.task_status.open': 'Відкриті', 'admin.task_status.in_progress': 'В роботі', 'admin.task_status.completed': 'Завершені', 'admin.task_status.cancelled': 'Скасовані', 'admin.task_status.draft': 'Чернетки', 'admin.settings.tab.general': 'Загальні', 'admin.settings.tab.smtp': 'E-Mail', 'admin.settings.tab.notifications': 'Сповіщення', 'admin.settings.tab.payment': 'Оплата', 'admin.settings.tab.referral': 'Реферальна', 'admin.settings.tab.seo': 'SEO', 'admin.settings.tab.socials': 'Соцмережі', 'admin.settings.tab.telegram': 'Telegram Bot', 'admin.settings.telegram.title': 'Налаштування Telegram Bot', 'admin.settings.telegram.help': 'Створіть бота через @BotFather. ID чату дізнайтесь через @userinfobot.', 'admin.settings.telegram.bot_token': 'Bot Token', 'admin.settings.telegram.admin_chat_id': 'Chat ID адміністратора', 'admin.settings.telegram.admin_chat_hint': 'Спочатку надішліть /start своєму боту, потім дізнайтесь chat ID через @userinfobot', 'admin.settings.telegram.channel_id': 'невикористовується', 'admin.settings.telegram.channels_title': 'Канали за мовами', 'admin.settings.telegram.channel_hint': 'Username публічного каналу (@канал) або числовий ID', 'admin.settings.telegram.notify_registrations': 'Сповіщати про нові реєстрації', 'admin.settings.telegram.notify_registrations_hint': 'Надсилати повідомлення при реєстрації нового користувача', 'admin.settings.telegram.post_new_tasks': 'Публікувати нові завдання в канал', 'admin.settings.telegram.post_new_tasks_hint': 'Автоматично публікувати нові завдання в Telegram-канал', 'admin.settings.telegram.test': 'Тест', 'admin.settings.telegram.verify': 'Перевірити токен', 'admin.settings.telegram.test_fail': 'Помилка з\'єднання', 'admin.settings.socials.title': 'Посилання на соціальні мережі', 'admin.settings.socials.hint': 'Заповнені посилання відображаються у підвалі сайту', 'admin.settings.seo.maintenance_label': 'Режим обслуговування', 'admin.settings.seo.maintenance_hint': 'Показувати сторінку обслуговування всім відвідувачам', 'admin.settings.seo.indexing_label': 'Індексація пошуковими системами', 'admin.settings.seo.indexing_hint': 'Дозволити пошуковим системам індексувати сайт', 'admin.settings.seo.head_scripts_label': 'Скрипти в (JS)', 'admin.settings.seo.head_scripts_hint': 'Виконується на кожній сторінці (Google Tag Manager, аналітика тощо)', 'admin.settings.seo.site_title_label': 'Заголовок сайту', 'admin.settings.seo.site_description_label': 'Опис сайту (meta description)', 'admin.settings.referral.title': 'Партнерська програма', 'admin.settings.referral.hint': 'Нагороджуйте користувачів, що приводять нових учасників.', 'admin.settings.referral.enabled_label': 'Увімкнено', 'admin.settings.referral.enabled_hint': 'Увімкнути / вимкнути видачу нагород', 'admin.settings.referral.customer_section': 'Для клієнтів', 'admin.settings.referral.specialist_section': 'Для помічників', 'admin.settings.referral.plan_label': 'Тарифний план за реферала', 'admin.settings.referral.no_plan': '— без плану —', 'admin.settings.referral.plan_hint': 'Цей план буде призначений тому, хто запросив. Якщо його поточний план вищий — додадуться тільки дні.', 'admin.settings.referral.days_label': 'Днів нагороди', 'admin.settings.referral.days_hint': 'Кількість днів, що додаються до терміну дії плану.', 'admin.settings.general.title': 'Загальні налаштування', 'admin.settings.general.site_name': 'Назва сайту', 'admin.settings.general.site_url': 'URL сайту', 'admin.settings.general.contact_email': 'Email для зв\'язку', 'admin.settings.general.support_phone': 'Телефон підтримки', 'admin.settings.smtp.title': 'Налаштування SMTP сервера', 'admin.settings.smtp.hint': 'Використовується для надсилання email-сповіщень.', 'admin.settings.smtp.host': 'SMTP Хост', 'admin.settings.smtp.port': 'Порт', 'admin.settings.smtp.encryption': 'Шифрування', 'admin.settings.smtp.enc.none': 'Немає', 'admin.settings.smtp.enc.tls': 'STARTTLS (порт 587)', 'admin.settings.smtp.enc.ssl': 'SSL/TLS (порт 465)', 'admin.settings.smtp.username': 'Ім\'я користувача', 'admin.settings.smtp.password': 'Пароль / App Password', 'admin.settings.smtp.from_name': 'Ім\'я відправника', 'admin.settings.smtp.from_email': 'Email відправника', 'admin.settings.smtp.test': 'Надіслати тестовий email', 'admin.settings.smtp.sending': 'Надсилання...', 'admin.settings.payment.hint': 'Дані для підключення до ePay Piraeus Bank.', 'admin.settings.env.test': 'Тест (sandbox)', 'admin.settings.env.prod': 'Бойовий режим', 'admin.settings.env.label': 'Середовище', 'admin.settings.merchant_id': 'Merchant ID', 'admin.settings.api_user': 'API User', 'admin.settings.api_password': 'API Password', 'admin.settings.confirm_url': 'Confirmation URL (webhook)', 'admin.settings.cancel_url': 'Cancel URL', 'admin.settings.active': 'Активний', 'admin.settings.saving': 'Збереження...', 'admin.settings.saved': 'Збережено', 'admin.notif.vars_hint': 'Доступні змінні в шаблонах', 'admin.notif.tmpl.not_set': 'Шаблон не налаштовано', 'admin.notif.tmpl.subject_label': 'Тема листа', 'admin.notif.tmpl.body_label': 'Текст листа (HTML)', 'admin.notif.tmpl.save': 'Зберегти', 'admin.notif.tmpl.close': 'Закрити', 'admin.notif.tmpl.translate': 'Авто-переклад на інші мови', 'admin.notif.tmpl.translating': 'Переклад...', 'admin.notif.tmpl.saving': 'Збереження...', 'admin.notif.email_verification': 'Підтвердження email адреси', 'admin.notif.registration_success': 'Успішна реєстрація', 'admin.notif.password_reset': 'Відновлення пароля', 'admin.notif.new_offer': 'Нова пропозиція', 'admin.notif.new_task': 'Нове завдання', 'admin.notif.offer_accepted': 'Пропозицію прийнято', 'admin.notif.new_message': 'Нове повідомлення', 'admin.notif.offer_declined': 'Відхилення пропозиції', 'admin.notif.offer_other_accepted': 'Вибрано іншого виконавця', 'admin.notif.task_updated': 'Зміна завдання', 'admin.notif.deadline_reminder': 'Нагадування про дедлайн', 'admin.notif.task_archived': 'Автознняття завдання', 'admin.notif.referral_reward': 'Реферальна нагорода', 'admin.email_template.plan_activated': 'Тарифи — активація тарифу', 'admin.email_template.plan_upgraded': 'Тарифи — підвищення тарифу', 'admin.email_template.plan_downgrade_scheduled': 'Тарифи — запланований перехід', 'admin.email_template.plan_downgrade_applied': 'Тарифи — застосування переходу', 'admin.email_template.plan_renewal_reminder': 'Тарифи — нагадування про продовження', 'admin.email_template.plan_insufficient_funds': 'Тарифи — недостатньо коштів', 'pricing.confirm.title': 'Підтвердіть вибір тарифу', 'pricing.confirm.plan': 'Тариф', 'pricing.confirm.prorated': 'Залік залишку', 'pricing.confirm.effective_price': 'До оплати', 'pricing.confirm.your_balance': 'Ваш баланс', 'pricing.confirm.downgrade_info': 'Перехід на новий тариф відбудеться автоматично після закінчення поточного періоду.', 'pricing.confirm.insufficient': 'Недостатньо коштів на балансі.', 'pricing.confirm.top_up': 'Поповнити', 'pricing.confirm.schedule_downgrade': 'Запланувати перехід', 'pricing.confirm.pay': 'Оплатити', 'admin.user_edit.title': 'Редагування користувача', 'admin.user_edit.email': 'Email', 'admin.user_edit.email_verified': 'Email підтверджено', 'admin.user_edit.email_not_verified': 'Email не підтверджено', 'admin.user_edit.verify_email_btn': 'Підтвердити вручну', 'admin.user_edit.verify_email_done': 'Email підтверджено!', 'admin.user_edit.id': 'ID', 'admin.user_edit.registered': 'Реєстрація', 'admin.user_edit.last_seen': 'Останній візит', 'admin.user_edit.lang': 'Мова', 'admin.user_edit.first_name': 'Ім\'я', 'admin.user_edit.last_name': 'Прізвище', 'admin.user_edit.phone': 'Телефон', 'admin.user_edit.bio': 'Про себе', 'admin.user_edit.role': 'Роль', 'admin.user_edit.plan': 'Тариф', 'admin.user_edit.no_plan': '— Без тарифу —', 'admin.user_edit.active': 'Активний акаунт', 'admin.user_edit.published': 'Опублікована', 'admin.user_edit.balance': 'Баланс (EUR)', 'admin.user_edit.skills': 'Навички', 'admin.user_edit.tab.profile': 'Профіль', 'admin.user_edit.tab.account': 'Акаунт', 'admin.user_edit.tab.balance': 'Баланс', 'admin.user_edit.tab.settings': 'Налаштування', 'admin.user_edit.tab.specialist': 'Пропозиції', 'admin.user_edit.tab.site': 'Сайт', 'admin.user_edit.plan_expires': 'Тариф закінчується', 'admin.user_edit.interface_lang': 'Мова інтерфейсу', 'admin.user_edit.comm_languages': 'Мови спілкування', 'admin.user_edit.personal_site_slug': 'Персональна сторінка', 'admin.user_edit.show_contact_info': 'Показувати контакти', 'admin.user_edit.show_contact_info.hint': 'Видно замовникам', 'admin.user_edit.notify_new_tasks': 'Сповіщати про нові завдання', 'admin.user_edit.notify_new_tasks.hint': 'Push і email сповіщення', 'admin.user_edit.notif_messages': 'Сповіщення про повідомлення', 'admin.user_edit.notif_messages.hint': 'Нові повідомлення в чаті', 'admin.user_edit.site_settings': 'Налаштування персональної сторінки', 'admin.user_edit.categories': 'Категорії послуг', 'admin.user_edit.locations': 'Райони обслуговування', 'admin.user_edit.skill_placeholder': 'Нова навичка...', 'admin.user_edit.add_category': '— Виберіть категорію —', 'admin.user_edit.add_location': '— Виберіть район —', 'admin.user_edit.specialist_cards': 'Пропозиції спеціаліста', 'admin.user_edit.no_cards': 'Пропозиції не знайдено', 'admin.user_edit.card_title': 'Заголовок пропозиції', 'admin.user_edit.card_description': 'Опис', 'admin.balance.topup.btn': 'Поповнити', 'admin.balance.withdraw.btn': 'Списати', 'admin.balance.modal_hint': 'Зміни застосовуються одразу і фіксуються в історії', 'admin.balance.topup.title': 'Поповнення балансу', 'admin.balance.topup.amount': 'Сума', 'admin.balance.topup.description': 'Коментар', 'admin.balance.topup.description.placeholder': 'Наприклад: бонус або ручне поповнення', 'admin.balance.topup.submit': 'Поповнити баланс', 'admin.balance.withdraw.title': 'Зняття балансу', 'admin.balance.withdraw.amount': 'Сума', 'admin.balance.withdraw.description': 'Коментар', 'admin.balance.withdraw.description.placeholder': 'Наприклад: повернення або ручне списання', 'admin.balance.withdraw.submit': 'Списати баланс', 'admin.user_edit.role.customer': 'Замовник', 'admin.user_edit.role.user': 'Користувач', 'admin.user_edit.role.specialist': 'Помічник', 'admin.user_edit.role.admin': 'Адміністратор', 'common.refresh': 'Оновити', 'common.back_home': 'На головну', 'admin.loc.hint': 'Управління містами і районами', 'admin.loc.add_city': 'Нове місто', 'admin.loc.add_district': 'Додати район', 'admin.loc.new': 'Нова локація', 'admin.loc.edit': 'Редагувати локацію', 'admin.loc.district': 'район', 'admin.loc.empty': 'Немає локацій', 'admin.loc.delete.confirm': 'Видалити локацію? Всі райони також будуть видалені.', 'admin.cat.add_root': 'Нова категорія', 'admin.cat.add_sub': 'Підкатегорія', 'admin.cat.edit': 'Редагувати', 'admin.cat.delete': 'Видалити', 'admin.cat.delete.confirm': 'Видалити категорію? Всі підкатегорії також будуть видалені.', 'admin.cat.slug': 'Slug', 'admin.cat.icon': 'Іконка', 'admin.cat.name_el': 'Грецька', 'admin.cat.name_en': 'Англійська', 'admin.cat.name_ru': 'Російська', 'admin.cat.name_uk': 'Українська', 'admin.cat.active': 'Активна', 'admin.cat.parent': 'Батьківська категорія', 'admin.cat.no_parent': 'Верхній рівень', 'admin.cat.save': 'Зберегти', 'admin.cat.cancel': 'Скасувати', 'admin.cat.empty': 'Немає категорій', 'admin.cat.hint': 'Управління категоріями з багаторівневою ієрархією', 'admin.cat.new': 'Нова категорія', 'admin.cat.subcategory': 'підкатегорія', 'admin.cat.add_child': 'Додати підкатегорію', 'admin.cat.inactive': 'Неактивна', 'admin.event.user_login': 'Вхід', 'admin.event.user_register': 'Реєстрація', 'admin.event.admin_user_deactivate': 'Блокування юзера', 'admin.event.admin_user_activate': 'Розблокування юзера', 'admin.event.admin_user_role_changed': 'Зміна ролі', 'admin.event.admin_task_cancelled': 'Скасування завдання', 'admin.event.admin_task_deleted': 'Видалення завдання', 'admin.event.admin_report_reviewed': 'Скаргу розглянуто', 'admin.event.admin_report_dismissed': 'Скаргу відхилено', 'admin.event.task_created': 'Створено завдання', 'user.online': 'Онлайн', 'user.seen_minutes': 'був тут {n} хв тому', 'user.seen_hours': 'був тут {n} год тому', 'user.seen_yesterday': 'був тут вчора', 'user.seen_days': 'був тут {n} дн тому', 'specialists.title': 'Пропозиції', 'specialists.search': 'Пошук спеціаліста...', 'specialists.search.btn': 'Пошук', 'specialists.empty': 'Спеціалістів не знайдено', 'specialists.no_bio': 'Без опису', 'specialists.view': 'Дивитись профіль', 'specialists.reviews': 'відгуків', 'specialist.favorite': 'Додати до обраного', 'specialist.unfavorite': 'Прибрати з обраного', 'specialist.site_link': 'Особистий сайт', 'favorites.specialists.title': 'Обрані спеціалісти', 'favorites.specialists.empty': 'Ви ще не додали спеціалістів до обраного', 'nav.favorites': 'Обране', 'nav.schedule': 'Розклад', 'nav.find_tasks': 'Пошук замовлень', 'schedule.title': 'Мій розклад', 'schedule.subtitle': 'Позначайте дні коли ви вільні або зайняті — замовники побачать вашу доступність', 'schedule.available': 'Вільний', 'schedule.busy': 'Зайнятий', 'schedule.unset': 'Не вказано', 'schedule.click_hint': '← клік змінює статус по колу', 'schedule.range_mode': 'Виділити діапазон', 'schedule.range_from': 'З {date} — оберіть кінцеву дату', 'schedule.click_to_set': 'Натисніть щоб позначити', 'schedule.free': 'вільно', 'schedule.busy_count': 'зайнято', 'schedule.free_days': 'вільних днів', 'schedule.googleCalendar': 'Google Календар', 'schedule.connectGoogle': 'Підключити Google Календар', 'schedule.disconnectGoogle': 'Відключити', 'schedule.connectedAs': 'Підключено як', 'schedule.importFromGoogle': 'Синхр. з Google', 'schedule.gcalConnected': '✓ Google Календар підключено', 'schedule.gcalError': 'Помилка підключення Google Календар', 'schedule.gcalImportDone': 'Імпортовано {n} днів з Google Календар', 'schedule.gcalAutoSyncNote': 'Зміни доступності автоматично надсилаються в Google Календар', 'schedule.gcalConnectDesc': 'Підключіть Google Календар для автоматичної синхронізації розкладу', 'schedule.gcalDisconnectConfirm': 'Відключити Google Календар?', 'find_tasks.title': 'Пошук замовлень', 'find_tasks.for_me': 'Для мене', 'find_tasks.all': 'Всі замовлення', 'find_tasks.by_category': 'За категоріями', 'find_tasks.list': 'Списком', 'find_tasks.already_offered': 'Пропозицію надіслано', 'find_tasks.offer_now': 'Відгукнутися', 'find_tasks.empty_for_me': 'Немає замовлень у ваших категоріях', 'find_tasks.banner_hint': 'Знайдіть замовлення за категоріями вашого портфоліо', 'find_tasks.no_cards': 'Створіть портфоліо спеціаліста, щоб бачити підходящі замовлення', 'find_tasks.add_card': 'Створити портфоліо', 'find_tasks.search': 'Пошук замовлень...', 'find_tasks.tasks_count': 'завдань', 'footer.tagline': 'Платформа завдань для Греції', 'footer.rights': 'Всі права захищені.', 'nav.privacy': 'Політика конфіденційності', 'nav.delete_account': 'Видалення акаунту', 'delete_account.title': 'Запит на видалення акаунту', 'delete_account.subtitle': 'Після перевірки вашого запиту ми назавжди видалимо ваш акаунт і дані протягом 30 днів.', 'delete_account.warning': 'Цю дію не можна скасувати. Всі ваші дані будуть видалені безповоротно.', 'delete_account.reason_label': 'Причина (необов\'язково)', 'delete_account.reason_placeholder': 'Розкажіть, чому ви хочете видалити акаунт...', 'delete_account.confirm_label': 'Підтверджую, що хочу назавжди видалити свій акаунт', 'delete_account.submit': 'Надіслати запит', 'delete_account.submitting': 'Надсилання...', 'delete_account.success_title': 'Ваш запит отримано', 'delete_account.success_body': 'Ми опрацюємо ваш запит протягом 30 днів і повідомимо вас електронною поштою.', 'delete_account.login_required': 'Для надсилання запиту на видалення необхідно увійти в акаунт.', 'delete_account.login_btn': 'Увійти', 'app.download_title': 'Завантажте мобільний додаток CanHelp', 'app.download_desc': 'Все CanHelp — завжди під рукою. Доступно для Android та iOS.', 'nav.pricing': 'Тарифи', 'pricing.title': 'Тарифи', 'pricing.subtitle': 'Виберіть підходящий план', 'pricing.role.customer': 'Замовник', 'pricing.role.specialist': 'Спеціаліст', 'pricing.free': 'Безкоштовно', 'pricing.per_month': 'міс', 'pricing.duration': 'Термін', 'pricing.days': 'дн.', 'pricing.current_plan': 'Ваш план', 'pricing.popular': 'Популярний', 'pricing.choose': 'Вибрати', 'pricing.your_plan': 'Активний план', 'pricing.free_default': 'За замовчуванням', 'pricing.compare': 'Порівняння функцій', 'pricing.feature': 'Функція', 'pricing.faq_note': 'Оплата списується з балансу CanHelp. Поповнення доступне в розділі Оплата.', 'pricing.feat.messages': 'Повідомлень / день', 'pricing.feat.orders': 'Замовлень / день', 'pricing.feat.contact_all': 'Зв\'язок з усіма', 'pricing.feat.view_phone': 'Перегляд телефону', 'pricing.feat.show_contact': 'Показувати контакти', 'pricing.feat.favorites': 'Обране', 'pricing.feat.verified_badge': 'Верифікований бейдж', 'pricing.feat.google_calendar': 'Google Календар', 'pricing.feat.personal_site': 'Персональний сайт', 'pricing.feat.auto_response': 'Авто-відповідь', 'pricing.feat.auto_match': 'Авто-підбір', 'pricing.feat.highlighted_reviews': 'Виділені відгуки', 'pricing.feat.portfolio': 'Елементів пропозиції', 'pricing.feat.cards': 'Кількість пропозицій', 'pricing.feat.notify_tasks': 'Сповіщення про нові завдання', 'pricing.feat.video': 'Відео в пропозиції', 'upgrade.available_in': 'Доступно в', 'upgrade.cta': 'Покращити', 'dashboard.plan.title': 'Мій план', 'dashboard.plan.expires': 'Закінчується через {n} днів', 'dashboard.plan.upgrade': 'Покращити план', 'dashboard.plan.no_plan': 'Безкоштовний план', 'dashboard.plan.messages': 'Повідомлень сьогодні', 'dashboard.plan.orders': 'Замовлень сьогодні', 'dashboard.plan.limits': 'Денні ліміти', 'dashboard.plan.features': 'Функції', 'dashboard.plan.stats': 'Статистика', 'dashboard.stats.cards': 'Портфоліо', 'dashboard.stats.maxCards': 'Макс. портфоліо', 'dashboard.stats.portfolioItems': 'Елементи портфоліо', 'dashboard.stats.maxPortfolioItems': 'Макс. елементи', 'dashboard.stats.activeOffers': 'Активні відгуки', 'dashboard.stats.reviewsReceived': 'Відгуки', 'dashboard.stats.activeTasks': 'Активні завдання', 'dashboard.stats.completedTasks': 'Завершені', 'status.need_help': 'Потрібна допомога', 'status.active': 'Активний', 'status.toggle_on': 'Увімкнути', 'status.toggle_off': 'Вимкнути', 'fomo.missed_orders': 'Пропущено {n} замовлень', 'fomo.missed_value': 'На суму €{v}', 'fomo.upgrade_hint': 'Покращте план — отримуйте більше замовлень', 'fomo.conversion': 'Конверсія завдань', 'fomo.active': 'Активні', 'fomo.with_offers': 'З офертами', 'fomo.completed': 'Завершені', 'fomo.already_offered': '{n} спеціалістів вже відгукнулися', 'fomo.specialist_missed': 'Ви пропустили {n} замовлень', 'fomo.top_categories': 'Категорії', 'fomo.offers_received': 'пропозицій отримано', 'fomo.avg_offers': 'В середньому {n}/завдання', 'fomo.completion_rate': 'завершено', 'task.auto_match': 'Авто-матч', 'task.auto_match_results': 'Топ спеціалісти', 'task.no_offer_yet': 'Ви ще не надіслали пропозицію', 'task.make_offer': 'Надіслати пропозицію', 'auto_response.title': 'Авто-відповідь', 'auto_response.enabled': 'Увімкнути авто-відповідь', 'auto_response.min_budget': 'Мін. бюджет', 'auto_response.max_budget': 'Макс. бюджет', 'auto_response.default_price': 'Ціна за замовчуванням', 'auto_response.default_message': 'Повідомлення за замовчуванням', 'auto_response.max_per_day': 'Макс. авто-офертів на день', 'auto_response.save': 'Зберегти', 'auto_response.saved': 'Збережено', 'auto_response.categories': 'Категорії', 'auto_response.locations': 'Локації', 'profile.personal_site': 'Персональний сайт', 'profile.site_slug': 'URL slug', 'profile.site_slug_hint': 'Тільки латинські букви, цифри, - і _', 'profile.site_open': 'Відкрити сайт', 'profile.site_preview': 'Ваш сайт', 'profile.show_contact': 'Показувати контакти', 'profile.show_contact_hint': 'Замовники з Pro/Ultimate-планом побачать ваш телефон', 'gcal.upgrade_required': 'Google Календар вимагає план Pro або Ultimate', 'chat.limit_warning': 'Залишилось {n} повідомлень сьогодні', 'chat.limit_reached': 'Ліміт повідомлень вичерпано. Покращте план', 'chat.upgrade': 'Покращити', 'site.member_since': 'З нами з', 'site.rating': 'Рейтинг', 'site.completed_tasks': 'Виконано', 'site.languages': 'Мов', 'site.photos': 'фото', 'site.contact_form': 'Зв\'язатися', 'site.contact_sent': 'Повідомлення надіслано!', 'site.contact_sent_desc': 'Спеціаліст зв\'яжеться з вами найближчим часом', 'site.contact_name': 'Ім\'я', 'site.contact_name_ph': 'Ваше ім\'я', 'site.contact_email_ph': 'your@email.com', 'site.contact_message': 'Повідомлення', 'site.contact_message_ph': 'Опишіть ваше завдання...', 'site.contact_send': 'Надіслати', 'site.share': 'Поділитися', 'site.speaks_languages': 'Розмовляє мовами', 'site.message_sent': 'Повідомлення надіслано!', 'site.message_sent_desc': 'Спеціаліст отримає його в чаті', 'site.message_placeholder': 'Напишіть повідомлення...', 'site.write_to_chat': 'Написати в чат', 'site.auth_required_title': 'Потрібна авторизація', 'site.auth_required_desc': 'Щоб написати в чат, необхідно увійти в акаунт CanHelp.', 'site.auth_login_btn': 'Увійти в акаунт', 'site.auth_contact_form_btn': 'Написати через форму зворотного зв\'язку', 'specialist.services': 'Послуги', 'portfolio.title': 'Портфоліо', 'status.can_help_now': 'Готовий допомогти', 'common.not_found': 'Сторінку не знайдено', 'common.anonymous': 'Анонімно', 'specialist_setup.page_title': 'Налаштування профілю спеціаліста', 'specialist_setup.step_of': 'Крок {current} з {total}', 'specialist_setup.next': 'Далі', 'specialist_setup.back': 'Назад', 'specialist_setup.skip': 'Пропустити', 'specialist_setup.finish': 'Завершити', 'specialist_setup.go_to_profile': 'Перейти в профіль', 'specialist_setup.browse_tasks': 'Знайти завдання', 'specialist_setup.step1.title': 'Ласкаво просимо!', 'specialist_setup.step1.subtitle': 'Давайте налаштуємо ваш профіль', 'specialist_setup.step1.desc': 'Повний профіль допомагає знаходити більше клієнтів. Слідуйте крокам, щоб створити ідеальний профіль спеціаліста.', 'specialist_setup.step1.what_next': 'Що ми зробимо:', 'specialist_setup.step1.item1': 'Заповнимо основну інформацію', 'specialist_setup.step1.item2': 'Створимо картку послуги', 'specialist_setup.step1.item3': 'Додамо навички і категорії', 'specialist_setup.step1.item4': 'Оберемо географію обслуговування', 'specialist_setup.step1.item5': 'Завантажимо фото портфоліо', 'specialist_setup.step2.title': 'Базовий профіль', 'specialist_setup.step2.subtitle': 'Розкажіть про себе', 'specialist_setup.step2.bio_label': 'Про себе', 'specialist_setup.step2.bio_placeholder': 'Опишіть ваш досвід, послуги які ви пропонуєте...', 'specialist_setup.step2.phone_label': 'Телефон', 'specialist_setup.step2.phone_placeholder': '+30 6900000000', 'specialist_setup.step2.photo_label': 'Фото профілю', 'specialist_setup.step2.photo_btn': 'Завантажити фото', 'specialist_setup.step2.photo_uploading': 'Завантаження...', 'specialist_setup.step2.photo_hint': 'Відображається у вашому профілі', 'specialist_setup.step3.title': 'Картка послуги', 'specialist_setup.step3.subtitle': 'Створіть вашу першу картку послуги', 'specialist_setup.step3.title_label': 'Назва картки', 'specialist_setup.step3.title_placeholder': 'Напр. Сантехнік, Електрик, Прибирання...', 'specialist_setup.step3.desc_label': 'Опис', 'specialist_setup.step3.desc_placeholder': 'Детально опишіть що ви пропонуєте, досвід, переваги...', 'specialist_setup.step3.title_required': 'Назва обов\'язкова', 'specialist_setup.step4.title': 'Навички і категорії', 'specialist_setup.step4.subtitle': 'Додайте навички і виберіть категорії', 'specialist_setup.step4.skills_label': 'Навички', 'specialist_setup.step4.skills_placeholder': 'Напр. Монтаж труб...', 'specialist_setup.step4.skills_add': 'Додати', 'specialist_setup.step4.categories_label': 'Категорії', 'specialist_setup.step5.title': 'Географія обслуговування', 'specialist_setup.step5.subtitle': 'Де ви надаєте послуги?', 'specialist_setup.step5.hint': 'Виберіть міста або конкретні райони', 'specialist_setup.done.title': 'Ваш профіль готовий!', 'specialist_setup.done.subtitle': 'Вітаємо! Профіль налаштовано', 'specialist_setup.done.desc': 'Тепер ви можете отримувати замовлення від клієнтів. Знайдіть завдання, що відповідають вашим навичкам.', 'support.title': 'Підтримка', 'support.type.label': 'Тип звернення', 'support.type.bug': 'Помилка', 'support.type.suggestion': 'Пропозиція', 'support.type.other': 'Інше', 'support.subject': 'Тема', 'support.subject.placeholder': 'Коротко опишіть проблему...', 'support.body': 'Повідомлення', 'support.body.placeholder': 'Детально опишіть проблему або пропозицію...', 'support.submit': 'Надіслати', 'support.cancel': 'Скасувати', 'support.error': 'Помилка надсилання. Спробуйте ще раз.', 'support.sent.title': 'Запит отримано!', 'support.sent.body': 'Ми відповімо на ваш email якнайшвидше.', 'support.sent.close': 'Закрити', 'admin.tab.support': 'Підтримка', 'admin.tab.backup': 'Резервні копії', 'admin.tab.translations': 'Переклади', 'admin.tab.dbcheck': 'Перевірка БД', 'admin.tab.balances': 'Баланс', 'admin.tab.push': 'Push', 'admin.tab.referrals': 'Реферали', 'admin.search': 'Пошук', 'admin.noData': 'Немає даних', 'admin.cat.order': 'Порядок', 'admin.cat.skills': 'Навички', 'admin.plans.form.max_tasks': 'Макс. завдань', 'admin.settings.referral.shared_section': 'Спільні налаштування рефералів', 'admin.settings.seo.title': 'SEO налаштування', 'admin.backup.title': 'Резервні копії', 'admin.backup.tables': 'Таблиці', 'admin.backup.exportAll': 'Експорт всього', 'admin.backup.importAll': 'Імпорт всього', 'admin.backup.exportTable': 'Експорт таблиці', 'admin.backup.importTable': 'Імпорт таблиці', 'admin.backup.exporting': 'Експорт...', 'admin.backup.importing': 'Імпорт...', 'admin.backup.exportSuccess': 'Експорт завершено', 'admin.backup.importSuccess': 'Імпорт завершено', 'admin.backup.autoBackup': 'Автобекап', 'admin.backup.autoBackupDesc': 'Автоматичний щоденний бекап', 'admin.backup.storedBackups': 'Збережені бекапи', 'admin.backup.noStoredBackups': 'Збережених бекапів немає', 'admin.backup.restore': 'Відновити', 'admin.backup.restoreConfirm': 'Відновити з бекапу?', 'admin.backup.restoreSuccess': 'Відновлення завершено', 'admin.backup.restoring': 'Відновлення...', 'admin.backup.date': 'Дата', 'admin.backup.size': 'Розмір', 'admin.backup.today': 'Сьогодні', 'admin.backup.yesterday': 'Вчора', 'admin.balance.col.operation': 'Операція', 'admin.balance.col.amount': 'Сума', 'admin.balance.col.result': 'Баланс', 'admin.balance.col.description': 'Опис', 'admin.balance.col.date': 'Дата', 'admin.balance.empty': 'Записів поки немає', 'admin.balance.filter.all': 'Всі операції', 'admin.balance.filter.user_id': 'Фільтр за userId', 'admin.balance.kind.topup': 'Поповнення', 'admin.balance.kind.plan_purchase': 'Списання за тариф', 'admin.balance.kind.admin_topup': 'Поповнення адміном', 'admin.balance.kind.admin_adjustment': 'Коригування', 'admin.support.search': 'Пошук', 'admin.support.all_statuses': 'Всі статуси', 'admin.support.all_types': 'Всі типи', 'admin.support.none': 'Звернень немає', 'admin.support.reply': 'Відповісти', 'admin.support.reply_placeholder': 'Введіть відповідь...', 'admin.support.send_reply': 'Надіслати відповідь', 'admin.support.cancel': 'Скасувати', 'admin.support.close': 'Закрити', 'admin.support.status.open': 'Відкрито', 'admin.support.status.in_progress': 'В роботі', 'admin.support.status.resolved': 'Вирішено', 'admin.support.status.closed': 'Закрито', 'admin.support.your_reply': 'Ваша відповідь', 'admin.user_edit.visibility_requirements.title': 'Профіль поки не потрапляє в «Пропозиції»', 'admin.user_edit.visibility_requirements.hint': 'Потрібно виконати умови видимості:', 'admin.user_edit.visibility_requirements.bio': 'Заповнити опис (bio)', 'admin.user_edit.visibility_requirements.published_card': 'Опублікувати хоча б одну картку', 'admin.user_edit.visibility_requirements.categories': 'Вказати категорію в опублікованій картці', 'admin.user_edit.visibility_requirements.locations': 'Вказати локацію в опублікованій картці', 'auto_response.desc': 'Автоматично відповідати на відповідні завдання', 'auto_response.budget_range': 'Бюджет завдання', 'auto_response.message_placeholder': 'Вітаю! Я можу допомогти з цим завданням...', 'profile.background.title': 'Фон шапки профілю', 'profile.background.hint': 'Показується в шапці публічного профілю на web і в мобільному застосунку.', 'profile.photo.uploading': 'Завантаження...', 'profile.balance.history': 'Архів операцій', 'profile.balance.history.last': 'Останні операції', 'profile.balance.history.empty': 'Операцій поки немає', 'profile.balance.history.balance_after': 'Баланс після', 'profile.balance.history.kind.topup': 'Поповнення балансу', 'profile.balance.history.kind.plan_purchase': 'Списання за тариф', 'profile.balance.history.kind.admin_topup': 'Поповнення адміністратором', 'profile.balance.history.kind.admin_adjustment': 'Коригування адміністратором', 'profile.plan_history.title': 'Історія тарифного плану', 'profile.plan_history.empty': 'Історія змін тарифу поки порожня', 'profile.plan_history.expires': 'До', 'profile.plan_history.days': 'днів', 'profile.plan_history.event.activated': 'Активовано', 'profile.plan_history.event.renewed': 'Продовжено', 'profile.plan_history.event.downgraded': 'Понижено', 'profile.plan_history.event.referral_reward': 'Реферальна нагорода', 'profile.plan_history.event.admin_change': 'Змінено адміністратором', 'profile.plan_history.event.expired': 'Закінчився', 'profile.show_contact_desc': 'Дозволяє клієнтам зв’язатися напряму', 'profile.site.visible.price_list': 'Прайслист', 'site.pricelist': 'Прайслист', 'status.plan_required': 'Статус недоступний на поточному тарифі', 'status.admin_not_applicable': 'Для акаунта адміністратора користувацький статус не застосовується' } }; export function getTranslations(locale) { const t = translations[locale] ?? translations.el; return (key, fallback)=>t[key] ?? translations.el[key] ?? fallback ?? key; } /06undefined351357undefined315903315909undefined, /***/ 13260: /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ CI: () => (/* binding */ signOut), /* harmony export */ Hh: () => (/* binding */ signUp), /* harmony export */ Jv: () => (/* binding */ signIn), /* harmony export */ wV: () => (/* binding */ useSession), /* harmony export */ yK: () => (/* binding */ authClient) /* harmony export */ }); /* harmony import */ var better_auth_react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69183);  import { createAuthClient } from 'better-auth/react'; const API_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:4000'; export const authClient = createAuthClient({ baseURL: API_URL }); export const { signIn, signOut, signUp, useSession } = authClient; 052undefined70100"https://api.canhelp.gr"undefined1051270undefined130136undefined156171(0,better_auth_react__WEBPACK_IMPORTED_MODULE_0__/* .createAuthClient */ .M)undefined200206undefined, /***/ 14276: , /***/ 14365: N // EXPORTS __webpack_require__.d(__webpack_exports__, { Header: () => (/* binding */ Header) }); // EXTERNAL MODULE: ../../node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.js var react_jsx_runtime = __webpack_require__(78157); // EXTERNAL MODULE: ../../node_modules/next/dist/client/app-dir/link.js var app_dir_link = __webpack_require__(94496); var link_default = /*#__PURE__*/__webpack_require__.n(app_dir_link); // EXTERNAL MODULE: ../../node_modules/next/dist/api/navigation.js var navigation = __webpack_require__(71159); // EXTERNAL MODULE: ./src/lib/auth.ts var auth = __webpack_require__(13260); // EXTERNAL MODULE: ./src/context/locale.tsx var context_locale = __webpack_require__(96484); // EXTERNAL MODULE: ./src/lib/formatName.ts var formatName = __webpack_require__(48178); // EXTERNAL MODULE: ../../node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js var react = __webpack_require__(31768); // EXTERNAL MODULE: ./src/lib/translations.ts var translations = __webpack_require__(12998); ;// ./src/components/LanguageSwitcher.tsx  ReplaceSourcec/* __next_internal_client_entry_do_not_use__ LanguageSwitcher auto */ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; import { useState, useRef, useEffect } from 'react'; import { useLocale } from '@/context/locale'; import { LOCALES } from '@/lib/translations'; export function LanguageSwitcher() { const { locale, setLocale } = useLocale(); const [open, setOpen] = useState(false); const ref = useRef(null); const current = LOCALES.find((l)=>l.code === locale) ?? LOCALES[0]; // Close on outside click process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ function handleClick(e) { if (ref.current && !ref.current.contains(e.target)) setOpen(false); } document.addEventListener('mousedown', handleClick); return ()=>document.removeEventListener('mousedown', handleClick); }, []); return /*#__PURE__*/ _jsxs("div", { ref: ref, className: "relative", children: [ /*#__PURE__*/ _jsxs("button", { onClick: ()=>setOpen(!open), className: "flex items-center gap-1.5 px-2.5 py-1.5 rounded-lg border border-gray-200 hover:border-green-400 hover:bg-green-50 transition text-sm font-medium text-gray-700", "aria-label": "Change language", children: [ /*#__PURE__*/ _jsx("span", { children: current.code.toUpperCase() }), /*#__PURE__*/ _jsx("svg", { className: `w-3.5 h-3.5 text-gray-400 transition-transform ${open ? 'rotate-180' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19 9l-7 7-7-7" }) }) ] }), open && /*#__PURE__*/ _jsx("div", { className: "absolute right-0 mt-1 w-40 bg-white border border-gray-200 rounded-xl shadow-lg z-50 overflow-hidden", children: LOCALES.map((loc)=>/*#__PURE__*/ _jsxs("button", { onClick: ()=>{ setLocale(loc.code); setOpen(false); }, className: `w-full flex items-center gap-2.5 px-3.5 py-2.5 text-sm hover:bg-green-50 transition ${locale === loc.code ? 'bg-green-50 text-green-700 font-medium' : 'text-gray-700'}`, children: [ /*#__PURE__*/ _jsx("span", { children: loc.label }), locale === loc.code && /*#__PURE__*/ _jsx("svg", { className: "w-3.5 h-3.5 ml-auto text-green-600", fill: "currentColor", viewBox: "0 0 20 20", children: /*#__PURE__*/ _jsx("path", { fillRule: "evenodd", d: "M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z", clipRule: "evenodd" }) }) ] }, loc.code)) }) ] }); } r70132undefined134185undefined187231undefined233277undefined279285undefined350358__WEBPACK_MODULE_REFERENCE__4_5b227573654c6f63616c65225d_call_directImport_asiSafe1__._undefined391398__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined424429__WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._undefined458464__WEBPACK_MODULE_REFERENCE__7_5b224c4f43414c4553225d_call_asiSafe1__._undefined498504__WEBPACK_MODULE_REFERENCE__7_5b224c4f43414c4553225d_asiSafe1__._undefined595603__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined908912__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined10181022__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined13821385__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined15161519__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined18631866__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined21492152__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined23202326__WEBPACK_MODULE_REFERENCE__7_5b224c4f43414c4553225d_call_asiSafe1__._undefined23532357__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined28142817__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined29782981__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined32373240__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined138224(0,context_locale/* useLocale */.Y)undefined257341(0,react.useState)undefined367447(0,react.useRef)undefined476545translations/* LOCALES */.YZundefined579643translations/* LOCALES */.YZundefined734820(0,react.useEffect)undefined11251201(0,react_jsx_runtime.jsxs)undefined13071383(0,react_jsx_runtime.jsxs)undefined17431817(0,react_jsx_runtime.jsx)undefined19482022(0,react_jsx_runtime.jsx)undefined23662440(0,react_jsx_runtime.jsx)undefined27232797(0,react_jsx_runtime.jsx)undefined29653034translations/* LOCALES */.YZundefined30613137(0,react_jsx_runtime.jsxs)undefined35943668(0,react_jsx_runtime.jsx)undefined38293903(0,react_jsx_runtime.jsx)undefined41594233(0,react_jsx_runtime.jsx)undefinedRawSource // EXTERNAL MODULE: ./src/lib/api.ts var api = __webpack_require__(91864); // EXTERNAL MODULE: ../../node_modules/socket.io-client/build/esm-debug/index.js + 30 modules var esm_debug = __webpack_require__(44826); ;// ./src/hooks/useEffectiveRole.ts /* __next_internal_client_entry_do_not_use__ useEffectiveRole auto */ import { useSession } from '@/lib/auth'; import { useEffect, useState } from 'react'; function readPreviewRole() { if (typeof document === 'undefined') return null; const m = document.cookie.match(/(?:^|;\s*)canhelp_preview_role=([^;]+)/); return m?.[1] ?? null; } /** * Returns the effective role for the current user. * For admins, respects the `canhelp_preview_role` cookie set by AdminRolePreview widget. * Updates reactively when the widget dispatches `canhelp:preview-role`. */ export function useEffectiveRole() { const { data: session } = useSession(); const userRole = session?.user?.role; const isAdmin = userRole === 'admin'; const [previewRole, setPreviewRole] = useState(null); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ if (!isAdmin) return; setPreviewRole(readPreviewRole()); const sync = ()=>setPreviewRole(readPreviewRole()); window.addEventListener('canhelp:preview-role', sync); document.addEventListener('visibilitychange', sync); return ()=>{ window.removeEventListener('canhelp:preview-role', sync); document.removeEventListener('visibilitychange', sync); }; }, [ isAdmin ]); if (!userRole) return null; if (isAdmin && previewRole) return previewRole; return userRole; } ^70109undefined111154undefined570576undefined637646__WEBPACK_MODULE_REFERENCE__3_5b2275736553657373696f6e225d_call_directImport_asiSafe1__._undefined777784__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined848856__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefinedv546634(0,auth/* useSession */.wV)undefined765849(0,react.useState)undefined913999(0,react.useEffect)undefinedRawSource // EXTERNAL MODULE: ../../node_modules/next/dist/api/app-dynamic.js var app_dynamic = __webpack_require__(47262); ;// ./src/components/Header.tsx 5/* __next_internal_client_entry_do_not_use__ Header auto */ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime"; import Link from 'next/link'; import { useRouter, usePathname } from 'next/navigation'; import { useSession, signOut } from '@/lib/auth'; import { useLocale } from '@/context/locale'; import { formatShortName } from '@/lib/formatName'; import { LanguageSwitcher } from './LanguageSwitcher'; import { useState, useRef, useEffect } from 'react'; import { getUnreadCount, getMyDashboard } from '@/lib/api'; import { io } from 'socket.io-client'; import { useEffectiveRole } from '@/hooks/useEffectiveRole'; import dynamic from 'next/dynamic'; const SupportModal = dynamic(async ()=>{ typeof require.resolveWeak !== "undefined" && require.resolveWeak("./SupportModal"); }, { loadableGenerated: { modules: [ "components/Header.tsx -> " + "./SupportModal" ] }, ssr: false }); const API_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:4000'; export function Header() { const router = useRouter(); const pathname = usePathname(); const { data: session } = useSession(); const { t, locale } = useLocale(); const [menuOpen, setMenuOpen] = useState(false); const [profileOpen, setProfileOpen] = useState(false); const [supportOpen, setSupportOpen] = useState(false); const [unreadNotif, setUnreadNotif] = useState(0); const [unreadChat, setUnreadChat] = useState(0); const [msgToast, setMsgToast] = useState(null); const [planTier, setPlanTier] = useState(null); const profileRef = useRef(null); const headerRef = useRef(null); const toastTimer = useRef(null); const pathnameRef = useRef(pathname); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ pathnameRef.current = pathname; }, [ pathname ]); // Close dropdowns on outside click process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ function handleClick(e) { if (profileRef.current && !profileRef.current.contains(e.target)) { setProfileOpen(false); } } document.addEventListener('mousedown', handleClick); return ()=>document.removeEventListener('mousedown', handleClick); }, []); const isAdmin = session?.user?.role === 'admin'; const effectiveRole = useEffectiveRole(); const isSpecialist = effectiveRole === 'specialist'; const isActive = (href, exact = false)=>exact ? pathname === href : pathname === href || pathname.startsWith(href + '/'); const navCls = (href, exact = false)=>`font-medium text-sm transition ${isActive(href, exact) ? 'text-green-600' : 'text-gray-600 hover:text-green-600'}`; const mobileNavCls = (href, exact = false)=>`flex items-center gap-2 font-medium py-1 ${isActive(href, exact) ? 'text-green-600' : 'text-gray-700'}`; // Reset chat badge when entering chat process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ if (pathname === '/chat') setUnreadChat(0); }, [ pathname ]); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ if (!session) return; const socket = io(API_URL, { withCredentials: true, transports: [ 'websocket', 'polling' ] }); socket.on('new_message', (msg)=>{ if (pathnameRef.current === '/chat') return; setUnreadChat((c)=>c + 1); if (toastTimer.current) clearTimeout(toastTimer.current); setMsgToast(msg); toastTimer.current = setTimeout(()=>setMsgToast(null), 5000); }); return ()=>{ socket.disconnect(); if (toastTimer.current) clearTimeout(toastTimer.current); }; }, [ session ]); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ if (!session) { setUnreadNotif(0); return; } const fetch = ()=>getUnreadCount().then((r)=>setUnreadNotif(r.count)).catch(()=>{}); fetch(); const timer = setInterval(fetch, 30000); return ()=>clearInterval(timer); }, [ session ]); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ if (!session) { setPlanTier(null); return; } getMyDashboard().then((d)=>setPlanTier(d.plan?.tier ?? null)).catch(()=>{}); }, [ session ]); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ const onScroll = ()=>{ if (!headerRef.current) return; if (window.scrollY > 40) { headerRef.current.classList.add('header-shrink'); } else { headerRef.current.classList.remove('header-shrink'); } }; window.addEventListener('scroll', onScroll); return ()=>window.removeEventListener('scroll', onScroll); }, []); return /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx("header", { ref: headerRef, className: "header-base bg-white border-b border-gray-200 sticky top-0 z-50 transition-all duration-300", children: /*#__PURE__*/ _jsxs("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: [ /*#__PURE__*/ _jsxs("div", { className: "flex items-center justify-between h-16 header-content transition-all duration-300", children: [ /*#__PURE__*/ _jsxs(Link, { href: "/", className: "flex items-center gap-2 shrink-0", children: [ /*#__PURE__*/ _jsx("img", { src: "/logo.png", alt: "CanHelp", className: "w-8 h-8 object-contain" }), /*#__PURE__*/ _jsx("span", { className: "logo-text text-2xl font-bold text-green-600 transition-all duration-300", children: "CanHelp" }) ] }), /*#__PURE__*/ _jsxs("nav", { className: "hidden md:flex items-center gap-5 ml-auto", children: [ isSpecialist ? /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx(Link, { href: "/tasks", className: navCls('/tasks'), children: t('nav.find_tasks') }), /*#__PURE__*/ _jsx(Link, { href: "/dashboard", className: navCls('/dashboard'), children: t('nav.dashboard') }) ] }) : /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx(Link, { href: "/tasks/new", className: navCls('/tasks/new', true), children: t('dashboard.new_task') }), " ", /*#__PURE__*/ _jsx(Link, { href: "/tasks", className: navCls('/tasks'), children: t('nav.tasks') }), " ", /*#__PURE__*/ _jsx(Link, { href: "/specialists", className: navCls('/specialists'), children: t('nav.specialists') }) ] }), /*#__PURE__*/ _jsx(Link, { href: "/pricing", className: navCls('/pricing', true), children: t('nav.pricing', 'Pricing') }), session ? /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs(Link, { href: "/notifications", className: "relative text-gray-600 hover:text-gray-900 flex items-center", children: [ /*#__PURE__*/ _jsx("svg", { className: `w-5 h-5 ${unreadNotif > 0 ? 'text-green-600' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75v-.7V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0" }) }), unreadNotif > 0 && /*#__PURE__*/ _jsx("span", { className: "absolute -top-1.5 -right-1.5 min-w-[16px] h-4 px-0.5 bg-red-500 text-white text-[10px] font-bold rounded-full flex items-center justify-center leading-none", children: unreadNotif > 99 ? '99+' : unreadNotif }) ] }), /*#__PURE__*/ _jsxs(Link, { href: "/chat", className: "relative text-gray-600 hover:text-gray-900 flex items-center", children: [ /*#__PURE__*/ _jsx("svg", { className: `w-5 h-5 ${unreadChat > 0 ? 'text-green-500' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 10h.01M12 10h.01M16 10h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z" }) }), unreadChat > 0 && /*#__PURE__*/ _jsx("span", { className: "absolute -top-1.5 -right-1.5 min-w-[16px] h-4 px-0.5 bg-green-500 text-white text-[10px] font-bold rounded-full flex items-center justify-center leading-none", children: unreadChat > 99 ? '99+' : unreadChat }) ] }), /*#__PURE__*/ _jsxs("div", { className: "relative", ref: profileRef, children: [ /*#__PURE__*/ _jsxs("button", { onClick: ()=>setProfileOpen(!profileOpen), className: "flex items-center gap-1.5 text-sm font-medium text-gray-600 hover:text-green-600", children: [ /*#__PURE__*/ _jsx("span", { className: "truncate max-w-[100px]", children: formatShortName(session.user.firstName, session.user.lastName, session.user.name) }), planTier === 'pro' && /*#__PURE__*/ _jsx("span", { className: "inline-flex items-center px-1.5 py-0.5 rounded-full text-[10px] font-bold bg-green-100 text-green-700 leading-none", children: "Pro" }), planTier === 'ultimate' && /*#__PURE__*/ _jsx("span", { className: "inline-flex items-center px-1.5 py-0.5 rounded-full text-[10px] font-bold bg-gradient-to-r from-amber-400 via-yellow-400 to-amber-400 text-gray-900 shadow-sm shadow-amber-300/50 leading-none", children: "★" }), /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19 9l-7 7-7-7" }) }) ] }), profileOpen && /*#__PURE__*/ _jsxs("div", { className: "absolute right-0 mt-2 w-52 bg-white border border-gray-200 rounded-xl shadow-lg py-1 z-50", children: [ isSpecialist ? /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs(Link, { href: "/tasks/new", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 4v16m8-8H4" }) }), t('nav.new_task') ] }), /*#__PURE__*/ _jsxs(Link, { href: "/specialists", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z" }) }), t('nav.specialists') ] }) ] }) : /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs(Link, { href: "/notifications", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: `w-4 h-4 shrink-0 ${unreadNotif > 0 ? 'text-green-600' : 'text-gray-400'}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75v-.7V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0" }) }), /*#__PURE__*/ _jsxs("span", { className: "flex items-center gap-1.5", children: [ t('nav.notifications'), unreadNotif > 0 && /*#__PURE__*/ _jsx("span", { className: "px-1.5 py-0.5 bg-red-500 text-white text-[10px] font-bold rounded-full leading-none", children: unreadNotif > 99 ? '99+' : unreadNotif }) ] }) ] }), /*#__PURE__*/ _jsxs(Link, { href: "/chat", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: `w-4 h-4 shrink-0 ${unreadChat > 0 ? 'text-green-500' : 'text-gray-400'}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 10h.01M12 10h.01M16 10h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z" }) }), /*#__PURE__*/ _jsxs("span", { className: "flex items-center gap-1.5", children: [ t('nav.chat'), unreadChat > 0 && /*#__PURE__*/ _jsx("span", { className: "px-1.5 py-0.5 bg-green-500 text-white text-[10px] font-bold rounded-full leading-none", children: unreadChat > 99 ? '99+' : unreadChat }) ] }) ] }), /*#__PURE__*/ _jsxs(Link, { href: "/dashboard", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" }) }), t('nav.dashboard') ] }) ] }), (isSpecialist || isAdmin) && /*#__PURE__*/ _jsxs(Link, { href: "/schedule", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" }) }), t('nav.schedule') ] }), isAdmin && /*#__PURE__*/ _jsxs(Link, { href: "/admin", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsxs("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: [ /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z" }), /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z" }) ] }), t('nav.admin') ] }), /*#__PURE__*/ _jsxs(Link, { href: "/profile", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z" }) }), t('nav.profile') ] }), /*#__PURE__*/ _jsxs(Link, { href: "/favorites", className: "flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50", onClick: ()=>setProfileOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z" }) }), t('nav.favorites') ] }), /*#__PURE__*/ _jsx("hr", { className: "my-1 border-gray-100" }), /*#__PURE__*/ _jsxs("button", { className: "w-full flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-green-50", onClick: ()=>{ setProfileOpen(false); setSupportOpen(true); }, children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M18.364 5.636l-3.536 3.536m0 5.656l3.536 3.536M9.172 9.172L5.636 5.636m3.536 9.192l-3.536 3.536M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-5 0a4 4 0 11-8 0 4 4 0 018 0z" }) }), t('support.title') ] }), /*#__PURE__*/ _jsx("hr", { className: "my-1 border-gray-100" }), /*#__PURE__*/ _jsxs("button", { className: "w-full flex items-center gap-2.5 px-4 py-2 text-sm text-red-500 hover:bg-red-50", onClick: ()=>{ setProfileOpen(false); signOut().then(()=>{ window.location.href = '/'; }); }, children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1" }) }), t('nav.logout') ] }) ] }) ] }) ] }) : /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx(Link, { href: "/login", className: "text-gray-600 hover:text-green-600 font-medium text-sm", children: t('nav.login') }), /*#__PURE__*/ _jsx(Link, { href: "/register", className: "bg-green-600 text-white px-4 py-2 rounded-lg hover:bg-green-700 font-medium text-sm", children: t('nav.register') }) ] }), /*#__PURE__*/ _jsx(LanguageSwitcher, {}) ] }), /*#__PURE__*/ _jsxs("div", { className: "md:hidden flex items-center gap-2", children: [ /*#__PURE__*/ _jsx(LanguageSwitcher, {}), /*#__PURE__*/ _jsx("button", { className: "p-2", onClick: ()=>setMenuOpen(!menuOpen), "aria-label": "Toggle menu", children: /*#__PURE__*/ _jsx("svg", { className: "w-5 h-5 text-gray-600", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: menuOpen ? /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6 18L18 6M6 6l12 12" }) : /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4 6h16M4 12h16M4 18h16" }) }) }) ] }) ] }), menuOpen && /*#__PURE__*/ _jsxs("div", { className: "md:hidden py-4 border-t border-gray-100 flex flex-col gap-3", children: [ isSpecialist ? /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs(Link, { href: "/tasks", className: mobileNavCls('/tasks'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" }) }), t('nav.find_tasks') ] }), /*#__PURE__*/ _jsxs(Link, { href: "/dashboard", className: mobileNavCls('/dashboard'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" }) }), t('nav.dashboard') ] }) ] }) : /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs(Link, { href: "/tasks/new", className: mobileNavCls('/tasks/new', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 4v16m8-8H4" }) }), t('nav.new_task') ] }), /*#__PURE__*/ _jsxs(Link, { href: "/tasks", className: mobileNavCls('/tasks'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2" }) }), t('nav.tasks') ] }), /*#__PURE__*/ _jsxs(Link, { href: "/specialists", className: mobileNavCls('/specialists'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z" }) }), t('nav.specialists') ] }) ] }), session ? /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs(Link, { href: "/chat", className: mobileNavCls('/chat', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: `w-4 h-4 shrink-0 ${unreadChat > 0 ? 'text-green-500' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 10h.01M12 10h.01M16 10h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z" }) }), t('nav.chat'), unreadChat > 0 && /*#__PURE__*/ _jsx("span", { className: "ml-1 px-1.5 py-0.5 bg-green-500 text-white text-[10px] font-bold rounded-full", children: unreadChat }) ] }), isSpecialist ? /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs(Link, { href: "/tasks/new", className: mobileNavCls('/tasks/new', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 4v16m8-8H4" }) }), t('nav.new_task') ] }), /*#__PURE__*/ _jsxs(Link, { href: "/specialists", className: mobileNavCls('/specialists'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z" }) }), t('nav.specialists') ] }) ] }) : /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsxs(Link, { href: "/notifications", className: mobileNavCls('/notifications', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: `w-4 h-4 shrink-0 ${unreadNotif > 0 ? 'text-green-600' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75v-.7V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0" }) }), /*#__PURE__*/ _jsxs("span", { className: "flex items-center gap-1.5", children: [ t('nav.notifications'), unreadNotif > 0 && /*#__PURE__*/ _jsx("span", { className: "px-1.5 py-0.5 bg-red-500 text-white text-[10px] font-bold rounded-full", children: unreadNotif > 99 ? '99+' : unreadNotif }) ] }) ] }), /*#__PURE__*/ _jsxs(Link, { href: "/dashboard", className: mobileNavCls('/dashboard'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" }) }), t('nav.dashboard') ] }) ] }), /*#__PURE__*/ _jsxs(Link, { href: "/favorites", className: mobileNavCls('/favorites', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z" }) }), t('nav.favorites') ] }), (isSpecialist || isAdmin) && /*#__PURE__*/ _jsxs(Link, { href: "/schedule", className: mobileNavCls('/schedule', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" }) }), t('nav.schedule') ] }), isAdmin && /*#__PURE__*/ _jsxs(Link, { href: "/admin", className: mobileNavCls('/admin'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsxs("svg", { className: "w-4 h-4 text-gray-400", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: [ /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z" }), /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z" }) ] }), t('nav.admin') ] }), /*#__PURE__*/ _jsxs(Link, { href: "/profile", className: mobileNavCls('/profile', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4 text-gray-400", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z" }) }), t('nav.profile') ] }), /*#__PURE__*/ _jsxs("button", { onClick: ()=>{ setMenuOpen(false); signOut().then(()=>{ window.location.href = '/'; }); }, className: "flex items-center gap-2 text-left text-red-500 py-1 font-medium", children: [ /*#__PURE__*/ _jsx("svg", { className: "w-4 h-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1" }) }), t('nav.logout') ] }) ] }) : /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx(Link, { href: "/login", className: "text-gray-700 font-medium py-1", onClick: ()=>setMenuOpen(false), children: t('nav.login') }), /*#__PURE__*/ _jsx(Link, { href: "/register", className: "text-green-600 font-medium py-1", onClick: ()=>setMenuOpen(false), children: t('nav.register') }) ] }) ] }) ] }) }), msgToast && /*#__PURE__*/ _jsx("div", { className: "fixed bottom-5 right-5 z-[200] max-w-sm w-full", children: /*#__PURE__*/ _jsxs("div", { className: "bg-white border border-gray-200 rounded-xl shadow-xl p-4 flex items-start gap-3 animate-fade-in", children: [ /*#__PURE__*/ _jsx("span", { className: "text-2xl shrink-0", children: "\uD83D\uDCAC" }), /*#__PURE__*/ _jsxs("div", { className: "flex-1 min-w-0", children: [ /*#__PURE__*/ _jsx("p", { className: "font-semibold text-gray-900 text-sm", children: t('chat.toast_title') }), /*#__PURE__*/ _jsx("p", { className: "text-xs text-gray-500 truncate mt-0.5", children: msgToast.body }) ] }), /*#__PURE__*/ _jsxs("div", { className: "flex flex-col items-end gap-2 shrink-0", children: [ /*#__PURE__*/ _jsx("button", { onClick: ()=>setMsgToast(null), className: "text-gray-400 hover:text-gray-600 text-lg leading-none", "aria-label": "close", children: "\xd7" }), /*#__PURE__*/ _jsx(Link, { href: `/chat?room=${msgToast.roomId}`, onClick: ()=>setMsgToast(null), className: "text-xs text-green-600 hover:underline font-medium", children: t('chat.toast_open') }) ] }) ] }) }), supportOpen && /*#__PURE__*/ _jsx(SupportModal, { onClose: ()=>setSupportOpen(false) }) ] }); } Y60145undefined147175undefined177233undefined235283undefined285329undefined331381undefined383436undefined438489undefined491549undefined551588undefined590649undefined651685undefined708714__WEBPACK_MODULE_REFERENCE__12_5b2264656661756c74225d_call_directImport_asiSafe1__._undefined732773 trueundefined778796/*require.resolve*/undefined798813null /* weak dependency, without id */undefined9771007"https://api.canhelp.gr"undefined101210340undefined10371043undefined10831091__WEBPACK_MODULE_REFERENCE__2_5b22757365526f75746572225d_call_directImport_asiSafe1__._undefined11171127__WEBPACK_MODULE_REFERENCE__2_5b22757365506174686e616d65225d_call_directImport_asiSafe1__._undefined11621171__WEBPACK_MODULE_REFERENCE__3_5b2275736553657373696f6e225d_call_directImport_asiSafe1__._undefined12021210__WEBPACK_MODULE_REFERENCE__4_5b227573654c6f63616c65225d_call_directImport_asiSafe1__._undefined12511258__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined13101317__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined13691376__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined14281435__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined14811488__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined15301537__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined15821589__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined16211626__WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._undefined16571662__WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._undefined16941699__WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._undefined17321737__WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._undefined18051813__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined19901998__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined24102425__WEBPACK_MODULE_REFERENCE__11_5b22757365456666656374697665526f6c65225d_call_directImport_asiSafe1__._undefined30243032__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined31813189__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined32503251__WEBPACK_MODULE_REFERENCE__10_5b22696f225d_call_directImport_asiSafe1__._undefined39533961__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined40804093__WEBPACK_MODULE_REFERENCE__9_5b22676574556e72656164436f756e74225d_call_directImport_asiSafe1__._undefined43424350__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined44514464__WEBPACK_MODULE_REFERENCE__9_5b226765744d7944617368626f617264225d_call_directImport_asiSafe1__._undefined46164624__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined50845088__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined50905098__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined51495152__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined53605364__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined55185522__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined57435747__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined57495752__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined59895992__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined63036306__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined66756679__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined68996903__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined69056913__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined70367039__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined70417044__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined73947397__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined73997402__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined78017805__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined78077815__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined79387941__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined79437946__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined83828385__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined83878390__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined88038806__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined88088811__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined92559258__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined92609263__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined96019605__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined96079615__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined97389742__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined97449747__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined1008910092__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1063010633__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1131311316__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1189411898__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1190011903__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined1223612239__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1277612779__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1340613409__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1398713991__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1428014284__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1470614709__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1490414918__WEBPACK_MODULE_REFERENCE__5_5b22666f726d617453686f72744e616d65225d_call_directImport_asiSafe1__._undefined1515415157__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1562315626__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1613916142__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1669216695__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1733717341__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1768117685__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1768717695__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined1786617870__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1787217875__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined1843518438__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1910019103__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1995719961__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1996319966__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined2052820531__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2119321196__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2230622310__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2231222320__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined2249122495__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2249722500__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined2306423067__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2377123774__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2457924583__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2504825051__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2589425898__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2590025903__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined2645826461__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2716427167__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2792027924__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2837928382__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2922529229__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2923129234__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined2979429797__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3045930462__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3160531609__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3161131614__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined3213332136__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3275032753__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3361833622__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3362433627__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined3414334147__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3484334846__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3582635829__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3672036724__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3672636729__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined3724737250__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3786437867__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3870138705__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3870738710__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined3923039233__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3984739850__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4074240745__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4100341007__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4169541698__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4231242315__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4324443247__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4350543509__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4393543941__WEBPACK_MODULE_REFERENCE__3_5b227369676e4f7574225d_call_directImport_asiSafe1__._undefined4437344376__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4497644979__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4608646090__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4609246100__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined4622346226__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4622846231__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined4661646619__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4662146624__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined4712547128__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4713047145__WEBPACK_MODULE_REFERENCE__8_5b224c616e67756167655377697463686572225d_directImport_asiSafe1__._undefined4727247276__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4747347476__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4747847493__WEBPACK_MODULE_REFERENCE__8_5b224c616e67756167655377697463686572225d_directImport_asiSafe1__._undefined4755547558__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4785647859__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4830548308__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4861848621__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4918949193__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4940749411__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4941349421__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined4952849532__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4953449537__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined4987649879__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5033550338__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5093550939__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5094150944__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5129151294__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5175051753__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5248452488__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5249052498__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined5260552609__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5261152614__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5296752970__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5342653429__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5399553999__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5400154004__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5434354346__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5480254805__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5548155485__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5548755490__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5584155844__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5630056303__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5713457138__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5714057148__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined5725557259__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5726157264__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5760757610__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5810858111__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5875358756__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5919559199__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5920159209__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined5933259336__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5933859341__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5973459737__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6024160244__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6088260886__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6088860891__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6128261285__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6178961792__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6266262666__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6266862676__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined6279962803__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6280562808__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6320963212__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6375963762__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6442364427__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6479664799__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6543765441__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6544365446__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6583365836__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6634066343__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6719367197__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6719967202__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6755567558__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6801468017__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6872268726__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6872868731__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6908269085__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6954669549__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7019870202__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7020470207__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined7054670550__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7106971072__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7193271935__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7258672590__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7259272595__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined7294472947__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7340873411__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7402974033__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7422274228__WEBPACK_MODULE_REFERENCE__3_5b227369676e4f7574225d_call_directImport_asiSafe1__._undefined7466274665__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7511275115__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7578875792__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7579475802__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined7590975912__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7591475917__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined7631576318__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7632076323__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined7689876901__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7702977033__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7724477247__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7743877442__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7759677599__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7784477847__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7813578139__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7831778320__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7870178704__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7870678709__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined7921579218__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefinedy&93176(0,app_dynamic["default"])undefined494580(0,navigation.useRouter)undefined606696(0,navigation.usePathname)undefined731819(0,auth/* useSession */.wV)undefined850936(0,context_locale/* useLocale */.Y)undefined9771061(0,react.useState)undefined11131197(0,react.useState)undefined12491333(0,react.useState)undefined13851469(0,react.useState)undefined15151599(0,react.useState)undefined16411725(0,react.useState)undefined17701854(0,react.useState)undefined18861966(0,react.useRef)undefined19972077(0,react.useRef)undefined21092189(0,react.useRef)undefined22222302(0,react.useRef)undefined23702456(0,react.useEffect)undefined26332719(0,react.useEffect)undefined31313232useEffectiveRoleundefined38313917(0,react.useEffect)undefined40664152(0,react.useEffect)undefined42134286(0,esm_debug.io)undefined49885074(0,react.useEffect)undefined51935289(0,api/* getUnreadCount */.$M)undefined55385624(0,react.useEffect)undefined57255821(0,api/* getMyDashboard */.H)undefined59736059(0,react.useEffect)undefined65196595(0,react_jsx_runtime.jsxs)undefined65976676react_jsx_runtime.Fragmentundefined67276801(0,react_jsx_runtime.jsx)undefined70097085(0,react_jsx_runtime.jsxs)undefined72397315(0,react_jsx_runtime.jsxs)undefined75367612(0,react_jsx_runtime.jsxs)undefined76147691(link_default())undefined79288002(0,react_jsx_runtime.jsx)undefined83138387(0,react_jsx_runtime.jsx)undefined87568832(0,react_jsx_runtime.jsxs)undefined90529128(0,react_jsx_runtime.jsxs)undefined91309209react_jsx_runtime.Fragmentundefined93329406(0,react_jsx_runtime.jsx)undefined94089485(link_default())undefined98359909(0,react_jsx_runtime.jsx)undefined99119988(link_default())undefined1038710463(0,react_jsx_runtime.jsxs)undefined1046510544react_jsx_runtime.Fragmentundefined1066710741(0,react_jsx_runtime.jsx)undefined1074310820(link_default())undefined1125611330(0,react_jsx_runtime.jsx)undefined1133211409(link_default())undefined1182211896(0,react_jsx_runtime.jsx)undefined1189811975(link_default())undefined1241912493(0,react_jsx_runtime.jsx)undefined1249512572(link_default())undefined1291012986(0,react_jsx_runtime.jsxs)undefined1298813067react_jsx_runtime.Fragmentundefined1319013266(0,react_jsx_runtime.jsxs)undefined1326813345(link_default())undefined1368713761(0,react_jsx_runtime.jsx)undefined1429914373(0,react_jsx_runtime.jsx)undefined1505315127(0,react_jsx_runtime.jsx)undefined1570515781(0,react_jsx_runtime.jsxs)undefined1578315860(link_default())undefined1619316267(0,react_jsx_runtime.jsx)undefined1680416878(0,react_jsx_runtime.jsx)undefined1750517579(0,react_jsx_runtime.jsx)undefined1815718233(0,react_jsx_runtime.jsxs)undefined1852218598(0,react_jsx_runtime.jsxs)undefined1902019094(0,react_jsx_runtime.jsx)undefined1928919387(0,formatName/* formatShortName */.H)undefined1962319697(0,react_jsx_runtime.jsx)undefined2016320237(0,react_jsx_runtime.jsx)undefined2075020824(0,react_jsx_runtime.jsx)undefined2137421448(0,react_jsx_runtime.jsx)undefined2209022166(0,react_jsx_runtime.jsxs)undefined2250622582(0,react_jsx_runtime.jsxs)undefined2258422663react_jsx_runtime.Fragmentundefined2283422910(0,react_jsx_runtime.jsxs)undefined2291222989(link_default())undefined2354923623(0,react_jsx_runtime.jsx)undefined2428524359(0,react_jsx_runtime.jsx)undefined2521325289(0,react_jsx_runtime.jsxs)undefined2529125368(link_default())undefined2593026004(0,react_jsx_runtime.jsx)undefined2666626740(0,react_jsx_runtime.jsx)undefined2785027926(0,react_jsx_runtime.jsxs)undefined2792828007react_jsx_runtime.Fragmentundefined2817828254(0,react_jsx_runtime.jsxs)undefined2825628333(link_default())undefined2889728971(0,react_jsx_runtime.jsx)undefined2967529749(0,react_jsx_runtime.jsx)undefined3055430630(0,react_jsx_runtime.jsxs)undefined3109531169(0,react_jsx_runtime.jsx)undefined3201232088(0,react_jsx_runtime.jsxs)undefined3209032167(link_default())undefined3272232796(0,react_jsx_runtime.jsx)undefined3349933573(0,react_jsx_runtime.jsx)undefined3432634402(0,react_jsx_runtime.jsxs)undefined3485734931(0,react_jsx_runtime.jsx)undefined3577435850(0,react_jsx_runtime.jsxs)undefined3585235929(link_default())undefined3648936563(0,react_jsx_runtime.jsx)undefined3722537299(0,react_jsx_runtime.jsx)undefined3844238518(0,react_jsx_runtime.jsxs)undefined3852038597(link_default())undefined3911639190(0,react_jsx_runtime.jsx)undefined3980439878(0,react_jsx_runtime.jsx)undefined4074340819(0,react_jsx_runtime.jsxs)undefined4082140898(link_default())undefined4141441490(0,react_jsx_runtime.jsxs)undefined4218642260(0,react_jsx_runtime.jsx)undefined4324043314(0,react_jsx_runtime.jsx)undefined4420544281(0,react_jsx_runtime.jsxs)undefined4428344360(link_default())undefined4487844952(0,react_jsx_runtime.jsx)undefined4556645640(0,react_jsx_runtime.jsx)undefined4647446550(0,react_jsx_runtime.jsxs)undefined4655246629(link_default())undefined4714947223(0,react_jsx_runtime.jsx)undefined4783747911(0,react_jsx_runtime.jsx)undefined4880348877(0,react_jsx_runtime.jsx)undefined4913549211(0,react_jsx_runtime.jsxs)undefined4989949973(0,react_jsx_runtime.jsx)undefined5058750661(0,react_jsx_runtime.jsx)undefined5159051664(0,react_jsx_runtime.jsx)undefined5192251998(0,react_jsx_runtime.jsxs)undefined5242452506(0,auth/* signOut */.CI)undefined5293853012(0,react_jsx_runtime.jsx)undefined5361253686(0,react_jsx_runtime.jsx)undefined5479354869(0,react_jsx_runtime.jsxs)undefined5487154950react_jsx_runtime.Fragmentundefined5507355147(0,react_jsx_runtime.jsx)undefined5514955226(link_default())undefined5561155685(0,react_jsx_runtime.jsx)undefined5568755764(link_default())undefined5626556339(0,react_jsx_runtime.jsx)undefined5634156436LanguageSwitcherundefined5656356639(0,react_jsx_runtime.jsxs)undefined5683656910(0,react_jsx_runtime.jsx)undefined5691257007LanguageSwitcherundefined5706957143(0,react_jsx_runtime.jsx)undefined5744157515(0,react_jsx_runtime.jsx)undefined5796158035(0,react_jsx_runtime.jsx)undefined5834558419(0,react_jsx_runtime.jsx)undefined5898759063(0,react_jsx_runtime.jsxs)undefined5927759353(0,react_jsx_runtime.jsxs)undefined5935559434react_jsx_runtime.Fragmentundefined5954159617(0,react_jsx_runtime.jsxs)undefined5961959696(link_default())undefined6003560109(0,react_jsx_runtime.jsx)undefined6056560639(0,react_jsx_runtime.jsx)undefined6123661312(0,react_jsx_runtime.jsxs)undefined6131461391(link_default())undefined6173861812(0,react_jsx_runtime.jsx)undefined6226862342(0,react_jsx_runtime.jsx)undefined6307363149(0,react_jsx_runtime.jsxs)undefined6315163230react_jsx_runtime.Fragmentundefined6333763413(0,react_jsx_runtime.jsxs)undefined6341563492(link_default())undefined6384563919(0,react_jsx_runtime.jsx)undefined6437564449(0,react_jsx_runtime.jsx)undefined6501565091(0,react_jsx_runtime.jsxs)undefined6509365170(link_default())undefined6550965583(0,react_jsx_runtime.jsx)undefined6603966113(0,react_jsx_runtime.jsx)undefined6678966865(0,react_jsx_runtime.jsxs)undefined6686766944(link_default())undefined6729567369(0,react_jsx_runtime.jsx)undefined6782567899(0,react_jsx_runtime.jsx)undefined6873068806(0,react_jsx_runtime.jsxs)undefined6880868887react_jsx_runtime.Fragmentundefined6899469070(0,react_jsx_runtime.jsxs)undefined6907269149(link_default())undefined6949269566(0,react_jsx_runtime.jsx)undefined7006470138(0,react_jsx_runtime.jsx)undefined7078070854(0,react_jsx_runtime.jsx)undefined7129371369(0,react_jsx_runtime.jsxs)undefined7137171450react_jsx_runtime.Fragmentundefined7157371649(0,react_jsx_runtime.jsxs)undefined7165171728(link_default())undefined7212172195(0,react_jsx_runtime.jsx)undefined7269972773(0,react_jsx_runtime.jsx)undefined7341173487(0,react_jsx_runtime.jsxs)undefined7348973566(link_default())undefined7395774031(0,react_jsx_runtime.jsx)undefined7453574609(0,react_jsx_runtime.jsx)undefined7547975555(0,react_jsx_runtime.jsxs)undefined7555775636react_jsx_runtime.Fragmentundefined7575975835(0,react_jsx_runtime.jsxs)undefined7583775914(link_default())undefined7631576389(0,react_jsx_runtime.jsx)undefined7693677010(0,react_jsx_runtime.jsx)undefined7767177747(0,react_jsx_runtime.jsxs)undefined7811678190(0,react_jsx_runtime.jsx)undefined7882878904(0,react_jsx_runtime.jsxs)undefined7890678983(link_default())undefined7937079444(0,react_jsx_runtime.jsx)undefined7994880022(0,react_jsx_runtime.jsx)undefined8087280948(0,react_jsx_runtime.jsxs)undefined8095081027(link_default())undefined8138081454(0,react_jsx_runtime.jsx)undefined8191081984(0,react_jsx_runtime.jsx)undefined8268982765(0,react_jsx_runtime.jsxs)undefined8276782844(link_default())undefined8319583269(0,react_jsx_runtime.jsx)undefined8373083804(0,react_jsx_runtime.jsx)undefined8445384529(0,react_jsx_runtime.jsxs)undefined8453184608(link_default())undefined8494785023(0,react_jsx_runtime.jsxs)undefined8554285616(0,react_jsx_runtime.jsx)undefined8647686550(0,react_jsx_runtime.jsx)undefined8720187277(0,react_jsx_runtime.jsxs)undefined8727987356(link_default())undefined8770587779(0,react_jsx_runtime.jsx)undefined8824088314(0,react_jsx_runtime.jsx)undefined8893289008(0,react_jsx_runtime.jsxs)undefined8919789279(0,auth/* signOut */.CI)undefined8971389787(0,react_jsx_runtime.jsx)undefined9023490308(0,react_jsx_runtime.jsx)undefined9098191057(0,react_jsx_runtime.jsxs)undefined9105991138react_jsx_runtime.Fragmentundefined9124591319(0,react_jsx_runtime.jsx)undefined9132191398(link_default())undefined9179691870(0,react_jsx_runtime.jsx)undefined9187291949(link_default())undefined9252492598(0,react_jsx_runtime.jsx)undefined9272692802(0,react_jsx_runtime.jsxs)undefined9301393087(0,react_jsx_runtime.jsx)undefined9327893354(0,react_jsx_runtime.jsxs)undefined9350893582(0,react_jsx_runtime.jsx)undefined9382793901(0,react_jsx_runtime.jsx)undefined9418994265(0,react_jsx_runtime.jsxs)undefined9444394517(0,react_jsx_runtime.jsx)undefined9489894972(0,react_jsx_runtime.jsx)undefined9497495051(link_default())undefined9555795631(0,react_jsx_runtime.jsx)undefined, /***/ 15043:  // EXPORTS __webpack_require__.d(__webpack_exports__, { Footer: () => (/* binding */ Footer) }); // EXTERNAL MODULE: ../../node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.js var react_jsx_runtime = __webpack_require__(78157); // EXTERNAL MODULE: ./src/context/locale.tsx var locale = __webpack_require__(96484); // EXTERNAL MODULE: ../../node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js var react = __webpack_require__(31768); // EXTERNAL MODULE: ../../node_modules/next/dist/client/app-dir/link.js var app_dir_link = __webpack_require__(94496); var link_default = /*#__PURE__*/__webpack_require__.n(app_dir_link); ;// ./src/components/SocialIcons.tsx qimport { jsx as _jsx } from "react/jsx-runtime"; const ICONS = [ { key: 'telegram', label: 'Telegram', hoverClass: 'hover:text-sky-500', svg: '' }, { key: 'instagram', label: 'Instagram', hoverClass: 'hover:text-pink-500', svg: '' }, { key: 'facebook', label: 'Facebook', hoverClass: 'hover:text-green-600', svg: '' }, { key: 'twitter', label: 'X', hoverClass: 'hover:text-gray-900', svg: '' }, { key: 'youtube', label: 'YouTube', hoverClass: 'hover:text-red-600', svg: '' }, { key: 'tiktok', label: 'TikTok', hoverClass: 'hover:text-black', svg: '' }, { key: 'whatsapp', label: 'WhatsApp', hoverClass: 'hover:text-green-500', svg: '' }, { key: 'viber', label: 'Viber', hoverClass: 'hover:text-purple-600', svg: '' } ]; export function SocialIcons({ className = '', links }) { const active = ICONS.filter(({ key })=>links?.[key]); if (active.length === 0) return null; return /*#__PURE__*/ _jsx("div", { className: `flex gap-4 flex-wrap ${className}`, children: active.map(({ key, label, hoverClass, svg })=>/*#__PURE__*/ _jsx("a", { href: links[key], target: "_blank", rel: "noopener noreferrer", "aria-label": label, className: `text-gray-500 transition ${hoverClass}`, children: /*#__PURE__*/ _jsx("svg", { width: "22", height: "22", viewBox: "0 0 24 24", fill: "currentColor", dangerouslySetInnerHTML: { __html: svg } }) }, key)) }); } 1047undefined63616367undefined65436546__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined66916694__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined69616964__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined64886562(0,react_jsx_runtime.jsx)undefined67076781(0,react_jsx_runtime.jsx)undefined70487122(0,react_jsx_runtime.jsx)undefinedRawSource! ;// ./src/components/Footer.tsx /* __next_internal_client_entry_do_not_use__ Footer auto */ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; import { useLocale } from '@/context/locale'; import { useEffect, useState } from 'react'; import Link from 'next/link'; import { SocialIcons } from './SocialIcons'; const API = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:4000'; export function Footer() { const { t } = useLocale(); const year = new Date().getFullYear(); const [socialLinks, setSocialLinks] = useState({}); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ fetch(`${API}/api/admin/social-public`).then((r)=>r.ok ? r.json() : {}).then((kv)=>{ const links = {}; for (const [k, v] of Object.entries(kv)){ if (v) links[k.replace('social.', '')] = v; } setSocialLinks(links); }).catch(()=>{}); }, []); return /*#__PURE__*/ _jsx("footer", { className: "bg-white border-t border-gray-200 mt-16", children: /*#__PURE__*/ _jsxs("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12", children: [ /*#__PURE__*/ _jsxs("div", { className: "flex flex-col md:flex-row justify-between items-start gap-10", children: [ /*#__PURE__*/ _jsxs("div", { className: "flex-1 min-w-[200px] flex flex-col items-start", children: [ /*#__PURE__*/ _jsx("span", { className: "logo-text text-3xl text-green-700 font-bold mb-2", children: "CanHelp" }), /*#__PURE__*/ _jsx("p", { className: "text-base text-gray-600 mb-4", children: t('footer.slogan') }) ] }), /*#__PURE__*/ _jsxs("div", { className: "flex-1 min-w-[180px]", children: [ /*#__PURE__*/ _jsx("h3", { className: "text-lg font-semibold text-gray-900 mb-3", children: t('footer.links') }), /*#__PURE__*/ _jsxs("ul", { className: "space-y-2", children: [ /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/", className: "hover:text-green-600 transition", children: t('nav.home') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/tasks", className: "hover:text-green-600 transition", children: t('nav.tasks') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/specialists", className: "hover:text-green-600 transition", children: t('nav.specialists') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/pricing", className: "hover:text-green-600 transition", children: t('nav.pricing') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/support", className: "hover:text-green-600 transition", children: t('support.title') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/privacy", className: "hover:text-green-600 transition", children: t('nav.privacy') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/delete-account", className: "hover:text-red-500 transition", children: t('nav.delete_account') }) }) ] }) ] }), /*#__PURE__*/ _jsxs("div", { className: "flex-1 min-w-[180px]", children: [ /*#__PURE__*/ _jsx("h3", { className: "text-lg font-semibold text-gray-900 mb-3", children: t('footer.socials') }), /*#__PURE__*/ _jsx("p", { className: "text-gray-500 text-sm mb-2", children: "info@canhelp.gr" }), /*#__PURE__*/ _jsx(SocialIcons, { className: "mt-2", links: socialLinks }) ] }) ] }), /*#__PURE__*/ _jsxs("div", { className: "mt-10 border-t border-gray-100 pt-6 text-center text-gray-400 text-sm", children: [ "\xa9 ", year, " CanHelp. ", t('footer.rights') ] }) ] }) }); } 60122undefined124168undefined170213undefined215243undefined245288undefined302332"https://api.canhelp.gr"undefined3373590undefined362368undefined407415__WEBPACK_MODULE_REFERENCE__1_5b227573654c6f63616c65225d_call_directImport_asiSafe1__._undefined505512__WEBPACK_MODULE_REFERENCE__2_5b227573655374617465225d_call_directImport_asiSafe1__._undefined574582__WEBPACK_MODULE_REFERENCE__2_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined939942__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined10501054__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined11901194__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined13701374__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined15601563__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined18121815__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined20992103__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined22632266__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined25132517__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined26892692__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined27702773__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined27752778__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined31533156__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined32343237__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined32393242__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined36233626__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined37043707__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined37093712__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined41054108__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined41864189__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined41914194__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined45794582__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined46604663__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined46654668__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined50555058__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined51365139__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined51415144__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined55295532__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined56105613__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined56155618__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined61296133__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined62936296__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined65456548__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined67806783__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined67856795__WEBPACK_MODULE_REFERENCE__4_5b22536f6369616c49636f6e73225d_directImport_asiSafe1__._undefined70747078__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined 146232(0,locale/* useLocale */.Y)undefined322406(0,react.useState)undefined468554(0,react.useEffect)undefined911985(0,react_jsx_runtime.jsx)undefined10931169(0,react_jsx_runtime.jsxs)undefined13051381(0,react_jsx_runtime.jsxs)undefined15571633(0,react_jsx_runtime.jsxs)undefined18191893(0,react_jsx_runtime.jsx)undefined21422216(0,react_jsx_runtime.jsx)undefined25002576(0,react_jsx_runtime.jsxs)undefined27362810(0,react_jsx_runtime.jsx)undefined30573133(0,react_jsx_runtime.jsxs)undefined33053379(0,react_jsx_runtime.jsx)undefined34573531(0,react_jsx_runtime.jsx)undefined35333610(link_default())undefined39854059(0,react_jsx_runtime.jsx)undefined41374211(0,react_jsx_runtime.jsx)undefined42134290(link_default())undefined46714745(0,react_jsx_runtime.jsx)undefined48234897(0,react_jsx_runtime.jsx)undefined48994976(link_default())undefined53695443(0,react_jsx_runtime.jsx)undefined55215595(0,react_jsx_runtime.jsx)undefined55975674(link_default())undefined60596133(0,react_jsx_runtime.jsx)undefined62116285(0,react_jsx_runtime.jsx)undefined62876364(link_default())undefined67516825(0,react_jsx_runtime.jsx)undefined69036977(0,react_jsx_runtime.jsx)undefined69797056(link_default())undefined74417515(0,react_jsx_runtime.jsx)undefined75937667(0,react_jsx_runtime.jsx)undefined76697746(link_default())undefined82578333(0,react_jsx_runtime.jsxs)undefined84938567(0,react_jsx_runtime.jsx)undefined88168890(0,react_jsx_runtime.jsx)undefined91229196(0,react_jsx_runtime.jsx)undefined91989283SocialIconsundefined95629638(0,react_jsx_runtime.jsxs)undefined, /***/ 20138: /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ LocaleProvider: () => (/* binding */ LocaleProvider) /* harmony export */ }); /* unused harmony export useLocale */ /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25459); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__); // This file is generated by the Webpack next-flight-loader. import { registerClientReference } from "react-server-dom-webpack/server"; export const LocaleProvider = registerClientReference( function() { throw new Error("Attempted to call LocaleProvider() from the server but LocaleProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/context/locale.tsx", "LocaleProvider", );export const useLocale = registerClientReference( function() { throw new Error("Attempted to call useLocale() from the server but useLocale is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/context/locale.tsx", "useLocale", );61134undefined136142undefined166188(0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)undefined527533undefined552574(0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)undefined, /***/ 21046: /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ScrollToTopButton: () => (/* binding */ ScrollToTopButton) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(78157); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(31768); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* __next_internal_client_entry_do_not_use__ ScrollToTopButton auto */ import { jsx as _jsx } from "react/jsx-runtime"; import { useEffect, useState } from 'react'; export function ScrollToTopButton() { const [visible, setVisible] = useState(false); process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ const onScroll = ()=>{ setVisible(window.scrollY > 200); }; window.addEventListener('scroll', onScroll); return ()=>window.removeEventListener('scroll', onScroll); }, []); return /*#__PURE__*/ _jsx("button", { className: `scroll-to-top-btn${visible ? ' visible' : ''}`, "aria-label": "Back to top", onClick: ()=>window.scrollTo({ top: 0, behavior: 'smooth' }), children: /*#__PURE__*/ _jsx("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /*#__PURE__*/ _jsx("path", { d: "M10 16V4M10 4L4 10M10 4L16 10", stroke: "white", strokeWidth: "2.8", strokeLinecap: "round", strokeLinejoin: "round" }) }) }); } z71118undefined120163undefined165171undefined237244(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined309317(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined570573(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined838841(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined10481051(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined, /***/ 28222: /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ AdminRolePreview: () => (/* binding */ AdminRolePreview) /* harmony export */ }); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25459); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__); $// This file is generated by the Webpack next-flight-loader. import { registerClientReference } from "react-server-dom-webpack/server"; export const AdminRolePreview = registerClientReference( function() { throw new Error("Attempted to call AdminRolePreview() from the server but AdminRolePreview is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/components/AdminRolePreview.tsx", "AdminRolePreview", );61134undefined136142undefined168190(0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)undefined, /***/ 29072: V/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { import(/* webpackMode: "eager", webpackExports: ["AdminRolePreview"] */ "/opt/canhelp/apps/web/src/components/AdminRolePreview.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["Footer"] */ "/opt/canhelp/apps/web/src/components/Footer.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["Header"] */ "/opt/canhelp/apps/web/src/components/Header.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["ScrollToTopButton"] */ "/opt/canhelp/apps/web/src/components/ScrollToTopButton.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["LocaleProvider"] */ "/opt/canhelp/apps/web/src/context/locale.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["LocationProvider"] */ "/opt/canhelp/apps/web/src/context/location.tsx"); 0131Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 28222))undefined136247Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 39348))undefined252363Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 67674))undefined368501Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 32948))undefined506622Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 20138))undefined627747Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 1697))undefined, /***/ 30460: , /***/ 32948: /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ScrollToTopButton: () => (/* binding */ ScrollToTopButton) /* harmony export */ }); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25459); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__); )// This file is generated by the Webpack next-flight-loader. import { registerClientReference } from "react-server-dom-webpack/server"; export const ScrollToTopButton = registerClientReference( function() { throw new Error("Attempted to call ScrollToTopButton() from the server but ScrollToTopButton is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/components/ScrollToTopButton.tsx", "ScrollToTopButton", );61134undefined136142undefined169191(0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)undefined, /***/ 33506: __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ NotFound) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5939); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3498); /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_1__); import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; import Link from 'next/link'; export default function NotFound() { return /*#__PURE__*/ _jsx("div", { className: "min-h-screen flex items-center justify-center text-center px-4", children: /*#__PURE__*/ _jsxs("div", { children: [ /*#__PURE__*/ _jsx("h1", { className: "text-8xl font-bold text-green-600 mb-4", children: "404" }), /*#__PURE__*/ _jsx("p", { className: "text-xl text-gray-700 mb-6", children: "Η σελίδα δεν βρέθηκε" }), /*#__PURE__*/ _jsx(Link, { href: "/", className: "bg-green-600 text-white px-6 py-3 rounded-xl font-semibold hover:bg-green-700", children: "Επιστροφή στην Αρχική" }) ] }) }); } 062undefined6492undefined94108undefined156159(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined287291(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined356359(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined528531(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined704707(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined709712(next_link__WEBPACK_IMPORTED_MODULE_1___default())undefined, /***/ 38800: 0131Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 12696))undefined136247Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 15043))undefined252363Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 14365))undefined368501Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 21046))undefined506622Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 96484))undefined627747Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 56003))undefined, /***/ 39348: /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Footer: () => (/* binding */ Footer) /* harmony export */ }); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25459); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__); // This file is generated by the Webpack next-flight-loader. import { registerClientReference } from "react-server-dom-webpack/server"; export const Footer = registerClientReference( function() { throw new Error("Attempted to call Footer() from the server but Footer is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/components/Footer.tsx", "Footer", );61134undefined136142undefined158180(0,react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__.registerClientReference)undefined, /***/ 45639: b import { fillMetadataSegment } from 'next/dist/lib/metadata/get-metadata-route' export default async (props) => { const imageData = {"type":"image/png","sizes":"1024x1024"} const imageUrl = fillMetadataSegment(".", await props.params, "apple-icon.png") return [{ ...imageData, url: imageUrl + "?5d298b9734cd2682", }] }280undefined8599/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (undefined8599undefined203221(0,next_dist_lib_metadata_get_metadata_route__WEBPACK_IMPORTED_MODULE_0__.fillMetadataSegment)undefined354353.5);undefined, /***/ 47570: W, /***/ 48178: /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ E: () => (/* binding */ shortName), /* harmony export */ H: () => (/* binding */ formatShortName) /* harmony export */ }); $/** * Shortens the last name to first letter + period. * "Иван Петров" → "Иван П." * Works with a pre-composed full name string. */ export function shortName(fullName) { if (!fullName?.trim()) return '—'; const parts = fullName.trim().split(/\s+/); if (parts.length < 2 || !parts[1]) return parts[0]; return `${parts[0]} ${parts[1][0].toUpperCase()}.`; } /** * Formats separate firstName + lastName fields, shortening the last name. * Falls back to parsing fullName if firstName is not available. */ export function formatShortName(firstName, lastName, fallbackName) { if (firstName?.trim()) { const l = lastName?.trim(); return l ? `${firstName.trim()} ${l[0].toUpperCase()}.` : firstName.trim(); } return shortName(fallbackName); } 136142undefined523529undefined, /***/ 49046: import(/* webpackMode: "eager", webpackExports: ["__esModule","default"] */ "/opt/canhelp/node_modules/next/dist/client/app-dir/link.js"); s0136Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 94496, 23))undefined, /***/ 56003: 9/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ LocationProvider: () => (/* binding */ LocationProvider), /* harmony export */ z: () => (/* binding */ useLocation) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(78157); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(31768); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(91864); B /* __next_internal_client_entry_do_not_use__ LocationProvider,useLocation auto */ import { jsx as _jsx } from "react/jsx-runtime"; import { createContext, useContext, useState, useEffect, useCallback } from 'react'; import { getLocations } from '@/lib/api'; const LocationContext = /*#__PURE__*/ createContext({ locationSlug: '', locationTree: [], locationLoading: true, setLocation: ()=>{}, getLabel: ()=>'' }); function readCookieLocation() { if (typeof document === 'undefined') return ''; const match = document.cookie.match(/(?:^|;\s*)canhelp_location=([^;]+)/); return match?.[1] ? decodeURIComponent(match[1]) : ''; } export function LocationProvider({ children, initialSlug = '' }) { const [locationSlug, setLocationSlug] = useState(initialSlug); const [locationTree, setLocationTree] = useState([]); const [locationLoading, setLocationLoading] = useState(true); // Sync from cookie on client mount process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ const cookieSlug = readCookieLocation(); setLocationSlug(cookieSlug); }, []); // Load location tree once process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ getLocations().then((tree)=>setLocationTree(tree)).catch(()=>{}).finally(()=>setLocationLoading(false)); }, []); const setLocation = useCallback((slug)=>{ setLocationSlug(slug); const encoded = encodeURIComponent(slug); document.cookie = `canhelp_location=${encoded}; path=/; max-age=31536000; SameSite=Lax`; }, []); const getLabel = useCallback((locale)=>{ if (!locationSlug) return ''; for (const city of locationTree){ if (city.slug === locationSlug) return city.names[locale] ?? city.names.el; for (const d of city.children ?? []){ if (d.slug === locationSlug) return d.names[locale] ?? d.names.el; } } return locationSlug; }, [ locationSlug, locationTree ]); return /*#__PURE__*/ _jsx(LocationContext.Provider, { value: { locationSlug, locationTree, locationLoading, setLocation, getLabel }, children: children }); } export function useLocation() { return useContext(LocationContext); } +82129undefined131214undefined216256undefined296308(0,react__WEBPACK_IMPORTED_MODULE_1__.createContext)undefined657663undefined768775(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined835842(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined899906(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined10101018(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined12101218(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined12341245(0,_lib_api__WEBPACK_IMPORTED_MODULE_2__/* .getLocations */ .Vs)undefined13751385(0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)undefined16081618(0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)undefined20712074(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined22962302undefined23392348(0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)undefined, /***/ 64271: import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/client/components/builtin/global-error.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/client/components/client-page.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/client/components/client-segment.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/client/components/layout-router.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/client/components/metadata/async-metadata.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/client/components/render-from-template-context.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/lib/framework/boundary-components.js"); ; import(/* webpackMode: "eager" */ "/opt/canhelp/node_modules/next/dist/lib/metadata/generate/icon-mark.js"); 0113Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 58671, 23))undefined118222Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 56542, 23))undefined227334Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 88248, 23))undefined339467Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 49743, 23))undefined472578Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 96231, 23))undefined583699Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 10959, 23))undefined704825Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 72041, 23))undefined830938Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 95094, 23))undefined9431049Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 67487, 23))undefined, /***/ 67674: /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Header: () => (/* binding */ Header) /* harmony export */ }); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25459); /* harmony import */ var react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_server_dom_webpack_server__WEBPACK_IMPORTED_MODULE_0__); // This file is generated by the Webpack next-flight-loader. import { registerClientReference } from "react-server-dom-webpack/server"; export const Header = registerClientReference( function() { throw new Error("Attempted to call Header() from the server but Header is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); }, "/opt/canhelp/apps/web/src/components/Header.tsx", "Header", );, /***/ 72088: , /***/ 72519: 0113Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 48365, 23))undefined118222Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 64596, 23))undefined227334Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 56186, 23))undefined339467Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 67805, 23))undefined472578Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 27561, 23))undefined583699Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 47569, 23))undefined704825Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 42747, 23))undefined830938Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 56676, 23))undefined9431049Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 97225))undefined, /***/ 85998: r0136Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 3498, 23))undefined, /***/ 91864: &/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ $7: () => (/* binding */ updateCategory), /* harmony export */ $H: () => (/* binding */ acceptOffer), /* harmony export */ $M: () => (/* binding */ getUnreadCount), /* harmony export */ Bb: () => (/* binding */ getMySpecialistCards), /* harmony export */ Bm: () => (/* binding */ getUserRating), /* harmony export */ Bq: () => (/* binding */ getSpecialistCards), /* harmony export */ Br: () => (/* binding */ getAdminNotifLogs), /* harmony export */ C0: () => (/* binding */ applyMyReferral), /* harmony export */ CX: () => (/* binding */ updateAdminSettings), /* harmony export */ Ck: () => (/* binding */ getPriceList), /* harmony export */ Cs: () => (/* binding */ previewPlanChange), /* harmony export */ D1: () => (/* binding */ setAvailabilityRange), /* harmony export */ Em: () => (/* binding */ request), /* harmony export */ F7: () => (/* binding */ getSpecialists), /* harmony export */ F9: () => (/* binding */ getTaskInvite), /* harmony export */ FI: () => (/* binding */ sendTestEmail), /* harmony export */ Fu: () => (/* binding */ getMyTasks), /* harmony export */ GB: () => (/* binding */ deleteTaskAdmin), /* harmony export */ GE: () => (/* binding */ getSkillDedup), /* harmony export */ Gp: () => (/* binding */ getAutoResponseSettings), /* harmony export */ H: () => (/* binding */ getMyDashboard), /* harmony export */ H6: () => (/* binding */ getTaskReviews), /* harmony export */ He: () => (/* binding */ activateUser), /* harmony export */ I: () => (/* binding */ autoTranslateTasks), /* harmony export */ Ic: () => (/* binding */ deletePriceListGroup), /* harmony export */ Ip: () => (/* binding */ markRead), /* harmony export */ Je: () => (/* binding */ purchasePlan), /* harmony export */ K7: () => (/* binding */ deleteCategory), /* harmony export */ KD: () => (/* binding */ getAdminCategories), /* harmony export */ KZ: () => (/* binding */ getAdminSupportTickets), /* harmony export */ Lb: () => (/* binding */ declineOffer), /* harmony export */ Lp: () => (/* binding */ getAdminEmailTemplates), /* harmony export */ ML: () => (/* binding */ getCustomerFomoDashboard), /* harmony export */ Mm: () => (/* binding */ changeUserRole), /* harmony export */ NL: () => (/* binding */ markAllRead), /* harmony export */ Nt: () => (/* binding */ updateLocation), /* harmony export */ O8: () => (/* binding */ sendPublicSupportMessage), /* harmony export */ OM: () => (/* binding */ setAvailability), /* harmony export */ OV: () => (/* binding */ runAutoMatch), /* harmony export */ OX: () => (/* binding */ getAdminPlans), /* harmony export */ On: () => (/* binding */ getCanMessage), /* harmony export */ P0: () => (/* binding */ adminTopUpUserBalance), /* harmony export */ QN: () => (/* binding */ getOrCreateDirectRoom), /* harmony export */ QY: () => (/* binding */ getTasksTranslationPreview), /* harmony export */ RN: () => (/* binding */ getSiteStats), /* harmony export */ RQ: () => (/* binding */ updateAutoResponseSettings), /* harmony export */ Rt: () => (/* binding */ completeTask), /* harmony export */ S$: () => (/* binding */ getPublicSiteProfile), /* harmony export */ S9: () => (/* binding */ createSkill), /* harmony export */ Sw: () => (/* binding */ getOffers), /* harmony export */ T9: () => (/* binding */ getPlans), /* harmony export */ Tr: () => (/* binding */ getNotifications), /* harmony export */ U9: () => (/* binding */ deletePriceListItem), /* harmony export */ UE: () => (/* binding */ trackSiteMessage), /* harmony export */ UT: () => (/* binding */ createTask), /* harmony export */ Uq: () => (/* binding */ mergeSkillDuplicates), /* harmony export */ V: () => (/* binding */ addSpecialistFavorite), /* harmony export */ V7: () => (/* binding */ adminBroadcastPush), /* harmony export */ VL: () => (/* binding */ getMessages), /* harmony export */ VM: () => (/* binding */ getUserProfile), /* harmony export */ Vs: () => (/* binding */ getLocations), /* harmony export */ Wi: () => (/* binding */ deactivateUser), /* harmony export */ Xz: () => (/* binding */ getSpecialistAvailability), /* harmony export */ YQ: () => (/* binding */ getTranslationsStats), /* harmony export */ Yj: () => (/* binding */ getAdminTasks), /* harmony export */ Z2: () => (/* binding */ createPriceListItem), /* harmony export */ Zp: () => (/* binding */ getChatRooms), /* harmony export */ _z: () => (/* binding */ sendMessage), /* harmony export */ aT: () => (/* binding */ getMyOffers), /* harmony export */ bR: () => (/* binding */ deletePlan), /* harmony export */ bW: () => (/* binding */ getCategories), /* harmony export */ bc: () => (/* binding */ toggleStatus), /* harmony export */ bi: () => (/* binding */ getAdminNotifStats), /* harmony export */ bx: () => (/* binding */ createReview), /* harmony export */ cJ: () => (/* binding */ getAdminReferrals), /* harmony export */ cS: () => (/* binding */ getAdminUsers), /* harmony export */ cl: () => (/* binding */ verifyTelegramToken), /* harmony export */ cp: () => (/* binding */ autoTranslate), /* harmony export */ dE: () => (/* binding */ getAdminStats), /* harmony export */ eR: () => (/* binding */ createSpecialistCard), /* harmony export */ eU: () => (/* binding */ updateReportStatus), /* harmony export */ ew: () => (/* binding */ getPlanHistory), /* harmony export */ f5: () => (/* binding */ deleteSpecialistCard), /* harmony export */ fP: () => (/* binding */ updateSkill), /* harmony export */ fm: () => (/* binding */ getBalanceHistory), /* harmony export */ fu: () => (/* binding */ autoTranslateEmailTemplates), /* harmony export */ g0: () => (/* binding */ getAdminBalanceHistory), /* harmony export */ g1: () => (/* binding */ adminSendPushToUser), /* harmony export */ gg: () => (/* binding */ getTask), /* harmony export */ hD: () => (/* binding */ adminWithdrawUserBalance), /* harmony export */ hl: () => (/* binding */ updatePortfolioItem), /* harmony export */ hp: () => (/* binding */ deleteSkill), /* harmony export */ iN: () => (/* binding */ getMyAvailability), /* harmony export */ i_: () => (/* binding */ getAdminSkills), /* harmony export */ j_: () => (/* binding */ getAdminAiLogs), /* harmony export */ jd: () => (/* binding */ getAdminUser), /* harmony export */ jg: () => (/* binding */ updateAdminEmailTemplate), /* harmony export */ k_: () => (/* binding */ getAdminLocations), /* harmony export */ lC: () => (/* binding */ updateTask), /* harmony export */ mq: () => (/* binding */ createSupportTicket), /* harmony export */ nT: () => (/* binding */ replyToSupportTicket), /* harmony export */ nf: () => (/* binding */ cancelTaskAdmin), /* harmony export */ oD: () => (/* binding */ updatePriceListGroup), /* harmony export */ oh: () => (/* binding */ initiateTopUp), /* harmony export */ oq: () => (/* binding */ adminUpdateSpecialistCard), /* harmony export */ pD: () => (/* binding */ getSpecialistFavorites), /* harmony export */ pK: () => (/* binding */ getPaymentHistory), /* harmony export */ q7: () => (/* binding */ getMyReviews), /* harmony export */ qT: () => (/* binding */ createPlan), /* harmony export */ qX: () => (/* binding */ testTelegramConnection), /* harmony export */ qt: () => (/* binding */ getAdminMailLogs), /* harmony export */ rC: () => (/* binding */ getAdminSettings), /* harmony export */ rl: () => (/* binding */ getSkillSuggestions), /* harmony export */ sD: () => (/* binding */ removeSpecialistFavorite), /* harmony export */ s_: () => (/* binding */ getAdminSpecialistCards), /* harmony export */ st: () => (/* binding */ getMyReferralInfo), /* harmony export */ td: () => (/* binding */ updatePlan), /* harmony export */ ts: () => (/* binding */ createOffer), /* harmony export */ u0: () => (/* binding */ setSupportTicketStatus), /* harmony export */ u4: () => (/* binding */ getAdminMailStats), /* harmony export */ uQ: () => (/* binding */ verifyAdminUserEmail), /* harmony export */ v9: () => (/* binding */ getUserReviews), /* harmony export */ vD: () => (/* binding */ createPriceListGroup), /* harmony export */ vh: () => (/* binding */ getTaskStats), /* harmony export */ vy: () => (/* binding */ getAdminUserSpecialistCards), /* harmony export */ wc: () => (/* binding */ translateAdminEmailTemplate), /* harmony export */ wl: () => (/* binding */ updateAdminUser), /* harmony export */ yJ: () => (/* binding */ createLocation), /* harmony export */ yO: () => (/* binding */ getAdminActivityLogs), /* harmony export */ yk: () => (/* binding */ dismissNotification), /* harmony export */ z4: () => (/* binding */ getDailyUsage), /* harmony export */ z5: () => (/* binding */ getAdminReports), /* harmony export */ z6: () => (/* binding */ getMyStatuses), /* harmony export */ zB: () => (/* binding */ deletePortfolioItem), /* harmony export */ zR: () => (/* binding */ deleteLocation), /* harmony export */ zZ: () => (/* binding */ createCategory), /* harmony export */ zc: () => (/* binding */ updateSpecialistCard), /* harmony export */ zk: () => (/* binding */ getSpecialistFomoDashboard) /* harmony export */ }); /* unused harmony exports getTasks, getTaskBudgetRange, searchTasks, getTasksForSpecialist, getTaskCountsByCategory, cancelTask, updateNotifSettings, getFavorites, addFavorite, removeFavorite, getTranslationsMissing, saveTranslations, getMyPortfolio, addPortfolioItem, getSpecialistPortfolio, saveSiteSeo, updatePriceListItem, getFomoRecommendations, getAutoMatchResults, getGoogleCalendarStatus, disconnectGoogleCalendar, importFromGoogleCalendar, getGoogleCalendarConnectUrl, getMySupportTickets */ [j// SSR: use INTERNAL_API_URL (http://localhost:4000) to avoid external DNS/SSL round-trip // Browser: use NEXT_PUBLIC_API_URL (https://api.canhelp.gr) const BASE = "undefined" === 'undefined' ? process.env.INTERNAL_API_URL || 'http://localhost:4000' : process.env.NEXT_PUBLIC_API_URL || 'http://localhost:4000'; export async function request(path, init) { const url = `${BASE}/api${path}`; if ("undefined" === 'undefined') console.log('[api] SSR fetch', url); const res = await fetch(url, { ...init, credentials: 'include', headers: { 'Content-Type': 'application/json', ...init?.headers } }); if (!res.ok) { const err = await res.json().catch(()=>({ error: res.statusText })); const msg = typeof err.error === 'string' ? err.error : typeof err.message === 'string' ? err.message : res.statusText || 'Request failed'; throw new Error(msg); } return res.json(); } // ─── Tasks ──────────────────────────────────────────────────────────────── export const getTasks = (params)=>{ const qs = params ? '?' + new URLSearchParams(params) : ''; return request(`/tasks${qs}`); }; export const getTaskBudgetRange = (params)=>{ const qs = params ? '?' + new URLSearchParams(params) : ''; return request(`/tasks/budget-range${qs}`); }; export const searchTasks = (params)=>request(`/tasks/search?${new URLSearchParams(params)}`); export const getMyTasks = ()=>request('/tasks/my'); export const getTasksForSpecialist = (params)=>{ const qs = params ? '?' + new URLSearchParams(params) : ''; return request(`/tasks/for-me${qs}`); }; export const getTaskCountsByCategory = ()=>request('/tasks/counts-by-category'); export const getTask = (id)=>request(`/tasks/${id}`); export const createTask = (data)=>request('/tasks', { method: 'POST', body: JSON.stringify(data) }); export const updateTask = (id, data)=>request(`/tasks/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); export const completeTask = (id)=>request(`/tasks/${id}/complete`, { method: 'PATCH' }); export const cancelTask = (id)=>request(`/tasks/${id}/cancel`, { method: 'PATCH' }); // ─── Offers ──────────────────────────────────────────────────────────────── export const getOffers = (taskId)=>request(`/offers?taskId=${taskId}`); export const getMyOffers = ()=>request('/offers/my'); export const createOffer = (data)=>request('/offers', { method: 'POST', body: JSON.stringify(data) }); export const acceptOffer = (id)=>request(`/offers/${id}/accept`, { method: 'PATCH' }); export const declineOffer = (id)=>request(`/offers/${id}/decline`, { method: 'PATCH' }); export const getUserProfile = (id, locale)=>request(`/users/${id}/profile${locale ? `?locale=${encodeURIComponent(locale)}` : ''}`); export const getSpecialists = (params)=>{ const qs = params ? '?' + new URLSearchParams(params) : ''; return request(`/users/specialists${qs}`); }; export const createReview = (data)=>request('/reviews', { method: 'POST', body: JSON.stringify(data) }); export const getTaskReviews = (taskId)=>request(`/reviews/task/${taskId}`); export const getMyReviews = ()=>request('/reviews/my'); // ─── Chat ────────────────────────────────────────────────────────────────── export const getChatRooms = ()=>request('/chat/rooms'); export const getOrCreateDirectRoom = (userId)=>request(`/chat/direct/${userId}`); export const getCanMessage = (userId)=>request(`/chat/can-message/${userId}`); export const getMessages = (roomId)=>request(`/chat/rooms/${roomId}/messages`); export const sendMessage = (roomId, body)=>request('/chat/messages', { method: 'POST', body: JSON.stringify({ roomId, body }) }); // ─── Notifications ──────────────────────────────────────────────────────── export const updateNotifSettings = (data)=>request('/users/me', { method: 'PATCH', body: JSON.stringify(data) }); export const getNotifications = ()=>request('/notifications'); export const getUnreadCount = ()=>request('/notifications/count'); export const markRead = (id)=>request(`/notifications/${id}/read`, { method: 'PATCH' }); export const markAllRead = ()=>request('/notifications/read-all', { method: 'PATCH' }); export const getTaskInvite = (taskId)=>request(`/notifications?type=task_invite&referenceId=${taskId}`); export const dismissNotification = (id)=>request(`/notifications/${id}`, { method: 'DELETE' }); // ─── Referral ───────────────────────────────────────────────────────────── export const getMyReferralInfo = ()=>request('/users/me/referral'); export const applyMyReferral = (refCode)=>request('/users/me/referral/apply', { method: 'POST', body: JSON.stringify({ refCode }) }); // ─── Reviews ────────────────────────────────────────────────────────────── export const getUserReviews = (userId)=>request(`/reviews/user/${userId}`); export const getUserRating = (userId)=>request(`/reviews/user/${userId}/rating`); // ─── Categories ─────────────────────────────────────────────────────────── export const getCategories = ()=>request('/categories'); // ─── Locations ──────────────────────────────────────────────────────────── export const getLocations = ()=>request('/locations'); // ─── Favorites ──────────────────────────────────────────────────────────── export const getFavorites = ()=>request('/favorites'); export const addFavorite = (taskId)=>request(`/favorites/${taskId}`, { method: 'POST' }); export const removeFavorite = (taskId)=>request(`/favorites/${taskId}`, { method: 'DELETE' }); export const getSpecialistFavorites = ()=>request('/favorites/specialists'); export const addSpecialistFavorite = (specialistId)=>request(`/favorites/specialists/${specialistId}`, { method: 'POST' }); export const removeSpecialistFavorite = (specialistId)=>request(`/favorites/specialists/${specialistId}`, { method: 'DELETE' }); // ─── Admin ───────────────────────────────────────────────────────────────── // ─── Admin Categories ────────────────────────────────────────────────────── export const getAdminCategories = ()=>request('/admin/categories'); export const createCategory = (data)=>request('/admin/categories', { method: 'POST', body: JSON.stringify(data) }); export const updateCategory = (id, data)=>request(`/admin/categories/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); export const deleteCategory = (id)=>request(`/admin/categories/${id}`, { method: 'DELETE' }); // ─── Admin Skills ────────────────────────────────────────────────────────── export const getAdminSkills = (categorySlug)=>request(`/admin/skills?categorySlug=${encodeURIComponent(categorySlug)}`); export const createSkill = (data)=>request('/admin/skills', { method: 'POST', body: JSON.stringify(data) }); export const updateSkill = (id, data)=>request(`/admin/skills/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); export const deleteSkill = (id)=>request(`/admin/skills/${id}`, { method: 'DELETE' }); export const getSkillDedup = (categorySlug)=>request(`/admin/skills/dedup${categorySlug ? `?categorySlug=${encodeURIComponent(categorySlug)}` : ''}`); export const mergeSkillDuplicates = (keepId, deleteIds)=>request('/admin/skills/dedup/merge', { method: 'POST', body: JSON.stringify({ keepId, deleteIds }) }); // ─── Admin ───────────────────────────────────────────────────────────────── export const getAdminStats = ()=>request('/admin/stats'); export const getAdminUsers = (page = 1, q, role)=>{ const p = new URLSearchParams({ page: String(page), limit: '20' }); if (q) p.set('q', q); if (role) p.set('role', role); return request(`/admin/users?${p}`); }; export const deactivateUser = (id)=>request(`/admin/users/${id}/deactivate`, { method: 'PATCH' }); export const activateUser = (id)=>request(`/admin/users/${id}/activate`, { method: 'PATCH' }); export const changeUserRole = (id, role)=>request(`/admin/users/${id}/role`, { method: 'PATCH', body: JSON.stringify({ role }) }); export const getAdminUser = (id)=>request(`/admin/users/${id}`); export const getAdminUserSpecialistCards = (userId)=>request(`/admin/users/${userId}/specialist-cards`); export const adminUpdateSpecialistCard = (id, data)=>request(`/admin/specialist-cards/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); export const getAdminSpecialistCards = (page = 1, status)=>{ const p = new URLSearchParams({ page: String(page), limit: '20' }); if (status && status !== 'all') p.set('status', status); return request(`/admin/specialist-cards?${p}`); }; export const updateAdminUser = (id, data)=>request(`/admin/users/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); export const verifyAdminUserEmail = (id)=>request(`/admin/users/${id}/verify-email`, { method: 'PATCH' }); export const getAdminTasks = (page = 1, q, status)=>{ const p = new URLSearchParams({ page: String(page), limit: '20' }); if (q) p.set('q', q); if (status) p.set('status', status); return request(`/admin/tasks?${p}`); }; export const cancelTaskAdmin = (id)=>request(`/admin/tasks/${id}/cancel`, { method: 'PATCH' }); export const deleteTaskAdmin = (id)=>request(`/admin/tasks/${id}`, { method: 'DELETE' }); export const getAdminReports = (page = 1, status)=>{ const p = new URLSearchParams({ page: String(page), limit: '20' }); if (status && status !== 'all') p.set('status', status); return request(`/admin/reports?${p}`); }; export const updateReportStatus = (id, status)=>request(`/admin/reports/${id}/status`, { method: 'PATCH', body: JSON.stringify({ status }) }); export const getAdminAiLogs = (page = 1)=>request(`/admin/ai-logs?page=${page}&limit=50`); export const getAdminActivityLogs = (params = {})=>{ const p = new URLSearchParams(); if (params.page) p.set('page', String(params.page)); if (params.event) p.set('event', params.event); if (params.userId) p.set('userId', params.userId); if (params.dateFrom) p.set('dateFrom', params.dateFrom); if (params.dateTo) p.set('dateTo', params.dateTo); p.set('limit', '50'); return request(`/admin/activity-logs?${p}`); }; export const getAdminMailLogs = (params = {})=>{ const p = new URLSearchParams(); if (params.page) p.set('page', String(params.page)); if (params.event) p.set('event', params.event); if (params.dateFrom) p.set('dateFrom', params.dateFrom); if (params.dateTo) p.set('dateTo', params.dateTo); p.set('limit', '50'); return request(`/admin/mail-logs?${p}`); }; export const getAdminNotifLogs = (params = {})=>{ const p = new URLSearchParams(); if (params.page) p.set('page', String(params.page)); if (params.type) p.set('type', params.type); if (params.dateFrom) p.set('dateFrom', params.dateFrom); if (params.dateTo) p.set('dateTo', params.dateTo); p.set('limit', '50'); return request(`/admin/notification-logs?${p}`); }; export const getAdminNotifStats = ()=>request('/admin/notification-stats'); export const getAdminMailStats = ()=>request('/admin/mail-stats'); export const getAdminReferrals = ()=>request('/admin/referrals'); export const adminSendPushToUser = (userId, data)=>request(`/admin/push/user/${userId}`, { method: 'POST', body: JSON.stringify(data) }); export const adminBroadcastPush = (data)=>request('/admin/push/broadcast', { method: 'POST', body: JSON.stringify(data) }); // ─── Admin Locations ─────────────────────────────────────────────────────── export const getAdminLocations = ()=>request('/admin/locations'); export const createLocation = (data)=>request('/admin/locations', { method: 'POST', body: JSON.stringify(data) }); export const updateLocation = (id, data)=>request(`/admin/locations/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); export const deleteLocation = (id)=>request(`/admin/locations/${id}`, { method: 'DELETE' }); // ─── Admin Plans ─────────────────────────────────────────────────────────── export const getAdminPlans = ()=>request('/admin/plans'); export const createPlan = (data)=>request('/admin/plans', { method: 'POST', body: JSON.stringify(data) }); export const updatePlan = (id, data)=>request(`/admin/plans/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); export const deletePlan = (id)=>request(`/admin/plans/${id}`, { method: 'DELETE' }); // ─── Admin Settings ──────────────────────────────────────────────────────── export const getAdminSettings = ()=>request('/admin/settings'); export const updateAdminSettings = (data)=>request('/admin/settings', { method: 'PUT', body: JSON.stringify(data) }); export const getAdminEmailTemplates = ()=>request('/admin/settings/templates'); export const updateAdminEmailTemplate = (key, data)=>request(`/admin/settings/templates/${key}`, { method: 'PUT', body: JSON.stringify(data) }); export const translateAdminEmailTemplate = (data)=>request('/admin/settings/templates/translate', { method: 'POST', body: JSON.stringify(data) }); export const sendTestEmail = ()=>request('/admin/settings/test-email', { method: 'POST' }); export const testTelegramConnection = (botToken, chatId)=>fetch(`${BASE}/api/admin/settings/test-telegram`, { method: 'POST', credentials: 'include', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ botToken, chatId }) }).then((r)=>r.json()); export const verifyTelegramToken = (botToken)=>fetch(`${BASE}/api/admin/settings/verify-telegram-token`, { method: 'POST', credentials: 'include', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ botToken }) }).then((r)=>r.json()); export const getTranslationsStats = ()=>request('/admin/translations/stats'); export const getTranslationsMissing = (table, missingLang, page = 1, limit = 50)=>request(`/admin/translations/${table}?missingLang=${missingLang}&page=${page}&limit=${limit}`); export const saveTranslations = (table, items)=>request(`/admin/translations/${table}/save`, { method: 'POST', body: JSON.stringify({ items }) }); export const autoTranslate = (table, missingLang, fromLang, batchSize = 500)=>request('/admin/translations/auto-translate', { method: 'POST', body: JSON.stringify({ table, missingLang, fromLang, batchSize }) }); export const autoTranslateTasks = (batchSize = 500)=>request('/admin/translations/auto-translate-tasks', { method: 'POST', body: JSON.stringify({ batchSize }) }); export const getTasksTranslationPreview = (lang, limit = 50)=>request(`/admin/translations/tasks-preview?lang=${lang}&limit=${limit}`); export const autoTranslateEmailTemplates = (missingLang, fromLang = 'el')=>request('/admin/translations/auto-translate-templates', { method: 'POST', body: JSON.stringify({ missingLang, fromLang }) }); // ─── Availability ────────────────────────────────────────────────────────── export const getMyAvailability = (month)=>request(`/availability/my${month ? `?month=${month}` : ''}`); export const setAvailability = (date, status, note)=>request('/availability/set', { method: 'POST', body: JSON.stringify({ date, status, note }) }); export const setAvailabilityRange = (from, to, status)=>request('/availability/set-range', { method: 'POST', body: JSON.stringify({ from, to, status }) }); export const getSpecialistAvailability = (userId, month)=>request(`/availability/user/${userId}${month ? `?month=${month}` : ''}`); export const getMyPortfolio = ()=>request('/portfolio/my'); export const addPortfolioItem = (formData)=>fetch(`${BASE}/api/portfolio`, { method: 'POST', credentials: 'include', body: formData }).then(async (res)=>{ if (!res.ok) { const err = await res.json().catch(()=>({ error: res.statusText })); throw new Error(err.error || 'Upload failed'); } return res.json(); }); export const updatePortfolioItem = (id, data)=>request(`/portfolio/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); export const deletePortfolioItem = (id)=>request(`/portfolio/${id}`, { method: 'DELETE' }); export const getSpecialistPortfolio = (userId)=>request(`/portfolio/user/${userId}`); export const getMySpecialistCards = ()=>request('/specialist-cards/my'); export const createSpecialistCard = (data)=>request('/specialist-cards', { method: 'POST', body: JSON.stringify(data) }); export const updateSpecialistCard = (id, data)=>request(`/specialist-cards/${id}`, { method: 'PATCH', body: JSON.stringify(data) }); export const saveSiteSeo = (data)=>request('/users/me/site-seo', { method: 'POST', body: JSON.stringify(data) }); export const deleteSpecialistCard = (id)=>request(`/specialist-cards/${id}`, { method: 'DELETE' }); export const getSpecialistCards = (userId, locale)=>request(`/specialist-cards/user/${userId}${locale ? `?locale=${encodeURIComponent(locale)}` : ''}`); export const getPriceList = (cardId, locale)=>request(`/price-list/${cardId}${locale ? `?locale=${encodeURIComponent(locale)}` : ''}`); export const createPriceListGroup = (cardId, data)=>request(`/price-list/${cardId}/groups`, { method: 'POST', body: JSON.stringify(data) }); export const updatePriceListGroup = (groupId, data)=>request(`/price-list/groups/${groupId}`, { method: 'PATCH', body: JSON.stringify(data) }); export const deletePriceListGroup = (groupId)=>request(`/price-list/groups/${groupId}`, { method: 'DELETE' }); export const createPriceListItem = (groupId, data)=>request(`/price-list/groups/${groupId}/items`, { method: 'POST', body: JSON.stringify(data) }); export const updatePriceListItem = (itemId, data)=>request(`/price-list/items/${itemId}`, { method: 'PATCH', body: JSON.stringify(data) }); export const deletePriceListItem = (itemId)=>request(`/price-list/items/${itemId}`, { method: 'DELETE' }); export const getSkillSuggestions = (categorySlugs)=>{ const params = categorySlugs?.length ? '?' + categorySlugs.map((s)=>`category=${encodeURIComponent(s)}`).join('&') : ''; return request(`/skill-suggestions${params}`); }; export const initiateTopUp = (amount)=>request('/payments/topup/init', { method: 'POST', body: JSON.stringify({ amount }) }); export const getPaymentHistory = ()=>request('/payments/history'); export const getBalanceHistory = (limit = 50)=>request(`/payments/balance-history?limit=${limit}`); export const getPlanHistory = (limit = 50)=>request(`/users/me/plan-history?limit=${limit}`); export const getAdminBalanceHistory = (params = {})=>{ const p = new URLSearchParams(); if (params.page) p.set('page', String(params.page)); if (params.userId) p.set('userId', params.userId); if (params.kind) p.set('kind', params.kind); p.set('limit', '50'); return request(`/admin/balance-history?${p}`); }; export const adminTopUpUserBalance = (id, data)=>request(`/admin/users/${id}/balance/topup`, { method: 'POST', body: JSON.stringify(data) }); export const adminWithdrawUserBalance = (id, data)=>request(`/admin/users/${id}/balance/withdraw`, { method: 'POST', body: JSON.stringify(data) }); export const previewPlanChange = (planId)=>request('/payments/plan/preview', { method: 'POST', body: JSON.stringify({ planId }) }); export const getPlans = (role)=>{ const qs = role ? `?role=${role}` : ''; return request(`/plans${qs}`); }; export const getMyDashboard = ()=>request('/dashboard/me'); export const getDailyUsage = ()=>request('/plans/daily-usage'); export const purchasePlan = (planId, payFromBalance = true)=>request('/payments/plan/purchase', { method: 'POST', body: JSON.stringify({ planId, payFromBalance }) }); // ─── Statuses ────────────────────────────────────────────────────────────── export const getMyStatuses = ()=>request('/statuses/me'); export const toggleStatus = (statusType, active)=>request('/statuses/toggle', { method: 'POST', body: JSON.stringify({ statusType, active }) }); export const getAutoResponseSettings = ()=>request('/auto-response'); export const updateAutoResponseSettings = (data)=>request('/auto-response', { method: 'PUT', body: JSON.stringify(data) }); // ─── FOMO ────────────────────────────────────────────────────────────────── export const getSpecialistFomoDashboard = ()=>request('/fomo/specialist'); export const getCustomerFomoDashboard = ()=>request('/fomo/customer'); export const getFomoRecommendations = ()=>request('/fomo/recommendations'); // ─── Auto-match ──────────────────────────────────────────────────────────── export const getAutoMatchResults = (taskId)=>request(`/auto-match/${taskId}`); export const runAutoMatch = (taskId)=>request(`/auto-match/${taskId}`, { method: 'POST' }); // ─── Google Calendar ─────────────────────────────────────────────────────── export const getGoogleCalendarStatus = ()=>request('/google/calendar/status'); export const disconnectGoogleCalendar = ()=>request('/google/calendar/disconnect', { method: 'DELETE' }); export const importFromGoogleCalendar = ()=>request('/google/calendar/import', { method: 'POST' }); export const getGoogleCalendarConnectUrl = ()=>`${BASE}/api/google/calendar/connect`; // ─── Personal site ───────────────────────────────────────────────────────── export const getPublicSiteProfile = (slug)=>request(`/users/site/${slug}`); export const getSiteStats = ()=>request('/users/me/site-stats'); export const trackSiteMessage = (slug)=>request(`/users/site/${slug}/track-message`, { method: 'POST' }).catch(()=>{}); // ─── Task stats (FOMO) ───────────────────────────────────────────────────── export const getTaskStats = (taskId)=>request(`/tasks/${taskId}/stats`); // ─── Support tickets ─────────────────────────────────────────────────────── export const sendPublicSupportMessage = (data)=>request('/support/public', { method: 'POST', body: JSON.stringify(data) }); export const createSupportTicket = (data)=>request('/support', { method: 'POST', body: JSON.stringify(data) }); export const getMySupportTickets = (page = 1)=>request(`/support/my?page=${page}`); export const getAdminSupportTickets = (params)=>request(`/support${params ? '?' + new URLSearchParams(params) : ''}`); export const replyToSupportTicket = (id, data)=>request(`/support/${id}/reply`, { method: 'PATCH', body: JSON.stringify(data) }); export const setSupportTicketStatus = (id, status)=>request(`/support/${id}/status`, { method: 'PATCH', body: JSON.stringify({ status }) });  164190 trueundefined2523090undefined312318undefined402428trueundefined10771083undefined12151221undefined13761382undefined14701476undefined15221528undefined16801686undefined17611767undefined18151821undefined19361942undefined20682074undefined21692175undefined23452351undefined24172423undefined24712477undefined25942600undefined26932699undefined27942800undefined29272933undefined30833089undefined32083214undefined32843290undefined34193425undefined34753481undefined35573563undefined36363642undefined37163722undefined39763982undefined41104116undefined41734179undefined42404246undefined43414347undefined44414447undefined45464552undefined47324738undefined48004806undefined50525058undefined51285134undefined52885294undefined54235429undefined55565562undefined56115617undefined57135719undefined58205826undefined58975903undefined60336039undefined63326338undefined64006406undefined65366542undefined66836689undefined68686874undefined69896995undefined71187124undefined72587264undefined73577363undefined75087514undefined77997805undefined78577863undefined81068112undefined82178223undefined83248330undefined84958501undefined85608566undefined86658671undefined88298835undefined90989104undefined92419247undefined93609366undefined96179623undefined97259731undefined98279833undefined1007910085undefined1026210268undefined1035310359undefined1080110807undefined1118611192undefined1157711583undefined1165311659undefined1172011726undefined1178611792undefined1194411950undefined1216712173undefined1223312239undefined1236812374undefined1251412520undefined1269812704undefined1275612762undefined1288312889undefined1302113027undefined1319713203undefined1326113267undefined1339913405undefined1347913485undefined1364413650undefined1381113817undefined1391513921undefined1426914275undefined1460014606undefined1467814684undefined1485614862undefined1504315049undefined1533115337undefined1553415540undefined1567015676undefined1600216008undefined1610616112undefined1631916325undefined1653916545undefined1667116677undefined1673116737undefined1715817164undefined1730317309undefined1740717413undefined1749317499undefined1756617572undefined1770817714undefined1786117867undefined1799518001undefined1810718113undefined1826018266undefined1839618402undefined1855718563undefined1872118727undefined1884418850undefined1901219018undefined1917219178undefined1929119297undefined1952419530undefined1969019696undefined1975719763undefined1985719863undefined1995119957undefined2028420290undefined2044620452undefined2061420620undefined2078620792undefined2090220908undefined2096220968undefined2102621032undefined2132421330undefined2138221388undefined2157921585undefined2164921655undefined2187221878undefined2194721953undefined2201822024undefined2217322179undefined2225222258undefined2243522441undefined2251422520undefined2263222638undefined2274422750undefined2290922915undefined2298522991undefined2305023056undefined2326123267undefined2341323419undefined2355723563undefined2368923695undefined2377323779undefined2389223898undefined2404224048undefined, /***/ 96484: }}/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ LocaleProvider: () => (/* binding */ LocaleProvider), /* harmony export */ Y: () => (/* binding */ useLocale) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(78157); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(31768); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(71159); /* harmony import */ var _lib_translations__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(12998); ~ /* __next_internal_client_entry_do_not_use__ LocaleProvider,useLocale auto */ import { jsx as _jsx } from "react/jsx-runtime"; import { createContext, useContext, useState, useEffect, useCallback } from 'react'; import { useRouter } from 'next/navigation'; import { getTranslations } from '@/lib/translations'; const COOKIE_KEY = 'canhelp_locale'; const DEFAULT_LOCALE = 'el'; const LocaleContext = /*#__PURE__*/ createContext({ locale: DEFAULT_LOCALE, setLocale: ()=>{}, t: (key)=>key }); function readCookieLocale() { if (typeof document === 'undefined') return DEFAULT_LOCALE; const match = document.cookie.match(/canhelp_locale=([^;]+)/); const val = match?.[1]; return val && [ 'el', 'en', 'uk', 'ru' ].includes(val) ? val : DEFAULT_LOCALE; } export function LocaleProvider({ children, initialLocale }) { const router = useRouter(); const [locale, setLocaleState] = useState(initialLocale ?? DEFAULT_LOCALE); // Sync from cookie on mount (client-side) process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{ const cookieLocale = readCookieLocale(); if (cookieLocale !== locale) setLocaleState(cookieLocale); // Sync cookie locale to DB on first load (in case DB is out of sync) const apiBase = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:4000'; fetch(`${apiBase}/api/users/me`, { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, credentials: 'include', body: JSON.stringify({ locale: cookieLocale }) }).catch(()=>{}); }, []); const setLocale = useCallback((next)=>{ setLocaleState(next); document.cookie = `${COOKIE_KEY}=${next}; path=/; max-age=31536000; SameSite=Lax`; document.documentElement.lang = next; // Persist locale to user profile in DB (best-effort, non-blocking) const apiBase = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:4000'; fetch(`${apiBase}/api/users/me`, { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, credentials: 'include', body: JSON.stringify({ locale: next }) }).catch(()=>{}); // Re-render server components with new cookie router.refresh(); }, [ router ]); const t = useCallback((key, fallback)=>getTranslations(locale)(key, fallback), [ locale ]); return /*#__PURE__*/ _jsx(LocaleContext.Provider, { value: { locale, setLocale, t }, children: children }); } export function useLocale() { return useContext(LocaleContext); } G78125undefined127210undefined212255undefined257309undefined413425(0,react__WEBPACK_IMPORTED_MODULE_1__.createContext)undefined812818undefined893901(0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)undefined943950(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined10881096(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined13221352"https://api.canhelp.gr"undefined135713790undefined17261736(0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)undefined20152045"https://api.canhelp.gr"undefined205020720undefined25042514(0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)undefined25332547(0,_lib_translations__WEBPACK_IMPORTED_MODULE_3__/* .getTranslations */ .$)undefined26232626(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined27762782undefined28172826(0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)undefined }; ;k ;exports.id=809,exports.ids=[809],exports.modules={1241:()=>{},1697:(a,b,c)=>{"use strict";c.d(b,{LocationProvider:()=>e});var d=c(25459);let e=(0,d.registerClientReference)(function(){throw Error("Attempted to call LocationProvider() from the server but LocationProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/opt/canhelp/apps/web/src/context/location.tsx","LocationProvider");(0,d.registerClientReference)(function(){throw Error("Attempted to call useLocation() from the server but useLocation is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/opt/canhelp/apps/web/src/context/location.tsx","useLocation")},2645:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>e});var d=c(43560);let e=async a=>[{type:"image/png",sizes:"1024x1024",url:(0,d.fillMetadataSegment)(".",await a.params,"icon.png")+"?5d298b9734cd2682"}]},12696:(a,b,c)=>{"use strict";c.d(b,{AdminRolePreview:()=>k});var d=c(78157),e=c(13260),f=c(71159),g=c(31768),h=c(91864);let i="canhelp_admin_orig_plan",j={free:"bg-slate-100 text-slate-600",pro:"bg-green-100 text-green-700",ultimate:"bg-amber-100 text-amber-700"};function k(){let{data:a}=(0,e.wV)(),b=(0,f.useRouter)(),c=a?.user?.role==="admin",k=a?.user?.id,[l,m]=(0,g.useState)(!1),[n,o]=(0,g.useState)([]),[p,q]=(0,g.useState)(null),[r,s]=(0,g.useState)(!1),[t,u]=(0,g.useState)(!1),v=(0,g.useRef)(null);if(!l||!c)return null;let w=async a=>{if(k){s(!0);try{!v.current&&p&&(localStorage.setItem(i,p),v.current=p),await (0,h.wl)(k,{planId:a}),q(a),window.dispatchEvent(new CustomEvent("canhelp:plan-changed",{detail:{planId:a}})),b.refresh()}catch{}s(!1)}},x=async()=>{let a=v.current;localStorage.removeItem(i),v.current=null,await w(a??null)},y=!!v.current;return(0,d.jsxs)("div",{className:"fixed bottom-20 right-4 z-50 bg-white border border-slate-200 rounded-2xl shadow-lg text-xs font-medium select-none",style:{minWidth:130},children:[(0,d.jsxs)("button",{onClick:()=>u(a=>!a),className:"flex items-center justify-between gap-2 w-full px-3 py-2 text-slate-500 hover:text-slate-700 transition rounded-2xl",children:[(0,d.jsx)("span",{children:"\uD83D\uDC41 Preview"}),(0,d.jsx)("span",{className:"text-slate-300",children:t?"▲":"▼"})]}),t&&(0,d.jsx)("div",{className:"flex flex-col gap-1 px-2 pb-2 border-t border-slate-100 pt-2",children:n.length>0&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("div",{className:"text-slate-400 px-1 mt-2 mb-0.5",children:"Plan"}),n.map(a=>(0,d.jsxs)("button",{disabled:r,onClick:()=>w(a.id===p?null:a.id),className:`flex items-center justify-between gap-2 px-3 py-1.5 rounded-xl transition text-left ${p===a.id?"bg-indigo-600 text-white":"text-slate-600 hover:bg-slate-100"} ${r?"opacity-50":""}`,children:[(0,d.jsx)("span",{className:"truncate max-w-[90px]",children:a.name}),(0,d.jsx)("span",{className:`px-1.5 py-0.5 rounded-full text-[10px] font-semibold ${p===a.id?"bg-white/20 text-white":j[a.tier]??j.free}`,children:a.tier})]},a.id)),p&&(0,d.jsx)("button",{disabled:r,onClick:()=>w(null),className:"px-3 py-1 rounded-xl text-slate-400 hover:text-red-500 hover:bg-red-50 transition text-left",children:"✕ No plan"}),y&&(0,d.jsx)("button",{disabled:r,onClick:x,className:"px-3 py-1 rounded-xl text-green-600 hover:bg-green-50 transition text-left",children:"↩ Restore"})]})})]})}},12998:(a,b,c)=>{"use strict";c.d(b,{$:()=>f,YZ:()=>d});let d=[{code:"el",label:"Ελληνικά",flag:"\uD83C\uDDEC\uD83C\uDDF7"},{code:"en",label:"English",flag:"\uD83C\uDDEC\uD83C\uDDE7"},{code:"uk",label:"Українська",flag:"\uD83C\uDDFA\uD83C\uDDE6"},{code:"ru",label:"Русский",flag:"\uD83C\uDDF7\uD83C\uDDFA"}],e={el:{"footer.slogan":"Η εργασία σου — η φροντίδα μας! Λύνουμε κάθε ζήτημα γρήγορα και εύκολα.","footer.links":"Σύνδεσμοι","footer.socials":"Στα κοινωνικά δίκτυα","nav.home":"Αρχική","nav.tasks":"Εργασίες","nav.post":"+ Δημοσίευση","nav.dashboard":"Οι εργασίες μου","nav.chat":"Μηνύματα","nav.notifications":"Ειδοποιήσεις","nav.profile":"Προφίλ","nav.admin":"Διαχείριση","nav.specialists":"Προσφορές","nav.new_task":"Νέα εργασία","nav.login":"Σύνδεση","nav.register":"Εγγραφή","nav.logout":"Έξοδος","hero.title":"Κάθε άνθρωπος έχει κάτι να προσφέρει","hero.subtitle":"Βρες βοήθεια, πρόσφερε τις δεξιότητές σου ή κέρδισε χρήματα βοηθώντας άλλους","hero.cta.post":"Ζήτησε βοήθεια","hero.cta.browse":"Πρόσφερε βοήθεια","hero.cta.specialists":"Βρες εργασία","hero.search.placeholder":"Τι χρειάζεσαι; π.χ. ηλεκτρολόγος, καθαρισμός...","hero.specialist.title":"Βρες εργασίες κοντά σου","hero.specialist.subtitle":"Ανακάλυψε εργασίες στις κατηγορίες σου και στείλε προσφορά","hero.specialist.cta":"Βρες εργασίες","hero.specialist.search.placeholder":"Αναζήτηση εργασιών... π.χ. ηλεκτρολογία, καθαρισμός","section.categories.specialist":"Βρες εργασίες ανά κατηγορία","section.cities.specialist":"Εργασίες ανά πόλη","how.specialist.step1.title":"Δημιούργησε κάρτα ειδικού","how.specialist.step1.desc":"Δήλωσε κατηγορίες, δεξιότητες και περιοχές — το σύστημα βρίσκει εργασίες αυτόματα","how.specialist.step2.title":"Βρες σχετικές εργασίες","how.specialist.step2.desc":"Ανακάλυψε εργασίες στις κατηγορίες σου και ξεκίνα αμέσως","how.specialist.step3.title":"Στείλε προσφορά & κέρδισε","how.specialist.step3.desc":"Υποβάλε προσφορά με τιμή και χρόνο, επικοινωνήσε και ολοκλήρωσε εργασίες","stats.specialists":"προσφορές","stats.tasks":"εργασίες","stats.categories":"κατηγορίες","stats.free":"δωρεάν εγγραφή","promo.title":"Αποκτήσε Pro δωρεάν — μόνο μέχρι το τέλος του χρόνου","promo.subtitle":"Εγγράψου τώρα και απόλαυσε το πλάνο Pro χωρίς χρέωση. Η προσφορά λήγει στις 31 Δεκεμβρίου.","promo.cta":"Εγγραφή δωρεάν","promo.days":"μέρες","promo.hours":"ώρες","promo.minutes":"λεπτά","promo.seconds":"δευτ.","section.categories":"Δημιούργησε εργασία σε οποιαδήποτε κατηγορία","section.how":"Πώς λειτουργεί","section.recent":"Πρόσφατες εργασίες","section.all":"Δες όλες →","section.more":"ακόμα","section.cities":"Πόλεις & Περιοχές","section.community":"Ένα κοινοτικό έργο για όλους","community.subtitle":"Το CanHelp δεν είναι απλώς μια αγορά — είναι μια κοινότητα αμοιβαίας βοήθειας. Οποιοσδήποτε έχει γνώση ή δεξιότητα μπορεί να βρει έναν πελάτη. Οποιοσδήποτε έχει ένα πρόβλημα μπορεί να βρει έναν ειδικό.","community.point1.title":"Είσαι ειδικός σε κάτι;","community.point1.desc":"Επισκευές, μαθήματα, σχεδιασμός, μεταφράσεις, φροντίδα — κάθε δεξιότητα αξίζει. Δημιούργησε προφίλ και βρες πελάτες κοντά σου.","community.point2.title":"Χρειάζεσαι βοήθεια;","community.point2.desc":"Δημοσίευσε εργασία σε λιγότερο από ένα λεπτό και λάβε προσφορές από επαληθευμένους ειδικούς στην πόλη σου.","community.point3.title":"Βοήθησε το έργο να αναπτυχθεί","community.point3.desc":"Το CanHelp αναπτύσσεται χάρη στις κοινότητες. Μοιράσου το σύνδεσμο με φίλους και γνωστούς — μαζί χτίζουμε κάτι χρήσιμο για όλους.","community.share":"Μοιράσου με φίλους","community.share.copied":"Σύνδεσμος αντιγράφηκε!","section.referral":"Πρόγραμμα παραπομπών","referral.home.subtitle":"Μοιράσου τον σύνδεσμό σου — κάθε νέος χρήστης που εγγράφεται μέσα από αυτόν σου αποφέρει ανταμοιβή.","referral.home.step1.title":"Εγγραφείσε και λάβε σύνδεσμο","referral.home.step1.desc":"Δημιούργησε λογαριασμό και βρες τον μοναδικό σου σύνδεσμο παραπομπής στο προφίλ σου.","referral.home.step2.title":"Μοιράσου με φίλους","referral.home.step2.desc":"Στείλε τον σύνδεσμο σε φίλους, γνωστούς ή δημοσίευσέ τον στα social media.","referral.home.step3.title":"Κέρδισε ανταμοιβές","referral.home.step3.desc":"Μόλις ο φίλος σου επαληθεύσει το email του, λαμβάνεις αυτόματα την ανταμοιβή σου.","referral.home.cta":"Πάρε τον σύνδεσμό σου","referral.home.badge":"Πρόγραμμα παραπομπών","section.faq":"Συχνές Ερωτήσεις","faq.q1":"Πώς λειτουργεί το CanHelp;","faq.a1":"Δημοσίευσε μια εργασία, λάβε προσφορές από ειδικούς, επέλεξε τον καλύτερο και ξεκίνα τη συνεργασία. Είναι γρήγορο, απλό και δωρεάν για πελάτες.","faq.q2":"Πόσο κοστίζει η χρήση της πλατφόρμας;","faq.a2":"Η εγγραφή και η δημοσίευση εργασιών είναι εντελώς δωρεάν για πελάτες. Οι ειδικοί έχουν στη διάθεσή τους δωρεάν πλάνο καθώς και premium επιλογές.","faq.q3":"Πώς μπορώ να γίνω ειδικός;","faq.a3":"Κάνε εγγραφή, πήγαινε στο \xabΓίνε Ειδικός\xbb, συμπλήρωσε το προφίλ σου με δεξιότητες και κατηγορίες και αρχίνισε να λαμβάνεις εργασίες.","faq.q4":"Πώς επιλέγω τον κατάλληλο ειδικό;","faq.a4":"Δες τις αξιολογήσεις, την εμπειρία, τις δεξιότητες και το χαρτοφυλάκιο κάθε ειδικού. Επικοινώνησε μαζί του μέσω chat και συζήτα τις λεπτομέρειες πριν αποφασίσεις.","faq.q5":"Τι γίνεται αν δεν είμαι ικανοποιημένος;","faq.a5":"Μπορείς να αφήσεις αξιολόγηση για τον ειδικό και να τον βαθμολογήσεις από 1 έως 5 αστέρια. Οι αξιολογήσεις βοηθούν άλλους χρήστες να επιλέξουν έμπιστους επαγγελματίες.","faq.q6":"Μπορώ να επικοινωνήσω με τον ειδικό πριν την αποδοχή;","faq.a6":"Ναι. Μόλις λάβεις μια προσφορά, μπορείς να ανοίξεις chat με τον ειδικό, να κάνεις ερωτήσεις και να συντονίσεις τις λεπτομέρειες πριν αποφασίσεις.","faq.q7":"Πόσος χρόνος χρειάζεται για να λάβω προσφορές;","faq.a7":"Συνήθως μέσα σε λίγες ώρες. Οι ειδικοί λαμβάνουν ειδοποίηση για νέες εργασίες και μπορούν να απαντήσουν γρήγορα.","faq.q8":"Μπορώ να δημοσιεύσω εργασία σε οποιαδήποτε πόλη της Ελλάδας;","faq.a8":"Ναι! Το CanHelp καλύπτει όλη την Ελλάδα. Μπορείς να βρεις ειδικούς στην Αθήνα, στη Θεσσαλονίκη, στην Πάτρα και αλλού.","faq.q9":"Τι είδη εργασιών μπορώ να βρω στο CanHelp;","faq.a9":"Επισκευές, καθαρισμό, ηλεκτρολόγους, μαθήματα, σχεδιασμό, IT, μετακομίσεις, ομορφιά και πολλά άλλα. Οι κατηγορίες αυξάνονται συνεχώς.","faq.q10":"Υπάρχει εφαρμογή για κινητό;","faq.a10":"Ναι! Το CanHelp διατίθεται για Android και iOS. Κατέβασε την εφαρμογή και διαχειρίσου τα πάντα από το τηλέφωνό σου.","how.step1.title":"Δημοσίευσε εργασία","how.step1.desc":"Περίγραψε τι χρειάζεσαι και ορίζε τον προϋπολογισμό σου","how.step2.title":"Λάβε προσφορές","how.step2.desc":"Ειδικοί θα σου στείλουν προσφορές με τιμή και χρόνο","how.step3.title":"Επίλεξε & ξεκίνα","how.step3.desc":"Επέλεξε τον καλύτερο επαγγελματία και ξεκίνα τη συνεργασία","tasks.title":"εργασίες","tasks.filters":"Φίλτρα","tasks.search":"Αναζήτηση","tasks.search.placeholder":"Τίτλος ή λέξη κλειδί...","tasks.search.btn":"Αναζήτηση","tasks.publish":"Δημοσίευση","tasks.category.all":"Όλες","tasks.category.all_in":"Όλα στην","tasks.category.label":"Κατηγορία","tasks.location.label":"Πόλη","tasks.location.placeholder":"π.χ. Αθήνα","tasks.empty":"Δεν βρέθηκαν εργασίες","tasks.empty.cta":"Δημοσίευσε την πρώτη","task.status.open":"Ανοιχτή","task.status.in_progress":"Σε εξέλιξη","task.status.completed":"Ολοκληρωμένη","task.status.cancelled":"Ακυρωμένη","task.status.draft":"Πρόχειρο","task.budget":"Προϋπολογισμός","task.location":"Τοποθεσία","task.deadline":"Ημερομηνία έναρξης","task.expires_at":"Ενεργό έως","task.created_at":"Δημιουργήθηκε","task.customer":"Πελάτης","task.offer.btn":"Υποβολή προσφοράς","task.invite.banner_title":"Σας προσκαλούν σε αυτήν την εργασία","task.invite.banner_hint":"Ο πελάτης σας πρόσκαλεσε προσωπικά","task.invite.accept":"Αποστολή προσφοράς","task.invite.decline":"Άρνηση","offer.accept":"Αποδοχή","offer.decline":"Απόρριψη","task.complete":"Ολοκλήρωση εργασίας","task.complete.confirm":"Να ολοκληρωθεί η εργασία;","task.edit":"Επεξεργασία","task.status_label":"Κατάσταση","task.yours":"Η εργασία σου","task.offer.yours":"Η προσφορά σου","review.leave":"Άφησε αξιολόγηση","review.rating":"Βαθμολογία","review.comment":"Σχόλιο","review.comment.placeholder":"Πες μας για την εμπειρία σου...","review.submit":"Υποβολή αξιολόγησης","review.submitting":"Αποστολή...","review.done":"Η αξιολόγηση καταχωρήθηκε!","profile.reviews":"Αξιολογήσεις","profile.no_reviews":"Δεν υπάρχουν αξιολογήσεις ακόμα","profile.rating":"Βαθμολογία","profile.skills.label":"Δεξιότητες","profile.member_since":"Μέλος από","task.offers":"Προσφορές","task.offers.none":"Δεν υπάρχουν ακόμα προσφορές","create.title":"Δημοσίευση εργασίας","create.field.title":"Τίτλος","create.field.description":"Περιγραφή","create.field.category":"Κατηγορία","create.field.category.select":"Επιλέξτε...","create.field.location":"Τοποθεσία","create.field.location.any":"Οπουδήποτε","create.field.location.all":"Ολόκληρη η πόλη","create.field.budget":"Προϋπολογισμός (€)","create.field.deadline":"Ημερομηνία έναρξης","create.field.expires_at":"Αγγελία ενεργή έως","create.field.expires_at.days":"{n} ημέρες","create.field.budget_negotiable":"Η τιμή είναι διαπραγματεύσιμη","create.field.time_slot":"Χρόνος εκτέλεσης","create.field.time_slot.any":"Οποιαδήποτε","create.field.time_slot.morning":"Πρωινό (08:00–13:00)","create.field.time_slot.afternoon":"Μεσημέρι (13:00–18:00)","create.field.time_slot.evening":"Βράδυ (18:00–22:00)","create.field.time_slot.weekend":"Σαββατοκύριακο","create.field.address":"Διεύθυνση (προαιρετικά)","create.field.address.district":"Συνοικία","create.field.address.street":"Οδός","create.field.address.house":"Αριθμός","create.field.confidential":"Εμπιστευτική σημείωση","create.field.confidential.placeholder":"Λεπτομέρειες που θα δει μόνο ο αναδοχόμενος...","create.field.confidential.hint":"Δεν εμφανίζεται δημόσια","create.field.photos":"Φωτογραφίες","create.field.photos.add":"Προσθήκη φωτογραφίας","create.field.photos.uploading":"Ανέβασμα...","task.budget_negotiable":"Τιμή διαπραγματεύσιμη","task.time_slot":"Χρόνος","task.confidential":"Εμπιστευτική σημείωση","create.field.title.placeholder":"π.χ. Καθαρισμός διαμερίσματος 80τμ","create.field.description.placeholder":"Περίγραψε λεπτομερώς τι χρειάζεσαι...","create.field.location.placeholder":"π.χ. Αθήνα, Κολωνάκι","create.field.budget.placeholder":"π.χ. 100","create.submit":"Δημοσίευση εργασίας","create.submitting":"Δημοσίευση...","login.title":"Καλωσόρισες","login.subtitle":"Σύνδεση στο CanHelp","login.email":"Email","login.password":"Κωδικός","login.submit":"Σύνδεση","login.submitting":"Σύνδεση...","login.error":"Λάθος email ή κωδικός","login.unverified.title":"Επιβεβαιώστε το email σας","login.unverified.desc":"Στείλαμε σύνδεσμο επαλήθευσης στο email σας. Ελέγξτε τα εισερχόμενα (ή spam) και πατήστε το σύνδεσμο.","login.unverified.resend":"Αποστολή νέου email επαλήθευσης","login.unverified.sending":"Αποστολή...","login.unverified.sent":"✓ Εστάλη — ελέγξτε τα εισερχόμενα","profile.email.verified":"Email επαληθεύτηκε","profile.email.not_verified":"Email δεν επαληθεύτηκε","login.no_account":"Δεν έχεις λογαριασμό;","login.register_link":"Εγγραφή","login.forgot_password":"Ξέχασα τον κωδικό","login.or_continue_with":"ή συνεχίστε με","login.continue_google":"Σύνδεση με Google","forgot.title":"Ξέχασα τον κωδικό","forgot.subtitle":"Εισάγετε το email σας για να λάβετε σύνδεσμο ανάκτησης","forgot.email":"Email","forgot.submit":"Αποστολή","forgot.submitting":"Αποστολή...","forgot.sent.title":"Ελέγξτε τα εισερχόμενά σας","forgot.sent.desc":"Αν υπάρχει λογαριασμός με αυτό το email, θα σας στείλουμε σύνδεσμο ανάκτησης κωδικού.","forgot.back_to_login":"Επιστροφή στη σύνδεση","forgot.error":"Αποτυχία αποστολής. Ελέγξτε το email σας ή δοκιμάστε ξανά.","forgot.error.not_found":"Δεν βρέθηκε λογαριασμός με αυτό το email.","forgot.error.send_failed":"Αποτυχία αποστολής email. Δοκιμάστε ξανά αργότερα","reset.title":"Νέος κωδικός","reset.subtitle":"Εισάγετε τον νέο σας κωδικό","reset.password":"Νέος κωδικός","reset.confirm":"Επιβεβαίωση κωδικού","reset.submit":"Αλλαγή κωδικού","reset.submitting":"Αποθήκευση...","reset.success":"Ο κωδικός άλλαξε επιτυχώς. Ανακατεύθυνση στη σύνδεση...","reset.back_to_login":"Επιστροφή στη σύνδεση","reset.error.mismatch":"Οι κωδικοί δεν ταιριάζουν","reset.error.invalid":"Μη έγκυρος σύνδεσμος. Παρακαλώ ζητήστε νέο.","register.title":"Εγγραφή","register.subtitle":"Δημιουργία λογαριασμού στο CanHelp","register.first_name":"Όνομα","register.last_name":"Επώνυμο","register.email":"Email","register.password":"Κωδικός (min 8 χαρακτήρες)","register.role":"Ρόλος","register.role.customer":"Χρήστης","register.role.customer.desc":"Δημοσιεύω εργασίες","register.role.specialist":"Ειδικός","register.role.specialist.desc":"Αναλαμβάνω εργασίες","register.submit":"Δημιουργία λογαριασμού","register.submitting":"Εγγραφή...","register.has_account":"Έχεις ήδη λογαριασμό;","register.login_link":"Σύνδεση","register.continue_google":"Εγγραφή με Google","register.check_email.title":"Ελέγξτε το email σας","register.check_email.desc":"Στείλαμε σύνδεσμο επαλήθευσης στη διεύθυνση email σας. Ελέγξτε τα εισερχόμενα (ή spam) και πατήστε τον σύνδεσμο.","register.check_email.login":"Επιστροφή στη σύνδεση","register.captcha_failed":"Η επαλήθευση CAPTCHA απέτυχε. Παρακαλώ δοκιμάστε ξανά.","dashboard.title":"Πίνακας ελέγχου","dashboard.new_task":"+ Νέα εργασία","dashboard.onboarding.title":"Καλωσήλθατε στο CanHelp \uD83D\uDC4B","dashboard.onboarding.subtitle":"Διαλέξτε πώς θέλετε να ξεκινήσετε.","dashboard.onboarding.helper.title":"Πρόσφερε τη βοήθειά σου","dashboard.onboarding.helper.desc":"Συμπλήρωσε το προφίλ σου — δεξιότητες, κατηγορίες και περιοχές. Παίρνει μόνο λίγα λεπτά και αρχίζεις να δέχεσαι παραγγελίες.","dashboard.onboarding.helper.cta":"Συμπλήρωσε το προφίλ","dashboard.onboarding.requester.title":"Χρειάζεσαι βοήθεια;","dashboard.onboarding.requester.desc":"Δημοσίευσε μια εργασία και οι βοηθοί θα σου στείλουν προσφορές.","dashboard.onboarding.requester.cta":"Δημοσίευσε εργασία","dashboard.my_tasks":"Οι εργασίες μου","dashboard.my_offers":"Οι προσφορές μου","dashboard.invitations":"Προσκλήσεις για εργασία","dashboard.offers_count":"προσφορές","dashboard.declined_count":"απορρίφθηκαν","dashboard.completed_tasks":"Ολοκληρωμένες εργασίες","dashboard.completed_offers":"Ολοκληρωμένες προσφορές","dashboard.review_pending":"Η αξιολόγηση δεν έχει υποβληθεί ακόμα","tasks.new.top_specialists":"Κορυφαίοι ειδικοί","tasks.new.select_category":"Επιλέξτε κατηγορία για να δείτε ειδικούς","tasks.new.invite":"Πρόσκληση","tasks.new.invited":"Επιλέχθηκε ✓","reviews.count":"αξιολογήσεις","filter.location":"Τοποθεσία","filter.language":"Γλώσσες","filter.language.any":"Οποιαδήποτε γλώσσα","filter.category.all":"Όλες οι κατηγορίες","user.categories":"Κατηγορίες","user.work_area":"Περιοχή εργασίας","user.specialist_cards":"Κάρτες υπηρεσιών","card.skills":"Δεξιότητες","card.categories":"Κατηγορίες","card.geography":"Περιοχή εργασίας","card.portfolio":"Χαρτοφυλάκιο","card.close":"Κλείσιμο","dashboard.tasks.empty":"Δεν έχεις δημοσιεύσει εργασίες","dashboard.tasks.empty.cta":"Δημοσίευσε την πρώτη σου","dashboard.tasks.add_new":"Πρόσθεσε νέα εργασία","dashboard.offers.empty":"Δεν έχεις υποβάλλει προσφορές","dashboard.offers.empty.cta":"Βρες εργασίες","dashboard.customer.specialists_title":"Ψάχνεις εκτελεστή;","dashboard.customer.specialists_hint":"Δες προφίλ ειδικών, διάβασε αξιολογήσεις και κάλεσέ τους στις εργασίες σου","dashboard.customer.specialists_cta":"Βρες ειδικό","dashboard.customer.how_title":"Πώς λειτουργεί","dashboard.customer.step1":"Δημιούργησε εργασία με περιγραφή και προϋπολογισμό","dashboard.customer.step2":"Οι ειδικοί θα στείλουν προσφορές με τιμή και χρόνο","dashboard.customer.step3":"Επίλεξε τον κατάλληλο και ξεκίνα τη συνεργασία","notif.title":"Ειδοποιήσεις","notif.mark_all":"Σήμανση όλων ως αναγνωσμένα","notif.empty":"Δεν υπάρχουν ειδοποιήσεις","notif.type.generic":"Ειδοποίηση","notif.type.new_offer":"Νέα προσφορά","notif.type.offer_accepted":"Η προσφορά σας έγινε δεκτή","notif.type.offer_declined":"Η προσφορά σας απορρίφθηκε","notif.type.task_completed":"Η εργασία ολοκληρώθηκε","notif.type.task_cancelled":"Η εργασία ακυρώθηκε","notif.type.new_message":"Νέο μήνυμα","notif.type.new_review":"Νέα αξιολόγηση","notif.type.task_invite":"Πρόσκληση σε εργασία","notif.type.referral_reward":"Ανταμοιβή παραπομπής","notif.type.specialist_card_submitted":"Η κάρτα στάλθηκε για έλεγχο","notif.type.specialist_card_approved":"Η κάρτα εγκρίθηκε","notif.type.specialist_card_rejected":"Η κάρτα απορρίφθηκε","notif.body.new_offer":"Νέα προσφορά για \xab{title}\xbb","notif.body.offer_accepted":"Η προσφορά σας για \xab{title}\xbb έγινε δεκτή","notif.body.offer_declined":"Η προσφορά σας για \xab{title}\xbb απορρίφθηκε","notif.body.task_invite":"Σας προσκαλούν για \xab{title}\xbb","notif.body.new_review":"Λάβατε αξιολόγηση {rating}★","notif.body.referral_reward":"Προστέθηκαν {days} ημέρες πρόσβασης στο πλάνο \xab{plan}\xbb στον λογαριασμό σας!","notif.body.specialist_card_submitted":"Η κάρτα \xab{title}\xbb στάλθηκε για έλεγχο","notif.body.specialist_card_approved":"Η κάρτα \xab{title}\xbb εγκρίθηκε και δημοσιεύτηκε","notif.body.specialist_card_rejected":"Η κάρτα \xab{title}\xbb δεν εγκρίθηκε. Διορθώστε την και στείλτε την ξανά.","offer.status.pending":"Εκκρεμεί","offer.status.accepted":"Αποδεκτή","offer.status.declined":"Απορρίφθηκε","offer.status.withdrawn":"Αποσύρθηκε","offer.status.other_accepted":"Επιλέχθηκε άλλος ειδικός","common.loading":"Φόρτωση...","common.error":"Σφάλμα","common.save":"Αποθήκευση","common.saving":"Αποθήκευση...","common.cancel":"Ακύρωση","common.add":"Προσθήκη","common.close":"Κλείσιμο","common.edit":"Επεξεργασία","common.delete":"Διαγραφή","common.from":"από","common.currency":"€","common.greece":"Ελλάδα","chat.connected":"Συνδεδεμένος","chat.disconnected":"Αποσυνδεδεμένος","chat.no_rooms":"Δεν υπάρχουν συνομιλίες ακόμα","chat.task_fallback":"Εργασία","chat.select":"Επίλεξε συνομιλία","chat.no_messages":"Δεν υπάρχουν μηνύματα","chat.placeholder":"Γράψε μήνυμα... (Enter για αποστολή)","chat.conversation_fallback":"Συνομιλία","chat.direct_chat":"Απευθείας συνομιλία","chat.linked_task":"Συνδεδεμένη εργασία","chat.write_btn":"Μήνυμα","chat.just_now":"μόλις τώρα","chat.min_ago":"λ","chat.write_specialist":"Γράψε στον ειδικό","chat.write_customer":"Γράψε στον πελάτη","chat.notif_settings":"Ρυθμίσεις ειδοποιήσεων","chat.notif_messages":"Ειδοποιήσεις για νέα μηνύματα","chat.toast_title":"Νέο μήνυμα","chat.toast_open":"Άνοιγμα συνομιλίας","offer.price":"Τιμή","offer.price.placeholder":"π.χ. 80","offer.customer_budget":"Προϋπολογισμός πελάτη","offer.message":"Μήνυμα","offer.optional":"προαιρετικό","offer.message.placeholder":"Παρουσίασε τον εαυτό σου, την εμπειρία σου και γιατί είσαι η καλύτερη επιλογή...","offer.submitting":"Αποστολή...","profile.photo":"Φωτογραφία προφίλ","profile.photo.change":"Αλλαγή φωτογραφίας","profile.photo.hint":"JPEG, PNG, WebP \xb7 έως 5MB","profile.basic_info":"Βασικά στοιχεία","profile.phone":"Τηλέφωνο","profile.phone.placeholder":"+30 6901234567","profile.bio":"Σύντομη περιγραφή","profile.bio.placeholder":"Πες μας λίγα λόγια για εσένα...","profile.language":"Γλώσσα","profile.language.hint":"Γλώσσα διεπαφής και email ειδοποιήσεων","profile.languages":"Γλώσσες επικοινωνίας","profile.languages.hint":"Επιλέξτε όλες τις γλώσσες που μιλάτε","profile.skills":"Δεξιότητες","profile.skills.subtitle":"Προσθέσε τις υπηρεσίες που προσφέρεις","profile.skills.placeholder":"π.χ. Καθαρισμός, IT, Μαθήματα...","profile.role":"Ρόλος λογαριασμού","profile.role.specialist":"\uD83D\uDD27 Βοηθός","profile.role.admin":"\uD83D\uDC51 Admin","profile.role.customer":"\uD83D\uDC64 Χρήστης","profile.role.user":"\uD83D\uDC64 Χρήστης","profile.role.change":"Για αλλαγή ρόλου επικοινωνήστε με την υποστήριξη.","profile.become_specialist":"Πρόσφερε βοήθεια","profile.become_specialist.desc":"Δημιούργησε το προφίλ βοηθού σου, πρόσφερε τις δεξιότητές σου και αρχίνισε να λαμβάνεις εργασίες.","become_specialist.hero.title":"Πρόσφερε τις δεξιότητές σου","become_specialist.hero.subtitle":"Δημιούργησε προφίλ βοηθού και λάβε αιτήματα από ανθρώπους που χρειάζονται βοήθεια","become_specialist.how.title":"Πώς λειτουργεί","become_specialist.step1.title":"Δημιούργησε κάρτα ειδικού","become_specialist.step1.desc":"Δήλωσε κατηγορίες, δεξιότητες και περιοχές κάλυψης — το σύστημα θα βρει τις κατάλληλες εργασίες για σένα αυτόματα","become_specialist.step2.title":"Βρες εργασίες","become_specialist.step2.desc":"Ανακάλυψε εργασίες στις κατηγορίες σου στην ενότητα \xabΑναζήτηση εργασιών\xbb","become_specialist.step3.title":"Στείλε προσφορά & κέρδισε","become_specialist.step3.desc":"Υποβάλε προσφορές με τιμή και χρόνο, επικοινωνήσε με πελάτες και ολοκλήρωσε εργασίες","become_specialist.benefits.title":"Πλεονεκτήματα προφίλ ειδικού","become_specialist.benefit1":"Αναζήτηση εργασιών ανά κατηγορία και τοποθεσία","become_specialist.benefit2":"Δημόσιο προφίλ με αξιολογήσεις πελατών","become_specialist.benefit3":"Πρόγραμμα διαθεσιμότητας ορατό στους πελάτες","become_specialist.benefit4":"Προσθήκη σε αγαπημένα από πελάτες","become_specialist.cta":"Περισσότερα","become_specialist.free_badge":"Δωρεάν εγγραφή","profile.tab.notifications":"Ειδοποιήσεις","profile.tab.reviews":"Αξιολογήσεις","profile.tab.referral":"Παραπομπές","profile.tab.auto_response":"Αυτόματη απάντηση","profile.tab.site":"Site","profile.site.title":"Προσωπική σελίδα","profile.site.url_label":"Προσωπικό site","profile.site.copy":"Αντιγραφή","profile.site.copied":"Αντιγράφηκε","profile.site.visible_title":"Τι εμφανίζεται στη σελίδα σας","profile.site.visible.name":"Όνομα και φωτογραφία","profile.site.visible.bio":"Βιογραφικό","profile.site.visible.rating":"Αξιολόγηση και κριτικές","profile.site.visible.portfolio":"Χαρτοφυλάκιο / Κάρτες","profile.site.visible.contacts":"Στοιχεία επικοινωνίας","profile.site.visible.full_last_name":"Πλήρες επώνυμο","profile.site.visible.services":"Κάρτες υπηρεσιών","profile.site.visible.reviews":"Ενότητα κριτικών","profile.site.visible.status":"Κατάσταση \xabΈτοιμος να βοηθήσω\xbb","profile.site.theme":"Θέμα εμφάνισης","profile.site.theme.dark":"Σκοτεινό","profile.site.theme.light":"Φωτεινό","profile.site.slug_taken":"Αυτή η διεύθυνση είναι ήδη κατειλημμένη","profile.site.stats.title":"Στατιστικά επισκεψιμότητας","profile.site.stats.days":"τελευταίες 30 ημέρες","profile.site.stats.views":"Προβολές","profile.site.stats.unique":"Μοναδικοί επισκέπτες","profile.site.stats.messages":"Μηνύματα","profile.site.stats.total_views":"Συνολικές προβολές","profile.site.stats.total_unique":"Μοναδικοί επισκέπτες","profile.site.stats.total_messages":"Μηνύματα","profile.site.stats.empty":"Δεν υπάρχουν δεδομένα ακόμη","profile.site.stats.loading":"Φόρτωση στατιστικών...","profile.site.stats.no_slug":"Ορίστε τη διεύθυνση του site για να δείτε στατιστικά","profile.site.edit_bio_hint":"Το βιογραφικό και η φωτογραφία ρυθμίζονται στην καρτέλα \xabΒασικά\xbb.","profile.site.seo.title":"SEO — μεταδεδομένα σελίδας","profile.site.seo.hint":"Εμφανίζεται στα αποτελέσματα αναζήτησης. Αποθηκεύστε για αυτόματη μετάφραση σε όλες τις γλώσσες.","profile.site.seo.site_title":"Τίτλος σελίδας","profile.site.seo.site_title_placeholder":"Γιάννης Παπαδόπουλος — Υδραυλικός στην Αθήνα","profile.site.seo.site_desc":"Μετα-περιγραφή","profile.site.seo.site_desc_placeholder":"Σύντομη περιγραφή για τις μηχανές αναζήτησης...","status.can_help_now_hint":"Η κάρτα σου εμφανίζεται ψηλότερα","status.need_help_hint":"Οι ειδικοί μπορούν να σε βοηθήσουν","profile.referral.title":"Πρόγραμμα παραπομπών","profile.referral.desc":"Μοιράσου τον σύνδεσμο σου και κέρδισε ανταμοιβές για κάθε νέο χρήστη.","profile.referral.link_label":"Ο σύνδεσμος παραπομπής σου","profile.referral.copy":"Αντιγραφή","profile.referral.copied":"Αντιγράφηκε!","profile.referral.invited_count":"επιτυχείς παραπομπές","profile.referral.no_code":"Ο κωδικός παραπομπής δεν είναι διαθέσιμος.","notifications.title":"Ρυθμίσεις ειδοποιήσεων","notifications.email.new_tasks":"Email για νέες εργασίες","notifications.email.new_tasks.desc":"Λάβε email όταν δημοσιευτεί νέα εργασία στις κατηγορίες σου","notifications.messages.desc":"Λαμβάνεις ειδοποίηση όταν έρθει νέο μήνυμα","notifications.saved":"Ρυθμίσεις αποθηκεύτηκαν","notifications.plan_required":"Συνδρομή απαιτείται για αυτή τη λειτουργία","profile.tab.info":"Βασικά στοιχεία","profile.tab.finance":"Οικονομικά","profile.tab.skills":"Δεξιότητες","profile.tab.categories":"Κατηγορίες","profile.tab.geography":"Γεωγραφία","profile.specialist.categories":"Κατηγορίες εργασιών","profile.specialist.categories.desc":"Επίλεξε τις κατηγορίες στις οποίες εργάζεσαι","profile.specialist.geography":"Περιοχές κάλυψης","profile.specialist.geography.desc":"Επίλεξε τις πόλεις / περιοχές όπου δραστηριοποιείσαι","profile.saving":"Αποθήκευση...","profile.upload.error":"Σφάλμα κατά την αναφόρτωση","profile.saved":"Αποθηκεύτηκε","profile.tab.cards":"Προσφορές","profile.cards.count":"Προσφορές","profile.cards.add":"Νέα προσφορά","profile.cards.new_title":"Τίτλος νέας προσφοράς","profile.cards.placeholder":"π.χ. Υδραυλικά","profile.cards.create":"Δημιουργία","profile.cards.cancel":"Ακύρωση","profile.cards.empty":"Δεν έχετε προσφορές","profile.cards.empty_hint":"Δημιουργήστε την πρώτη σας κάρτα για να προβάλετε τις υπηρεσίες σας στους πελάτες.","profile.cards.create_first":"Δημιουργήστε την πρώτη σας προσφορά","profile.cards.delete_confirm":"Διαγραφή προσφοράς;","profile.listing_requirements.published_card":"Δημοσιεύστε τουλάχιστον μία κάρτα","profile.listing_requirements.title":"Το προφίλ σας δεν εμφανίζεται ακόμη στις προσφορές","profile.listing_requirements.hint":"Για να γίνει ορατή η κάρτα, ολοκληρώστε αυτές τις προϋποθέσεις:","profile.listing_requirements.bio":"Προσθέστε ένα σύντομο βιογραφικό στην ενότητα προφίλ","profile.listing_requirements.categories":"Προσθέστε τουλάχιστον μία κατηγορία στην ενεργή κάρτα","profile.listing_requirements.locations":"Προσθέστε τουλάχιστον μία τοποθεσία στην ενεργή κάρτα","profile.listing_requirements.card_inactive":"Κάντε την κάρτα ενεργή","profile.listing_requirements.review_pending":"Η κάρτα είναι υπό έλεγχο","profile.card.visibility_issue":"Η κάρτα δεν εμφανίζεται στις προσφορές","profile.card.tab.main":"Γενικά","profile.card.tab.skills":"Δεξιότητες","profile.card.tab.categories":"Κατηγορίες","profile.card.tab.geography":"Γεωγραφία","profile.card.tab.portfolio":"Γκαλερί","profile.card.tab.pricelist":"Τιμοκατάλογος","profile.card.pricelist.empty":"Δεν έχουν οριστεί ομάδες τιμοκαταλόγου.","profile.card.pricelist.add_group":"Προσθήκη ομάδας","profile.card.pricelist.group_title":"Τίτλος ομάδας","profile.card.pricelist.add_item":"Προσθήκη στοιχείου","profile.card.pricelist.item_name":"Υπηρεσία / εργασία","profile.card.pricelist.item_desc":"Περιγραφή (προαιρετικό)","profile.card.pricelist.item_price":"Τιμή","profile.card.pricelist.item_unit":"Μονάδα (π.χ. /ώρα)","profile.card.pricelist.save_group":"Αποθήκευση ομάδας","profile.card.pricelist.save_item":"Αποθήκευση","profile.card.pricelist.delete_group":"Διαγραφή ομάδας","profile.card.pricelist.delete_item":"Διαγραφή","profile.card.active":"Ενεργή","profile.card.review_pending":"Σε αναμονή έγκρισης","profile.card.review_pending_hint":"Η κάρτα σας ελέγχεται τώρα από τη διαχείριση.","profile.card.review_submitted":"Η κάρτα στάλθηκε για έλεγχο","profile.card.review_approved":"Η κάρτα εγκρίθηκε","profile.card.review_approved_hint":"Η κάρτα σας εμφανίζεται τώρα στις προσφορές.","profile.card.review_rejected":"Η κάρτα απορρίφθηκε","profile.card.review_rejected_hint":"Η κάρτα σας δεν εγκρίθηκε. Διορθώστε την και στείλτε την ξανά.","profile.card.submit_review":"Αποστολή για έλεγχο","profile.card.withdraw_review":"Ανάκληση αίτησης","profile.card.unpublish":"Αφαίρεση από δημοσίευση","profile.card.save":"Αποθήκευση","profile.card.saved":"Αποθηκεύτηκε","profile.card.delete":"Διαγραφή","profile.card.skill.add":"Προσθήκη δεξιότητας","profile.card.photo.add":"Προσθήκη φωτογραφίας","profile.card.photo.uploading":"Μεταφόρτωση...","profile.card.photo.empty":"Δεν υπάρχουν φωτογραφίες","profile.card.item.title":"Τίτλος","profile.card.item.desc":"Περιγραφή","profile.card.item.save":"Αποθήκευση","profile.card.item.cancel":"Ακύρωση","profile.card.item.edit":"Επεξεργασία","profile.card.description":"Περιγραφή κάρτας","profile.card.desc_auto_translate":"Κατά την αποθήκευση θα μεταφραστεί αυτόματα σε άλλες γλώσσες","profile.card.desc_translated":"Υπάρχουν μεταφράσεις:","profile.upgrade.cards_limit":"Όριο χαρτοφυλακίων εξαντλήθηκε","profile.upgrade.plan":"Τρέχον πλάνο:","profile.upgrade.contact":"Επικοινωνήστε με τον διαχειριστή για αλλαγή πλάνου","profile.upgrade.ok":"Εντάξει","profile.plan.title":"Πλάνο συνδρομής","profile.balance":"Υπόλοιπο","profile.balance.topup":"Αναπλήρωση υπολοίπου","profile.balance.topup.title":"Αναπλήρωση υπολοίπου","profile.balance.topup.amount":"Ποσό (σε EUR)","profile.balance.topup.hint":"Επιλέξτε ποσό ή εισαγάγετε μανούαλα","profile.balance.topup.submit":"Πληρωμή","profile.balance.topup.loading":"Ρεδιρεκτάρισμα...","profile.balance.topup.error":"Σφάλμα μετάβασης στην πληρωμή. Προσπαθήστε ξανά.","payment.success.title":"Πληρωμή επιτυχής!","payment.success.desc":"Το υπόλοιπό σας ενημερώθηκε.","payment.cancelled.title":"Ακύρωση πληρωμής","payment.cancelled.desc":"Η πληρωμή ακυρώθηκε. Κανένα χρήμα δεν χρεώθηκε.","payment.pending.title":"Σε εξέλιξη...","payment.pending.desc":"Επεξεργαζόμαστε την πληρωμή σας.","payment.back_to_profile":"Επιστροφή στο προφίλ","profile.plan.basic":"Βασικό (δωρεάν)","profile.plan.contact_upgrade":"Επικοινωνήστε με τον διαχειριστή για αναβάθμιση","profile.plan.cards_up_to":"Χαρτοφυλάκια: έως","profile.plan.cards_unlimited":"Χαρτοφυλάκια: απεριόριστα","profile.plan.tasks_up_to":"Εργασίες: έως","profile.plan.offers_up_to":"Προσφορές: έως","profile.plan.valid_until":"Ισχύει έως","profile.plan.no_expiry":"Δεν λήγει","create.error":"Σφάλμα κατά τη δημοσίευση","tasks.category.general":"Γενικά","tasks.budget.range":"Εύρος:","tasks.budget.from":"από","tasks.budget.to":"έως","tasks.filter.reset":"Εκκαθάριση φίλτρων","tasks.load_more":"Φόρτωση ακόμα","tasks.showing":"Αποτελέσματα:","tasks.field.budget":"Προϋπολογισμός, €","admin.title":"Πίνακας Διαχείρισης","admin.tab.stats":"Στατιστικά","admin.tab.users":"Χρήστες","admin.tab.tasks":"Εργασίες","admin.tab.reports":"Αναφορές","admin.tab.moderation":"Μονάδα ελέγχου","admin.stats.users":"Χρήστες","admin.stats.tasks":"Εργασίες","admin.stats.offers":"Προσφορές","admin.stats.reviews":"Αξιολογήσεις","admin.tasks.by_status":"Εργασίες ανά κατάσταση","admin.col.user":"Χρήστης","admin.col.email":"Email","admin.col.role":"Ρόλος","admin.col.registered":"Εγγραφή","admin.col.status":"Κατάσταση","admin.col.title":"Τίτλος","admin.col.budget":"Προϋπολογισμός","admin.col.created":"Δημιουργία","admin.users.active":"Ενεργός","admin.users.inactive":"Ανενεργός","admin.users.deactivate":"Απενεργοποίηση","admin.users.activate":"Ενεργοποίηση","admin.tasks.cancel":"Ακύρωση","admin.reports.none":"Δεν υπάρχουν αναφορές","admin.moderation.none":"Δεν βρέθηκαν προσφορές για έλεγχο","admin.moderation.pending":"Σε αναμονή","admin.moderation.active":"Ενεργό","admin.moderation.approve":"Έγκριση","admin.moderation.block":"Μπλοκάρισμα","admin.moderation.pending_title":"Προσφορές προς έγκριση","admin.moderation.active_title":"Ενεργές προσφορές","admin.moderation.pending_count":"Σε αναμονή","admin.moderation.active_count":"Ενεργές","admin.moderation.pending_hint":"Νέες προσφορές που περιμένουν έγκριση","admin.moderation.active_hint":"Ενεργές προσφορές που μπορείτε να μπλοκάρετε","admin.moderation.pending_empty":"Δεν υπάρχουν νέες προσφορές προς έγκριση","admin.moderation.active_empty":"Δεν βρέθηκαν ενεργές προσφορές","admin.reports.reviewed":"Αναθεωρήθηκε","admin.reports.dismiss":"Απόρριψη","admin.pagination.total":"Σύνολο","admin.users.role.change":"Αλλαγή ρόλου","admin.users.search.placeholder":"Αναζήτηση ονόματος ή email...","admin.tasks.delete":"Διαγραφή","admin.tasks.delete.confirm":"Διαγραφή αυτής της εργασίας μόνιμα;","admin.tasks.search.placeholder":"Αναζήτηση τίτλου...","admin.col.customer":"Πελάτης","admin.col.reporter":"Καταγγέλλων","admin.col.target":"Στόχος","admin.filter.all_roles":"Όλοι οι ρόλοι","admin.filter.all_statuses":"Όλες οι καταστάσεις","admin.reports.target.task":"Εργασία","admin.reports.target.user":"Χρήστης","admin.tab.categories":"Κατηγορίες","admin.tab.locations":"Πόλεις & Περιοχές","admin.tab.logs":"Αρχεία","admin.tab.plans":"Πακέτα","admin.tab.settings":"Ρυθμίσεις","admin.logs.subtab.ai":"AI Logs","admin.logs.subtab.activity":"Δραστηριότητα","admin.logs.subtab.mail":"Mail","admin.logs.subtab.notifications":"Ειδοποιήσεις","admin.notif_logs.type":"Τύπος","admin.notif_logs.title":"Τίτλος","admin.notif_logs.read":"Διαβασμένο","admin.notif_logs.empty":"Δεν υπάρχουν αρχεία ειδοποιήσεων","admin.stats.notif_chart_title":"Ειδοποιήσεις ανά ημέρα","admin.stats.notif_label":"Ειδοποιήσεις","admin.stats.mail_chart_title":"Emails ανά ημέρα","admin.stats.mail_label":"Emails","admin.filter.all":"Όλα","admin.stats.specialists":"Βοηθοί","admin.col.plan":"Πακέτο","admin.back_home":"Αρχική","admin.plans.title":"Πακέτα συνδρομής","admin.plans.add":"+ Νέο πακέτο","admin.plans.empty":"Δεν υπάρχουν πακέτα","admin.plans.form.new":"Νέο πακέτο","admin.plans.form.edit":"Επεξεργασία πακέτου","admin.plans.form.name":"Όνομα","admin.plans.form.price":"Τιμή (EUR)","admin.plans.form.old_price":"Παλιά τιμή (EUR, προαιρετικό)","admin.plans.form.max_offers":"Μέγ. προσφορές (κενό = χωρίς όριο)","admin.plans.form.max_cards":"Μέγ. προσφορές (κενό = χωρίς όριο)","admin.plans.form.duration_days":"Διάρκεια (ημέρες, κενό = χωρίς λήξη)","admin.plans.form.description":"Περιγραφή","admin.plans.form.features":"Δυνατότητες (μία ανά γραμμή)","admin.plans.form.notify":"Ειδοποιήσεις νέων εργασιών","admin.plans.form.default":"Προεπιλογή","admin.plans.form.active":"Ενεργό","admin.plans.form.order":"Σειρά","admin.plans.form.role":"Ρόλος","admin.plans.form.tier":"Επίπεδο","admin.plans.form.role.customer":"Πελάτης","admin.plans.form.role.specialist":"Βοηθός","admin.plans.form.tier.free":"Δωρεάν","admin.plans.form.tier.pro":"Pro","admin.plans.form.tier.ultimate":"Ultimate","admin.plans.form.section.limits":"Όρια (κενό = χωρίς όριο)","admin.plans.form.max_messages_day":"Μέγ. μηνύματα/ημέρα","admin.plans.form.max_orders_day":"Μέγ. παραγγελίες/ημέρα","admin.plans.form.max_skills":"Μέγ. δεξιότητες","admin.plans.form.max_profiles":"Μέγ. προφίλ","admin.plans.form.max_portfolio":"Μέγ. στοιχεία χαρτοφυλακίου","admin.plans.form.section.boost":"Πολλαπλασιαστές & Ενίσχυση","admin.plans.form.search_boost":"Ενίσχυση αναζήτησης","admin.plans.form.offers_multiplier":"Πολλαπλασιαστής προσφορών","admin.plans.form.section.contact":"Δικαιώματα επικοινωνίας","admin.plans.form.can_contact_free":"Επικοινωνία με δωρεάν χρήστες","admin.plans.form.can_contact_pro":"Επικοινωνία με Pro χρήστες","admin.plans.form.can_contact_all":"Επικοινωνία με όλους","admin.plans.form.can_show_contact":"Εμφάνιση στοιχείων επικοινωνίας","admin.plans.form.can_view_phone":"Προβολή τηλεφώνου","admin.plans.form.section.features":"Λειτουργίες","admin.plans.form.upload_video":"Μεταφόρτωση βίντεο","admin.plans.form.favorites":"Αγαπημένα","admin.plans.form.google_calendar":"Google Calendar","admin.plans.form.verified_badge":"Σήμα επαλήθευσης","admin.plans.form.highlighted_reviews":"Προβεβλημένες κριτικές","admin.plans.form.personal_site":"Προσωπική σελίδα","admin.plans.form.can_help_now":"Κατάσταση \xabΜπορώ να βοηθήσω\xbb","admin.plans.form.need_help":"Κατάσταση \xabΧρειάζομαι βοήθεια\xbb","admin.plans.form.auto_response":"Αυτόματη απάντηση","admin.plans.form.auto_match":"Αυτόματη αντιστοίχιση","admin.plans.form.price_list":"Τιμοκατάλογος","admin.plans.form.instant_dispatch_free":"Άμεση αποστολή (δωρεάν)","admin.plans.form.instant_dispatch_pro":"Άμεση αποστολή (Pro)","admin.plans.badge.default":"Προεπιλογή","admin.plans.badge.inactive":"Ανενεργό","admin.plans.make_default":"Ορισμός ως προεπιλογή","admin.plans.tasks":"Εργασίες","admin.plans.offers":"Προσφορές","admin.plans.cards":"Προσφορές","admin.plans.notify_tasks":"Ειδοποιήσεις εργασιών","admin.plans.delete.confirm":"Διαγραφή πακέτου","admin.activity.title":"Αρχείο δραστηριότητας","admin.activity.event":"Γεγονός","admin.activity.all_events":"Όλα τα γεγονότα","admin.activity.from":"Από","admin.activity.to":"Έως","admin.activity.reset":"Επαναφορά","admin.activity.total":"Σύνολο","admin.activity.empty":"Δεν υπάρχουν εγγραφές","admin.mail.event":"Συμβάν email","admin.mail.all_events":"Όλα τα email συμβάντα","admin.mail.from":"Από","admin.mail.to":"Έως","admin.mail.reset":"Επαναφορά","admin.mail.total":"Σύνολο","admin.mail.empty":"Δεν υπάρχουν email logs","admin.mail.recipient":"Παραλήπτης","admin.mail.provider":"Πάροχος","admin.mail.details":"Λεπτομέρειες","admin.mail.status":"Κατάσταση","admin.mail.success":"Επιτυχία","admin.mail.failed":"Σφάλμα","admin.event.email_sent":"Email sent","admin.event.email_failed":"Email failed","admin.event.email_dev":"Email DEV fallback","admin.event.admin_email_test_sent":"Admin test email sent","admin.event.admin_email_test_failed":"Admin test email failed","admin.logs.empty":"Δεν υπάρχουν εγγραφές","admin.logs.date":"Ημερομηνία","admin.logs.provider":"Πάροχος","admin.logs.model":"Μοντέλο","admin.logs.action":"Ενέργεια","admin.logs.langs":"Γλώσσες","admin.logs.in":"Είσοδος","admin.logs.out":"Έξοδος","admin.logs.total":"Σύνολο","admin.logs.ms":"ms","admin.logs.status":"Κατάσταση","admin.stats.activity_30d":"Δραστηριότητα 30 ημερών","admin.stats.tasks_label":"Εργασίες","admin.stats.users_label":"Χρήστες","admin.stats.specialists_label":"Βοηθοί","admin.stats.tokens_title":"Χρήση tokens (ανά μήνα)","admin.stats.tokens_out":"Εξερχόμενα","admin.stats.tokens_in":"Εισερχόμενα","admin.stats.tokens_out_label":"Εξερχόμενα tokens","admin.stats.tokens_in_label":"Εισερχόμενα tokens","admin.stats.cost_label":"Κόστος (USD)","admin.stats.tasks_by_status":"Εργασίες ανά κατάσταση","admin.task_status.open":"Ανοιχτές","admin.task_status.in_progress":"Σε εξέλιξη","admin.task_status.completed":"Ολοκληρωμένες","admin.task_status.cancelled":"Ακυρωμένες","admin.task_status.draft":"Προσχέδια","admin.settings.tab.general":"Γενικά","admin.settings.tab.smtp":"E-Mail","admin.settings.tab.notifications":"Ειδοποιήσεις","admin.settings.tab.payment":"Πληρωμή","admin.settings.tab.referral":"Παραπομπές","admin.settings.tab.seo":"SEO","admin.settings.tab.socials":"Κοινωνικά δίκτυα","admin.settings.tab.telegram":"Telegram Bot","admin.settings.telegram.title":"Ρυθμίσεις Telegram Bot","admin.settings.telegram.help":"Δημιουργήστε bot μέσω @BotFather. Για chat ID χρησιμοποιήστε @userinfobot.","admin.settings.telegram.bot_token":"Bot Token","admin.settings.telegram.admin_chat_id":"Admin Chat ID","admin.settings.telegram.admin_chat_hint":"Γράψτε /start στο bot σας, μετά στείλτε μήνυμα μέσω @userinfobot για να λάβετε το chat ID","admin.settings.telegram.channel_id":"Channel ID","admin.settings.telegram.channels_title":"Κανάλια ανά γλώσσα","admin.settings.telegram.channel_hint":"Αναγνωριστικό δημόσιου καναλιού ή @όνομα καναλιού","admin.settings.telegram.notify_registrations":"Ειδοποίηση νέων εγγραφών","admin.settings.telegram.notify_registrations_hint":"Αποστολή μηνύματος στον admin κατά την εγγραφή νέου χρήστη","admin.settings.telegram.post_new_tasks":"Δημοσίευση νέων εργασιών","admin.settings.telegram.post_new_tasks_hint":"Αυτόματη δημοσίευση νέων εργασιών στο κανάλι","admin.settings.telegram.test":"Δοκιμή","admin.settings.telegram.verify":"Επαλήθευση","admin.settings.telegram.test_ok":"Η σύνδεση λειτουργεί","admin.settings.telegram.test_fail":"Σφάλμα σύνδεσης","admin.settings.socials.title":"Σύνδεσμοι κοινωνικών δικτύων","admin.settings.socials.hint":"Συμπληρωμένες εγγραφές εμφανίζονται στο υπόγειο","admin.settings.seo.maintenance_label":"Λειτουργία συντήρησης","admin.settings.seo.maintenance_hint":"Εμφάνιση σελίδας συντήρησης σε όλους τους επισκέπτες","admin.settings.seo.indexing_label":"Ευρετηρίαση από μηχανές αναζήτησης","admin.settings.seo.indexing_hint":"Επιτρέπει στις μηχανές αναζήτησης να ευρετηριάσουν τον ιστότοπο","admin.settings.seo.head_scripts_label":"Scripts στο (JS)","admin.settings.seo.head_scripts_hint":"Εκτελείται σε κάθε σελίδα (Google Tag Manager, analytics κ.λπ.)","admin.settings.seo.site_title_label":"Τίτλος ιστότοπου","admin.settings.seo.site_description_label":"Περιγραφή ιστότοπου (meta description)","admin.settings.referral.title":"Πρόγραμμα παραπομπών","admin.settings.referral.hint":"Επιβράβευσε χρήστες που φέρνουν νέους εγγεγραμμένους.","admin.settings.referral.enabled_label":"Ενεργό","admin.settings.referral.enabled_hint":"Ενεργοποίηση / απενεργοποίηση εφαρμογής ανταμοιβών","admin.settings.referral.customer_section":"Για πελάτες","admin.settings.referral.specialist_section":"Για βοηθούς","admin.settings.referral.plan_label":"Πλάνο ανταμοιβής","admin.settings.referral.no_plan":"— χωρίς πλάνο —","admin.settings.referral.plan_hint":"Αυτό το πλάνο θα ανατεθεί στον χρήστη που έφερε νέους. Εάν το τρέχον πλάνο του είναι υψηλότερο, θα προστεθούν μόνο οι μέρες.","admin.settings.referral.days_label":"Ημέρες ανταμοιβής","admin.settings.referral.days_hint":"Αριθμός ημερών που θα προστεθούν στη λήξη του πλάνου.","admin.settings.general.title":"Γενικές ρυθμίσεις","admin.settings.general.site_name":"Όνομα ιστότοπου","admin.settings.general.site_url":"URL ιστότοπου","admin.settings.general.contact_email":"Email επικοινωνίας","admin.settings.general.support_phone":"Τηλέφωνο υποστήριξης","admin.settings.smtp.title":"Ρυθμίσεις SMTP","admin.settings.smtp.hint":"Χρησιμοποιείται για αποστολή ειδοποιήσεων email.","admin.settings.smtp.host":"SMTP Host","admin.settings.smtp.port":"Θύρα","admin.settings.smtp.encryption":"Κρυπτογράφηση","admin.settings.smtp.enc.none":"Χωρίς","admin.settings.smtp.enc.tls":"STARTTLS (θύρα 587)","admin.settings.smtp.enc.ssl":"SSL/TLS (θύρα 465)","admin.settings.smtp.username":"Όνομα χρήστη","admin.settings.smtp.password":"Κωδικός / App Password","admin.settings.smtp.from_name":"Όνομα αποστολέα","admin.settings.smtp.from_email":"Email αποστολέα","admin.settings.smtp.test":"Αποστολή δοκιμαστικού email","admin.settings.smtp.sending":"Αποστολή...","admin.settings.payment.hint":"Τα στοιχεία για ePay Piraeus Bank.","admin.settings.env.test":"Δοκιμαστικό (sandbox)","admin.settings.env.prod":"Παραγωγή","admin.settings.env.label":"Περιβάλλον","admin.settings.merchant_id":"Merchant ID","admin.settings.api_user":"API User","admin.settings.api_password":"API Password","admin.settings.confirm_url":"Confirmation URL (webhook)","admin.settings.cancel_url":"Cancel URL","admin.settings.active":"Ενεργό","admin.settings.saving":"Αποθήκευση...","admin.settings.saved":"✓ Αποθηκεύτηκε","admin.notif.vars_hint":"Διαθέσιμες μεταβλητές στα πρότυπα","admin.notif.tmpl.not_set":"Πρότυπο δεν έχει οριστεί","admin.notif.tmpl.subject_label":"Θέμα email","admin.notif.tmpl.body_label":"Κείμενο email (HTML)","admin.notif.tmpl.save":"Αποθήκευση","admin.notif.tmpl.close":"Κλείσιμο","admin.notif.tmpl.translate":"Αυτόματη μετάφραση","admin.notif.tmpl.translating":"Μετάφραση...","admin.notif.tmpl.saving":"Αποθήκευση...","admin.notif.email_verification":"Επαλήθευση email","admin.notif.registration_success":"Επιτυχής εγγραφή","admin.notif.password_reset":"Επαναφορά κωδικού","admin.notif.new_offer":"Νέα προσφορά","admin.notif.new_task":"Νέα εργασία","admin.notif.offer_accepted":"Προσφορά αποδεκτή","admin.notif.new_message":"Νέο μήνυμα","admin.notif.offer_declined":"Απόρριψη προσφοράς","admin.notif.offer_other_accepted":"Επιλέχθηκε άλλος ειδικός","admin.notif.task_updated":"Ενημέρωση εργασίας","admin.notif.deadline_reminder":"Υπενθύμιση προθεσμίας","admin.notif.task_archived":"Αυτόματη απόσυρση εργασίας","admin.notif.referral_reward":"Ανταμοιβή παραπομπής","admin.email_template.plan_activated":"Τιμολόγιο — ενεργοποίηση πλάνου","admin.email_template.plan_upgraded":"Τιμολόγιο — αναβάθμιση πλάνου","admin.email_template.plan_downgrade_scheduled":"Τιμολόγιο — προγραμματισμένη υποβάθμιση","admin.email_template.plan_downgrade_applied":"Τιμολόγιο — εφαρμογή υποβάθμισης","admin.email_template.plan_renewal_reminder":"Τιμολόγιο — υπενθύμιση ανανέωσης","admin.email_template.plan_insufficient_funds":"Τιμολόγιο — ανεπαρκές υπόλοιπο","pricing.confirm.title":"Επιβεβαίωση επιλογής πλάνου","pricing.confirm.plan":"Πλάνο","pricing.confirm.prorated":"Αναλογική έκπτωση","pricing.confirm.effective_price":"Προς πληρωμή","pricing.confirm.your_balance":"Το υπόλοιπό σας","pricing.confirm.downgrade_info":"Η μετάβαση στο νέο πλάνο θα γίνει αυτόματα μετά τη λήξη της τρέχουσας περιόδου.","pricing.confirm.insufficient":"Ανεπαρκές υπόλοιπο.","pricing.confirm.top_up":"Ανανέωση","pricing.confirm.schedule_downgrade":"Προγραμματισμός μετάβασης","pricing.confirm.pay":"Πληρωμή","admin.user_edit.title":"Επεξεργασία χρήστη","admin.user_edit.email":"Email","admin.user_edit.email_verified":"Διευθυνση email επαληθεύτηκε","admin.user_edit.email_not_verified":"Email δεν έχει επαληθευτεί","admin.user_edit.verify_email_btn":"Χειροκίνητη επαλήθευση","admin.user_edit.verify_email_done":"Email επαληθεύτηκε!","admin.user_edit.id":"ID","admin.user_edit.registered":"Εγγραφή","admin.user_edit.last_seen":"Τελευταία σύνδεση","admin.user_edit.lang":"Γλώσσα","admin.user_edit.first_name":"Όνομα","admin.user_edit.last_name":"Επώνυμο","admin.user_edit.phone":"Τηλέφωνο","admin.user_edit.bio":"Βιογραφικό","admin.user_edit.role":"Ρόλος","admin.user_edit.plan":"Πακέτο","admin.user_edit.no_plan":"— Χωρίς πακέτο —","admin.user_edit.active":"Ενεργός λογαριασμός","admin.user_edit.published":"Δημοσιευμένη","admin.user_edit.balance":"Υπόλοιπο (EUR)","admin.user_edit.skills":"Δεξιότητες","admin.user_edit.tab.profile":"Προφίλ","admin.user_edit.tab.account":"Λογαριασμός","admin.user_edit.tab.balance":"Υπόλοιπο","admin.user_edit.tab.settings":"Ρυθμίσεις","admin.user_edit.tab.specialist":"Προσφορές","admin.user_edit.tab.site":"Ιστοσελίδα","admin.user_edit.plan_expires":"Λήξη πλάνου","admin.user_edit.interface_lang":"Γλώσσα διεπαφής","admin.user_edit.comm_languages":"Γλώσσες επικοινωνίας","admin.user_edit.personal_site_slug":"Προσωπική σελίδα","admin.user_edit.show_contact_info":"Εμφάνιση στοιχείων επικοινωνίας","admin.user_edit.show_contact_info.hint":"Ορατό στους πελάτες","admin.user_edit.notify_new_tasks":"Ειδοποίηση για νέες εργασίες","admin.user_edit.notify_new_tasks.hint":"Push και email ειδοποιήσεις","admin.user_edit.notif_messages":"Ειδοποιήσεις μηνυμάτων","admin.user_edit.notif_messages.hint":"Νέα μηνύματα στη συνομιλία","admin.user_edit.site_settings":"Ρυθμίσεις προσωπικής σελίδας","admin.user_edit.categories":"Κατηγορίες υπηρεσιών","admin.user_edit.locations":"Περιοχές εξυπηρέτησης","admin.user_edit.skill_placeholder":"Νέα δεξιότητα...","admin.user_edit.add_category":"— Επιλέξτε κατηγορία —","admin.user_edit.add_location":"— Επιλέξτε περιοχή —","admin.user_edit.specialist_cards":"Προσφορές ειδικού","admin.user_edit.no_cards":"Δεν βρέθηκαν προσφορές","admin.user_edit.card_title":"Τίτλος προσφοράς","admin.user_edit.card_description":"Περιγραφή","admin.balance.topup.btn":"Αναπλήρωση","admin.balance.withdraw.btn":"Αφαίρεση","admin.balance.modal_hint":"Οι αλλαγές ισχύουν άμεσα και καταγράφονται στο ιστορικό","admin.balance.topup.title":"Αναπλήρωση υπολοίπου","admin.balance.topup.amount":"Ποσό","admin.balance.topup.description":"Σχόλιο","admin.balance.topup.description.placeholder":"Για παράδειγμα: bonus ή χειροκίνητη αναπλήρωση","admin.balance.topup.submit":"Αναπλήρωση υπολοίπου","admin.balance.withdraw.title":"Αφαίρεση υπολοίπου","admin.balance.withdraw.amount":"Ποσό","admin.balance.withdraw.description":"Σχόλιο","admin.balance.withdraw.description.placeholder":"Για παράδειγμα: επιστροφή ή χειροκίνητη χρέωση","admin.balance.withdraw.submit":"Αφαίρεση από το υπόλοιπο","admin.user_edit.role.customer":"Πελάτης","admin.user_edit.role.user":"Χρήστης","admin.user_edit.role.specialist":"Βοηθός","admin.user_edit.role.admin":"Διαχειριστής","common.refresh":"Ανανέωση","common.back_home":"Αρχική","admin.loc.hint":"Διαχείριση πόλεων και συνοικιών","admin.loc.add_city":"Νέα πόλη","admin.loc.add_district":"Προσθήκη συνοικίας","admin.loc.new":"Νέα τοποθεσία","admin.loc.edit":"Επεξεργασία τοποθεσίας","admin.loc.district":"συνοικία","admin.loc.empty":"Δεν υπάρχουν τοποθεσίες","admin.loc.delete.confirm":"Διαγραφή τοποθεσίας; Όλες οι συνοικίες θα διαγραφούν επίσης.","admin.cat.add_root":"Νέα κατηγορία","admin.cat.add_sub":"Υποκατηγορία","admin.cat.edit":"Επεξεργασία","admin.cat.delete":"Διαγραφή","admin.cat.delete.confirm":"Διαγραφή κατηγορίας; Όλες οι υποκατηγορίες θα διαγραφούν επίσης.","admin.cat.slug":"Slug","admin.cat.icon":"Εικονίδιο","admin.cat.name_el":"Ελληνικά","admin.cat.name_en":"Αγγλικά","admin.cat.name_ru":"Ρωσικά","admin.cat.name_uk":"Ουκρανικά","admin.cat.active":"Ενεργή","admin.cat.parent":"Γονική κατηγορία","admin.cat.no_parent":"Κορυφαίο επίπεδο","admin.cat.save":"Αποθήκευση","admin.cat.cancel":"Ακύρωση","admin.cat.empty":"Δεν υπάρχουν κατηγορίες","admin.cat.hint":"Διαχείριση κατηγοριών με πολυεπίπεδη ιεραρχία","admin.cat.new":"Νέα κατηγορία","admin.cat.subcategory":"υποκατηγορία","admin.cat.add_child":"Προσθήκη υποκατηγορίας","admin.cat.inactive":"Ανενεργή","admin.event.user_login":"Σύνδεση","admin.event.user_register":"Εγγραφή","admin.event.admin_user_deactivate":"Αποκλεισμός χρήστη","admin.event.admin_user_activate":"Ενεργοποίηση χρήστη","admin.event.admin_user_role_changed":"Αλλαγή ρόλου","admin.event.admin_task_cancelled":"Ακύρωση εργασίας","admin.event.admin_task_deleted":"Διαγραφή εργασίας","admin.event.admin_report_reviewed":"Αναφορά εξετάστηκε","admin.event.admin_report_dismissed":"Αναφορά απορρίφθηκε","admin.event.task_created":"Δημιουργία εργασίας","user.online":"Σε σύνδεση","user.seen_minutes":"ήταν εδώ πριν {n} λεπτά","user.seen_hours":"ήταν εδώ πριν {n} ώρες","user.seen_yesterday":"ήταν εδώ χθες","user.seen_days":"ήταν εδώ πριν {n} μέρες","specialists.title":"Προσφορές","specialists.search":"Αναζήτηση ειδικού...","specialists.search.btn":"Αναζήτηση","specialists.empty":"Δεν βρέθηκαν ειδικοί","specialists.no_bio":"Χωρίς περιγραφή","specialists.view":"Προβολή προφίλ","specialists.reviews":"αξιολογήσεις","specialist.favorite":"Προσθήκη στα αγαπημένα","specialist.unfavorite":"Αφαίρεση από αγαπημένα","specialist.site_link":"Προσωπικό site","favorites.specialists.title":"Αγαπημένοι ειδικοί","favorites.specialists.empty":"Δεν έχετε αγαπημένους ειδικούς","nav.favorites":"Αγαπημένα","nav.schedule":"Πρόγραμμα","nav.find_tasks":"Αναζήτηση εργασιών","schedule.title":"Το πρόγραμμά μου","schedule.subtitle":"Σημειώστε τις ημέρες που είστε ελεύθεροι ή απασχολημένοι — οι πελάτες θα δουν τη διαθεσιμότητά σας","schedule.available":"Ελεύθερος","schedule.busy":"Απασχολημένος","schedule.unset":"Μη ορισμένο","schedule.click_hint":"← κλικ για εναλλαγή κατάστασης","schedule.range_mode":"Επιλογή εύρους","schedule.range_from":"Από {date} — επιλέξτε τελική ημερομηνία","schedule.click_to_set":"Κλικ για ορισμό","schedule.free":"ελεύθερα","schedule.busy_count":"απασχολημένα","schedule.free_days":"ελεύθερες ημέρες","schedule.googleCalendar":"Google Calendar","schedule.connectGoogle":"Σύνδεση με Google Calendar","schedule.disconnectGoogle":"Αποσύνδεση","schedule.connectedAs":"Συνδεδεμένο ως","schedule.importFromGoogle":"Συγχρονισμός από Google","schedule.gcalConnected":"✓ Google Calendar συνδέθηκε","schedule.gcalError":"Σφάλμα σύνδεσης Google Calendar","schedule.gcalImportDone":"Εισήχθησαν {n} ημερ. από Google Calendar","schedule.gcalAutoSyncNote":"Οι αλλαγές αποστέλλονται αυτόματα στο Google Calendar","schedule.gcalConnectDesc":"Συνδέστε το Google Calendar για αυτόματο συγχρονισμό","schedule.gcalDisconnectConfirm":"Αποσύνδεση Google Calendar;","find_tasks.title":"Αναζήτηση εργασιών","find_tasks.for_me":"Για μένα","find_tasks.all":"Όλες οι εργασίες","find_tasks.by_category":"Ανά κατηγορία","find_tasks.list":"Λίστα","find_tasks.already_offered":"Προσφορά υποβλήθηκε","find_tasks.offer_now":"Υποβολή προσφοράς","find_tasks.empty_for_me":"Δεν βρέθηκαν εργασίες στις κατηγορίες σας","find_tasks.banner_hint":"Βρείτε εργασίες που ταιριάζουν με το χαρτοφυλάκιό σας","find_tasks.no_cards":"Δημιουργήστε ένα χαρτοφυλάκιο ειδικού για να δείτε εργασίες για εσάς","find_tasks.add_card":"Δημιουργία χαρτοφυλακίου","find_tasks.search":"Αναζήτηση εργασιών...","find_tasks.tasks_count":"εργασίες","footer.tagline":"Η πλατφόρμα εργασιών για την Ελλάδα","footer.rights":"Όλα τα δικαιώματα διατηρούνται.","nav.privacy":"Πολιτική απορρήτου","nav.delete_account":"Διαγραφή λογαριασμού","delete_account.title":"Αίτηση διαγραφής λογαριασμού","delete_account.subtitle":"Αφού επαληθεύσουμε την αίτησή σας, θα διαγράψουμε μόνιμα τον λογαριασμό και τα δεδομένα σας εντός 30 ημερών.","delete_account.warning":"Αυτή η ενέργεια δεν μπορεί να αναιρεθεί. Όλα τα δεδομένα σας θα διαγραφούν μόνιμα.","delete_account.reason_label":"Αιτία (προαιρετικό)","delete_account.reason_placeholder":"Πείτε μας γιατί θέλετε να διαγράψετε τον λογαριασμό σας...","delete_account.confirm_label":"Επιβεβαιώνω ότι θέλω να διαγράψω μόνιμα τον λογαριασμό μου","delete_account.submit":"Υποβολή αίτησης","delete_account.submitting":"Αποστολή...","delete_account.success_title":"Η αίτησή σας ελήφθη","delete_account.success_body":"Θα επεξεργαστούμε την αίτησή σας εντός 30 ημερών και θα σας ειδοποιήσουμε μέσω email.","delete_account.login_required":"Πρέπει να συνδεθείτε για να υποβάλετε αίτηση διαγραφής.","delete_account.login_btn":"Σύνδεση","app.download_title":"Κατεβάστε την εφαρμογή CanHelp","app.download_desc":"Όλο το CanHelp — πάντα μαζί σας. Διαθέσιμο για Android και iOS.","nav.pricing":"Τιμές","pricing.title":"Τιμολόγηση","pricing.subtitle":"Επιλέξτε το κατάλληλο πρόγραμμα","pricing.role.customer":"Πελάτης","pricing.role.specialist":"Ειδικός","pricing.free":"Δωρεάν","pricing.per_month":"μήνα","pricing.duration":"Διάρκεια","pricing.days":"ημ.","pricing.current_plan":"Το πρόγραμμά σας","pricing.popular":"Δημοφιλές","pricing.choose":"Επιλογή","pricing.your_plan":"Ενεργό πρόγραμμα","pricing.free_default":"Προεπιλογή","pricing.compare":"Σύγκριση λειτουργιών","pricing.feature":"Λειτουργία","pricing.faq_note":"Η πληρωμή γίνεται από το υπόλοιπο CanHelp. Ανατροφοδότηση διαθέσιμη στην Πληρωμή.","pricing.feat.messages":"Μηνύματα / ημέρα","pricing.feat.orders":"Παραγγελίες / ημέρα","pricing.feat.contact_all":"Επικοινωνία με όλους","pricing.feat.view_phone":"Εμφάνιση τηλεφώνου","pricing.feat.show_contact":"Εμφάνιση στοιχείων επαφής","pricing.feat.favorites":"Αγαπημένα","pricing.feat.verified_badge":"Επαληθευμένο badge","pricing.feat.google_calendar":"Google Calendar","pricing.feat.personal_site":"Προσωπικό site","pricing.feat.auto_response":"Αυτόματη απάντηση","pricing.feat.auto_match":"Αυτόματη αντιστοίχιση","pricing.feat.highlighted_reviews":"Επισημασμένες αξιολογήσεις","pricing.feat.portfolio":"Στοιχεία προσφοράς","pricing.feat.cards":"Αριθμός προσφορών","pricing.feat.notify_tasks":"Ειδοποιήσεις νέων εργασιών","pricing.feat.video":"Βίντεο στην προσφορά","upgrade.available_in":"Διαθέσιμο στο","upgrade.cta":"Αναβάθμιση","dashboard.plan.title":"Το πρόγραμμά μου","dashboard.plan.expires":"Λήγει σε {n} ημέρες","dashboard.plan.upgrade":"Αναβάθμιση προγράμματος","dashboard.plan.no_plan":"Δωρεάν πρόγραμμα","dashboard.plan.messages":"Μηνύματα σήμερα","dashboard.plan.orders":"Παραγγελίες σήμερα","dashboard.plan.limits":"Ημερήσια όρια","dashboard.plan.features":"Λειτουργίες","dashboard.plan.stats":"Στατιστικά","dashboard.stats.cards":"Χαρτοφυλάκια","dashboard.stats.maxCards":"Μέγ. χαρτοφυλάκια","dashboard.stats.portfolioItems":"Στοιχεία portfolio","dashboard.stats.maxPortfolioItems":"Μέγ. στοιχεία","dashboard.stats.activeOffers":"Ενεργές προσφορές","dashboard.stats.reviewsReceived":"Αξιολογήσεις","dashboard.stats.activeTasks":"Ενεργές εργασίες","dashboard.stats.completedTasks":"Ολοκληρωμένες","status.can_help_now":"Είμαι διαθέσιμος τώρα","status.need_help":"Χρειάζομαι βοήθεια","status.active":"Ενεργό","status.toggle_on":"Ενεργοποίηση","status.toggle_off":"Απενεργοποίηση","fomo.missed_orders":"Χάσατε {n} παραγγελίες","fomo.missed_value":"Αξία €{v}","fomo.upgrade_hint":"Αναβαθμίστε για να λαμβάνετε περισσότερες παραγγελίες","fomo.conversion":"Μετατροπές εργασιών","fomo.active":"Ενεργές","fomo.with_offers":"Με προσφορές","fomo.completed":"Ολοκληρωμένες","fomo.already_offered":"{n} ειδικοί έχουν ήδη απαντήσει","fomo.specialist_missed":"Χάσατε {n} παραγγελίες","fomo.top_categories":"Κατηγορίες","fomo.offers_received":"προσφορές ελήφθησαν","fomo.avg_offers":"Μέσο {n}/εργασία","fomo.completion_rate":"ολοκληρωμένες","task.auto_match":"Αυτόματη αντιστοίχιση","task.auto_match_results":"Κορυφαίοι ειδικοί","task.no_offer_yet":"Δεν έχετε στείλει προσφορά ακόμα","task.make_offer":"Αποστολή προσφοράς","auto_response.title":"Αυτόματη Απάντηση","auto_response.enabled":"Ενεργοποίηση αυτόματης απάντησης","auto_response.min_budget":"Ελάχ. προϋπολογισμός","auto_response.max_budget":"Μέγ. προϋπολογισμός","auto_response.default_price":"Προεπιλεγμένη τιμή","auto_response.default_message":"Προεπιλεγμένο μήνυμα","auto_response.max_per_day":"Μέγ. αυτόματες προσφορές/ημέρα","auto_response.save":"Αποθήκευση","auto_response.saved":"Αποθηκεύτηκε","auto_response.categories":"Κατηγορίες","auto_response.locations":"Τοποθεσίες","profile.personal_site":"Προσωπικό Site","profile.site_slug":"Slug URL","profile.site_slug_hint":"Μόνο λατινικοί χαρακτήρες, αριθμοί, - και _","profile.site_open":"Άνοιγμα site","profile.site_preview":"Το site σας","profile.show_contact":"Εμφάνιση στοιχείων επαφής","profile.show_contact_hint":"Πελάτες με Pro/Ultimate πρόγραμμα θα βλέπουν το τηλέφωνό σας","gcal.upgrade_required":"Το Google Calendar απαιτεί Pro ή Ultimate πρόγραμμα","chat.limit_warning":"Απομένουν {n} μηνύματα σήμερα","chat.limit_reached":"Εξαντλήθηκαν τα μηνύματα. Αναβαθμίστε το πρόγραμμά σας","chat.upgrade":"Αναβάθμιση","site.member_since":"Μαζί μας από","site.rating":"Βαθμολογία","site.completed_tasks":"Ολοκληρώθηκαν","site.languages":"Γλώσσες","site.photos":"φωτ.","site.contact_form":"Επικοινωνία","site.contact_sent":"Το μήνυμα στάλθηκε!","site.contact_sent_desc":"Ο ειδικός θα επικοινωνήσει μαζί σας σύντομα","site.contact_name":"Όνομα","site.contact_name_ph":"Το όνομά σας","site.contact_email_ph":"your@email.com","site.contact_message":"Μήνυμα","site.contact_message_ph":"Περιγράψτε την εργασία σας...","site.contact_send":"Αποστολή","site.share":"Κοινοποίηση","site.speaks_languages":"Μιλάει","site.message_sent":"Το μήνυμα εστάλη!","site.message_sent_desc":"Ο ειδικός θα το λάβει στη συνομιλία","site.message_placeholder":"Γράψτε το μήνυμά σας...","site.write_to_chat":"Γράψτε στο chat","site.auth_required_title":"Απαιτείται σύνδεση","site.auth_required_desc":"Για να γράψετε στο chat, χρειάζεται να συνδεθείτε στο λογαριασμό σας.","site.auth_login_btn":"Σύνδεση","site.auth_contact_form_btn":"Επικοινωνία μέσω φόρμας","specialist.services":"Υπηρεσίες","portfolio.title":"Χαρτοφυλάκιο","common.not_found":"Η σελίδα δεν βρέθηκε","common.anonymous":"Ανώνυμα","specialist_setup.page_title":"Ρύθμιση προφίλ ειδικού","specialist_setup.step_of":"Βήμα {current} από {total}","specialist_setup.next":"Επόμενο","specialist_setup.back":"Πίσω","specialist_setup.skip":"Παράλειψη","specialist_setup.finish":"Ολοκλήρωση","specialist_setup.go_to_profile":"Μεταβείτε στο προφίλ","specialist_setup.browse_tasks":"Εξερεύνηση εργασιών","specialist_setup.step1.title":"Καλωσήλθατε!","specialist_setup.step1.subtitle":"Ας ρυθμίσουμε το προφίλ σας","specialist_setup.step1.desc":"Ένα πλήρες προφίλ σας βοηθά να βρείτε περισσότερους πελάτες. Ακολουθήστε τα βήματα για να δημιουργήσετε το τέλειο προφίλ ειδικού.","specialist_setup.step1.what_next":"Τι θα κάνουμε:","specialist_setup.step1.item1":"Συμπλήρωση βασικών πληροφοριών","specialist_setup.step1.item2":"Δημιουργία κάρτας υπηρεσίας","specialist_setup.step1.item3":"Προσθήκη δεξιοτήτων και κατηγοριών","specialist_setup.step1.item4":"Επιλογή γεωγραφικής περιοχής","specialist_setup.step1.item5":"Μεταφόρτωση φωτογραφιών χαρτοφυλακίου","specialist_setup.step2.title":"Βασικό προφίλ","specialist_setup.step2.subtitle":"Πείτε μας για σας","specialist_setup.step2.bio_label":"Σχετικά με εμένα","specialist_setup.step2.bio_placeholder":"Περιγράψτε την εμπειρία σας, τις υπηρεσίες που προσφέρετε...","specialist_setup.step2.phone_label":"Τηλέφωνο","specialist_setup.step2.phone_placeholder":"+30 6900000000","specialist_setup.step2.photo_label":"Φωτογραφία προφίλ","specialist_setup.step2.photo_btn":"Μεταφόρτωση φωτογραφίας","specialist_setup.step2.photo_uploading":"Μεταφόρτωση...","specialist_setup.step2.photo_hint":"Εμφανίζεται στο προφίλ σας","specialist_setup.step3.title":"Κάρτα υπηρεσίας","specialist_setup.step3.subtitle":"Δημιουργήστε την πρώτη σας κάρτα υπηρεσίας","specialist_setup.step3.title_label":"Τίτλος κάρτας","specialist_setup.step3.title_placeholder":"Π.χ. Υδραυλικός, Ηλεκτρολόγος, Καθαρισμός...","specialist_setup.step3.desc_label":"Περιγραφή","specialist_setup.step3.desc_placeholder":"Περιγράψτε λεπτομερώς τι προσφέρετε, εμπειρία, πλεονεκτήματα...","specialist_setup.step3.title_required":"Απαιτείται τίτλος","specialist_setup.step4.title":"Δεξιότητες & Κατηγορίες","specialist_setup.step4.subtitle":"Προσθέστε δεξιότητες και επιλέξτε κατηγορίες","specialist_setup.step4.skills_label":"Δεξιότητες","specialist_setup.step4.skills_placeholder":"Π.χ. Εγκατάσταση σωληνώσεων...","specialist_setup.step4.skills_add":"Προσθήκη","specialist_setup.step4.categories_label":"Κατηγορίες","specialist_setup.step5.title":"Γεωγραφική περιοχή","specialist_setup.step5.subtitle":"Πού παρέχετε υπηρεσίες;","specialist_setup.step5.hint":"Επιλέξτε πόλεις ή συγκεκριμένες περιοχές","specialist_setup.done.title":"Το προφίλ σας είναι έτοιμο!","specialist_setup.done.subtitle":"Συγχαρητήρια! Το προφίλ σας έχει ρυθμιστεί","specialist_setup.done.desc":"Τώρα μπορείτε να λαμβάνετε παραγγελίες από πελάτες. Αναζητήστε εργασίες που ταιριάζουν με τις δεξιότητές σας.","support.title":"Υποστήριξη","support.type.label":"Τύπος αιτήματος","support.type.bug":"Σφάλμα","support.type.suggestion":"Πρόταση","support.type.other":"Άλλο","support.subject":"Θέμα","support.subject.placeholder":"Σύντομη περιγραφή...","support.body":"Μήνυμα","support.body.placeholder":"Περιγράψτε λεπτομερώς το πρόβλημα ή την πρότασή σας...","support.submit":"Αποστολή","support.cancel":"Ακύρωση","support.error":"Σφάλμα αποστολής. Παρακαλώ δοκιμάστε ξανά.","support.sent.title":"Λάβαμε το αίτημά σας!","support.sent.body":"Θα σας απαντήσουμε στο email σας το συντομότερο δυνατόν.","support.sent.close":"Κλείσιμο","admin.tab.support":"Υποστήριξη","admin.tab.backup":"Αντίγραφα ασφαλείας","admin.tab.translations":"Μεταφράσεις","admin.tab.dbcheck":"Έλεγχος ΒΔ","admin.tab.balances":"Υπόλοιπα","admin.tab.push":"Push","admin.tab.referrals":"Παραπομπές","admin.search":"Αναζήτηση","admin.noData":"Δεν υπάρχουν δεδομένα","admin.cat.order":"Σειρά","admin.cat.skills":"Δεξιότητες","admin.plans.form.max_tasks":"Μέγιστες εργασίες","admin.settings.referral.shared_section":"Κοινές ρυθμίσεις referral","admin.settings.seo.title":"Ρυθμίσεις SEO","admin.backup.title":"Αντίγραφα ασφαλείας","admin.backup.tables":"Πίνακες","admin.backup.exportAll":"Εξαγωγή όλων","admin.backup.importAll":"Εισαγωγή όλων","admin.backup.exportTable":"Εξαγωγή πίνακα","admin.backup.importTable":"Εισαγωγή πίνακα","admin.backup.exporting":"Εξαγωγή...","admin.backup.importing":"Εισαγωγή...","admin.backup.exportSuccess":"Η εξαγωγή ολοκληρώθηκε","admin.backup.importSuccess":"Η εισαγωγή ολοκληρώθηκε","admin.backup.autoBackup":"Αυτόματο backup","admin.backup.autoBackupDesc":"Καθημερινό αυτόματο backup","admin.backup.storedBackups":"Αποθηκευμένα backups","admin.backup.noStoredBackups":"Δεν υπάρχουν αποθηκευμένα backups","admin.backup.restore":"Επαναφορά","admin.backup.restoreConfirm":"Επαναφορά από backup;","admin.backup.restoreSuccess":"Η επαναφορά ολοκληρώθηκε","admin.backup.restoring":"Επαναφορά...","admin.backup.date":"Ημερομηνία","admin.backup.size":"Μέγεθος","admin.backup.today":"Σήμερα","admin.backup.yesterday":"Χθες","admin.balance.col.operation":"Ενέργεια","admin.balance.col.amount":"Ποσό","admin.balance.col.result":"Υπόλοιπο","admin.balance.col.description":"Περιγραφή","admin.balance.col.date":"Ημερομηνία","admin.balance.empty":"Δεν υπάρχουν εγγραφές","admin.balance.filter.all":"Όλες οι ενέργειες","admin.balance.filter.user_id":"Φίλτρο ανά userId","admin.balance.kind.topup":"Αναπλήρωση","admin.balance.kind.plan_purchase":"Χρέωση πλάνου","admin.balance.kind.admin_topup":"Αναπλήρωση από διαχειριστή","admin.balance.kind.admin_adjustment":"Διόρθωση","admin.support.search":"Αναζήτηση","admin.support.all_statuses":"Όλες οι καταστάσεις","admin.support.all_types":"Όλοι οι τύποι","admin.support.none":"Δεν υπάρχουν αιτήματα","admin.support.reply":"Απάντηση","admin.support.reply_placeholder":"Πληκτρολογήστε απάντηση...","admin.support.send_reply":"Αποστολή απάντησης","admin.support.cancel":"Ακύρωση","admin.support.close":"Κλείσιμο","admin.support.status.open":"Ανοιχτό","admin.support.status.in_progress":"Σε εξέλιξη","admin.support.status.resolved":"Επιλύθηκε","admin.support.status.closed":"Κλειστό","admin.support.your_reply":"Η απάντησή σας","admin.user_edit.visibility_requirements.title":"Το προφίλ δεν εμφανίζεται ακόμη στις Προσφορές","admin.user_edit.visibility_requirements.hint":"Απαιτήσεις ορατότητας:","admin.user_edit.visibility_requirements.bio":"Συμπληρώστε το βιογραφικό","admin.user_edit.visibility_requirements.published_card":"Δημοσιεύστε τουλάχιστον μία κάρτα","admin.user_edit.visibility_requirements.categories":"Προσθέστε κατηγορία σε δημοσιευμένη κάρτα","admin.user_edit.visibility_requirements.locations":"Προσθέστε τοποθεσία σε δημοσιευμένη κάρτα","auto_response.desc":"Αυτόματη απάντηση σε κατάλληλες εργασίες","auto_response.budget_range":"Προϋπολογισμός εργασίας","auto_response.message_placeholder":"Γεια σας! Μπορώ να βοηθήσω με αυτήν την εργασία...","profile.background.title":"Φόντο κεφαλίδας προφίλ","profile.background.hint":"Εμφανίζεται στην κεφαλίδα του δημόσιου προφίλ σε web και mobile.","profile.photo.uploading":"Μεταφόρτωση...","profile.balance.history":"Ιστορικό ενεργειών","profile.balance.history.last":"Τελευταίες ενέργειες","profile.balance.history.empty":"Δεν υπάρχουν ενέργειες","profile.balance.history.balance_after":"Υπόλοιπο μετά","profile.balance.history.kind.topup":"Αναπλήρωση υπολοίπου","profile.balance.history.kind.plan_purchase":"Χρέωση πλάνου","profile.balance.history.kind.admin_topup":"Αναπλήρωση από διαχειριστή","profile.balance.history.kind.admin_adjustment":"Διόρθωση από διαχειριστή","profile.plan_history.title":"Ιστορικό πλάνου","profile.plan_history.empty":"Το ιστορικό πλάνου είναι άδειο","profile.plan_history.expires":"Έως","profile.plan_history.days":"ημέρες","profile.plan_history.event.activated":"Ενεργοποιήθηκε","profile.plan_history.event.renewed":"Ανανεώθηκε","profile.plan_history.event.downgraded":"Υποβαθμίστηκε","profile.plan_history.event.referral_reward":"Ανταμοιβή referral","profile.plan_history.event.admin_change":"Αλλαγή από διαχειριστή","profile.plan_history.event.expired":"Έληξε","profile.show_contact_desc":"Επιτρέπει στους πελάτες να επικοινωνούν απευθείας","profile.site.visible.price_list":"Τιμοκατάλογος","site.pricelist":"Τιμοκατάλογος","status.plan_required":"Η κατάσταση δεν είναι διαθέσιμη στο τρέχον πλάνο","status.admin_not_applicable":"Η κατάσταση χρήστη δεν ισχύει για διαχειριστές"},en:{"footer.slogan":"Your task — our care! We solve any issue quickly and easily.","footer.links":"Links","footer.socials":"Socials","nav.home":"Home","nav.tasks":"Tasks","nav.post":"+ Post task","nav.dashboard":"My Tasks","nav.chat":"Messages","nav.notifications":"Notifications","nav.profile":"Profile","nav.admin":"Admin Panel","nav.specialists":"Offers","nav.new_task":"New task","nav.login":"Login","nav.register":"Register","nav.logout":"Logout","hero.title":"Everyone has something valuable to offer","hero.subtitle":"Find help, offer your skills, or earn money helping others","hero.cta.post":"Find help","hero.cta.browse":"Offer your help","hero.cta.specialists":"Find a job","hero.search.placeholder":"What do you need? e.g. electrician, cleaning...","hero.specialist.title":"Find tasks near you","hero.specialist.subtitle":"Discover tasks in your categories and send your offer","hero.specialist.cta":"Browse tasks","hero.specialist.search.placeholder":"Search tasks... e.g. electrical, cleaning","section.categories.specialist":"Find tasks by category","section.cities.specialist":"Tasks by city","how.specialist.step1.title":"Create a specialist card","how.specialist.step1.desc":"Set your categories, skills and areas — the system finds tasks automatically","how.specialist.step2.title":"Find relevant tasks","how.specialist.step2.desc":"Discover tasks in your categories and get started right away","how.specialist.step3.title":"Send an offer & earn","how.specialist.step3.desc":"Submit an offer with price and timeline, communicate with clients and complete tasks","stats.specialists":"offers","stats.tasks":"tasks","stats.categories":"categories","stats.free":"free sign-up","promo.title":"Get Pro for free — until end of year","promo.subtitle":"Sign up now and enjoy the Pro plan at no cost. Offer ends December 31.","promo.cta":"Sign up free","promo.days":"days","promo.hours":"hrs","promo.minutes":"min","promo.seconds":"sec","section.categories":"Create a task in any category","section.how":"How it works","section.recent":"Recent tasks","section.all":"See all →","section.more":"more","section.cities":"Cities & Districts","section.community":"A community project for everyone","community.subtitle":"CanHelp is not just a marketplace — it's a community of mutual help. Anyone with knowledge or a skill can find a client. Anyone with a problem can find a specialist.","community.point1.title":"Are you good at something?","community.point1.desc":"Repairs, tutoring, design, translation, care — every skill has value. Create a profile and find clients near you.","community.point2.title":"Need help with something?","community.point2.desc":"Post a task in under a minute and receive offers from verified specialists in your city.","community.point3.title":"Help the project grow","community.point3.desc":"CanHelp grows through communities. Share the link with friends and acquaintances — together we build something useful for everyone.","community.share":"Share with friends","community.share.copied":"Link copied!","section.referral":"Referral Program","referral.home.subtitle":"Share your link — every new user who signs up through it earns you a reward.","referral.home.step1.title":"Sign up and get your link","referral.home.step1.desc":"Create an account and find your unique referral link in your profile.","referral.home.step2.title":"Share with friends","referral.home.step2.desc":"Send the link to friends, acquaintances, or post it on social media.","referral.home.step3.title":"Earn rewards","referral.home.step3.desc":"Once your friend verifies their email, you automatically receive your reward.","referral.home.cta":"Get your link","referral.home.badge":"Referral Program","section.faq":"Frequently Asked Questions","faq.q1":"How does CanHelp work?","faq.a1":"Post a task, receive offers from specialists, choose the best one and start working together. It's fast, simple and free for customers.","faq.q2":"How much does it cost to use the platform?","faq.a2":"Registration and task posting is completely free for customers. Specialists have access to a free plan as well as premium options.","faq.q3":"How can I become a specialist?","faq.a3":"Register, go to \xabBecome a Specialist\xbb, fill in your profile with skills and categories, and start receiving tasks.","faq.q4":"How do I choose the right specialist?","faq.a4":"Check their reviews, experience, skills and portfolio. Chat with them through the platform and discuss the details before deciding.","faq.q5":"What if I am not satisfied?","faq.a5":"You can leave a review about the specialist and rate them from 1 to 5 stars. Reviews help other users find trusted professionals.","faq.q6":"Can I contact a specialist before accepting their offer?","faq.a6":"Yes. Once you receive an offer, you can open a chat with the specialist, ask questions and discuss all the details before making a decision.","faq.q7":"How long does it take to receive offers?","faq.a7":"Usually within a few hours. Specialists get notified about new tasks and can respond quickly.","faq.q8":"Can I post a task in any city in Greece?","faq.a8":"Yes! CanHelp covers all of Greece — Athens, Thessaloniki, Patras and more.","faq.q9":"What types of tasks can I find on CanHelp?","faq.a9":"Repairs, cleaning, electricians, tutoring, design, IT, moving, beauty and much more. Categories are constantly expanding.","faq.q10":"Is there a mobile app?","faq.a10":"Yes! CanHelp is available for Android and iOS. Download the app and manage everything from your phone.","how.step1.title":"Post a task","how.step1.desc":"Describe what you need and set your budget","how.step2.title":"Receive offers","how.step2.desc":"Specialists will send you offers with price and timeline","how.step3.title":"Choose & start","how.step3.desc":"Pick the best professional and start the collaboration","tasks.title":"tasks","tasks.filters":"Filters","tasks.search":"Search","tasks.search.placeholder":"Title or keyword...","tasks.search.btn":"Search","tasks.publish":"Post","tasks.category.all":"All","tasks.category.all_in":"All in","tasks.category.label":"Category","tasks.location.label":"City","tasks.location.placeholder":"e.g. Athens","tasks.empty":"No tasks found","tasks.empty.cta":"Post the first one","task.status.open":"Open","task.status.in_progress":"In progress","task.status.completed":"Completed","task.status.cancelled":"Cancelled","task.status.draft":"Draft","task.budget":"Budget","task.location":"Location","task.deadline":"Start date","task.expires_at":"Active until","task.created_at":"Created","task.customer":"Customer","task.offer.btn":"Submit offer","task.invite.banner_title":"You've been invited to this task","task.invite.banner_hint":"The customer personally invited you","task.invite.accept":"Send offer","task.invite.decline":"Decline","offer.accept":"Accept","offer.decline":"Decline","task.complete":"Complete task","task.complete.confirm":"Mark this task as complete?","task.edit":"Edit","task.status_label":"Status","task.yours":"Your task","task.offer.yours":"Your offer","review.leave":"Leave a review","review.rating":"Rating","review.comment":"Comment","review.comment.placeholder":"Tell us about your experience...","review.submit":"Submit review","review.submitting":"Submitting...","review.done":"Review submitted!","profile.reviews":"Reviews","profile.no_reviews":"No reviews yet","profile.rating":"Rating","profile.skills.label":"Skills","profile.member_since":"Member since","task.offers":"Offers","task.offers.none":"No offers yet","create.title":"Post a task","create.field.title":"Title","create.field.description":"Description","create.field.category":"Category","create.field.category.select":"Select...","create.field.location":"Location","create.field.location.any":"Anywhere","create.field.location.all":"Entire city","create.field.budget":"Budget (€)","create.field.deadline":"Start date","create.field.expires_at":"Listing active for","create.field.expires_at.days":"{n} days","create.field.budget_negotiable":"Price is negotiable","create.field.time_slot":"Time slot","create.field.time_slot.any":"Anytime","create.field.time_slot.morning":"Morning (08:00–13:00)","create.field.time_slot.afternoon":"Afternoon (13:00–18:00)","create.field.time_slot.evening":"Evening (18:00–22:00)","create.field.time_slot.weekend":"Weekend","create.field.address":"Address (optional)","create.field.address.district":"District","create.field.address.street":"Street","create.field.address.house":"Number","create.field.confidential":"Confidential note","create.field.confidential.placeholder":"Details visible only to the assigned specialist...","create.field.confidential.hint":"Not shown publicly","create.field.photos":"Photos","create.field.photos.add":"Add photo","create.field.photos.uploading":"Uploading...","task.budget_negotiable":"Price negotiable","task.time_slot":"Time slot","task.confidential":"Confidential note","create.field.title.placeholder":"e.g. Clean 80sqm apartment","create.field.description.placeholder":"Describe in detail what you need...","create.field.location.placeholder":"e.g. Athens, Kolonaki","create.field.budget.placeholder":"e.g. 100","create.submit":"Post task","create.submitting":"Posting...","login.title":"Welcome back","login.subtitle":"Sign in to CanHelp","login.email":"Email","login.password":"Password","login.submit":"Sign in","login.submitting":"Signing in...","login.error":"Invalid email or password","login.unverified.title":"Verify your email address","login.unverified.desc":"We sent a verification link to your email. Check your inbox (or spam) and click the link.","login.unverified.resend":"Resend verification email","login.unverified.sending":"Sending...","login.unverified.sent":"✓ Sent — check your inbox","profile.email.verified":"Email verified","profile.email.not_verified":"Email not verified","login.no_account":"Don't have an account?","login.register_link":"Register","login.forgot_password":"Forgot password?","login.or_continue_with":"or continue with","login.continue_google":"Continue with Google","forgot.title":"Forgot password","forgot.subtitle":"Enter your email to receive a reset link","forgot.email":"Email","forgot.submit":"Send reset link","forgot.submitting":"Sending...","forgot.sent.title":"Check your inbox","forgot.sent.desc":"If an account exists with that email, we'll send you a password reset link.","forgot.back_to_login":"Back to sign in","forgot.error":"Could not send reset link. Check the email address and try again.","forgot.error.not_found":"No account found with this email address.","forgot.error.send_failed":"Failed to send email. Please try again later.","reset.title":"New password","reset.subtitle":"Enter your new password","reset.password":"New password","reset.confirm":"Confirm password","reset.submit":"Change password","reset.submitting":"Saving...","reset.success":"Password changed successfully. Redirecting to sign in...","reset.back_to_login":"Back to sign in","reset.error.mismatch":"Passwords do not match","reset.error.invalid":"Invalid or expired link. Please request a new one.","register.title":"Register","register.subtitle":"Create a CanHelp account","register.first_name":"First name","register.last_name":"Last name","register.email":"Email","register.password":"Password (min 8 characters)","register.role":"Role","register.role.customer":"User","register.role.customer.desc":"I post tasks","register.role.specialist":"Specialist","register.role.specialist.desc":"I take on tasks","register.submit":"Create account","register.submitting":"Registering...","register.has_account":"Already have an account?","register.login_link":"Sign in","register.continue_google":"Continue with Google","register.check_email.title":"Check your email","register.check_email.desc":"We sent a verification link to your email address. Check your inbox (or spam) and click the link.","register.check_email.login":"Back to sign in","register.captcha_failed":"CAPTCHA verification failed. Please complete the security check and try again.","dashboard.title":"Dashboard","dashboard.new_task":"+ New task","dashboard.onboarding.title":"Welcome to CanHelp \uD83D\uDC4B","dashboard.onboarding.subtitle":"Choose how you want to get started.","dashboard.onboarding.helper.title":"Offer your help","dashboard.onboarding.helper.desc":"Complete your profile — skills, categories and areas. It takes a couple of minutes and you start receiving orders.","dashboard.onboarding.helper.cta":"Complete your profile","dashboard.onboarding.requester.title":"Need help?","dashboard.onboarding.requester.desc":"Post a task and helpers will send you their offers.","dashboard.onboarding.requester.cta":"Post a task","dashboard.my_tasks":"My tasks","dashboard.my_offers":"My offers","dashboard.invitations":"Job invitations","dashboard.offers_count":"offers","dashboard.declined_count":"declined","dashboard.completed_tasks":"Completed tasks","dashboard.completed_offers":"Completed offers","dashboard.review_pending":"Review not yet submitted","tasks.new.top_specialists":"Top specialists","tasks.new.select_category":"Select a category to see matching specialists","tasks.new.invite":"Offer work","tasks.new.invited":"Selected ✓","reviews.count":"reviews","filter.location":"Location","filter.language":"Languages","filter.language.any":"Any language","filter.category.all":"All categories","user.categories":"Categories","user.work_area":"Work area","user.specialist_cards":"Service cards","card.skills":"Skills","card.categories":"Categories","card.geography":"Work area","card.portfolio":"Portfolio","card.close":"Close","dashboard.tasks.empty":"You haven't posted any tasks","dashboard.tasks.empty.cta":"Post your first one","dashboard.tasks.add_new":"Add a new task","dashboard.offers.empty":"You haven't submitted any offers","dashboard.offers.empty.cta":"Find tasks","dashboard.customer.specialists_title":"Looking for a specialist?","dashboard.customer.specialists_hint":"Browse specialist profiles, read reviews and invite them to your tasks","dashboard.customer.specialists_cta":"Find a specialist","dashboard.customer.how_title":"How it works","dashboard.customer.step1":"Create a task with a description and budget","dashboard.customer.step2":"Specialists will send offers with price and timeline","dashboard.customer.step3":"Choose the right one and start working","notif.title":"Notifications","notif.mark_all":"Mark all as read","notif.empty":"No notifications","notif.type.generic":"Notification","notif.type.new_offer":"New offer","notif.type.offer_accepted":"Your offer was accepted","notif.type.offer_declined":"Your offer was declined","notif.type.task_completed":"Task completed","notif.type.task_cancelled":"Task cancelled","notif.type.new_message":"New message","notif.type.new_review":"New review","notif.type.task_invite":"Job invitation","notif.type.referral_reward":"Referral reward","notif.type.specialist_card_submitted":"Card submitted for review","notif.type.specialist_card_approved":"Card approved","notif.type.specialist_card_rejected":"Card rejected","notif.body.new_offer":"New offer for \xab{title}\xbb","notif.body.offer_accepted":"Your offer for \xab{title}\xbb was accepted","notif.body.offer_declined":"Your offer for \xab{title}\xbb was declined","notif.body.task_invite":"You've been invited for \xab{title}\xbb","notif.body.new_review":"You received a {rating}★ review","notif.body.referral_reward":"{days} days of \xab{plan}\xbb plan access have been added to your account!","notif.body.specialist_card_submitted":"The card \xab{title}\xbb was sent for review","notif.body.specialist_card_approved":"The card \xab{title}\xbb was approved and published","notif.body.specialist_card_rejected":"The card \xab{title}\xbb was not approved. You can fix it and submit again.","offer.status.pending":"Pending","offer.status.accepted":"Accepted","offer.status.declined":"Declined","offer.status.withdrawn":"Withdrawn","offer.status.other_accepted":"Another specialist was chosen","common.loading":"Loading...","common.error":"Error","common.save":"Save","common.saving":"Saving...","common.cancel":"Cancel","common.add":"Add","common.close":"Close","common.edit":"Edit","common.delete":"Delete","common.from":"by","common.currency":"€","common.greece":"Greece","chat.connected":"Connected","chat.disconnected":"Disconnected","chat.no_rooms":"No conversations yet","chat.task_fallback":"Task","chat.select":"Select a conversation","chat.no_messages":"No messages yet","chat.placeholder":"Write a message... (Enter to send)","chat.conversation_fallback":"Conversation","chat.direct_chat":"Direct chat","chat.linked_task":"Linked task","chat.write_btn":"Message","chat.just_now":"just now","chat.min_ago":"m","chat.write_specialist":"Write to specialist","chat.write_customer":"Write to customer","chat.notif_settings":"Notification settings","chat.notif_messages":"Notifications for new messages","chat.toast_title":"New message","chat.toast_open":"Open chat","offer.price":"Price","offer.price.placeholder":"e.g. 80","offer.customer_budget":"Client budget","offer.message":"Message","offer.optional":"optional","offer.message.placeholder":"Introduce yourself, your experience and why you are the best choice...","offer.submitting":"Sending...","profile.photo":"Profile photo","profile.photo.change":"Change photo","profile.photo.hint":"JPEG, PNG, WebP \xb7 up to 5MB","profile.basic_info":"Basic info","profile.phone":"Phone","profile.phone.placeholder":"+30 6901234567","profile.bio":"Short bio","profile.bio.placeholder":"Tell us a bit about yourself...","profile.language":"Language","profile.language.hint":"App interface and email notification language","profile.languages":"Languages spoken","profile.languages.hint":"Select all languages you speak","profile.skills":"Skills","profile.skills.subtitle":"Add the services you offer","profile.skills.placeholder":"e.g. Cleaning, IT, Tutoring...","profile.role":"Account role","profile.role.specialist":"\uD83D\uDD27 Helper","profile.role.admin":"\uD83D\uDC51 Admin","profile.role.customer":"\uD83D\uDC64 User","profile.role.user":"\uD83D\uDC64 User","profile.role.change":"To change your role please contact support.","profile.become_specialist":"Offer your help","profile.become_specialist.desc":"Create your helper profile, offer your skills and start receiving tasks.","become_specialist.hero.title":"Offer your skills and start earning","become_specialist.hero.subtitle":"Create a helper profile and receive requests from people who need help","become_specialist.how.title":"How it works","become_specialist.step1.title":"Create a specialist portfolio","become_specialist.step1.desc":"Set your categories, skills and coverage areas — the system will automatically match you with relevant tasks","become_specialist.step2.title":"Find tasks","become_specialist.step2.desc":'Discover tasks in your categories in the "Find Orders" section',"become_specialist.step3.title":"Send an offer & earn","become_specialist.step3.desc":"Submit offers with price and timeline, chat with clients and complete tasks","become_specialist.benefits.title":"Specialist profile advantages","become_specialist.benefit1":"Task search filtered by your categories and location","become_specialist.benefit2":"Public profile with client reviews","become_specialist.benefit3":"Availability schedule visible to clients","become_specialist.benefit4":"Saved to favourites by clients","become_specialist.cta":"Learn more","become_specialist.free_badge":"Free registration","profile.tab.notifications":"Notifications","profile.tab.reviews":"Reviews","profile.tab.referral":"Referrals","profile.tab.auto_response":"Auto-response","profile.tab.site":"Site","profile.site.title":"Personal page","profile.site.url_label":"Personal site","profile.site.copy":"Copy","profile.site.copied":"Copied","profile.site.visible_title":"What's on your page","profile.site.visible.name":"Name and photo","profile.site.visible.bio":"Bio","profile.site.visible.rating":"Rating and reviews","profile.site.visible.portfolio":"Portfolio / Cards","profile.site.visible.contacts":"Contact info","profile.site.visible.full_last_name":"Full last name","profile.site.visible.services":"Service cards","profile.site.visible.reviews":"Reviews section","profile.site.visible.status":'"Ready to help" status',"profile.site.theme":"Appearance theme","profile.site.theme.dark":"Dark","profile.site.theme.light":"Light","profile.site.slug_taken":"This address is already taken","profile.site.stats.title":"Site analytics","profile.site.stats.days":"last 30 days","profile.site.stats.views":"Views","profile.site.stats.unique":"Unique visitors","profile.site.stats.messages":"Messages","profile.site.stats.total_views":"Total views","profile.site.stats.total_unique":"Unique visitors","profile.site.stats.total_messages":"Messages","profile.site.stats.empty":"No data yet","profile.site.stats.loading":"Loading analytics...","profile.site.stats.no_slug":"Set your site URL to see analytics","profile.site.edit_bio_hint":'Bio and photo are edited in the "Basic info" tab.',"profile.site.seo.title":"SEO — Page Metadata","profile.site.seo.hint":"Shown in search results. Saved values are auto-translated into all languages.","profile.site.seo.site_title":"Page title","profile.site.seo.site_title_placeholder":"John Doe — Plumber in Athens","profile.site.seo.site_desc":"Meta description","profile.site.seo.site_desc_placeholder":"Brief description for search engines...","status.title":"Status","status.can_help_now_hint":"Your card is shown higher in search","status.need_help_hint":"Specialists can offer you help","profile.referral.title":"Referral program","profile.referral.desc":"Share your link and earn rewards for every new user you invite.","profile.referral.link_label":"Your referral link","profile.referral.copy":"Copy","profile.referral.copied":"Copied!","profile.referral.invited_count":"successful referrals","profile.referral.no_code":"Referral code is not available.","notifications.title":"Notification settings","notifications.email.new_tasks":"Email for new tasks","notifications.email.new_tasks.desc":"Receive an email when a new task is posted in your categories","notifications.messages.desc":"Receive a notification when a new message arrives","notifications.saved":"Settings saved","notifications.plan_required":"Not available in your plan","profile.tab.info":"Basic info","profile.tab.finance":"Finance","profile.tab.skills":"Skills","profile.tab.categories":"Categories","profile.tab.geography":"Geography","profile.specialist.categories":"Work categories","profile.specialist.categories.desc":"Select the categories you work in","profile.specialist.geography":"Coverage areas","profile.specialist.geography.desc":"Select the cities / districts where you are active","profile.saving":"Saving...","profile.upload.error":"Error uploading photo","profile.saved":"Saved","profile.tab.cards":"Offers","profile.cards.count":"Offers","profile.cards.add":"Add offer","profile.cards.new_title":"New offer title","profile.cards.placeholder":"e.g. Plumbing","profile.cards.create":"Create","profile.cards.cancel":"Cancel","profile.cards.empty":"No offers yet","profile.cards.empty_hint":"Create your first card to show your services to clients.","profile.cards.create_first":"Create your first offer","profile.cards.delete_confirm":"Delete offer?","profile.background.change":"Change background","profile.background.remove":"Remove background","profile.listing_requirements.published_card":"Publish at least one card","profile.listing_requirements.title":"Your profile is not shown yet in offers","profile.listing_requirements.hint":"To make the card visible, complete these conditions:","profile.listing_requirements.bio":"Add a short bio in the main profile section","profile.listing_requirements.categories":"Add at least one category to the active card","profile.listing_requirements.locations":"Add at least one location to the active card","profile.listing_requirements.card_inactive":"Make the card active","profile.listing_requirements.review_pending":"Card is under review","profile.card.visibility_issue":"Card is not shown in offers","profile.card.tab.main":"General","profile.card.tab.skills":"Skills","profile.card.tab.categories":"Categories","profile.card.tab.geography":"Geography","profile.card.tab.portfolio":"Portfolio","profile.card.tab.pricelist":"Price list","profile.card.pricelist.empty":"No price list groups yet.","profile.card.pricelist.add_group":"Add group","profile.card.pricelist.group_title":"Group title","profile.card.pricelist.add_item":"Add item","profile.card.pricelist.item_name":"Service / work","profile.card.pricelist.item_desc":"Description (optional)","profile.card.pricelist.item_price":"Price","profile.card.pricelist.item_unit":"Unit (e.g. /hour)","profile.card.pricelist.save_group":"Save group","profile.card.pricelist.save_item":"Save","profile.card.pricelist.delete_group":"Delete group","profile.card.pricelist.delete_item":"Delete","profile.card.active":"Active","profile.card.review_pending":"Pending approval","profile.card.review_pending_hint":"Your card is being reviewed by the admin team.","profile.card.review_submitted":"Card submitted for review","profile.card.review_approved":"Card approved","profile.card.review_approved_hint":"Your card is now visible in offers.","profile.card.review_rejected":"Card rejected","profile.card.review_rejected_hint":"Your card was not approved. Please update it and submit again.","profile.card.submit_review":"Submit for review","profile.card.withdraw_review":"Withdraw request","profile.card.unpublish":"Unpublish","profile.card.save":"Save","profile.card.saved":"Saved","profile.card.delete":"Delete","profile.card.skill.add":"Add skill","profile.card.photo.add":"Add photo","profile.card.photo.uploading":"Uploading...","profile.card.photo.empty":"No photos yet","profile.card.item.title":"Title","profile.card.item.desc":"Description","profile.card.item.save":"Save","profile.card.item.cancel":"Cancel","profile.card.item.edit":"Edit","profile.card.description":"Card description","profile.card.desc_auto_translate":"Will be automatically translated into other languages on save","profile.card.desc_translated":"Translations available:","profile.upgrade.cards_limit":"Portfolio limit reached","profile.upgrade.plan":"Current plan:","profile.upgrade.contact":"Contact the administrator to change your plan","profile.upgrade.ok":"Got it","profile.plan.title":"Subscription plan","profile.balance":"Balance","profile.balance.topup":"Top Up Balance","profile.balance.topup.title":"Top Up Balance","profile.balance.topup.amount":"Amount (EUR)","profile.balance.topup.hint":"Choose a preset or enter a custom amount","profile.balance.topup.submit":"Proceed to Payment","profile.balance.topup.loading":"Redirecting...","profile.balance.topup.error":"Payment initiation failed. Please try again.","payment.success.title":"Payment Successful!","payment.success.desc":"Your balance has been updated.","payment.cancelled.title":"Payment Cancelled","payment.cancelled.desc":"Payment was cancelled. No charges were made.","payment.pending.title":"Processing...","payment.pending.desc":"Your payment is being processed.","payment.back_to_profile":"Back to Profile","profile.plan.basic":"Basic (free)","profile.plan.contact_upgrade":"Contact admin to upgrade your plan","profile.plan.cards_up_to":"Portfolio: up to","profile.plan.cards_unlimited":"Portfolio: unlimited","profile.plan.tasks_up_to":"Tasks: up to","profile.plan.offers_up_to":"Offers: up to","profile.plan.valid_until":"Valid until","profile.plan.no_expiry":"No expiry","create.error":"Error posting task","tasks.category.general":"General","tasks.budget.range":"Range:","tasks.budget.from":"from","tasks.budget.to":"to","tasks.filter.reset":"Reset filters","tasks.load_more":"Load more","tasks.showing":"Results:","tasks.field.budget":"Budget, €","admin.title":"Admin Panel","admin.tab.stats":"Statistics","admin.tab.users":"Users","admin.tab.tasks":"Tasks","admin.tab.reports":"Reports","admin.tab.moderation":"Moderation","admin.stats.users":"Users","admin.stats.tasks":"Tasks","admin.stats.offers":"Offers","admin.stats.reviews":"Reviews","admin.tasks.by_status":"Tasks by status","admin.col.user":"User","admin.col.email":"Email","admin.col.role":"Role","admin.col.registered":"Registered","admin.col.status":"Status","admin.col.title":"Title","admin.col.budget":"Budget","admin.col.created":"Created","admin.users.active":"Active","admin.users.inactive":"Inactive","admin.users.deactivate":"Deactivate","admin.users.activate":"Activate","admin.tasks.cancel":"Cancel","admin.reports.none":"No reports","admin.moderation.none":"No offers to review","admin.moderation.pending":"Pending","admin.moderation.active":"Active","admin.moderation.approve":"Approve","admin.moderation.block":"Block","admin.moderation.pending_title":"Offers pending approval","admin.moderation.active_title":"Active offers","admin.moderation.pending_count":"Pending","admin.moderation.active_count":"Active","admin.moderation.pending_hint":"New offers waiting for approval","admin.moderation.active_hint":"Visible offers you can block","admin.moderation.pending_empty":"No new offers to approve","admin.moderation.active_empty":"No active offers found","admin.reports.reviewed":"Reviewed","admin.reports.dismiss":"Dismiss","admin.pagination.total":"Total","admin.users.role.change":"Change role","admin.users.search.placeholder":"Search name or email...","admin.tasks.delete":"Delete","admin.tasks.delete.confirm":"Permanently delete this task?","admin.tasks.search.placeholder":"Search title...","admin.col.customer":"Customer","admin.col.reporter":"Reporter","admin.col.target":"Target","admin.filter.all_roles":"All roles","admin.filter.all_statuses":"All statuses","admin.reports.target.task":"Task","admin.reports.target.user":"User","admin.tab.categories":"Categories","admin.tab.locations":"Cities & Districts","admin.tab.logs":"Logs","admin.tab.plans":"Plans","admin.tab.settings":"Settings","admin.logs.subtab.ai":"AI Logs","admin.logs.subtab.activity":"Activity","admin.logs.subtab.mail":"Mail","admin.logs.subtab.notifications":"Notifications","admin.notif_logs.type":"Type","admin.notif_logs.title":"Title","admin.notif_logs.read":"Read","admin.notif_logs.empty":"No notification logs","admin.stats.notif_chart_title":"Notifications per day","admin.stats.notif_label":"Notifications","admin.stats.mail_chart_title":"Emails per day","admin.stats.mail_label":"Emails","admin.filter.all":"All","admin.stats.specialists":"Helpers","admin.col.plan":"Plan","admin.back_home":"Home","admin.plans.title":"Subscription plans","admin.plans.add":"+ New plan","admin.plans.empty":"No plans created","admin.plans.form.new":"New plan","admin.plans.form.edit":"Edit plan","admin.plans.form.name":"Name","admin.plans.form.price":"Price (EUR)","admin.plans.form.old_price":"Old price (EUR, optional)","admin.plans.form.max_offers":"Max offers (empty = no limit)","admin.plans.form.max_cards":"Max offers (empty = no limit)","admin.plans.form.duration_days":"Duration (days, empty = no expiry)","admin.plans.form.description":"Description","admin.plans.form.features":"Features (one per line)","admin.plans.form.notify":"Notify about new tasks","admin.plans.form.default":"Default","admin.plans.form.active":"Active","admin.plans.form.order":"Order","admin.plans.form.role":"Role","admin.plans.form.tier":"Tier","admin.plans.form.role.customer":"Customer","admin.plans.form.role.specialist":"Helper","admin.plans.form.tier.free":"Free","admin.plans.form.tier.pro":"Pro","admin.plans.form.tier.ultimate":"Ultimate","admin.plans.form.section.limits":"Limits (empty = unlimited)","admin.plans.form.max_messages_day":"Max Messages/Day","admin.plans.form.max_orders_day":"Max Orders/Day","admin.plans.form.max_skills":"Max Skills","admin.plans.form.max_profiles":"Max Profiles","admin.plans.form.max_portfolio":"Max Portfolio Items","admin.plans.form.section.boost":"Multipliers & Boost","admin.plans.form.search_boost":"Search Boost","admin.plans.form.offers_multiplier":"Offers Multiplier","admin.plans.form.section.contact":"Contact Permissions","admin.plans.form.can_contact_free":"Contact Free Plan users","admin.plans.form.can_contact_pro":"Contact Pro Plan users","admin.plans.form.can_contact_all":"Contact All users","admin.plans.form.can_show_contact":"Show Contact Info","admin.plans.form.can_view_phone":"View Phone","admin.plans.form.section.features":"Feature Flags","admin.plans.form.upload_video":"Upload Video","admin.plans.form.favorites":"Favorites","admin.plans.form.google_calendar":"Google Calendar","admin.plans.form.verified_badge":"Verified Badge","admin.plans.form.highlighted_reviews":"Highlighted Reviews","admin.plans.form.personal_site":"Personal Site","admin.plans.form.can_help_now":"Can Help Now Status","admin.plans.form.need_help":"Need Help Status","admin.plans.form.auto_response":"Auto Response","admin.plans.form.auto_match":"Auto Match","admin.plans.form.price_list":"Price List","admin.plans.form.instant_dispatch_free":"Instant Dispatch (Free)","admin.plans.form.instant_dispatch_pro":"Instant Dispatch (Pro)","admin.plans.badge.default":"Default","admin.plans.badge.inactive":"Inactive","admin.plans.make_default":"Set as default","admin.plans.tasks":"Tasks","admin.plans.offers":"Offers","admin.plans.cards":"Offers","admin.plans.notify_tasks":"Task notifications","admin.plans.delete.confirm":"Delete plan","admin.activity.title":"Activity log","admin.activity.event":"Event","admin.activity.all_events":"All events","admin.activity.from":"From","admin.activity.to":"To","admin.activity.reset":"Reset","admin.activity.total":"Total","admin.activity.empty":"No records","admin.mail.event":"Email event","admin.mail.all_events":"All email events","admin.mail.from":"From","admin.mail.to":"To","admin.mail.reset":"Reset","admin.mail.total":"Total","admin.mail.empty":"No email logs","admin.mail.recipient":"Recipient","admin.mail.provider":"Provider","admin.mail.details":"Details","admin.mail.status":"Status","admin.mail.success":"Success","admin.mail.failed":"Failed","admin.event.email_sent":"Email sent","admin.event.email_failed":"Email failed","admin.event.email_dev":"Email DEV fallback","admin.event.admin_email_test_sent":"Admin test email sent","admin.event.admin_email_test_failed":"Admin test email failed","admin.logs.empty":"No records","admin.logs.date":"Date","admin.logs.provider":"Provider","admin.logs.model":"Model","admin.logs.action":"Action","admin.logs.langs":"Languages","admin.logs.in":"In","admin.logs.out":"Out","admin.logs.total":"Total","admin.logs.ms":"ms","admin.logs.status":"Status","admin.stats.activity_30d":"Activity over 30 days","admin.stats.tasks_label":"Tasks","admin.stats.users_label":"Users","admin.stats.specialists_label":"Helpers","admin.stats.tokens_title":"Token usage (by month)","admin.stats.tokens_out":"Output","admin.stats.tokens_in":"Input","admin.stats.tokens_out_label":"Output tokens","admin.stats.tokens_in_label":"Input tokens","admin.stats.cost_label":"Cost (USD)","admin.stats.tasks_by_status":"Tasks by status","admin.task_status.open":"Open","admin.task_status.in_progress":"In progress","admin.task_status.completed":"Completed","admin.task_status.cancelled":"Cancelled","admin.task_status.draft":"Drafts","admin.settings.tab.general":"General","admin.settings.tab.smtp":"E-Mail","admin.settings.tab.notifications":"Notifications","admin.settings.tab.payment":"Payment","admin.settings.tab.referral":"Referrals","admin.settings.tab.seo":"SEO","admin.settings.tab.socials":"Socials","admin.settings.tab.telegram":"Telegram Bot","admin.settings.telegram.title":"Telegram Bot Settings","admin.settings.telegram.help":"Create a bot via @BotFather. Use @userinfobot to get chat IDs.","admin.settings.telegram.bot_token":"Bot Token","admin.settings.telegram.admin_chat_id":"Admin Chat ID","admin.settings.telegram.admin_chat_hint":"First send /start to your bot, then use @userinfobot to get your chat ID","admin.settings.telegram.channel_id":"Channel ID","admin.settings.telegram.channels_title":"Language Channels","admin.settings.telegram.channel_hint":"Public channel @username or numeric ID","admin.settings.telegram.notify_registrations":"Notify on new registrations","admin.settings.telegram.notify_registrations_hint":"Send admin a message when a new user registers","admin.settings.telegram.post_new_tasks":"Post new tasks to channel","admin.settings.telegram.post_new_tasks_hint":"Automatically publish new tasks to the Telegram channel","admin.settings.telegram.test":"Test","admin.settings.telegram.verify":"Verify","admin.settings.telegram.test_ok":"Connection successful","admin.settings.telegram.test_fail":"Connection failed","admin.settings.socials.title":"Social Network Links","admin.settings.socials.hint":"Filled links are displayed in the site footer","admin.settings.seo.maintenance_label":"Maintenance Mode","admin.settings.seo.maintenance_hint":"Show a maintenance page to all visitors","admin.settings.seo.indexing_label":"Search Engine Indexing","admin.settings.seo.indexing_hint":"Allow search engines to index the site","admin.settings.seo.head_scripts_label":" Scripts (JS)","admin.settings.seo.head_scripts_hint":"Runs on every page (Google Tag Manager, analytics, etc.)","admin.settings.seo.site_title_label":"Site Title","admin.settings.seo.site_description_label":"Site Description (meta description)","admin.settings.referral.title":"Referral program","admin.settings.referral.hint":"Reward users who bring new registrations.","admin.settings.referral.enabled_label":"Enabled","admin.settings.referral.enabled_hint":"Enable / disable reward application","admin.settings.referral.customer_section":"For customers","admin.settings.referral.specialist_section":"For helpers","admin.settings.referral.plan_label":"Reward plan","admin.settings.referral.no_plan":"— no plan —","admin.settings.referral.plan_hint":"This plan will be assigned to the referrer. If their current plan is higher, only days will be added.","admin.settings.referral.days_label":"Reward days","admin.settings.referral.days_hint":"Number of days added to the plan expiry.","admin.settings.general.title":"General settings","admin.settings.general.site_name":"Site name","admin.settings.general.site_url":"Site URL","admin.settings.general.contact_email":"Contact email","admin.settings.general.support_phone":"Support phone","admin.settings.smtp.title":"SMTP settings","admin.settings.smtp.hint":"Used to send email notifications.","admin.settings.smtp.host":"SMTP Host","admin.settings.smtp.port":"Port","admin.settings.smtp.encryption":"Encryption","admin.settings.smtp.enc.none":"None","admin.settings.smtp.enc.tls":"STARTTLS (port 587)","admin.settings.smtp.enc.ssl":"SSL/TLS (port 465)","admin.settings.smtp.username":"Username","admin.settings.smtp.password":"Password / App Password","admin.settings.smtp.from_name":"Sender name","admin.settings.smtp.from_email":"Sender email","admin.settings.smtp.test":"Send test email","admin.settings.smtp.sending":"Sending...","admin.settings.payment.hint":"ePay Piraeus Bank credentials.","admin.settings.env.test":"Test (sandbox)","admin.settings.env.prod":"Production","admin.settings.env.label":"Environment","admin.settings.merchant_id":"Merchant ID","admin.settings.api_user":"API User","admin.settings.api_password":"API Password","admin.settings.confirm_url":"Confirmation URL (webhook)","admin.settings.cancel_url":"Cancel URL","admin.settings.active":"Active","admin.settings.saving":"Saving...","admin.settings.saved":"Saved","admin.notif.vars_hint":"Available variables in templates","admin.notif.tmpl.not_set":"Template not configured","admin.notif.tmpl.subject_label":"Email subject","admin.notif.tmpl.body_label":"Email body (HTML)","admin.notif.tmpl.save":"Save","admin.notif.tmpl.close":"Close","admin.notif.tmpl.translate":"Auto-translate to other languages","admin.notif.tmpl.translating":"Translating...","admin.notif.tmpl.saving":"Saving...","admin.notif.email_verification":"Email verification","admin.notif.registration_success":"Successful registration","admin.notif.password_reset":"Password reset","admin.notif.new_offer":"New offer","admin.notif.new_task":"New task","admin.notif.offer_accepted":"Offer accepted","admin.notif.new_message":"New message","admin.notif.offer_declined":"Offer declined","admin.notif.offer_other_accepted":"Another specialist chosen","admin.notif.task_updated":"Task updated","admin.notif.deadline_reminder":"Deadline reminder","admin.notif.task_archived":"Task unpublished automatically","admin.notif.referral_reward":"Referral reward","admin.email_template.plan_activated":"Plan activated","admin.email_template.plan_upgraded":"Plan upgraded","admin.email_template.plan_downgrade_scheduled":"Downgrade scheduled","admin.email_template.plan_downgrade_applied":"Downgrade applied","admin.email_template.plan_renewal_reminder":"Renewal reminder","admin.email_template.plan_insufficient_funds":"Insufficient funds warning","pricing.confirm.title":"Confirm plan selection","pricing.confirm.plan":"Plan","pricing.confirm.prorated":"Prorated credit","pricing.confirm.effective_price":"Amount due","pricing.confirm.your_balance":"Your balance","pricing.confirm.downgrade_info":"The switch to the new plan will happen automatically after the current period ends.","pricing.confirm.insufficient":"Insufficient balance.","pricing.confirm.top_up":"Top up","pricing.confirm.schedule_downgrade":"Schedule downgrade","pricing.confirm.pay":"Pay","admin.user_edit.title":"Edit user","admin.user_edit.email":"Email","admin.user_edit.email_verified":"Email verified","admin.user_edit.email_not_verified":"Email not verified","admin.user_edit.verify_email_btn":"Verify manually","admin.user_edit.verify_email_done":"Email verified!","admin.user_edit.id":"ID","admin.user_edit.registered":"Registered","admin.user_edit.last_seen":"Last seen","admin.user_edit.lang":"Language","admin.user_edit.first_name":"First name","admin.user_edit.last_name":"Last name","admin.user_edit.phone":"Phone","admin.user_edit.bio":"Bio","admin.user_edit.role":"Role","admin.user_edit.plan":"Plan","admin.user_edit.no_plan":"— No plan —","admin.user_edit.active":"Active account","admin.user_edit.published":"Published","admin.user_edit.balance":"Balance (EUR)","admin.user_edit.skills":"Skills","admin.user_edit.tab.profile":"Profile","admin.user_edit.tab.account":"Account","admin.user_edit.tab.balance":"Balance","admin.user_edit.tab.settings":"Settings","admin.user_edit.tab.specialist":"Offers","admin.user_edit.tab.site":"Website","admin.user_edit.plan_expires":"Plan expires","admin.user_edit.interface_lang":"Interface language","admin.user_edit.comm_languages":"Communication languages","admin.user_edit.personal_site_slug":"Personal page","admin.user_edit.show_contact_info":"Show contact info","admin.user_edit.show_contact_info.hint":"Visible to customers","admin.user_edit.notify_new_tasks":"Notify about new tasks","admin.user_edit.notify_new_tasks.hint":"Push and email notifications","admin.user_edit.notif_messages":"Message notifications","admin.user_edit.notif_messages.hint":"New messages in chat","admin.user_edit.site_settings":"Personal page settings","admin.user_edit.categories":"Service categories","admin.user_edit.locations":"Service areas","admin.user_edit.skill_placeholder":"New skill...","admin.user_edit.add_category":"— Select category —","admin.user_edit.add_location":"— Select location —","admin.user_edit.specialist_cards":"Offers","admin.user_edit.no_cards":"No offers found","admin.user_edit.card_title":"Offer title","admin.user_edit.card_description":"Description","admin.balance.topup.btn":"Top up","admin.balance.withdraw.btn":"Withdraw","admin.balance.modal_hint":"Changes take effect immediately and are recorded in history","admin.balance.topup.title":"Top up balance","admin.balance.topup.amount":"Amount","admin.balance.topup.description":"Comment","admin.balance.topup.description.placeholder":"For example: bonus or manual top-up","admin.balance.topup.submit":"Top up balance","admin.balance.withdraw.title":"Withdraw balance","admin.balance.withdraw.amount":"Amount","admin.balance.withdraw.description":"Comment","admin.balance.withdraw.description.placeholder":"For example: refund or manual debit","admin.balance.withdraw.submit":"Withdraw from balance","admin.user_edit.role.customer":"Customer","admin.user_edit.role.user":"User","admin.user_edit.role.specialist":"Helper","admin.user_edit.role.admin":"Administrator","common.refresh":"Refresh","common.back_home":"Home","admin.loc.hint":"Manage cities and districts","admin.loc.add_city":"New city","admin.loc.add_district":"Add district","admin.loc.new":"New location","admin.loc.edit":"Edit location","admin.loc.district":"district","admin.loc.empty":"No locations","admin.loc.delete.confirm":"Delete location? All districts will also be deleted.","admin.cat.add_root":"New category","admin.cat.add_sub":"Subcategory","admin.cat.edit":"Edit","admin.cat.delete":"Delete","admin.cat.delete.confirm":"Delete category? All subcategories will also be deleted.","admin.cat.slug":"Slug","admin.cat.icon":"Icon","admin.cat.name_el":"Greek","admin.cat.name_en":"English","admin.cat.name_ru":"Russian","admin.cat.name_uk":"Ukrainian","admin.cat.active":"Active","admin.cat.parent":"Parent category","admin.cat.no_parent":"Top level","admin.cat.save":"Save","admin.cat.cancel":"Cancel","admin.cat.empty":"No categories","admin.cat.hint":"Manage categories with multi-level hierarchy","admin.cat.new":"New category","admin.cat.subcategory":"subcategory","admin.cat.add_child":"Add subcategory","admin.cat.inactive":"Inactive","admin.event.user_login":"Login","admin.event.user_register":"Registration","admin.event.admin_user_deactivate":"User blocked","admin.event.admin_user_activate":"User activated","admin.event.admin_user_role_changed":"Role changed","admin.event.admin_task_cancelled":"Task cancelled","admin.event.admin_task_deleted":"Task deleted","admin.event.admin_report_reviewed":"Report reviewed","admin.event.admin_report_dismissed":"Report dismissed","admin.event.task_created":"Task created","user.online":"Online","user.seen_minutes":"was here {n} min ago","user.seen_hours":"was here {n} hr ago","user.seen_yesterday":"was here yesterday","user.seen_days":"was here {n} days ago","specialists.title":"Offers","specialists.search":"Search specialist...","specialists.search.btn":"Search","specialists.empty":"No specialists found","specialists.no_bio":"No description","specialists.view":"View profile","specialists.reviews":"reviews","specialist.favorite":"Add to favorites","specialist.unfavorite":"Remove from favorites","specialist.site_link":"Personal site","favorites.specialists.title":"Favourite specialists","favorites.specialists.empty":"No favourite specialists yet","nav.favorites":"Favourites","nav.schedule":"Schedule","nav.find_tasks":"Find Orders","schedule.title":"My Schedule","schedule.subtitle":"Mark the days when you are free or busy — clients will see your availability","schedule.available":"Available","schedule.busy":"Busy","schedule.unset":"Not set","schedule.click_hint":"← click to cycle status","schedule.range_mode":"Select range","schedule.range_from":"From {date} — select end date","schedule.click_to_set":"Click to set","schedule.free":"free","schedule.busy_count":"busy","schedule.free_days":"free days","schedule.googleCalendar":"Google Calendar","schedule.connectGoogle":"Connect Google Calendar","schedule.disconnectGoogle":"Disconnect","schedule.connectedAs":"Connected as","schedule.importFromGoogle":"Sync from Google","schedule.gcalConnected":"✓ Google Calendar connected","schedule.gcalError":"Google Calendar connection error","schedule.gcalImportDone":"Imported {n} days from Google Calendar","schedule.gcalAutoSyncNote":"Availability changes are automatically synced to Google Calendar","schedule.gcalConnectDesc":"Connect Google Calendar to automatically sync your availability","schedule.gcalDisconnectConfirm":"Disconnect Google Calendar?","find_tasks.title":"Find Orders","find_tasks.for_me":"For me","find_tasks.all":"All orders","find_tasks.by_category":"By category","find_tasks.list":"List","find_tasks.already_offered":"Offer sent","find_tasks.offer_now":"Make an offer","find_tasks.empty_for_me":"No tasks found in your categories","find_tasks.banner_hint":"Find tasks matching your portfolio categories","find_tasks.no_cards":"Create a specialist portfolio to see tasks matched to you","find_tasks.add_card":"Create portfolio","find_tasks.search":"Search tasks...","find_tasks.tasks_count":"tasks","footer.tagline":"The task platform for Greece","footer.rights":"All rights reserved.","nav.privacy":"Privacy Policy","nav.delete_account":"Delete Account","delete_account.title":"Request Account Deletion","delete_account.subtitle":"Once we verify your request, we will permanently delete your account and data within 30 days.","delete_account.warning":"This action cannot be undone. All your data will be permanently deleted.","delete_account.reason_label":"Reason (optional)","delete_account.reason_placeholder":"Tell us why you want to delete your account...","delete_account.confirm_label":"I confirm that I want to permanently delete my account","delete_account.submit":"Submit request","delete_account.submitting":"Submitting...","delete_account.success_title":"Your request has been received","delete_account.success_body":"We will process your request within 30 days and notify you by email.","delete_account.login_required":"You must be logged in to submit a deletion request.","delete_account.login_btn":"Log in","app.download_title":"Download the CanHelp mobile app","app.download_desc":"All of CanHelp — always at your fingertips. Available for Android and iOS.","nav.pricing":"Pricing","pricing.title":"Pricing","pricing.subtitle":"Choose the right plan for you","pricing.role.customer":"Customer","pricing.role.specialist":"Specialist","pricing.free":"Free","pricing.per_month":"mo","pricing.duration":"Duration","pricing.days":"days","pricing.current_plan":"Your plan","pricing.popular":"Popular","pricing.choose":"Choose","pricing.your_plan":"Active plan","pricing.free_default":"Default","pricing.compare":"Compare features","pricing.feature":"Feature","pricing.faq_note":"Payment is deducted from your CanHelp balance. Top up available in Payments.","pricing.feat.messages":"Messages / day","pricing.feat.orders":"Orders / day","pricing.feat.contact_all":"Contact everyone","pricing.feat.view_phone":"View phone number","pricing.feat.show_contact":"Show contact info","pricing.feat.favorites":"Favorites","pricing.feat.verified_badge":"Verified badge","pricing.feat.google_calendar":"Google Calendar","pricing.feat.personal_site":"Personal site","pricing.feat.auto_response":"Auto-response","pricing.feat.auto_match":"Auto-match","pricing.feat.highlighted_reviews":"Highlighted reviews","pricing.feat.portfolio":"Offer items","pricing.feat.cards":"Number of offers","pricing.feat.notify_tasks":"New task notifications","pricing.feat.video":"Video in offer","upgrade.available_in":"Available in","upgrade.cta":"Upgrade","dashboard.plan.title":"My Plan","dashboard.plan.expires":"Expires in {n} days","dashboard.plan.upgrade":"Upgrade plan","dashboard.plan.no_plan":"Free plan","dashboard.plan.messages":"Messages today","dashboard.plan.orders":"Orders today","dashboard.plan.limits":"Daily limits","dashboard.plan.features":"Features","dashboard.plan.stats":"Stats","dashboard.stats.cards":"Portfolios","dashboard.stats.maxCards":"Max portfolios","dashboard.stats.portfolioItems":"Portfolio items","dashboard.stats.maxPortfolioItems":"Max items","dashboard.stats.activeOffers":"Active offers","dashboard.stats.reviewsReceived":"Reviews","dashboard.stats.activeTasks":"Active tasks","dashboard.stats.completedTasks":"Completed","status.need_help":"I need help","status.active":"Active","status.toggle_on":"Enable","status.toggle_off":"Disable","fomo.missed_orders":"Missed {n} orders","fomo.missed_value":"Worth €{v}","fomo.upgrade_hint":"Upgrade to receive more orders","fomo.conversion":"Task conversion","fomo.active":"Active","fomo.with_offers":"With offers","fomo.completed":"Completed","fomo.already_offered":"{n} specialists have already responded","fomo.specialist_missed":"You missed {n} orders","fomo.top_categories":"Categories","fomo.offers_received":"offers received","fomo.avg_offers":"Avg {n}/task","fomo.completion_rate":"completed","task.auto_match":"Auto-match","task.auto_match_results":"Top specialists","task.no_offer_yet":"You haven't sent an offer yet","task.make_offer":"Send offer","auto_response.title":"Auto-Response","auto_response.enabled":"Enable auto-response","auto_response.min_budget":"Min budget","auto_response.max_budget":"Max budget","auto_response.default_price":"Default price","auto_response.default_message":"Default message","auto_response.max_per_day":"Max auto-offers per day","auto_response.save":"Save","auto_response.saved":"Saved","auto_response.categories":"Categories","auto_response.locations":"Locations","profile.personal_site":"Personal Site","profile.site_slug":"URL slug","profile.site_slug_hint":"Only latin letters, numbers, - and _","profile.site_open":"Open site","profile.site_preview":"Your site","profile.show_contact":"Show contact info","profile.show_contact_hint":"Customers with Pro/Ultimate plans will see your phone number","gcal.upgrade_required":"Google Calendar requires a Pro or Ultimate plan","chat.limit_warning":"{n} messages left today","chat.limit_reached":"Message limit reached. Upgrade your plan","chat.upgrade":"Upgrade","site.member_since":"Member since","site.rating":"Rating","site.completed_tasks":"Completed","site.languages":"Languages","site.photos":"photos","site.contact_form":"Get in touch","site.contact_sent":"Message sent!","site.contact_sent_desc":"The specialist will contact you soon","site.contact_name":"Name","site.contact_name_ph":"Your name","site.contact_email_ph":"your@email.com","site.contact_message":"Message","site.contact_message_ph":"Describe your task...","site.contact_send":"Send","site.share":"Share","site.speaks_languages":"Speaks","site.message_sent":"Message sent!","site.message_sent_desc":"The specialist will receive it in the chat","site.message_placeholder":"Write your message...","site.write_to_chat":"Write to chat","site.auth_required_title":"Sign in required","site.auth_required_desc":"To write in the chat, you need to sign in to your CanHelp account.","site.auth_login_btn":"Sign in","site.auth_contact_form_btn":"Contact via feedback form","specialist.services":"Services","portfolio.title":"Portfolio","status.can_help_now":"Available now","common.not_found":"Page not found","common.anonymous":"Anonymous","specialist_setup.page_title":"Specialist profile setup","specialist_setup.step_of":"Step {current} of {total}","specialist_setup.next":"Next","specialist_setup.back":"Back","specialist_setup.skip":"Skip","specialist_setup.finish":"Finish","specialist_setup.go_to_profile":"Go to profile","specialist_setup.browse_tasks":"Browse tasks","specialist_setup.step1.title":"Welcome!","specialist_setup.step1.subtitle":"Let's set up your profile","specialist_setup.step1.desc":"A complete profile helps you find more clients. Follow the steps to create the perfect specialist profile.","specialist_setup.step1.what_next":"What we will do:","specialist_setup.step1.item1":"Fill in basic information","specialist_setup.step1.item2":"Create a service card","specialist_setup.step1.item3":"Add skills and categories","specialist_setup.step1.item4":"Select service area","specialist_setup.step1.item5":"Upload portfolio photos","specialist_setup.step2.title":"Basic profile","specialist_setup.step2.subtitle":"Tell us about yourself","specialist_setup.step2.bio_label":"About me","specialist_setup.step2.bio_placeholder":"Describe your experience, services you offer...","specialist_setup.step2.phone_label":"Phone","specialist_setup.step2.phone_placeholder":"+30 6900000000","specialist_setup.step2.photo_label":"Profile photo","specialist_setup.step2.photo_btn":"Upload photo","specialist_setup.step2.photo_uploading":"Uploading...","specialist_setup.step2.photo_hint":"Shown on your profile","specialist_setup.step3.title":"Service card","specialist_setup.step3.subtitle":"Create your first service card","specialist_setup.step3.title_label":"Card title","specialist_setup.step3.title_placeholder":"E.g. Plumber, Electrician, Cleaning...","specialist_setup.step3.desc_label":"Description","specialist_setup.step3.desc_placeholder":"Describe in detail what you offer, your experience, advantages...","specialist_setup.step3.title_required":"Title is required","specialist_setup.step4.title":"Skills & Categories","specialist_setup.step4.subtitle":"Add skills and select categories","specialist_setup.step4.skills_label":"Skills","specialist_setup.step4.skills_placeholder":"E.g. Pipe installation...","specialist_setup.step4.skills_add":"Add","specialist_setup.step4.categories_label":"Categories","specialist_setup.step5.title":"Service area","specialist_setup.step5.subtitle":"Where do you provide services?","specialist_setup.step5.hint":"Select cities or specific areas","specialist_setup.done.title":"Your profile is ready!","specialist_setup.done.subtitle":"Congratulations! Your profile has been set up","specialist_setup.done.desc":"You can now receive orders from clients. Browse tasks that match your skills.","support.title":"Support","support.type.label":"Request type","support.type.bug":"Bug report","support.type.suggestion":"Suggestion","support.type.other":"Other","support.subject":"Subject","support.subject.placeholder":"Brief description...","support.body":"Message","support.body.placeholder":"Describe the issue or suggestion in detail...","support.submit":"Submit","support.cancel":"Cancel","support.error":"Failed to send. Please try again.","support.sent.title":"Request received!","support.sent.body":"We will reply to your email as soon as possible.","support.sent.close":"Close","admin.tab.support":"Support","admin.tab.backup":"Backup","admin.tab.translations":"Translations","admin.tab.dbcheck":"DB Check","admin.tab.balances":"Balances","admin.tab.push":"Push","admin.tab.referrals":"Referrals","admin.search":"Search","admin.noData":"No data","admin.cat.order":"Order","admin.cat.skills":"Skills","admin.plans.form.max_tasks":"Max tasks","admin.settings.referral.shared_section":"Shared referral settings","admin.settings.seo.title":"SEO settings","admin.backup.title":"Backup","admin.backup.tables":"Tables","admin.backup.exportAll":"Export all","admin.backup.importAll":"Import all","admin.backup.exportTable":"Export table","admin.backup.importTable":"Import table","admin.backup.exporting":"Exporting...","admin.backup.importing":"Importing...","admin.backup.exportSuccess":"Export completed","admin.backup.importSuccess":"Import completed","admin.backup.autoBackup":"Auto backup","admin.backup.autoBackupDesc":"Automatic daily backup","admin.backup.storedBackups":"Stored backups","admin.backup.noStoredBackups":"No stored backups","admin.backup.restore":"Restore","admin.backup.restoreConfirm":"Restore from backup?","admin.backup.restoreSuccess":"Restore completed","admin.backup.restoring":"Restoring...","admin.backup.date":"Date","admin.backup.size":"Size","admin.backup.today":"Today","admin.backup.yesterday":"Yesterday","admin.balance.col.operation":"Operation","admin.balance.col.amount":"Amount","admin.balance.col.result":"Balance","admin.balance.col.description":"Description","admin.balance.col.date":"Date","admin.balance.empty":"No records yet","admin.balance.filter.all":"All operations","admin.balance.filter.user_id":"Filter by userId","admin.balance.kind.topup":"Top-up","admin.balance.kind.plan_purchase":"Plan charge","admin.balance.kind.admin_topup":"Admin top-up","admin.balance.kind.admin_adjustment":"Adjustment","admin.support.search":"Search","admin.support.all_statuses":"All statuses","admin.support.all_types":"All types","admin.support.none":"No tickets","admin.support.reply":"Reply","admin.support.reply_placeholder":"Type your reply...","admin.support.send_reply":"Send reply","admin.support.cancel":"Cancel","admin.support.close":"Close","admin.support.status.open":"Open","admin.support.status.in_progress":"In progress","admin.support.status.resolved":"Resolved","admin.support.status.closed":"Closed","admin.support.your_reply":"Your reply","admin.user_edit.visibility_requirements.title":"Profile is not yet visible in Offers","admin.user_edit.visibility_requirements.hint":"Visibility requirements:","admin.user_edit.visibility_requirements.bio":"Fill in bio","admin.user_edit.visibility_requirements.published_card":"Publish at least one card","admin.user_edit.visibility_requirements.categories":"Add a category to a published card","admin.user_edit.visibility_requirements.locations":"Add a location to a published card","auto_response.desc":"Automatically respond to matching tasks","auto_response.budget_range":"Task budget","auto_response.message_placeholder":"Hello! I can help with this task...","profile.background.title":"Profile header background","profile.background.hint":"Shown in the public profile header on web and mobile app.","profile.photo.uploading":"Uploading...","profile.balance.history":"Operation history","profile.balance.history.last":"Latest operations","profile.balance.history.empty":"No operations yet","profile.balance.history.balance_after":"Balance after","profile.balance.history.kind.topup":"Balance top-up","profile.balance.history.kind.plan_purchase":"Plan charge","profile.balance.history.kind.admin_topup":"Admin top-up","profile.balance.history.kind.admin_adjustment":"Admin adjustment","profile.plan_history.title":"Plan history","profile.plan_history.empty":"Plan change history is empty","profile.plan_history.expires":"Until","profile.plan_history.days":"days","profile.plan_history.event.activated":"Activated","profile.plan_history.event.renewed":"Renewed","profile.plan_history.event.downgraded":"Downgraded","profile.plan_history.event.referral_reward":"Referral reward","profile.plan_history.event.admin_change":"Changed by admin","profile.plan_history.event.expired":"Expired","profile.show_contact_desc":"Lets clients contact you directly","profile.site.visible.price_list":"Price list","site.pricelist":"Price list","status.plan_required":"Status is unavailable on your current plan","status.admin_not_applicable":"User status is not applicable to admin accounts"},ru:{"footer.slogan":"Ваша задача — наша забота! Решаем любые вопросы быстро и удобно.","footer.links":"Ссылки","footer.socials":"Мы в соцсетях","nav.home":"Главная","nav.tasks":"Задачи","nav.post":"+ Опубликовать","nav.dashboard":"Мои задачи","nav.chat":"Сообщения","nav.notifications":"Уведомления","nav.profile":"Профиль","nav.admin":"Админка","nav.specialists":"Предложения","nav.new_task":"Новая задача","nav.login":"Войти","nav.register":"Регистрация","nav.logout":"Выйти","hero.title":"Каждый человек может чем-то помочь","hero.subtitle":"Найди помощь, предложи свои навыки или зарабатывай, помогая другим","hero.cta.post":"Найти помощь","hero.cta.browse":"Предложить помощь","hero.cta.specialists":"Найти работу","hero.search.placeholder":"Что нужно? напр. электрик, уборка...","hero.specialist.title":"Найдите заказы рядом с вами","hero.specialist.subtitle":"Откройте заказы в своих категориях и отправьте предложение","hero.specialist.cta":"Найти заказы","hero.specialist.search.placeholder":"Поиск заказов... напр. электрика, уборка","section.categories.specialist":"Найдите заказы по категории","section.cities.specialist":"Заказы по городу","how.specialist.step1.title":"Создайте карточку специалиста","how.specialist.step1.desc":"Укажите категории, навыки и районы — система найдёт подходящие заказы автоматически","how.specialist.step2.title":"Найдите подходящие заказы","how.specialist.step2.desc":"Просматривайте заказы в своих категориях и начните работу сразу","how.specialist.step3.title":"Отправьте предложение и зарабатывайте","how.specialist.step3.desc":"Подайте предложение с ценой и сроками, общайтесь с клиентами и выполняйте заказы","stats.specialists":"предложений","stats.tasks":"задач","stats.categories":"категорий","stats.free":"бесплатная регистрация","promo.title":"Получи Pro бесплатно — только до конца года","promo.subtitle":"Зарегистрируйся сейчас и пользуйся тарифом Pro без оплаты. Акция заканчивается 31 декабря.","promo.cta":"Зарегистрироваться","promo.days":"дней","promo.hours":"часов","promo.minutes":"минут","promo.seconds":"сек.","section.categories":"Создай задачу в любой категории","section.how":"Как это работает","section.recent":"Последние задачи","section.all":"Смотреть все →","section.more":"ещё","section.cities":"Города и районы","section.community":"Общественный проект для всех","community.subtitle":"CanHelp — не просто маркетплейс, это сообщество взаимопомощи. Любой, у кого есть знания или навык, может найти клиента. Любой, у кого есть задача, может найти специалиста.","community.point1.title":"Умеете что-то делать?","community.point1.desc":"Ремонт, репетиторство, дизайн, переводы, уход — каждый навык имеет ценность. Создайте профиль и находите клиентов рядом с вами.","community.point2.title":"Нужна помощь?","community.point2.desc":"Опубликуйте задачу за минуту и получайте предложения от проверенных специалистов в вашем городе.","community.point3.title":"Помогите проекту расти","community.point3.desc":"CanHelp развивается благодаря сообществам. Поделитесь ссылкой с друзьями и знакомыми — вместе мы строим что-то полезное для всех.","community.share":"Поделиться с друзьями","community.share.copied":"Ссылка скопирована!","section.referral":"Реферальная программа","referral.home.subtitle":"Поделитесь ссылкой — каждый новый пользователь, зарегистрировавшийся по ней, принесёт вам награду.","referral.home.step1.title":"Зарегистрируйтесь и получите ссылку","referral.home.step1.desc":"Создайте аккаунт и найдите свою уникальную реферальную ссылку в профиле.","referral.home.step2.title":"Поделитесь с друзьями","referral.home.step2.desc":"Отправьте ссылку друзьям, знакомым или опубликуйте в социальных сетях.","referral.home.step3.title":"Получайте награды","referral.home.step3.desc":"Как только друг подтвердит email, вы автоматически получите свою награду.","referral.home.cta":"Получить ссылку","referral.home.badge":"Реферальная программа","section.faq":"Частые вопросы","faq.q1":"Как работает CanHelp?","faq.a1":"Опубликуйте задачу, получите предложения от специалистов, выберите лучшего и начните сотрудничество. Это быстро, просто и бесплатно для клиентов.","faq.q2":"Сколько стоит использование платформы?","faq.a2":"Регистрация и публикация задач полностью бесплатны для клиентов. Специалисты имеют доступ к бесплатному плану, а также к премиум-опциям.","faq.q3":"Как стать специалистом?","faq.a3":"Зарегистрируйтесь, перейдите в \xabСтать специалистом\xbb, заполните профиль навыками и категориями и начните получать задачи.","faq.q4":"Как выбрать подходящего специалиста?","faq.a4":"Оцените отзывы, опыт, навыки и портфолио каждого специалиста. Общайтесь через чат платформы и уточняйте детали до принятия решения.","faq.q5":"Что если я не доволен результатом?","faq.a5":"Вы можете оставить отзыв о специалисте и поставить оценку от 1 до 5 звёзд. Отзывы помогают другим пользователям выбирать проверенных профессионалов.","faq.q6":"Можно ли связаться со специалистом до принятия предложения?","faq.a6":"Да. Как только вы получили предложение, можно открыть чат со специалистом, задать вопросы и уточнить все детали до принятия решения.","faq.q7":"Сколько времени ждать предложений?","faq.a7":"Как правило, в течение нескольких часов. Специалисты получают уведомление о новых задачах и могут быстро ответить.","faq.q8":"Можно ли разместить задачу в любом городе Греции?","faq.a8":"Да! CanHelp охватывает всю Грецию — Афины, Фессалоники, Патры и другие города.","faq.q9":"Какие виды задач есть на CanHelp?","faq.a9":"Ремонт, уборка, электрики, репетиторство, дизайн, IT, переезды, красота и многое другое. Категории постоянно расширяются.","faq.q10":"Есть ли мобильное приложение?","faq.a10":"Да! CanHelp доступно для Android и iOS. Скачайте приложение и управляйте всем со своего телефона.","how.step1.title":"Опубликуй задачу","how.step1.desc":"Опиши что нужно и установи бюджет","how.step2.title":"Получи предложения","how.step2.desc":"Специалисты пришлют предложения с ценой и сроками","how.step3.title":"Выбери и начни","how.step3.desc":"Выбери лучшего профессионала и начни сотрудничество","tasks.title":"задач","tasks.filters":"Фильтры","tasks.search":"Поиск","tasks.search.placeholder":"Название или ключевое слово...","tasks.search.btn":"Поиск","tasks.publish":"Опубликовать","tasks.category.all":"Все","tasks.category.all_in":"Все в","tasks.category.label":"Категория","tasks.location.label":"Город","tasks.location.placeholder":"напр. Афины","tasks.empty":"Задачи не найдены","tasks.empty.cta":"Опубликуй первую","task.status.open":"Открыта","task.status.in_progress":"В работе","task.status.completed":"Завершена","task.status.cancelled":"Отменена","task.status.draft":"Черновик","task.budget":"Бюджет","task.location":"Местоположение","task.deadline":"Дата начала","task.expires_at":"Активно до","task.created_at":"Создано","task.customer":"Заказчик","task.offer.btn":"Отправить предложение","task.invite.banner_title":"Вас пригласили на это задание","task.invite.banner_hint":"Заказчик лично пригласил вас","task.invite.accept":"Отправить предложение","task.invite.decline":"Отказаться","offer.accept":"Принять","offer.decline":"Отклонить","task.complete":"Завершить задачу","task.complete.confirm":"Отметить задачу как выполненную?","task.edit":"Редактировать","task.status_label":"Статус","task.yours":"Ваша задача","task.offer.yours":"Ваше предложение","review.leave":"Оставить отзыв","review.rating":"Оценка","review.comment":"Комментарий","review.comment.placeholder":"Расскажите о своём опыте...","review.submit":"Отправить отзыв","review.submitting":"Отправка...","review.done":"Отзыв отправлен!","profile.reviews":"Отзывы","profile.no_reviews":"Отзывов пока нет","profile.rating":"Рейтинг","profile.skills.label":"Навыки","profile.member_since":"Участник с","task.offers":"Предложения","task.offers.none":"Предложений пока нет","create.title":"Опубликовать задачу","create.field.title":"Название","create.field.description":"Описание","create.field.category":"Категория","create.field.category.select":"Выберите...","create.field.location":"Местоположение","create.field.location.any":"Где угодно","create.field.location.all":"Весь город","create.field.budget":"Бюджет (€)","create.field.deadline":"Дата начала","create.field.expires_at":"Объявление активно","create.field.expires_at.days":"{n} дней","create.field.budget_negotiable":"Цена обсуждается","create.field.time_slot":"Время выполнения","create.field.time_slot.any":"В любое время","create.field.time_slot.morning":"Утром (08:00–13:00)","create.field.time_slot.afternoon":"Днём (13:00–18:00)","create.field.time_slot.evening":"Вечером (18:00–22:00)","create.field.time_slot.weekend":"Выходной","create.field.address":"Адрес (необязательно)","create.field.address.district":"Квартал","create.field.address.street":"Улица","create.field.address.house":"Дом","create.field.confidential":"Конфиденциальная заметка","create.field.confidential.placeholder":"Детали, видные только назначенному специалисту...","create.field.confidential.hint":"Не отображается публично","create.field.photos":"Фотографии","create.field.photos.add":"Добавить фото","create.field.photos.uploading":"Загрузка...","task.budget_negotiable":"Цена обсуждается","task.time_slot":"Время","task.confidential":"Конфид. заметка","create.field.title.placeholder":"напр. Уборка квартиры 80кв","create.field.description.placeholder":"Подробно опишите что нужно...","create.field.location.placeholder":"напр. Афины, Колонаки","create.field.budget.placeholder":"напр. 100","create.submit":"Опубликовать задачу","create.submitting":"Публикация...","login.title":"Добро пожаловать","login.subtitle":"Вход в CanHelp","login.email":"Email","login.password":"Пароль","login.submit":"Войти","login.submitting":"Вход...","login.error":"Неверный email или пароль","login.unverified.title":"Подтвердите ваш email","login.unverified.desc":"Мы отправили ссылку для подтверждения на ваш email. Проверьте входящие (или спам) и перейдите по ссылке.","login.unverified.resend":"Отправить письмо повторно","login.unverified.sending":"Отправка...","login.unverified.sent":"✓ Отправлено — проверьте входящие","profile.email.verified":"Email подтверждён","profile.email.not_verified":"Email не подтверждён","login.no_account":"Нет аккаунта?","login.register_link":"Зарегистрироваться","login.forgot_password":"Забыл пароль?","login.or_continue_with":"или продолжите через","login.continue_google":"Войти через Google","forgot.title":"Забыл пароль","forgot.subtitle":"Введите email для получения ссылки восстановления","forgot.email":"Email","forgot.submit":"Отправить ссылку","forgot.submitting":"Отправка...","forgot.sent.title":"Проверьте входящие","forgot.sent.desc":"Если аккаунт с таким email существует, мы отправим ссылку для сброса пароля.","forgot.back_to_login":"Вернуться ко входу","forgot.error":"Не удалось отправить ссылку. Проверьте адрес и попробуйте снова.","forgot.error.not_found":"Аккаунт с таким email не найден.","forgot.error.send_failed":"Ошибка отправки письма. Попробуйте позже.","reset.title":"Новый пароль","reset.subtitle":"Введите новый пароль","reset.password":"Новый пароль","reset.confirm":"Подтвердите пароль","reset.submit":"Изменить пароль","reset.submitting":"Сохранение...","reset.success":"Пароль успешно изменён. Перенаправление ко входу...","reset.back_to_login":"Вернуться ко входу","reset.error.mismatch":"Пароли не совпадают","reset.error.invalid":"Недействительная или устаревшая ссылка. Запросите новую.","register.title":"Регистрация","register.subtitle":"Создать аккаунт в CanHelp","register.first_name":"Имя","register.last_name":"Фамилия","register.email":"Email","register.password":"Пароль (мин. 8 символов)","register.role":"Роль","register.role.customer":"Пользователь","register.role.customer.desc":"Публикую задачи","register.role.specialist":"Специалист","register.role.specialist.desc":"Беру задачи","register.submit":"Создать аккаунт","register.submitting":"Регистрация...","register.has_account":"Уже есть аккаунт?","register.login_link":"Войти","register.continue_google":"Зарегистрироваться через Google","register.check_email.title":"Проверьте почту","register.check_email.desc":"Мы отправили ссылку для подтверждения на ваш email. Проверьте входящие (или спам) и перейдите по ссылке.","register.check_email.login":"Вернуться к входу","register.captcha_failed":"Проверка CAPTCHA не пройдена. Пройдите проверку безопасности и попробуйте снова.","dashboard.title":"Панель управления","dashboard.new_task":"+ Новая задача","dashboard.onboarding.title":"Добро пожаловать в CanHelp \uD83D\uDC4B","dashboard.onboarding.subtitle":"Выберите, с чего хотите начать.","dashboard.onboarding.helper.title":"Предложите свою помощь","dashboard.onboarding.helper.desc":"Заполните анкету — навыки, категории и города. Это займёт пару минут, и вы начнёте получать заказы.","dashboard.onboarding.helper.cta":"Заполнить анкету","dashboard.onboarding.requester.title":"Нужна помощь?","dashboard.onboarding.requester.desc":"Опубликуйте задачу — помощники пришлют вам свои предложения.","dashboard.onboarding.requester.cta":"Опубликовать задачу","dashboard.my_tasks":"Мои задачи","dashboard.my_offers":"Мои предложения","dashboard.invitations":"Приглашения на задания","dashboard.offers_count":"предл.","dashboard.declined_count":"откл.","dashboard.completed_tasks":"Завершённые задачи","dashboard.completed_offers":"Завершённые предложения","dashboard.review_pending":"Оценка ещё не оставлена","tasks.new.top_specialists":"Топ специалисты","tasks.new.select_category":"Выберите категорию, чтобы увидеть специалистов","tasks.new.invite":"Предложить работу","tasks.new.invited":"Выбран ✓","reviews.count":"отзывов","filter.location":"Локация","filter.language":"Языки","filter.language.any":"Любой язык","filter.category.all":"Все категории","user.categories":"Категории","user.work_area":"Район работы","user.specialist_cards":"Карточки услуг","card.skills":"Навыки","card.categories":"Категории","card.geography":"Район работы","card.portfolio":"Галерея работ","card.close":"Закрыть","dashboard.tasks.empty":"Вы не публиковали задачи","dashboard.tasks.empty.cta":"Опубликуйте первую","dashboard.tasks.add_new":"Добавить новую задачу","dashboard.offers.empty":"Вы не отправляли предложений","dashboard.offers.empty.cta":"Найти задачи","dashboard.customer.specialists_title":"Ищете исполнителя?","dashboard.customer.specialists_hint":"Просматривайте профили специалистов, читайте отзывы и приглашайте их на свои задачи","dashboard.customer.specialists_cta":"Найти исполнителя","dashboard.customer.how_title":"Как это работает","dashboard.customer.step1":"Создайте задачу с описанием и бюджетом","dashboard.customer.step2":"Специалисты пришлют предложения с ценой и сроками","dashboard.customer.step3":"Выберите подходящего и начните работу","notif.title":"Уведомления","notif.mark_all":"Отметить все как прочитанные","notif.empty":"Нет уведомлений","notif.type.generic":"Уведомление","notif.type.new_offer":"Новое предложение","notif.type.offer_accepted":"Ваше предложение принято","notif.type.offer_declined":"Ваше предложение отклонено","notif.type.task_completed":"Задание выполнено","notif.type.task_cancelled":"Задание отменено","notif.type.new_message":"Новое сообщение","notif.type.new_review":"Новый отзыв","notif.type.task_invite":"Приглашение на задание","notif.type.referral_reward":"Реферальная награда","notif.type.specialist_card_submitted":"Карточка отправлена на проверку","notif.type.specialist_card_approved":"Карточка одобрена","notif.type.specialist_card_rejected":"Карточка отклонена","notif.body.new_offer":"Новое предложение на \xab{title}\xbb","notif.body.offer_accepted":"Ваше предложение на \xab{title}\xbb принято","notif.body.offer_declined":"Ваше предложение на \xab{title}\xbb отклонено","notif.body.task_invite":"Вас приглашают на \xab{title}\xbb","notif.body.new_review":"Вы получили оценку {rating}★","notif.body.referral_reward":"На ваш аккаунт добавлено {days} дней доступа к плану \xab{plan}\xbb!","notif.body.specialist_card_submitted":"Карточка \xab{title}\xbb отправлена на проверку","notif.body.specialist_card_approved":"Карточка \xab{title}\xbb одобрена и опубликована","notif.body.specialist_card_rejected":"Карточка \xab{title}\xbb не была одобрена. Исправьте её и отправьте снова.","offer.status.pending":"Ожидает","offer.status.accepted":"Принято","offer.status.declined":"Отклонено","offer.status.withdrawn":"Отозвано","offer.status.other_accepted":"Выбран другой исполнитель","common.loading":"Загрузка...","common.error":"Ошибка","common.save":"Сохранить","common.saving":"Сохранение...","common.cancel":"Отмена","common.add":"Добавить","common.close":"Закрыть","common.edit":"Редактировать","common.delete":"Удалить","common.from":"от","common.currency":"€","common.greece":"Греция","chat.connected":"Подключено","chat.disconnected":"Отключено","chat.no_rooms":"Переписок пока нет","chat.task_fallback":"Задача","chat.select":"Выберите переписку","chat.no_messages":"Сообщений пока нет","chat.placeholder":"Напишите сообщение... (Enter для отправки)","chat.conversation_fallback":"Переписка","chat.direct_chat":"Личный чат","chat.linked_task":"Прикреплённый заказ","chat.write_btn":"Написать","chat.just_now":"только что","chat.min_ago":"м","chat.write_specialist":"Написать специалисту","chat.write_customer":"Написать заказчику","chat.notif_settings":"Настройки уведомлений","chat.notif_messages":"Уведомления о новых сообщениях","chat.toast_title":"Новое сообщение","chat.toast_open":"Открыть чат","offer.price":"Цена","offer.price.placeholder":"напр. 80","offer.customer_budget":"Бюджет заказчика","offer.message":"Сообщение","offer.optional":"необязательно","offer.message.placeholder":"Представьтесь, расскажите об опыте и почему вы лучший выбор...","offer.submitting":"Отправка...","profile.photo":"Фото профиля","profile.photo.change":"Изменить фото","profile.photo.hint":"JPEG, PNG, WebP \xb7 до 5MB","profile.basic_info":"Основная информация","profile.phone":"Телефон","profile.phone.placeholder":"+30 6901234567","profile.bio":"Краткое описание","profile.bio.placeholder":"Расскажите немного о себе...","profile.language":"Язык","profile.language.hint":"Язык интерфейса и email-уведомлений","profile.languages":"Языки общения","profile.languages.hint":"Выберите все языки, на которых вы общаетесь","profile.skills":"Навыки","profile.skills.subtitle":"Добавьте услуги, которые вы предлагаете","profile.skills.placeholder":"напр. Уборка, IT, Репетиторство...","profile.role":"Роль аккаунта","profile.role.specialist":"\uD83D\uDD27 Помощник","profile.role.admin":"\uD83D\uDC51 Admin","profile.role.customer":"\uD83D\uDC64 Пользователь","profile.role.user":"\uD83D\uDC64 Пользователь","profile.role.change":"Для смены роли обратитесь в службу поддержки.","profile.become_specialist":"Предложить помощь","profile.become_specialist.desc":"Создай профиль помощника, предложи свои навыки и начни получать задачи.","become_specialist.hero.title":"Предложи свои навыки и начни зарабатывать","become_specialist.hero.subtitle":"Создай профиль помощника и получай запросы от людей, которым нужна помощь","become_specialist.how.title":"Как это работает","become_specialist.step1.title":"Создай портфолио специалиста","become_specialist.step1.desc":"Укажи категории, навыки и зону покрытия — система автоматически подберёт подходящие заказы","become_specialist.step2.title":"Ищи заказы","become_specialist.step2.desc":"Просматривай задачи по своим категориям в разделе \xabПоиск заказов\xbb","become_specialist.step3.title":"Откликайся и зарабатывай","become_specialist.step3.desc":"Отправляй предложения с ценой и сроками, общайся с клиентами и выполняй заказы","become_specialist.benefits.title":"Преимущества профиля специалиста","become_specialist.benefit1":"Поиск заказов по вашим категориям и локации","become_specialist.benefit2":"Публичный профиль с отзывами клиентов","become_specialist.benefit3":"Расписание доступности, видимое клиентам","become_specialist.benefit4":"Добавление в избранное клиентами","become_specialist.cta":"Подробнее","become_specialist.free_badge":"Бесплатная регистрация","profile.tab.notifications":"Уведомления","profile.tab.reviews":"Отзывы","profile.tab.referral":"Рефералы","profile.tab.auto_response":"Авто-ответ","profile.tab.site":"Сайт","profile.site.title":"Персональная страница","profile.site.url_label":"Личный сайт","profile.site.copy":"Копировать","profile.site.copied":"Скопировано","profile.site.visible_title":"Что отображается на вашей странице","profile.site.visible.name":"Имя и фото","profile.site.visible.bio":"Биография","profile.site.visible.rating":"Рейтинг и отзывы","profile.site.visible.portfolio":"Портфолио / Карточки","profile.site.visible.contacts":"Контактные данные","profile.site.visible.full_last_name":"Фамилия полностью","profile.site.visible.services":"Карточки услуг","profile.site.visible.reviews":"Раздел с отзывами","profile.site.visible.status":"Статус \xabГотов помочь\xbb","profile.site.theme":"Тема оформления","profile.site.theme.dark":"Тёмная","profile.site.theme.light":"Светлая","profile.site.slug_taken":"Этот адрес уже занят","profile.site.stats.title":"Аналитика сайта","profile.site.stats.days":"последние 30 дней","profile.site.stats.views":"Просмотры","profile.site.stats.unique":"Уникальные посетители","profile.site.stats.messages":"Сообщения","profile.site.stats.total_views":"Просмотры","profile.site.stats.total_unique":"Уник. посетители","profile.site.stats.total_messages":"Сообщения","profile.site.stats.empty":"Данных пока нет","profile.site.stats.loading":"Загрузка аналитики...","profile.site.stats.no_slug":"Укажите адрес сайта, чтобы видеть статистику","profile.site.edit_bio_hint":"Биография и фото настраиваются во вкладке \xabОсновное\xbb.","profile.site.seo.title":"SEO — мета-данные сайта","profile.site.seo.hint":"Отображается в поисковиках. При сохранении автоматически переводится на все языки.","profile.site.seo.site_title":"Заголовок страницы","profile.site.seo.site_title_placeholder":"Иван Иванов — Электрик в Афинах","profile.site.seo.site_desc":"Мета-описание","profile.site.seo.site_desc_placeholder":"Краткое описание для поисковиков...","status.title":"Статус","status.can_help_now_hint":"Ваша карточка показывается выше в поиске","status.need_help_hint":"Специалисты могут предложить вам помощь","profile.referral.title":"Партнёрская программа","profile.referral.desc":"Поделитесь ссылкой и получайте награду за каждого привлечённого пользователя.","profile.referral.link_label":"Ваша реферальная ссылка","profile.referral.copy":"Копировать","profile.referral.copied":"Скопировано!","profile.referral.invited_count":"успешных приглашений","profile.referral.no_code":"Реферальный код недоступен.","notifications.title":"Настройки уведомлений","notifications.email.new_tasks":"Email о новых заказах","notifications.email.new_tasks.desc":"Получать email, когда в ваших категориях публикуется новый заказ","notifications.messages.desc":"Получать уведомление при новом входящем сообщении","notifications.saved":"Настройки сохранены","notifications.plan_required":"Недоступно в вашем тарифе","profile.tab.info":"Основное","profile.tab.finance":"Финансы","profile.tab.skills":"Навыки","profile.tab.categories":"Категории","profile.tab.geography":"География","profile.specialist.categories":"Категории работ","profile.specialist.categories.desc":"Выберите категории, в которых вы работаете","profile.specialist.geography":"Города покрытия","profile.specialist.geography.desc":"Выберите города / районы, где вы работаете","profile.saving":"Сохранение...","profile.upload.error":"Ошибка загрузки фото","profile.saved":"Сохранено","profile.tab.cards":"Предложения","profile.cards.count":"Предложения","profile.cards.add":"Добавить предложение","profile.cards.new_title":"Название нового предложения","profile.cards.placeholder":"Например: Сантехника","profile.cards.create":"Создать","profile.cards.cancel":"Отмена","profile.cards.empty":"У вас нет предложений","profile.cards.empty_hint":"Создайте первую карточку, чтобы показать услуги клиентам.","profile.cards.create_first":"Создать первое предложение","profile.cards.delete_confirm":"Удалить предложение?","profile.background.change":"Изменить фон","profile.background.remove":"Удалить фон","profile.listing_requirements.published_card":"Опубликуйте хотя бы одну карточку","profile.listing_requirements.title":"Ваш профиль пока не показывается в разделе \xabПредложения\xbb","profile.listing_requirements.hint":"Чтобы карточка отображалась, выполните условия:","profile.listing_requirements.bio":"Добавьте краткую информацию о себе в \xabОсновное\xbb","profile.listing_requirements.categories":"Укажите хотя бы одну категорию в активной карточке","profile.listing_requirements.locations":"Укажите хотя бы одну локацию в активной карточке","profile.listing_requirements.card_inactive":"Сделайте карточку активной","profile.listing_requirements.review_pending":"Карточка на рассмотрении","profile.card.visibility_issue":"Карточка не отображается в разделе \xabПредложения\xbb","profile.card.tab.main":"Основное","profile.card.tab.skills":"Навыки","profile.card.tab.categories":"Категории","profile.card.tab.geography":"География","profile.card.tab.portfolio":"Галерея","profile.card.tab.pricelist":"Прайс-лист","profile.card.pricelist.empty":"Группы прайс-листа ещё не добавлены.","profile.card.pricelist.add_group":"Добавить группу","profile.card.pricelist.group_title":"Название группы","profile.card.pricelist.add_item":"Добавить позицию","profile.card.pricelist.item_name":"Услуга / работа","profile.card.pricelist.item_desc":"Описание (необязательно)","profile.card.pricelist.item_price":"Цена","profile.card.pricelist.item_unit":"Единица (например /час)","profile.card.pricelist.save_group":"Сохранить группу","profile.card.pricelist.save_item":"Сохранить","profile.card.pricelist.delete_group":"Удалить группу","profile.card.pricelist.delete_item":"Удалить","profile.card.active":"Активна","profile.card.review_pending":"На рассмотрении","profile.card.review_pending_hint":"Ваша карточка сейчас проверяется администрацией.","profile.card.review_submitted":"Карточка отправлена на проверку","profile.card.review_approved":"Карточка одобрена","profile.card.review_approved_hint":"Ваша карточка теперь отображается в предложениях.","profile.card.review_rejected":"Карточка отклонена","profile.card.review_rejected_hint":"Карточка не была одобрена. Исправьте её и отправьте снова.","profile.card.submit_review":"Отправить на рассмотрение","profile.card.withdraw_review":"Отозвать заявку","profile.card.unpublish":"Снять с публикации","profile.card.save":"Сохранить","profile.card.saved":"Сохранено","profile.card.delete":"Удалить","profile.card.skill.add":"Добавить навык","profile.card.photo.add":"Добавить фото","profile.card.photo.uploading":"Загрузка...","profile.card.photo.empty":"Нет фотографий","profile.card.item.title":"Заголовок","profile.card.item.desc":"Описание","profile.card.item.save":"Сохранить","profile.card.item.cancel":"Отмена","profile.card.item.edit":"Описание работы","profile.card.description":"Описание карточки","profile.card.desc_auto_translate":"При сохранении будет автоматически переведено на другие языки","profile.card.desc_translated":"Есть переводы:","profile.upgrade.cards_limit":"Лимит портфолио исчерпан","profile.upgrade.plan":"Текущий тариф:","profile.upgrade.contact":"Обратитесь к администратору для смены тарифа","profile.upgrade.ok":"Понятно","profile.plan.title":"Тарифный план","profile.balance":"Баланс","profile.balance.topup":"Пополнить баланс","profile.balance.topup.title":"Пополнить баланс","profile.balance.topup.amount":"Сумма (в EUR)","profile.balance.topup.hint":"Выберите сумму или введите вручную","profile.balance.topup.submit":"Перейти к оплате","profile.balance.topup.loading":"Перенаправление...","profile.balance.topup.error":"Ошибка инициализации платежа. Попробуйте снова.","payment.success.title":"Оплата прошла успешно!","payment.success.desc":"Ваш баланс обновлён.","payment.cancelled.title":"Оплата отменена","payment.cancelled.desc":"Оплата была отменена. Средства не списаны.","payment.pending.title":"Обрабатывается...","payment.pending.desc":"Ваш платёж в обработке.","payment.back_to_profile":"Вернуться в профиль","profile.plan.basic":"Базовый (бесплатный)","profile.plan.contact_upgrade":"Обратитесь к администратору для подключения тарифа","profile.plan.cards_up_to":"Портфолио: до","profile.plan.cards_unlimited":"Портфолио: безлимитно","profile.plan.tasks_up_to":"Задач: до","profile.plan.offers_up_to":"Откликов: до","profile.plan.valid_until":"Действителен до","profile.plan.no_expiry":"Бессрочно","create.error":"Ошибка при публикации","tasks.category.general":"Общее","tasks.budget.range":"Диапазон:","tasks.budget.from":"от","tasks.budget.to":"до","tasks.filter.reset":"Сбросить фильтры","tasks.load_more":"Загрузить ещё","tasks.showing":"Результатов:","tasks.field.budget":"Бюджет, €","admin.title":"Панель администратора","admin.tab.stats":"Статистика","admin.tab.users":"Пользователи","admin.tab.tasks":"Задачи","admin.tab.reports":"Жалобы","admin.tab.moderation":"Модерация","admin.stats.users":"Пользователи","admin.stats.tasks":"Задачи","admin.stats.offers":"Предложения","admin.stats.reviews":"Отзывы","admin.tasks.by_status":"Задачи по статусу","admin.col.user":"Пользователь","admin.col.email":"Email","admin.col.role":"Роль","admin.col.registered":"Регистрация","admin.col.status":"Статус","admin.col.title":"Название","admin.col.budget":"Бюджет","admin.col.created":"Создано","admin.users.active":"Активен","admin.users.inactive":"Неактивен","admin.users.deactivate":"Деактивировать","admin.users.activate":"Активировать","admin.tasks.cancel":"Отменить","admin.reports.none":"Жалоб нет","admin.moderation.none":"Нет предложений для проверки","admin.moderation.pending":"В ожидании","admin.moderation.active":"Активно","admin.moderation.approve":"Одобрить","admin.moderation.block":"Заблокировать","admin.moderation.pending_title":"Предложения на одобрение","admin.moderation.active_title":"Активные предложения","admin.moderation.pending_count":"В ожидании","admin.moderation.active_count":"Активные","admin.moderation.pending_hint":"Новые предложения, ожидающие проверки","admin.moderation.active_hint":"Активные предложения, которые можно заблокировать","admin.moderation.pending_empty":"Новых предложений для одобрения нет","admin.moderation.active_empty":"Активных предложений не найдено","admin.reports.reviewed":"Рассмотрено","admin.reports.dismiss":"Отклонить","admin.pagination.total":"Всего","admin.users.role.change":"Изменить роль","admin.users.search.placeholder":"Поиск по имени или email...","admin.tasks.delete":"Удалить","admin.tasks.delete.confirm":"Удалить эту задачу навсегда?","admin.tasks.search.placeholder":"Поиск по названию...","admin.col.customer":"Заказчик","admin.col.reporter":"Жалобщик","admin.col.target":"Цель","admin.filter.all_roles":"Все роли","admin.filter.all_statuses":"Все статусы","admin.reports.target.task":"Задача","admin.reports.target.user":"Пользователь","admin.tab.categories":"Категории","admin.tab.locations":"Города и районы","admin.tab.logs":"Логи","admin.tab.plans":"Тарифы","admin.tab.settings":"Настройки","admin.logs.subtab.ai":"AI логи","admin.logs.subtab.activity":"Активность","admin.logs.subtab.mail":"Mail","admin.logs.subtab.notifications":"Уведомления","admin.notif_logs.type":"Тип","admin.notif_logs.title":"Заголовок","admin.notif_logs.read":"Прочитано","admin.notif_logs.empty":"Логи уведомлений пусты","admin.stats.notif_chart_title":"Уведомления по дням","admin.stats.notif_label":"Уведомления","admin.stats.mail_chart_title":"Email по дням","admin.stats.mail_label":"Emails","admin.filter.all":"Все","admin.stats.specialists":"Помощники","admin.col.plan":"Тариф","admin.back_home":"На главную","admin.plans.title":"Тарифные пакеты","admin.plans.add":"+ Добавить тариф","admin.plans.empty":"Тарифы не созданы","admin.plans.form.new":"Новый тариф","admin.plans.form.edit":"Редактировать тариф","admin.plans.form.name":"Название","admin.plans.form.price":"Цена (EUR)","admin.plans.form.old_price":"Старая цена (EUR, необязательно)","admin.plans.form.max_offers":"Макс. откликов (пусто = без лимита)","admin.plans.form.max_cards":"Макс. предложений (пусто = без лимита)","admin.plans.form.duration_days":"Срок (дней, пусто = без истечения)","admin.plans.form.description":"Описание","admin.plans.form.features":"Возможности (по одной на строку)","admin.plans.form.notify":"Уведомления о новых заказах","admin.plans.form.default":"По умолчанию","admin.plans.form.active":"Активен","admin.plans.form.order":"Порядок","admin.plans.form.role":"Роль","admin.plans.form.tier":"Уровень","admin.plans.form.role.customer":"Заказчик","admin.plans.form.role.specialist":"Помощник","admin.plans.form.tier.free":"Бесплатный","admin.plans.form.tier.pro":"Pro","admin.plans.form.tier.ultimate":"Ultimate","admin.plans.form.section.limits":"Лимиты (пусто = без ограничений)","admin.plans.form.max_messages_day":"Макс. сообщений/день","admin.plans.form.max_orders_day":"Макс. заказов/день","admin.plans.form.max_skills":"Макс. навыков","admin.plans.form.max_profiles":"Макс. профилей","admin.plans.form.max_portfolio":"Макс. элементов портфолио","admin.plans.form.section.boost":"Множители & Буст","admin.plans.form.search_boost":"Буст в поиске","admin.plans.form.offers_multiplier":"Множитель откликов","admin.plans.form.section.contact":"Права контактов","admin.plans.form.can_contact_free":"Контакт с бесплатными пользователями","admin.plans.form.can_contact_pro":"Контакт с Pro пользователями","admin.plans.form.can_contact_all":"Контакт со всеми","admin.plans.form.can_show_contact":"Показывать контакты","admin.plans.form.can_view_phone":"Просмотр телефона","admin.plans.form.section.features":"Возможности","admin.plans.form.upload_video":"Загрузка видео","admin.plans.form.favorites":"Избранное","admin.plans.form.google_calendar":"Google Calendar","admin.plans.form.verified_badge":"Знак верификации","admin.plans.form.highlighted_reviews":"Выделенные отзывы","admin.plans.form.personal_site":"Личный сайт","admin.plans.form.can_help_now":"Статус \xabМогу помочь\xbb","admin.plans.form.need_help":"Статус \xabНужна помощь\xbb","admin.plans.form.auto_response":"Автоответ","admin.plans.form.auto_match":"Автоподбор","admin.plans.form.price_list":"Прайс-лист","admin.plans.form.instant_dispatch_free":"Мгновенная рассылка (бесплатно)","admin.plans.form.instant_dispatch_pro":"Мгновенная рассылка (Pro)","admin.plans.badge.default":"По умолчанию","admin.plans.badge.inactive":"Неактивен","admin.plans.make_default":"Сделать по умолчанию","admin.plans.tasks":"Задач","admin.plans.offers":"Откликов","admin.plans.cards":"Предложения","admin.plans.notify_tasks":"Уведомления о заказах","admin.plans.delete.confirm":"Удалить тариф","admin.activity.title":"Журнал активности","admin.activity.event":"Событие","admin.activity.all_events":"Все события","admin.activity.from":"От","admin.activity.to":"До","admin.activity.reset":"Сбросить","admin.activity.total":"Всего","admin.activity.empty":"Нет записей","admin.mail.event":"Email событие","admin.mail.all_events":"Все email события","admin.mail.from":"От","admin.mail.to":"До","admin.mail.reset":"Сбросить","admin.mail.total":"Всего","admin.mail.empty":"Нет email логов","admin.mail.recipient":"Получатель","admin.mail.provider":"Провайдер","admin.mail.details":"Детали","admin.mail.status":"Статус","admin.mail.success":"Успешно","admin.mail.failed":"Ошибка","admin.event.email_sent":"Email отправлен","admin.event.email_failed":"Email не отправлен","admin.event.email_dev":"Email DEV fallback","admin.event.admin_email_test_sent":"Тестовый email отправлен","admin.event.admin_email_test_failed":"Тестовый email не отправлен","admin.logs.empty":"Нет записей","admin.logs.date":"Дата","admin.logs.provider":"Провайдер","admin.logs.model":"Модель","admin.logs.action":"Действие","admin.logs.langs":"Языки","admin.logs.in":"Вход","admin.logs.out":"Выход","admin.logs.total":"Итого","admin.logs.ms":"мс","admin.logs.status":"Статус","admin.stats.activity_30d":"Активность за 30 дней","admin.stats.tasks_label":"Заявки","admin.stats.users_label":"Пользователи","admin.stats.specialists_label":"Помощники","admin.stats.tokens_title":"Расход токенов (по месяцам)","admin.stats.tokens_out":"Исходящие","admin.stats.tokens_in":"Входящие","admin.stats.tokens_out_label":"Исходящие токены","admin.stats.tokens_in_label":"Входящие токены","admin.stats.cost_label":"Стоимость (USD)","admin.stats.tasks_by_status":"Заявки по статусам","admin.task_status.open":"Открытые","admin.task_status.in_progress":"В работе","admin.task_status.completed":"Завершённые","admin.task_status.cancelled":"Отменённые","admin.task_status.draft":"Черновики","admin.settings.tab.general":"Общие","admin.settings.tab.smtp":"E-Mail","admin.settings.tab.notifications":"Уведомления","admin.settings.tab.payment":"Оплата","admin.settings.tab.referral":"Реферальная","admin.settings.tab.seo":"SEO","admin.settings.tab.socials":"Соцсети","admin.settings.tab.telegram":"Telegram Bot","admin.settings.telegram.title":"Настройки Telegram Bot","admin.settings.telegram.help":"Создайте бота через @BotFather. ID чата узнайте через @userinfobot.","admin.settings.telegram.bot_token":"Bot Token","admin.settings.telegram.admin_chat_id":"Chat ID администратора","admin.settings.telegram.admin_chat_hint":"Сначала отправьте /start своему боту, затем узнайте chat ID через @userinfobot","admin.settings.telegram.channel_id":"неиспользуется","admin.settings.telegram.channels_title":"Каналы по языкам","admin.settings.telegram.channel_hint":"Username публичного канала (@канал) или числовой ID","admin.settings.telegram.notify_registrations":"Уведомлять о новых регистрациях","admin.settings.telegram.notify_registrations_hint":"Отправлять сообщение при регистрации нового пользователя","admin.settings.telegram.post_new_tasks":"Публиковать новые задания в канал","admin.settings.telegram.post_new_tasks_hint":"Автоматически публиковать новые задания в Telegram-канал","admin.settings.telegram.test":"Тест","admin.settings.telegram.verify":"Проверить токен","admin.settings.telegram.test_ok":"Соединение работает","admin.settings.telegram.test_fail":"Ошибка соединения","admin.settings.socials.title":"Ссылки на социальные сети","admin.settings.socials.hint":"Заполненные ссылки отображаются в подвале сайта","admin.settings.seo.maintenance_label":"Режим обслуживания","admin.settings.seo.maintenance_hint":"Показывать страницу обслуживания всем посетителям","admin.settings.seo.indexing_label":"Индексация поисковыми системами","admin.settings.seo.indexing_hint":"Разрешить поисковым системам индексировать сайт","admin.settings.seo.head_scripts_label":"Скрипты в (JS)","admin.settings.seo.head_scripts_hint":"Выполняется на каждой странице (Google Tag Manager, аналитика и т.д.)","admin.settings.seo.site_title_label":"Заголовок сайта","admin.settings.seo.site_description_label":"Описание сайта (meta description)","admin.settings.referral.title":"Партнёрская программа","admin.settings.referral.hint":"Награждайте пользователей, приводящих новых участников.","admin.settings.referral.enabled_label":"Включено","admin.settings.referral.enabled_hint":"Включить / отключить выдачу наград","admin.settings.referral.customer_section":"Для клиентов","admin.settings.referral.specialist_section":"Для помощников","admin.settings.referral.plan_label":"Тарифный план за реферала","admin.settings.referral.no_plan":"— без плана —","admin.settings.referral.plan_hint":"Этот план будет назначен пригласившему. Если его текущий план выше — добавятся только дни.","admin.settings.referral.days_label":"Дней награды","admin.settings.referral.days_hint":"Количество дней, добавляемых к сроку действия плана.","admin.settings.general.title":"Общие настройки","admin.settings.general.site_name":"Название сайта","admin.settings.general.site_url":"URL сайта","admin.settings.general.contact_email":"Email для связи","admin.settings.general.support_phone":"Телефон поддержки","admin.settings.smtp.title":"Настройки SMTP сервера","admin.settings.smtp.hint":"Используется для отправки email-уведомлений.","admin.settings.smtp.host":"SMTP Хост","admin.settings.smtp.port":"Порт","admin.settings.smtp.encryption":"Шифрование","admin.settings.smtp.enc.none":"Нет","admin.settings.smtp.enc.tls":"STARTTLS (порт 587)","admin.settings.smtp.enc.ssl":"SSL/TLS (порт 465)","admin.settings.smtp.username":"Имя пользователя","admin.settings.smtp.password":"Пароль / App Password","admin.settings.smtp.from_name":"Имя отправителя","admin.settings.smtp.from_email":"Email отправителя","admin.settings.smtp.test":"Отправить тестовый email","admin.settings.smtp.sending":"Отправка...","admin.settings.payment.hint":"Данные для подключения к ePay Piraeus Bank.","admin.settings.env.test":"Тест (sandbox)","admin.settings.env.prod":"Боевой режим","admin.settings.env.label":"Среда","admin.settings.merchant_id":"Merchant ID","admin.settings.api_user":"API User","admin.settings.api_password":"API Password","admin.settings.confirm_url":"Confirmation URL (webhook)","admin.settings.cancel_url":"Cancel URL","admin.settings.active":"Активен","admin.settings.saving":"Сохранение...","admin.settings.saved":"Сохранено","admin.notif.vars_hint":"Доступные переменные в шаблонах","admin.notif.tmpl.not_set":"Шаблон не настроен","admin.notif.tmpl.subject_label":"Тема письма","admin.notif.tmpl.body_label":"Текст письма (HTML)","admin.notif.tmpl.save":"Сохранить","admin.notif.tmpl.close":"Закрыть","admin.notif.tmpl.translate":"Авто-перевод на другие языки","admin.notif.tmpl.translating":"Перевод...","admin.notif.tmpl.saving":"Сохранение...","admin.notif.email_verification":"Подтверждение email адреса","admin.notif.registration_success":"Успешная регистрация","admin.notif.password_reset":"Восстановление пароля","admin.notif.new_offer":"Новое предложение","admin.notif.new_task":"Новая задача","admin.notif.offer_accepted":"Предложение принято","admin.notif.new_message":"Новое сообщение","admin.notif.offer_declined":"Отклонение предложения","admin.notif.offer_other_accepted":"Выбран другой исполнитель","admin.notif.task_updated":"Изменение задания","admin.notif.deadline_reminder":"Напоминание о дедлайне","admin.notif.task_archived":"Автоснятие задания","admin.notif.referral_reward":"Реферальная награда","admin.email_template.plan_activated":"Тарифы — активация тарифа","admin.email_template.plan_upgraded":"Тарифы — повышение тарифа","admin.email_template.plan_downgrade_scheduled":"Тарифы — запланированное понижение","admin.email_template.plan_downgrade_applied":"Тарифы — применение понижения","admin.email_template.plan_renewal_reminder":"Тарифы — напоминание о продлении","admin.email_template.plan_insufficient_funds":"Тарифы — нехватка средств","pricing.confirm.title":"Подтвердите выбор тарифа","pricing.confirm.plan":"Тариф","pricing.confirm.prorated":"Зачёт остатка","pricing.confirm.effective_price":"К оплате","pricing.confirm.your_balance":"Ваш баланс","pricing.confirm.downgrade_info":"Переход на новый тариф произойдёт автоматически после окончания текущего периода.","pricing.confirm.insufficient":"Недостаточно средств на балансе.","pricing.confirm.top_up":"Пополнить","pricing.confirm.schedule_downgrade":"Запланировать переход","pricing.confirm.pay":"Оплатить","admin.user_edit.title":"Редактирование пользователя","admin.user_edit.email":"Email","admin.user_edit.email_verified":"Email подтверждён","admin.user_edit.email_not_verified":"Email не подтверждён","admin.user_edit.verify_email_btn":"Подтвердить вручную","admin.user_edit.verify_email_done":"Email подтверждён!","admin.user_edit.id":"ID","admin.user_edit.registered":"Регистрация","admin.user_edit.last_seen":"Последний визит","admin.user_edit.lang":"Язык","admin.user_edit.first_name":"Имя","admin.user_edit.last_name":"Фамилия","admin.user_edit.phone":"Телефон","admin.user_edit.bio":"О себе","admin.user_edit.role":"Роль","admin.user_edit.plan":"Тариф","admin.user_edit.no_plan":"— Без тарифа —","admin.user_edit.active":"Активный аккаунт","admin.user_edit.published":"Опубликована","admin.user_edit.balance":"Баланс (EUR)","admin.user_edit.skills":"Навыки","admin.user_edit.tab.profile":"Профиль","admin.user_edit.tab.account":"Аккаунт","admin.user_edit.tab.balance":"Баланс","admin.user_edit.tab.settings":"Настройки","admin.user_edit.tab.specialist":"Предложения","admin.user_edit.tab.site":"Сайт","admin.user_edit.plan_expires":"Тариф истекает","admin.user_edit.interface_lang":"Язык интерфейса","admin.user_edit.comm_languages":"Языки общения","admin.user_edit.personal_site_slug":"Персональная страница","admin.user_edit.show_contact_info":"Показывать контакты","admin.user_edit.show_contact_info.hint":"Видно заказчикам","admin.user_edit.notify_new_tasks":"Уведомлять о новых задачах","admin.user_edit.notify_new_tasks.hint":"Push и email уведомления","admin.user_edit.notif_messages":"Уведомления о сообщениях","admin.user_edit.notif_messages.hint":"Новые сообщения в чате","admin.user_edit.site_settings":"Настройки персональной страницы","admin.user_edit.categories":"Категории услуг","admin.user_edit.locations":"Районы обслуживания","admin.user_edit.skill_placeholder":"Новый навык...","admin.user_edit.add_category":"— Выберите категорию —","admin.user_edit.add_location":"— Выберите район —","admin.user_edit.specialist_cards":"Предложения специалиста","admin.user_edit.no_cards":"Предложения не найдены","admin.user_edit.card_title":"Заголовок предложения","admin.user_edit.card_description":"Описание","admin.balance.topup.btn":"Пополнить","admin.balance.withdraw.btn":"Списать","admin.balance.modal_hint":"Изменения применяются сразу и фиксируются в истории","admin.balance.topup.title":"Пополнение баланса","admin.balance.topup.amount":"Сумма","admin.balance.topup.description":"Комментарий","admin.balance.topup.description.placeholder":"Например: бонус или ручное пополнение","admin.balance.topup.submit":"Пополнить баланс","admin.balance.withdraw.title":"Снятие баланса","admin.balance.withdraw.amount":"Сумма","admin.balance.withdraw.description":"Комментарий","admin.balance.withdraw.description.placeholder":"Например: возврат или ручное списание","admin.balance.withdraw.submit":"Списать баланс","admin.user_edit.role.customer":"Заказчик","admin.user_edit.role.user":"Пользователь","admin.user_edit.role.specialist":"Помощник","admin.user_edit.role.admin":"Администратор","common.refresh":"Обновить","common.back_home":"На главную","admin.loc.hint":"Управление городами и районами","admin.loc.add_city":"Новый город","admin.loc.add_district":"Добавить район","admin.loc.new":"Новая локация","admin.loc.edit":"Редактировать локацию","admin.loc.district":"район","admin.loc.empty":"Нет локаций","admin.loc.delete.confirm":"Удалить локацию? Все районы также будут удалены.","admin.cat.add_root":"Новая категория","admin.cat.add_sub":"Подкатегория","admin.cat.edit":"Редактировать","admin.cat.delete":"Удалить","admin.cat.delete.confirm":"Удалить категорию? Все подкатегории также будут удалены.","admin.cat.slug":"Slug","admin.cat.icon":"Иконка","admin.cat.name_el":"Греческий","admin.cat.name_en":"Английский","admin.cat.name_ru":"Русский","admin.cat.name_uk":"Украинский","admin.cat.active":"Активна","admin.cat.parent":"Родительская категория","admin.cat.no_parent":"Верхний уровень","admin.cat.save":"Сохранить","admin.cat.cancel":"Отмена","admin.cat.empty":"Нет категорий","admin.cat.hint":"Управление категориями с многоуровневой иерархией","admin.cat.new":"Новая категория","admin.cat.subcategory":"подкатегория","admin.cat.add_child":"Добавить подкатегорию","admin.cat.inactive":"Неактивна","admin.event.user_login":"Вход","admin.event.user_register":"Регистрация","admin.event.admin_user_deactivate":"Блокировка юзера","admin.event.admin_user_activate":"Разблокировка юзера","admin.event.admin_user_role_changed":"Смена роли","admin.event.admin_task_cancelled":"Отмена задачи","admin.event.admin_task_deleted":"Удаление задачи","admin.event.admin_report_reviewed":"Жалоба рассмотрена","admin.event.admin_report_dismissed":"Жалоба отклонена","admin.event.task_created":"Создана задача","user.online":"Онлайн","user.seen_minutes":"был здесь {n} мин назад","user.seen_hours":"был здесь {n} ч назад","user.seen_yesterday":"был здесь вчера","user.seen_days":"был здесь {n} дн назад","specialists.title":"Предложения","specialists.search":"Поиск специалиста...","specialists.search.btn":"Поиск","specialists.empty":"Специалисты не найдены","specialists.no_bio":"Без описания","specialists.view":"Смотреть профиль","specialists.reviews":"отзывов","specialist.favorite":"Добавить в избранное","specialist.unfavorite":"Убрать из избранного","specialist.site_link":"Личный сайт","favorites.specialists.title":"Избранные специалисты","favorites.specialists.empty":"Вы ещё не добавили специалистов в избранное","nav.favorites":"Избранное","nav.schedule":"Расписание","nav.find_tasks":"Поиск заказов","schedule.title":"Моё расписание","schedule.subtitle":"Отмечайте дни когда вы свободны или заняты — заказчики увидят вашу доступность","schedule.available":"Свободен","schedule.busy":"Занят","schedule.unset":"Не указано","schedule.click_hint":"← клик меняет статус по кругу","schedule.range_mode":"Выделить диапазон","schedule.range_from":"С {date} — выберите конечную дату","schedule.click_to_set":"Нажмите чтобы отметить","schedule.free":"свободно","schedule.busy_count":"занято","schedule.free_days":"свободных дней","schedule.googleCalendar":"Google Календарь","schedule.connectGoogle":"Подключить Google Календарь","schedule.disconnectGoogle":"Отключить","schedule.connectedAs":"Подключено как","schedule.importFromGoogle":"Синхр. из Google","schedule.gcalConnected":"✓ Google Календарь подключён","schedule.gcalError":"Ошибка подключения Google Календарь","schedule.gcalImportDone":"Импортировано {n} дней из Google Календарь","schedule.gcalAutoSyncNote":"Изменения доступности автоматически отправляются в Google Календарь","schedule.gcalConnectDesc":"Подключите Google Календарь для автоматической синхронизации расписания","schedule.gcalDisconnectConfirm":"Отключить Google Календарь?","find_tasks.title":"Поиск заказов","find_tasks.for_me":"Для меня","find_tasks.all":"Все заказы","find_tasks.by_category":"По категориям","find_tasks.list":"Списком","find_tasks.already_offered":"Предложение отправлено","find_tasks.offer_now":"Откликнуться","find_tasks.empty_for_me":"Нет заказов в ваших категориях","find_tasks.banner_hint":"Найдите заказы по категориям вашего портфолио","find_tasks.no_cards":"Создайте портфолио специалиста, чтобы видеть подходящие заказы","find_tasks.add_card":"Создать портфолио","find_tasks.search":"Поиск заказов...","find_tasks.tasks_count":"заданий","footer.tagline":"Платформа задач для Греции","footer.rights":"Все права защищены.","nav.privacy":"Политика конфиденциальности","nav.delete_account":"Удаление аккаунта","delete_account.title":"Запрос на удаление аккаунта","delete_account.subtitle":"После проверки вашего запроса мы навсегда удалим ваш аккаунт и данные в течение 30 дней.","delete_account.warning":"Это действие нельзя отменить. Все ваши данные будут удалены безвозвратно.","delete_account.reason_label":"Причина (необязательно)","delete_account.reason_placeholder":"Расскажите, почему вы хотите удалить аккаунт...","delete_account.confirm_label":"Подтверждаю, что хочу навсегда удалить свой аккаунт","delete_account.submit":"Отправить запрос","delete_account.submitting":"Отправка...","delete_account.success_title":"Ваш запрос получен","delete_account.success_body":"Мы обработаем ваш запрос в течение 30 дней и уведомим вас по email.","delete_account.login_required":"Для отправки запроса на удаление необходимо войти в аккаунт.","delete_account.login_btn":"Войти","app.download_title":"Скачайте мобильное приложение CanHelp","app.download_desc":"Всё CanHelp — всегда под рукой. Доступно для Android и iOS.","nav.pricing":"Тарифы","pricing.title":"Тарифы","pricing.subtitle":"Выберите подходящий план","pricing.role.customer":"Заказчик","pricing.role.specialist":"Специалист","pricing.free":"Бесплатно","pricing.per_month":"мес","pricing.duration":"Срок","pricing.days":"дн.","pricing.current_plan":"Ваш план","pricing.popular":"Популярный","pricing.choose":"Выбрать","pricing.your_plan":"Активный план","pricing.free_default":"По умолчанию","pricing.compare":"Сравнение функций","pricing.feature":"Функция","pricing.faq_note":"Оплата списывается с баланса CanHelp. Пополнение доступно в разделе Оплата.","pricing.feat.messages":"Сообщений / день","pricing.feat.orders":"Заказов / день","pricing.feat.contact_all":"Связь со всеми","pricing.feat.view_phone":"Просмотр телефона","pricing.feat.show_contact":"Показывать контакты","pricing.feat.favorites":"Избранное","pricing.feat.verified_badge":"Верифицированный бейдж","pricing.feat.google_calendar":"Google Календарь","pricing.feat.personal_site":"Персональный сайт","pricing.feat.auto_response":"Авто-ответ","pricing.feat.auto_match":"Авто-подбор","pricing.feat.highlighted_reviews":"Выделенные отзывы","pricing.feat.portfolio":"Элементов предложения","pricing.feat.cards":"Количество предложений","pricing.feat.notify_tasks":"Уведомления о новых задачах","pricing.feat.video":"Видео в предложении","upgrade.available_in":"Доступно в","upgrade.cta":"Улучшить","dashboard.plan.title":"Мой план","dashboard.plan.expires":"Истекает через {n} дней","dashboard.plan.upgrade":"Улучшить план","dashboard.plan.no_plan":"Бесплатный план","dashboard.plan.messages":"Сообщений сегодня","dashboard.plan.orders":"Заказов сегодня","dashboard.plan.limits":"Дневные лимиты","dashboard.plan.features":"Функции","dashboard.plan.stats":"Статистика","dashboard.stats.cards":"Портфолио","dashboard.stats.maxCards":"Макс. портфолио","dashboard.stats.portfolioItems":"Элементы портфолио","dashboard.stats.maxPortfolioItems":"Макс. элементы","dashboard.stats.activeOffers":"Активные отклики","dashboard.stats.reviewsReceived":"Отзывы","dashboard.stats.activeTasks":"Активные задачи","dashboard.stats.completedTasks":"Завершённые","status.need_help":"Нужна помощь","status.active":"Активен","status.toggle_on":"Включить","status.toggle_off":"Выключить","fomo.missed_orders":"Пропущено {n} заказов","fomo.missed_value":"На сумму €{v}","fomo.upgrade_hint":"Улучшите план — получайте больше заказов","fomo.conversion":"Конверсия задач","fomo.active":"Активные","fomo.with_offers":"С офертами","fomo.completed":"Завершённые","fomo.already_offered":"{n} специалистов уже откликнулись","fomo.specialist_missed":"Вы пропустили {n} заказов","fomo.top_categories":"Категории","fomo.offers_received":"предложений получено","fomo.avg_offers":"В среднем {n}/задача","fomo.completion_rate":"завершено","task.auto_match":"Авто-матч","task.auto_match_results":"Топ специалисты","task.no_offer_yet":"Вы ещё не отправили предложение","task.make_offer":"Отправить предложение","auto_response.title":"Авто-ответ","auto_response.enabled":"Включить авто-ответ","auto_response.min_budget":"Мин. бюджет","auto_response.max_budget":"Макс. бюджет","auto_response.default_price":"Цена по умолчанию","auto_response.default_message":"Сообщение по умолчанию","auto_response.max_per_day":"Макс. авто-офертов в день","auto_response.save":"Сохранить","auto_response.saved":"Сохранено","auto_response.categories":"Категории","auto_response.locations":"Локации","profile.personal_site":"Персональный сайт","profile.site_slug":"URL slug","profile.site_slug_hint":"Только латинские буквы, цифры, - и _","profile.site_open":"Открыть сайт","profile.site_preview":"Ваш сайт","profile.show_contact":"Показывать контакты","profile.show_contact_hint":"Заказчики с Pro/Ultimate-планом увидят ваш телефон","gcal.upgrade_required":"Google Календарь требует план Pro или Ultimate","chat.limit_warning":"Осталось {n} сообщений сегодня","chat.limit_reached":"Лимит сообщений исчерпан. Улучшите план","chat.upgrade":"Улучшить","site.member_since":"С нами с","site.rating":"Рейтинг","site.completed_tasks":"Выполнено","site.languages":"Языков","site.photos":"фото","site.contact_form":"Связаться","site.contact_sent":"Сообщение отправлено!","site.contact_sent_desc":"Специалист свяжется с вами в ближайшее время","site.contact_name":"Имя","site.contact_name_ph":"Ваше имя","site.contact_email_ph":"your@email.com","site.contact_message":"Сообщение","site.contact_message_ph":"Опишите вашу задачу...","site.contact_send":"Отправить","site.share":"Поделиться","site.speaks_languages":"Говорит на языках","site.message_sent":"Сообщение отправлено!","site.message_sent_desc":"Специалист получит его в чате","site.message_placeholder":"Напишите сообщение...","site.write_to_chat":"Написать в чат","site.auth_required_title":"Нужна авторизация","site.auth_required_desc":"Чтобы написать в чат, необходимо войти в аккаунт CanHelp.","site.auth_login_btn":"Войти в аккаунт","site.auth_contact_form_btn":"Написать через форму обратной связи","specialist.services":"Услуги","portfolio.title":"Портфолио","status.can_help_now":"Готов помочь","common.not_found":"Страница не найдена","common.anonymous":"Анонимно","specialist_setup.page_title":"Настройка профиля специалиста","specialist_setup.step_of":"Шаг {current} из {total}","specialist_setup.next":"Далее","specialist_setup.back":"Назад","specialist_setup.skip":"Пропустить","specialist_setup.finish":"Завершить","specialist_setup.go_to_profile":"Перейти в профиль","specialist_setup.browse_tasks":"Найти задачи","specialist_setup.step1.title":"Добро пожаловать!","specialist_setup.step1.subtitle":"Давайте настроим ваш профиль","specialist_setup.step1.desc":"Полный профиль помогает находить больше клиентов. Следуйте шагам, чтобы создать идеальный профиль специалиста.","specialist_setup.step1.what_next":"Что мы сделаем:","specialist_setup.step1.item1":"Заполним основную информацию","specialist_setup.step1.item2":"Создадим карточку услуги","specialist_setup.step1.item3":"Добавим навыки и категории","specialist_setup.step1.item4":"Выберем географию обслуживания","specialist_setup.step1.item5":"Загрузим фото портфолио","specialist_setup.step2.title":"Базовый профиль","specialist_setup.step2.subtitle":"Расскажите о себе","specialist_setup.step2.bio_label":"О себе","specialist_setup.step2.bio_placeholder":"Опишите ваш опыт, услуги которые вы предлагаете...","specialist_setup.step2.phone_label":"Телефон","specialist_setup.step2.phone_placeholder":"+30 6900000000","specialist_setup.step2.photo_label":"Фото профиля","specialist_setup.step2.photo_btn":"Загрузить фото","specialist_setup.step2.photo_uploading":"Загрузка...","specialist_setup.step2.photo_hint":"Отображается в вашем профиле","specialist_setup.step3.title":"Карточка услуги","specialist_setup.step3.subtitle":"Создайте вашу первую карточку услуги","specialist_setup.step3.title_label":"Название карточки","specialist_setup.step3.title_placeholder":"Напр. Сантехник, Электрик, Уборка...","specialist_setup.step3.desc_label":"Описание","specialist_setup.step3.desc_placeholder":"Подробно опишите что вы предлагаете, опыт, преимущества...","specialist_setup.step3.title_required":"Название обязательно","specialist_setup.step4.title":"Навыки и категории","specialist_setup.step4.subtitle":"Добавьте навыки и выберите категории","specialist_setup.step4.skills_label":"Навыки","specialist_setup.step4.skills_placeholder":"Напр. Монтаж труб...","specialist_setup.step4.skills_add":"Добавить","specialist_setup.step4.categories_label":"Категории","specialist_setup.step5.title":"География обслуживания","specialist_setup.step5.subtitle":"Где вы оказываете услуги?","specialist_setup.step5.hint":"Выберите города или конкретные районы","specialist_setup.done.title":"Ваш профиль готов!","specialist_setup.done.subtitle":"Поздравляем! Профиль настроен","specialist_setup.done.desc":"Теперь вы можете получать заказы от клиентов. Найдите задачи, которые соответствуют вашим навыкам.","support.title":"Поддержка","support.type.label":"Тип обращения","support.type.bug":"Ошибка","support.type.suggestion":"Предложение","support.type.other":"Другое","support.subject":"Тема","support.subject.placeholder":"Кратко опишите проблему...","support.body":"Сообщение","support.body.placeholder":"Подробно опишите проблему или предложение...","support.submit":"Отправить","support.cancel":"Отмена","support.error":"Ошибка отправки. Попробуйте ещё раз.","support.sent.title":"Запрос получен!","support.sent.body":"Мы ответим на ваш email в ближайшее время.","support.sent.close":"Закрыть","admin.tab.support":"Поддержка","admin.tab.backup":"Бэкап","admin.tab.translations":"Переводы","admin.tab.dbcheck":"Проверка БД","admin.tab.balances":"Баланс","admin.tab.push":"Push","admin.tab.referrals":"Рефералы","admin.search":"Поиск","admin.noData":"Нет данных","admin.cat.order":"Порядок","admin.cat.skills":"Навыки","admin.plans.form.max_tasks":"Макс. задач","admin.settings.referral.shared_section":"Общие настройки рефералов","admin.settings.seo.title":"SEO настройки","admin.backup.title":"Бэкап","admin.backup.tables":"Таблицы","admin.backup.exportAll":"Экспорт всего","admin.backup.importAll":"Импорт всего","admin.backup.exportTable":"Экспорт таблицы","admin.backup.importTable":"Импорт таблицы","admin.backup.exporting":"Экспорт...","admin.backup.importing":"Импорт...","admin.backup.exportSuccess":"Экспорт завершён","admin.backup.importSuccess":"Импорт завершён","admin.backup.autoBackup":"Автобэкап","admin.backup.autoBackupDesc":"Автоматический ежедневный бэкап","admin.backup.storedBackups":"Сохранённые бэкапы","admin.backup.noStoredBackups":"Сохранённых бэкапов нет","admin.backup.restore":"Восстановить","admin.backup.restoreConfirm":"Восстановить из бэкапа?","admin.backup.restoreSuccess":"Восстановление завершено","admin.backup.restoring":"Восстановление...","admin.backup.date":"Дата","admin.backup.size":"Размер","admin.backup.today":"Сегодня","admin.backup.yesterday":"Вчера","admin.balance.col.operation":"Операция","admin.balance.col.amount":"Сумма","admin.balance.col.result":"Баланс","admin.balance.col.description":"Описание","admin.balance.col.date":"Дата","admin.balance.empty":"Записей пока нет","admin.balance.filter.all":"Все операции","admin.balance.filter.user_id":"Фильтр по userId","admin.balance.kind.topup":"Пополнение","admin.balance.kind.plan_purchase":"Списание за тариф","admin.balance.kind.admin_topup":"Пополнение админом","admin.balance.kind.admin_adjustment":"Корректировка","admin.support.search":"Поиск","admin.support.all_statuses":"Все статусы","admin.support.all_types":"Все типы","admin.support.none":"Обращений нет","admin.support.reply":"Ответить","admin.support.reply_placeholder":"Введите ответ...","admin.support.send_reply":"Отправить ответ","admin.support.cancel":"Отмена","admin.support.close":"Закрыть","admin.support.status.open":"Открыто","admin.support.status.in_progress":"В работе","admin.support.status.resolved":"Решено","admin.support.status.closed":"Закрыто","admin.support.your_reply":"Ваш ответ","admin.user_edit.visibility_requirements.title":"Профиль пока не попадает в \xabПредложения\xbb","admin.user_edit.visibility_requirements.hint":"Нужно выполнить условия видимости:","admin.user_edit.visibility_requirements.bio":"Заполнить описание (bio)","admin.user_edit.visibility_requirements.published_card":"Опубликовать хотя бы одну карточку","admin.user_edit.visibility_requirements.categories":"Указать категорию в опубликованной карточке","admin.user_edit.visibility_requirements.locations":"Указать локацию в опубликованной карточке","auto_response.desc":"Автоматически отвечать на подходящие задачи","auto_response.budget_range":"Бюджет задачи","auto_response.message_placeholder":"Здравствуйте! Я могу помочь с этой задачей...","profile.background.title":"Фон шапки профиля","profile.background.hint":"Показывается в шапке публичного профиля на web и в мобильном приложении.","profile.photo.uploading":"Загрузка...","profile.balance.history":"Архив операций","profile.balance.history.last":"Последние операции","profile.balance.history.empty":"Операций пока нет","profile.balance.history.balance_after":"Баланс после","profile.balance.history.kind.topup":"Пополнение баланса","profile.balance.history.kind.plan_purchase":"Списание за тариф","profile.balance.history.kind.admin_topup":"Пополнение администратором","profile.balance.history.kind.admin_adjustment":"Корректировка администратором","profile.plan_history.title":"История тарифного плана","profile.plan_history.empty":"История изменений тарифа пока пуста","profile.plan_history.expires":"До","profile.plan_history.days":"дней","profile.plan_history.event.activated":"Активирован","profile.plan_history.event.renewed":"Продлён","profile.plan_history.event.downgraded":"Понижен","profile.plan_history.event.referral_reward":"Реферальная награда","profile.plan_history.event.admin_change":"Изменён администратором","profile.plan_history.event.expired":"Истёк","profile.show_contact_desc":"Позволяет клиентам связаться напрямую","profile.site.visible.price_list":"Прайслист","site.pricelist":"Прайслист","status.plan_required":"Статус недоступен на текущем тарифе","status.admin_not_applicable":"Для аккаунта администратора пользовательский статус не применяется"},uk:{"footer.slogan":"Ваше завдання — наша турбота! Вирішуємо будь-які питання швидко і зручно.","footer.links":"Посилання","footer.socials":"Ми в соцмережах","nav.home":"Головна","nav.tasks":"Завдання","nav.post":"+ Опублікувати","nav.dashboard":"Мої завдання","nav.chat":"Повідомлення","nav.notifications":"Сповіщення","nav.profile":"Профіль","nav.admin":"Адмінка","nav.specialists":"Пропозиції","nav.new_task":"Нове завдання","nav.login":"Увійти","nav.register":"Реєстрація","nav.logout":"Вийти","hero.title":"Кожен має навичку, яка може допомогти іншому","hero.subtitle":"Знайди допомогу, запропонуй свої навички або заробляй, допомагаючи іншим","hero.cta.post":"Знайти допомогу","hero.cta.browse":"Запропонувати допомогу","hero.cta.specialists":"Знайти роботу","hero.search.placeholder":"Що потрібно? напр. електрик, прибирання...","hero.specialist.title":"Знайдіть замовлення поруч з вами","hero.specialist.subtitle":"Відкрийте замовлення у своїх категоріях і надішліть пропозицію","hero.specialist.cta":"Знайти замовлення","hero.specialist.search.placeholder":"Пошук замовлень... напр. електрика, прибирання","section.categories.specialist":"Знайдіть замовлення за категорією","section.cities.specialist":"Замовлення за містом","how.specialist.step1.title":"Створіть картку спеціаліста","how.specialist.step1.desc":"Вкажіть категорії, навички і райони — система знайде підходящі замовлення автоматично","how.specialist.step2.title":"Знайдіть підходящі замовлення","how.specialist.step2.desc":"Переглядайте замовлення у своїх категоріях і починайте роботу одразу","how.specialist.step3.title":"Надішліть пропозицію і заробляйте","how.specialist.step3.desc":"Подайте пропозицію з ціною і термінами, спілкуйтеся з клієнтами і виконуйте замовлення","stats.specialists":"пропозиції","stats.tasks":"завдань","stats.categories":"категорій","stats.free":"безкоштовна реєстрація","promo.title":"Отримай Pro безкоштовно — тільки до кінця року","promo.subtitle":"Зареєструйся зараз і користуйся тарифом Pro без оплати. Акція закінчується 31 грудня.","promo.cta":"Зареєструватися","promo.days":"днів","promo.hours":"годин","promo.minutes":"хвилин","promo.seconds":"сек.","section.categories":"Створи завдання у будь-якій категорії","section.how":"Як це працює","section.recent":"Останні завдання","section.all":"Дивитись всі →","section.more":"ще","section.cities":"Міста і райони","section.community":"Суспільний проект для всіх","community.subtitle":"CanHelp — не просто маркетплейс, це спільнота взаємодопомоги. Будь-хто, хто має знання або навичку, може знайти клієнта. Будь-хто, у кого є завдання, може знайти спеціаліста.","community.point1.title":"Вмієте щось робити?","community.point1.desc":"Ремонт, репетиторство, дизайн, переклади, догляд — кожна навичка має цінність. Створіть профіль і знаходьте клієнтів поруч.","community.point2.title":"Потрібна допомога?","community.point2.desc":"Опублікуйте завдання за хвилину і отримуйте пропозиції від перевірених спеціалістів у вашому місті.","community.point3.title":"Допоможіть проекту рости","community.point3.desc":"CanHelp розвивається завдяки спільнотам. Поділіться посиланням з друзями і знайомими — разом ми будуємо щось корисне для всіх.","community.share":"Поділитися з друзями","community.share.copied":"Посилання скопійовано!","section.referral":"Реферальна програма","referral.home.subtitle":"Поділіться посиланням — кожен новий користувач, зареєстрований через нього, принесе вам нагороду.","referral.home.step1.title":"Зареєструйтесь і отримайте посилання","referral.home.step1.desc":"Створіть акаунт і знайдіть своє унікальне реферальне посилання в профілі.","referral.home.step2.title":"Поділіться з друзями","referral.home.step2.desc":"Надішліть посилання друзям, знайомим або опублікуйте в соціальних мережах.","referral.home.step3.title":"Отримуйте нагороди","referral.home.step3.desc":"Як тільки друг підтвердить email, ви автоматично отримаєте свою нагороду.","referral.home.cta":"Отримати посилання","referral.home.badge":"Реферальна програма","section.faq":"Часті запитання","faq.q1":"Як працює CanHelp?","faq.a1":"Опублікуйте завдання, отримайте пропозиції від спеціалістів, виберіть найкращого і почніть співпрацю. Це швидко, просто і безкоштовно для клієнтів.","faq.q2":"Скільки коштує використання платформи?","faq.a2":"Реєстрація і публікація завдань повністю безкоштовні для клієнтів. Спеціалісти мають доступ до безкоштовного плану, а також до преміум-опцій.","faq.q3":"Як стати спеціалістом?","faq.a3":"Зареєструйтесь, перейдіть у \xabСтати спеціалістом\xbb, заповніть профіль навичками і категоріями і починайте отримувати завдання.","faq.q4":"Як вибрати підходящого спеціаліста?","faq.a4":"Оцініть відгуки, досвід, навички і портфоліо кожного спеціаліста. Спілкуйтеся через чат платформи і уточнюйте деталі до прийняття рішення.","faq.q5":"Що якщо я не задоволений результатом?","faq.a5":"Ви можете залишити відгук про спеціаліста і поставити оцінку від 1 до 5 зірок. Відгуки допомагають іншим користувачам вибирати перевірених професіоналів.","faq.q6":"Чи можна зв'язатись зі спеціалістом до прийняття пропозиції?","faq.a6":"Так. Як тільки ви отримали пропозицію, можна відкрити чат зі спеціалістом, задати питання і уточнити всі деталі до прийняття рішення.","faq.q7":"Скільки часу чекати пропозицій?","faq.a7":"Як правило, протягом кількох годин. Спеціалісти отримують сповіщення про нові завдання і можуть швидко відповісти.","faq.q8":"Чи можна розмістити завдання у будь-якому місті Греції?","faq.a8":"Так! CanHelp охоплює всю Грецію — Афіни, Салоніки, Патри та інші міста.","faq.q9":"Які види завдань є на CanHelp?","faq.a9":"Ремонт, прибирання, електрика, репетиторство, дизайн, IT, переїзди, краса та багато іншого. Категорії постійно розширюються.","faq.q10":"Чи є мобільний додаток?","faq.a10":"Так! CanHelp доступний для Android та iOS. Завантажте додаток і керуйте всім зі свого телефону.","how.step1.title":"Опублікуй завдання","how.step1.desc":"Опиши що потрібно і встанови бюджет","how.step2.title":"Отримай пропозиції","how.step2.desc":"Спеціалісти надішлють пропозиції з ціною і термінами","how.step3.title":"Обери і почни","how.step3.desc":"Обери найкращого професіонала і почни співпрацю","tasks.title":"завдань","tasks.filters":"Фільтри","tasks.search":"Пошук","tasks.search.placeholder":"Назва або ключове слово...","tasks.search.btn":"Пошук","tasks.publish":"Опублікувати","tasks.category.all":"Всі","tasks.category.all_in":"Всі в","tasks.category.label":"Категорія","tasks.location.label":"Місто","tasks.location.placeholder":"напр. Афіни","tasks.empty":"Завдань не знайдено","tasks.empty.cta":"Опублікуй перше","task.status.open":"Відкрито","task.status.in_progress":"В роботі","task.status.completed":"Завершено","task.status.cancelled":"Скасовано","task.status.draft":"Чернетка","task.budget":"Бюджет","task.location":"Місцезнаходження","task.deadline":"Дата початку","task.expires_at":"Активно до","task.created_at":"Створено","task.customer":"Замовник","task.offer.btn":"Надіслати пропозицію","task.invite.banner_title":"Вас запросили на це завдання","task.invite.banner_hint":"Замовник особисто запросив вас","task.invite.accept":"Надіслати пропозицію","task.invite.decline":"Відмовитися","offer.accept":"Прийняти","offer.decline":"Відхилити","task.complete":"Завершити завдання","task.complete.confirm":"Позначити завдання як виконане?","task.edit":"Редагувати","task.status_label":"Статус","task.yours":"Ваше завдання","task.offer.yours":"Ваша пропозиція","review.leave":"Залишити відгук","review.rating":"Оцінка","review.comment":"Коментар","review.comment.placeholder":"Розкажіть про свій досвід...","review.submit":"Надіслати відгук","review.submitting":"Надсилання...","review.done":"Відгук надіслано!","profile.reviews":"Відгуки","profile.no_reviews":"Відгуків поки немає","profile.rating":"Рейтинг","profile.skills.label":"Навички","profile.member_since":"Учасник з","task.offers":"Пропозиції","task.offers.none":"Пропозицій поки немає","create.title":"Опублікувати завдання","create.field.title":"Назва","create.field.description":"Опис","create.field.category":"Категорія","create.field.category.select":"Оберіть...","create.field.location":"Місцезнаходження","create.field.location.any":"Де завгодно","create.field.location.all":"Все місто","create.field.budget":"Бюджет (€)","create.field.deadline":"Дата початку","create.field.expires_at":"Оголошення активне","create.field.expires_at.days":"{n} днів","create.field.budget_negotiable":"Ціна обговорюється","create.field.time_slot":"Час виконання","create.field.time_slot.any":"У будь-який час","create.field.time_slot.morning":"Вранці (08:00–13:00)","create.field.time_slot.afternoon":"Вдень (13:00–18:00)","create.field.time_slot.evening":"Ввечері (18:00–22:00)","create.field.time_slot.weekend":"Вихідний","create.field.address":"Адреса (необов'язково)","create.field.address.district":"Квартал","create.field.address.street":"Вулиця","create.field.address.house":"Будинок","create.field.confidential":"Конфіденційна нотатка","create.field.confidential.placeholder":"Деталі, видні тільки призначеному спеціалісту...","create.field.confidential.hint":"Не відображається публічно","create.field.photos":"Фотографії","create.field.photos.add":"Додати фото","create.field.photos.uploading":"Завантаження...","task.budget_negotiable":"Ціна обговорюється","task.time_slot":"Час","task.confidential":"Конфід. нотатка","create.field.title.placeholder":"напр. Прибирання квартири 80кв","create.field.description.placeholder":"Детально опишіть що потрібно...","create.field.location.placeholder":"напр. Афіни, Колонаки","create.field.budget.placeholder":"напр. 100","create.submit":"Опублікувати завдання","create.submitting":"Публікація...","login.title":"Ласкаво просимо","login.subtitle":"Вхід до CanHelp","login.email":"Email","login.password":"Пароль","login.submit":"Увійти","login.submitting":"Вхід...","login.error":"Невірний email або пароль","login.unverified.title":"Підтвердіть ваш email","login.unverified.desc":"Ми надіслали посилання для підтвердження на ваш email. Перевірте вхідні (або спам) і перейдіть за посиланням.","login.unverified.resend":"Надіслати лист повторно","login.unverified.sending":"Надсилання...","login.unverified.sent":"✓ Надіслано — перевірте вхідні","profile.email.verified":"Email підтверджено","profile.email.not_verified":"Email не підтверджено","login.no_account":"Немає акаунту?","login.register_link":"Зареєструватися","login.forgot_password":"Забув пароль?","login.or_continue_with":"або продовжте через","login.continue_google":"Увійти через Google","forgot.title":"Забув пароль","forgot.subtitle":"Введіть email для отримання посилання відновлення","forgot.email":"Email","forgot.submit":"Надіслати посилання","forgot.submitting":"Надсилання...","forgot.sent.title":"Перевірте вхідні","forgot.sent.desc":"Якщо акаунт з таким email існує, ми надішлемо посилання для скидання пароля.","forgot.back_to_login":"Повернутися до входу","forgot.error":"Не вдалося надіслати посилання. Перевірте адресу і спробуйте знову.","forgot.error.not_found":"Акаунт з таким email не знайдено.","forgot.error.send_failed":"Помилка надсилання листа. Спробуйте пізніше.","reset.title":"Новий пароль","reset.subtitle":"Введіть новий пароль","reset.password":"Новий пароль","reset.confirm":"Підтвердіть пароль","reset.submit":"Змінити пароль","reset.submitting":"Збереження...","reset.success":"Пароль успішно змінено. Перенаправлення до входу...","reset.back_to_login":"Повернутися до входу","reset.error.mismatch":"Паролі не збігаються","reset.error.invalid":"Недійсне або застаріле посилання. Запросіть нове.","register.title":"Реєстрація","register.subtitle":"Створити акаунт в CanHelp","register.first_name":"Ім'я","register.last_name":"Прізвище","register.email":"Email","register.password":"Пароль (мін. 8 символів)","register.role":"Роль","register.role.customer":"Користувач","register.role.customer.desc":"Публікую завдання","register.role.specialist":"Спеціаліст","register.role.specialist.desc":"Беру завдання","register.submit":"Створити акаунт","register.submitting":"Реєстрація...","register.has_account":"Вже є акаунт?","register.login_link":"Увійти","register.continue_google":"Зареєструватися через Google","register.check_email.title":"Перевірте пошту","register.check_email.desc":"Ми надіслали посилання для підтвердження на ваш email. Перевірте вхідні (або спам) і перейдіть за посиланням.","register.check_email.login":"Повернутися до входу","register.captcha_failed":"Перевірка CAPTCHA не пройдена. Пройдіть перевірку безпеки та спробуйте знову.","dashboard.title":"Панель управління","dashboard.new_task":"+ Нове завдання","dashboard.onboarding.title":"Ласкаво просимо до CanHelp \uD83D\uDC4B","dashboard.onboarding.subtitle":"Оберіть, з чого хочете почати.","dashboard.onboarding.helper.title":"Запропонуйте свою допомогу","dashboard.onboarding.helper.desc":"Заповніть анкету — навички, категорії та міста. Це займе кілька хвилин, і ви почнете отримувати замовлення.","dashboard.onboarding.helper.cta":"Заповнити анкету","dashboard.onboarding.requester.title":"Потрібна допомога?","dashboard.onboarding.requester.desc":"Опублікуйте завдання — помічники надішлють вам свої пропозиції.","dashboard.onboarding.requester.cta":"Опублікувати завдання","dashboard.my_tasks":"Мої завдання","dashboard.my_offers":"Мої пропозиції","dashboard.invitations":"Запрошення на завдання","dashboard.offers_count":"проп.","dashboard.declined_count":"відх.","dashboard.completed_tasks":"Завершені завдання","dashboard.completed_offers":"Завершені пропозиції","dashboard.review_pending":"Оцінка ще не залишена","tasks.new.top_specialists":"Топ спеціалісти","tasks.new.select_category":"Виберіть категорію, щоб побачити спеціалістів","tasks.new.invite":"Запропонувати роботу","tasks.new.invited":"Вибрано ✓","reviews.count":"відгуків","filter.location":"Локація","filter.language":"Мови","filter.language.any":"Будь-яка мова","filter.category.all":"Всі категорії","user.categories":"Категорії","user.work_area":"Район роботи","user.specialist_cards":"Картки послуг","card.skills":"Навички","card.categories":"Категорії","card.geography":"Район роботи","card.portfolio":"Портфоліо","card.close":"Закрити","dashboard.tasks.empty":"Ви не публікували завдання","dashboard.tasks.empty.cta":"Опублікуйте перше","dashboard.tasks.add_new":"Додати нове завдання","dashboard.offers.empty":"Ви не надсилали пропозицій","dashboard.offers.empty.cta":"Знайти завдання","dashboard.customer.specialists_title":"Шукаєте виконавця?","dashboard.customer.specialists_hint":"Переглядайте профілі спеціалістів, читайте відгуки і запрошуйте їх на свої завдання","dashboard.customer.specialists_cta":"Знайти виконавця","dashboard.customer.how_title":"Як це працює","dashboard.customer.step1":"Створіть завдання з описом і бюджетом","dashboard.customer.step2":"Спеціалісти надішлють пропозиції з ціною і термінами","dashboard.customer.step3":"Оберіть підходящого і почніть роботу","notif.title":"Сповіщення","notif.mark_all":"Позначити всі як прочитані","notif.empty":"Немає сповіщень","notif.type.generic":"Сповіщення","notif.type.new_offer":"Нова пропозиція","notif.type.offer_accepted":"Вашу пропозицію прийнято","notif.type.offer_declined":"Вашу пропозицію відхилено","notif.type.task_completed":"Завдання виконано","notif.type.task_cancelled":"Завдання скасовано","notif.type.new_message":"Нове повідомлення","notif.type.new_review":"Новий відгук","notif.type.task_invite":"Запрошення на завдання","notif.type.referral_reward":"Реферальна нагорода","notif.type.specialist_card_submitted":"Картку надіслано на перевірку","notif.type.specialist_card_approved":"Картку схвалено","notif.type.specialist_card_rejected":"Картку відхилено","notif.body.new_offer":"Нова пропозиція на \xab{title}\xbb","notif.body.offer_accepted":"Вашу пропозицію на \xab{title}\xbb прийнято","notif.body.offer_declined":"Вашу пропозицію на \xab{title}\xbb відхилено","notif.body.task_invite":"Вас запрошують на \xab{title}\xbb","notif.body.new_review":"Ви отримали оцінку {rating}★","notif.body.referral_reward":"На ваш акаунт додано {days} днів доступу до плану \xab{plan}\xbb!","notif.body.specialist_card_submitted":"Картку \xab{title}\xbb надіслано на перевірку","notif.body.specialist_card_approved":"Картку \xab{title}\xbb схвалено та опубліковано","notif.body.specialist_card_rejected":"Картку \xab{title}\xbb не було схвалено. Виправте її та надішліть знову.","offer.status.pending":"Очікує","offer.status.accepted":"Прийнято","offer.status.declined":"Відхилено","offer.status.withdrawn":"Відкликано","offer.status.other_accepted":"Вибрано іншого виконавця","common.loading":"Завантаження...","common.error":"Помилка","common.save":"Зберегти","common.saving":"Збереження...","common.cancel":"Скасувати","common.add":"Додати","common.close":"Закрити","common.edit":"Редагувати","common.delete":"Видалити","common.from":"від","common.currency":"€","common.greece":"Греція","chat.connected":"Підключено","chat.disconnected":"Відключено","chat.no_rooms":"Переписок поки немає","chat.task_fallback":"Завдання","chat.select":"Виберіть переписку","chat.no_messages":"Повідомлень поки немає","chat.placeholder":"Напишіть повідомлення... (Enter для надсилання)","chat.conversation_fallback":"Переписка","chat.direct_chat":"Особистий чат","chat.linked_task":"Прикріплене замовлення","chat.write_btn":"Написати","chat.just_now":"щойно","chat.min_ago":"хв","chat.write_specialist":"Написати спеціалісту","chat.write_customer":"Написати замовнику","chat.notif_settings":"Налаштування сповіщень","chat.notif_messages":"Сповіщення про нові повідомлення","chat.toast_title":"Нове повідомлення","chat.toast_open":"Відкрити чат","offer.price":"Ціна","offer.price.placeholder":"напр. 80","offer.customer_budget":"Бюджет замовника","offer.message":"Повідомлення","offer.optional":"необов'язково","offer.message.placeholder":"Представтеся, розкажіть про досвід і чому ви найкращий вибір...","offer.submitting":"Надсилання...","profile.photo":"Фото профілю","profile.photo.change":"Змінити фото","profile.photo.hint":"JPEG, PNG, WebP \xb7 до 5MB","profile.basic_info":"Основна інформація","profile.phone":"Телефон","profile.phone.placeholder":"+30 6901234567","profile.bio":"Короткий опис","profile.bio.placeholder":"Розкажіть трохи про себе...","profile.language":"Мова","profile.language.hint":"Мова інтерфейсу і email-сповіщень","profile.languages":"Мови спілкування","profile.languages.hint":"Виберіть усі мови, якими ви спілкуєтесь","profile.skills":"Навички","profile.skills.subtitle":"Додайте послуги, які ви пропонуєте","profile.skills.placeholder":"напр. Прибирання, IT, Репетиторство...","profile.role":"Роль акаунту","profile.role.specialist":"\uD83D\uDD27 Помічник","profile.role.admin":"\uD83D\uDC51 Admin","profile.role.customer":"\uD83D\uDC64 Користувач","profile.role.user":"\uD83D\uDC64 Користувач","profile.role.change":"Для зміни ролі зверніться до служби підтримки.","profile.become_specialist":"Запропонувати допомогу","profile.become_specialist.desc":"Створи профіль помічника, запропонуй свої навички та почни отримувати завдання.","become_specialist.hero.title":"Запропонуй свої навички і почни заробляти","become_specialist.hero.subtitle":"Створи профіль помічника та отримуй запити від людей, яким потрібна допомога","become_specialist.how.title":"Як це працює","become_specialist.step1.title":"Створи портфоліо спеціаліста","become_specialist.step1.desc":"Вкажи категорії, навички і зону покриття — система автоматично підбере підходящі замовлення","become_specialist.step2.title":"Шукай замовлення","become_specialist.step2.desc":"Переглядай завдання по своїх категоріях у розділі \xabПошук замовлень\xbb","become_specialist.step3.title":"Відгукуйся і заробляй","become_specialist.step3.desc":"Надсилай пропозиції з ціною і термінами, спілкуйся з клієнтами і виконуй замовлення","become_specialist.benefits.title":"Переваги профілю спеціаліста","become_specialist.benefit1":"Пошук замовлень за категоріями і локацією","become_specialist.benefit2":"Публічний профіль з відгуками клієнтів","become_specialist.benefit3":"Розклад доступності, видимий клієнтам","become_specialist.benefit4":"Додавання до обраного клієнтами","become_specialist.cta":"Детальніше","become_specialist.free_badge":"Безкоштовна реєстрація","profile.tab.notifications":"Сповіщення","profile.tab.reviews":"Відгуки","profile.tab.referral":"Реферали","profile.tab.auto_response":"Авто-відповідь","profile.tab.site":"Сайт","profile.site.title":"Персональна сторінка","profile.site.url_label":"Особистий сайт","profile.site.copy":"Копіювати","profile.site.copied":"Скопійовано","profile.site.visible_title":"Що відображається на вашій сторінці","profile.site.visible.name":"Ім'я і фото","profile.site.visible.bio":"Біографія","profile.site.visible.rating":"Рейтинг і відгуки","profile.site.visible.portfolio":"Портфоліо / Картки","profile.site.visible.contacts":"Контактні дані","profile.site.visible.full_last_name":"Прізвище повністю","profile.site.visible.services":"Картки послуг","profile.site.visible.reviews":"Розділ з відгуками","profile.site.visible.status":"Статус \xabГотовий допомогти\xbb","profile.site.theme":"Тема оформлення","profile.site.theme.dark":"Темна","profile.site.theme.light":"Світла","profile.site.slug_taken":"Ця адреса вже зайнята","profile.site.stats.title":"Аналітика сайту","profile.site.stats.days":"останні 30 днів","profile.site.stats.views":"Перегляди","profile.site.stats.unique":"Унікальні відвідувачі","profile.site.stats.messages":"Повідомлення","profile.site.stats.total_views":"Перегляди","profile.site.stats.total_unique":"Унік. відвідувачі","profile.site.stats.total_messages":"Повідомлення","profile.site.stats.empty":"Даних поки немає","profile.site.stats.loading":"Завантаження аналітики...","profile.site.stats.no_slug":"Вкажіть адресу сайту, щоб бачити статистику","profile.site.edit_bio_hint":"Біографія і фото налаштовуються у вкладці \xabОсновне\xbb.","profile.site.seo.title":"SEO — мета-дані сайту","profile.site.seo.hint":"Відображається в пошуковиках. При збереженні автоматично перекладається на всі мови.","profile.site.seo.site_title":"Заголовок сторінки","profile.site.seo.site_title_placeholder":"Іван Іванов — Електрик в Афінах","profile.site.seo.site_desc":"Мета-опис","profile.site.seo.site_desc_placeholder":"Короткий опис для пошуковиків...","status.title":"Статус","status.can_help_now_hint":"Ваша картка показується вище у пошуку","status.need_help_hint":"Спеціалісти можуть запропонувати вам допомогу","profile.referral.title":"Партнерська програма","profile.referral.desc":"Поділіться посиланням і отримуйте нагороду за кожного залученого користувача.","profile.referral.link_label":"Ваше реферальне посилання","profile.referral.copy":"Копіювати","profile.referral.copied":"Скопійовано!","profile.referral.invited_count":"успішних запрошень","profile.referral.no_code":"Реферальний код недоступний.","notifications.title":"Налаштування сповіщень","notifications.email.new_tasks":"Email про нові замовлення","notifications.email.new_tasks.desc":"Отримувати email, коли у ваших категоріях публікується нове замовлення","notifications.messages.desc":"Отримувати сповіщення при новому вхідному повідомленні","notifications.saved":"Налаштування збережено","notifications.plan_required":"Недоступно у вашому тарифі","profile.tab.info":"Основне","profile.tab.finance":"Фінанси","profile.tab.skills":"Навички","profile.tab.categories":"Категорії","profile.tab.geography":"Географія","profile.specialist.categories":"Категорії робіт","profile.specialist.categories.desc":"Виберіть категорії, в яких ви працюєте","profile.specialist.geography":"Міста покриття","profile.specialist.geography.desc":"Виберіть міста / райони, де ви працюєте","profile.saving":"Збереження...","profile.upload.error":"Помилка завантаження фото","profile.saved":"Збережено","profile.tab.cards":"Пропозиції","profile.cards.count":"Пропозиції","profile.cards.add":"Додати пропозицію","profile.cards.new_title":"Назва нової пропозиції","profile.cards.placeholder":"Наприклад: Сантехніка","profile.cards.create":"Створити","profile.cards.cancel":"Скасувати","profile.cards.empty":"У вас немає пропозицій","profile.cards.empty_hint":"Створіть першу картку, щоб показати послуги клієнтам.","profile.cards.create_first":"Створити першу пропозицію","profile.cards.delete_confirm":"Видалити пропозицію?","profile.background.change":"Змінити фон","profile.background.remove":"Видалити фон","profile.listing_requirements.published_card":"Опублікуйте хоча б одну картку","profile.listing_requirements.title":"Ваш профіль поки не показується в розділі \xabПропозиції\xbb","profile.listing_requirements.hint":"Щоб картка відображалась, виконайте умови:","profile.listing_requirements.bio":"Додайте коротку інформацію про себе в \xabОсновне\xbb","profile.listing_requirements.categories":"Укажіть хоча б одну категорію в активній картці","profile.listing_requirements.locations":"Укажіть хоча б одну локацію в активній картці","profile.listing_requirements.card_inactive":"Зробіть картку активною","profile.listing_requirements.review_pending":"Картка на розгляді","profile.card.visibility_issue":"Картка не відображається в розділі \xabПропозиції\xbb","profile.card.tab.main":"Основне","profile.card.tab.skills":"Навички","profile.card.tab.categories":"Категорії","profile.card.tab.geography":"Географія","profile.card.tab.portfolio":"Галерея","profile.card.tab.pricelist":"Прайс-лист","profile.card.pricelist.empty":"Групи прайс-листа ще не додані.","profile.card.pricelist.add_group":"Додати групу","profile.card.pricelist.group_title":"Назва групи","profile.card.pricelist.add_item":"Додати позицію","profile.card.pricelist.item_name":"Послуга / робота","profile.card.pricelist.item_desc":"Опис (необов'язково)","profile.card.pricelist.item_price":"Ціна","profile.card.pricelist.item_unit":"Одиниця (наприклад /год)","profile.card.pricelist.save_group":"Зберегти групу","profile.card.pricelist.save_item":"Зберегти","profile.card.pricelist.delete_group":"Видалити групу","profile.card.pricelist.delete_item":"Видалити","profile.card.active":"Активна","profile.card.review_pending":"На розгляді","profile.card.review_pending_hint":"Вашу картку зараз перевіряє адміністрація.","profile.card.review_submitted":"Картку надіслано на перевірку","profile.card.review_approved":"Картку схвалено","profile.card.review_approved_hint":"Ваша картка тепер відображається в пропозиціях.","profile.card.review_rejected":"Картку відхилено","profile.card.review_rejected_hint":"Картку не було схвалено. Виправте її та надішліть знову.","profile.card.submit_review":"Надіслати на розгляд","profile.card.withdraw_review":"Відкликати заявку","profile.card.unpublish":"Зняти з публікації","profile.card.save":"Зберегти","profile.card.saved":"Збережено","profile.card.delete":"Видалити","profile.card.skill.add":"Додати навичку","profile.card.photo.add":"Додати фото","profile.card.photo.uploading":"Завантаження...","profile.card.photo.empty":"Немає фотографій","profile.card.item.title":"Заголовок","profile.card.item.desc":"Опис","profile.card.item.save":"Зберегти","profile.card.item.cancel":"Скасувати","profile.card.item.edit":"Опис роботи","profile.card.description":"Опис картки","profile.card.desc_auto_translate":"При збереженні буде автоматично перекладено на інші мови","profile.card.desc_translated":"Є переклади:","profile.upgrade.cards_limit":"Ліміт портфоліо вичерпано","profile.upgrade.plan":"Поточний тариф:","profile.upgrade.contact":"Зверніться до адміністратора для зміни тарифу","profile.upgrade.ok":"Зрозуміло","profile.plan.title":"Тарифний план","profile.balance":"Баланс","profile.balance.topup":"Поповнити баланс","profile.balance.topup.title":"Поповнити баланс","profile.balance.topup.amount":"Сума (в EUR)","profile.balance.topup.hint":"Виберіть суму або введіть вручну","profile.balance.topup.submit":"Перейти до оплати","profile.balance.topup.loading":"Перенаправлення...","profile.balance.topup.error":"Помилка ініціалізації платежу. Спробуйте знову.","payment.success.title":"Оплата пройшла успішно!","payment.success.desc":"Ваш баланс оновлено.","payment.cancelled.title":"Оплату скасовано","payment.cancelled.desc":"Оплату було скасовано. Кошти не списано.","payment.pending.title":"Обробляється...","payment.pending.desc":"Ваш платіж в обробці.","payment.back_to_profile":"Повернутися в профіль","profile.plan.basic":"Базовий (безкоштовний)","profile.plan.contact_upgrade":"Зверніться до адміністратора для підключення тарифу","profile.plan.cards_up_to":"Портфоліо: до","profile.plan.cards_unlimited":"Портфоліо: безліміт","profile.plan.tasks_up_to":"Завдань: до","profile.plan.offers_up_to":"Відгуків: до","profile.plan.valid_until":"Дійсний до","profile.plan.no_expiry":"Безстроково","create.error":"Помилка при публікації","tasks.category.general":"Загальне","tasks.budget.range":"Діапазон:","tasks.budget.from":"від","tasks.budget.to":"до","tasks.filter.reset":"Скинути фільтри","tasks.load_more":"Завантажити ще","tasks.showing":"Результатів:","tasks.field.budget":"Бюджет, €","admin.title":"Панель адміністратора","admin.tab.stats":"Статистика","admin.tab.users":"Користувачі","admin.tab.tasks":"Завдання","admin.tab.reports":"Скарги","admin.tab.moderation":"Модерація","admin.stats.users":"Користувачі","admin.stats.tasks":"Завдання","admin.stats.offers":"Пропозиції","admin.stats.reviews":"Відгуки","admin.tasks.by_status":"Завдання за статусом","admin.col.user":"Користувач","admin.col.email":"Email","admin.col.role":"Роль","admin.col.registered":"Реєстрація","admin.col.status":"Статус","admin.col.title":"Назва","admin.col.budget":"Бюджет","admin.col.created":"Створено","admin.users.active":"Активний","admin.users.inactive":"Неактивний","admin.users.deactivate":"Деактивувати","admin.users.activate":"Активувати","admin.tasks.cancel":"Скасувати","admin.reports.none":"Скарг немає","admin.moderation.none":"Немає пропозицій для перевірки","admin.moderation.pending":"В очікуванні","admin.moderation.active":"Активно","admin.moderation.approve":"Підтвердити","admin.moderation.block":"Заблокувати","admin.moderation.pending_title":"Пропозиції на підтвердження","admin.moderation.active_title":"Активні пропозиції","admin.moderation.pending_count":"В очікуванні","admin.moderation.active_count":"Активні","admin.moderation.pending_hint":"Нові пропозиції, які очікують підтвердження","admin.moderation.active_hint":"Активні пропозиції, які можна заблокувати","admin.moderation.pending_empty":"Немає нових пропозицій для підтвердження","admin.moderation.active_empty":"Активних пропозицій не знайдено","admin.reports.reviewed":"Розглянуто","admin.reports.dismiss":"Відхилити","admin.pagination.total":"Всього","admin.users.role.change":"Змінити роль","admin.users.search.placeholder":"Пошук за ім'ям або email...","admin.tasks.delete":"Видалити","admin.tasks.delete.confirm":"Видалити це завдання назавжди?","admin.tasks.search.placeholder":"Пошук за назвою...","admin.col.customer":"Замовник","admin.col.reporter":"Скаржник","admin.col.target":"Ціль","admin.filter.all_roles":"Всі ролі","admin.filter.all_statuses":"Всі статуси","admin.reports.target.task":"Завдання","admin.reports.target.user":"Користувач","admin.tab.categories":"Категорії","admin.tab.locations":"Міста і райони","admin.tab.logs":"Логи","admin.tab.plans":"Тарифи","admin.tab.settings":"Налаштування","admin.logs.subtab.ai":"AI логи","admin.logs.subtab.activity":"Активність","admin.logs.subtab.mail":"Mail","admin.logs.subtab.notifications":"Сповіщення","admin.notif_logs.type":"Тип","admin.notif_logs.title":"Заголовок","admin.notif_logs.read":"Прочитано","admin.notif_logs.empty":"Логи сповіщень порожні","admin.stats.notif_chart_title":"Сповіщення по днях","admin.stats.notif_label":"Сповіщення","admin.stats.mail_chart_title":"Email по днях","admin.stats.mail_label":"Emails","admin.filter.all":"Всі","admin.stats.specialists":"Помічники","admin.col.plan":"Тариф","admin.back_home":"На головну","admin.plans.title":"Тарифні пакети","admin.plans.add":"+ Додати тариф","admin.plans.empty":"Тарифи не створено","admin.plans.form.new":"Новий тариф","admin.plans.form.edit":"Редагувати тариф","admin.plans.form.name":"Назва","admin.plans.form.price":"Ціна (EUR)","admin.plans.form.old_price":"Стара ціна (EUR, необов'язково)","admin.plans.form.max_offers":"Макс. відгуків (порожньо = без ліміту)","admin.plans.form.max_cards":"Макс. пропозицій (порожньо = без ліміту)","admin.plans.form.duration_days":"Термін (днів, порожньо = без закінчення)","admin.plans.form.description":"Опис","admin.plans.form.features":"Можливості (по одному на рядок)","admin.plans.form.notify":"Сповіщення про нові замовлення","admin.plans.form.default":"За замовчуванням","admin.plans.form.active":"Активний","admin.plans.form.order":"Порядок","admin.plans.form.role":"Роль","admin.plans.form.tier":"Рівень","admin.plans.form.role.customer":"Замовник","admin.plans.form.role.specialist":"Помічник","admin.plans.form.tier.free":"Безкоштовний","admin.plans.form.tier.pro":"Pro","admin.plans.form.tier.ultimate":"Ultimate","admin.plans.form.section.limits":"Ліміти (порожньо = без обмежень)","admin.plans.form.max_messages_day":"Макс. повідомлень/день","admin.plans.form.max_orders_day":"Макс. замовлень/день","admin.plans.form.max_skills":"Макс. навичок","admin.plans.form.max_profiles":"Макс. профілів","admin.plans.form.max_portfolio":"Макс. елементів портфоліо","admin.plans.form.section.boost":"Множники & Буст","admin.plans.form.search_boost":"Буст у пошуку","admin.plans.form.offers_multiplier":"Множник відгуків","admin.plans.form.section.contact":"Права контактів","admin.plans.form.can_contact_free":"Контакт з безкоштовними користувачами","admin.plans.form.can_contact_pro":"Контакт з Pro користувачами","admin.plans.form.can_contact_all":"Контакт з усіма","admin.plans.form.can_show_contact":"Показувати контакти","admin.plans.form.can_view_phone":"Перегляд телефону","admin.plans.form.section.features":"Можливості","admin.plans.form.upload_video":"Завантаження відео","admin.plans.form.favorites":"Обране","admin.plans.form.google_calendar":"Google Calendar","admin.plans.form.verified_badge":"Знак верифікації","admin.plans.form.highlighted_reviews":"Виділені відгуки","admin.plans.form.personal_site":"Особистий сайт","admin.plans.form.can_help_now":"Статус \xabМожу допомогти\xbb","admin.plans.form.need_help":"Статус \xabПотрібна допомога\xbb","admin.plans.form.auto_response":"Авто-відповідь","admin.plans.form.auto_match":"Авто-підбір","admin.plans.form.price_list":"Прайс-лист","admin.plans.form.instant_dispatch_free":"Миттєва розсилка (безкоштовно)","admin.plans.form.instant_dispatch_pro":"Миттєва розсилка (Pro)","admin.plans.badge.default":"За замовчуванням","admin.plans.badge.inactive":"Неактивний","admin.plans.make_default":"Зробити за замовчуванням","admin.plans.tasks":"Завдань","admin.plans.offers":"Відгуків","admin.plans.cards":"Пропозиції","admin.plans.notify_tasks":"Сповіщення про замовлення","admin.plans.delete.confirm":"Видалити тариф","admin.activity.title":"Журнал активності","admin.activity.event":"Подія","admin.activity.all_events":"Всі події","admin.activity.from":"Від","admin.activity.to":"До","admin.activity.reset":"Скинути","admin.activity.total":"Всього","admin.activity.empty":"Немає записів","admin.mail.event":"Email подія","admin.mail.all_events":"Всі email події","admin.mail.from":"Від","admin.mail.to":"До","admin.mail.reset":"Скинути","admin.mail.total":"Всього","admin.mail.empty":"Немає email логів","admin.mail.recipient":"Отримувач","admin.mail.provider":"Провайдер","admin.mail.details":"Деталі","admin.mail.status":"Статус","admin.mail.success":"Успішно","admin.mail.failed":"Помилка","admin.event.email_sent":"Email надіслано","admin.event.email_failed":"Email не надіслано","admin.event.email_dev":"Email DEV fallback","admin.event.admin_email_test_sent":"Тестовий email надіслано","admin.event.admin_email_test_failed":"Тестовий email не надіслано","admin.logs.empty":"Немає записів","admin.logs.date":"Дата","admin.logs.provider":"Провайдер","admin.logs.model":"Модель","admin.logs.action":"Дія","admin.logs.langs":"Мови","admin.logs.in":"Вхід","admin.logs.out":"Вихід","admin.logs.total":"Разом","admin.logs.ms":"мс","admin.logs.status":"Статус","admin.stats.activity_30d":"Активність за 30 днів","admin.stats.tasks_label":"Заявки","admin.stats.users_label":"Користувачі","admin.stats.specialists_label":"Помічники","admin.stats.tokens_title":"Витрата токенів (по місяцях)","admin.stats.tokens_out":"Вихідні","admin.stats.tokens_in":"Вхідні","admin.stats.tokens_out_label":"Вихідні токени","admin.stats.tokens_in_label":"Вхідні токени","admin.stats.cost_label":"Вартість (USD)","admin.stats.tasks_by_status":"Заявки за статусами","admin.task_status.open":"Відкриті","admin.task_status.in_progress":"В роботі","admin.task_status.completed":"Завершені","admin.task_status.cancelled":"Скасовані","admin.task_status.draft":"Чернетки","admin.settings.tab.general":"Загальні","admin.settings.tab.smtp":"E-Mail","admin.settings.tab.notifications":"Сповіщення","admin.settings.tab.payment":"Оплата","admin.settings.tab.referral":"Реферальна","admin.settings.tab.seo":"SEO","admin.settings.tab.socials":"Соцмережі","admin.settings.tab.telegram":"Telegram Bot","admin.settings.telegram.title":"Налаштування Telegram Bot","admin.settings.telegram.help":"Створіть бота через @BotFather. ID чату дізнайтесь через @userinfobot.","admin.settings.telegram.bot_token":"Bot Token","admin.settings.telegram.admin_chat_id":"Chat ID адміністратора","admin.settings.telegram.admin_chat_hint":"Спочатку надішліть /start своєму боту, потім дізнайтесь chat ID через @userinfobot","admin.settings.telegram.channel_id":"невикористовується","admin.settings.telegram.channels_title":"Канали за мовами","admin.settings.telegram.channel_hint":"Username публічного каналу (@канал) або числовий ID","admin.settings.telegram.notify_registrations":"Сповіщати про нові реєстрації","admin.settings.telegram.notify_registrations_hint":"Надсилати повідомлення при реєстрації нового користувача","admin.settings.telegram.post_new_tasks":"Публікувати нові завдання в канал","admin.settings.telegram.post_new_tasks_hint":"Автоматично публікувати нові завдання в Telegram-канал","admin.settings.telegram.test":"Тест","admin.settings.telegram.verify":"Перевірити токен","admin.settings.telegram.test_fail":"Помилка з'єднання","admin.settings.socials.title":"Посилання на соціальні мережі","admin.settings.socials.hint":"Заповнені посилання відображаються у підвалі сайту","admin.settings.seo.maintenance_label":"Режим обслуговування","admin.settings.seo.maintenance_hint":"Показувати сторінку обслуговування всім відвідувачам","admin.settings.seo.indexing_label":"Індексація пошуковими системами","admin.settings.seo.indexing_hint":"Дозволити пошуковим системам індексувати сайт","admin.settings.seo.head_scripts_label":"Скрипти в (JS)","admin.settings.seo.head_scripts_hint":"Виконується на кожній сторінці (Google Tag Manager, аналітика тощо)","admin.settings.seo.site_title_label":"Заголовок сайту","admin.settings.seo.site_description_label":"Опис сайту (meta description)","admin.settings.referral.title":"Партнерська програма","admin.settings.referral.hint":"Нагороджуйте користувачів, що приводять нових учасників.","admin.settings.referral.enabled_label":"Увімкнено","admin.settings.referral.enabled_hint":"Увімкнути / вимкнути видачу нагород","admin.settings.referral.customer_section":"Для клієнтів","admin.settings.referral.specialist_section":"Для помічників","admin.settings.referral.plan_label":"Тарифний план за реферала","admin.settings.referral.no_plan":"— без плану —","admin.settings.referral.plan_hint":"Цей план буде призначений тому, хто запросив. Якщо його поточний план вищий — додадуться тільки дні.","admin.settings.referral.days_label":"Днів нагороди","admin.settings.referral.days_hint":"Кількість днів, що додаються до терміну дії плану.","admin.settings.general.title":"Загальні налаштування","admin.settings.general.site_name":"Назва сайту","admin.settings.general.site_url":"URL сайту","admin.settings.general.contact_email":"Email для зв'язку","admin.settings.general.support_phone":"Телефон підтримки","admin.settings.smtp.title":"Налаштування SMTP сервера","admin.settings.smtp.hint":"Використовується для надсилання email-сповіщень.","admin.settings.smtp.host":"SMTP Хост","admin.settings.smtp.port":"Порт","admin.settings.smtp.encryption":"Шифрування","admin.settings.smtp.enc.none":"Немає","admin.settings.smtp.enc.tls":"STARTTLS (порт 587)","admin.settings.smtp.enc.ssl":"SSL/TLS (порт 465)","admin.settings.smtp.username":"Ім'я користувача","admin.settings.smtp.password":"Пароль / App Password","admin.settings.smtp.from_name":"Ім'я відправника","admin.settings.smtp.from_email":"Email відправника","admin.settings.smtp.test":"Надіслати тестовий email","admin.settings.smtp.sending":"Надсилання...","admin.settings.payment.hint":"Дані для підключення до ePay Piraeus Bank.","admin.settings.env.test":"Тест (sandbox)","admin.settings.env.prod":"Бойовий режим","admin.settings.env.label":"Середовище","admin.settings.merchant_id":"Merchant ID","admin.settings.api_user":"API User","admin.settings.api_password":"API Password","admin.settings.confirm_url":"Confirmation URL (webhook)","admin.settings.cancel_url":"Cancel URL","admin.settings.active":"Активний","admin.settings.saving":"Збереження...","admin.settings.saved":"Збережено","admin.notif.vars_hint":"Доступні змінні в шаблонах","admin.notif.tmpl.not_set":"Шаблон не налаштовано","admin.notif.tmpl.subject_label":"Тема листа","admin.notif.tmpl.body_label":"Текст листа (HTML)","admin.notif.tmpl.save":"Зберегти","admin.notif.tmpl.close":"Закрити","admin.notif.tmpl.translate":"Авто-переклад на інші мови","admin.notif.tmpl.translating":"Переклад...","admin.notif.tmpl.saving":"Збереження...","admin.notif.email_verification":"Підтвердження email адреси","admin.notif.registration_success":"Успішна реєстрація","admin.notif.password_reset":"Відновлення пароля","admin.notif.new_offer":"Нова пропозиція","admin.notif.new_task":"Нове завдання","admin.notif.offer_accepted":"Пропозицію прийнято","admin.notif.new_message":"Нове повідомлення","admin.notif.offer_declined":"Відхилення пропозиції","admin.notif.offer_other_accepted":"Вибрано іншого виконавця","admin.notif.task_updated":"Зміна завдання","admin.notif.deadline_reminder":"Нагадування про дедлайн","admin.notif.task_archived":"Автознняття завдання","admin.notif.referral_reward":"Реферальна нагорода","admin.email_template.plan_activated":"Тарифи — активація тарифу","admin.email_template.plan_upgraded":"Тарифи — підвищення тарифу","admin.email_template.plan_downgrade_scheduled":"Тарифи — запланований перехід","admin.email_template.plan_downgrade_applied":"Тарифи — застосування переходу","admin.email_template.plan_renewal_reminder":"Тарифи — нагадування про продовження","admin.email_template.plan_insufficient_funds":"Тарифи — недостатньо коштів","pricing.confirm.title":"Підтвердіть вибір тарифу","pricing.confirm.plan":"Тариф","pricing.confirm.prorated":"Залік залишку","pricing.confirm.effective_price":"До оплати","pricing.confirm.your_balance":"Ваш баланс","pricing.confirm.downgrade_info":"Перехід на новий тариф відбудеться автоматично після закінчення поточного періоду.","pricing.confirm.insufficient":"Недостатньо коштів на балансі.","pricing.confirm.top_up":"Поповнити","pricing.confirm.schedule_downgrade":"Запланувати перехід","pricing.confirm.pay":"Оплатити","admin.user_edit.title":"Редагування користувача","admin.user_edit.email":"Email","admin.user_edit.email_verified":"Email підтверджено","admin.user_edit.email_not_verified":"Email не підтверджено","admin.user_edit.verify_email_btn":"Підтвердити вручну","admin.user_edit.verify_email_done":"Email підтверджено!","admin.user_edit.id":"ID","admin.user_edit.registered":"Реєстрація","admin.user_edit.last_seen":"Останній візит","admin.user_edit.lang":"Мова","admin.user_edit.first_name":"Ім'я","admin.user_edit.last_name":"Прізвище","admin.user_edit.phone":"Телефон","admin.user_edit.bio":"Про себе","admin.user_edit.role":"Роль","admin.user_edit.plan":"Тариф","admin.user_edit.no_plan":"— Без тарифу —","admin.user_edit.active":"Активний акаунт","admin.user_edit.published":"Опублікована","admin.user_edit.balance":"Баланс (EUR)","admin.user_edit.skills":"Навички","admin.user_edit.tab.profile":"Профіль","admin.user_edit.tab.account":"Акаунт","admin.user_edit.tab.balance":"Баланс","admin.user_edit.tab.settings":"Налаштування","admin.user_edit.tab.specialist":"Пропозиції","admin.user_edit.tab.site":"Сайт","admin.user_edit.plan_expires":"Тариф закінчується","admin.user_edit.interface_lang":"Мова інтерфейсу","admin.user_edit.comm_languages":"Мови спілкування","admin.user_edit.personal_site_slug":"Персональна сторінка","admin.user_edit.show_contact_info":"Показувати контакти","admin.user_edit.show_contact_info.hint":"Видно замовникам","admin.user_edit.notify_new_tasks":"Сповіщати про нові завдання","admin.user_edit.notify_new_tasks.hint":"Push і email сповіщення","admin.user_edit.notif_messages":"Сповіщення про повідомлення","admin.user_edit.notif_messages.hint":"Нові повідомлення в чаті","admin.user_edit.site_settings":"Налаштування персональної сторінки","admin.user_edit.categories":"Категорії послуг","admin.user_edit.locations":"Райони обслуговування","admin.user_edit.skill_placeholder":"Нова навичка...","admin.user_edit.add_category":"— Виберіть категорію —","admin.user_edit.add_location":"— Виберіть район —","admin.user_edit.specialist_cards":"Пропозиції спеціаліста","admin.user_edit.no_cards":"Пропозиції не знайдено","admin.user_edit.card_title":"Заголовок пропозиції","admin.user_edit.card_description":"Опис","admin.balance.topup.btn":"Поповнити","admin.balance.withdraw.btn":"Списати","admin.balance.modal_hint":"Зміни застосовуються одразу і фіксуються в історії","admin.balance.topup.title":"Поповнення балансу","admin.balance.topup.amount":"Сума","admin.balance.topup.description":"Коментар","admin.balance.topup.description.placeholder":"Наприклад: бонус або ручне поповнення","admin.balance.topup.submit":"Поповнити баланс","admin.balance.withdraw.title":"Зняття балансу","admin.balance.withdraw.amount":"Сума","admin.balance.withdraw.description":"Коментар","admin.balance.withdraw.description.placeholder":"Наприклад: повернення або ручне списання","admin.balance.withdraw.submit":"Списати баланс","admin.user_edit.role.customer":"Замовник","admin.user_edit.role.user":"Користувач","admin.user_edit.role.specialist":"Помічник","admin.user_edit.role.admin":"Адміністратор","common.refresh":"Оновити","common.back_home":"На головну","admin.loc.hint":"Управління містами і районами","admin.loc.add_city":"Нове місто","admin.loc.add_district":"Додати район","admin.loc.new":"Нова локація","admin.loc.edit":"Редагувати локацію","admin.loc.district":"район","admin.loc.empty":"Немає локацій","admin.loc.delete.confirm":"Видалити локацію? Всі райони також будуть видалені.","admin.cat.add_root":"Нова категорія","admin.cat.add_sub":"Підкатегорія","admin.cat.edit":"Редагувати","admin.cat.delete":"Видалити","admin.cat.delete.confirm":"Видалити категорію? Всі підкатегорії також будуть видалені.","admin.cat.slug":"Slug","admin.cat.icon":"Іконка","admin.cat.name_el":"Грецька","admin.cat.name_en":"Англійська","admin.cat.name_ru":"Російська","admin.cat.name_uk":"Українська","admin.cat.active":"Активна","admin.cat.parent":"Батьківська категорія","admin.cat.no_parent":"Верхній рівень","admin.cat.save":"Зберегти","admin.cat.cancel":"Скасувати","admin.cat.empty":"Немає категорій","admin.cat.hint":"Управління категоріями з багаторівневою ієрархією","admin.cat.new":"Нова категорія","admin.cat.subcategory":"підкатегорія","admin.cat.add_child":"Додати підкатегорію","admin.cat.inactive":"Неактивна","admin.event.user_login":"Вхід","admin.event.user_register":"Реєстрація","admin.event.admin_user_deactivate":"Блокування юзера","admin.event.admin_user_activate":"Розблокування юзера","admin.event.admin_user_role_changed":"Зміна ролі","admin.event.admin_task_cancelled":"Скасування завдання","admin.event.admin_task_deleted":"Видалення завдання","admin.event.admin_report_reviewed":"Скаргу розглянуто","admin.event.admin_report_dismissed":"Скаргу відхилено","admin.event.task_created":"Створено завдання","user.online":"Онлайн","user.seen_minutes":"був тут {n} хв тому","user.seen_hours":"був тут {n} год тому","user.seen_yesterday":"був тут вчора","user.seen_days":"був тут {n} дн тому","specialists.title":"Пропозиції","specialists.search":"Пошук спеціаліста...","specialists.search.btn":"Пошук","specialists.empty":"Спеціалістів не знайдено","specialists.no_bio":"Без опису","specialists.view":"Дивитись профіль","specialists.reviews":"відгуків","specialist.favorite":"Додати до обраного","specialist.unfavorite":"Прибрати з обраного","specialist.site_link":"Особистий сайт","favorites.specialists.title":"Обрані спеціалісти","favorites.specialists.empty":"Ви ще не додали спеціалістів до обраного","nav.favorites":"Обране","nav.schedule":"Розклад","nav.find_tasks":"Пошук замовлень","schedule.title":"Мій розклад","schedule.subtitle":"Позначайте дні коли ви вільні або зайняті — замовники побачать вашу доступність","schedule.available":"Вільний","schedule.busy":"Зайнятий","schedule.unset":"Не вказано","schedule.click_hint":"← клік змінює статус по колу","schedule.range_mode":"Виділити діапазон","schedule.range_from":"З {date} — оберіть кінцеву дату","schedule.click_to_set":"Натисніть щоб позначити","schedule.free":"вільно","schedule.busy_count":"зайнято","schedule.free_days":"вільних днів","schedule.googleCalendar":"Google Календар","schedule.connectGoogle":"Підключити Google Календар","schedule.disconnectGoogle":"Відключити","schedule.connectedAs":"Підключено як","schedule.importFromGoogle":"Синхр. з Google","schedule.gcalConnected":"✓ Google Календар підключено","schedule.gcalError":"Помилка підключення Google Календар","schedule.gcalImportDone":"Імпортовано {n} днів з Google Календар","schedule.gcalAutoSyncNote":"Зміни доступності автоматично надсилаються в Google Календар","schedule.gcalConnectDesc":"Підключіть Google Календар для автоматичної синхронізації розкладу","schedule.gcalDisconnectConfirm":"Відключити Google Календар?","find_tasks.title":"Пошук замовлень","find_tasks.for_me":"Для мене","find_tasks.all":"Всі замовлення","find_tasks.by_category":"За категоріями","find_tasks.list":"Списком","find_tasks.already_offered":"Пропозицію надіслано","find_tasks.offer_now":"Відгукнутися","find_tasks.empty_for_me":"Немає замовлень у ваших категоріях","find_tasks.banner_hint":"Знайдіть замовлення за категоріями вашого портфоліо","find_tasks.no_cards":"Створіть портфоліо спеціаліста, щоб бачити підходящі замовлення","find_tasks.add_card":"Створити портфоліо","find_tasks.search":"Пошук замовлень...","find_tasks.tasks_count":"завдань","footer.tagline":"Платформа завдань для Греції","footer.rights":"Всі права захищені.","nav.privacy":"Політика конфіденційності","nav.delete_account":"Видалення акаунту","delete_account.title":"Запит на видалення акаунту","delete_account.subtitle":"Після перевірки вашого запиту ми назавжди видалимо ваш акаунт і дані протягом 30 днів.","delete_account.warning":"Цю дію не можна скасувати. Всі ваші дані будуть видалені безповоротно.","delete_account.reason_label":"Причина (необов'язково)","delete_account.reason_placeholder":"Розкажіть, чому ви хочете видалити акаунт...","delete_account.confirm_label":"Підтверджую, що хочу назавжди видалити свій акаунт","delete_account.submit":"Надіслати запит","delete_account.submitting":"Надсилання...","delete_account.success_title":"Ваш запит отримано","delete_account.success_body":"Ми опрацюємо ваш запит протягом 30 днів і повідомимо вас електронною поштою.","delete_account.login_required":"Для надсилання запиту на видалення необхідно увійти в акаунт.","delete_account.login_btn":"Увійти","app.download_title":"Завантажте мобільний додаток CanHelp","app.download_desc":"Все CanHelp — завжди під рукою. Доступно для Android та iOS.","nav.pricing":"Тарифи","pricing.title":"Тарифи","pricing.subtitle":"Виберіть підходящий план","pricing.role.customer":"Замовник","pricing.role.specialist":"Спеціаліст","pricing.free":"Безкоштовно","pricing.per_month":"міс","pricing.duration":"Термін","pricing.days":"дн.","pricing.current_plan":"Ваш план","pricing.popular":"Популярний","pricing.choose":"Вибрати","pricing.your_plan":"Активний план","pricing.free_default":"За замовчуванням","pricing.compare":"Порівняння функцій","pricing.feature":"Функція","pricing.faq_note":"Оплата списується з балансу CanHelp. Поповнення доступне в розділі Оплата.","pricing.feat.messages":"Повідомлень / день","pricing.feat.orders":"Замовлень / день","pricing.feat.contact_all":"Зв'язок з усіма","pricing.feat.view_phone":"Перегляд телефону","pricing.feat.show_contact":"Показувати контакти","pricing.feat.favorites":"Обране","pricing.feat.verified_badge":"Верифікований бейдж","pricing.feat.google_calendar":"Google Календар","pricing.feat.personal_site":"Персональний сайт","pricing.feat.auto_response":"Авто-відповідь","pricing.feat.auto_match":"Авто-підбір","pricing.feat.highlighted_reviews":"Виділені відгуки","pricing.feat.portfolio":"Елементів пропозиції","pricing.feat.cards":"Кількість пропозицій","pricing.feat.notify_tasks":"Сповіщення про нові завдання","pricing.feat.video":"Відео в пропозиції","upgrade.available_in":"Доступно в","upgrade.cta":"Покращити","dashboard.plan.title":"Мій план","dashboard.plan.expires":"Закінчується через {n} днів","dashboard.plan.upgrade":"Покращити план","dashboard.plan.no_plan":"Безкоштовний план","dashboard.plan.messages":"Повідомлень сьогодні","dashboard.plan.orders":"Замовлень сьогодні","dashboard.plan.limits":"Денні ліміти","dashboard.plan.features":"Функції","dashboard.plan.stats":"Статистика","dashboard.stats.cards":"Портфоліо","dashboard.stats.maxCards":"Макс. портфоліо","dashboard.stats.portfolioItems":"Елементи портфоліо","dashboard.stats.maxPortfolioItems":"Макс. елементи","dashboard.stats.activeOffers":"Активні відгуки","dashboard.stats.reviewsReceived":"Відгуки","dashboard.stats.activeTasks":"Активні завдання","dashboard.stats.completedTasks":"Завершені","status.need_help":"Потрібна допомога","status.active":"Активний","status.toggle_on":"Увімкнути","status.toggle_off":"Вимкнути","fomo.missed_orders":"Пропущено {n} замовлень","fomo.missed_value":"На суму €{v}","fomo.upgrade_hint":"Покращте план — отримуйте більше замовлень","fomo.conversion":"Конверсія завдань","fomo.active":"Активні","fomo.with_offers":"З офертами","fomo.completed":"Завершені","fomo.already_offered":"{n} спеціалістів вже відгукнулися","fomo.specialist_missed":"Ви пропустили {n} замовлень","fomo.top_categories":"Категорії","fomo.offers_received":"пропозицій отримано","fomo.avg_offers":"В середньому {n}/завдання","fomo.completion_rate":"завершено","task.auto_match":"Авто-матч","task.auto_match_results":"Топ спеціалісти","task.no_offer_yet":"Ви ще не надіслали пропозицію","task.make_offer":"Надіслати пропозицію","auto_response.title":"Авто-відповідь","auto_response.enabled":"Увімкнути авто-відповідь","auto_response.min_budget":"Мін. бюджет","auto_response.max_budget":"Макс. бюджет","auto_response.default_price":"Ціна за замовчуванням","auto_response.default_message":"Повідомлення за замовчуванням","auto_response.max_per_day":"Макс. авто-офертів на день","auto_response.save":"Зберегти","auto_response.saved":"Збережено","auto_response.categories":"Категорії","auto_response.locations":"Локації","profile.personal_site":"Персональний сайт","profile.site_slug":"URL slug","profile.site_slug_hint":"Тільки латинські букви, цифри, - і _","profile.site_open":"Відкрити сайт","profile.site_preview":"Ваш сайт","profile.show_contact":"Показувати контакти","profile.show_contact_hint":"Замовники з Pro/Ultimate-планом побачать ваш телефон","gcal.upgrade_required":"Google Календар вимагає план Pro або Ultimate","chat.limit_warning":"Залишилось {n} повідомлень сьогодні","chat.limit_reached":"Ліміт повідомлень вичерпано. Покращте план","chat.upgrade":"Покращити","site.member_since":"З нами з","site.rating":"Рейтинг","site.completed_tasks":"Виконано","site.languages":"Мов","site.photos":"фото","site.contact_form":"Зв'язатися","site.contact_sent":"Повідомлення надіслано!","site.contact_sent_desc":"Спеціаліст зв'яжеться з вами найближчим часом","site.contact_name":"Ім'я","site.contact_name_ph":"Ваше ім'я","site.contact_email_ph":"your@email.com","site.contact_message":"Повідомлення","site.contact_message_ph":"Опишіть ваше завдання...","site.contact_send":"Надіслати","site.share":"Поділитися","site.speaks_languages":"Розмовляє мовами","site.message_sent":"Повідомлення надіслано!","site.message_sent_desc":"Спеціаліст отримає його в чаті","site.message_placeholder":"Напишіть повідомлення...","site.write_to_chat":"Написати в чат","site.auth_required_title":"Потрібна авторизація","site.auth_required_desc":"Щоб написати в чат, необхідно увійти в акаунт CanHelp.","site.auth_login_btn":"Увійти в акаунт","site.auth_contact_form_btn":"Написати через форму зворотного зв'язку","specialist.services":"Послуги","portfolio.title":"Портфоліо","status.can_help_now":"Готовий допомогти","common.not_found":"Сторінку не знайдено","common.anonymous":"Анонімно","specialist_setup.page_title":"Налаштування профілю спеціаліста","specialist_setup.step_of":"Крок {current} з {total}","specialist_setup.next":"Далі","specialist_setup.back":"Назад","specialist_setup.skip":"Пропустити","specialist_setup.finish":"Завершити","specialist_setup.go_to_profile":"Перейти в профіль","specialist_setup.browse_tasks":"Знайти завдання","specialist_setup.step1.title":"Ласкаво просимо!","specialist_setup.step1.subtitle":"Давайте налаштуємо ваш профіль","specialist_setup.step1.desc":"Повний профіль допомагає знаходити більше клієнтів. Слідуйте крокам, щоб створити ідеальний профіль спеціаліста.","specialist_setup.step1.what_next":"Що ми зробимо:","specialist_setup.step1.item1":"Заповнимо основну інформацію","specialist_setup.step1.item2":"Створимо картку послуги","specialist_setup.step1.item3":"Додамо навички і категорії","specialist_setup.step1.item4":"Оберемо географію обслуговування","specialist_setup.step1.item5":"Завантажимо фото портфоліо","specialist_setup.step2.title":"Базовий профіль","specialist_setup.step2.subtitle":"Розкажіть про себе","specialist_setup.step2.bio_label":"Про себе","specialist_setup.step2.bio_placeholder":"Опишіть ваш досвід, послуги які ви пропонуєте...","specialist_setup.step2.phone_label":"Телефон","specialist_setup.step2.phone_placeholder":"+30 6900000000","specialist_setup.step2.photo_label":"Фото профілю","specialist_setup.step2.photo_btn":"Завантажити фото","specialist_setup.step2.photo_uploading":"Завантаження...","specialist_setup.step2.photo_hint":"Відображається у вашому профілі","specialist_setup.step3.title":"Картка послуги","specialist_setup.step3.subtitle":"Створіть вашу першу картку послуги","specialist_setup.step3.title_label":"Назва картки","specialist_setup.step3.title_placeholder":"Напр. Сантехнік, Електрик, Прибирання...","specialist_setup.step3.desc_label":"Опис","specialist_setup.step3.desc_placeholder":"Детально опишіть що ви пропонуєте, досвід, переваги...","specialist_setup.step3.title_required":"Назва обов'язкова","specialist_setup.step4.title":"Навички і категорії","specialist_setup.step4.subtitle":"Додайте навички і виберіть категорії","specialist_setup.step4.skills_label":"Навички","specialist_setup.step4.skills_placeholder":"Напр. Монтаж труб...","specialist_setup.step4.skills_add":"Додати","specialist_setup.step4.categories_label":"Категорії","specialist_setup.step5.title":"Географія обслуговування","specialist_setup.step5.subtitle":"Де ви надаєте послуги?","specialist_setup.step5.hint":"Виберіть міста або конкретні райони","specialist_setup.done.title":"Ваш профіль готовий!","specialist_setup.done.subtitle":"Вітаємо! Профіль налаштовано","specialist_setup.done.desc":"Тепер ви можете отримувати замовлення від клієнтів. Знайдіть завдання, що відповідають вашим навичкам.","support.title":"Підтримка","support.type.label":"Тип звернення","support.type.bug":"Помилка","support.type.suggestion":"Пропозиція","support.type.other":"Інше","support.subject":"Тема","support.subject.placeholder":"Коротко опишіть проблему...","support.body":"Повідомлення","support.body.placeholder":"Детально опишіть проблему або пропозицію...","support.submit":"Надіслати","support.cancel":"Скасувати","support.error":"Помилка надсилання. Спробуйте ще раз.","support.sent.title":"Запит отримано!","support.sent.body":"Ми відповімо на ваш email якнайшвидше.","support.sent.close":"Закрити","admin.tab.support":"Підтримка","admin.tab.backup":"Резервні копії","admin.tab.translations":"Переклади","admin.tab.dbcheck":"Перевірка БД","admin.tab.balances":"Баланс","admin.tab.push":"Push","admin.tab.referrals":"Реферали","admin.search":"Пошук","admin.noData":"Немає даних","admin.cat.order":"Порядок","admin.cat.skills":"Навички","admin.plans.form.max_tasks":"Макс. завдань","admin.settings.referral.shared_section":"Спільні налаштування рефералів","admin.settings.seo.title":"SEO налаштування","admin.backup.title":"Резервні копії","admin.backup.tables":"Таблиці","admin.backup.exportAll":"Експорт всього","admin.backup.importAll":"Імпорт всього","admin.backup.exportTable":"Експорт таблиці","admin.backup.importTable":"Імпорт таблиці","admin.backup.exporting":"Експорт...","admin.backup.importing":"Імпорт...","admin.backup.exportSuccess":"Експорт завершено","admin.backup.importSuccess":"Імпорт завершено","admin.backup.autoBackup":"Автобекап","admin.backup.autoBackupDesc":"Автоматичний щоденний бекап","admin.backup.storedBackups":"Збережені бекапи","admin.backup.noStoredBackups":"Збережених бекапів немає","admin.backup.restore":"Відновити","admin.backup.restoreConfirm":"Відновити з бекапу?","admin.backup.restoreSuccess":"Відновлення завершено","admin.backup.restoring":"Відновлення...","admin.backup.date":"Дата","admin.backup.size":"Розмір","admin.backup.today":"Сьогодні","admin.backup.yesterday":"Вчора","admin.balance.col.operation":"Операція","admin.balance.col.amount":"Сума","admin.balance.col.result":"Баланс","admin.balance.col.description":"Опис","admin.balance.col.date":"Дата","admin.balance.empty":"Записів поки немає","admin.balance.filter.all":"Всі операції","admin.balance.filter.user_id":"Фільтр за userId","admin.balance.kind.topup":"Поповнення","admin.balance.kind.plan_purchase":"Списання за тариф","admin.balance.kind.admin_topup":"Поповнення адміном","admin.balance.kind.admin_adjustment":"Коригування","admin.support.search":"Пошук","admin.support.all_statuses":"Всі статуси","admin.support.all_types":"Всі типи","admin.support.none":"Звернень немає","admin.support.reply":"Відповісти","admin.support.reply_placeholder":"Введіть відповідь...","admin.support.send_reply":"Надіслати відповідь","admin.support.cancel":"Скасувати","admin.support.close":"Закрити","admin.support.status.open":"Відкрито","admin.support.status.in_progress":"В роботі","admin.support.status.resolved":"Вирішено","admin.support.status.closed":"Закрито","admin.support.your_reply":"Ваша відповідь","admin.user_edit.visibility_requirements.title":"Профіль поки не потрапляє в \xabПропозиції\xbb","admin.user_edit.visibility_requirements.hint":"Потрібно виконати умови видимості:","admin.user_edit.visibility_requirements.bio":"Заповнити опис (bio)","admin.user_edit.visibility_requirements.published_card":"Опублікувати хоча б одну картку","admin.user_edit.visibility_requirements.categories":"Вказати категорію в опублікованій картці","admin.user_edit.visibility_requirements.locations":"Вказати локацію в опублікованій картці","auto_response.desc":"Автоматично відповідати на відповідні завдання","auto_response.budget_range":"Бюджет завдання","auto_response.message_placeholder":"Вітаю! Я можу допомогти з цим завданням...","profile.background.title":"Фон шапки профілю","profile.background.hint":"Показується в шапці публічного профілю на web і в мобільному застосунку.","profile.photo.uploading":"Завантаження...","profile.balance.history":"Архів операцій","profile.balance.history.last":"Останні операції","profile.balance.history.empty":"Операцій поки немає","profile.balance.history.balance_after":"Баланс після","profile.balance.history.kind.topup":"Поповнення балансу","profile.balance.history.kind.plan_purchase":"Списання за тариф","profile.balance.history.kind.admin_topup":"Поповнення адміністратором","profile.balance.history.kind.admin_adjustment":"Коригування адміністратором","profile.plan_history.title":"Історія тарифного плану","profile.plan_history.empty":"Історія змін тарифу поки порожня","profile.plan_history.expires":"До","profile.plan_history.days":"днів","profile.plan_history.event.activated":"Активовано","profile.plan_history.event.renewed":"Продовжено","profile.plan_history.event.downgraded":"Понижено","profile.plan_history.event.referral_reward":"Реферальна нагорода","profile.plan_history.event.admin_change":"Змінено адміністратором","profile.plan_history.event.expired":"Закінчився","profile.show_contact_desc":"Дозволяє клієнтам зв’язатися напряму","profile.site.visible.price_list":"Прайслист","site.pricelist":"Прайслист","status.plan_required":"Статус недоступний на поточному тарифі","status.admin_not_applicable":"Для акаунта адміністратора користувацький статус не застосовується"}};function f(a){let b=e[a]??e.el;return(a,c)=>b[a]??e.el[a]??c??a}},13260:(a,b,c)=>{"use strict";c.d(b,{CI:()=>f,Hh:()=>g,Jv:()=>e,wV:()=>h,yK:()=>d});let d=(0,c(69183).M)({baseURL:"https://api.canhelp.gr"}),{signIn:e,signOut:f,signUp:g,useSession:h}=d},14276:()=>{},14365:(a,b,c)=>{"use strict";c.d(b,{Header:()=>o});var d=c(78157),e=c(94496),f=c.n(e),g=c(71159),h=c(13260),i=c(96484),j=c(48178),k=c(31768),l=c(12998);function m(){let{locale:a,setLocale:b}=(0,i.Y)(),[c,e]=(0,k.useState)(!1),f=(0,k.useRef)(null),g=l.YZ.find(b=>b.code===a)??l.YZ[0];return(0,d.jsxs)("div",{ref:f,className:"relative",children:[(0,d.jsxs)("button",{onClick:()=>e(!c),className:"flex items-center gap-1.5 px-2.5 py-1.5 rounded-lg border border-gray-200 hover:border-green-400 hover:bg-green-50 transition text-sm font-medium text-gray-700","aria-label":"Change language",children:[(0,d.jsx)("span",{children:g.code.toUpperCase()}),(0,d.jsx)("svg",{className:`w-3.5 h-3.5 text-gray-400 transition-transform ${c?"rotate-180":""}`,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19 9l-7 7-7-7"})})]}),c&&(0,d.jsx)("div",{className:"absolute right-0 mt-1 w-40 bg-white border border-gray-200 rounded-xl shadow-lg z-50 overflow-hidden",children:l.YZ.map(c=>(0,d.jsxs)("button",{onClick:()=>{b(c.code),e(!1)},className:`w-full flex items-center gap-2.5 px-3.5 py-2.5 text-sm hover:bg-green-50 transition ${a===c.code?"bg-green-50 text-green-700 font-medium":"text-gray-700"}`,children:[(0,d.jsx)("span",{children:c.label}),a===c.code&&(0,d.jsx)("svg",{className:"w-3.5 h-3.5 ml-auto text-green-600",fill:"currentColor",viewBox:"0 0 20 20",children:(0,d.jsx)("path",{fillRule:"evenodd",d:"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z",clipRule:"evenodd"})})]},c.code))})]})}c(91864),c(44826);let n=(0,c(47262).default)(async()=>{},{loadableGenerated:{modules:["components/Header.tsx -> ./SupportModal"]},ssr:!1});function o(){(0,g.useRouter)();let a=(0,g.usePathname)(),{data:b}=(0,h.wV)(),{t:c,locale:e}=(0,i.Y)(),[l,o]=(0,k.useState)(!1),[p,q]=(0,k.useState)(!1),[r,s]=(0,k.useState)(!1),[t,u]=(0,k.useState)(0),[v,w]=(0,k.useState)(0),[x,y]=(0,k.useState)(null),[z,A]=(0,k.useState)(null),B=(0,k.useRef)(null),C=(0,k.useRef)(null);(0,k.useRef)(null),(0,k.useRef)(a);let D=b?.user?.role==="admin",E="specialist"===function(){let{data:a}=(0,h.wV)(),b=a?.user?.role,[c,d]=(0,k.useState)(null);return b?"admin"===b&&c?c:b:null}(),F=(b,c=!1)=>c?a===b:a===b||a.startsWith(b+"/"),G=(a,b=!1)=>`font-medium text-sm transition ${F(a,b)?"text-green-600":"text-gray-600 hover:text-green-600"}`,H=(a,b=!1)=>`flex items-center gap-2 font-medium py-1 ${F(a,b)?"text-green-600":"text-gray-700"}`;return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("header",{ref:C,className:"header-base bg-white border-b border-gray-200 sticky top-0 z-50 transition-all duration-300",children:(0,d.jsxs)("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between h-16 header-content transition-all duration-300",children:[(0,d.jsxs)(f(),{href:"/",className:"flex items-center gap-2 shrink-0",children:[(0,d.jsx)("img",{src:"/logo.png",alt:"CanHelp",className:"w-8 h-8 object-contain"}),(0,d.jsx)("span",{className:"logo-text text-2xl font-bold text-green-600 transition-all duration-300",children:"CanHelp"})]}),(0,d.jsxs)("nav",{className:"hidden md:flex items-center gap-5 ml-auto",children:[E?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(f(),{href:"/tasks",className:G("/tasks"),children:c("nav.find_tasks")}),(0,d.jsx)(f(),{href:"/dashboard",className:G("/dashboard"),children:c("nav.dashboard")})]}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(f(),{href:"/tasks/new",className:G("/tasks/new",!0),children:c("dashboard.new_task")})," ",(0,d.jsx)(f(),{href:"/tasks",className:G("/tasks"),children:c("nav.tasks")})," ",(0,d.jsx)(f(),{href:"/specialists",className:G("/specialists"),children:c("nav.specialists")})]}),(0,d.jsx)(f(),{href:"/pricing",className:G("/pricing",!0),children:c("nav.pricing","Pricing")}),b?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(f(),{href:"/notifications",className:"relative text-gray-600 hover:text-gray-900 flex items-center",children:[(0,d.jsx)("svg",{className:`w-5 h-5 ${t>0?"text-green-600":""}`,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.5,children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75v-.7V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0"})}),t>0&&(0,d.jsx)("span",{className:"absolute -top-1.5 -right-1.5 min-w-[16px] h-4 px-0.5 bg-red-500 text-white text-[10px] font-bold rounded-full flex items-center justify-center leading-none",children:t>99?"99+":t})]}),(0,d.jsxs)(f(),{href:"/chat",className:"relative text-gray-600 hover:text-gray-900 flex items-center",children:[(0,d.jsx)("svg",{className:`w-5 h-5 ${v>0?"text-green-500":""}`,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.5,children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M8 10h.01M12 10h.01M16 10h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z"})}),v>0&&(0,d.jsx)("span",{className:"absolute -top-1.5 -right-1.5 min-w-[16px] h-4 px-0.5 bg-green-500 text-white text-[10px] font-bold rounded-full flex items-center justify-center leading-none",children:v>99?"99+":v})]}),(0,d.jsxs)("div",{className:"relative",ref:B,children:[(0,d.jsxs)("button",{onClick:()=>q(!p),className:"flex items-center gap-1.5 text-sm font-medium text-gray-600 hover:text-green-600",children:[(0,d.jsx)("span",{className:"truncate max-w-[100px]",children:(0,j.H)(b.user.firstName,b.user.lastName,b.user.name)}),"pro"===z&&(0,d.jsx)("span",{className:"inline-flex items-center px-1.5 py-0.5 rounded-full text-[10px] font-bold bg-green-100 text-green-700 leading-none",children:"Pro"}),"ultimate"===z&&(0,d.jsx)("span",{className:"inline-flex items-center px-1.5 py-0.5 rounded-full text-[10px] font-bold bg-gradient-to-r from-amber-400 via-yellow-400 to-amber-400 text-gray-900 shadow-sm shadow-amber-300/50 leading-none",children:"★"}),(0,d.jsx)("svg",{className:"w-4 h-4 shrink-0",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19 9l-7 7-7-7"})})]}),p&&(0,d.jsxs)("div",{className:"absolute right-0 mt-2 w-52 bg-white border border-gray-200 rounded-xl shadow-lg py-1 z-50",children:[E?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(f(),{href:"/tasks/new",className:"flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50",onClick:()=>q(!1),children:[(0,d.jsx)("svg",{className:"w-4 h-4 text-gray-400 shrink-0",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 4v16m8-8H4"})}),c("nav.new_task")]}),(0,d.jsxs)(f(),{href:"/specialists",className:"flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50",onClick:()=>q(!1),children:[(0,d.jsx)("svg",{className:"w-4 h-4 text-gray-400 shrink-0",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z"})}),c("nav.specialists")]})]}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(f(),{href:"/notifications",className:"flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50",onClick:()=>q(!1),children:[(0,d.jsx)("svg",{className:`w-4 h-4 shrink-0 ${t>0?"text-green-600":"text-gray-400"}`,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75v-.7V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0"})}),(0,d.jsxs)("span",{className:"flex items-center gap-1.5",children:[c("nav.notifications"),t>0&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 bg-red-500 text-white text-[10px] font-bold rounded-full leading-none",children:t>99?"99+":t})]})]}),(0,d.jsxs)(f(),{href:"/chat",className:"flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50",onClick:()=>q(!1),children:[(0,d.jsx)("svg",{className:`w-4 h-4 shrink-0 ${v>0?"text-green-500":"text-gray-400"}`,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M8 10h.01M12 10h.01M16 10h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z"})}),(0,d.jsxs)("span",{className:"flex items-center gap-1.5",children:[c("nav.chat"),v>0&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 bg-green-500 text-white text-[10px] font-bold rounded-full leading-none",children:v>99?"99+":v})]})]}),(0,d.jsxs)(f(),{href:"/dashboard",className:"flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50",onClick:()=>q(!1),children:[(0,d.jsx)("svg",{className:"w-4 h-4 text-gray-400 shrink-0",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6"})}),c("nav.dashboard")]})]}),(E||D)&&(0,d.jsxs)(f(),{href:"/schedule",className:"flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50",onClick:()=>q(!1),children:[(0,d.jsx)("svg",{className:"w-4 h-4 text-gray-400 shrink-0",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"})}),c("nav.schedule")]}),D&&(0,d.jsxs)(f(),{href:"/admin",className:"flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50",onClick:()=>q(!1),children:[(0,d.jsxs)("svg",{className:"w-4 h-4 text-gray-400 shrink-0",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:[(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z"}),(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"})]}),c("nav.admin")]}),(0,d.jsxs)(f(),{href:"/profile",className:"flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50",onClick:()=>q(!1),children:[(0,d.jsx)("svg",{className:"w-4 h-4 text-gray-400 shrink-0",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z"})}),c("nav.profile")]}),(0,d.jsxs)(f(),{href:"/favorites",className:"flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50",onClick:()=>q(!1),children:[(0,d.jsx)("svg",{className:"w-4 h-4 text-gray-400 shrink-0",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z"})}),c("nav.favorites")]}),(0,d.jsx)("hr",{className:"my-1 border-gray-100"}),(0,d.jsxs)("button",{className:"w-full flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-green-50",onClick:()=>{q(!1),s(!0)},children:[(0,d.jsx)("svg",{className:"w-4 h-4 text-gray-400 shrink-0",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M18.364 5.636l-3.536 3.536m0 5.656l3.536 3.536M9.172 9.172L5.636 5.636m3.536 9.192l-3.536 3.536M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-5 0a4 4 0 11-8 0 4 4 0 018 0z"})}),c("support.title")]}),(0,d.jsx)("hr",{className:"my-1 border-gray-100"}),(0,d.jsxs)("button",{className:"w-full flex items-center gap-2.5 px-4 py-2 text-sm text-red-500 hover:bg-red-50",onClick:()=>{q(!1),(0,h.CI)().then(()=>{window.location.href="/"})},children:[(0,d.jsx)("svg",{className:"w-4 h-4 shrink-0",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1"})}),c("nav.logout")]})]})]})]}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(f(),{href:"/login",className:"text-gray-600 hover:text-green-600 font-medium text-sm",children:c("nav.login")}),(0,d.jsx)(f(),{href:"/register",className:"bg-green-600 text-white px-4 py-2 rounded-lg hover:bg-green-700 font-medium text-sm",children:c("nav.register")})]}),(0,d.jsx)(m,{})]}),(0,d.jsxs)("div",{className:"md:hidden flex items-center gap-2",children:[(0,d.jsx)(m,{}),(0,d.jsx)("button",{className:"p-2",onClick:()=>o(!l),"aria-label":"Toggle menu",children:(0,d.jsx)("svg",{className:"w-5 h-5 text-gray-600",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:l?(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 18L18 6M6 6l12 12"}):(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M4 6h16M4 12h16M4 18h16"})})})]})]}),l&&(0,d.jsxs)("div",{className:"md:hidden py-4 border-t border-gray-100 flex flex-col gap-3",children:[E?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(f(),{href:"/tasks",className:H("/tasks"),onClick:()=>o(!1),children:[(0,d.jsx)("svg",{className:"w-4 h-4 shrink-0",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"})}),c("nav.find_tasks")]}),(0,d.jsxs)(f(),{href:"/dashboard",className:H("/dashboard"),onClick:()=>o(!1),children:[(0,d.jsx)("svg",{className:"w-4 h-4 shrink-0",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6"})}),c("nav.dashboard")]})]}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(f(),{href:"/tasks/new",className:H("/tasks/new",!0),onClick:()=>o(!1),children:[(0,d.jsx)("svg",{className:"w-4 h-4 shrink-0",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 4v16m8-8H4"})}),c("nav.new_task")]}),(0,d.jsxs)(f(),{href:"/tasks",className:H("/tasks"),onClick:()=>o(!1),children:[(0,d.jsx)("svg",{className:"w-4 h-4 shrink-0",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"})}),c("nav.tasks")]}),(0,d.jsxs)(f(),{href:"/specialists",className:H("/specialists"),onClick:()=>o(!1),children:[(0,d.jsx)("svg",{className:"w-4 h-4 shrink-0",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z"})}),c("nav.specialists")]})]}),b?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(f(),{href:"/chat",className:H("/chat",!0),onClick:()=>o(!1),children:[(0,d.jsx)("svg",{className:`w-4 h-4 shrink-0 ${v>0?"text-green-500":""}`,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M8 10h.01M12 10h.01M16 10h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z"})}),c("nav.chat"),v>0&&(0,d.jsx)("span",{className:"ml-1 px-1.5 py-0.5 bg-green-500 text-white text-[10px] font-bold rounded-full",children:v})]}),E?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(f(),{href:"/tasks/new",className:H("/tasks/new",!0),onClick:()=>o(!1),children:[(0,d.jsx)("svg",{className:"w-4 h-4 shrink-0",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 4v16m8-8H4"})}),c("nav.new_task")]}),(0,d.jsxs)(f(),{href:"/specialists",className:H("/specialists"),onClick:()=>o(!1),children:[(0,d.jsx)("svg",{className:"w-4 h-4 shrink-0",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z"})}),c("nav.specialists")]})]}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(f(),{href:"/notifications",className:H("/notifications",!0),onClick:()=>o(!1),children:[(0,d.jsx)("svg",{className:`w-4 h-4 shrink-0 ${t>0?"text-green-600":""}`,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75v-.7V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0"})}),(0,d.jsxs)("span",{className:"flex items-center gap-1.5",children:[c("nav.notifications"),t>0&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 bg-red-500 text-white text-[10px] font-bold rounded-full",children:t>99?"99+":t})]})]}),(0,d.jsxs)(f(),{href:"/dashboard",className:H("/dashboard"),onClick:()=>o(!1),children:[(0,d.jsx)("svg",{className:"w-4 h-4 shrink-0",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6"})}),c("nav.dashboard")]})]}),(0,d.jsxs)(f(),{href:"/favorites",className:H("/favorites",!0),onClick:()=>o(!1),children:[(0,d.jsx)("svg",{className:"w-4 h-4 shrink-0",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z"})}),c("nav.favorites")]}),(E||D)&&(0,d.jsxs)(f(),{href:"/schedule",className:H("/schedule",!0),onClick:()=>o(!1),children:[(0,d.jsx)("svg",{className:"w-4 h-4 text-gray-400",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"})}),c("nav.schedule")]}),D&&(0,d.jsxs)(f(),{href:"/admin",className:H("/admin"),onClick:()=>o(!1),children:[(0,d.jsxs)("svg",{className:"w-4 h-4 text-gray-400",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:[(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z"}),(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"})]}),c("nav.admin")]}),(0,d.jsxs)(f(),{href:"/profile",className:H("/profile",!0),onClick:()=>o(!1),children:[(0,d.jsx)("svg",{className:"w-4 h-4 text-gray-400",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z"})}),c("nav.profile")]}),(0,d.jsxs)("button",{onClick:()=>{o(!1),(0,h.CI)().then(()=>{window.location.href="/"})},className:"flex items-center gap-2 text-left text-red-500 py-1 font-medium",children:[(0,d.jsx)("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1"})}),c("nav.logout")]})]}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(f(),{href:"/login",className:"text-gray-700 font-medium py-1",onClick:()=>o(!1),children:c("nav.login")}),(0,d.jsx)(f(),{href:"/register",className:"text-green-600 font-medium py-1",onClick:()=>o(!1),children:c("nav.register")})]})]})]})}),x&&(0,d.jsx)("div",{className:"fixed bottom-5 right-5 z-[200] max-w-sm w-full",children:(0,d.jsxs)("div",{className:"bg-white border border-gray-200 rounded-xl shadow-xl p-4 flex items-start gap-3 animate-fade-in",children:[(0,d.jsx)("span",{className:"text-2xl shrink-0",children:"\uD83D\uDCAC"}),(0,d.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,d.jsx)("p",{className:"font-semibold text-gray-900 text-sm",children:c("chat.toast_title")}),(0,d.jsx)("p",{className:"text-xs text-gray-500 truncate mt-0.5",children:x.body})]}),(0,d.jsxs)("div",{className:"flex flex-col items-end gap-2 shrink-0",children:[(0,d.jsx)("button",{onClick:()=>y(null),className:"text-gray-400 hover:text-gray-600 text-lg leading-none","aria-label":"close",children:"\xd7"}),(0,d.jsx)(f(),{href:`/chat?room=${x.roomId}`,onClick:()=>y(null),className:"text-xs text-green-600 hover:underline font-medium",children:c("chat.toast_open")})]})]})}),r&&(0,d.jsx)(n,{onClose:()=>s(!1)})]})}},15043:(a,b,c)=>{"use strict";c.d(b,{Footer:()=>k});var d=c(78157),e=c(96484),f=c(31768),g=c(94496),h=c.n(g);let i=[{key:"telegram",label:"Telegram",hoverClass:"hover:text-sky-500",svg:''},{key:"instagram",label:"Instagram",hoverClass:"hover:text-pink-500",svg:''},{key:"facebook",label:"Facebook",hoverClass:"hover:text-green-600",svg:''},{key:"twitter",label:"X",hoverClass:"hover:text-gray-900",svg:''},{key:"youtube",label:"YouTube",hoverClass:"hover:text-red-600",svg:''},{key:"tiktok",label:"TikTok",hoverClass:"hover:text-black",svg:''},{key:"whatsapp",label:"WhatsApp",hoverClass:"hover:text-green-500",svg:''},{key:"viber",label:"Viber",hoverClass:"hover:text-purple-600",svg:''}];function j({className:a="",links:b}){let c=i.filter(({key:a})=>b?.[a]);return 0===c.length?null:(0,d.jsx)("div",{className:`flex gap-4 flex-wrap ${a}`,children:c.map(({key:a,label:c,hoverClass:e,svg:f})=>(0,d.jsx)("a",{href:b[a],target:"_blank",rel:"noopener noreferrer","aria-label":c,className:`text-gray-500 transition ${e}`,children:(0,d.jsx)("svg",{width:"22",height:"22",viewBox:"0 0 24 24",fill:"currentColor",dangerouslySetInnerHTML:{__html:f}})},a))})}function k(){let{t:a}=(0,e.Y)(),b=new Date().getFullYear(),[c,g]=(0,f.useState)({});return(0,d.jsx)("footer",{className:"bg-white border-t border-gray-200 mt-16",children:(0,d.jsxs)("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12",children:[(0,d.jsxs)("div",{className:"flex flex-col md:flex-row justify-between items-start gap-10",children:[(0,d.jsxs)("div",{className:"flex-1 min-w-[200px] flex flex-col items-start",children:[(0,d.jsx)("span",{className:"logo-text text-3xl text-green-700 font-bold mb-2",children:"CanHelp"}),(0,d.jsx)("p",{className:"text-base text-gray-600 mb-4",children:a("footer.slogan")})]}),(0,d.jsxs)("div",{className:"flex-1 min-w-[180px]",children:[(0,d.jsx)("h3",{className:"text-lg font-semibold text-gray-900 mb-3",children:a("footer.links")}),(0,d.jsxs)("ul",{className:"space-y-2",children:[(0,d.jsx)("li",{children:(0,d.jsx)(h(),{href:"/",className:"hover:text-green-600 transition",children:a("nav.home")})}),(0,d.jsx)("li",{children:(0,d.jsx)(h(),{href:"/tasks",className:"hover:text-green-600 transition",children:a("nav.tasks")})}),(0,d.jsx)("li",{children:(0,d.jsx)(h(),{href:"/specialists",className:"hover:text-green-600 transition",children:a("nav.specialists")})}),(0,d.jsx)("li",{children:(0,d.jsx)(h(),{href:"/pricing",className:"hover:text-green-600 transition",children:a("nav.pricing")})}),(0,d.jsx)("li",{children:(0,d.jsx)(h(),{href:"/support",className:"hover:text-green-600 transition",children:a("support.title")})}),(0,d.jsx)("li",{children:(0,d.jsx)(h(),{href:"/privacy",className:"hover:text-green-600 transition",children:a("nav.privacy")})}),(0,d.jsx)("li",{children:(0,d.jsx)(h(),{href:"/delete-account",className:"hover:text-red-500 transition",children:a("nav.delete_account")})})]})]}),(0,d.jsxs)("div",{className:"flex-1 min-w-[180px]",children:[(0,d.jsx)("h3",{className:"text-lg font-semibold text-gray-900 mb-3",children:a("footer.socials")}),(0,d.jsx)("p",{className:"text-gray-500 text-sm mb-2",children:"info@canhelp.gr"}),(0,d.jsx)(j,{className:"mt-2",links:c})]})]}),(0,d.jsxs)("div",{className:"mt-10 border-t border-gray-100 pt-6 text-center text-gray-400 text-sm",children:["\xa9 ",b," CanHelp. ",a("footer.rights")]})]})})}},20138:(a,b,c)=>{"use strict";c.d(b,{LocaleProvider:()=>e});var d=c(25459);let e=(0,d.registerClientReference)(function(){throw Error("Attempted to call LocaleProvider() from the server but LocaleProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/opt/canhelp/apps/web/src/context/locale.tsx","LocaleProvider");(0,d.registerClientReference)(function(){throw Error("Attempted to call useLocale() from the server but useLocale is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/opt/canhelp/apps/web/src/context/locale.tsx","useLocale")},21046:(a,b,c)=>{"use strict";c.d(b,{ScrollToTopButton:()=>f});var d=c(78157),e=c(31768);function f(){let[a,b]=(0,e.useState)(!1);return(0,d.jsx)("button",{className:`scroll-to-top-btn${a?" visible":""}`,"aria-label":"Back to top",onClick:()=>window.scrollTo({top:0,behavior:"smooth"}),children:(0,d.jsx)("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:(0,d.jsx)("path",{d:"M10 16V4M10 4L4 10M10 4L16 10",stroke:"white",strokeWidth:"2.8",strokeLinecap:"round",strokeLinejoin:"round"})})})}},28222:(a,b,c)=>{"use strict";c.d(b,{AdminRolePreview:()=>d});let d=(0,c(25459).registerClientReference)(function(){throw Error("Attempted to call AdminRolePreview() from the server but AdminRolePreview is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/opt/canhelp/apps/web/src/components/AdminRolePreview.tsx","AdminRolePreview")},29072:(a,b,c)=>{Promise.resolve().then(c.bind(c,28222)),Promise.resolve().then(c.bind(c,39348)),Promise.resolve().then(c.bind(c,67674)),Promise.resolve().then(c.bind(c,32948)),Promise.resolve().then(c.bind(c,20138)),Promise.resolve().then(c.bind(c,1697))},30460:()=>{},32948:(a,b,c)=>{"use strict";c.d(b,{ScrollToTopButton:()=>d});let d=(0,c(25459).registerClientReference)(function(){throw Error("Attempted to call ScrollToTopButton() from the server but ScrollToTopButton is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/opt/canhelp/apps/web/src/components/ScrollToTopButton.tsx","ScrollToTopButton")},33506:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>g});var d=c(5939),e=c(3498),f=c.n(e);function g(){return(0,d.jsx)("div",{className:"min-h-screen flex items-center justify-center text-center px-4",children:(0,d.jsxs)("div",{children:[(0,d.jsx)("h1",{className:"text-8xl font-bold text-green-600 mb-4",children:"404"}),(0,d.jsx)("p",{className:"text-xl text-gray-700 mb-6",children:"Η σελίδα δεν βρέθηκε"}),(0,d.jsx)(f(),{href:"/",className:"bg-green-600 text-white px-6 py-3 rounded-xl font-semibold hover:bg-green-700",children:"Επιστροφή στην Αρχική"})]})})}},38800:(a,b,c)=>{Promise.resolve().then(c.bind(c,12696)),Promise.resolve().then(c.bind(c,15043)),Promise.resolve().then(c.bind(c,14365)),Promise.resolve().then(c.bind(c,21046)),Promise.resolve().then(c.bind(c,96484)),Promise.resolve().then(c.bind(c,56003))},39348:(a,b,c)=>{"use strict";c.d(b,{Footer:()=>d});let d=(0,c(25459).registerClientReference)(function(){throw Error("Attempted to call Footer() from the server but Footer is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/opt/canhelp/apps/web/src/components/Footer.tsx","Footer")},45639:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>e});var d=c(43560);let e=async a=>[{type:"image/png",sizes:"1024x1024",url:(0,d.fillMetadataSegment)(".",await a.params,"apple-icon.png")+"?5d298b9734cd2682"}]},47570:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>o,generateMetadata:()=>n});var d=c(5939),e=c(56057),f=c(11110);c(14276);var g=c(67674),h=c(39348),i=c(20138),j=c(1697),k=c(32948),l=c(28222);let m=(0,f.cache)(async()=>{try{let a=process.env.INTERNAL_API_URL||"http://localhost:4000",b=await fetch(`${a}/api/admin/seo-public`,{next:{revalidate:60}});if(!b.ok)return{};return b.json()}catch{return{}}});async function n(){let a=await m(),b=await (0,e.UL)(),c=b.get("canhelp_locale")?.value,d=["el","en","ru","uk"].includes(c??"")?c:"el";return{title:a[`seo.siteTitle.${d}`]||a["seo.siteTitle.el"]||a["seo.siteTitle"]||"CanHelp — Βρες ειδικό για κάθε δουλειά",description:a[`seo.siteDescription.${d}`]||a["seo.siteDescription.el"]||a["seo.siteDescription"]||"Η ελληνική πλατφόρμα για online ανάθεση εργασιών. Βρες επαγγελματίες για καθαρισμό, υδραυλικά, μαθήματα και πολλά άλλα.",keywords:"εργασίες, ειδικοί, Ελλάδα, freelance, καθαρισμός, υδραυλικά",robots:"false"===a["seo.indexingEnabled"]?"noindex, nofollow":void 0}}async function o({children:a}){let b=await (0,e.UL)(),c=((await (0,e.b3)()).get("x-pathname")??"").startsWith("/site/"),f=b.get("canhelp_locale")?.value,n=["el","en","uk","ru"].includes(f)?f:"el",o=decodeURIComponent(b.get("canhelp_location")?.value??""),p=(await m())["seo.headScripts"]??"",q=[];if(p.trim()){let a,b=/]*)>([\s\S]*?)<\/script>|]*)\/>/gi;for(;null!==(a=b.exec(p));){let b=a[1]??a[3]??"",c=(a[2]??"").trim(),d=b.match(/src=["']([^"']+)["']/);q.push({src:d?.[1],async:/\basync\b/i.test(b),defer:/\bdefer\b/i.test(b),inline:c||void 0})}}return(0,d.jsxs)("html",{lang:n,suppressHydrationWarning:!0,children:[(0,d.jsx)("head",{children:q.map((a,b)=>a.src?(0,d.jsx)("script",{src:a.src,async:a.async,defer:a.defer},b):a.inline?(0,d.jsx)("script",{dangerouslySetInnerHTML:{__html:a.inline}},b):null)}),(0,d.jsx)("body",{children:(0,d.jsx)(i.LocaleProvider,{initialLocale:n,children:(0,d.jsx)(j.LocationProvider,{initialSlug:o,children:c?(0,d.jsx)("main",{className:"min-h-screen",children:a}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(g.Header,{}),(0,d.jsx)("main",{className:"min-h-screen",children:a}),(0,d.jsx)(k.ScrollToTopButton,{}),(0,d.jsx)(l.AdminRolePreview,{}),(0,d.jsx)(h.Footer,{})]})})})})]})}},48178:(a,b,c)=>{"use strict";function d(a){if(!a?.trim())return"—";let b=a.trim().split(/\s+/);return b.length<2||!b[1]?b[0]:`${b[0]} ${b[1][0].toUpperCase()}.`}function e(a,b,c){if(a?.trim()){let c=b?.trim();return c?`${a.trim()} ${c[0].toUpperCase()}.`:a.trim()}return d(c)}c.d(b,{E:()=>d,H:()=>e})},49046:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,94496,23))},56003:(a,b,c)=>{"use strict";c.d(b,{LocationProvider:()=>g,z:()=>h});var d=c(78157),e=c(31768);c(91864);let f=(0,e.createContext)({locationSlug:"",locationTree:[],locationLoading:!0,setLocation:()=>{},getLabel:()=>""});function g({children:a,initialSlug:b=""}){let[c,g]=(0,e.useState)(b),[h,i]=(0,e.useState)([]),[j,k]=(0,e.useState)(!0),l=(0,e.useCallback)(a=>{g(a);let b=encodeURIComponent(a);document.cookie=`canhelp_location=${b}; path=/; max-age=31536000; SameSite=Lax`},[]),m=(0,e.useCallback)(a=>{if(!c)return"";for(let b of h){if(b.slug===c)return b.names[a]??b.names.el;for(let d of b.children??[])if(d.slug===c)return d.names[a]??d.names.el}return c},[c,h]);return(0,d.jsx)(f.Provider,{value:{locationSlug:c,locationTree:h,locationLoading:j,setLocation:l,getLabel:m},children:a})}function h(){return(0,e.useContext)(f)}},64271:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,58671,23)),Promise.resolve().then(c.t.bind(c,56542,23)),Promise.resolve().then(c.t.bind(c,88248,23)),Promise.resolve().then(c.t.bind(c,49743,23)),Promise.resolve().then(c.t.bind(c,96231,23)),Promise.resolve().then(c.t.bind(c,10959,23)),Promise.resolve().then(c.t.bind(c,72041,23)),Promise.resolve().then(c.t.bind(c,95094,23)),Promise.resolve().then(c.t.bind(c,67487,23))},67674:(a,b,c)=>{"use strict";c.d(b,{Header:()=>d});let d=(0,c(25459).registerClientReference)(function(){throw Error("Attempted to call Header() from the server but Header is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/opt/canhelp/apps/web/src/components/Header.tsx","Header")},72088:()=>{},72519:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,48365,23)),Promise.resolve().then(c.t.bind(c,64596,23)),Promise.resolve().then(c.t.bind(c,56186,23)),Promise.resolve().then(c.t.bind(c,67805,23)),Promise.resolve().then(c.t.bind(c,27561,23)),Promise.resolve().then(c.t.bind(c,47569,23)),Promise.resolve().then(c.t.bind(c,42747,23)),Promise.resolve().then(c.t.bind(c,56676,23)),Promise.resolve().then(c.bind(c,97225))},85998:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,3498,23))},91864:(a,b,c)=>{"use strict";c.d(b,{$7:()=>Q,$H:()=>n,$M:()=>A,Bb:()=>aW,Bm:()=>I,Bq:()=>a$,Br:()=>ap,C0:()=>G,CX:()=>aE,Ck:()=>a_,Cs:()=>bd,D1:()=>aS,Em:()=>e,F7:()=>q,F9:()=>D,FI:()=>aI,Fu:()=>f,GB:()=>aj,GE:()=>W,Gp:()=>bk,H:()=>bf,H6:()=>s,He:()=>_,I:()=>aN,Ic:()=>a2,Ip:()=>B,Je:()=>bh,K7:()=>R,KD:()=>O,KZ:()=>bv,Lb:()=>o,Lp:()=>aF,ML:()=>bn,Mm:()=>aa,NL:()=>C,Nt:()=>ax,O8:()=>bt,OM:()=>aR,OV:()=>bo,OX:()=>az,On:()=>w,P0:()=>bb,QN:()=>v,QY:()=>aO,RN:()=>bq,RQ:()=>bl,Rt:()=>j,S$:()=>bp,S9:()=>T,Sw:()=>k,T9:()=>be,Tr:()=>z,U9:()=>a4,UE:()=>br,UT:()=>h,Uq:()=>X,V:()=>M,V7:()=>au,VL:()=>x,VM:()=>p,Vs:()=>K,Wi:()=>$,Xz:()=>aT,YQ:()=>aL,Yj:()=>ah,Z2:()=>a3,Zp:()=>u,_z:()=>y,aT:()=>l,bR:()=>aC,bW:()=>J,bc:()=>bj,bi:()=>aq,bx:()=>r,cJ:()=>as,cS:()=>Z,cl:()=>aK,cp:()=>aM,dE:()=>Y,eR:()=>aX,eU:()=>al,ew:()=>a9,f5:()=>aZ,fP:()=>U,fm:()=>a8,fu:()=>aP,g0:()=>ba,g1:()=>at,gg:()=>g,hD:()=>bc,hl:()=>aU,hp:()=>V,iN:()=>aQ,i_:()=>S,j_:()=>am,jd:()=>ab,jg:()=>aG,k_:()=>av,lC:()=>i,mq:()=>bu,nT:()=>bw,nf:()=>ai,oD:()=>a1,oh:()=>a6,oq:()=>ad,pD:()=>L,pK:()=>a7,q7:()=>t,qT:()=>aA,qX:()=>aJ,qt:()=>ao,rC:()=>aD,rl:()=>a5,sD:()=>N,s_:()=>ae,st:()=>F,td:()=>aB,ts:()=>m,u0:()=>bx,u4:()=>ar,uQ:()=>ag,v9:()=>H,vD:()=>a0,vh:()=>bs,vy:()=>ac,wc:()=>aH,wl:()=>af,yJ:()=>aw,yO:()=>an,yk:()=>E,z4:()=>bg,z5:()=>ak,z6:()=>bi,zB:()=>aV,zR:()=>ay,zZ:()=>P,zc:()=>aY,zk:()=>bm});let d=process.env.INTERNAL_API_URL||"http://localhost:4000";async function e(a,b){let c=`${d}/api${a}`;console.log("[api] SSR fetch",c);let e=await fetch(c,{...b,credentials:"include",headers:{"Content-Type":"application/json",...b?.headers}});if(!e.ok){let a=await e.json().catch(()=>({error:e.statusText}));throw Error("string"==typeof a.error?a.error:"string"==typeof a.message?a.message:e.statusText||"Request failed")}return e.json()}let f=()=>e("/tasks/my"),g=a=>e(`/tasks/${a}`),h=a=>e("/tasks",{method:"POST",body:JSON.stringify(a)}),i=(a,b)=>e(`/tasks/${a}`,{method:"PATCH",body:JSON.stringify(b)}),j=a=>e(`/tasks/${a}/complete`,{method:"PATCH"}),k=a=>e(`/offers?taskId=${a}`),l=()=>e("/offers/my"),m=a=>e("/offers",{method:"POST",body:JSON.stringify(a)}),n=a=>e(`/offers/${a}/accept`,{method:"PATCH"}),o=a=>e(`/offers/${a}/decline`,{method:"PATCH"}),p=(a,b)=>e(`/users/${a}/profile${b?`?locale=${encodeURIComponent(b)}`:""}`),q=a=>{let b=a?"?"+new URLSearchParams(a):"";return e(`/users/specialists${b}`)},r=a=>e("/reviews",{method:"POST",body:JSON.stringify(a)}),s=a=>e(`/reviews/task/${a}`),t=()=>e("/reviews/my"),u=()=>e("/chat/rooms"),v=a=>e(`/chat/direct/${a}`),w=a=>e(`/chat/can-message/${a}`),x=a=>e(`/chat/rooms/${a}/messages`),y=(a,b)=>e("/chat/messages",{method:"POST",body:JSON.stringify({roomId:a,body:b})}),z=()=>e("/notifications"),A=()=>e("/notifications/count"),B=a=>e(`/notifications/${a}/read`,{method:"PATCH"}),C=()=>e("/notifications/read-all",{method:"PATCH"}),D=a=>e(`/notifications?type=task_invite&referenceId=${a}`),E=a=>e(`/notifications/${a}`,{method:"DELETE"}),F=()=>e("/users/me/referral"),G=a=>e("/users/me/referral/apply",{method:"POST",body:JSON.stringify({refCode:a})}),H=a=>e(`/reviews/user/${a}`),I=a=>e(`/reviews/user/${a}/rating`),J=()=>e("/categories"),K=()=>e("/locations"),L=()=>e("/favorites/specialists"),M=a=>e(`/favorites/specialists/${a}`,{method:"POST"}),N=a=>e(`/favorites/specialists/${a}`,{method:"DELETE"}),O=()=>e("/admin/categories"),P=a=>e("/admin/categories",{method:"POST",body:JSON.stringify(a)}),Q=(a,b)=>e(`/admin/categories/${a}`,{method:"PATCH",body:JSON.stringify(b)}),R=a=>e(`/admin/categories/${a}`,{method:"DELETE"}),S=a=>e(`/admin/skills?categorySlug=${encodeURIComponent(a)}`),T=a=>e("/admin/skills",{method:"POST",body:JSON.stringify(a)}),U=(a,b)=>e(`/admin/skills/${a}`,{method:"PATCH",body:JSON.stringify(b)}),V=a=>e(`/admin/skills/${a}`,{method:"DELETE"}),W=a=>e(`/admin/skills/dedup${a?`?categorySlug=${encodeURIComponent(a)}`:""}`),X=(a,b)=>e("/admin/skills/dedup/merge",{method:"POST",body:JSON.stringify({keepId:a,deleteIds:b})}),Y=()=>e("/admin/stats"),Z=(a=1,b,c)=>{let d=new URLSearchParams({page:String(a),limit:"20"});return b&&d.set("q",b),c&&d.set("role",c),e(`/admin/users?${d}`)},$=a=>e(`/admin/users/${a}/deactivate`,{method:"PATCH"}),_=a=>e(`/admin/users/${a}/activate`,{method:"PATCH"}),aa=(a,b)=>e(`/admin/users/${a}/role`,{method:"PATCH",body:JSON.stringify({role:b})}),ab=a=>e(`/admin/users/${a}`),ac=a=>e(`/admin/users/${a}/specialist-cards`),ad=(a,b)=>e(`/admin/specialist-cards/${a}`,{method:"PATCH",body:JSON.stringify(b)}),ae=(a=1,b)=>{let c=new URLSearchParams({page:String(a),limit:"20"});return b&&"all"!==b&&c.set("status",b),e(`/admin/specialist-cards?${c}`)},af=(a,b)=>e(`/admin/users/${a}`,{method:"PATCH",body:JSON.stringify(b)}),ag=a=>e(`/admin/users/${a}/verify-email`,{method:"PATCH"}),ah=(a=1,b,c)=>{let d=new URLSearchParams({page:String(a),limit:"20"});return b&&d.set("q",b),c&&d.set("status",c),e(`/admin/tasks?${d}`)},ai=a=>e(`/admin/tasks/${a}/cancel`,{method:"PATCH"}),aj=a=>e(`/admin/tasks/${a}`,{method:"DELETE"}),ak=(a=1,b)=>{let c=new URLSearchParams({page:String(a),limit:"20"});return b&&"all"!==b&&c.set("status",b),e(`/admin/reports?${c}`)},al=(a,b)=>e(`/admin/reports/${a}/status`,{method:"PATCH",body:JSON.stringify({status:b})}),am=(a=1)=>e(`/admin/ai-logs?page=${a}&limit=50`),an=(a={})=>{let b=new URLSearchParams;return a.page&&b.set("page",String(a.page)),a.event&&b.set("event",a.event),a.userId&&b.set("userId",a.userId),a.dateFrom&&b.set("dateFrom",a.dateFrom),a.dateTo&&b.set("dateTo",a.dateTo),b.set("limit","50"),e(`/admin/activity-logs?${b}`)},ao=(a={})=>{let b=new URLSearchParams;return a.page&&b.set("page",String(a.page)),a.event&&b.set("event",a.event),a.dateFrom&&b.set("dateFrom",a.dateFrom),a.dateTo&&b.set("dateTo",a.dateTo),b.set("limit","50"),e(`/admin/mail-logs?${b}`)},ap=(a={})=>{let b=new URLSearchParams;return a.page&&b.set("page",String(a.page)),a.type&&b.set("type",a.type),a.dateFrom&&b.set("dateFrom",a.dateFrom),a.dateTo&&b.set("dateTo",a.dateTo),b.set("limit","50"),e(`/admin/notification-logs?${b}`)},aq=()=>e("/admin/notification-stats"),ar=()=>e("/admin/mail-stats"),as=()=>e("/admin/referrals"),at=(a,b)=>e(`/admin/push/user/${a}`,{method:"POST",body:JSON.stringify(b)}),au=a=>e("/admin/push/broadcast",{method:"POST",body:JSON.stringify(a)}),av=()=>e("/admin/locations"),aw=a=>e("/admin/locations",{method:"POST",body:JSON.stringify(a)}),ax=(a,b)=>e(`/admin/locations/${a}`,{method:"PATCH",body:JSON.stringify(b)}),ay=a=>e(`/admin/locations/${a}`,{method:"DELETE"}),az=()=>e("/admin/plans"),aA=a=>e("/admin/plans",{method:"POST",body:JSON.stringify(a)}),aB=(a,b)=>e(`/admin/plans/${a}`,{method:"PATCH",body:JSON.stringify(b)}),aC=a=>e(`/admin/plans/${a}`,{method:"DELETE"}),aD=()=>e("/admin/settings"),aE=a=>e("/admin/settings",{method:"PUT",body:JSON.stringify(a)}),aF=()=>e("/admin/settings/templates"),aG=(a,b)=>e(`/admin/settings/templates/${a}`,{method:"PUT",body:JSON.stringify(b)}),aH=a=>e("/admin/settings/templates/translate",{method:"POST",body:JSON.stringify(a)}),aI=()=>e("/admin/settings/test-email",{method:"POST"}),aJ=(a,b)=>fetch(`${d}/api/admin/settings/test-telegram`,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({botToken:a,chatId:b})}).then(a=>a.json()),aK=a=>fetch(`${d}/api/admin/settings/verify-telegram-token`,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({botToken:a})}).then(a=>a.json()),aL=()=>e("/admin/translations/stats"),aM=(a,b,c,d=500)=>e("/admin/translations/auto-translate",{method:"POST",body:JSON.stringify({table:a,missingLang:b,fromLang:c,batchSize:d})}),aN=(a=500)=>e("/admin/translations/auto-translate-tasks",{method:"POST",body:JSON.stringify({batchSize:a})}),aO=(a,b=50)=>e(`/admin/translations/tasks-preview?lang=${a}&limit=${b}`),aP=(a,b="el")=>e("/admin/translations/auto-translate-templates",{method:"POST",body:JSON.stringify({missingLang:a,fromLang:b})}),aQ=a=>e(`/availability/my${a?`?month=${a}`:""}`),aR=(a,b,c)=>e("/availability/set",{method:"POST",body:JSON.stringify({date:a,status:b,note:c})}),aS=(a,b,c)=>e("/availability/set-range",{method:"POST",body:JSON.stringify({from:a,to:b,status:c})}),aT=(a,b)=>e(`/availability/user/${a}${b?`?month=${b}`:""}`),aU=(a,b)=>e(`/portfolio/${a}`,{method:"PATCH",body:JSON.stringify(b)}),aV=a=>e(`/portfolio/${a}`,{method:"DELETE"}),aW=()=>e("/specialist-cards/my"),aX=a=>e("/specialist-cards",{method:"POST",body:JSON.stringify(a)}),aY=(a,b)=>e(`/specialist-cards/${a}`,{method:"PATCH",body:JSON.stringify(b)}),aZ=a=>e(`/specialist-cards/${a}`,{method:"DELETE"}),a$=(a,b)=>e(`/specialist-cards/user/${a}${b?`?locale=${encodeURIComponent(b)}`:""}`),a_=(a,b)=>e(`/price-list/${a}${b?`?locale=${encodeURIComponent(b)}`:""}`),a0=(a,b)=>e(`/price-list/${a}/groups`,{method:"POST",body:JSON.stringify(b)}),a1=(a,b)=>e(`/price-list/groups/${a}`,{method:"PATCH",body:JSON.stringify(b)}),a2=a=>e(`/price-list/groups/${a}`,{method:"DELETE"}),a3=(a,b)=>e(`/price-list/groups/${a}/items`,{method:"POST",body:JSON.stringify(b)}),a4=a=>e(`/price-list/items/${a}`,{method:"DELETE"}),a5=a=>{let b=a?.length?"?"+a.map(a=>`category=${encodeURIComponent(a)}`).join("&"):"";return e(`/skill-suggestions${b}`)},a6=a=>e("/payments/topup/init",{method:"POST",body:JSON.stringify({amount:a})}),a7=()=>e("/payments/history"),a8=(a=50)=>e(`/payments/balance-history?limit=${a}`),a9=(a=50)=>e(`/users/me/plan-history?limit=${a}`),ba=(a={})=>{let b=new URLSearchParams;return a.page&&b.set("page",String(a.page)),a.userId&&b.set("userId",a.userId),a.kind&&b.set("kind",a.kind),b.set("limit","50"),e(`/admin/balance-history?${b}`)},bb=(a,b)=>e(`/admin/users/${a}/balance/topup`,{method:"POST",body:JSON.stringify(b)}),bc=(a,b)=>e(`/admin/users/${a}/balance/withdraw`,{method:"POST",body:JSON.stringify(b)}),bd=a=>e("/payments/plan/preview",{method:"POST",body:JSON.stringify({planId:a})}),be=a=>{let b=a?`?role=${a}`:"";return e(`/plans${b}`)},bf=()=>e("/dashboard/me"),bg=()=>e("/plans/daily-usage"),bh=(a,b=!0)=>e("/payments/plan/purchase",{method:"POST",body:JSON.stringify({planId:a,payFromBalance:b})}),bi=()=>e("/statuses/me"),bj=(a,b)=>e("/statuses/toggle",{method:"POST",body:JSON.stringify({statusType:a,active:b})}),bk=()=>e("/auto-response"),bl=a=>e("/auto-response",{method:"PUT",body:JSON.stringify(a)}),bm=()=>e("/fomo/specialist"),bn=()=>e("/fomo/customer"),bo=a=>e(`/auto-match/${a}`,{method:"POST"}),bp=a=>e(`/users/site/${a}`),bq=()=>e("/users/me/site-stats"),br=a=>e(`/users/site/${a}/track-message`,{method:"POST"}).catch(()=>{}),bs=a=>e(`/tasks/${a}/stats`),bt=a=>e("/support/public",{method:"POST",body:JSON.stringify(a)}),bu=a=>e("/support",{method:"POST",body:JSON.stringify(a)}),bv=a=>e(`/support${a?"?"+new URLSearchParams(a):""}`),bw=(a,b)=>e(`/support/${a}/reply`,{method:"PATCH",body:JSON.stringify(b)}),bx=(a,b)=>e(`/support/${a}/status`,{method:"PATCH",body:JSON.stringify({status:b})})},96484:(a,b,c)=>{"use strict";c.d(b,{LocaleProvider:()=>i,Y:()=>j});var d=c(78157),e=c(31768),f=c(71159),g=c(12998);let h=(0,e.createContext)({locale:"el",setLocale:()=>{},t:a=>a});function i({children:a,initialLocale:b}){let c=(0,f.useRouter)(),[i,j]=(0,e.useState)(b??"el"),k=(0,e.useCallback)(a=>{j(a),document.cookie=`canhelp_locale=${a}; path=/; max-age=31536000; SameSite=Lax`,document.documentElement.lang=a,fetch("https://api.canhelp.gr/api/users/me",{method:"PATCH",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({locale:a})}).catch(()=>{}),c.refresh()},[c]),l=(0,e.useCallback)((a,b)=>(0,g.$)(i)(a,b),[i]);return(0,d.jsx)(h.Provider,{value:{locale:i,setLocale:k,t:l},children:a})}function j(){return(0,e.useContext)(h)}}};