/opt/canhelp/apps/web/.next/cache/webpack/client-production
NameSizeModeActions
0.pack645019950644editdlrm
1.pack6228990644editdlrm
2.pack16053830644editdlrm
3.pack18294750644editdlrm
4.pack13724980644editdlrm
5.pack40780644editdlrm
6.pack18542550644editdlrm
7.pack11179260644editdlrm
8.pack38699010644editdlrm
9.pack40193500644editdlrm
10.pack10927090644editdlrm
11.pack361280644editdlrm
12.pack13004210644editdlrm
13.pack115880644editdlrm
14.pack40780644editdlrm
15.pack214033720644editdlrm
16.pack5411070644editdlrm
17.pack40780644editdlrm
18.pack2954110644editdlrm
19.pack222311380644editdlrm
20.pack2752970644editdlrm
21.pack54214750644editdlrm
index.pack34315280644editdlrm
index.pack.old34732550644editdlrm
Edit: /opt/canhelp/apps/web/.next/cache/webpack/client-production/21.pack (5421475B)
wpc—¹R§webpack/lib/cache/PackFileCacheStrategyPackContentItems €`A[Compilation/modules|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2Fopt%2Fcanhelp%2Fapps%2Fweb%2Fsrc%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fopt%2Fcanhelp%2Fapps%2Fweb%2Fsrc%2Fcomponents%2FAdminRolePreview.tsx%22%2C%22ids%22%3A%5B%22AdminRolePreview%22%5D%7D&modules=%7B%22request%22%3A%22%2Fopt%2Fcanhelp%2Fapps%2Fweb%2Fsrc%2Fcomponents%2FFooter.tsx%22%2C%22ids%22%3A%5B%22Footer%22%5D%7D&modules=%7B%22request%22%3A%22%2Fopt%2Fcanhelp%2Fapps%2Fweb%2Fsrc%2Fcomponents%2FHeader.tsx%22%2C%22ids%22%3A%5B%22Header%22%5D%7D&modules=%7B%22request%22%3A%22%2Fopt%2Fcanhelp%2Fapps%2Fweb%2Fsrc%2Fcomponents%2FScrollToTopButton.tsx%22%2C%22ids%22%3A%5B%22ScrollToTopButton%22%5D%7D&modules=%7B%22request%22%3A%22%2Fopt%2Fcanhelp%2Fapps%2Fweb%2Fsrc%2Fcontext%2Flocale.tsx%22%2C%22ids%22%3A%5B%22LocaleProvider%22%5D%7D&modules=%7B%22request%22%3A%22%2Fopt%2Fcanhelp%2Fapps%2Fweb%2Fsrc%2Fcontext%2Flocation.tsx%22%2C%22ids%22%3A%5B%22LocationProvider%22%5D%7D&server=false!|app-pages-browserê ResolverCachePlugin|normal|default|alias=[|server-only$=|next/dist/compiled/server-only/index|client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/server-only=|next/dist/compiled/server-only/index|/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|/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|]|fallback=[|assert=|/opt/canhelp/node_modules/next/dist/compiled/assert/assert.js|buffer=|/opt/canhelp/node_modules/next/dist/compiled/buffer/index.js|constants=|/opt/canhelp/node_modules/next/dist/compiled/constants-browserify/constants.json|crypto=|/opt/canhelp/node_modules/next/dist/compiled/crypto-browserify/index.js|domain=|/opt/canhelp/node_modules/next/dist/compiled/domain-browser/index.js|http=|/opt/canhelp/node_modules/next/dist/compiled/stream-http/index.js|https=|/opt/canhelp/node_modules/next/dist/compiled/https-browserify/index.js|os=|/opt/canhelp/node_modules/next/dist/compiled/os-browserify/browser.js|path=|/opt/canhelp/node_modules/next/dist/compiled/path-browserify/index.js|punycode=|/opt/canhelp/node_modules/next/dist/compiled/punycode/punycode.js|process=|/opt/canhelp/node_modules/next/dist/build/polyfills/process.js|querystring=|/opt/canhelp/node_modules/next/dist/compiled/querystring-es3/index.js|stream=|/opt/canhelp/node_modules/next/dist/compiled/stream-browserify/index.js|string_decoder=|/opt/canhelp/node_modules/next/dist/compiled/string_decoder/string_decoder.js|sys=|/opt/canhelp/node_modules/next/dist/compiled/util/util.js|timers=|/opt/canhelp/node_modules/next/dist/compiled/timers-browserify/main.js|tty=|/opt/canhelp/node_modules/next/dist/compiled/tty-browserify/index.js|util=|/opt/canhelp/node_modules/next/dist/compiled/util/util.js|vm=|/opt/canhelp/node_modules/next/dist/compiled/vm-browserify/index.js|zlib=|/opt/canhelp/node_modules/next/dist/compiled/browserify-zlib/index.js|events=|/opt/canhelp/node_modules/next/dist/compiled/events/events.js|setImmediate=|/opt/canhelp/node_modules/next/dist/compiled/setimmediate/setImmediate.js|]|dependencyType=|esm|path=|/opt/canhelp/apps/web|request=|/opt/canhelp/apps/web/src/components/AdminRolePreview.tsxà ResolverCachePlugin|normal|default|alias=[|server-only$=|next/dist/compiled/server-only/index|client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/server-only=|next/dist/compiled/server-only/index|/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|/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|]|fallback=[|assert=|/opt/canhelp/node_modules/next/dist/compiled/assert/assert.js|buffer=|/opt/canhelp/node_modules/next/dist/compiled/buffer/index.js|constants=|/opt/canhelp/node_modules/next/dist/compiled/constants-browserify/constants.json|crypto=|/opt/canhelp/node_modules/next/dist/compiled/crypto-browserify/index.js|domain=|/opt/canhelp/node_modules/next/dist/compiled/domain-browser/index.js|http=|/opt/canhelp/node_modules/next/dist/compiled/stream-http/index.js|https=|/opt/canhelp/node_modules/next/dist/compiled/https-browserify/index.js|os=|/opt/canhelp/node_modules/next/dist/compiled/os-browserify/browser.js|path=|/opt/canhelp/node_modules/next/dist/compiled/path-browserify/index.js|punycode=|/opt/canhelp/node_modules/next/dist/compiled/punycode/punycode.js|process=|/opt/canhelp/node_modules/next/dist/build/polyfills/process.js|querystring=|/opt/canhelp/node_modules/next/dist/compiled/querystring-es3/index.js|stream=|/opt/canhelp/node_modules/next/dist/compiled/stream-browserify/index.js|string_decoder=|/opt/canhelp/node_modules/next/dist/compiled/string_decoder/string_decoder.js|sys=|/opt/canhelp/node_modules/next/dist/compiled/util/util.js|timers=|/opt/canhelp/node_modules/next/dist/compiled/timers-browserify/main.js|tty=|/opt/canhelp/node_modules/next/dist/compiled/tty-browserify/index.js|util=|/opt/canhelp/node_modules/next/dist/compiled/util/util.js|vm=|/opt/canhelp/node_modules/next/dist/compiled/vm-browserify/index.js|zlib=|/opt/canhelp/node_modules/next/dist/compiled/browserify-zlib/index.js|events=|/opt/canhelp/node_modules/next/dist/compiled/events/events.js|setImmediate=|/opt/canhelp/node_modules/next/dist/compiled/setimmediate/setImmediate.js|]|dependencyType=|esm|path=|/opt/canhelp/apps/web|request=|/opt/canhelp/apps/web/src/components/Header.tsxFCompilation/modules|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-css-loader.js??ruleSet[1].rules[14].oneOf[10].use[0]!/opt/canhelp/node_modules/next/dist/compiled/mini-css-extract-plugin/loader.js??ruleSet[1].rules[14].oneOf[10].use[1]!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[14].oneOf[10].use[2]!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[14].oneOf[10].use[3]!/opt/canhelp/apps/web/src/app/globals.css|app-pages-browserä ResolverCachePlugin|normal|default|alias=[|server-only$=|next/dist/compiled/server-only/index|client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/server-only=|next/dist/compiled/server-only/index|/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|/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|]|fallback=[|assert=|/opt/canhelp/node_modules/next/dist/compiled/assert/assert.js|buffer=|/opt/canhelp/node_modules/next/dist/compiled/buffer/index.js|constants=|/opt/canhelp/node_modules/next/dist/compiled/constants-browserify/constants.json|crypto=|/opt/canhelp/node_modules/next/dist/compiled/crypto-browserify/index.js|domain=|/opt/canhelp/node_modules/next/dist/compiled/domain-browser/index.js|http=|/opt/canhelp/node_modules/next/dist/compiled/stream-http/index.js|https=|/opt/canhelp/node_modules/next/dist/compiled/https-browserify/index.js|os=|/opt/canhelp/node_modules/next/dist/compiled/os-browserify/browser.js|path=|/opt/canhelp/node_modules/next/dist/compiled/path-browserify/index.js|punycode=|/opt/canhelp/node_modules/next/dist/compiled/punycode/punycode.js|process=|/opt/canhelp/node_modules/next/dist/build/polyfills/process.js|querystring=|/opt/canhelp/node_modules/next/dist/compiled/querystring-es3/index.js|stream=|/opt/canhelp/node_modules/next/dist/compiled/stream-browserify/index.js|string_decoder=|/opt/canhelp/node_modules/next/dist/compiled/string_decoder/string_decoder.js|sys=|/opt/canhelp/node_modules/next/dist/compiled/util/util.js|timers=|/opt/canhelp/node_modules/next/dist/compiled/timers-browserify/main.js|tty=|/opt/canhelp/node_modules/next/dist/compiled/tty-browserify/index.js|util=|/opt/canhelp/node_modules/next/dist/compiled/util/util.js|vm=|/opt/canhelp/node_modules/next/dist/compiled/vm-browserify/index.js|zlib=|/opt/canhelp/node_modules/next/dist/compiled/browserify-zlib/index.js|events=|/opt/canhelp/node_modules/next/dist/compiled/events/events.js|setImmediate=|/opt/canhelp/node_modules/next/dist/compiled/setimmediate/setImmediate.js|]|dependencyType=|esm|path=|/opt/canhelp/apps/web|request=|/opt/canhelp/apps/web/src/components/HeroSearch.tsxç ResolverCachePlugin|normal|default|alias=[|server-only$=|next/dist/compiled/server-only/index|client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/server-only=|next/dist/compiled/server-only/index|/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|/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|]|fallback=[|assert=|/opt/canhelp/node_modules/next/dist/compiled/assert/assert.js|buffer=|/opt/canhelp/node_modules/next/dist/compiled/buffer/index.js|constants=|/opt/canhelp/node_modules/next/dist/compiled/constants-browserify/constants.json|crypto=|/opt/canhelp/node_modules/next/dist/compiled/crypto-browserify/index.js|domain=|/opt/canhelp/node_modules/next/dist/compiled/domain-browser/index.js|http=|/opt/canhelp/node_modules/next/dist/compiled/stream-http/index.js|https=|/opt/canhelp/node_modules/next/dist/compiled/https-browserify/index.js|os=|/opt/canhelp/node_modules/next/dist/compiled/os-browserify/browser.js|path=|/opt/canhelp/node_modules/next/dist/compiled/path-browserify/index.js|punycode=|/opt/canhelp/node_modules/next/dist/compiled/punycode/punycode.js|process=|/opt/canhelp/node_modules/next/dist/build/polyfills/process.js|querystring=|/opt/canhelp/node_modules/next/dist/compiled/querystring-es3/index.js|stream=|/opt/canhelp/node_modules/next/dist/compiled/stream-browserify/index.js|string_decoder=|/opt/canhelp/node_modules/next/dist/compiled/string_decoder/string_decoder.js|sys=|/opt/canhelp/node_modules/next/dist/compiled/util/util.js|timers=|/opt/canhelp/node_modules/next/dist/compiled/timers-browserify/main.js|tty=|/opt/canhelp/node_modules/next/dist/compiled/tty-browserify/index.js|util=|/opt/canhelp/node_modules/next/dist/compiled/util/util.js|vm=|/opt/canhelp/node_modules/next/dist/compiled/vm-browserify/index.js|zlib=|/opt/canhelp/node_modules/next/dist/compiled/browserify-zlib/index.js|events=|/opt/canhelp/node_modules/next/dist/compiled/events/events.js|setImmediate=|/opt/canhelp/node_modules/next/dist/compiled/setimmediate/setImmediate.js|]|dependencyType=|esm|path=|/opt/canhelp/apps/web|request=|/opt/canhelp/apps/web/src/components/HomeCityCloud.tsxß ResolverCachePlugin|normal|default|alias=[|server-only$=|next/dist/compiled/server-only/index|client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/server-only=|next/dist/compiled/server-only/index|/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|/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|]|fallback=[|assert=|/opt/canhelp/node_modules/next/dist/compiled/assert/assert.js|buffer=|/opt/canhelp/node_modules/next/dist/compiled/buffer/index.js|constants=|/opt/canhelp/node_modules/next/dist/compiled/constants-browserify/constants.json|crypto=|/opt/canhelp/node_modules/next/dist/compiled/crypto-browserify/index.js|domain=|/opt/canhelp/node_modules/next/dist/compiled/domain-browser/index.js|http=|/opt/canhelp/node_modules/next/dist/compiled/stream-http/index.js|https=|/opt/canhelp/node_modules/next/dist/compiled/https-browserify/index.js|os=|/opt/canhelp/node_modules/next/dist/compiled/os-browserify/browser.js|path=|/opt/canhelp/node_modules/next/dist/compiled/path-browserify/index.js|punycode=|/opt/canhelp/node_modules/next/dist/compiled/punycode/punycode.js|process=|/opt/canhelp/node_modules/next/dist/build/polyfills/process.js|querystring=|/opt/canhelp/node_modules/next/dist/compiled/querystring-es3/index.js|stream=|/opt/canhelp/node_modules/next/dist/compiled/stream-browserify/index.js|string_decoder=|/opt/canhelp/node_modules/next/dist/compiled/string_decoder/string_decoder.js|sys=|/opt/canhelp/node_modules/next/dist/compiled/util/util.js|timers=|/opt/canhelp/node_modules/next/dist/compiled/timers-browserify/main.js|tty=|/opt/canhelp/node_modules/next/dist/compiled/tty-browserify/index.js|util=|/opt/canhelp/node_modules/next/dist/compiled/util/util.js|vm=|/opt/canhelp/node_modules/next/dist/compiled/vm-browserify/index.js|zlib=|/opt/canhelp/node_modules/next/dist/compiled/browserify-zlib/index.js|events=|/opt/canhelp/node_modules/next/dist/compiled/events/events.js|setImmediate=|/opt/canhelp/node_modules/next/dist/compiled/setimmediate/setImmediate.js|]|dependencyType=|esm|path=|/opt/canhelp/apps/web|request=|/opt/canhelp/apps/web/src/app/pricing/page.tsx¹ResolverCachePlugin|normal|default|alias=[|server-only$=|next/dist/compiled/server-only/index|client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/server-only=|next/dist/compiled/server-only/index|/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|/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|react$=|next/dist/compiled/react|react/compiler-runtime$=|next/dist/compiled/react/compiler-runtime|react/jsx-dev-runtime$=|next/dist/compiled/react/jsx-dev-runtime|react/jsx-runtime$=|next/dist/compiled/react/jsx-runtime|react-dom$=|next/dist/compiled/react-dom|react-dom/client$=|next/dist/compiled/react-dom/client|react-dom/server$=|next/dist/compiled/react-dom/server.browser|react-dom/server.browser$=|next/dist/compiled/react-dom/server.browser|react-dom/server.edge$=|next/dist/build/webpack/alias/react-dom-server.js|react-dom/static$=|next/dist/compiled/react-dom/static.browser|react-dom/static.browser$=|next/dist/compiled/react-dom/static.browser|react-dom/static.edge$=|next/dist/compiled/react-dom/static.edge|react-server-dom-webpack/client$=|next/dist/compiled/react-server-dom-webpack/client.browser|react-server-dom-webpack/server$=|next/dist/compiled/react-server-dom-webpack/server.browser|react-server-dom-webpack/server.node$=|next/dist/compiled/react-server-dom-webpack/server.node|react-server-dom-webpack/static$=|next/dist/compiled/react-server-dom-webpack/static.browser|@vercel/turbopack-ecmascript-runtime/browser/dev/hmr-client/hmr-client.ts=|next/dist/client/dev/noop-turbopack-hmr|next=|/opt/canhelp/node_modules/next|]|mainFields=[|0=|browser|1=|module|2=|main|]|fallback=[|assert=|/opt/canhelp/node_modules/next/dist/compiled/assert/assert.js|buffer=|/opt/canhelp/node_modules/next/dist/compiled/buffer/index.js|constants=|/opt/canhelp/node_modules/next/dist/compiled/constants-browserify/constants.json|crypto=|/opt/canhelp/node_modules/next/dist/compiled/crypto-browserify/index.js|domain=|/opt/canhelp/node_modules/next/dist/compiled/domain-browser/index.js|http=|/opt/canhelp/node_modules/next/dist/compiled/stream-http/index.js|https=|/opt/canhelp/node_modules/next/dist/compiled/https-browserify/index.js|os=|/opt/canhelp/node_modules/next/dist/compiled/os-browserify/browser.js|path=|/opt/canhelp/node_modules/next/dist/compiled/path-browserify/index.js|punycode=|/opt/canhelp/node_modules/next/dist/compiled/punycode/punycode.js|process=|/opt/canhelp/node_modules/next/dist/build/polyfills/process.js|querystring=|/opt/canhelp/node_modules/next/dist/compiled/querystring-es3/index.js|stream=|/opt/canhelp/node_modules/next/dist/compiled/stream-browserify/index.js|string_decoder=|/opt/canhelp/node_modules/next/dist/compiled/string_decoder/string_decoder.js|sys=|/opt/canhelp/node_modules/next/dist/compiled/util/util.js|timers=|/opt/canhelp/node_modules/next/dist/compiled/timers-browserify/main.js|tty=|/opt/canhelp/node_modules/next/dist/compiled/tty-browserify/index.js|util=|/opt/canhelp/node_modules/next/dist/compiled/util/util.js|vm=|/opt/canhelp/node_modules/next/dist/compiled/vm-browserify/index.js|zlib=|/opt/canhelp/node_modules/next/dist/compiled/browserify-zlib/index.js|events=|/opt/canhelp/node_modules/next/dist/compiled/events/events.js|setImmediate=|/opt/canhelp/node_modules/next/dist/compiled/setimmediate/setImmediate.js|]|dependencyType=|esm|path=|/opt/canhelp/apps/web/src/context|request=|@/lib/translations»ResolverCachePlugin|normal|default|alias=[|server-only$=|next/dist/compiled/server-only/index|client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/server-only=|next/dist/compiled/server-only/index|/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|/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|react$=|next/dist/compiled/react|react/compiler-runtime$=|next/dist/compiled/react/compiler-runtime|react/jsx-dev-runtime$=|next/dist/compiled/react/jsx-dev-runtime|react/jsx-runtime$=|next/dist/compiled/react/jsx-runtime|react-dom$=|next/dist/compiled/react-dom|react-dom/client$=|next/dist/compiled/react-dom/client|react-dom/server$=|next/dist/compiled/react-dom/server.browser|react-dom/server.browser$=|next/dist/compiled/react-dom/server.browser|react-dom/server.edge$=|next/dist/build/webpack/alias/react-dom-server.js|react-dom/static$=|next/dist/compiled/react-dom/static.browser|react-dom/static.browser$=|next/dist/compiled/react-dom/static.browser|react-dom/static.edge$=|next/dist/compiled/react-dom/static.edge|react-server-dom-webpack/client$=|next/dist/compiled/react-server-dom-webpack/client.browser|react-server-dom-webpack/server$=|next/dist/compiled/react-server-dom-webpack/server.browser|react-server-dom-webpack/server.node$=|next/dist/compiled/react-server-dom-webpack/server.node|react-server-dom-webpack/static$=|next/dist/compiled/react-server-dom-webpack/static.browser|@vercel/turbopack-ecmascript-runtime/browser/dev/hmr-client/hmr-client.ts=|next/dist/client/dev/noop-turbopack-hmr|next=|/opt/canhelp/node_modules/next|]|mainFields=[|0=|browser|1=|module|2=|main|]|fallback=[|assert=|/opt/canhelp/node_modules/next/dist/compiled/assert/assert.js|buffer=|/opt/canhelp/node_modules/next/dist/compiled/buffer/index.js|constants=|/opt/canhelp/node_modules/next/dist/compiled/constants-browserify/constants.json|crypto=|/opt/canhelp/node_modules/next/dist/compiled/crypto-browserify/index.js|domain=|/opt/canhelp/node_modules/next/dist/compiled/domain-browser/index.js|http=|/opt/canhelp/node_modules/next/dist/compiled/stream-http/index.js|https=|/opt/canhelp/node_modules/next/dist/compiled/https-browserify/index.js|os=|/opt/canhelp/node_modules/next/dist/compiled/os-browserify/browser.js|path=|/opt/canhelp/node_modules/next/dist/compiled/path-browserify/index.js|punycode=|/opt/canhelp/node_modules/next/dist/compiled/punycode/punycode.js|process=|/opt/canhelp/node_modules/next/dist/build/polyfills/process.js|querystring=|/opt/canhelp/node_modules/next/dist/compiled/querystring-es3/index.js|stream=|/opt/canhelp/node_modules/next/dist/compiled/stream-browserify/index.js|string_decoder=|/opt/canhelp/node_modules/next/dist/compiled/string_decoder/string_decoder.js|sys=|/opt/canhelp/node_modules/next/dist/compiled/util/util.js|timers=|/opt/canhelp/node_modules/next/dist/compiled/timers-browserify/main.js|tty=|/opt/canhelp/node_modules/next/dist/compiled/tty-browserify/index.js|util=|/opt/canhelp/node_modules/next/dist/compiled/util/util.js|vm=|/opt/canhelp/node_modules/next/dist/compiled/vm-browserify/index.js|zlib=|/opt/canhelp/node_modules/next/dist/compiled/browserify-zlib/index.js|events=|/opt/canhelp/node_modules/next/dist/compiled/events/events.js|setImmediate=|/opt/canhelp/node_modules/next/dist/compiled/setimmediate/setImmediate.js|]|dependencyType=|esm|path=|/opt/canhelp/apps/web/src/app/tasks|request=|@/lib/translations6Compilation/modules|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-module-loader.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[6].use[1]!/opt/canhelp/apps/web/src/components/Header.tsx|app-pages-browser:Compilation/modules|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-module-loader.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[6].use[1]!/opt/canhelp/apps/web/src/components/HeroSearch.tsx|app-pages-browser=Compilation/modules|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-module-loader.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[6].use[1]!/opt/canhelp/apps/web/src/components/HomeCityCloud.tsx|app-pages-browser@Compilation/modules|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-module-loader.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[6].use[1]!/opt/canhelp/apps/web/src/components/AdminRolePreview.tsx|app-pages-browser5Compilation/modules|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-module-loader.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[6].use[1]!/opt/canhelp/apps/web/src/app/pricing/page.tsx|app-pages-browserÂResolverCachePlugin|normal|default|alias=[|server-only$=|next/dist/compiled/server-only/index|client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/server-only=|next/dist/compiled/server-only/index|/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|/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|react$=|next/dist/compiled/react|react/compiler-runtime$=|next/dist/compiled/react/compiler-runtime|react/jsx-dev-runtime$=|next/dist/compiled/react/jsx-dev-runtime|react/jsx-runtime$=|next/dist/compiled/react/jsx-runtime|react-dom$=|next/dist/compiled/react-dom|react-dom/client$=|next/dist/compiled/react-dom/client|react-dom/server$=|next/dist/compiled/react-dom/server.browser|react-dom/server.browser$=|next/dist/compiled/react-dom/server.browser|react-dom/server.edge$=|next/dist/build/webpack/alias/react-dom-server.js|react-dom/static$=|next/dist/compiled/react-dom/static.browser|react-dom/static.browser$=|next/dist/compiled/react-dom/static.browser|react-dom/static.edge$=|next/dist/compiled/react-dom/static.edge|react-server-dom-webpack/client$=|next/dist/compiled/react-server-dom-webpack/client.browser|react-server-dom-webpack/server$=|next/dist/compiled/react-server-dom-webpack/server.browser|react-server-dom-webpack/server.node$=|next/dist/compiled/react-server-dom-webpack/server.node|react-server-dom-webpack/static$=|next/dist/compiled/react-server-dom-webpack/static.browser|@vercel/turbopack-ecmascript-runtime/browser/dev/hmr-client/hmr-client.ts=|next/dist/client/dev/noop-turbopack-hmr|next=|/opt/canhelp/node_modules/next|]|mainFields=[|0=|browser|1=|module|2=|main|]|fallback=[|assert=|/opt/canhelp/node_modules/next/dist/compiled/assert/assert.js|buffer=|/opt/canhelp/node_modules/next/dist/compiled/buffer/index.js|constants=|/opt/canhelp/node_modules/next/dist/compiled/constants-browserify/constants.json|crypto=|/opt/canhelp/node_modules/next/dist/compiled/crypto-browserify/index.js|domain=|/opt/canhelp/node_modules/next/dist/compiled/domain-browser/index.js|http=|/opt/canhelp/node_modules/next/dist/compiled/stream-http/index.js|https=|/opt/canhelp/node_modules/next/dist/compiled/https-browserify/index.js|os=|/opt/canhelp/node_modules/next/dist/compiled/os-browserify/browser.js|path=|/opt/canhelp/node_modules/next/dist/compiled/path-browserify/index.js|punycode=|/opt/canhelp/node_modules/next/dist/compiled/punycode/punycode.js|process=|/opt/canhelp/node_modules/next/dist/build/polyfills/process.js|querystring=|/opt/canhelp/node_modules/next/dist/compiled/querystring-es3/index.js|stream=|/opt/canhelp/node_modules/next/dist/compiled/stream-browserify/index.js|string_decoder=|/opt/canhelp/node_modules/next/dist/compiled/string_decoder/string_decoder.js|sys=|/opt/canhelp/node_modules/next/dist/compiled/util/util.js|timers=|/opt/canhelp/node_modules/next/dist/compiled/timers-browserify/main.js|tty=|/opt/canhelp/node_modules/next/dist/compiled/tty-browserify/index.js|util=|/opt/canhelp/node_modules/next/dist/compiled/util/util.js|vm=|/opt/canhelp/node_modules/next/dist/compiled/vm-browserify/index.js|zlib=|/opt/canhelp/node_modules/next/dist/compiled/browserify-zlib/index.js|events=|/opt/canhelp/node_modules/next/dist/compiled/events/events.js|setImmediate=|/opt/canhelp/node_modules/next/dist/compiled/setimmediate/setImmediate.js|]|dependencyType=|esm|path=|/opt/canhelp/apps/web/src/components|request=|@/hooks/useEffectiveRoleÃResolverCachePlugin|normal|default|alias=[|server-only$=|next/dist/compiled/server-only/index|client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/server-only=|next/dist/compiled/server-only/index|/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|/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|react$=|next/dist/compiled/react|react/compiler-runtime$=|next/dist/compiled/react/compiler-runtime|react/jsx-dev-runtime$=|next/dist/compiled/react/jsx-dev-runtime|react/jsx-runtime$=|next/dist/compiled/react/jsx-runtime|react-dom$=|next/dist/compiled/react-dom|react-dom/client$=|next/dist/compiled/react-dom/client|react-dom/server$=|next/dist/compiled/react-dom/server.browser|react-dom/server.browser$=|next/dist/compiled/react-dom/server.browser|react-dom/server.edge$=|next/dist/build/webpack/alias/react-dom-server.js|react-dom/static$=|next/dist/compiled/react-dom/static.browser|react-dom/static.browser$=|next/dist/compiled/react-dom/static.browser|react-dom/static.edge$=|next/dist/compiled/react-dom/static.edge|react-server-dom-webpack/client$=|next/dist/compiled/react-server-dom-webpack/client.browser|react-server-dom-webpack/server$=|next/dist/compiled/react-server-dom-webpack/server.browser|react-server-dom-webpack/server.node$=|next/dist/compiled/react-server-dom-webpack/server.node|react-server-dom-webpack/static$=|next/dist/compiled/react-server-dom-webpack/static.browser|@vercel/turbopack-ecmascript-runtime/browser/dev/hmr-client/hmr-client.ts=|next/dist/client/dev/noop-turbopack-hmr|next=|/opt/canhelp/node_modules/next|]|mainFields=[|0=|browser|1=|module|2=|main|]|fallback=[|assert=|/opt/canhelp/node_modules/next/dist/compiled/assert/assert.js|buffer=|/opt/canhelp/node_modules/next/dist/compiled/buffer/index.js|constants=|/opt/canhelp/node_modules/next/dist/compiled/constants-browserify/constants.json|crypto=|/opt/canhelp/node_modules/next/dist/compiled/crypto-browserify/index.js|domain=|/opt/canhelp/node_modules/next/dist/compiled/domain-browser/index.js|http=|/opt/canhelp/node_modules/next/dist/compiled/stream-http/index.js|https=|/opt/canhelp/node_modules/next/dist/compiled/https-browserify/index.js|os=|/opt/canhelp/node_modules/next/dist/compiled/os-browserify/browser.js|path=|/opt/canhelp/node_modules/next/dist/compiled/path-browserify/index.js|punycode=|/opt/canhelp/node_modules/next/dist/compiled/punycode/punycode.js|process=|/opt/canhelp/node_modules/next/dist/build/polyfills/process.js|querystring=|/opt/canhelp/node_modules/next/dist/compiled/querystring-es3/index.js|stream=|/opt/canhelp/node_modules/next/dist/compiled/stream-browserify/index.js|string_decoder=|/opt/canhelp/node_modules/next/dist/compiled/string_decoder/string_decoder.js|sys=|/opt/canhelp/node_modules/next/dist/compiled/util/util.js|timers=|/opt/canhelp/node_modules/next/dist/compiled/timers-browserify/main.js|tty=|/opt/canhelp/node_modules/next/dist/compiled/tty-browserify/index.js|util=|/opt/canhelp/node_modules/next/dist/compiled/util/util.js|vm=|/opt/canhelp/node_modules/next/dist/compiled/vm-browserify/index.js|zlib=|/opt/canhelp/node_modules/next/dist/compiled/browserify-zlib/index.js|events=|/opt/canhelp/node_modules/next/dist/compiled/events/events.js|setImmediate=|/opt/canhelp/node_modules/next/dist/compiled/setimmediate/setImmediate.js|]|dependencyType=|esm|path=|/opt/canhelp/apps/web/src/app/pricing|request=|@/hooks/useEffectiveRole¼ResolverCachePlugin|normal|default|alias=[|server-only$=|next/dist/compiled/server-only/index|client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/server-only=|next/dist/compiled/server-only/index|/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|/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|react$=|next/dist/compiled/react|react/compiler-runtime$=|next/dist/compiled/react/compiler-runtime|react/jsx-dev-runtime$=|next/dist/compiled/react/jsx-dev-runtime|react/jsx-runtime$=|next/dist/compiled/react/jsx-runtime|react-dom$=|next/dist/compiled/react-dom|react-dom/client$=|next/dist/compiled/react-dom/client|react-dom/server$=|next/dist/compiled/react-dom/server.browser|react-dom/server.browser$=|next/dist/compiled/react-dom/server.browser|react-dom/server.edge$=|next/dist/build/webpack/alias/react-dom-server.js|react-dom/static$=|next/dist/compiled/react-dom/static.browser|react-dom/static.browser$=|next/dist/compiled/react-dom/static.browser|react-dom/static.edge$=|next/dist/compiled/react-dom/static.edge|react-server-dom-webpack/client$=|next/dist/compiled/react-server-dom-webpack/client.browser|react-server-dom-webpack/server$=|next/dist/compiled/react-server-dom-webpack/server.browser|react-server-dom-webpack/server.node$=|next/dist/compiled/react-server-dom-webpack/server.node|react-server-dom-webpack/static$=|next/dist/compiled/react-server-dom-webpack/static.browser|@vercel/turbopack-ecmascript-runtime/browser/dev/hmr-client/hmr-client.ts=|next/dist/client/dev/noop-turbopack-hmr|next=|/opt/canhelp/node_modules/next|]|mainFields=[|0=|browser|1=|module|2=|main|]|fallback=[|assert=|/opt/canhelp/node_modules/next/dist/compiled/assert/assert.js|buffer=|/opt/canhelp/node_modules/next/dist/compiled/buffer/index.js|constants=|/opt/canhelp/node_modules/next/dist/compiled/constants-browserify/constants.json|crypto=|/opt/canhelp/node_modules/next/dist/compiled/crypto-browserify/index.js|domain=|/opt/canhelp/node_modules/next/dist/compiled/domain-browser/index.js|http=|/opt/canhelp/node_modules/next/dist/compiled/stream-http/index.js|https=|/opt/canhelp/node_modules/next/dist/compiled/https-browserify/index.js|os=|/opt/canhelp/node_modules/next/dist/compiled/os-browserify/browser.js|path=|/opt/canhelp/node_modules/next/dist/compiled/path-browserify/index.js|punycode=|/opt/canhelp/node_modules/next/dist/compiled/punycode/punycode.js|process=|/opt/canhelp/node_modules/next/dist/build/polyfills/process.js|querystring=|/opt/canhelp/node_modules/next/dist/compiled/querystring-es3/index.js|stream=|/opt/canhelp/node_modules/next/dist/compiled/stream-browserify/index.js|string_decoder=|/opt/canhelp/node_modules/next/dist/compiled/string_decoder/string_decoder.js|sys=|/opt/canhelp/node_modules/next/dist/compiled/util/util.js|timers=|/opt/canhelp/node_modules/next/dist/compiled/timers-browserify/main.js|tty=|/opt/canhelp/node_modules/next/dist/compiled/tty-browserify/index.js|util=|/opt/canhelp/node_modules/next/dist/compiled/util/util.js|vm=|/opt/canhelp/node_modules/next/dist/compiled/vm-browserify/index.js|zlib=|/opt/canhelp/node_modules/next/dist/compiled/browserify-zlib/index.js|events=|/opt/canhelp/node_modules/next/dist/compiled/events/events.js|setImmediate=|/opt/canhelp/node_modules/next/dist/compiled/setimmediate/setImmediate.js|]|dependencyType=|esm|path=|/opt/canhelp/apps/web/src/components|request=|@/lib/translations4Compilation/modules|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-module-loader.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[6].use[1]!/opt/canhelp/apps/web/src/lib/translations.ts|app-pages-browser:Compilation/modules|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-module-loader.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[6].use[1]!/opt/canhelp/apps/web/src/hooks/useEffectiveRole.ts|app-pages-browser3Compilation/modules|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[14].oneOf[10].use[2]!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[14].oneOf[10].use[3]!/opt/canhelp/apps/web/src/app/globals.css¯ResolverCachePlugin|normal|default|alias=[|server-only$=|next/dist/compiled/server-only/index|client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/server-only=|next/dist/compiled/server-only/index|/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|/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|react$=|next/dist/compiled/react|react/compiler-runtime$=|next/dist/compiled/react/compiler-runtime|react/jsx-dev-runtime$=|next/dist/compiled/react/jsx-dev-runtime|react/jsx-runtime$=|next/dist/compiled/react/jsx-runtime|react-dom$=|next/dist/compiled/react-dom|react-dom/client$=|next/dist/compiled/react-dom/client|react-dom/server$=|next/dist/compiled/react-dom/server.browser|react-dom/server.browser$=|next/dist/compiled/react-dom/server.browser|react-dom/server.edge$=|next/dist/build/webpack/alias/react-dom-server.js|react-dom/static$=|next/dist/compiled/react-dom/static.browser|react-dom/static.browser$=|next/dist/compiled/react-dom/static.browser|react-dom/static.edge$=|next/dist/compiled/react-dom/static.edge|react-server-dom-webpack/client$=|next/dist/compiled/react-server-dom-webpack/client.browser|react-server-dom-webpack/server$=|next/dist/compiled/react-server-dom-webpack/server.browser|react-server-dom-webpack/server.node$=|next/dist/compiled/react-server-dom-webpack/server.node|react-server-dom-webpack/static$=|next/dist/compiled/react-server-dom-webpack/static.browser|@vercel/turbopack-ecmascript-runtime/browser/dev/hmr-client/hmr-client.ts=|next/dist/client/dev/noop-turbopack-hmr|next=|/opt/canhelp/node_modules/next|]|mainFields=[|0=|browser|1=|module|2=|main|]|fallback=[|assert=|/opt/canhelp/node_modules/next/dist/compiled/assert/assert.js|buffer=|/opt/canhelp/node_modules/next/dist/compiled/buffer/index.js|constants=|/opt/canhelp/node_modules/next/dist/compiled/constants-browserify/constants.json|crypto=|/opt/canhelp/node_modules/next/dist/compiled/crypto-browserify/index.js|domain=|/opt/canhelp/node_modules/next/dist/compiled/domain-browser/index.js|http=|/opt/canhelp/node_modules/next/dist/compiled/stream-http/index.js|https=|/opt/canhelp/node_modules/next/dist/compiled/https-browserify/index.js|os=|/opt/canhelp/node_modules/next/dist/compiled/os-browserify/browser.js|path=|/opt/canhelp/node_modules/next/dist/compiled/path-browserify/index.js|punycode=|/opt/canhelp/node_modules/next/dist/compiled/punycode/punycode.js|process=|/opt/canhelp/node_modules/next/dist/build/polyfills/process.js|querystring=|/opt/canhelp/node_modules/next/dist/compiled/querystring-es3/index.js|stream=|/opt/canhelp/node_modules/next/dist/compiled/stream-browserify/index.js|string_decoder=|/opt/canhelp/node_modules/next/dist/compiled/string_decoder/string_decoder.js|sys=|/opt/canhelp/node_modules/next/dist/compiled/util/util.js|timers=|/opt/canhelp/node_modules/next/dist/compiled/timers-browserify/main.js|tty=|/opt/canhelp/node_modules/next/dist/compiled/tty-browserify/index.js|util=|/opt/canhelp/node_modules/next/dist/compiled/util/util.js|vm=|/opt/canhelp/node_modules/next/dist/compiled/vm-browserify/index.js|zlib=|/opt/canhelp/node_modules/next/dist/compiled/browserify-zlib/index.js|events=|/opt/canhelp/node_modules/next/dist/compiled/events/events.js|setImmediate=|/opt/canhelp/node_modules/next/dist/compiled/setimmediate/setImmediate.js|]|dependencyType=|esm|path=|/opt/canhelp/apps/web/src/hooks|request=|@/lib/authªResolverCachePlugin|normal|default|alias=[|server-only$=|next/dist/compiled/server-only/index|client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/server-only=|next/dist/compiled/server-only/index|/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|/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|react$=|next/dist/compiled/react|react/compiler-runtime$=|next/dist/compiled/react/compiler-runtime|react/jsx-dev-runtime$=|next/dist/compiled/react/jsx-dev-runtime|react/jsx-runtime$=|next/dist/compiled/react/jsx-runtime|react-dom$=|next/dist/compiled/react-dom|react-dom/client$=|next/dist/compiled/react-dom/client|react-dom/server$=|next/dist/compiled/react-dom/server.browser|react-dom/server.browser$=|next/dist/compiled/react-dom/server.browser|react-dom/server.edge$=|next/dist/build/webpack/alias/react-dom-server.js|react-dom/static$=|next/dist/compiled/react-dom/static.browser|react-dom/static.browser$=|next/dist/compiled/react-dom/static.browser|react-dom/static.edge$=|next/dist/compiled/react-dom/static.edge|react-server-dom-webpack/client$=|next/dist/compiled/react-server-dom-webpack/client.browser|react-server-dom-webpack/server$=|next/dist/compiled/react-server-dom-webpack/server.browser|react-server-dom-webpack/server.node$=|next/dist/compiled/react-server-dom-webpack/server.node|react-server-dom-webpack/static$=|next/dist/compiled/react-server-dom-webpack/static.browser|@vercel/turbopack-ecmascript-runtime/browser/dev/hmr-client/hmr-client.ts=|next/dist/client/dev/noop-turbopack-hmr|next=|/opt/canhelp/node_modules/next|]|mainFields=[|0=|browser|1=|module|2=|main|]|fallback=[|assert=|/opt/canhelp/node_modules/next/dist/compiled/assert/assert.js|buffer=|/opt/canhelp/node_modules/next/dist/compiled/buffer/index.js|constants=|/opt/canhelp/node_modules/next/dist/compiled/constants-browserify/constants.json|crypto=|/opt/canhelp/node_modules/next/dist/compiled/crypto-browserify/index.js|domain=|/opt/canhelp/node_modules/next/dist/compiled/domain-browser/index.js|http=|/opt/canhelp/node_modules/next/dist/compiled/stream-http/index.js|https=|/opt/canhelp/node_modules/next/dist/compiled/https-browserify/index.js|os=|/opt/canhelp/node_modules/next/dist/compiled/os-browserify/browser.js|path=|/opt/canhelp/node_modules/next/dist/compiled/path-browserify/index.js|punycode=|/opt/canhelp/node_modules/next/dist/compiled/punycode/punycode.js|process=|/opt/canhelp/node_modules/next/dist/build/polyfills/process.js|querystring=|/opt/canhelp/node_modules/next/dist/compiled/querystring-es3/index.js|stream=|/opt/canhelp/node_modules/next/dist/compiled/stream-browserify/index.js|string_decoder=|/opt/canhelp/node_modules/next/dist/compiled/string_decoder/string_decoder.js|sys=|/opt/canhelp/node_modules/next/dist/compiled/util/util.js|timers=|/opt/canhelp/node_modules/next/dist/compiled/timers-browserify/main.js|tty=|/opt/canhelp/node_modules/next/dist/compiled/tty-browserify/index.js|util=|/opt/canhelp/node_modules/next/dist/compiled/util/util.js|vm=|/opt/canhelp/node_modules/next/dist/compiled/vm-browserify/index.js|zlib=|/opt/canhelp/node_modules/next/dist/compiled/browserify-zlib/index.js|events=|/opt/canhelp/node_modules/next/dist/compiled/events/events.js|setImmediate=|/opt/canhelp/node_modules/next/dist/compiled/setimmediate/setImmediate.js|]|dependencyType=|esm|path=|/opt/canhelp/apps/web/src/hooks|request=|reactECompilation/codeGeneration|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[14].oneOf[10].use[2]!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[14].oneOf[10].use[3]!/opt/canhelp/apps/web/src/app/globals.css|build time9Compilation/modules|css|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[14].oneOf[10].use[2]!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[14].oneOf[10].use[3]!/opt/canhelp/apps/web/src/app/globals.css|0>FlagDependencyExportsPlugin|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-module-loader.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[6].use[1]!/opt/canhelp/apps/web/src/components/Header.tsx|app-pages-browserBFlagDependencyExportsPlugin|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-module-loader.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[6].use[1]!/opt/canhelp/apps/web/src/components/HeroSearch.tsx|app-pages-browserEFlagDependencyExportsPlugin|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-module-loader.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[6].use[1]!/opt/canhelp/apps/web/src/components/HomeCityCloud.tsx|app-pages-browserHFlagDependencyExportsPlugin|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-module-loader.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[6].use[1]!/opt/canhelp/apps/web/src/components/AdminRolePreview.tsx|app-pages-browser=FlagDependencyExportsPlugin|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-module-loader.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[6].use[1]!/opt/canhelp/apps/web/src/app/pricing/page.tsx|app-pages-browser<FlagDependencyExportsPlugin|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-module-loader.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[6].use[1]!/opt/canhelp/apps/web/src/lib/translations.ts|app-pages-browserBFlagDependencyExportsPlugin|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-module-loader.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[6].use[1]!/opt/canhelp/apps/web/src/hooks/useEffectiveRole.ts|app-pages-browser;FlagDependencyExportsPlugin|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[14].oneOf[10].use[2]!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[14].oneOf[10].use[3]!/opt/canhelp/apps/web/src/app/globals.cssjCompilation/codeGeneration|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2Fopt%2Fcanhelp%2Fapps%2Fweb%2Fsrc%2Fapp%2Fglobals.css%22%2C%22ids%22%3A%5B%5D%7D&modules=%7B%22request%22%3A%22%2Fopt%2Fcanhelp%2Fapps%2Fweb%2Fsrc%2Fcomponents%2FAdminRolePreview.tsx%22%2C%22ids%22%3A%5B%22AdminRolePreview%22%5D%7D&modules=%7B%22request%22%3A%22%2Fopt%2Fcanhelp%2Fapps%2Fweb%2Fsrc%2Fcomponents%2FFooter.tsx%22%2C%22ids%22%3A%5B%22Footer%22%5D%7D&modules=%7B%22request%22%3A%22%2Fopt%2Fcanhelp%2Fapps%2Fweb%2Fsrc%2Fcomponents%2FHeader.tsx%22%2C%22ids%22%3A%5B%22Header%22%5D%7D&modules=%7B%22request%22%3A%22%2Fopt%2Fcanhelp%2Fapps%2Fweb%2Fsrc%2Fcomponents%2FScrollToTopButton.tsx%22%2C%22ids%22%3A%5B%22ScrollToTopButton%22%5D%7D&modules=%7B%22request%22%3A%22%2Fopt%2Fcanhelp%2Fapps%2Fweb%2Fsrc%2Fcontext%2Flocale.tsx%22%2C%22ids%22%3A%5B%22LocaleProvider%22%5D%7D&modules=%7B%22request%22%3A%22%2Fopt%2Fcanhelp%2Fapps%2Fweb%2Fsrc%2Fcontext%2Flocation.tsx%22%2C%22ids%22%3A%5B%22LocationProvider%22%5D%7D&server=false!|app-pages-browser|webpackICompilation/codeGeneration|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-module-loader.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[6].use[1]!/opt/canhelp/apps/web/src/components/HeroSearch.tsx|app-pages-browser|webpackLCompilation/codeGeneration|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-module-loader.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[6].use[1]!/opt/canhelp/apps/web/src/components/HomeCityCloud.tsx|app-pages-browser|webpackOCompilation/codeGeneration|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-module-loader.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[6].use[1]!/opt/canhelp/apps/web/src/components/AdminRolePreview.tsx|app-pages-browser|webpackDCompilation/codeGeneration|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-module-loader.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[6].use[1]!/opt/canhelp/apps/web/src/app/pricing/page.tsx|app-pages-browser|webpackCCompilation/codeGeneration|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-module-loader.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[6].use[1]!/opt/canhelp/apps/web/src/lib/translations.ts|app-pages-browser|webpackICompilation/codeGeneration|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-module-loader.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[6].use[1]!/opt/canhelp/apps/web/src/hooks/useEffectiveRole.ts|app-pages-browser|webpackHCompilation/codeGeneration|css|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[14].oneOf[10].use[2]!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[14].oneOf[10].use[3]!/opt/canhelp/apps/web/src/app/globals.css|0|webpackVCompilation/codeGeneration|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-module-loader.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[6].use[1]!/opt/canhelp/apps/web/src/components/Header.tsx|app-pages-browser|4044dfae43c38d37|webpack›Compilation/assets|chunk177›Compilation/assets|chunk974›Compilation/assets|chunk907®Compilation/assets|mini-css-extract-plugin.950›Compilation/assets|chunk906ÂMinifierWebpackPlugin|static/chunks/app/layout-f0e5ac958be5626f.jsÀMinifierWebpackPlugin|static/chunks/app/page-fded5d4839dbf99c.jsÈMinifierWebpackPlugin|static/chunks/app/pricing/page-01244f35fa871bb1.js»MinifierWebpackPlugin|static/chunks/906-3c2294a4e6ecf9a2.jsÂMinifierWebpackPlugin|static/BgBeW78QIlTD_SN4AcbM3/_ssgManifest.jsÄMinifierWebpackPlugin|static/BgBeW78QIlTD_SN4AcbM3/_buildManifest.js²CssMinimizerPlugin|static/css/9b5ea72bd44375b5.cssÊRealContentHashPlugin|analyse|static/chunks/app/layout-f0e5ac958be5626f.jsÈRealContentHashPlugin|analyse|static/chunks/app/page-fded5d4839dbf99c.jsÐRealContentHashPlugin|analyse|static/chunks/app/pricing/page-01244f35fa871bb1.js½RealContentHashPlugin|analyse|static/css/9b5ea72bd44375b5.cssÃRealContentHashPlugin|analyse|static/chunks/906-3c2294a4e6ecf9a2.jsÊRealContentHashPlugin|analyse|static/BgBeW78QIlTD_SN4AcbM3/_ssgManifest.js±RealContentHashPlugin|analyse|build-manifest.jsonÌRealContentHashPlugin|analyse|static/BgBeW78QIlTD_SN4AcbM3/_buildManifest.jsµRealContentHashPlugin|analyse|app-build-manifest.json²RealContentHashPlugin|generate|build-manifest.jsonÍRealContentHashPlugin|generate|static/BgBeW78QIlTD_SN4AcbM3/_buildManifest.js¶RealContentHashPlugin|generate|app-build-manifest.json˜webpack/lib/NormalModule«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSource@import(/* webpackMode: "eager" */ "/opt/canhelp/apps/web/src/app/globals.css"); ; 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"); € javascript/auto‘app-pages-browser€€…aliasˆfallback`Œserver-only$Œclient-only$Ÿnext/dist/compiled/client-only$žnext/dist/compiled/server-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.js„next¤next/dist/compiled/server-only/index¤next/dist/compiled/client-only/indexÿþ¥next/dist/client/components/noop-head“next/dist/api/image—next/dist/api/constants”next/dist/api/router™next/dist/api/app-dynamic”next/dist/api/scriptnext/dist/client/app-dir/linknext/dist/client/app-dir/form˜next/dist/api/navigation•next/dist/api/headersnext/dist/api/og”next/dist/api/server–next/dist/api/document‘next/dist/api/appž/opt/canhelp/node_modules/next`†assert†buffer‰constants†crypto†domain„http…https‚os„pathˆpunycode‡process‹querystring†streamŽstring_decoderƒsys†timersƒtty„util‚vm„zlib†eventsŒsetImmediate½/opt/canhelp/node_modules/next/dist/compiled/assert/assert.js¼/opt/canhelp/node_modules/next/dist/compiled/buffer/index.jsÐ/opt/canhelp/node_modules/next/dist/compiled/constants-browserify/constants.jsonÇ/opt/canhelp/node_modules/next/dist/compiled/crypto-browserify/index.jsÄ/opt/canhelp/node_modules/next/dist/compiled/domain-browser/index.jsÁ/opt/canhelp/node_modules/next/dist/compiled/stream-http/index.jsÆ/opt/canhelp/node_modules/next/dist/compiled/https-browserify/index.jsÅ/opt/canhelp/node_modules/next/dist/compiled/os-browserify/browser.jsÅ/opt/canhelp/node_modules/next/dist/compiled/path-browserify/index.jsÁ/opt/canhelp/node_modules/next/dist/compiled/punycode/punycode.js¾/opt/canhelp/node_modules/next/dist/build/polyfills/process.jsÅ/opt/canhelp/node_modules/next/dist/compiled/querystring-es3/index.jsÇ/opt/canhelp/node_modules/next/dist/compiled/stream-browserify/index.jsÍ/opt/canhelp/node_modules/next/dist/compiled/string_decoder/string_decoder.js¹/opt/canhelp/node_modules/next/dist/compiled/util/util.jsÆ/opt/canhelp/node_modules/next/dist/compiled/timers-browserify/main.jsÄ/opt/canhelp/node_modules/next/dist/compiled/tty-browserify/index.jsýÃ/opt/canhelp/node_modules/next/dist/compiled/vm-browserify/index.jsÅ/opt/canhelp/node_modules/next/dist/compiled/browserify-zlib/index.js½/opt/canhelp/node_modules/next/dist/compiled/events/events.jsÉ/opt/canhelp/node_modules/next/dist/compiled/setimmediate/setImmediate.js¥` ‰cacheable†parsedfileDependencies“contextDependencies“missingDependencies‘buildDependencies‘valueDependencies„hash†assetsŠassetsInfoƒrsc”topLevelDeclarationsˆsnapshot ˜webpack/lib/util/LazySetÜ/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js™webpack/DefinePlugin_hashˆad32b59447405d89688533a9„type†client€šwebpack/lib/FileSystemInfoˆSnapshot Wy²ÝyB®webpack/lib/dependencies/ImportEagerDependency`N ©/opt/canhelp/apps/web/src/app/globals.cssÿþ `R@ÖAdminRolePreview¹/opt/canhelp/apps/web/src/components/AdminRolePreview.tsxÿû AÚJ†Footer¯/opt/canhelp/apps/web/src/components/Footer.tsxÿû AN¾†Header¯/opt/canhelp/apps/web/src/components/Header.tsxÿû AÂH‘ScrollToTopButtonº/opt/canhelp/apps/web/src/components/ScrollToTopButton.tsxÿû ALÁŽLocaleProvider¬/opt/canhelp/apps/web/src/context/locale.tsxÿû AÅ>LocationProvider®/opt/canhelp/apps/web/src/context/location.tsxÿû ¥webpack/lib/cache/ResolverCachePlugin`_ResolverCachePluginCacheMiss‡context”‡request…queryˆfragment†module‰directory„fileˆinternalŽfullySpecified“descriptionFilePath“descriptionFileData“descriptionFileRootŒrelativePath–__innerRequest_request›__innerRequest_relativePathŽ__innerRequest †issuer‹issuerLayerˆcompiler€Nÿÿÿ»Æ€€ ¢/opt/canhelp/apps/web/package.json„name‡version‡private‡scriptsŒdependenciesdevDependenciesƒweb…0.1.0 ƒdev…build…start„lint‰typecheck”next dev --port 3000Šnext buildŠnext start‰next lintŒtsc --noEmit @canhelp/shared™@marsidev/react-turnstile‹better-authŠnanostoresIÿÿÿ…react‰react-domsocket.io-clientƒzod*†^1.5.0†^1.2.7†^1.2.0‡^15.1.6‡^19.0.0ÿ†^4.8.1‡^3.24.1‹@types/nodeŒ@types/react@types/react-domŒautoprefixer‡postcss‹tailwindcssŠtypescriptˆ^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/components/AdminRolePreview.tsxÿÿ@‰ PŽy²ÝyB Ť/opt/canhelp/apps/web/src/components™/opt/canhelp/apps/web/srcû‘/opt/canhelp/appsŒ/opt/canhelp„/opt/†ˆsafeTime‰timestampjÿÿÿ! e¿ÙyBe¿ÙyBd659fc12c42d40f9ýªü©û¨ú§ù¦ø¥÷¤ö!`n²ÝyBPn²ÝyBb19ff6f2ce4ca77f `Æ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/components/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/src/components/package.json¦/opt/canhelp/apps/web/src/package.jsonÎ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/components/AdminRolePreview.tsxÑ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/components/AdminRolePreview.tsx.jsÒ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/components/AdminRolePreview.tsx.mjsÒ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/components/AdminRolePreview.tsx.tsxÑ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/components/AdminRolePreview.tsx.tsÒ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/components/AdminRolePreview.tsx.jsxÓ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/components/AdminRolePreview.tsx.jsonÓ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/components/AdminRolePreview.tsx.wasm‰˜ œ€ëþÿÿXÿÿÿoÿÿÿ€€ ÔÕ›./src/components/Header.tsxÿÿ@‰ 0¹y²ÝyB mÿÿÿÖÝ! n²ÝyBn²ÝyBe61d52449fc29073Ûˆ æÄ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/components/Header.tsxÇ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/components/Header.tsx.jsÈ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/components/Header.tsx.mjsÈ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/components/Header.tsx.tsxÇ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/components/Header.tsx.tsÈ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/components/Header.tsx.jsxÉ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/components/Header.tsx.jsonÉ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/components/Header.tsx.wasmäƒ@  0¹y²ÝyB ÊÆËÐ}ÿÿÿÏ|ÿÿÿÎ{ÿÿÿ 0¹y²ÝyB ŠÈÉ/Ì! e¿ÙyBe¿ÙyBÍËxÿÿÿÊwÿÿÿÉvÿÿÿ@€ ÒÓÔ@€ ×ÔÕ '// extracted by mini-css-extract-plugin ŽsideEffectFree   ÁþÿÿÂþÿÿ/opt/canhelp/apps/web/src/appÿÿÿü ü` ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿ!ÿÿÿ#ÿÿÿ$ÿÿÿ Ñ/opt/canhelp/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.jsÕ/opt/canhelp/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.jsÓ/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-css-loader.jsÎ/opt/canhelp/node_modules/next/dist/compiled/mini-css-extract-plugin/loader.js "ÿÿÿ#ÿÿÿf8862f259a3eacf2@I Wy²ÝyB *ÿÿÿ¨/opt/canhelp/apps/web/tailwind.config.ts«! N»ÛyBN»ÛyB8d918037d37f5a82©! f¿ÙyBf¿ÙyBabc6734340c148fb  ¤timestampHashÿÿÿ àn²ÝyB43d8905ad5e82bfae4a7da7d15b56324 ÓþÿÿŒnext@15.5.14×/opt/canhelp/node_modules/next/dist/build/webpack/loaders/css-loader/src/runtime/api.js«/opt/canhelp/node_modules/next/package.jsonªmini-css-extract-plugin/dist/CssDependency/opt/canhelp/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[14].oneOf[10].use[2]!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[14].oneOf[10].use[3]!/opt/canhelp/apps/web/src/app/globals.css^@font-face { font-family: 'Showpop'; src: url('/fonts/showpop.woff2') format('woff2'); font-weight: normal; font-style: normal; font-display: swap; } .logo-text { font-family: 'Showpop', sans-serif; letter-spacing: 0.01em; font-weight: normal; } @font-face { font-family: 'UnifixSP'; src: url('/fonts/UnifixSP.woff2') format('woff2'); font-weight: normal; font-style: normal; font-display: swap; } .logo-text-unifix { font-family: 'UnifixSP', sans-serif; letter-spacing: 0.01em; font-weight: normal; } @font-face { font-family: 'MotivationOfHearts'; src: url('/fonts/MotivationOfHearts.woff2') format('woff2'); font-weight: normal; font-style: normal; font-display: swap; } .logo-text-motivation { font-family: 'MotivationOfHearts', sans-serif; letter-spacing: 0.01em; font-weight: normal; } *, ::before, ::after { --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-shadow: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-shadow-colored: 0 0 #0000; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; --tw-contain-size: ; --tw-contain-layout: ; --tw-contain-paint: ; --tw-contain-style: ; } ::backdrop { --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-shadow: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-shadow-colored: 0 0 #0000; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; --tw-contain-size: ; --tw-contain-layout: ; --tw-contain-paint: ; --tw-contain-style: ; } /* ! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com */ /* 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) 2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) */ *, ::before, ::after { box-sizing: border-box; /* 1 */ border-width: 0; /* 2 */ border-style: solid; /* 2 */ border-color: #e5e7eb; /* 2 */ } ::before, ::after { --tw-content: ''; } /* 1. Use a consistent sensible line-height in all browsers. 2. Prevent adjustments of font size after orientation changes in iOS. 3. Use a more readable tab size. 4. Use the user's configured `sans` font-family by default. 5. Use the user's configured `sans` font-feature-settings by default. 6. Use the user's configured `sans` font-variation-settings by default. 7. Disable tap highlights on iOS */ html, :host { line-height: 1.5; /* 1 */ -webkit-text-size-adjust: 100%; /* 2 */ -moz-tab-size: 4; /* 3 */ -o-tab-size: 4; tab-size: 4; /* 3 */ font-family: Inter, system-ui, sans-serif; /* 4 */ font-feature-settings: normal; /* 5 */ font-variation-settings: normal; /* 6 */ -webkit-tap-highlight-color: transparent; /* 7 */ } /* 1. Remove the margin in all browsers. 2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. */ body { margin: 0; /* 1 */ line-height: inherit; /* 2 */ } /* 1. Add the correct height in Firefox. 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) 3. Ensure horizontal rules are visible by default. */ hr { height: 0; /* 1 */ color: inherit; /* 2 */ border-top-width: 1px; /* 3 */ } /* Add the correct text decoration in Chrome, Edge, and Safari. */ abbr:where([title]) { -webkit-text-decoration: underline dotted; text-decoration: underline dotted; } /* Remove the default font size and weight for headings. */ h1, h2, h3, h4, h5, h6 { font-size: inherit; font-weight: inherit; } /* Reset links to optimize for opt-in styling instead of opt-out. */ a { color: inherit; text-decoration: inherit; } /* Add the correct font weight in Edge and Safari. */ b, strong { font-weight: bolder; } /* 1. Use the user's configured `mono` font-family by default. 2. Use the user's configured `mono` font-feature-settings by default. 3. Use the user's configured `mono` font-variation-settings by default. 4. Correct the odd `em` font sizing in all browsers. */ code, kbd, samp, pre { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; /* 1 */ font-feature-settings: normal; /* 2 */ font-variation-settings: normal; /* 3 */ font-size: 1em; /* 4 */ } /* Add the correct font size in all browsers. */ small { font-size: 80%; } /* Prevent `sub` and `sup` elements from affecting the line height in all browsers. */ sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } sub { bottom: -0.25em; } sup { top: -0.5em; } /* 1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) 2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) 3. Remove gaps between table borders by default. */ table { text-indent: 0; /* 1 */ border-color: inherit; /* 2 */ border-collapse: collapse; /* 3 */ } /* 1. Change the font styles in all browsers. 2. Remove the margin in Firefox and Safari. 3. Remove default padding in all browsers. */ button, input, optgroup, select, textarea { font-family: inherit; /* 1 */ font-feature-settings: inherit; /* 1 */ font-variation-settings: inherit; /* 1 */ font-size: 100%; /* 1 */ font-weight: inherit; /* 1 */ line-height: inherit; /* 1 */ letter-spacing: inherit; /* 1 */ color: inherit; /* 1 */ margin: 0; /* 2 */ padding: 0; /* 3 */ } /* Remove the inheritance of text transform in Edge and Firefox. */ button, select { text-transform: none; } /* 1. Correct the inability to style clickable types in iOS and Safari. 2. Remove default button styles. */ button, input:where([type='button']), input:where([type='reset']), input:where([type='submit']) { -webkit-appearance: button; /* 1 */ background-color: transparent; /* 2 */ background-image: none; /* 2 */ } /* Use the modern Firefox focus style for all focusable elements. */ :-moz-focusring { outline: auto; } /* Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) */ :-moz-ui-invalid { box-shadow: none; } /* Add the correct vertical alignment in Chrome and Firefox. */ progress { vertical-align: baseline; } /* Correct the cursor style of increment and decrement buttons in Safari. */ ::-webkit-inner-spin-button, ::-webkit-outer-spin-button { height: auto; } /* 1. Correct the odd appearance in Chrome and Safari. 2. Correct the outline style in Safari. */ [type='search'] { -webkit-appearance: textfield; /* 1 */ outline-offset: -2px; /* 2 */ } /* Remove the inner padding in Chrome and Safari on macOS. */ ::-webkit-search-decoration { -webkit-appearance: none; } /* 1. Correct the inability to style clickable types in iOS and Safari. 2. Change font properties to `inherit` in Safari. */ ::-webkit-file-upload-button { -webkit-appearance: button; /* 1 */ font: inherit; /* 2 */ } /* Add the correct display in Chrome and Safari. */ summary { display: list-item; } /* Removes the default spacing and border for appropriate elements. */ blockquote, dl, dd, h1, h2, h3, h4, h5, h6, hr, figure, p, pre { margin: 0; } fieldset { margin: 0; padding: 0; } legend { padding: 0; } ol, ul, menu { list-style: none; margin: 0; padding: 0; } /* Reset default styling for dialogs. */ dialog { padding: 0; } /* Prevent resizing textareas horizontally by default. */ textarea { resize: vertical; } /* 1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) 2. Set the default placeholder color to the user's configured gray 400 color. */ input::-moz-placeholder, textarea::-moz-placeholder { opacity: 1; /* 1 */ color: #9ca3af; /* 2 */ } input::placeholder, textarea::placeholder { opacity: 1; /* 1 */ color: #9ca3af; /* 2 */ } /* Set the default cursor for buttons. */ button, [role="button"] { cursor: pointer; } /* Make sure disabled buttons don't get the pointer cursor. */ :disabled { cursor: default; } /* 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) This can trigger a poorly considered lint error in some tools but is included by design. */ img, svg, video, canvas, audio, iframe, embed, object { display: block; /* 1 */ vertical-align: middle; /* 2 */ } /* Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) */ img, video { max-width: 100%; height: auto; } /* Make elements with the HTML hidden attribute stay hidden by default */ [hidden]:where(:not([hidden="until-found"])) { display: none; } .container { width: 100%; } @media (min-width: 640px) { .container { max-width: 640px; } } @media (min-width: 768px) { .container { max-width: 768px; } } @media (min-width: 1024px) { .container { max-width: 1024px; } } @media (min-width: 1280px) { .container { max-width: 1280px; } } @media (min-width: 1536px) { .container { max-width: 1536px; } } .pointer-events-none { pointer-events: none; } .visible { visibility: visible; } .static { position: static; } .fixed { position: fixed; } .absolute { position: absolute; } .relative { position: relative; } .sticky { position: sticky; } .-inset-1 { inset: -0.25rem; } .inset-0 { inset: 0px; } .-right-1\.5 { right: -0.375rem; } .-top-1\.5 { top: -0.375rem; } .-top-10 { top: -2.5rem; } .bottom-1 { bottom: 0.25rem; } .bottom-20 { bottom: 5rem; } .bottom-5 { bottom: 1.25rem; } .bottom-6 { bottom: 1.5rem; } .left-0 { left: 0px; } .left-0\.5 { left: 0.125rem; } .left-1\/2 { left: 50%; } .left-1\/4 { left: 25%; } .left-3 { left: 0.75rem; } .left-4 { left: 1rem; } .right-0 { right: 0px; } .right-0\.5 { right: 0.125rem; } .right-1 { right: 0.25rem; } .right-1\/4 { right: 25%; } .right-2 { right: 0.5rem; } .right-3 { right: 0.75rem; } .right-4 { right: 1rem; } .right-5 { right: 1.25rem; } .right-6 { right: 1.5rem; } .top-0 { top: 0px; } .top-0\.5 { top: 0.125rem; } .top-1 { top: 0.25rem; } .top-1\/2 { top: 50%; } .top-2 { top: 0.5rem; } .top-20 { top: 5rem; } .top-24 { top: 6rem; } .top-3 { top: 0.75rem; } .top-4 { top: 1rem; } .top-6 { top: 1.5rem; } .top-full { top: 100%; } .z-10 { z-index: 10; } .z-40 { z-index: 40; } .z-50 { z-index: 50; } .z-\[200\] { z-index: 200; } .z-\[60\] { z-index: 60; } .col-span-2 { grid-column: span 2 / span 2; } .m-0\.5 { margin: 0.125rem; } .mx-0\.5 { margin-left: 0.125rem; margin-right: 0.125rem; } .mx-4 { margin-left: 1rem; margin-right: 1rem; } .mx-5 { margin-left: 1.25rem; margin-right: 1.25rem; } .mx-auto { margin-left: auto; margin-right: auto; } .my-1 { margin-top: 0.25rem; margin-bottom: 0.25rem; } .-mb-px { margin-bottom: -1px; } .-mt-1 { margin-top: -0.25rem; } .-mt-px { margin-top: -1px; } .mb-0 { margin-bottom: 0px; } .mb-0\.5 { margin-bottom: 0.125rem; } .mb-1 { margin-bottom: 0.25rem; } .mb-1\.5 { margin-bottom: 0.375rem; } .mb-10 { margin-bottom: 2.5rem; } .mb-12 { margin-bottom: 3rem; } .mb-14 { margin-bottom: 3.5rem; } .mb-2 { margin-bottom: 0.5rem; } .mb-3 { margin-bottom: 0.75rem; } .mb-4 { margin-bottom: 1rem; } .mb-5 { margin-bottom: 1.25rem; } .mb-6 { margin-bottom: 1.5rem; } .mb-8 { margin-bottom: 2rem; } .ml-1 { margin-left: 0.25rem; } .ml-1\.5 { margin-left: 0.375rem; } .ml-2 { margin-left: 0.5rem; } .ml-3 { margin-left: 0.75rem; } .ml-4 { margin-left: 1rem; } .ml-6 { margin-left: 1.5rem; } .ml-auto { margin-left: auto; } .mr-0\.5 { margin-right: 0.125rem; } .mr-1 { margin-right: 0.25rem; } .mr-2 { margin-right: 0.5rem; } .mt-0\.5 { margin-top: 0.125rem; } .mt-1 { margin-top: 0.25rem; } .mt-1\.5 { margin-top: 0.375rem; } .mt-10 { margin-top: 2.5rem; } .mt-16 { margin-top: 4rem; } .mt-2 { margin-top: 0.5rem; } .mt-3 { margin-top: 0.75rem; } .mt-4 { margin-top: 1rem; } .mt-5 { margin-top: 1.25rem; } .mt-6 { margin-top: 1.5rem; } .mt-8 { margin-top: 2rem; } .mt-auto { margin-top: auto; } .line-clamp-1 { overflow: hidden; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 1; } .line-clamp-2 { overflow: hidden; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; } .block { display: block; } .inline-block { display: inline-block; } .inline { display: inline; } .flex { display: flex; } .inline-flex { display: inline-flex; } .table { display: table; } .grid { display: grid; } .hidden { display: none; } .aspect-square { aspect-ratio: 1 / 1; } .h-0 { height: 0px; } .h-0\.5 { height: 0.125rem; } .h-1 { height: 0.25rem; } .h-1\.5 { height: 0.375rem; } .h-10 { height: 2.5rem; } .h-12 { height: 3rem; } .h-14 { height: 3.5rem; } .h-16 { height: 4rem; } .h-2 { height: 0.5rem; } .h-2\.5 { height: 0.625rem; } .h-20 { height: 5rem; } .h-24 { height: 6rem; } .h-28 { height: 7rem; } .h-3 { height: 0.75rem; } .h-3\.5 { height: 0.875rem; } .h-4 { height: 1rem; } .h-40 { height: 10rem; } .h-5 { height: 1.25rem; } .h-6 { height: 1.5rem; } .h-7 { height: 1.75rem; } .h-8 { height: 2rem; } .h-9 { height: 2.25rem; } .h-\[400px\] { height: 400px; } .h-\[500px\] { height: 500px; } .h-\[calc\(100vh-80px\)\] { height: calc(100vh - 80px); } .h-full { height: 100%; } .h-px { height: 1px; } .max-h-32 { max-height: 8rem; } .max-h-40 { max-height: 10rem; } .max-h-64 { max-height: 16rem; } .max-h-72 { max-height: 18rem; } .max-h-80 { max-height: 20rem; } .max-h-96 { max-height: 24rem; } .max-h-\[60vh\] { max-height: 60vh; } .max-h-\[80vh\] { max-height: 80vh; } .max-h-\[85vh\] { max-height: 85vh; } .max-h-\[90vh\] { max-height: 90vh; } .min-h-0 { min-height: 0px; } .min-h-\[24px\] { min-height: 24px; } .min-h-\[28px\] { min-height: 28px; } .min-h-\[40px\] { min-height: 40px; } .min-h-screen { min-height: 100vh; } .w-0 { width: 0px; } .w-1 { width: 0.25rem; } .w-1\.5 { width: 0.375rem; } .w-1\/2 { width: 50%; } .w-10 { width: 2.5rem; } .w-11 { width: 2.75rem; } .w-12 { width: 3rem; } .w-14 { width: 3.5rem; } .w-16 { width: 4rem; } .w-2 { width: 0.5rem; } .w-2\.5 { width: 0.625rem; } .w-20 { width: 5rem; } .w-24 { width: 6rem; } .w-28 { width: 7rem; } .w-3 { width: 0.75rem; } .w-3\.5 { width: 0.875rem; } .w-4 { width: 1rem; } .w-40 { width: 10rem; } .w-44 { width: 11rem; } .w-5 { width: 1.25rem; } .w-52 { width: 13rem; } .w-56 { width: 14rem; } .w-6 { width: 1.5rem; } .w-7 { width: 1.75rem; } .w-72 { width: 18rem; } .w-8 { width: 2rem; } .w-9 { width: 2.25rem; } .w-\[400px\] { width: 400px; } .w-\[500px\] { width: 500px; } .w-fit { width: -moz-fit-content; width: fit-content; } .w-full { width: 100%; } .w-px { width: 1px; } .min-w-0 { min-width: 0px; } .min-w-32 { min-width: 8rem; } .min-w-72 { min-width: 18rem; } .min-w-\[140px\] { min-width: 140px; } .min-w-\[16px\] { min-width: 16px; } .min-w-\[180px\] { min-width: 180px; } .min-w-\[200px\] { min-width: 200px; } .min-w-\[220px\] { min-width: 220px; } .min-w-\[240px\] { min-width: 240px; } .min-w-fit { min-width: -moz-fit-content; min-width: fit-content; } .max-w-2xl { max-width: 42rem; } .max-w-3xl { max-width: 48rem; } .max-w-4xl { max-width: 56rem; } .max-w-5xl { max-width: 64rem; } .max-w-6xl { max-width: 72rem; } .max-w-7xl { max-width: 80rem; } .max-w-\[100px\] { max-width: 100px; } .max-w-\[70\%\] { max-width: 70%; } .max-w-\[90px\] { max-width: 90px; } .max-w-full { max-width: 100%; } .max-w-lg { max-width: 32rem; } .max-w-md { max-width: 28rem; } .max-w-sm { max-width: 24rem; } .max-w-xl { max-width: 36rem; } .max-w-xs { max-width: 20rem; } .flex-1 { flex: 1 1 0%; } .flex-\[2\] { flex: 2; } .flex-shrink-0 { flex-shrink: 0; } .shrink-0 { flex-shrink: 0; } .grow { flex-grow: 1; } .-translate-x-1\/2 { --tw-translate-x: -50%; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .-translate-x-12 { --tw-translate-x: -3rem; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .-translate-y-1\/2 { --tw-translate-y: -50%; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .translate-x-0 { --tw-translate-x: 0px; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .translate-x-1 { --tw-translate-x: 0.25rem; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .translate-x-12 { --tw-translate-x: 3rem; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .translate-x-3 { --tw-translate-x: 0.75rem; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .translate-x-5 { --tw-translate-x: 1.25rem; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .translate-x-6 { --tw-translate-x: 1.5rem; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .translate-y-0 { --tw-translate-y: 0px; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .translate-y-4 { --tw-translate-y: 1rem; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .rotate-180 { --tw-rotate: 180deg; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .rotate-45 { --tw-rotate: 45deg; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .rotate-90 { --tw-rotate: 90deg; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .scale-105 { --tw-scale-x: 1.05; --tw-scale-y: 1.05; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .transform { transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } @keyframes pulse { 50% { opacity: .5; } } .animate-pulse { animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; } @keyframes spin { to { transform: rotate(360deg); } } .animate-spin { animation: spin 1s linear infinite; } .cursor-default { cursor: default; } .cursor-not-allowed { cursor: not-allowed; } .cursor-pointer { cursor: pointer; } .select-none { -webkit-user-select: none; -moz-user-select: none; user-select: none; } .select-all { -webkit-user-select: all; -moz-user-select: all; user-select: all; } .resize-none { resize: none; } .resize-y { resize: vertical; } .snap-x { scroll-snap-type: x var(--tw-scroll-snap-strictness); } .snap-mandatory { --tw-scroll-snap-strictness: mandatory; } .snap-start { scroll-snap-align: start; } .grid-cols-1 { grid-template-columns: repeat(1, minmax(0, 1fr)); } .grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } .grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } .grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); } .grid-cols-7 { grid-template-columns: repeat(7, minmax(0, 1fr)); } .flex-row-reverse { flex-direction: row-reverse; } .flex-col { flex-direction: column; } .flex-wrap { flex-wrap: wrap; } .items-start { align-items: flex-start; } .items-end { align-items: flex-end; } .items-center { align-items: center; } .justify-end { justify-content: flex-end; } .justify-center { justify-content: center; } .justify-between { justify-content: space-between; } .gap-0 { gap: 0px; } .gap-0\.5 { gap: 0.125rem; } .gap-1 { gap: 0.25rem; } .gap-1\.5 { gap: 0.375rem; } .gap-10 { gap: 2.5rem; } .gap-2 { gap: 0.5rem; } .gap-2\.5 { gap: 0.625rem; } .gap-3 { gap: 0.75rem; } .gap-4 { gap: 1rem; } .gap-5 { gap: 1.25rem; } .gap-6 { gap: 1.5rem; } .gap-8 { gap: 2rem; } .gap-y-3 { row-gap: 0.75rem; } .space-y-0\.5 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(0.125rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(0.125rem * var(--tw-space-y-reverse)); } .space-y-1 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(0.25rem * var(--tw-space-y-reverse)); } .space-y-1\.5 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(0.375rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(0.375rem * var(--tw-space-y-reverse)); } .space-y-16 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(4rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(4rem * var(--tw-space-y-reverse)); } .space-y-2 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(0.5rem * var(--tw-space-y-reverse)); } .space-y-3 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(0.75rem * var(--tw-space-y-reverse)); } .space-y-4 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(1rem * var(--tw-space-y-reverse)); } .space-y-5 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(1.25rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(1.25rem * var(--tw-space-y-reverse)); } .space-y-6 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(1.5rem * var(--tw-space-y-reverse)); } .space-y-8 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(2rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(2rem * var(--tw-space-y-reverse)); } .divide-y > :not([hidden]) ~ :not([hidden]) { --tw-divide-y-reverse: 0; border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse))); border-bottom-width: calc(1px * var(--tw-divide-y-reverse)); } .divide-gray-100 > :not([hidden]) ~ :not([hidden]) { --tw-divide-opacity: 1; border-color: rgb(243 244 246 / var(--tw-divide-opacity, 1)); } .self-end { align-self: flex-end; } .self-center { align-self: center; } .overflow-hidden { overflow: hidden; } .overflow-x-auto { overflow-x: auto; } .overflow-y-auto { overflow-y: auto; } .truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .whitespace-nowrap { white-space: nowrap; } .whitespace-pre-wrap { white-space: pre-wrap; } .rounded { border-radius: 0.25rem; } .rounded-2xl { border-radius: 1rem; } .rounded-\[2\.5rem\] { border-radius: 2.5rem; } .rounded-full { border-radius: 9999px; } .rounded-lg { border-radius: 0.5rem; } .rounded-md { border-radius: 0.375rem; } .rounded-xl { border-radius: 0.75rem; } .rounded-b-xl { border-bottom-right-radius: 0.75rem; border-bottom-left-radius: 0.75rem; } .rounded-t-lg { border-top-left-radius: 0.5rem; border-top-right-radius: 0.5rem; } .rounded-tl-sm { border-top-left-radius: 0.125rem; } .rounded-tr-sm { border-top-right-radius: 0.125rem; } .border { border-width: 1px; } .border-0 { border-width: 0px; } .border-2 { border-width: 2px; } .border-y { border-top-width: 1px; border-bottom-width: 1px; } .border-b { border-bottom-width: 1px; } .border-b-2 { border-bottom-width: 2px; } .border-l-2 { border-left-width: 2px; } .border-r { border-right-width: 1px; } .border-r-2 { border-right-width: 2px; } .border-t { border-top-width: 1px; } .border-t-0 { border-top-width: 0px; } .border-t-4 { border-top-width: 4px; } .border-dashed { border-style: dashed; } .border-amber-100 { --tw-border-opacity: 1; border-color: rgb(254 243 199 / var(--tw-border-opacity, 1)); } .border-amber-200 { --tw-border-opacity: 1; border-color: rgb(253 230 138 / var(--tw-border-opacity, 1)); } .border-amber-300 { --tw-border-opacity: 1; border-color: rgb(252 211 77 / var(--tw-border-opacity, 1)); } .border-amber-500 { --tw-border-opacity: 1; border-color: rgb(245 158 11 / var(--tw-border-opacity, 1)); } .border-blue-100 { --tw-border-opacity: 1; border-color: rgb(219 234 254 / var(--tw-border-opacity, 1)); } .border-blue-200 { --tw-border-opacity: 1; border-color: rgb(191 219 254 / var(--tw-border-opacity, 1)); } .border-blue-300 { --tw-border-opacity: 1; border-color: rgb(147 197 253 / var(--tw-border-opacity, 1)); } .border-blue-400 { --tw-border-opacity: 1; border-color: rgb(96 165 250 / var(--tw-border-opacity, 1)); } .border-blue-50 { --tw-border-opacity: 1; border-color: rgb(239 246 255 / var(--tw-border-opacity, 1)); } .border-blue-500 { --tw-border-opacity: 1; border-color: rgb(59 130 246 / var(--tw-border-opacity, 1)); } .border-blue-500\/10 { border-color: rgb(59 130 246 / 0.1); } .border-blue-500\/20 { border-color: rgb(59 130 246 / 0.2); } .border-blue-600 { --tw-border-opacity: 1; border-color: rgb(37 99 235 / var(--tw-border-opacity, 1)); } .border-emerald-100 { --tw-border-opacity: 1; border-color: rgb(209 250 229 / var(--tw-border-opacity, 1)); } .border-emerald-300 { --tw-border-opacity: 1; border-color: rgb(110 231 183 / var(--tw-border-opacity, 1)); } .border-emerald-400 { --tw-border-opacity: 1; border-color: rgb(52 211 153 / var(--tw-border-opacity, 1)); } .border-emerald-500 { --tw-border-opacity: 1; border-color: rgb(16 185 129 / var(--tw-border-opacity, 1)); } .border-emerald-500\/20 { border-color: rgb(16 185 129 / 0.2); } .border-gray-100 { --tw-border-opacity: 1; border-color: rgb(243 244 246 / var(--tw-border-opacity, 1)); } .border-gray-200 { --tw-border-opacity: 1; border-color: rgb(229 231 235 / var(--tw-border-opacity, 1)); } .border-gray-300 { --tw-border-opacity: 1; border-color: rgb(209 213 219 / var(--tw-border-opacity, 1)); } .border-gray-50 { --tw-border-opacity: 1; border-color: rgb(249 250 251 / var(--tw-border-opacity, 1)); } .border-green-100 { --tw-border-opacity: 1; border-color: rgb(220 252 231 / var(--tw-border-opacity, 1)); } .border-green-200 { --tw-border-opacity: 1; border-color: rgb(187 247 208 / var(--tw-border-opacity, 1)); } .border-indigo-100 { --tw-border-opacity: 1; border-color: rgb(224 231 255 / var(--tw-border-opacity, 1)); } .border-orange-100 { --tw-border-opacity: 1; border-color: rgb(255 237 213 / var(--tw-border-opacity, 1)); } .border-orange-200 { --tw-border-opacity: 1; border-color: rgb(254 215 170 / var(--tw-border-opacity, 1)); } .border-pink-200 { --tw-border-opacity: 1; border-color: rgb(251 207 232 / var(--tw-border-opacity, 1)); } .border-purple-100 { --tw-border-opacity: 1; border-color: rgb(243 232 255 / var(--tw-border-opacity, 1)); } .border-purple-200 { --tw-border-opacity: 1; border-color: rgb(233 213 255 / var(--tw-border-opacity, 1)); } .border-purple-500\/10 { border-color: rgb(168 85 247 / 0.1); } .border-red-100 { --tw-border-opacity: 1; border-color: rgb(254 226 226 / var(--tw-border-opacity, 1)); } .border-red-200 { --tw-border-opacity: 1; border-color: rgb(254 202 202 / var(--tw-border-opacity, 1)); } .border-red-300 { --tw-border-opacity: 1; border-color: rgb(252 165 165 / var(--tw-border-opacity, 1)); } .border-red-400 { --tw-border-opacity: 1; border-color: rgb(248 113 113 / var(--tw-border-opacity, 1)); } .border-rose-100 { --tw-border-opacity: 1; border-color: rgb(255 228 230 / var(--tw-border-opacity, 1)); } .border-rose-300 { --tw-border-opacity: 1; border-color: rgb(253 164 175 / var(--tw-border-opacity, 1)); } .border-rose-500 { --tw-border-opacity: 1; border-color: rgb(244 63 94 / var(--tw-border-opacity, 1)); } .border-sky-100 { --tw-border-opacity: 1; border-color: rgb(224 242 254 / var(--tw-border-opacity, 1)); } .border-slate-100 { --tw-border-opacity: 1; border-color: rgb(241 245 249 / var(--tw-border-opacity, 1)); } .border-slate-200 { --tw-border-opacity: 1; border-color: rgb(226 232 240 / var(--tw-border-opacity, 1)); } .border-teal-100 { --tw-border-opacity: 1; border-color: rgb(204 251 241 / var(--tw-border-opacity, 1)); } .border-transparent { border-color: transparent; } .border-violet-100 { --tw-border-opacity: 1; border-color: rgb(237 233 254 / var(--tw-border-opacity, 1)); } .border-white { --tw-border-opacity: 1; border-color: rgb(255 255 255 / var(--tw-border-opacity, 1)); } .border-white\/10 { border-color: rgb(255 255 255 / 0.1); } .border-white\/20 { border-color: rgb(255 255 255 / 0.2); } .border-white\/30 { border-color: rgb(255 255 255 / 0.3); } .border-white\/40 { border-color: rgb(255 255 255 / 0.4); } .border-yellow-200 { --tw-border-opacity: 1; border-color: rgb(254 240 138 / var(--tw-border-opacity, 1)); } .border-l-blue-500 { --tw-border-opacity: 1; border-left-color: rgb(59 130 246 / var(--tw-border-opacity, 1)); } .border-t-blue-500 { --tw-border-opacity: 1; border-top-color: rgb(59 130 246 / var(--tw-border-opacity, 1)); } .border-t-transparent { border-top-color: transparent; } .border-t-white { --tw-border-opacity: 1; border-top-color: rgb(255 255 255 / var(--tw-border-opacity, 1)); } .bg-\[\#003087\] { --tw-bg-opacity: 1; background-color: rgb(0 48 135 / var(--tw-bg-opacity, 1)); } .bg-amber-100 { --tw-bg-opacity: 1; background-color: rgb(254 243 199 / var(--tw-bg-opacity, 1)); } .bg-amber-400 { --tw-bg-opacity: 1; background-color: rgb(251 191 36 / var(--tw-bg-opacity, 1)); } .bg-amber-50 { --tw-bg-opacity: 1; background-color: rgb(255 251 235 / var(--tw-bg-opacity, 1)); } .bg-amber-500 { --tw-bg-opacity: 1; background-color: rgb(245 158 11 / var(--tw-bg-opacity, 1)); } .bg-amber-500\/10 { background-color: rgb(245 158 11 / 0.1); } .bg-black\/0 { background-color: rgb(0 0 0 / 0); } .bg-black\/40 { background-color: rgb(0 0 0 / 0.4); } .bg-black\/50 { background-color: rgb(0 0 0 / 0.5); } .bg-black\/60 { background-color: rgb(0 0 0 / 0.6); } .bg-black\/70 { background-color: rgb(0 0 0 / 0.7); } .bg-black\/80 { background-color: rgb(0 0 0 / 0.8); } .bg-black\/85 { background-color: rgb(0 0 0 / 0.85); } .bg-black\/90 { background-color: rgb(0 0 0 / 0.9); } .bg-blue-100 { --tw-bg-opacity: 1; background-color: rgb(219 234 254 / var(--tw-bg-opacity, 1)); } .bg-blue-50 { --tw-bg-opacity: 1; background-color: rgb(239 246 255 / var(--tw-bg-opacity, 1)); } .bg-blue-50\/30 { background-color: rgb(239 246 255 / 0.3); } .bg-blue-50\/60 { background-color: rgb(239 246 255 / 0.6); } .bg-blue-500 { --tw-bg-opacity: 1; background-color: rgb(59 130 246 / var(--tw-bg-opacity, 1)); } .bg-blue-500\/10 { background-color: rgb(59 130 246 / 0.1); } .bg-blue-600 { --tw-bg-opacity: 1; background-color: rgb(37 99 235 / var(--tw-bg-opacity, 1)); } .bg-blue-600\/10 { background-color: rgb(37 99 235 / 0.1); } .bg-emerald-100 { --tw-bg-opacity: 1; background-color: rgb(209 250 229 / var(--tw-bg-opacity, 1)); } .bg-emerald-200 { --tw-bg-opacity: 1; background-color: rgb(167 243 208 / var(--tw-bg-opacity, 1)); } .bg-emerald-400 { --tw-bg-opacity: 1; background-color: rgb(52 211 153 / var(--tw-bg-opacity, 1)); } .bg-emerald-50 { --tw-bg-opacity: 1; background-color: rgb(236 253 245 / var(--tw-bg-opacity, 1)); } .bg-emerald-500 { --tw-bg-opacity: 1; background-color: rgb(16 185 129 / var(--tw-bg-opacity, 1)); } .bg-emerald-500\/10 { background-color: rgb(16 185 129 / 0.1); } .bg-emerald-500\/20 { background-color: rgb(16 185 129 / 0.2); } .bg-emerald-600 { --tw-bg-opacity: 1; background-color: rgb(5 150 105 / var(--tw-bg-opacity, 1)); } .bg-gray-100 { --tw-bg-opacity: 1; background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1)); } .bg-gray-200 { --tw-bg-opacity: 1; background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1)); } .bg-gray-300 { --tw-bg-opacity: 1; background-color: rgb(209 213 219 / var(--tw-bg-opacity, 1)); } .bg-gray-400 { --tw-bg-opacity: 1; background-color: rgb(156 163 175 / var(--tw-bg-opacity, 1)); } .bg-gray-50 { --tw-bg-opacity: 1; background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1)); } .bg-gray-600 { --tw-bg-opacity: 1; background-color: rgb(75 85 99 / var(--tw-bg-opacity, 1)); } .bg-gray-900 { --tw-bg-opacity: 1; background-color: rgb(17 24 39 / var(--tw-bg-opacity, 1)); } .bg-green-100 { --tw-bg-opacity: 1; background-color: rgb(220 252 231 / var(--tw-bg-opacity, 1)); } .bg-green-400 { --tw-bg-opacity: 1; background-color: rgb(74 222 128 / var(--tw-bg-opacity, 1)); } .bg-green-50 { --tw-bg-opacity: 1; background-color: rgb(240 253 244 / var(--tw-bg-opacity, 1)); } .bg-green-500 { --tw-bg-opacity: 1; background-color: rgb(34 197 94 / var(--tw-bg-opacity, 1)); } .bg-green-600 { --tw-bg-opacity: 1; background-color: rgb(22 163 74 / var(--tw-bg-opacity, 1)); } .bg-indigo-100 { --tw-bg-opacity: 1; background-color: rgb(224 231 255 / var(--tw-bg-opacity, 1)); } .bg-indigo-50 { --tw-bg-opacity: 1; background-color: rgb(238 242 255 / var(--tw-bg-opacity, 1)); } .bg-indigo-600 { --tw-bg-opacity: 1; background-color: rgb(79 70 229 / var(--tw-bg-opacity, 1)); } .bg-orange-100 { --tw-bg-opacity: 1; background-color: rgb(255 237 213 / var(--tw-bg-opacity, 1)); } .bg-orange-50 { --tw-bg-opacity: 1; background-color: rgb(255 247 237 / var(--tw-bg-opacity, 1)); } .bg-orange-500 { --tw-bg-opacity: 1; background-color: rgb(249 115 22 / var(--tw-bg-opacity, 1)); } .bg-pink-50 { --tw-bg-opacity: 1; background-color: rgb(253 242 248 / var(--tw-bg-opacity, 1)); } .bg-purple-100 { --tw-bg-opacity: 1; background-color: rgb(243 232 255 / var(--tw-bg-opacity, 1)); } .bg-purple-400 { --tw-bg-opacity: 1; background-color: rgb(192 132 252 / var(--tw-bg-opacity, 1)); } .bg-purple-50 { --tw-bg-opacity: 1; background-color: rgb(250 245 255 / var(--tw-bg-opacity, 1)); } .bg-purple-500\/10 { background-color: rgb(168 85 247 / 0.1); } .bg-purple-600 { --tw-bg-opacity: 1; background-color: rgb(147 51 234 / var(--tw-bg-opacity, 1)); } .bg-red-100 { --tw-bg-opacity: 1; background-color: rgb(254 226 226 / var(--tw-bg-opacity, 1)); } .bg-red-200 { --tw-bg-opacity: 1; background-color: rgb(254 202 202 / var(--tw-bg-opacity, 1)); } .bg-red-400 { --tw-bg-opacity: 1; background-color: rgb(248 113 113 / var(--tw-bg-opacity, 1)); } .bg-red-50 { --tw-bg-opacity: 1; background-color: rgb(254 242 242 / var(--tw-bg-opacity, 1)); } .bg-red-500 { --tw-bg-opacity: 1; background-color: rgb(239 68 68 / var(--tw-bg-opacity, 1)); } .bg-rose-50 { --tw-bg-opacity: 1; background-color: rgb(255 241 242 / var(--tw-bg-opacity, 1)); } .bg-rose-600 { --tw-bg-opacity: 1; background-color: rgb(225 29 72 / var(--tw-bg-opacity, 1)); } .bg-sky-50 { --tw-bg-opacity: 1; background-color: rgb(240 249 255 / var(--tw-bg-opacity, 1)); } .bg-sky-500 { --tw-bg-opacity: 1; background-color: rgb(14 165 233 / var(--tw-bg-opacity, 1)); } .bg-slate-100 { --tw-bg-opacity: 1; background-color: rgb(241 245 249 / var(--tw-bg-opacity, 1)); } .bg-slate-900 { --tw-bg-opacity: 1; background-color: rgb(15 23 42 / var(--tw-bg-opacity, 1)); } .bg-teal-50 { --tw-bg-opacity: 1; background-color: rgb(240 253 250 / var(--tw-bg-opacity, 1)); } .bg-violet-50 { --tw-bg-opacity: 1; background-color: rgb(245 243 255 / var(--tw-bg-opacity, 1)); } .bg-violet-500 { --tw-bg-opacity: 1; background-color: rgb(139 92 246 / var(--tw-bg-opacity, 1)); } .bg-white { --tw-bg-opacity: 1; background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1)); } .bg-white\/10 { background-color: rgb(255 255 255 / 0.1); } .bg-white\/15 { background-color: rgb(255 255 255 / 0.15); } .bg-white\/20 { background-color: rgb(255 255 255 / 0.2); } .bg-white\/60 { background-color: rgb(255 255 255 / 0.6); } .bg-white\/80 { background-color: rgb(255 255 255 / 0.8); } .bg-white\/90 { background-color: rgb(255 255 255 / 0.9); } .bg-yellow-100 { --tw-bg-opacity: 1; background-color: rgb(254 249 195 / var(--tw-bg-opacity, 1)); } .bg-yellow-400 { --tw-bg-opacity: 1; background-color: rgb(250 204 21 / var(--tw-bg-opacity, 1)); } .bg-yellow-50 { --tw-bg-opacity: 1; background-color: rgb(254 252 232 / var(--tw-bg-opacity, 1)); } .bg-yellow-500 { --tw-bg-opacity: 1; background-color: rgb(234 179 8 / var(--tw-bg-opacity, 1)); } .bg-gradient-to-br { background-image: linear-gradient(to bottom right, var(--tw-gradient-stops)); } .bg-gradient-to-r { background-image: linear-gradient(to right, var(--tw-gradient-stops)); } .bg-gradient-to-t { background-image: linear-gradient(to top, var(--tw-gradient-stops)); } .from-amber-400 { --tw-gradient-from: #fbbf24 var(--tw-gradient-from-position); --tw-gradient-to: rgb(251 191 36 / 0) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); } .from-amber-50 { --tw-gradient-from: #fffbeb var(--tw-gradient-from-position); --tw-gradient-to: rgb(255 251 235 / 0) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); } .from-amber-500 { --tw-gradient-from: #f59e0b var(--tw-gradient-from-position); --tw-gradient-to: rgb(245 158 11 / 0) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); } .from-black\/60 { --tw-gradient-from: rgb(0 0 0 / 0.6) var(--tw-gradient-from-position); --tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); } .from-blue-500 { --tw-gradient-from: #3b82f6 var(--tw-gradient-from-position); --tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); } .from-blue-700 { --tw-gradient-from: #1d4ed8 var(--tw-gradient-from-position); --tw-gradient-to: rgb(29 78 216 / 0) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); } .from-indigo-100 { --tw-gradient-from: #e0e7ff var(--tw-gradient-from-position); --tw-gradient-to: rgb(224 231 255 / 0) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); } .from-orange-400 { --tw-gradient-from: #fb923c var(--tw-gradient-from-position); --tw-gradient-to: rgb(251 146 60 / 0) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); } .via-transparent { --tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), transparent var(--tw-gradient-via-position), var(--tw-gradient-to); } .via-yellow-400 { --tw-gradient-to: rgb(250 204 21 / 0) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), #facc15 var(--tw-gradient-via-position), var(--tw-gradient-to); } .to-amber-400 { --tw-gradient-to: #fbbf24 var(--tw-gradient-to-position); } .to-amber-50 { --tw-gradient-to: #fffbeb var(--tw-gradient-to-position); } .to-blue-500 { --tw-gradient-to: #3b82f6 var(--tw-gradient-to-position); } .to-orange-400 { --tw-gradient-to: #fb923c var(--tw-gradient-to-position); } .to-purple-500 { --tw-gradient-to: #a855f7 var(--tw-gradient-to-position); } .to-transparent { --tw-gradient-to: transparent var(--tw-gradient-to-position); } .to-yellow-50 { --tw-gradient-to: #fefce8 var(--tw-gradient-to-position); } .to-yellow-500 { --tw-gradient-to: #eab308 var(--tw-gradient-to-position); } .bg-clip-text { -webkit-background-clip: text; background-clip: text; } .fill-gray-900 { fill: #111827; } .object-contain { -o-object-fit: contain; object-fit: contain; } .object-cover { -o-object-fit: cover; object-fit: cover; } .p-0 { padding: 0px; } .p-1 { padding: 0.25rem; } .p-10 { padding: 2.5rem; } .p-2 { padding: 0.5rem; } .p-2\.5 { padding: 0.625rem; } .p-3 { padding: 0.75rem; } .p-4 { padding: 1rem; } .p-5 { padding: 1.25rem; } .p-6 { padding: 1.5rem; } .p-8 { padding: 2rem; } .px-0\.5 { padding-left: 0.125rem; padding-right: 0.125rem; } .px-1 { padding-left: 0.25rem; padding-right: 0.25rem; } .px-1\.5 { padding-left: 0.375rem; padding-right: 0.375rem; } .px-2 { padding-left: 0.5rem; padding-right: 0.5rem; } .px-2\.5 { padding-left: 0.625rem; padding-right: 0.625rem; } .px-3 { padding-left: 0.75rem; padding-right: 0.75rem; } .px-3\.5 { padding-left: 0.875rem; padding-right: 0.875rem; } .px-4 { padding-left: 1rem; padding-right: 1rem; } .px-5 { padding-left: 1.25rem; padding-right: 1.25rem; } .px-6 { padding-left: 1.5rem; padding-right: 1.5rem; } .px-7 { padding-left: 1.75rem; padding-right: 1.75rem; } .px-8 { padding-left: 2rem; padding-right: 2rem; } .py-0\.5 { padding-top: 0.125rem; padding-bottom: 0.125rem; } .py-1 { padding-top: 0.25rem; padding-bottom: 0.25rem; } .py-1\.5 { padding-top: 0.375rem; padding-bottom: 0.375rem; } .py-10 { padding-top: 2.5rem; padding-bottom: 2.5rem; } .py-12 { padding-top: 3rem; padding-bottom: 3rem; } .py-14 { padding-top: 3.5rem; padding-bottom: 3.5rem; } .py-16 { padding-top: 4rem; padding-bottom: 4rem; } .py-2 { padding-top: 0.5rem; padding-bottom: 0.5rem; } .py-2\.5 { padding-top: 0.625rem; padding-bottom: 0.625rem; } .py-20 { padding-top: 5rem; padding-bottom: 5rem; } .py-24 { padding-top: 6rem; padding-bottom: 6rem; } .py-3 { padding-top: 0.75rem; padding-bottom: 0.75rem; } .py-3\.5 { padding-top: 0.875rem; padding-bottom: 0.875rem; } .py-4 { padding-top: 1rem; padding-bottom: 1rem; } .py-5 { padding-top: 1.25rem; padding-bottom: 1.25rem; } .py-6 { padding-top: 1.5rem; padding-bottom: 1.5rem; } .py-8 { padding-top: 2rem; padding-bottom: 2rem; } .pb-0\.5 { padding-bottom: 0.125rem; } .pb-1 { padding-bottom: 0.25rem; } .pb-2 { padding-bottom: 0.5rem; } .pb-20 { padding-bottom: 5rem; } .pb-4 { padding-bottom: 1rem; } .pb-5 { padding-bottom: 1.25rem; } .pl-10 { padding-left: 2.5rem; } .pl-12 { padding-left: 3rem; } .pl-5 { padding-left: 1.25rem; } .pl-7 { padding-left: 1.75rem; } .pl-8 { padding-left: 2rem; } .pr-14 { padding-right: 3.5rem; } .pr-2 { padding-right: 0.5rem; } .pr-24 { padding-right: 6rem; } .pr-3 { padding-right: 0.75rem; } .pr-4 { padding-right: 1rem; } .pt-1 { padding-top: 0.25rem; } .pt-10 { padding-top: 2.5rem; } .pt-16 { padding-top: 4rem; } .pt-2 { padding-top: 0.5rem; } .pt-3 { padding-top: 0.75rem; } .pt-4 { padding-top: 1rem; } .pt-6 { padding-top: 1.5rem; } .pt-8 { padding-top: 2rem; } .text-left { text-align: left; } .text-center { text-align: center; } .text-right { text-align: right; } .align-top { vertical-align: top; } .font-mono { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; } .text-2xl { font-size: 1.5rem; line-height: 2rem; } .text-3xl { font-size: 1.875rem; line-height: 2.25rem; } .text-4xl { font-size: 2.25rem; line-height: 2.5rem; } .text-5xl { font-size: 3rem; line-height: 1; } .text-8xl { font-size: 6rem; line-height: 1; } .text-\[10px\] { font-size: 10px; } .text-\[11px\] { font-size: 11px; } .text-\[8px\] { font-size: 8px; } .text-\[9px\] { font-size: 9px; } .text-base { font-size: 1rem; line-height: 1.5rem; } .text-lg { font-size: 1.125rem; line-height: 1.75rem; } .text-sm { font-size: 0.875rem; line-height: 1.25rem; } .text-xl { font-size: 1.25rem; line-height: 1.75rem; } .text-xs { font-size: 0.75rem; line-height: 1rem; } .font-bold { font-weight: 700; } .font-extrabold { font-weight: 800; } .font-medium { font-weight: 500; } .font-normal { font-weight: 400; } .font-semibold { font-weight: 600; } .uppercase { text-transform: uppercase; } .italic { font-style: italic; } .leading-none { line-height: 1; } .leading-relaxed { line-height: 1.625; } .leading-snug { line-height: 1.375; } .leading-tight { line-height: 1.25; } .tracking-tight { letter-spacing: -0.025em; } .tracking-wide { letter-spacing: 0.025em; } .tracking-wider { letter-spacing: 0.05em; } .text-amber-400 { --tw-text-opacity: 1; color: rgb(251 191 36 / var(--tw-text-opacity, 1)); } .text-amber-500 { --tw-text-opacity: 1; color: rgb(245 158 11 / var(--tw-text-opacity, 1)); } .text-amber-600 { --tw-text-opacity: 1; color: rgb(217 119 6 / var(--tw-text-opacity, 1)); } .text-amber-700 { --tw-text-opacity: 1; color: rgb(180 83 9 / var(--tw-text-opacity, 1)); } .text-amber-800 { --tw-text-opacity: 1; color: rgb(146 64 14 / var(--tw-text-opacity, 1)); } .text-amber-900 { --tw-text-opacity: 1; color: rgb(120 53 15 / var(--tw-text-opacity, 1)); } .text-blue-100 { --tw-text-opacity: 1; color: rgb(219 234 254 / var(--tw-text-opacity, 1)); } .text-blue-300 { --tw-text-opacity: 1; color: rgb(147 197 253 / var(--tw-text-opacity, 1)); } .text-blue-400 { --tw-text-opacity: 1; color: rgb(96 165 250 / var(--tw-text-opacity, 1)); } .text-blue-500 { --tw-text-opacity: 1; color: rgb(59 130 246 / var(--tw-text-opacity, 1)); } .text-blue-600 { --tw-text-opacity: 1; color: rgb(37 99 235 / var(--tw-text-opacity, 1)); } .text-blue-700 { --tw-text-opacity: 1; color: rgb(29 78 216 / var(--tw-text-opacity, 1)); } .text-blue-800 { --tw-text-opacity: 1; color: rgb(30 64 175 / var(--tw-text-opacity, 1)); } .text-blue-900 { --tw-text-opacity: 1; color: rgb(30 58 138 / var(--tw-text-opacity, 1)); } .text-emerald-400 { --tw-text-opacity: 1; color: rgb(52 211 153 / var(--tw-text-opacity, 1)); } .text-emerald-500 { --tw-text-opacity: 1; color: rgb(16 185 129 / var(--tw-text-opacity, 1)); } .text-emerald-600 { --tw-text-opacity: 1; color: rgb(5 150 105 / var(--tw-text-opacity, 1)); } .text-emerald-700 { --tw-text-opacity: 1; color: rgb(4 120 87 / var(--tw-text-opacity, 1)); } .text-emerald-800 { --tw-text-opacity: 1; color: rgb(6 95 70 / var(--tw-text-opacity, 1)); } .text-emerald-900 { --tw-text-opacity: 1; color: rgb(6 78 59 / var(--tw-text-opacity, 1)); } .text-gray-200 { --tw-text-opacity: 1; color: rgb(229 231 235 / var(--tw-text-opacity, 1)); } .text-gray-300 { --tw-text-opacity: 1; color: rgb(209 213 219 / var(--tw-text-opacity, 1)); } .text-gray-400 { --tw-text-opacity: 1; color: rgb(156 163 175 / var(--tw-text-opacity, 1)); } .text-gray-500 { --tw-text-opacity: 1; color: rgb(107 114 128 / var(--tw-text-opacity, 1)); } .text-gray-600 { --tw-text-opacity: 1; color: rgb(75 85 99 / var(--tw-text-opacity, 1)); } .text-gray-700 { --tw-text-opacity: 1; color: rgb(55 65 81 / var(--tw-text-opacity, 1)); } .text-gray-800 { --tw-text-opacity: 1; color: rgb(31 41 55 / var(--tw-text-opacity, 1)); } .text-gray-900 { --tw-text-opacity: 1; color: rgb(17 24 39 / var(--tw-text-opacity, 1)); } .text-green-400 { --tw-text-opacity: 1; color: rgb(74 222 128 / var(--tw-text-opacity, 1)); } .text-green-500 { --tw-text-opacity: 1; color: rgb(34 197 94 / var(--tw-text-opacity, 1)); } .text-green-600 { --tw-text-opacity: 1; color: rgb(22 163 74 / var(--tw-text-opacity, 1)); } .text-green-700 { --tw-text-opacity: 1; color: rgb(21 128 61 / var(--tw-text-opacity, 1)); } .text-green-800 { --tw-text-opacity: 1; color: rgb(22 101 52 / var(--tw-text-opacity, 1)); } .text-indigo-500 { --tw-text-opacity: 1; color: rgb(99 102 241 / var(--tw-text-opacity, 1)); } .text-indigo-600 { --tw-text-opacity: 1; color: rgb(79 70 229 / var(--tw-text-opacity, 1)); } .text-indigo-700 { --tw-text-opacity: 1; color: rgb(67 56 202 / var(--tw-text-opacity, 1)); } .text-orange-400 { --tw-text-opacity: 1; color: rgb(251 146 60 / var(--tw-text-opacity, 1)); } .text-orange-500 { --tw-text-opacity: 1; color: rgb(249 115 22 / var(--tw-text-opacity, 1)); } .text-orange-600 { --tw-text-opacity: 1; color: rgb(234 88 12 / var(--tw-text-opacity, 1)); } .text-orange-700 { --tw-text-opacity: 1; color: rgb(194 65 12 / var(--tw-text-opacity, 1)); } .text-orange-800 { --tw-text-opacity: 1; color: rgb(154 52 18 / var(--tw-text-opacity, 1)); } .text-pink-400 { --tw-text-opacity: 1; color: rgb(244 114 182 / var(--tw-text-opacity, 1)); } .text-pink-500 { --tw-text-opacity: 1; color: rgb(236 72 153 / var(--tw-text-opacity, 1)); } .text-pink-600 { --tw-text-opacity: 1; color: rgb(219 39 119 / var(--tw-text-opacity, 1)); } .text-purple-400 { --tw-text-opacity: 1; color: rgb(192 132 252 / var(--tw-text-opacity, 1)); } .text-purple-500 { --tw-text-opacity: 1; color: rgb(168 85 247 / var(--tw-text-opacity, 1)); } .text-purple-600 { --tw-text-opacity: 1; color: rgb(147 51 234 / var(--tw-text-opacity, 1)); } .text-purple-700 { --tw-text-opacity: 1; color: rgb(126 34 206 / var(--tw-text-opacity, 1)); } .text-red-400 { --tw-text-opacity: 1; color: rgb(248 113 113 / var(--tw-text-opacity, 1)); } .text-red-500 { --tw-text-opacity: 1; color: rgb(239 68 68 / var(--tw-text-opacity, 1)); } .text-red-600 { --tw-text-opacity: 1; color: rgb(220 38 38 / var(--tw-text-opacity, 1)); } .text-red-700 { --tw-text-opacity: 1; color: rgb(185 28 28 / var(--tw-text-opacity, 1)); } .text-rose-700 { --tw-text-opacity: 1; color: rgb(190 18 60 / var(--tw-text-opacity, 1)); } .text-rose-800 { --tw-text-opacity: 1; color: rgb(159 18 57 / var(--tw-text-opacity, 1)); } .text-rose-900 { --tw-text-opacity: 1; color: rgb(136 19 55 / var(--tw-text-opacity, 1)); } .text-sky-600 { --tw-text-opacity: 1; color: rgb(2 132 199 / var(--tw-text-opacity, 1)); } .text-sky-700 { --tw-text-opacity: 1; color: rgb(3 105 161 / var(--tw-text-opacity, 1)); } .text-slate-300 { --tw-text-opacity: 1; color: rgb(203 213 225 / var(--tw-text-opacity, 1)); } .text-slate-400 { --tw-text-opacity: 1; color: rgb(148 163 184 / var(--tw-text-opacity, 1)); } .text-slate-500 { --tw-text-opacity: 1; color: rgb(100 116 139 / var(--tw-text-opacity, 1)); } .text-slate-600 { --tw-text-opacity: 1; color: rgb(71 85 105 / var(--tw-text-opacity, 1)); } .text-slate-700 { --tw-text-opacity: 1; color: rgb(51 65 85 / var(--tw-text-opacity, 1)); } .text-slate-900 { --tw-text-opacity: 1; color: rgb(15 23 42 / var(--tw-text-opacity, 1)); } .text-teal-700 { --tw-text-opacity: 1; color: rgb(15 118 110 / var(--tw-text-opacity, 1)); } .text-transparent { color: transparent; } .text-violet-600 { --tw-text-opacity: 1; color: rgb(124 58 237 / var(--tw-text-opacity, 1)); } .text-violet-700 { --tw-text-opacity: 1; color: rgb(109 40 217 / var(--tw-text-opacity, 1)); } .text-white { --tw-text-opacity: 1; color: rgb(255 255 255 / var(--tw-text-opacity, 1)); } .text-white\/50 { color: rgb(255 255 255 / 0.5); } .text-white\/60 { color: rgb(255 255 255 / 0.6); } .text-white\/70 { color: rgb(255 255 255 / 0.7); } .text-white\/80 { color: rgb(255 255 255 / 0.8); } .text-white\/90 { color: rgb(255 255 255 / 0.9); } .text-yellow-300 { --tw-text-opacity: 1; color: rgb(253 224 71 / var(--tw-text-opacity, 1)); } .text-yellow-400 { --tw-text-opacity: 1; color: rgb(250 204 21 / var(--tw-text-opacity, 1)); } .text-yellow-500 { --tw-text-opacity: 1; color: rgb(234 179 8 / var(--tw-text-opacity, 1)); } .text-yellow-600 { --tw-text-opacity: 1; color: rgb(202 138 4 / var(--tw-text-opacity, 1)); } .text-yellow-700 { --tw-text-opacity: 1; color: rgb(161 98 7 / var(--tw-text-opacity, 1)); } .text-yellow-800 { --tw-text-opacity: 1; color: rgb(133 77 14 / var(--tw-text-opacity, 1)); } .underline { text-decoration-line: underline; } .line-through { text-decoration-line: line-through; } .opacity-0 { opacity: 0; } .opacity-100 { opacity: 1; } .opacity-25 { opacity: 0.25; } .opacity-40 { opacity: 0.4; } .opacity-50 { opacity: 0.5; } .opacity-60 { opacity: 0.6; } .opacity-70 { opacity: 0.7; } .opacity-75 { opacity: 0.75; } .shadow { --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } .shadow-2xl { --tw-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25); --tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } .shadow-lg { --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } .shadow-md { --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } .shadow-sm { --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05); --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } .shadow-xl { --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } .shadow-amber-100 { --tw-shadow-color: #fef3c7; --tw-shadow: var(--tw-shadow-colored); } .shadow-amber-300\/50 { --tw-shadow-color: rgb(252 211 77 / 0.5); --tw-shadow: var(--tw-shadow-colored); } .shadow-amber-500\/25 { --tw-shadow-color: rgb(245 158 11 / 0.25); --tw-shadow: var(--tw-shadow-colored); } .\!ring-2 { --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important; --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important; box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000) !important; } .ring-2 { --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); } .ring-4 { --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color); box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); } .\!ring-blue-500 { --tw-ring-opacity: 1 !important; --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1)) !important; } .ring-blue-200 { --tw-ring-opacity: 1; --tw-ring-color: rgb(191 219 254 / var(--tw-ring-opacity, 1)); } .ring-blue-400 { --tw-ring-opacity: 1; --tw-ring-color: rgb(96 165 250 / var(--tw-ring-opacity, 1)); } .ring-blue-500 { --tw-ring-opacity: 1; --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1)); } .\!ring-offset-1 { --tw-ring-offset-width: 1px !important; } .ring-offset-1 { --tw-ring-offset-width: 1px; } .ring-offset-2 { --tw-ring-offset-width: 2px; } .blur { --tw-blur: blur(8px); filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); } .blur-\[100px\] { --tw-blur: blur(100px); filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); } .blur-\[120px\] { --tw-blur: blur(120px); filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); } .drop-shadow { --tw-drop-shadow: drop-shadow(0 1px 2px rgb(0 0 0 / 0.1)) drop-shadow(0 1px 1px rgb(0 0 0 / 0.06)); filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); } .drop-shadow-lg { --tw-drop-shadow: drop-shadow(0 10px 8px rgb(0 0 0 / 0.04)) drop-shadow(0 4px 3px rgb(0 0 0 / 0.1)); filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); } .filter { filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); } .backdrop-blur { --tw-backdrop-blur: blur(8px); backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); } .backdrop-blur-md { --tw-backdrop-blur: blur(12px); backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); } .backdrop-blur-sm { --tw-backdrop-blur: blur(4px); backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); } .backdrop-blur-xl { --tw-backdrop-blur: blur(24px); backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); } .transition { transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } .transition-all { transition-property: all; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } .transition-colors { transition-property: color, background-color, border-color, text-decoration-color, fill, stroke; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } .transition-opacity { transition-property: opacity; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } .transition-transform { transition-property: transform; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } .duration-200 { transition-duration: 200ms; } .duration-300 { transition-duration: 300ms; } .duration-500 { transition-duration: 500ms; } .ease-in-out { transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); } :root { --blue-main: #2563eb; --blue-light: #60a5fa; --blue-dark: #1e40af; --orange-main: #f59e0b; --orange-light: #fbbf24; --orange-dark: #b45309; --glass-bg: rgba(255,255,255,0.65); --glass-blur: 18px; } body { background: linear-gradient(135deg, var(--blue-main) 0%, var(--blue-light) 60%, var(--orange-light) 100%); color: #18181b; font-family: 'Inter', 'Segoe UI', Arial, sans-serif; min-height: 100vh; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } /* Section highlight styles */ /* Glassmorphism section style */ .section-contrast { background: var(--glass-bg); border-radius: 2.5rem; box-shadow: 0 8px 40px 0 rgba(37,99,235,0.10), 0 1.5px 8px 0 rgba(245,158,11,0.08); border: 1.5px solid rgba(96,165,250,0.13); margin-bottom: 3.5rem; padding: 3rem 1.5rem; backdrop-filter: blur(var(--glass-blur)); -webkit-backdrop-filter: blur(var(--glass-blur)); transition: box-shadow 0.3s, background 0.3s; } .section-contrast:before { display: none; } @media (min-width: 640px) { .section-contrast { padding: 4rem 2.5rem; margin-left: 1.5rem; margin-right: 1.5rem; } } @media (min-width: 1024px) { .section-contrast { margin-left: 2.5rem; margin-right: 2.5rem; } } /* Accent button */ .btn-accent { display: inline-flex; align-items: center; justify-content: center; background: var(--blue-main); color: #fff; font-weight: 700; border-radius: 1.2em; box-shadow: 0 4px 24px 0 rgba(37,99,235,0.13); padding: 0.9em 2.2em; font-size: 1.25rem; letter-spacing: 0.01em; transition: background 0.2s, box-shadow 0.2s, transform 0.15s; border: none; cursor: pointer; } .btn-accent:hover { background: var(--blue-dark); box-shadow: 0 8px 32px 0 rgba(245,158,11,0.13); transform: translateY(-2px) scale(1.03); } /* Outline button — same shape as btn-accent, white background */ .btn-outline { display: inline-flex; align-items: center; justify-content: center; background: #fff; color: var(--blue-main); font-weight: 700; border-radius: 1.2em; box-shadow: 0 4px 24px 0 rgba(37,99,235,0.10); padding: 0.9em 2.2em; font-size: 1.25rem; letter-spacing: 0.01em; border: 2px solid var(--blue-main); cursor: pointer; transition: background 0.2s, box-shadow 0.2s, transform 0.15s, color 0.2s; } .btn-outline:hover { background: var(--blue-main); color: #fff; box-shadow: 0 8px 32px 0 rgba(37,99,235,0.18); transform: translateY(-2px) scale(1.03); } /* Modern card */ .modern-card { background: #fff; border-radius: 1.5rem; box-shadow: 0 2px 16px 0 rgba(37,99,235,0.07), 0 1.5px 8px 0 rgba(245,158,11,0.06); border: 1.5px solid rgba(96,165,250,0.09); transition: box-shadow 0.2s, border 0.2s; } .modern-card:hover { box-shadow: 0 8px 32px 0 rgba(245,158,11,0.13); border: 1.5px solid var(--orange-main); } /* Floating hero icons */ @keyframes heroIconFloat { 0%, 100% { transform: translateY(0px) rotate(0deg); } 50% { transform: translateY(-14px) rotate(4deg); } } @keyframes heroIconDrift { 0%, 100% { transform: translateY(0px) rotate(0deg); } 33% { transform: translateY(-10px) rotate(-5deg); } 66% { transform: translateY(-6px) rotate(3deg); } } @keyframes heroIconSway { 0%, 100% { transform: translateY(0px) translateX(0px); } 50% { transform: translateY(-8px) translateX(6px); } } /* Animated gradient background for hero */ .hero-bg-animated { background: linear-gradient(120deg, var(--blue-main) 0%, var(--blue-light) 60%, var(--orange-main) 100%); background-size: 200% 200%; animation: heroGradientMove 6s ease-in-out infinite; } @keyframes heroGradientMove { 0% { background-position: 0% 50%; } 50% { background-position: 100% 50%; } 100% { background-position: 0% 50%; } } /* Header shrink effect */ .header-base { transition: all 0.3s cubic-bezier(.4,0,.2,1); } .header-shrink .header-content { height: 48px !important; padding-top: 0 !important; padding-bottom: 0 !important; } .header-shrink .logo-text { font-size: 1.3rem !important; letter-spacing: 0.01em; } .logo-text { font-family: 'Showpop', sans-serif !important; font-size: 1.7rem !important; font-weight: 300 !important; letter-spacing: 0.01em; text-transform: uppercase; } .logo-text-mini { font-family: 'Showpop', sans-serif !important; font-size: 1.3rem !important; font-weight: 300 !important; letter-spacing: 0.01em; text-transform: uppercase; transition: font-size 0.3s ease; } .logo-text-mini.scrolled { font-size: 1.1rem !important; } /* ── Site theme (dark = default) ── */ .site-theme { --site-bg: #0a0a0f; --site-surface: rgba(255,255,255,0.03); --site-surface-hover: rgba(255,255,255,0.06); --site-border: rgba(255,255,255,0.05); --site-border-hover: rgba(255,255,255,0.1); --site-text: #ffffff; --site-text-secondary: rgba(255,255,255,0.5); --site-text-muted: rgba(255,255,255,0.3); --site-text-hint: rgba(255,255,255,0.2); --site-nav-bg: rgba(10,10,15,0.8); --site-modal-bg: #14141f; --site-input-bg: rgba(255,255,255,0.05); --site-input-border: rgba(255,255,255,0.1); --site-input-text: #ffffff; --site-input-placeholder: rgba(255,255,255,0.2); --site-tag-bg: rgba(255,255,255,0.05); --site-tag-border: rgba(255,255,255,0.05); --site-tag-text: rgba(255,255,255,0.6); --site-card-bg: rgba(255,255,255,0.03); --site-card-border: rgba(255,255,255,0.05); --site-name-from: #ffffff; --site-name-to: rgba(255,255,255,0.7); --site-avatar-border: rgba(255,255,255,0.1); --site-avatar-bg: rgba(255,255,255,0.05); --site-status-border-color: #0a0a0f; --site-phone-bg: rgba(255,255,255,0.05); --site-phone-border: rgba(255,255,255,0.1); --site-phone-text: #ffffff; --site-divider: rgba(255,255,255,0.1); --site-lang-dropdown: #1a1a24; --site-footer-text: rgba(255,255,255,0.2); --site-scroll-btn-bg: rgba(255,255,255,0.1); --site-scroll-btn-border: rgba(255,255,255,0.1); --site-scroll-btn-text: rgba(255,255,255,0.6); } .site-theme.site-light { --site-bg: #f8f9fb; --site-surface: rgba(0,0,0,0.02); --site-surface-hover: rgba(0,0,0,0.04); --site-border: rgba(0,0,0,0.08); --site-border-hover: rgba(0,0,0,0.15); --site-text: #1a1a2e; --site-text-secondary: rgba(0,0,0,0.55); --site-text-muted: rgba(0,0,0,0.4); --site-text-hint: rgba(0,0,0,0.25); --site-nav-bg: rgba(255,255,255,0.85); --site-modal-bg: #ffffff; --site-input-bg: rgba(0,0,0,0.03); --site-input-border: rgba(0,0,0,0.12); --site-input-text: #1a1a2e; --site-input-placeholder: rgba(0,0,0,0.3); --site-tag-bg: rgba(0,0,0,0.04); --site-tag-border: rgba(0,0,0,0.08); --site-tag-text: rgba(0,0,0,0.6); --site-card-bg: #ffffff; --site-card-border: rgba(0,0,0,0.08); --site-name-from: #1a1a2e; --site-name-to: rgba(26,26,46,0.7); --site-avatar-border: rgba(0,0,0,0.1); --site-avatar-bg: rgba(0,0,0,0.05); --site-status-border-color: #f8f9fb; --site-phone-bg: rgba(0,0,0,0.04); --site-phone-border: rgba(0,0,0,0.1); --site-phone-text: #1a1a2e; --site-divider: rgba(0,0,0,0.08); --site-lang-dropdown: #ffffff; --site-footer-text: rgba(0,0,0,0.3); --site-scroll-btn-bg: rgba(0,0,0,0.06); --site-scroll-btn-border: rgba(0,0,0,0.1); --site-scroll-btn-text: rgba(0,0,0,0.5); } .logo-text-jaipur { font-family: 'Jaipur', 'Inter', 'Segoe UI', Arial, sans-serif !important; font-size: 1.7rem !important; letter-spacing: 0.01em; text-transform: uppercase; } .logo-text-rennie { font-family: 'Rennie', 'Inter', 'Segoe UI', Arial, sans-serif !important; font-size: 1.7rem !important; letter-spacing: 0.01em; text-transform: uppercase; } /* Scroll to top button */ .scroll-to-top-btn { position: fixed; right: 2rem; bottom: 2.5rem; z-index: 100; background: #6366f1; color: #fff; border-radius: 9999px; box-shadow: 0 2px 12px 0 rgba(80,80,120,0.13); padding: 0.75rem; width: 3rem; height: 3rem; display: flex; align-items: center; justify-content: center; font-size: 1.5rem; border: none; cursor: pointer; opacity: 0; pointer-events: none; transition: opacity 0.3s; } .scroll-to-top-btn.visible { opacity: 1; pointer-events: auto; } @font-face { font-family: 'NorseCyr2'; src: url('/fonts/Norse-Regular.woff2') format('woff2'); font-weight: normal; font-style: normal; font-display: swap; } @font-face { font-family: 'Jaipur'; src: url('/fonts/Jaipur.woff2') format('woff2'); font-weight: normal; font-style: normal; font-display: swap; } @font-face { font-family: 'Rennie'; src: url('/fonts/Rennie.woff2') format('woff2'); font-weight: normal; font-style: normal; font-display: swap; } .selection\:bg-blue-500\/30 *::-moz-selection { background-color: rgb(59 130 246 / 0.3); } .selection\:bg-blue-500\/30 *::selection { background-color: rgb(59 130 246 / 0.3); } .selection\:bg-blue-500\/30::-moz-selection { background-color: rgb(59 130 246 / 0.3); } .selection\:bg-blue-500\/30::selection { background-color: rgb(59 130 246 / 0.3); } .placeholder\:text-blue-300::-moz-placeholder { --tw-text-opacity: 1; color: rgb(147 197 253 / var(--tw-text-opacity, 1)); } .placeholder\:text-blue-300::placeholder { --tw-text-opacity: 1; color: rgb(147 197 253 / var(--tw-text-opacity, 1)); } .last\:border-0:last-child { border-width: 0px; } .last\:pb-0:last-child { padding-bottom: 0px; } .focus-within\:ring-2:focus-within { --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); } .focus-within\:ring-blue-400:focus-within { --tw-ring-opacity: 1; --tw-ring-color: rgb(96 165 250 / var(--tw-ring-opacity, 1)); } .hover\:border-blue-300:hover { --tw-border-opacity: 1; border-color: rgb(147 197 253 / var(--tw-border-opacity, 1)); } .hover\:border-blue-400:hover { --tw-border-opacity: 1; border-color: rgb(96 165 250 / var(--tw-border-opacity, 1)); } .hover\:border-gray-300:hover { --tw-border-opacity: 1; border-color: rgb(209 213 219 / var(--tw-border-opacity, 1)); } .hover\:bg-amber-200:hover { --tw-bg-opacity: 1; background-color: rgb(253 230 138 / var(--tw-bg-opacity, 1)); } .hover\:bg-amber-50:hover { --tw-bg-opacity: 1; background-color: rgb(255 251 235 / var(--tw-bg-opacity, 1)); } .hover\:bg-amber-600:hover { --tw-bg-opacity: 1; background-color: rgb(217 119 6 / var(--tw-bg-opacity, 1)); } .hover\:bg-black\/70:hover { background-color: rgb(0 0 0 / 0.7); } .hover\:bg-blue-100:hover { --tw-bg-opacity: 1; background-color: rgb(219 234 254 / var(--tw-bg-opacity, 1)); } .hover\:bg-blue-50:hover { --tw-bg-opacity: 1; background-color: rgb(239 246 255 / var(--tw-bg-opacity, 1)); } .hover\:bg-blue-50\/60:hover { background-color: rgb(239 246 255 / 0.6); } .hover\:bg-blue-500:hover { --tw-bg-opacity: 1; background-color: rgb(59 130 246 / var(--tw-bg-opacity, 1)); } .hover\:bg-blue-700:hover { --tw-bg-opacity: 1; background-color: rgb(29 78 216 / var(--tw-bg-opacity, 1)); } .hover\:bg-emerald-200:hover { --tw-bg-opacity: 1; background-color: rgb(167 243 208 / var(--tw-bg-opacity, 1)); } .hover\:bg-emerald-700:hover { --tw-bg-opacity: 1; background-color: rgb(4 120 87 / var(--tw-bg-opacity, 1)); } .hover\:bg-gray-100:hover { --tw-bg-opacity: 1; background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1)); } .hover\:bg-gray-200:hover { --tw-bg-opacity: 1; background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1)); } .hover\:bg-gray-50:hover { --tw-bg-opacity: 1; background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1)); } .hover\:bg-gray-50\/50:hover { background-color: rgb(249 250 251 / 0.5); } .hover\:bg-gray-700:hover { --tw-bg-opacity: 1; background-color: rgb(55 65 81 / var(--tw-bg-opacity, 1)); } .hover\:bg-green-100:hover { --tw-bg-opacity: 1; background-color: rgb(220 252 231 / var(--tw-bg-opacity, 1)); } .hover\:bg-green-50:hover { --tw-bg-opacity: 1; background-color: rgb(240 253 244 / var(--tw-bg-opacity, 1)); } .hover\:bg-green-700:hover { --tw-bg-opacity: 1; background-color: rgb(21 128 61 / var(--tw-bg-opacity, 1)); } .hover\:bg-indigo-100:hover { --tw-bg-opacity: 1; background-color: rgb(224 231 255 / var(--tw-bg-opacity, 1)); } .hover\:bg-indigo-200:hover { --tw-bg-opacity: 1; background-color: rgb(199 210 254 / var(--tw-bg-opacity, 1)); } .hover\:bg-indigo-700:hover { --tw-bg-opacity: 1; background-color: rgb(67 56 202 / var(--tw-bg-opacity, 1)); } .hover\:bg-orange-600:hover { --tw-bg-opacity: 1; background-color: rgb(234 88 12 / var(--tw-bg-opacity, 1)); } .hover\:bg-pink-100:hover { --tw-bg-opacity: 1; background-color: rgb(252 231 243 / var(--tw-bg-opacity, 1)); } .hover\:bg-pink-50:hover { --tw-bg-opacity: 1; background-color: rgb(253 242 248 / var(--tw-bg-opacity, 1)); } .hover\:bg-purple-100:hover { --tw-bg-opacity: 1; background-color: rgb(243 232 255 / var(--tw-bg-opacity, 1)); } .hover\:bg-purple-700:hover { --tw-bg-opacity: 1; background-color: rgb(126 34 206 / var(--tw-bg-opacity, 1)); } .hover\:bg-red-100:hover { --tw-bg-opacity: 1; background-color: rgb(254 226 226 / var(--tw-bg-opacity, 1)); } .hover\:bg-red-200:hover { --tw-bg-opacity: 1; background-color: rgb(254 202 202 / var(--tw-bg-opacity, 1)); } .hover\:bg-red-50:hover { --tw-bg-opacity: 1; background-color: rgb(254 242 242 / var(--tw-bg-opacity, 1)); } .hover\:bg-red-600:hover { --tw-bg-opacity: 1; background-color: rgb(220 38 38 / var(--tw-bg-opacity, 1)); } .hover\:bg-rose-700:hover { --tw-bg-opacity: 1; background-color: rgb(190 18 60 / var(--tw-bg-opacity, 1)); } .hover\:bg-slate-100:hover { --tw-bg-opacity: 1; background-color: rgb(241 245 249 / var(--tw-bg-opacity, 1)); } .hover\:bg-slate-800:hover { --tw-bg-opacity: 1; background-color: rgb(30 41 59 / var(--tw-bg-opacity, 1)); } .hover\:bg-white:hover { --tw-bg-opacity: 1; background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1)); } .hover\:bg-white\/10:hover { background-color: rgb(255 255 255 / 0.1); } .hover\:bg-white\/20:hover { background-color: rgb(255 255 255 / 0.2); } .hover\:bg-white\/25:hover { background-color: rgb(255 255 255 / 0.25); } .hover\:bg-yellow-100:hover { --tw-bg-opacity: 1; background-color: rgb(254 249 195 / var(--tw-bg-opacity, 1)); } .hover\:bg-yellow-600:hover { --tw-bg-opacity: 1; background-color: rgb(202 138 4 / var(--tw-bg-opacity, 1)); } .hover\:from-amber-600:hover { --tw-gradient-from: #d97706 var(--tw-gradient-from-position); --tw-gradient-to: rgb(217 119 6 / 0) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); } .hover\:to-yellow-600:hover { --tw-gradient-to: #ca8a04 var(--tw-gradient-to-position); } .hover\:text-black:hover { --tw-text-opacity: 1; color: rgb(0 0 0 / var(--tw-text-opacity, 1)); } .hover\:text-blue-300:hover { --tw-text-opacity: 1; color: rgb(147 197 253 / var(--tw-text-opacity, 1)); } .hover\:text-blue-400:hover { --tw-text-opacity: 1; color: rgb(96 165 250 / var(--tw-text-opacity, 1)); } .hover\:text-blue-600:hover { --tw-text-opacity: 1; color: rgb(37 99 235 / var(--tw-text-opacity, 1)); } .hover\:text-blue-700:hover { --tw-text-opacity: 1; color: rgb(29 78 216 / var(--tw-text-opacity, 1)); } .hover\:text-blue-800:hover { --tw-text-opacity: 1; color: rgb(30 64 175 / var(--tw-text-opacity, 1)); } .hover\:text-gray-600:hover { --tw-text-opacity: 1; color: rgb(75 85 99 / var(--tw-text-opacity, 1)); } .hover\:text-gray-700:hover { --tw-text-opacity: 1; color: rgb(55 65 81 / var(--tw-text-opacity, 1)); } .hover\:text-gray-800:hover { --tw-text-opacity: 1; color: rgb(31 41 55 / var(--tw-text-opacity, 1)); } .hover\:text-gray-900:hover { --tw-text-opacity: 1; color: rgb(17 24 39 / var(--tw-text-opacity, 1)); } .hover\:text-green-500:hover { --tw-text-opacity: 1; color: rgb(34 197 94 / var(--tw-text-opacity, 1)); } .hover\:text-green-700:hover { --tw-text-opacity: 1; color: rgb(21 128 61 / var(--tw-text-opacity, 1)); } .hover\:text-indigo-700:hover { --tw-text-opacity: 1; color: rgb(67 56 202 / var(--tw-text-opacity, 1)); } .hover\:text-pink-400:hover { --tw-text-opacity: 1; color: rgb(244 114 182 / var(--tw-text-opacity, 1)); } .hover\:text-pink-500:hover { --tw-text-opacity: 1; color: rgb(236 72 153 / var(--tw-text-opacity, 1)); } .hover\:text-pink-600:hover { --tw-text-opacity: 1; color: rgb(219 39 119 / var(--tw-text-opacity, 1)); } .hover\:text-purple-600:hover { --tw-text-opacity: 1; color: rgb(147 51 234 / var(--tw-text-opacity, 1)); } .hover\:text-purple-700:hover { --tw-text-opacity: 1; color: rgb(126 34 206 / var(--tw-text-opacity, 1)); } .hover\:text-red-400:hover { --tw-text-opacity: 1; color: rgb(248 113 113 / var(--tw-text-opacity, 1)); } .hover\:text-red-500:hover { --tw-text-opacity: 1; color: rgb(239 68 68 / var(--tw-text-opacity, 1)); } .hover\:text-red-600:hover { --tw-text-opacity: 1; color: rgb(220 38 38 / var(--tw-text-opacity, 1)); } .hover\:text-red-700:hover { --tw-text-opacity: 1; color: rgb(185 28 28 / var(--tw-text-opacity, 1)); } .hover\:text-sky-500:hover { --tw-text-opacity: 1; color: rgb(14 165 233 / var(--tw-text-opacity, 1)); } .hover\:text-slate-700:hover { --tw-text-opacity: 1; color: rgb(51 65 85 / var(--tw-text-opacity, 1)); } .hover\:text-white:hover { --tw-text-opacity: 1; color: rgb(255 255 255 / var(--tw-text-opacity, 1)); } .hover\:text-white\/80:hover { color: rgb(255 255 255 / 0.8); } .hover\:underline:hover { text-decoration-line: underline; } .hover\:opacity-90:hover { opacity: 0.9; } .hover\:shadow-lg:hover { --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } .hover\:shadow-md:hover { --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } .hover\:shadow-sm:hover { --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05); --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } .hover\:shadow-xl:hover { --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } .hover\:shadow-blue-500\/25:hover { --tw-shadow-color: rgb(59 130 246 / 0.25); --tw-shadow: var(--tw-shadow-colored); } .focus\:border-blue-500\/50:focus { border-color: rgb(59 130 246 / 0.5); } .focus\:outline-none:focus { outline: 2px solid transparent; outline-offset: 2px; } .focus\:ring-2:focus { --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); } .focus\:ring-blue-300:focus { --tw-ring-opacity: 1; --tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity, 1)); } .focus\:ring-blue-400:focus { --tw-ring-opacity: 1; --tw-ring-color: rgb(96 165 250 / var(--tw-ring-opacity, 1)); } .focus\:ring-blue-500:focus { --tw-ring-opacity: 1; --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1)); } .focus\:ring-emerald-400:focus { --tw-ring-opacity: 1; --tw-ring-color: rgb(52 211 153 / var(--tw-ring-opacity, 1)); } .focus\:ring-rose-400:focus { --tw-ring-opacity: 1; --tw-ring-color: rgb(251 113 133 / var(--tw-ring-opacity, 1)); } .focus\:ring-offset-2:focus { --tw-ring-offset-width: 2px; } .active\:scale-95:active { --tw-scale-x: .95; --tw-scale-y: .95; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .disabled\:cursor-not-allowed:disabled { cursor: not-allowed; } .disabled\:bg-gray-300:disabled { --tw-bg-opacity: 1; background-color: rgb(209 213 219 / var(--tw-bg-opacity, 1)); } .disabled\:bg-gray-50:disabled { --tw-bg-opacity: 1; background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1)); } .disabled\:text-gray-400:disabled { --tw-text-opacity: 1; color: rgb(156 163 175 / var(--tw-text-opacity, 1)); } .disabled\:no-underline:disabled { text-decoration-line: none; } .disabled\:opacity-40:disabled { opacity: 0.4; } .disabled\:opacity-50:disabled { opacity: 0.5; } .disabled\:opacity-60:disabled { opacity: 0.6; } .group:hover .group-hover\:scale-105 { --tw-scale-x: 1.05; --tw-scale-y: 1.05; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .group:hover .group-hover\:scale-110 { --tw-scale-x: 1.1; --tw-scale-y: 1.1; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .group:hover .group-hover\:border-blue-400 { --tw-border-opacity: 1; border-color: rgb(96 165 250 / var(--tw-border-opacity, 1)); } .group:hover .group-hover\:bg-black\/50 { background-color: rgb(0 0 0 / 0.5); } .group:hover .group-hover\:text-blue-600 { --tw-text-opacity: 1; color: rgb(37 99 235 / var(--tw-text-opacity, 1)); } .group:hover .group-hover\:text-orange-600 { --tw-text-opacity: 1; color: rgb(234 88 12 / var(--tw-text-opacity, 1)); } .group:hover .group-hover\:underline { text-decoration-line: underline; } .group:hover .group-hover\:opacity-100 { opacity: 1; } .group:hover .group-hover\:opacity-80 { opacity: 0.8; } .has-\[\:checked\]\:border-blue-500:has(:checked) { --tw-border-opacity: 1; border-color: rgb(59 130 246 / var(--tw-border-opacity, 1)); } .has-\[\:checked\]\:bg-blue-50:has(:checked) { --tw-bg-opacity: 1; background-color: rgb(239 246 255 / var(--tw-bg-opacity, 1)); } @media (min-width: 640px) { .sm\:mb-6 { margin-bottom: 1.5rem; } .sm\:block { display: block; } .sm\:hidden { display: none; } .sm\:h-32 { height: 8rem; } .sm\:w-32 { width: 8rem; } .sm\:w-auto { width: auto; } .sm\:flex-1 { flex: 1 1 0%; } .sm\:grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } .sm\:grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } .sm\:grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); } .sm\:flex-row { flex-direction: row; } .sm\:items-center { align-items: center; } .sm\:gap-3 { gap: 0.75rem; } .sm\:gap-4 { gap: 1rem; } .sm\:space-y-5 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(1.25rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(1.25rem * var(--tw-space-y-reverse)); } .sm\:p-6 { padding: 1.5rem; } .sm\:px-4 { padding-left: 1rem; padding-right: 1rem; } .sm\:px-6 { padding-left: 1.5rem; padding-right: 1.5rem; } .sm\:py-8 { padding-top: 2rem; padding-bottom: 2rem; } .sm\:pb-28 { padding-bottom: 7rem; } .sm\:pt-24 { padding-top: 6rem; } .sm\:text-2xl { font-size: 1.5rem; line-height: 2rem; } .sm\:text-5xl { font-size: 3rem; line-height: 1; } .sm\:text-lg { font-size: 1.125rem; line-height: 1.75rem; } } @media (min-width: 768px) { .md\:flex { display: flex; } .md\:hidden { display: none; } .md\:w-64 { width: 16rem; } .md\:grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } .md\:grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } .md\:grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); } .md\:grid-cols-5 { grid-template-columns: repeat(5, minmax(0, 1fr)); } .md\:flex-row { flex-direction: row; } .md\:p-14 { padding: 3.5rem; } .md\:px-8 { padding-left: 2rem; padding-right: 2rem; } .md\:text-3xl { font-size: 1.875rem; line-height: 2.25rem; } .md\:text-5xl { font-size: 3rem; line-height: 1; } .md\:text-6xl { font-size: 3.75rem; line-height: 1; } } @media (min-width: 1024px) { .lg\:block { display: block; } .lg\:w-64 { width: 16rem; } .lg\:grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } .lg\:grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); } .lg\:grid-cols-6 { grid-template-columns: repeat(6, minmax(0, 1fr)); } .lg\:flex-row { flex-direction: row; } .lg\:gap-8 { gap: 2rem; } .lg\:px-8 { padding-left: 2rem; padding-right: 2rem; } } @media (min-width: 1280px) { .xl\:grid-cols-7 { grid-template-columns: repeat(7, minmax(0, 1fr)); } } € Kÿÿÿ Oÿÿÿ€žþÿÿ ÿÿÿ³/opt/canhelp/apps/web/src/components/HeroSearch.tsx€€ Oÿÿÿ†‡Ÿ./src/components/HeroSearch.tsxÿÿ@‰ @¹y²ÝyB ýMÿÿÿˆ‰…Š‹Œ/! n²ÝyBn²ÝyBf8219f7217e80c04! e¿ÙyBe¿ÙyBŽŒ9ÿÿÿ‹8ÿÿÿŠ7ÿÿÿ‰6ÿÿÿˆ5ÿÿÿ‡4ÿÿÿ†3ÿÿÿ `‘’“”•–È/opt/canhelp/apps/web/opt/canhelp/apps/web/src/components/HeroSearch.tsxË/opt/canhelp/apps/web/opt/canhelp/apps/web/src/components/HeroSearch.tsx.jsÌ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/components/HeroSearch.tsx.mjsÌ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/components/HeroSearch.tsx.tsxË/opt/canhelp/apps/web/opt/canhelp/apps/web/src/components/HeroSearch.tsx.tsÌ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/components/HeroSearch.tsx.jsxÍ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/components/HeroSearch.tsx.jsonÍ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/components/HeroSearch.tsx.wasm‰1ÿÿÿ 5ÿÿÿ€„þÿÿñþÿÿ¶/opt/canhelp/apps/web/src/components/HomeCityCloud.tsx€€ 5ÿÿÿlÿÿÿmÿÿÿ¢./src/components/HomeCityCloud.tsxÿÿ@‰ Åy²ÝyB ý3ÿÿÿnÿÿÿoÿÿÿkÿÿÿpÿÿÿqÿÿÿrÿÿÿ/uÿÿÿ! n²ÝyBn²ÝyBe768753946e6c316sÿÿÿ! e¿ÙyBe¿ÙyBtÿÿÿrÿÿÿÿÿÿqÿÿÿÿÿÿpÿÿÿÿÿÿoÿÿÿÿÿÿnÿÿÿÿÿÿmÿÿÿÿÿÿlÿÿÿÿÿÿ `wÿÿÿxÿÿÿyÿÿÿzÿÿÿ{ÿÿÿ|ÿÿÿË/opt/canhelp/apps/web/opt/canhelp/apps/web/src/components/HomeCityCloud.tsxÎ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/components/HomeCityCloud.tsx.jsÏ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/components/HomeCityCloud.tsx.mjsÏ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/components/HomeCityCloud.tsx.tsxÎ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/components/HomeCityCloud.tsx.tsÏ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/components/HomeCityCloud.tsx.jsxÐ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/components/HomeCityCloud.tsx.jsonÐ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/components/HomeCityCloud.tsx.wasmuÿÿÿvÿÿÿ‰ÿÿÿ ÿÿÿ€jþÿÿ×þÿÿ®/opt/canhelp/apps/web/src/app/pricing/page.tsx€€ ÿÿÿRÿÿÿSÿÿÿš./src/app/pricing/page.tsxÿÿ@‰  Ëy²ÝyB ýÿÿÿUÿÿÿQÿÿÿVÿÿÿWÿÿÿXÿÿÿ/¥/opt/canhelp/apps/web/src/app/pricing£Zÿÿÿ!`n²ÝyBPn²ÝyB6834ece36d0ba983Xÿÿÿ! e¿ÙyBe¿ÙyBYÿÿÿWÿÿÿÿÿÿVÿÿÿÿÿÿUÿÿÿÿÿÿTÿÿÿÿÿÿSÿÿÿÿÿÿRÿÿÿÿþÿÿQÿÿÿþþÿÿPÿÿÿýþÿÿ ` Ç/opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/pricing/package.json¿/opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/package.jsonÃ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/pricing/page.tsxÆ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/pricing/page.tsx.jsÇ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/pricing/page.tsx.mjsÇ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/pricing/page.tsx.tsxÆ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/pricing/page.tsx.tsÇ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/pricing/page.tsx.jsxÈ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/pricing/page.tsx.jsonÈ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/pricing/page.tsx.wasm²/opt/canhelp/apps/web/src/app/pricing/package.json„@€ ª/opt/canhelp/apps/web/src/app/package.jsonUÿÿÿOÿÿÿPÿÿÿQÿÿÿRÿÿÿSÿÿÿ€ôþÿÿ øþÿÿØþÿÿGþÿÿ´þÿÿ­/opt/canhelp/apps/web/src/lib/translations.ts€€ øþÿÿ/ÿÿÿ0ÿÿÿ™./src/lib/translations.tsÿÿ@‰ Ðày²ÝyB ý/opt/canhelp/apps/web/src/lib7ÿÿÿ!àn²ÝyBÐn²ÝyBc1f9565b93cfa4d85ÿÿÿâþÿÿ `®/opt/canhelp/apps/web/src/context/package.json¿/opt/canhelp/apps/web/opt/canhelp/apps/web/src/lib/package.json¿/opt/canhelp/apps/web/opt/canhelp/apps/web/src/lib/translationsÂ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/lib/translations.jsÃ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/lib/translations.mjsÃ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/lib/translations.tsxÂ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/lib/translations.tsÃ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/lib/translations.jsxÄ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/lib/translations.jsonÄ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/lib/translations.wasmª/opt/canhelp/apps/web/src/lib/package.jsonª/opt/canhelp/apps/web/src/lib/translations­/opt/canhelp/apps/web/src/lib/translations.js®/opt/canhelp/apps/web/src/lib/translations.mjs®/opt/canhelp/apps/web/src/lib/translations.tsxˆ^ÿÿÿcÿÿÿØþÿÿ Üþÿÿ¶/opt/canhelp/apps/web/src/app/tasks/TaskListClient.tsx*þÿÿ—þÿÿ  Üþÿÿÿÿÿÿÿÿäää@‰ Ðày²ÝyB âåçÿÿÿÊþÿÿ `°/opt/canhelp/apps/web/src/app/tasks/package.jsonèéêëìíîïðñòóôõˆTÿÿÿÙ  ý)/* __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'; const API_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:4000'; export function Header() { var _session_user; 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 [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); useEffect(()=>{ pathnameRef.current = pathname; }, [ pathname ]); // Close dropdowns on outside click 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 === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.role) === 'admin'; const effectiveRole = useEffectiveRole(); const isSpecialist = effectiveRole === 'specialist'; const isActive = function(href) { let exact = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; return exact ? pathname === href : pathname === href || pathname.startsWith(href + '/'); }; const navCls = function(href) { let exact = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; return "font-medium text-sm transition ".concat(isActive(href, exact) ? 'text-blue-600' : 'text-gray-600 hover:text-blue-600'); }; const mobileNavCls = function(href) { let exact = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; return "flex items-center gap-2 font-medium py-1 ".concat(isActive(href, exact) ? 'text-blue-600' : 'text-gray-700'); }; // Reset chat badge when entering chat useEffect(()=>{ if (pathname === '/chat') setUnreadChat(0); }, [ pathname ]); 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 ]); 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 ]); useEffect(()=>{ if (!session) { setPlanTier(null); return; } getMyDashboard().then((d)=>{ var _d_plan; var _d_plan_tier; return setPlanTier((_d_plan_tier = (_d_plan = d.plan) === null || _d_plan === void 0 ? void 0 : _d_plan.tier) !== null && _d_plan_tier !== void 0 ? _d_plan_tier : null); }).catch(()=>{}); }, [ session ]); 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__*/ _jsx(Link, { href: "/", className: "flex items-center shrink-0", children: /*#__PURE__*/ _jsx("span", { className: "logo-text text-2xl font-bold text-blue-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: "/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 ".concat(unreadNotif > 0 ? 'text-orange-500' : ''), 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 ".concat(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-blue-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-blue-100 text-blue-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 ".concat(unreadNotif > 0 ? 'text-orange-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: "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 ".concat(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') ] }) ] }), isAdmin && /*#__PURE__*/ _jsxs(Link, { href: "/tasks", 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: "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" }) }), t('nav.find_tasks') ] }), (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-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-blue-600 font-medium text-sm", children: t('nav.login') }), /*#__PURE__*/ _jsx(Link, { href: "/register", className: "bg-blue-600 text-white px-4 py-2 rounded-lg hover:bg-blue-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: "/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 ".concat(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 ".concat(unreadNotif > 0 ? 'text-orange-500' : ''), 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-blue-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=".concat(msgToast.roomId), onClick: ()=>setMsgToast(null), className: "text-xs text-blue-600 hover:underline font-medium", children: t('chat.toast_open') }) ] }) ] }) }) ] }); } ‹exportsTypeYÿÿÿ‰namespace   þÿÿþÿÿÿÿÿþÿÿŠmainFieldsþÿÿ`$þÿÿþÿÿþÿÿþÿÿ þÿÿ!þÿÿ"þÿÿ#þÿÿ$þÿÿ%þÿÿ&þÿÿ'þÿÿ(þÿÿ)þÿÿ*þÿÿ+þÿÿ,þÿÿ-þÿÿ†react$—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.tsþÿÿþÿÿþÿÿþÿÿþÿÿ þÿÿ!þÿÿ"þÿÿ#þÿÿ$þÿÿ%þÿÿ&þÿÿ'þÿÿ(þÿÿ)þÿÿ*þÿÿ+þÿÿ,þÿÿ-þÿÿ˜next/dist/compiled/react©next/dist/compiled/react/compiler-runtime¨next/dist/compiled/react/jsx-dev-runtime¤next/dist/compiled/react/jsx-runtimeœnext/dist/compiled/react-dom£next/dist/compiled/react-dom/client«next/dist/compiled/react-dom/server.browserÿ±next/dist/build/webpack/alias/react-dom-server.js«next/dist/compiled/react-dom/static.browserÿ¨next/dist/compiled/react-dom/static.edgeºnext/dist/compiled/react-server-dom-webpack/client.browserºnext/dist/compiled/react-server-dom-webpack/server.browser·next/dist/compiled/react-server-dom-webpack/server.nodeºnext/dist/compiled/react-server-dom-webpack/static.browser§next/dist/client/dev/noop-turbopack-hmrþÿÿ‡browser–þÿÿ„mainIþÿÿÖ`JþÿÿKþÿÿLþÿÿMþÿÿNþÿÿOþÿÿPþÿÿQþÿÿRþÿÿSþÿÿTþÿÿ†strictexportsArgumentSþÿÿTþÿÿ Ý/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-module-loader.jsÌ/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js Tþÿÿ´webpack/DefinePlugin process.env.NEXT_PUBLIC_API_URLTþÿÿ˜"https://api.canhelp.gr"00c877fa29d7638eTþÿÿ‰actionIds‹isClientRefRþÿÿ  “__webpack_exports__‡API_URLdþÿÿ Wy²ÝyB fþÿÿúþÿÿ`·webpack/lib/dependencies/HarmonyCompatibilityDependency dÿÿý¨webpack/lib/dependencies/ConstDependency€ `<@’ a<@’€ A“° `€ A±ê `9€ Aë `1€ AJ `-€ AK~ `3€ Aµ `6€ A¶ê `4€ Aë& `;€ A'M `&€ ANŠ c <¶webpack/lib/dependencies/HarmonyExportHeaderDependency AÞú) A×ú) a @ÁÙ A›º c  /0 A¾Õ c  J @îºwebpack/lib/dependencies/HarmonyImportSideEffectDependency‘react/jsx-runtimeÿ a<@’‰next/linkÿ `next/navigationÿ `9Š@/lib/authÿ `1@/context/localeÿ `-@/lib/formatNameÿ `3’./LanguageSwitcherÿ `6~þÿÿ~þÿÿ `4 ‰@/lib/apiÿ `; }þÿÿ}þÿÿ `&` ˜@/hooks/useEffectiveRoleÿ c <±webpack/lib/dependencies/PureExpressionDependencya A›Õ ,þÿÿ c  J¹webpack/lib/dependencies/HarmonyExportSpecifierDependency@*þÿÿ*þÿÿ a @Á¹webpack/lib/dependencies/HarmonyImportSpecifierDependencya‰useRouterþA%  %þÿÿççý c‹usePathnameþA>I úââþ c ŠuseSessionþAku õßßþ c(‰useLocaleþA“œ ðÜÜþ c#ˆuseStateþAÄÌ ë[þÿÿ[þÿÿþ c$,ûúAÿ çWþÿÿWþÿÿþ c*2÷öA:B ãSþÿÿSþÿÿþ c*2óòAow ßOþÿÿOþÿÿþ c(0ïîA ¨ ÛKþÿÿKþÿÿþ c$,ëêAÔÜ ×GþÿÿGþÿÿþ c$,†useRefþAû ÒBþÿÿBþÿÿþ cûúA% Î>þÿÿ>þÿÿþ c÷öADJ Ê:þÿÿ:þÿÿþ cóòAjp Æ6þÿÿ6þÿÿþ c‰useEffectþA€‰ Á1þÿÿ1þÿÿþ c ûúA ½-þÿÿ-þÿÿþ c## useEffectiveRoleþA,< ¸` ®®þ c--*òñA¬ µ  ´$þÿÿ$þÿÿþ c<< îíA   ° þÿÿ þÿÿþ cAA ‚ioþA[ ]  « þÿÿþÿÿþ cCCåäAçð §þÿÿþÿÿþ cXX ŽgetUnreadCountþAft ¢ ••þ c]](ÜÛA9B žþÿÿþÿÿþ cdd ŽgetMyDashboardþA¦´ ™ ŒŒþ ciiÓÒAïø •þÿÿþÿÿþ cqq „jsxs…_jsxsAÃÈ sÿÿÿsÿÿÿþ c}}ˆFragment‰_FragmentAÉÒ4‰mÿÿÿmÿÿÿþ c}}(ƒjsx„_jsxA ƒgÿÿÿgÿÿÿþ cîïA×Ü ÿÿÿcÿÿÿcÿÿÿþ @‚`(@‚`-êëAuz {ÿÿÿ_ÿÿÿ_ÿÿÿþ @…`&@…`+òóAVZ wÿÿÿ[ÿÿÿ[ÿÿÿþ @ˆ`.@ˆ`2‡default„LinkA[_4qÿÿÿWÿÿÿWÿÿÿþ @ˆ`3@ˆ`7èéA mÿÿÿQÿÿÿQÿÿÿþ @‹`<@‹`@ØÙA\a iÿÿÿMÿÿÿMÿÿÿþ @`.@`3ÔÕA<A eÿÿÿIÿÿÿIÿÿÿþ @“`E@“`JרABK4bÿÿÿFÿÿÿFÿÿÿþ @“`K@“`TÙÚAÅÉ ^ÿÿÿBÿÿÿBÿÿÿþ @•`>@•`BèéAÊÎ4[ÿÿÿAÿÿÿAÿÿÿþ @•`C@•`GÒÓA+/ Wÿÿÿ;ÿÿÿ;ÿÿÿþ @š`>@š`BáâA044Tÿÿÿ:ÿÿÿ:ÿÿÿþ @š`C@š`G¿ÀAÂÇ Pÿÿÿ4ÿÿÿ4ÿÿÿþ @ `;@ `@ÂÃAÈÑ4Mÿÿÿ1ÿÿÿ1ÿÿÿþ @ `A@ `JÄÅAKO Iÿÿÿ-ÿÿÿ-ÿÿÿþ @¢`>@¢`BÓÔAPT4Fÿÿÿ,ÿÿÿ,ÿÿÿþ @¢`C@¢`G½¾AÃÇ Bÿÿÿ&ÿÿÿ&ÿÿÿþ @§`>@§`BÌÍAÈÌ4?ÿÿÿ%ÿÿÿ%ÿÿÿþ @§`C@§`G¶·A‡ ‹  ;ÿÿÿÿÿÿÿÿÿþ @®`6@®`:ÅÆAŒ 48ÿÿÿÿÿÿÿÿÿþ @®`;@®`?£¤Aá!æ! 4ÿÿÿÿÿÿÿÿÿþ @³`@@³`E¦§Aç!ð!41ÿÿÿÿÿÿÿÿÿþ @³`F@³`OœAj"o" -ÿÿÿÿÿÿÿÿÿþ @µ`>@µ`C·¸Ap"t"4*ÿÿÿÿÿÿÿÿÿþ @µ`D@µ`H¡¢AÉ#Í# &ÿÿÿ ÿÿÿ ÿÿÿþ @¹`F@¹`JžAí%ñ% "ÿÿÿÿÿÿÿÿÿþ @¿`T@¿`X™šA˜(œ( ÿÿÿÿÿÿÿÿÿþ @Å`Y@Å`]‰ŠAÝ*â* ÿÿÿþþÿÿþþÿÿþ @Ë`>@Ë`C¤¥Aã*ç*4ÿÿÿýþÿÿýþÿÿþ @Ë`D@Ë`HŽA3,7, ÿÿÿ÷þÿÿ÷þÿÿþ @Ï`F@Ï`JŠ‹AU.Y. ÿÿÿóþÿÿóþÿÿþ @Õ`T@Õ`X†‡AË0Ï0  ÿÿÿïþÿÿïþÿÿþ @Û`X@Û`\vÿÿÿwÿÿÿA33 ÿÿÿëþÿÿëþÿÿþ @á`>@á`CrÿÿÿsÿÿÿA54:4 ÿÿÿçþÿÿçþÿÿþ @å`F@å`Kzÿÿÿ{ÿÿÿAÞ5â5 ÿþÿÿãþÿÿãþÿÿþ @é`N@é`RformatShortNameþA¤6³6 úþÿÿèþÿÿèþÿÿþ @ë`N@ë`]qÿÿÿrÿÿÿAž7¢7 öþÿÿÚþÿÿÚþÿÿþ @í`d@í`hmÿÿÿnÿÿÿAq9u9 òþÿÿÖþÿÿÖþÿÿþ @ñ`i@ñ`miÿÿÿjÿÿÿAu;y; îþÿÿÒþÿÿÒþÿÿþ @õ`N@õ`ReÿÿÿfÿÿÿAž=¢= êþÿÿÎþÿÿÎþÿÿþ @û`\@û``UÿÿÿVÿÿÿA#@(@ æþÿÿÊþÿÿÊþÿÿþ @`U@`ZQÿÿÿRÿÿÿA{A€A âþÿÿÆþÿÿÆþÿÿþ @`]@`bTÿÿÿUÿÿÿAAŠA4ßþÿÿÃþÿÿÃþÿÿþ @`c@`lJÿÿÿKÿÿÿA4B9B Ûþÿÿ¿þÿÿ¿þÿÿþ @`V@`[eÿÿÿfÿÿÿA:B>B4Øþÿÿ¾þÿÿ¾þÿÿþ @`\@``OÿÿÿPÿÿÿAmDqD Ôþÿÿ¸þÿÿ¸þÿÿþ @ `^@ `bKÿÿÿLÿÿÿAG G Ðþÿÿ´þÿÿ´þÿÿþ @`l@`p;ÿÿÿ<ÿÿÿA_JdJ Ìþÿÿ°þÿÿ°þÿÿþ @`V@`[VÿÿÿWÿÿÿAeJiJ4Éþÿÿ¯þÿÿ¯þÿÿþ @`\@``@ÿÿÿAÿÿÿAšLžL Åþÿÿ©þÿÿ©þÿÿþ @!`^@!`b<ÿÿÿ=ÿÿÿA3O7O Áþÿÿ¥þÿÿ¥þÿÿþ @'`l@'`p,ÿÿÿ-ÿÿÿAŒS‘S ½þÿÿ¡þÿÿ¡þÿÿþ @1`S@1`X/ÿÿÿ0ÿÿÿA’S›S4ºþÿÿžþÿÿžþÿÿþ @1`Y@1`b%ÿÿÿ&ÿÿÿAETJT ¶þÿÿšþÿÿšþÿÿþ @3`V@3`[@ÿÿÿAÿÿÿAKTOT4³þÿÿ™þÿÿ™þÿÿþ @3`\@3``*ÿÿÿ+ÿÿÿA‚V†V ¯þÿÿ“þÿÿ“þÿÿþ @8`^@8`b&ÿÿÿ'ÿÿÿALYPY «þÿÿþÿÿþÿÿþ @>`l@>`pÿÿÿÿÿÿAt\y\ §þÿÿ‹þÿÿ‹þÿÿþ @D`^@D`cÿÿÿÿÿÿAI^M^ £þÿÿ‡þÿÿ‡þÿÿþ @H`y@H`}ÿÿÿÿÿÿA—aœa Ÿþÿÿƒþÿÿƒþÿÿþ @P`V@P`[)ÿÿÿ*ÿÿÿAa¡a4œþÿÿ‚þÿÿ‚þÿÿþ @P`\@P``ÿÿÿÿÿÿAËcÏc ˜þÿÿ|þÿÿ|þÿÿþ @U`^@U`bÿÿÿÿÿÿA“f—f ”þÿÿxþÿÿxþÿÿþ @[`l@[`pÿþÿÿÿÿÿA‡iŒi þÿÿtþÿÿtþÿÿþ @a`^@a`cÿÿÿÿÿÿARkVk Œþÿÿpþÿÿpþÿÿþ @e`x@e`|÷þÿÿøþÿÿA n¥n ˆþÿÿlþÿÿlþÿÿþ @m`V@m`[ÿÿÿÿÿÿA¦nªn4…þÿÿkþÿÿkþÿÿþ @m`\@m``üþÿÿýþÿÿAÙpÝp þÿÿeþÿÿeþÿÿþ @r`^@r`bøþÿÿùþÿÿArsvs }þÿÿaþÿÿaþÿÿþ @x`l@x`pèþÿÿéþÿÿAÚwßw yþÿÿ]þÿÿ]þÿÿþ @ƒ`Y@ƒ`^ÿÿÿÿÿÿAàwäw4vþÿÿ\þÿÿ\þÿÿþ @ƒ`_@ƒ`cíþÿÿîþÿÿAçyëy rþÿÿVþÿÿVþÿÿþ @ˆ`V@ˆ`ZéþÿÿêþÿÿAP|T| nþÿÿRþÿÿRþÿÿþ @Ž`d@Ž`hÙþÿÿÚþÿÿA¢ jþÿÿNþÿÿNþÿÿþ @—`k@—`pôþÿÿõþÿÿA£§4gþÿÿMþÿÿMþÿÿþ @—`q@—`uÞþÿÿßþÿÿA­± cþÿÿGþÿÿGþÿÿþ @œ`V@œ`ZÚþÿÿÛþÿÿA„„ _þÿÿCþÿÿCþÿÿþ @¢`d@¢`hÊþÿÿËþÿÿAz‡‡ [þÿÿ?þÿÿ?þÿÿþ @«`Y@«`^åþÿÿæþÿÿA€‡„‡4Xþÿÿ>þÿÿ>þÿÿþ @«`_@«`cÃþÿÿÄþÿÿA‡‰Œ‰ Tþÿÿ8þÿÿ8þÿÿþ @°`V@°`[ËþÿÿÌþÿÿACŒGŒ Pþÿÿ4þÿÿ4þÿÿþ @·`^@·`bÇþÿÿÈþÿÿA Lþÿÿ0þÿÿ0þÿÿþ @¼`^@¼`b·þÿÿ¸þÿÿA˜““ Hþÿÿ,þÿÿ,þÿÿþ @Æ`N@Æ`SÒþÿÿÓþÿÿAž“¢“4Eþÿÿ+þÿÿ+þÿÿþ @Æ`T@Æ`X¼þÿÿ½þÿÿA§•«• Aþÿÿ%þÿÿ%þÿÿþ @Ë`V@Ë`Z¸þÿÿ¹þÿÿA˜˜ =þÿÿ!þÿÿ!þÿÿþ @Ñ`d@Ñ`h¨þÿÿ©þÿÿAU›Z› 9þÿÿþÿÿþÿÿþ @Ú`N@Ú`SÃþÿÿÄþÿÿA[›_›46þÿÿþÿÿþÿÿþ @Ú`T@Ú`X­þÿÿ®þÿÿAfj 2þÿÿþÿÿþÿÿþ @ß`V@ß`Z©þÿÿªþÿÿAÏŸÓŸ .þÿÿþÿÿþÿÿþ @å`d@å`h¥þÿÿ¦þÿÿAN£R£ *þÿÿþÿÿþÿÿþ @î`N@î`R•þÿÿ–þÿÿAS¤X¤ &þÿÿ þÿÿ þÿÿþ @ñ`N@ñ`S‡signOutþA¦¦ !þÿÿ þÿÿ þÿÿþ @õ`H@õ`O˜þÿÿ™þÿÿA·§»§ þÿÿþÿÿþÿÿþ @ú`V@ú`Z”þÿÿ•þÿÿAªª þÿÿýýÿÿýýÿÿþ @`d@`h„þÿÿ…þÿÿAh®m® þÿÿùýÿÿùýÿÿþ @`;@`@‡þÿÿˆþÿÿAn®w®4þÿÿöýÿÿöýÿÿþ @`A@`J‰þÿÿŠþÿÿAñ®õ® þÿÿòýÿÿòýÿÿþ @`>@`B˜þÿÿ™þÿÿAö®ú®4 þÿÿñýÿÿñýÿÿþ @`C@`G‚þÿÿƒþÿÿAy°}° þÿÿëýÿÿëýÿÿþ @`>@`B‘þÿÿ’þÿÿA~°‚°4þÿÿêýÿÿêýÿÿþ @`C@`G{þÿÿ|þÿÿAt²x² þÿÿäýÿÿäýÿÿþ @`6@`:LanguageSwitcherþAy²‰²4ûýÿÿëýÿÿëýÿÿþ @`;@`KfþÿÿgþÿÿA³ ³ ÷ýÿÿÛýÿÿÛýÿÿþ @`.@`3nþÿÿoþÿÿAгԳ óýÿÿ×ýÿÿ×ýÿÿþ @"`6@"`:ôóAÕ³å³4ðýÿÿàýÿÿàýÿÿþ @"`;@"`KgþÿÿhþÿÿA"´&´ ìýÿÿÐýÿÿÐýÿÿþ @#`6@#`:cþÿÿdþÿÿAOµSµ èýÿÿÌýÿÿÌýÿÿþ @'`D@'`H_þÿÿ`þÿÿA·· äýÿÿÈýÿÿÈýÿÿþ @-`S@-`W[þÿÿ\þÿÿAI¸M¸ àýÿÿÄýÿÿÄýÿÿþ @1`C@1`GKþÿÿLþÿÿA„º‰º ÜýÿÿÀýÿÿÀýÿÿþ @<`2@<`7GþÿÿHþÿÿA^»c» Øýÿÿ¼ýÿÿ¼ýÿÿþ @?`=@?`BJþÿÿKþÿÿAd»m»4Õýÿÿ¹ýÿÿ¹ýÿÿþ @?`C@?`L@þÿÿAþÿÿA׻ܻ Ñýÿÿµýÿÿµýÿÿþ @A`6@A`;[þÿÿ\þÿÿAÝ»á»4Îýÿÿ´ýÿÿ´ýÿÿþ @A`<@A`@EþÿÿFþÿÿA3½7½ Êýÿÿ®ýÿÿ®ýÿÿþ @F`>@F`BAþÿÿBþÿÿAþ¾¿ Æýÿÿªýÿÿªýÿÿþ @L`L@L`P1þÿÿ2þÿÿAVÁ[Á Âýÿÿ¦ýÿÿ¦ýÿÿþ @U`6@U`;LþÿÿMþÿÿA\Á`Á4¿ýÿÿ¥ýÿÿ¥ýÿÿþ @U`<@U`@6þÿÿ7þÿÿAºÂ¾Â »ýÿÿŸýÿÿŸýÿÿþ @Z`>@Z`B2þÿÿ3þÿÿA…ĉÄ ·ýÿÿ›ýÿÿ›ýÿÿþ @``L@``P"þÿÿ#þÿÿAcÇhÇ ³ýÿÿ—ýÿÿ—ýÿÿþ @j`3@j`8%þÿÿ&þÿÿAiÇrÇ4°ýÿÿ”ýÿÿ”ýÿÿþ @j`9@j`BþÿÿþÿÿAÜÇáÇ ¬ýÿÿýÿÿýÿÿþ @l`6@l`;6þÿÿ7þÿÿAâÇæÇ4©ýÿÿýÿÿýÿÿþ @l`<@l`@ þÿÿ!þÿÿAFÉJÉ ¥ýÿÿ‰ýÿÿ‰ýÿÿþ @q`>@q`BþÿÿþÿÿAËË ¡ýÿÿ…ýÿÿ…ýÿÿþ @w`L@w`P þÿÿ þÿÿAJÍOÍ ýÿÿýÿÿýÿÿþ @€`6@€`;'þÿÿ(þÿÿAPÍTÍ4šýÿÿ€ýÿÿ€ýÿÿþ @€`<@€`@þÿÿþÿÿA²Î¶Î –ýÿÿzýÿÿzýÿÿþ @…`>@…`B þÿÿþÿÿA}ÐÐ ’ýÿÿvýÿÿvýÿÿþ @‹`L@‹`PýýÿÿþýÿÿA¿ÓÄÓ Žýÿÿrýÿÿrýÿÿþ @–`8@–`=þÿÿþÿÿAÅÓÎÓ4‹ýÿÿoýÿÿoýÿÿþ @–`>@–`Göýÿÿ÷ýÿÿA8Ô=Ô ‡ýÿÿkýÿÿkýÿÿþ @˜`6@˜`;þÿÿþÿÿA>ÔBÔ4„ýÿÿjýÿÿjýÿÿþ @˜`<@˜`@ûýÿÿüýÿÿA˜ÕœÕ €ýÿÿdýÿÿdýÿÿþ @`>@`B÷ýÿÿøýÿÿA“×—× |ýÿÿ`ýÿÿ`ýÿÿþ @£`L@£`PóýÿÿôýÿÿAÚÚ xýÿÿ\ýÿÿ\ýÿÿþ @ª`P@ª`TãýÿÿäýÿÿAÒÛ×Û týÿÿXýÿÿXýÿÿþ @°`E@°`JæýÿÿçýÿÿAØÛáÛ4qýÿÿUýÿÿUýÿÿþ @°`K@°`TÜýÿÿÝýÿÿA[Ü`Ü mýÿÿQýÿÿQýÿÿþ @²`>@²`C÷ýÿÿøýÿÿAaÜeÜ4jýÿÿPýÿÿPýÿÿþ @²`D@²`HáýÿÿâýÿÿAíÝñÝ fýÿÿJýÿÿJýÿÿþ @·`F@·`JÝýÿÿÞýÿÿAèßìß býÿÿFýÿÿFýÿÿþ @½`T@½`XÍýÿÿÎýÿÿAiânâ ^ýÿÿBýÿÿBýÿÿþ @Æ`>@Æ`CèýÿÿéýÿÿAoâsâ4[ýÿÿAýÿÿAýÿÿþ @Æ`D@Æ`HÒýÿÿÓýÿÿAùãýã Wýÿÿ;ýÿÿ;ýÿÿþ @Ë`F@Ë`JÎýÿÿÏýÿÿAôåøå Sýÿÿ7ýÿÿ7ýÿÿþ @Ñ`T@Ñ`X¾ýÿÿ¿ýÿÿA]ébé Oýÿÿ3ýÿÿ3ýÿÿþ @Û`;@Û`@ÁýÿÿÂýÿÿAcélé4Lýÿÿ0ýÿÿ0ýÿÿþ @Û`A@Û`J·ýÿÿ¸ýÿÿAæéëé Hýÿÿ,ýÿÿ,ýÿÿþ @Ý`>@Ý`CÒýÿÿÓýÿÿAìéðé4Eýÿÿ+ýÿÿ+ýÿÿþ @Ý`D@Ý`H¼ýÿÿ½ýÿÿA€ë„ë Aýÿÿ%ýÿÿ%ýÿÿþ @â`F@â`J¸ýÿÿ¹ýÿÿA­í±í =ýÿÿ!ýÿÿ!ýÿÿþ @è`T@è`X¨ýÿÿ©ýÿÿAEðJð 9ýÿÿýÿÿýÿÿþ @î`F@î`K°ýÿÿ±ýÿÿAºñ¾ñ 5ýÿÿýÿÿýÿÿþ @ò`a@ò`e ýÿÿ¡ýÿÿA;ô@ô 1ýÿÿýÿÿýÿÿþ @ú`>@ú`C»ýÿÿ¼ýÿÿAAôEô4.ýÿÿýÿÿýÿÿþ @ú`D@ú`H¥ýÿÿ¦ýÿÿAÇõËõ *ýÿÿýÿÿýÿÿþ @ÿ`F@ÿ`J¡ýÿÿ¢ýÿÿAÂ÷Æ÷ &ýÿÿ ýÿÿ ýÿÿþ @`T@`X‘ýÿÿ’ýÿÿAûû "ýÿÿýÿÿýÿÿþ @`6@`;¬ýÿÿ­ýÿÿAû!û4ýÿÿýÿÿýÿÿþ @`<@`@–ýÿÿ—ýÿÿAü…ü ýÿÿÿüÿÿÿüÿÿþ @`>@`B’ýÿÿ“ýÿÿALþPþ ýÿÿûüÿÿûüÿÿþ @`L@`P‚ýÿÿƒýÿÿA ýÿÿ÷üÿÿ÷üÿÿþ @$`S@$`XýÿÿžýÿÿA4ýÿÿöüÿÿöüÿÿþ @$`Y@$`]‡ýÿÿˆýÿÿAx|  ýÿÿðüÿÿðüÿÿþ @)`>@)`Bƒýÿÿ„ýÿÿAHL ýÿÿìüÿÿìüÿÿþ @/`L@/`PsýÿÿtýÿÿAÔÙ ýÿÿèüÿÿèüÿÿþ @8`A@8`FŽýÿÿýÿÿAÚÞ4ýÿÿçüÿÿçüÿÿþ @8`G@8`KlýÿÿmýÿÿA05 ýüÿÿáüÿÿáüÿÿþ @=`>@=`CtýÿÿuýÿÿA; ?  ùüÿÿÝüÿÿÝüÿÿþ @D`F@D`JpýÿÿqýÿÿAš ž  õüÿÿÙüÿÿÙüÿÿþ @I`F@I`J`ýÿÿaýÿÿA(- ñüÿÿÕüÿÿÕüÿÿþ @S`6@S`;{ýÿÿ|ýÿÿA.24îüÿÿÔüÿÿÔüÿÿþ @S`<@S`@eýÿÿfýÿÿAŽ’ êüÿÿÎüÿÿÎüÿÿþ @X`>@X`BaýÿÿbýÿÿA^b æüÿÿÊüÿÿÊüÿÿþ @^`L@^`PQýÿÿRýÿÿAËÐ âüÿÿÆüÿÿÆüÿÿþ @g`6@g`;¼þÿÿ»þÿÿAŒ“ ÞüÿÿÈüÿÿÈüÿÿþ @j`0@j`7UýÿÿVýÿÿADH Úüÿÿ¾üÿÿ¾üÿÿþ @p`>@p`BQýÿÿRýÿÿA  Öüÿÿºüÿÿºüÿÿþ @v`L@v`PAýÿÿBýÿÿAª¯ Òüÿÿ¶üÿÿ¶üÿÿþ @€`3@€`8DýÿÿEýÿÿA°¹4Ïüÿÿ³üÿÿ³üÿÿþ @€`9@€`BFýÿÿGýÿÿA#' Ëüÿÿ¯üÿÿ¯üÿÿþ @‚`6@‚`:UýÿÿVýÿÿA(,4Èüÿÿ®üÿÿ®üÿÿþ @‚`;@‚`??ýÿÿ@ýÿÿA¹½ Äüÿÿ¨üÿÿ¨üÿÿþ @ˆ`6@ˆ`:NýÿÿOýÿÿA¾Â4Áüÿÿ§üÿÿ§üÿÿþ @ˆ`;@ˆ`?8ýÿÿ9ýÿÿAÿ ! ½üÿÿ¡üÿÿ¡üÿÿþ @•`&@•`*(ýÿÿ)ýÿÿA‚!‡! ¹üÿÿüÿÿüÿÿþ @—`(@—`-0ýÿÿ1ýÿÿAY"]" µüÿÿ™üÿÿ™üÿÿþ @š`&@š`* ýÿÿ!ýÿÿA# # ±üÿÿ•üÿÿ•üÿÿþ @ž`&@ž`+(ýÿÿ)ýÿÿA¹#½# ­üÿÿ‘üÿÿ‘üÿÿþ @¡`.@¡`2$ýÿÿ%ýÿÿA±$µ$ ©üÿÿüÿÿüÿÿþ @¥`.@¥`2ýÿÿýÿÿAÔ%Ù% ¥üÿÿ‰üÿÿ‰üÿÿþ @«`&@«`+ýÿÿýÿÿAŠ&Ž& ¡üÿÿ…üÿÿ…üÿÿþ @®`.@®`2ýÿÿýÿÿA (( üÿÿüÿÿüÿÿþ @´`.@´`2'ýÿÿ(ýÿÿA((4šüÿÿ€üÿÿ€üÿÿþ @´`3@´`7«/* __next_internal_client_entry_do_not_use__ HeroSearch auto */ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; import { useState } from 'react'; import { useRouter } from 'next/navigation'; export function HeroSearch(param) { let { placeholder, mode = 'customer' } = param; const [q, setQ] = useState(''); const router = useRouter(); const handleSubmit = (e)=>{ e.preventDefault(); const trimmed = q.trim(); if (mode === 'specialist') { if (trimmed) router.push("/tasks?q=".concat(encodeURIComponent(trimmed))); else router.push('/tasks'); } else { if (trimmed) router.push("/specialists?q=".concat(encodeURIComponent(trimmed))); else router.push('/specialists'); } }; return /*#__PURE__*/ _jsxs("form", { onSubmit: handleSubmit, className: "relative w-full mb-8", children: [ /*#__PURE__*/ _jsx("input", { type: "text", value: q, onChange: (e)=>setQ(e.target.value), placeholder: placeholder, className: "w-full pl-5 pr-14 py-3.5 rounded-2xl border border-blue-200 bg-white/90 text-blue-900 placeholder:text-blue-300 focus:outline-none focus:ring-2 focus:ring-blue-400 text-base shadow-sm" }), /*#__PURE__*/ _jsx("button", { type: "submit", className: "absolute right-2 top-1/2 -translate-y-1/2 bg-blue-600 hover:bg-blue-700 text-white p-2.5 rounded-xl transition-colors duration-200", "aria-label": "Search", children: /*#__PURE__*/ _jsx("svg", { className: "w-5 h-5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2.5, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 5.196a7.5 7.5 0 0010.607 10.607z" }) }) }) ] }); } `üÿÿüÿÿ  4úÿÿ5úÿÿ#ûÿÿBüÿÿþEüÿÿ  FüÿÿGüÿÿœúÿÿúÿÿ02c1c26f9b920072LüÿÿŸúÿÿ  Müÿÿ ŠHeroSearch Wy²ÝyB’ûÿÿ–ûÿÿ dÿÿý€a@ b@€A€¡ `!€A¢Î `,AÖªAϪ a1` büÿÿbüÿÿ b@íúÿÿíúÿÿ `!düÿÿdüÿÿ `,íí a1‹üÿÿŠüÿÿA=E  éæúÿÿæúÿÿý bqüÿÿpüÿÿA^g ûZüÿÿZüÿÿþ bÝüÿÿÞüÿÿA38 ÷RüÿÿRüÿÿþ cåüÿÿæüÿÿA¼À óNüÿÿNüÿÿþ cáüÿÿâüÿÿAbf ïJüÿÿJüÿÿþ cÝüÿÿÞüÿÿA„ˆ ëFüÿÿFüÿÿþ c"(",ÙüÿÿÚüÿÿA†Š çBüÿÿBüÿÿþ c(,(0Ì /* __next_internal_client_entry_do_not_use__ HomeCityCloud auto */ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; import { useRouter } from 'next/navigation'; import { useLocation } from '@/context/location'; import { useLocale } from '@/context/locale'; export function HomeCityCloud(param) { let { locationTree, isSpecialist = false } = param; const router = useRouter(); const { setLocation } = useLocation(); const { locale } = useLocale(); const handleClick = (slug)=>{ if (isSpecialist) { router.push("/tasks?location=".concat(slug)); } else { setLocation(slug); router.push('/tasks/new'); } }; if (!locationTree.length) return null; return /*#__PURE__*/ _jsx("div", { className: "flex flex-wrap justify-center gap-3", children: locationTree.map((city)=>{ var _city_names_locale, _city_children; return /*#__PURE__*/ _jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [ /*#__PURE__*/ _jsxs("button", { type: "button", onClick: ()=>handleClick(city.slug), className: "inline-flex items-center gap-1 px-4 py-2 rounded-full bg-indigo-100 text-indigo-700 font-semibold text-sm hover:bg-indigo-200 transition cursor-pointer", children: [ "\uD83D\uDCCD ", (_city_names_locale = city.names[locale]) !== null && _city_names_locale !== void 0 ? _city_names_locale : city.names['el'] ] }), ((_city_children = city.children) !== null && _city_children !== void 0 ? _city_children : []).map((d)=>{ var _d_names_locale; return /*#__PURE__*/ _jsx("button", { type: "button", onClick: ()=>handleClick(d.slug), className: "inline-flex items-center px-3 py-1.5 rounded-full bg-slate-100 text-slate-700 text-sm hover:bg-indigo-100 hover:text-indigo-700 transition cursor-pointer", children: (_d_names_locale = d.names[locale]) !== null && _d_names_locale !== void 0 ? _d_names_locale : d.names['el'] }, d.id); }) ] }, city.id); }) }); } `ÝûÿÿÞûÿÿ  øùÿÿùùÿÿçúÿÿüÿÿþ üÿÿ   üÿÿ üÿÿ`úÿÿaúÿÿ102b3028de69af60üÿÿcúÿÿ  üÿÿ HomeCityCloud Wy²ÝyBpûÿÿtûÿÿ dÿÿý€`C@‚ aC@‚€Aƒ¯ `,€A°á `1€Aâ `-AË AË  a0` $üÿÿ$üÿÿ aC@‚'üÿÿ'üÿÿ `,’@/context/locationÿ `1(üÿÿ(üÿÿ `-éé a06üÿÿ5üÿÿA‚‹  åüÿÿüÿÿý b‹useLocationþA«¶ úóóþ b'<üÿÿ;üÿÿAÑÚ öüÿÿüÿÿþ b ¤üÿÿ¥üÿÿA ò üÿÿ üÿÿþ c”üÿÿ•üÿÿAÌÑ î üÿÿ üÿÿþ c!&üÿÿ‘üÿÿAY^ êüÿÿüÿÿþ c"'˜üÿÿ™üÿÿA… æüÿÿüÿÿþ c%-%1%/* __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 ROLE_COOKIE = 'canhelp_preview_role'; const ORIG_PLAN_KEY = 'canhelp_admin_orig_plan'; function getPreviewRole() { if (typeof document === 'undefined') return null; const m = document.cookie.match(/(?:^|;\s*)canhelp_preview_role=([^;]+)/); var _m_; return (_m_ = m === null || m === void 0 ? void 0 : m[1]) !== null && _m_ !== void 0 ? _m_ : null; } const TIER_COLORS = { free: 'bg-slate-100 text-slate-600', pro: 'bg-blue-100 text-blue-700', ultimate: 'bg-amber-100 text-amber-700' }; export function AdminRolePreview() { var _session_user, _session_user1; const { data: session } = useSession(); const router = useRouter(); const isAdmin = (session === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.role) === 'admin'; const userId = session === null || session === void 0 ? void 0 : (_session_user1 = session.user) === null || _session_user1 === void 0 ? void 0 : _session_user1.id; const [preview, setPreview] = useState(null); const [plans, setPlans] = useState([]); const [activePlanId, setActivePlanId] = useState(null); const [loading, setLoading] = useState(false); const [expanded, setExpanded] = useState(false); const origPlanRef = useRef(null); useEffect(()=>{ setPreview(getPreviewRole()); if ("object" !== 'undefined') { origPlanRef.current = localStorage.getItem(ORIG_PLAN_KEY); } }, []); useEffect(()=>{ if (!isAdmin) return; getPlans().then(setPlans).catch(()=>{}); }, [ isAdmin ]); useEffect(()=>{ var _session_user; var _session_user_planId; // Sync active plan from session const currentPlanId = (_session_user_planId = session === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.planId) !== null && _session_user_planId !== void 0 ? _session_user_planId : null; setActivePlanId(currentPlanId); }, [ session ]); if (!isAdmin) return null; const toggleRole = (role)=>{ if (preview === role) { document.cookie = "".concat(ROLE_COOKIE, "=; path=/; max-age=0"); setPreview(null); window.dispatchEvent(new CustomEvent('canhelp:preview-role', { detail: { role: null } })); } else { document.cookie = "".concat(ROLE_COOKIE, "=").concat(role, "; path=/; max-age=86400"); setPreview(role); window.dispatchEvent(new CustomEvent('canhelp:preview-role', { detail: { role } })); } router.refresh(); }; 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 (e) {} setLoading(false); }; const restorePlan = async ()=>{ const orig = origPlanRef.current; localStorage.removeItem(ORIG_PLAN_KEY); origPlanRef.current = null; await setPlan(orig !== null && orig !== void 0 ? orig : null); }; const visiblePlans = preview ? plans.filter((p)=>p.role === preview) : 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__*/ _jsxs("div", { className: "flex flex-col gap-1 px-2 pb-2 border-t border-slate-100 pt-2", children: [ /*#__PURE__*/ _jsx("div", { className: "text-slate-400 px-1 mb-0.5", children: "Role" }), /*#__PURE__*/ _jsx("button", { onClick: ()=>toggleRole('customer'), className: "px-3 py-1.5 rounded-xl transition text-left ".concat(preview === 'customer' ? 'bg-blue-600 text-white' : 'text-slate-600 hover:bg-slate-100'), children: "Customer" }), /*#__PURE__*/ _jsx("button", { onClick: ()=>toggleRole('specialist'), className: "px-3 py-1.5 rounded-xl transition text-left ".concat(preview === 'specialist' ? 'bg-orange-500 text-white' : 'text-slate-600 hover:bg-slate-100'), children: "Specialist" }), preview && /*#__PURE__*/ _jsx("button", { onClick: ()=>{ document.cookie = "".concat(ROLE_COOKIE, "=; path=/; max-age=0"); setPreview(null); router.refresh(); }, className: "px-3 py-1 rounded-xl text-slate-400 hover:text-red-500 hover:bg-red-50 transition text-left", children: "✕ Reset role" }), 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)=>{ var _TIER_COLORS_plan_tier; return /*#__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 ".concat(activePlanId === plan.id ? 'bg-indigo-600 text-white' : 'text-slate-600 hover:bg-slate-100', " ").concat(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 ".concat(activePlanId === plan.id ? 'bg-white/20 text-white' : (_TIER_COLORS_plan_tier = TIER_COLORS[plan.tier]) !== null && _TIER_COLORS_plan_tier !== void 0 ? _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" }) ] }) ] }) ] }); } `›ûÿÿûÿÿ ·ùÿÿ¸ùÿÿ¦úÿÿÅûÿÿþÈûÿÿ  ÉûÿÿÊûÿÿúÿÿ úÿÿ493823fa1c248696Ïûÿÿ"úÿÿ  Ðûÿÿ ŽgetPreviewRole‹ROLE_COOKIEORIG_PLAN_KEY‹TIER_COLORS&úÿÿ Wy²ÝyB(úÿÿ¯úÿÿ dÿÿý€`F@œ aF@œ€AÅ `(€AÆò `,€Aó' `4€A(^ `6An%Ag% a@¾„trueAÍå c!# `$ÛûÿÿÛûÿÿ aF@œàûÿÿàûÿÿ `(ÝûÿÿÝûÿÿ `,dúÿÿdúÿÿ `4æûÿÿæûÿÿ `6 úÿÿ úÿÿ a@¾øûÿÿ÷ûÿÿAÑÛ  úÿÿ×ûÿÿ×ûÿÿý c(èûÿÿçûÿÿAòû ûÑûÿÿÑûÿÿþ cùûÿÿøûÿÿA‰ ÷UúÿÿUúÿÿþ c"*õûÿÿôûÿÿA¯· óQúÿÿQúÿÿþ c&ñûÿÿðûÿÿAéñ ïMúÿÿMúÿÿþ c,4íûÿÿìûÿÿA# ëIúÿÿIúÿÿþ c"*éûÿÿèûÿÿAPX çEúÿÿEúÿÿþ c$,þûÿÿýûÿÿAy ãAúÿÿAúÿÿþ c üÿÿ üÿÿA‹” ß=úÿÿ=úÿÿþ c üÿÿüÿÿAJS Û9úÿÿ9úÿÿþ c%% ˆgetPlansþA€ˆ Ö·ûÿÿ·ûÿÿþ c''þûÿÿýûÿÿAÎ× Ò0úÿÿ0úÿÿþ c++ updateAdminUserþAâ ñ  Í®ûÿÿ®ûÿÿþ cRR!&üÿÿ'üÿÿAÌÑ É›ûÿÿ›ûÿÿþ cgg"üÿÿ#üÿÿAÉÎ Å—ûÿÿ—ûÿÿþ cmm*üÿÿ+üÿÿAÞâ Á“ûÿÿ“ûÿÿþ cq"q&&üÿÿ'üÿÿA`d ½ûÿÿûÿÿþ ct"t&üÿÿüÿÿA:? ¹‹ûÿÿ‹ûÿÿþ cz&z+üÿÿüÿÿAâæ µ‡ûÿÿ‡ûÿÿþ c}"}&üÿÿüÿÿA”˜ ±ƒûÿÿƒûÿÿþ @`"@`&üÿÿüÿÿAü ­ûÿÿûÿÿþ @†`"@†`&üÿÿüÿÿAw{ ©{ûÿÿ{ûÿÿþ @‹`-@‹`1üÿÿüÿÿAŒ‘ ¥wûÿÿwûÿÿþ @”`=@”`BüÿÿüÿÿA’›4¡sûÿÿsûÿÿþ @”`C@”`LüÿÿüÿÿAíñ oûÿÿoûÿÿþ @–`*@–`.öûÿÿ÷ûÿÿABG ™kûÿÿkûÿÿþ @œ`5@œ`:þûÿÿÿûÿÿAjn •gûÿÿgûÿÿþ @¡`6@¡`:úûÿÿûûÿÿAko ‘cûÿÿcûÿÿþ @¥`6@¥`:öûÿÿ÷ûÿÿAÌ!Ð! _ûÿÿ_ûÿÿþ @¬`:@¬`>òûÿÿóûÿÿAe#i# ‰[ûÿÿ[ûÿÿþ @²`9@²`=â†/* __next_internal_client_entry_do_not_use__ default auto */ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime"; import { useState, useEffect } from 'react'; import Link from 'next/link'; import { useRouter } from 'next/navigation'; import { useSession } from '@/lib/auth'; import { useLocale } from '@/context/locale'; import { getPlans, getMyDashboard, previewPlanChange, purchasePlan } from '@/lib/api'; import { PlanBadge } from '@/components/PlanBadge'; import { useEffectiveRole } from '@/hooks/useEffectiveRole'; const FEATURE_ROWS = [ { key: 'maxMessagesPerDay', labelKey: 'pricing.feat.messages', format: (v)=>v === null ? '∞' : String(v) }, { key: 'maxOrdersPerDay', labelKey: 'pricing.feat.orders', format: (v)=>v === null ? '∞' : String(v) }, { key: 'canContactAll', labelKey: 'pricing.feat.contact_all' }, { key: 'canViewPhone', labelKey: 'pricing.feat.view_phone' }, { key: 'canShowContactInfo', labelKey: 'pricing.feat.show_contact' }, { key: 'hasFavorites', labelKey: 'pricing.feat.favorites' }, { key: 'hasVerifiedBadge', labelKey: 'pricing.feat.verified_badge' }, { key: 'hasGoogleCalendar', labelKey: 'pricing.feat.google_calendar' }, { key: 'hasPersonalSite', labelKey: 'pricing.feat.personal_site' }, { key: 'hasAutoResponse', labelKey: 'pricing.feat.auto_response' }, { key: 'hasAutoMatch', labelKey: 'pricing.feat.auto_match' }, { key: 'highlightedReviews', labelKey: 'pricing.feat.highlighted_reviews' }, { key: 'maxPortfolioItems', labelKey: 'pricing.feat.portfolio', format: (v)=>v === null ? '∞' : String(v) }, { key: 'maxCards', labelKey: 'pricing.feat.cards', format: (v)=>v === null ? '∞' : String(v) }, { key: 'notifyNewTasks', labelKey: 'pricing.feat.notify_tasks' }, { key: 'canUploadVideo', labelKey: 'pricing.feat.video' } ]; const SPECIALIST_FEATURES = new Set([ 'hasGoogleCalendar', 'hasAutoResponse', 'highlightedReviews', 'maxPortfolioItems', 'maxCards', 'notifyNewTasks', 'canUploadVideo' ]); const CUSTOMER_FEATURES = new Set([ 'hasAutoMatch' ]); function CheckIcon() { return /*#__PURE__*/ _jsx("svg", { viewBox: "0 0 20 20", fill: "currentColor", className: "w-5 h-5 text-green-500 mx-auto", children: /*#__PURE__*/ _jsx("path", { fillRule: "evenodd", d: "M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z", clipRule: "evenodd" }) }); } function XIcon() { return /*#__PURE__*/ _jsx("svg", { viewBox: "0 0 20 20", fill: "currentColor", className: "w-4 h-4 text-gray-300 mx-auto", children: /*#__PURE__*/ _jsx("path", { d: "M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z" }) }); } const tierOrder = [ 'free', 'pro', 'ultimate' ]; const tierHeaderColors = { free: 'bg-gray-50 border-gray-200', pro: 'bg-blue-50 border-blue-200', ultimate: 'bg-gradient-to-br from-amber-50 to-yellow-50 border-amber-300' }; const tierPriceColors = { free: 'text-gray-700', pro: 'text-blue-700', ultimate: 'text-amber-600' }; const tierBtnColors = { free: 'bg-gray-100 text-gray-700 hover:bg-gray-200', pro: 'bg-blue-600 text-white hover:bg-blue-700', ultimate: 'bg-gradient-to-r from-amber-500 to-yellow-500 text-white hover:from-amber-600 hover:to-yellow-600' }; export default function PricingPage() { const { data: session } = useSession(); const { t } = useLocale(); const router = useRouter(); const effectiveRole = useEffectiveRole(); const [role, setRole] = useState('customer'); const [plans, setPlans] = useState([]); const [currentPlanId, setCurrentPlanId] = useState(null); const [loading, setLoading] = useState(true); const [confirmPlan, setConfirmPlan] = useState(null); const [preview, setPreview] = useState(null); const [previewLoading, setPreviewLoading] = useState(false); const [purchasing, setPurchasing] = useState(false); // Sync role from effective role — skip 'admin' (transient before preview cookie is read) useEffect(()=>{ if (!effectiveRole || effectiveRole === 'admin') return; setRole(effectiveRole === 'specialist' ? 'specialist' : 'customer'); }, [ effectiveRole ]); // Fetch plans with abort to prevent stale race conditions useEffect(()=>{ let aborted = false; setLoading(true); getPlans(role).then((data)=>{ if (!aborted) setPlans(data.sort((a, b)=>tierOrder.indexOf(a.tier) - tierOrder.indexOf(b.tier))); }).catch(()=>{}).finally(()=>{ if (!aborted) setLoading(false); }); return ()=>{ aborted = true; }; }, [ role ]); const fetchCurrentPlan = ()=>{ if (!session) return; getMyDashboard().then((d)=>{ var _d_plan; var _d_plan_id; return setCurrentPlanId((_d_plan_id = (_d_plan = d.plan) === null || _d_plan === void 0 ? void 0 : _d_plan.id) !== null && _d_plan_id !== void 0 ? _d_plan_id : null); }).catch(()=>{}); }; useEffect(fetchCurrentPlan, [ session ]); // Refresh active plan when admin widget changes it useEffect(()=>{ const handler = ()=>fetchCurrentPlan(); window.addEventListener('canhelp:plan-changed', handler); document.addEventListener('visibilitychange', handler); return ()=>{ window.removeEventListener('canhelp:plan-changed', handler); document.removeEventListener('visibilitychange', handler); }; }, [ session ]); async function handleSelectPlan(plan) { if (!session) { router.push('/sign-in'); return; } setConfirmPlan(plan); setPreview(null); setPreviewLoading(true); try { const p = await previewPlanChange(plan.id); setPreview(p); } catch (e) { setConfirmPlan(null); } finally{ setPreviewLoading(false); } } async function handleConfirm() { if (!confirmPlan || !preview) return; setPurchasing(true); try { const result = await purchasePlan(confirmPlan.id, preview.canPayFromBalance); if (result.url && result.params) { const form = document.createElement('form'); form.method = 'POST'; form.action = result.url; Object.entries(result.params).forEach((param)=>{ let [k, v] = param; const inp = document.createElement('input'); inp.type = 'hidden'; inp.name = k; inp.value = v; form.appendChild(inp); }); document.body.appendChild(form); form.submit(); return; } setCurrentPlanId(confirmPlan.id); setConfirmPlan(null); setPreview(null); } catch (e) { // ignore } finally{ setPurchasing(false); } } const visibleFeatures = FEATURE_ROWS.filter((param)=>{ let { key } = param; if (role === 'specialist' && CUSTOMER_FEATURES.has(key)) return false; if (role === 'customer' && SPECIALIST_FEATURES.has(key)) return false; return true; }); return /*#__PURE__*/ _jsxs("main", { className: "min-h-screen py-12 px-4", children: [ /*#__PURE__*/ _jsxs("div", { className: "max-w-5xl mx-auto", children: [ /*#__PURE__*/ _jsxs("div", { className: "text-center mb-10", children: [ /*#__PURE__*/ _jsx("h1", { className: "text-4xl font-bold text-white mb-3", children: t('pricing.title', 'Тарифы') }), /*#__PURE__*/ _jsx("p", { className: "text-white/70 text-lg", children: session ? t("pricing.subtitle_".concat(role), role === 'specialist' ? 'Тарифы Ð´Ð»Ñ ÑпециалиÑтов' : 'Тарифы Ð´Ð»Ñ Ð·Ð°ÐºÐ°Ð·Ñ‡Ð¸ÐºÐ¾Ð²') : t('pricing.subtitle', 'Выберите подходÑщий план') }), " " ] }), !session && /*#__PURE__*/ _jsx("div", { className: "flex justify-center mb-10", children: /*#__PURE__*/ _jsxs("div", { className: "inline-flex bg-white/10 rounded-xl p-1 gap-1", children: [ /*#__PURE__*/ _jsx("button", { onClick: ()=>setRole('customer'), className: "px-6 py-2 rounded-lg text-sm font-semibold transition ".concat(role === 'customer' ? 'bg-white text-gray-900 shadow-sm' : 'text-white/70 hover:text-white'), children: t('pricing.role.customer', 'Заказчик') }), /*#__PURE__*/ _jsx("button", { onClick: ()=>setRole('specialist'), className: "px-6 py-2 rounded-lg text-sm font-semibold transition ".concat(role === 'specialist' ? 'bg-white text-gray-900 shadow-sm' : 'text-white/70 hover:text-white'), children: t('pricing.role.specialist', 'СпециалиÑÑ‚') }) ] }) }), loading ? /*#__PURE__*/ _jsx("div", { className: "text-center text-white/60 py-20", children: t('common.loading', 'Загрузка...') }) : /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-6 mb-12", children: plans.map((plan)=>{ const isCurrentPlan = plan.id === currentPlanId; const isFree = plan.tier === 'free'; return /*#__PURE__*/ _jsxs("div", { className: "rounded-2xl border-2 p-6 bg-white flex flex-col transition ".concat(isCurrentPlan ? 'ring-2 ring-blue-500 ring-offset-2' : '', " ").concat(plan.tier === 'ultimate' ? 'border-amber-300 shadow-lg shadow-amber-100' : 'border-gray-200'), children: [ /*#__PURE__*/ _jsxs("div", { className: "flex items-center gap-2 mb-4", children: [ /*#__PURE__*/ _jsx(PlanBadge, { tier: plan.tier, size: "md" }), isCurrentPlan && /*#__PURE__*/ _jsx("span", { className: "text-xs font-medium text-green-600 bg-green-50 border border-green-200 px-2 py-0.5 rounded-full", children: t('pricing.current_plan', 'Ваш план') }), plan.tier === 'pro' && !isCurrentPlan && /*#__PURE__*/ _jsx("span", { className: "text-xs font-medium text-blue-600 bg-blue-50 border border-blue-100 px-2 py-0.5 rounded-full", children: t('pricing.popular', 'ПопулÑрный') }) ] }), /*#__PURE__*/ _jsx("h2", { className: "text-xl font-bold text-gray-900 mb-1", children: plan.name }), /*#__PURE__*/ _jsx("p", { className: "text-gray-500 text-sm mb-4 min-h-[40px]", children: plan.description }), /*#__PURE__*/ _jsxs("div", { className: "text-3xl font-extrabold mb-1 ".concat(tierPriceColors[plan.tier]), children: [ isFree ? t('pricing.free', 'БеÑплатно') : /*#__PURE__*/ _jsxs(_Fragment, { children: [ plan.oldPrice && /*#__PURE__*/ _jsxs("span", { className: "text-lg font-normal text-gray-400 line-through mr-2", children: [ "€", plan.oldPrice ] }), "€", plan.price ] }), !isFree && /*#__PURE__*/ _jsxs("span", { className: "text-base font-normal text-gray-400", children: [ "/", t('pricing.per_month', 'меÑ') ] }) ] }), plan.durationDays && !isFree && /*#__PURE__*/ _jsxs("p", { className: "text-xs text-gray-400 mb-5", children: [ t('pricing.duration', 'Срок'), ": ", plan.durationDays, " ", t('pricing.days', 'дн.') ] }), isFree && /*#__PURE__*/ _jsx("div", { className: "mb-5" }), /*#__PURE__*/ _jsx("div", { className: "mt-auto", children: isCurrentPlan ? /*#__PURE__*/ _jsx("div", { className: "w-full py-2.5 text-center text-sm font-semibold text-green-700 bg-green-50 border border-green-200 rounded-xl", children: t('pricing.your_plan', 'Ðктивный план') }) : isFree ? /*#__PURE__*/ _jsx("div", { className: "w-full py-2.5 text-center text-sm font-medium text-gray-400 bg-gray-50 border border-gray-200 rounded-xl", children: t('pricing.free_default', 'По умолчанию') }) : /*#__PURE__*/ _jsxs("button", { onClick: ()=>handleSelectPlan(plan), className: "block w-full py-2.5 text-center text-sm font-semibold rounded-xl transition ".concat(tierBtnColors[plan.tier]), children: [ t('pricing.choose', 'Выбрать'), " ", plan.name ] }) }) ] }, plan.id); }) }), /*#__PURE__*/ _jsxs("div", { className: "bg-white rounded-2xl border border-gray-200 overflow-hidden", children: [ /*#__PURE__*/ _jsx("div", { className: "px-6 py-4 border-b border-gray-100", children: /*#__PURE__*/ _jsx("h3", { className: "font-semibold text-gray-900", children: t('pricing.compare', 'Сравнение функций') }) }), /*#__PURE__*/ _jsx("div", { className: "overflow-x-auto", children: /*#__PURE__*/ _jsxs("table", { className: "w-full text-sm", children: [ /*#__PURE__*/ _jsx("thead", { children: /*#__PURE__*/ _jsxs("tr", { className: "border-b border-gray-100", children: [ /*#__PURE__*/ _jsx("th", { className: "text-left px-6 py-3 text-gray-500 font-medium w-1/2", children: t('pricing.feature', 'ФункциÑ') }), plans.map((plan)=>/*#__PURE__*/ _jsx("th", { className: "text-center px-4 py-3 font-medium text-gray-700", children: /*#__PURE__*/ _jsxs("div", { className: "flex flex-col items-center gap-1", children: [ /*#__PURE__*/ _jsx(PlanBadge, { tier: plan.tier, size: "sm" }), /*#__PURE__*/ _jsx("span", { className: "text-xs text-gray-400", children: plan.tier === 'free' ? t('pricing.free', 'БеÑплатно') : "€".concat(plan.price) }) ] }) }, plan.id)) ] }) }), /*#__PURE__*/ _jsx("tbody", { children: visibleFeatures.map((param)=>{ let { key, labelKey, format } = param; return /*#__PURE__*/ _jsxs("tr", { className: "border-b border-gray-50 hover:bg-gray-50/50 transition", children: [ /*#__PURE__*/ _jsx("td", { className: "px-6 py-3 text-gray-600", children: t(labelKey, labelKey) }), plans.map((plan)=>{ const val = plan[key]; let cell; if (format) { cell = /*#__PURE__*/ _jsx("span", { className: "text-gray-700 font-medium", children: format(val) }); } else if (typeof val === 'boolean') { cell = val ? /*#__PURE__*/ _jsx(CheckIcon, {}) : /*#__PURE__*/ _jsx(XIcon, {}); } else { cell = /*#__PURE__*/ _jsx("span", { className: "text-gray-700", children: val === null ? '∞' : String(val !== null && val !== void 0 ? val : '—') }); } return /*#__PURE__*/ _jsx("td", { className: "text-center px-4 py-3", children: cell }, plan.id); }) ] }, key); }) }) ] }) }) ] }), /*#__PURE__*/ _jsx("p", { className: "text-center text-white/50 text-sm mt-8", children: t('pricing.faq_note', 'Оплата ÑпиÑываетÑÑ Ñ Ð±Ð°Ð»Ð°Ð½Ñа CanHelp. Пополнение доÑтупно в разделе Оплата.') }) ] }) ] }), confirmPlan && /*#__PURE__*/ _jsx("div", { className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50 px-4", children: /*#__PURE__*/ _jsxs("div", { className: "bg-white rounded-2xl shadow-2xl w-full max-w-md p-6", children: [ /*#__PURE__*/ _jsx("h2", { className: "text-lg font-bold text-gray-900 mb-4", children: t('pricing.confirm.title', 'Подтвердите выбор тарифа') }), previewLoading ? /*#__PURE__*/ _jsx("div", { className: "py-10 text-center text-gray-400", children: t('common.loading', 'Загрузка...') }) : preview ? /*#__PURE__*/ _jsxs("div", { className: "space-y-3 text-sm text-gray-700", children: [ /*#__PURE__*/ _jsxs("div", { className: "flex justify-between", children: [ /*#__PURE__*/ _jsx("span", { className: "text-gray-500", children: t('pricing.confirm.plan', 'Тариф') }), /*#__PURE__*/ _jsx("span", { className: "font-semibold", children: confirmPlan.name }) ] }), preview.type === 'upgrade' && Number(preview.prorated) > 0 && /*#__PURE__*/ _jsxs("div", { className: "flex justify-between", children: [ /*#__PURE__*/ _jsx("span", { className: "text-gray-500", children: t('pricing.confirm.prorated', 'Зачёт оÑтатка') }), /*#__PURE__*/ _jsxs("span", { className: "text-green-600 font-medium", children: [ "−€", preview.prorated ] }) ] }), preview.type !== 'downgrade' && /*#__PURE__*/ _jsxs("div", { className: "flex justify-between", children: [ /*#__PURE__*/ _jsx("span", { className: "text-gray-500", children: t('pricing.confirm.effective_price', 'К оплате') }), /*#__PURE__*/ _jsxs("span", { className: "font-bold text-gray-900", children: [ "€", preview.effectivePrice ] }) ] }), preview.type !== 'downgrade' && /*#__PURE__*/ _jsxs("div", { className: "flex justify-between", children: [ /*#__PURE__*/ _jsx("span", { className: "text-gray-500", children: t('pricing.confirm.your_balance', 'Ваш баланÑ') }), /*#__PURE__*/ _jsxs("span", { className: preview.canPayFromBalance ? 'text-green-600' : 'text-red-500', children: [ "€", preview.currentBalance ] }) ] }), preview.type === 'downgrade' && /*#__PURE__*/ _jsxs("div", { className: "bg-orange-50 border border-orange-200 rounded-xl p-3 text-orange-800 text-xs", children: [ t('pricing.confirm.downgrade_info', 'Переход на новый тариф произойдёт автоматичеÑки поÑле Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ периода.'), preview.scheduledDate && /*#__PURE__*/ _jsxs(_Fragment, { children: [ " ", new Date(preview.scheduledDate).toLocaleDateString('ru-RU') ] }) ] }), preview.type !== 'downgrade' && !preview.canPayFromBalance && /*#__PURE__*/ _jsxs("div", { className: "bg-red-50 border border-red-200 rounded-xl p-3 text-red-700 text-xs", children: [ t('pricing.confirm.insufficient', 'ÐедоÑтаточно ÑредÑтв на баланÑе.'), ' ', /*#__PURE__*/ _jsx(Link, { href: "/payment", className: "underline font-medium", onClick: ()=>setConfirmPlan(null), children: t('pricing.confirm.top_up', 'Пополнить') }) ] }), /*#__PURE__*/ _jsxs("div", { className: "flex gap-3 pt-2", children: [ /*#__PURE__*/ _jsx("button", { onClick: ()=>{ setConfirmPlan(null); setPreview(null); }, className: "flex-1 py-2.5 rounded-xl border border-gray-200 text-sm font-medium text-gray-600 hover:bg-gray-50 transition", children: t('common.cancel', 'Отмена') }), (preview.type === 'downgrade' || preview.canPayFromBalance) && /*#__PURE__*/ _jsx("button", { onClick: handleConfirm, disabled: purchasing, className: "flex-1 py-2.5 rounded-xl text-sm font-semibold text-white transition ".concat(preview.type === 'downgrade' ? 'bg-orange-500 hover:bg-orange-600' : tierBtnColors[confirmPlan.tier].replace('block w-full', '').trim(), " disabled:opacity-50"), children: purchasing ? t('common.loading', 'Загрузка...') : preview.type === 'downgrade' ? t('pricing.confirm.schedule_downgrade', 'Запланировать переход') : t('pricing.confirm.pay', 'Оплатить') }) ] }) ] }) : null ] }) }) ] }); } `õúÿÿ÷úÿÿ ùÿÿùÿÿ¬úÿÿûÿÿþ"ûÿÿ  #ûÿÿ$ûÿÿyùÿÿzùÿÿ1f28d2a7e7345e20)ûÿÿ|ùÿÿ  *ûÿÿ ` ‰CheckIcon…XIconŒFEATURE_ROWS“SPECIALIST_FEATURES‘CUSTOMER_FEATURES‰tierOrdertierHeaderColorstierPriceColorstierBtnColors‰*default*‹PricingPage Wy²ÝyB™úÿÿžúÿÿ`  dÿÿý€`=@“ a=@“€A”À `,€AÁÞ `€Aß  `,€A 4 `(€A5b `-€Ac¹ `V€Aºí `3€Aî* `<A™ø„AŠø„ @†@V`s)ûÿÿ)ûÿÿ a=@“´ùÿÿ´ùÿÿ `,)ûÿÿ)ûÿÿ `*ûÿÿ*ûÿÿ `,+ûÿÿ+ûÿÿ `(,ûÿÿ,ûÿÿ `-2ûÿÿ2ûÿÿ `V–@/components/PlanBadgeÿ `3 2ûÿÿ2ûÿÿ `<³ûÿÿ´ûÿÿA× Û   Âûÿÿûÿÿûÿÿý c]]®ûÿÿ¯ûÿÿAv z  ûûÿÿûÿÿþ ca a$ªûÿÿ«ûÿÿA¦ ª   ¹ûÿÿûÿÿûÿÿý cii¥ûÿÿ¦ûÿÿAD H  ûûÿÿûÿÿþ cm m$A8 a  ²ûÿÿ crvŰûÿÿ @†@V,ûÿÿ+ûÿÿAÐÚ  ¬ûÿÿ ûÿÿ ûÿÿý @‡`@‡`(,ûÿÿ+ûÿÿAðù û ûÿÿ ûÿÿþ @ˆ`@ˆ`ûÿÿûÿÿA ÷ûÿÿûÿÿþ @‰`@‰`\ûÿÿ[ûÿÿA7G ó  ûÿÿ ûÿÿþ @Š`@Š`*%ûÿÿ$ûÿÿAgo ïùÿÿùÿÿþ @‹`@‹`$!ûÿÿ ûÿÿA›£ ë}ùÿÿ}ùÿÿþ @Œ`@Œ`&ûÿÿûÿÿA×ß çyùÿÿyùÿÿþ @`.@`6ûÿÿûÿÿA  ãuùÿÿuùÿÿþ @Ž`"@Ž`*ûÿÿûÿÿACK ßqùÿÿqùÿÿþ @`*@`2ûÿÿûÿÿAu} Ûmùÿÿmùÿÿþ @`"@`* ûÿÿ ûÿÿAµ½ ×iùÿÿiùÿÿþ @‘`0@‘`8 ûÿÿûÿÿAîö Óeùÿÿeùÿÿþ @’`(@’`0/ûÿÿ.ûÿÿAaj Ïaùÿÿaùÿÿþ @”@”` +ûÿÿ*ûÿÿAir Ë]ùÿÿ]ùÿÿþ @›@›` $ÿÿÿ#ÿÿÿA¸À ÇÜúÿÿÜúÿÿþ @ž@ž`KûÿÿJûÿÿAGU ÃØúÿÿØúÿÿþ @«@«`ûÿÿûÿÿAqz ¿QùÿÿQùÿÿþ @±@±` ûÿÿûÿÿAãì »MùÿÿMùÿÿþ @µ@µ` ‘previewPlanChangeþA€‘ ¶ËúÿÿËúÿÿþ @É`@É`-ŒpurchasePlanþA×ã ±ÆúÿÿÆúÿÿþ @Õ`!@Õ`->ûÿÿ?ûÿÿA ¥ ­³úÿÿ³úÿÿþ @õ`@õ`:ûÿÿ;ûÿÿA   ©¯úÿÿ¯úÿÿþ @ø`@ø`6ûÿÿ7ûÿÿA‰ Ž  ¥«úÿÿ«úÿÿþ @û`"@û`'>ûÿÿ?ûÿÿA!"! ¡§úÿÿ§úÿÿþ @þ`*@þ`.:ûÿÿ;ûÿÿA "" £úÿÿ£úÿÿþ @`*@`.6ûÿÿ7ûÿÿAÝ#á# ™ŸúÿÿŸúÿÿþ @ `.@ `2&ûÿÿ'ûÿÿA[$`$ •›úÿÿ›úÿÿþ @ `0@ `5.ûÿÿ/ûÿÿA%% ‘—úÿÿ—úÿÿþ @`.@`2*ûÿÿ+ûÿÿAâ&æ& “úÿÿ“úÿÿþ @`.@`2&ûÿÿ'ûÿÿA)) ‰úÿÿúÿÿþ @`,@`0ûÿÿûÿÿAÃ)È) …‹úÿÿ‹úÿÿþ @`'@`,ûÿÿûÿÿAÉ)Ò)4‡úÿÿ‡úÿÿþ @`-@`6ûÿÿûÿÿA$*(* }ÿÿÿƒúÿÿƒúÿÿþ @ `*@ `. ûÿÿ ûÿÿA¡+¦+ yÿÿÿúÿÿúÿÿþ @%`9@%`>ûÿÿûÿÿA<-A- uÿÿÿ{úÿÿ{úÿÿþ @(`:@(`?ûÿÿûÿÿA$.(. qÿÿÿwúÿÿwúÿÿþ @+`B@+`F‰PlanBadgeþA).2.4lÿÿÿPÿÿÿPÿÿÿþ @+`G@+`PûÿÿûÿÿAM/Q/ hÿÿÿnúÿÿnúÿÿþ @/`S@/`WûÿÿûÿÿA 11 dÿÿÿjúÿÿjúÿÿþ @3`k@3`oýúÿÿþúÿÿA÷2û2 `ÿÿÿfúÿÿfúÿÿþ @9`:@9`>ùúÿÿúúÿÿA44 \ÿÿÿbúÿÿbúÿÿþ @=`:@=`>éúÿÿêúÿÿA<5A5 Xÿÿÿ^úÿÿ^úÿÿþ @A`:@A`?åúÿÿæúÿÿAr6w6 TÿÿÿZúÿÿZúÿÿþ @D`l@D`qÏéúÿÿAx664QÿÿÿWúÿÿWúÿÿþ @D`r@D`{ÞúÿÿßúÿÿA$7)7 MÿÿÿSúÿÿSúÿÿþ @F`[@F``ÚúÿÿÛúÿÿAf:k: IÿÿÿOúÿÿOúÿÿþ @Q`M@Q`RÖúÿÿ×úÿÿAì<ñ< EÿÿÿKúÿÿKúÿÿþ @Z`Z@Z`_ÞúÿÿßúÿÿAŽ?’? AÿÿÿGúÿÿGúÿÿþ @d`D@d`HÚúÿÿÛúÿÿAH@L@ =ÿÿÿCúÿÿCúÿÿþ @g`:@g`>Öúÿÿ×úÿÿAô@ø@ 9ÿÿÿ?úÿÿ?úÿÿþ @i`X@i`\ÒúÿÿÓúÿÿAdBhB 5ÿÿÿ;úÿÿ;úÿÿþ @l`L@l`PÂúÿÿÃúÿÿAÈCÍC 1ÿÿÿ7úÿÿ7úÿÿþ @o`C@o`H¾úÿÿ¿úÿÿAZG_G -ÿÿÿ3úÿÿ3úÿÿþ @}`*@}`/ÆúÿÿÇúÿÿA1H5H )ÿÿÿ/úÿÿ/úÿÿþ @€`2@€`6ÂúÿÿÃúÿÿAØHÜH %ÿÿÿ+úÿÿ+úÿÿþ @‚`@@‚`D¾úÿÿ¿úÿÿA J$J !ÿÿÿ'úÿÿ'úÿÿþ @‡`2@‡`6®úÿÿ¯úÿÿA´J¹J ÿÿÿ#úÿÿ#úÿÿþ @‰`@@‰`E¶úÿÿ·úÿÿA„KˆK ÿÿÿúÿÿúÿÿþ @Œ`>@Œ`B¦úÿÿ§úÿÿAàKåK ÿÿÿúÿÿúÿÿþ @`L@`Q®úÿÿ¯úÿÿAÛLßL ÿÿÿúÿÿúÿÿþ @`J@`Nªúÿÿ«úÿÿApNtN  ÿÿÿúÿÿúÿÿþ @”`\@”``šúÿÿ›úÿÿA[O`O  ÿÿÿúÿÿúÿÿþ @–`\@–`a¢úÿÿ£úÿÿAP“P ÿÿÿ úÿÿ úÿÿþ @™`Z@™`^•”A”PP4ÿÿÿæþÿÿæþÿÿþ @™`_@™`h›úÿÿœúÿÿAR R þþÿÿúÿÿúÿÿþ @`Z@`^—úÿÿ˜úÿÿACUGU úþÿÿúÿÿúÿÿþ @§`>@§`B‡úÿÿˆúÿÿA\VaV öþÿÿüùÿÿüùÿÿþ @ª`M@ª`RúÿÿúÿÿAW…W òþÿÿøùÿÿøùÿÿþ @­`N@­`R‹úÿÿŒúÿÿALZPZ îþÿÿôùÿÿôùÿÿþ @µ`]@µ`a‡úÿÿˆúÿÿAK\O\ êþÿÿðùÿÿðùÿÿþ @º`c@º`gƒúÿÿ„úÿÿAo\s\ æþÿÿìùÿÿìùÿÿþ Cº‡º‹úÿÿ€úÿÿA*].] âþÿÿèùÿÿèùÿÿþ @¼`]@¼`a{úÿÿ|úÿÿA*_._ Þþÿÿäùÿÿäùÿÿþ @Á`Y@Á`]wúÿÿxúÿÿAcbgb Úþÿÿàùÿÿàùÿÿþ @Ï`*@Ï`.súÿÿtúÿÿAîcòc ÖþÿÿÜùÿÿÜùÿÿþ @×`)@×`-cúÿÿdúÿÿA‡dŒd ÒþÿÿØùÿÿØùÿÿþ @Ù`(@Ù`-kúÿÿlúÿÿA2e6e ÎþÿÿÔùÿÿÔùÿÿþ @Ü`&@Ü`*gúÿÿhúÿÿA>fBf ÊþÿÿÐùÿÿÐùÿÿþ @à`7@à`;WúÿÿXúÿÿAgg ÆþÿÿÌùÿÿÌùÿÿþ @ã`5@ã`:SúÿÿTúÿÿAÃgÈg ÂþÿÿÈùÿÿÈùÿÿþ @æ`.@æ`3[úÿÿ\úÿÿAhƒh ¾þÿÿÄùÿÿÄùÿÿþ @é`6@é`:WúÿÿXúÿÿA‘i•i ºþÿÿÀùÿÿÀùÿÿþ @í`6@í`:GúÿÿHúÿÿAkk ¶þÿÿ¼ùÿÿ¼ùÿÿþ @ó`l@ó`qOúÿÿPúÿÿAÌkÐk ²þÿÿ¸ùÿÿ¸ùÿÿþ @ö`6@ö`:?úÿÿ@úÿÿAêlïl ®þÿÿ´ùÿÿ´ùÿÿþ @ú`6@ú`;;úÿÿ<úÿÿAïnôn ªþÿÿ°ùÿÿ°ùÿÿþ @`N@`SCúÿÿDúÿÿA«o¯o ¦þÿÿ¬ùÿÿ¬ùÿÿþ @`6@`:3úÿÿ4úÿÿAËpÐp ¢þÿÿ¨ùÿÿ¨ùÿÿþ @ `6@ `;/úÿÿ0úÿÿAÒr×r žþÿÿ¤ùÿÿ¤ùÿÿþ @`N@`S7úÿÿ8úÿÿAŽs’s šþÿÿ ùÿÿ ùÿÿþ @`6@`:'úÿÿ(úÿÿA­t²t –þÿÿœùÿÿœùÿÿþ @`6@`;#úÿÿ$úÿÿAØvÝv ’þÿÿ˜ùÿÿ˜ùÿÿþ @#`N@#`Súÿÿ úÿÿA‡xŒx Žþÿÿ”ùÿÿ”ùÿÿþ @'`O@'`T ÿÿÿ#úÿÿAx–x4‹þÿÿ‘ùÿÿ‘ùÿÿþ @'`U@'`^úÿÿúÿÿA‚z‡z ‡þÿÿùÿÿùÿÿþ @/`l@/`q úÿÿ!úÿÿA | | ƒþÿÿ‰ùÿÿ‰ùÿÿþ @4`6@4`:.úÿÿ/úÿÿA||4þÿÿ‡ùÿÿ‡ùÿÿþ @4`;@4`? úÿÿ úÿÿAõ}ú} {þÿÿùÿÿùÿÿþ @<`.@<`3úÿÿúÿÿA¬~°~ wþÿÿ}ùÿÿ}ùÿÿþ @?`6@?`:úÿÿúÿÿAKO sþÿÿyùÿÿyùÿÿþ @G`u@G`y á÷ÿÿ å÷ÿÿ¹÷ÿÿ4÷ÿÿ¡÷ÿÿ³/opt/canhelp/apps/web/src/hooks/useEffectiveRole.ts€€ å÷ÿÿøÿÿøÿÿŸ./src/hooks/useEffectiveRole.tsÿÿ @‰ ôy²ÝyBýŸ/opt/canhelp/apps/web/src/hooks$øÿÿ! n²ÝyBn²ÝyBd6702045261c00f6"øÿÿÏ÷ÿÿ`3øÿÿÅ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/hooks/useEffectiveRoleÈ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/hooks/useEffectiveRole.jsÉ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/hooks/useEffectiveRole.mjsÉ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/hooks/useEffectiveRole.tsxÈ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/hooks/useEffectiveRole.tsÉ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/hooks/useEffectiveRole.jsxÊ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/hooks/useEffectiveRole.jsonÊ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/hooks/useEffectiveRole.wasm°/opt/canhelp/apps/web/src/hooks/useEffectiveRole³/opt/canhelp/apps/web/src/hooks/useEffectiveRole.js´/opt/canhelp/apps/web/src/hooks/useEffectiveRole.mjs´/opt/canhelp/apps/web/src/hooks/useEffectiveRole.tsxÁ/opt/canhelp/apps/web/opt/canhelp/apps/web/src/hooks/package.json¬/opt/canhelp/apps/web/src/hooks/package.jsonˆ LøÿÿQøÿÿ Æ÷ÿÿ Ê÷ÿÿ°øÿÿ÷ÿÿ†÷ÿÿ倀 Ë÷ÿÿøÿÿøÿÿæææ @‰ @ûy²ÝyBäçé øÿÿ¹÷ÿÿ`Æøÿÿêëìíîïðñòóôõö÷ˆ DøÿÿÉøÿÿ ¾÷ÿÿ Â÷ÿÿ¹/opt/canhelp/apps/web/src/components/LanguageSwitcher.tsx÷ÿÿ}÷ÿÿÉøÿÿ€€ Â÷ÿÿù÷ÿÿú÷ÿÿÊøÿÿÊøÿÿÊøÿÿ @‰ ýy²ÝyBÈøÿÿËøÿÿÍøÿÿøÿÿ°÷ÿÿ`øÿÿÏøÿÿÐøÿÿÑøÿÿÒøÿÿÓøÿÿÔøÿÿÕøÿÿÖøÿÿ×øÿÿØøÿÿÙøÿÿÚøÿÿÛøÿÿÜøÿÿˆ ;øÿÿ@øÿÿ~export const LOCALES = [ { code: 'el', label: 'Ελληνικά', flag: '🇬🇷' }, { code: 'en', label: 'English', 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.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': 'δωÏεάν εγγÏαφή', // 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.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.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': 'ΕπιστÏοφή στη σÏνδεση', // Dashboard 'dashboard.title': 'Πίνακας ελέγχου', 'dashboard.new_task': '+ Îέα εÏγασία', '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': 'ΠεÏιοχή εÏγασίας', '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.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.body.new_offer': 'Îέα Ï€ÏοσφοÏά για «{title}»', 'notif.body.offer_accepted': 'Η Ï€ÏοσφοÏά σας για «{title}» έγινε δεκτή', 'notif.body.offer_declined': 'Η Ï€ÏοσφοÏά σας για «{title}» αποÏÏίφθηκε', 'notif.body.task_invite': 'Σας Ï€ÏοσκαλοÏν για «{title}»', 'notif.body.new_review': 'Λάβατε αξιολόγηση {rating}★', // 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.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': 'Το βιογÏαφικό και η φωτογÏαφία Ïυθμίζονται στην καÏτέλα «Βασικά».', '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.create_first': 'ΔημιουÏγήστε το Ï€Ïώτο σας χαÏτοφυλάκιο', 'profile.cards.delete_confirm': 'ΔιαγÏαφή χαÏτοφυλακίου;', 'profile.card.tab.main': 'Γενικά', 'profile.card.tab.skills': 'Δεξιότητες', 'profile.card.tab.categories': 'ΚατηγοÏίες', 'profile.card.tab.geography': 'ΓεωγÏαφία', 'profile.card.tab.portfolio': 'ΓκαλεÏί', 'profile.card.active': 'ΕνεÏγή', '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.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.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.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.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.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.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.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.order': 'ΣειÏά', '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': 'Όλα τα δικαιώματα διατηÏοÏνται.', // 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': 'ΤώÏα μποÏείτε να λαμβάνετε παÏαγγελίες από πελάτες. Αναζητήστε εÏγασίες που ταιÏιάζουν με τις δεξιότητές σας.' }, 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': 'Dashboard', 'nav.chat': 'Messages', 'nav.notifications': 'Notifications', 'nav.profile': 'Profile', 'nav.admin': 'Admin Panel', 'nav.specialists': 'Specialists', 'nav.new_task': 'New task', 'nav.login': 'Login', 'nav.register': 'Register', 'nav.logout': 'Logout', 'hero.title': 'Find a specialist for any job', 'hero.subtitle': 'Post a task, receive offers and choose the best professional', 'hero.cta.post': 'Post a task', 'hero.cta.browse': 'Become a specialist', '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': 'specialists', 'stats.tasks': 'tasks', 'stats.categories': 'categories', 'stats.free': 'free sign-up', '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.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.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', 'dashboard.title': 'Dashboard', 'dashboard.new_task': '+ New 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', '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.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.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', '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': '🔧 Specialist', 'profile.role.admin': '👑 Admin', 'profile.role.customer': '👤 User', 'profile.role.change': 'To change your role please contact support.', 'profile.become_specialist': 'Become a Specialist', 'profile.become_specialist.desc': 'Upgrade to Specialist to take on tasks and build your profile.', 'become_specialist.hero.title': 'Earn money doing what you do best', 'become_specialist.hero.subtitle': 'Create a specialist profile and receive orders from clients across Greece', '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.', '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': 'Portfolio', 'profile.cards.count': 'Portfolio', 'profile.cards.add': 'Add portfolio', 'profile.cards.new_title': 'New portfolio title', 'profile.cards.placeholder': 'e.g. Plumbing', 'profile.cards.create': 'Create', 'profile.cards.cancel': 'Cancel', 'profile.cards.empty': 'No portfolio yet', 'profile.cards.create_first': 'Create your first portfolio', 'profile.cards.delete_confirm': 'Delete portfolio?', '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.active': 'Active', '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.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.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.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': 'Specialists', '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 portfolio (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': 'Specialist', '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.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': 'Portfolio', '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': 'Specialists', '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.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 specialists', '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.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': 'Portfolio', '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': 'Portfolio', 'admin.user_edit.no_cards': 'No portfolio found', 'admin.user_edit.card_title': 'Portfolio 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.specialist': 'Specialist', '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.order': 'Order', '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': 'Specialists', '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.', // 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': 'Portfolio items', 'pricing.feat.cards': 'Specialist cards', 'pricing.feat.notify_tasks': 'New task notifications', 'pricing.feat.video': 'Video in portfolio', // 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.' }, 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.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': 'беÑÐ¿Ð»Ð°Ñ‚Ð½Ð°Ñ Ñ€ÐµÐ³Ð¸ÑтрациÑ', '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.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.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': 'ВернутьÑÑ Ðº входу', 'dashboard.title': 'Панель управлениÑ', 'dashboard.new_task': '+ ÐÐ¾Ð²Ð°Ñ Ð·Ð°Ð´Ð°Ñ‡Ð°', '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': 'Район работы', '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.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.body.new_offer': 'Ðовое предложение на «{title}»', 'notif.body.offer_accepted': 'Ваше предложение на «{title}» принÑто', 'notif.body.offer_declined': 'Ваше предложение на «{title}» отклонено', 'notif.body.task_invite': 'Ð’Ð°Ñ Ð¿Ñ€Ð¸Ð³Ð»Ð°ÑˆÐ°ÑŽÑ‚ на «{title}»', 'notif.body.new_review': 'Ð’Ñ‹ получили оценку {rating}★', '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.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': 'Ð‘Ð¸Ð¾Ð³Ñ€Ð°Ñ„Ð¸Ñ Ð¸ фото наÑтраиваютÑÑ Ð²Ð¾ вкладке «ОÑновное».', '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.create_first': 'Создать первое портфолио', 'profile.cards.delete_confirm': 'Удалить портфолио?', 'profile.card.tab.main': 'ОÑновное', 'profile.card.tab.skills': 'Ðавыки', 'profile.card.tab.categories': 'Категории', 'profile.card.tab.geography': 'ГеографиÑ', 'profile.card.tab.portfolio': 'ГалереÑ', 'profile.card.active': 'Ðктивна', '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.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.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.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.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.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.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.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.order': 'ПорÑдок', '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': 'Ð’Ñе права защищены.', // 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': 'Теперь вы можете получать заказы от клиентов. Ðайдите задачи, которые ÑоответÑтвуют вашим навыкам.' } }; export function getTranslations(locale) { var _translations_locale; const t = (_translations_locale = translations[locale]) !== null && _translations_locale !== void 0 ? _translations_locale : translations.el; return (key, fallback)=>{ var _t_key, _ref, _ref1; return (_ref1 = (_ref = (_t_key = t[key]) !== null && _t_key !== void 0 ? _t_key : translations.el[key]) !== null && _ref !== void 0 ? _ref : fallback) !== null && _ref1 !== void 0 ? _ref1 : key; }; } `çøÿÿéøÿÿ ÷ÿÿ÷ÿÿÁøÿÿùÿÿþùÿÿ  ùÿÿùÿÿk÷ÿÿl÷ÿÿ262ce5b6edbc1d81ùÿÿn÷ÿÿ  ùÿÿ ‡LOCALESŒtranslationsgetTranslations Wy²ÝyB¶øÿÿ»øÿÿ dÿÿý@ @  aAÇèA Çè a@D AÏèµêAÈèµê @E @L îî aîî a@D îî @E @L T/* __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=([^;]+)/); var _m_; return (_m_ = m === null || m === void 0 ? void 0 : m[1]) !== null && _m_ !== void 0 ? _m_ : 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() { var _session_user; const { data: session } = useSession(); const userRole = session === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.role; const isAdmin = userRole === 'admin'; const [previewRole, setPreviewRole] = useState(null); 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; } `ÈøÿÿÉøÿÿ  ãöÿÿäöÿÿ´ñøÿÿþôøÿÿ  õøÿÿöøÿÿK÷ÿÿL÷ÿÿc55b0047cecfce59ûøÿÿN÷ÿÿ  üøÿÿ readPreviewRole€ùÿÿ Wy²ÝyB«° dÿÿý€aFn bFn€`o@› `,AšSA“S c #ùÿÿùÿÿ bFnž÷ÿÿž÷ÿÿ `,qùÿÿqùÿÿ c #3ùÿÿ2ùÿÿAí÷  mùÿÿùÿÿùÿÿý c(8ùÿÿ7ùÿÿAù û”÷ÿÿ”÷ÿÿþ c*2^ùÿÿ]ùÿÿA  ÷÷ÿÿ÷ÿÿþ c ãp// Imports import ___CSS_LOADER_API_IMPORT___ from "../../../../node_modules/next/dist/build/webpack/loaders/css-loader/src/runtime/api.js"; var ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(false); // Module ___CSS_LOADER_EXPORT___.push([module.id, "@font-face {\n font-family: 'Showpop';\n src: url('/fonts/showpop.woff2') format('woff2');\n font-weight: normal;\n font-style: normal;\n font-display: swap;\n}\n\n.logo-text {\n font-family: 'Showpop', sans-serif;\n letter-spacing: 0.01em;\n font-weight: normal;\n}\n\n@font-face {\n font-family: 'UnifixSP';\n src: url('/fonts/UnifixSP.woff2') format('woff2');\n font-weight: normal;\n font-style: normal;\n font-display: swap;\n}\n\n.logo-text-unifix {\n font-family: 'UnifixSP', sans-serif;\n letter-spacing: 0.01em;\n font-weight: normal;\n}\n@font-face {\n font-family: 'MotivationOfHearts';\n src: url('/fonts/MotivationOfHearts.woff2') format('woff2');\n font-weight: normal;\n font-style: normal;\n font-display: swap;\n}\n\n.logo-text-motivation {\n font-family: 'MotivationOfHearts', sans-serif;\n letter-spacing: 0.01em;\n font-weight: normal;\n}\n*, ::before, ::after {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n --tw-contain-size: ;\n --tw-contain-layout: ;\n --tw-contain-paint: ;\n --tw-contain-style: ;\n}\n::backdrop {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n --tw-contain-size: ;\n --tw-contain-layout: ;\n --tw-contain-paint: ;\n --tw-contain-style: ;\n}\n/*\n! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com\n*/\n/*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n*,\n::before,\n::after {\n box-sizing: border-box; /* 1 */\n border-width: 0; /* 2 */\n border-style: solid; /* 2 */\n border-color: #e5e7eb; /* 2 */\n}\n::before,\n::after {\n --tw-content: '';\n}\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user's configured `sans` font-family by default.\n5. Use the user's configured `sans` font-feature-settings by default.\n6. Use the user's configured `sans` font-variation-settings by default.\n7. Disable tap highlights on iOS\n*/\nhtml,\n:host {\n line-height: 1.5; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n -moz-tab-size: 4; /* 3 */\n -o-tab-size: 4;\n tab-size: 4; /* 3 */\n font-family: Inter, system-ui, sans-serif; /* 4 */\n font-feature-settings: normal; /* 5 */\n font-variation-settings: normal; /* 6 */\n -webkit-tap-highlight-color: transparent; /* 7 */\n}\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\nbody {\n margin: 0; /* 1 */\n line-height: inherit; /* 2 */\n}\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\nhr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n border-top-width: 1px; /* 3 */\n}\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\nabbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n}\n/*\nRemove the default font size and weight for headings.\n*/\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: inherit;\n font-weight: inherit;\n}\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\na {\n color: inherit;\n text-decoration: inherit;\n}\n/*\nAdd the correct font weight in Edge and Safari.\n*/\nb,\nstrong {\n font-weight: bolder;\n}\n/*\n1. Use the user's configured `mono` font-family by default.\n2. Use the user's configured `mono` font-feature-settings by default.\n3. Use the user's configured `mono` font-variation-settings by default.\n4. Correct the odd `em` font sizing in all browsers.\n*/\ncode,\nkbd,\nsamp,\npre {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace; /* 1 */\n font-feature-settings: normal; /* 2 */\n font-variation-settings: normal; /* 3 */\n font-size: 1em; /* 4 */\n}\n/*\nAdd the correct font size in all browsers.\n*/\nsmall {\n font-size: 80%;\n}\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\nsub {\n bottom: -0.25em;\n}\nsup {\n top: -0.5em;\n}\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\ntable {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n border-collapse: collapse; /* 3 */\n}\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-feature-settings: inherit; /* 1 */\n font-variation-settings: inherit; /* 1 */\n font-size: 100%; /* 1 */\n font-weight: inherit; /* 1 */\n line-height: inherit; /* 1 */\n letter-spacing: inherit; /* 1 */\n color: inherit; /* 1 */\n margin: 0; /* 2 */\n padding: 0; /* 3 */\n}\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\nbutton,\nselect {\n text-transform: none;\n}\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\nbutton,\ninput:where([type='button']),\ninput:where([type='reset']),\ninput:where([type='submit']) {\n -webkit-appearance: button; /* 1 */\n background-color: transparent; /* 2 */\n background-image: none; /* 2 */\n}\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n:-moz-focusring {\n outline: auto;\n}\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n:-moz-ui-invalid {\n box-shadow: none;\n}\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\nprogress {\n vertical-align: baseline;\n}\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n height: auto;\n}\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n[type='search'] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n/*\nAdd the correct display in Chrome and Safari.\n*/\nsummary {\n display: list-item;\n}\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n margin: 0;\n}\nfieldset {\n margin: 0;\n padding: 0;\n}\nlegend {\n padding: 0;\n}\nol,\nul,\nmenu {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n/*\nReset default styling for dialogs.\n*/\ndialog {\n padding: 0;\n}\n/*\nPrevent resizing textareas horizontally by default.\n*/\ntextarea {\n resize: vertical;\n}\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user's configured gray 400 color.\n*/\ninput::-moz-placeholder, textarea::-moz-placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\ninput::placeholder,\ntextarea::placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n/*\nSet the default cursor for buttons.\n*/\nbutton,\n[role=\"button\"] {\n cursor: pointer;\n}\n/*\nMake sure disabled buttons don't get the pointer cursor.\n*/\n:disabled {\n cursor: default;\n}\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n This can trigger a poorly considered lint error in some tools but is included by design.\n*/\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n display: block; /* 1 */\n vertical-align: middle; /* 2 */\n}\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\nimg,\nvideo {\n max-width: 100%;\n height: auto;\n}\n/* Make elements with the HTML hidden attribute stay hidden by default */\n[hidden]:where(:not([hidden=\"until-found\"])) {\n display: none;\n}\n.container {\n width: 100%;\n}\n@media (min-width: 640px) {\n\n .container {\n max-width: 640px;\n }\n}\n@media (min-width: 768px) {\n\n .container {\n max-width: 768px;\n }\n}\n@media (min-width: 1024px) {\n\n .container {\n max-width: 1024px;\n }\n}\n@media (min-width: 1280px) {\n\n .container {\n max-width: 1280px;\n }\n}\n@media (min-width: 1536px) {\n\n .container {\n max-width: 1536px;\n }\n}\n.pointer-events-none {\n pointer-events: none;\n}\n.visible {\n visibility: visible;\n}\n.static {\n position: static;\n}\n.fixed {\n position: fixed;\n}\n.absolute {\n position: absolute;\n}\n.relative {\n position: relative;\n}\n.sticky {\n position: sticky;\n}\n.-inset-1 {\n inset: -0.25rem;\n}\n.inset-0 {\n inset: 0px;\n}\n.-right-1\\.5 {\n right: -0.375rem;\n}\n.-top-1\\.5 {\n top: -0.375rem;\n}\n.-top-10 {\n top: -2.5rem;\n}\n.bottom-1 {\n bottom: 0.25rem;\n}\n.bottom-20 {\n bottom: 5rem;\n}\n.bottom-5 {\n bottom: 1.25rem;\n}\n.bottom-6 {\n bottom: 1.5rem;\n}\n.left-0 {\n left: 0px;\n}\n.left-0\\.5 {\n left: 0.125rem;\n}\n.left-1\\/2 {\n left: 50%;\n}\n.left-1\\/4 {\n left: 25%;\n}\n.left-3 {\n left: 0.75rem;\n}\n.left-4 {\n left: 1rem;\n}\n.right-0 {\n right: 0px;\n}\n.right-0\\.5 {\n right: 0.125rem;\n}\n.right-1 {\n right: 0.25rem;\n}\n.right-1\\/4 {\n right: 25%;\n}\n.right-2 {\n right: 0.5rem;\n}\n.right-3 {\n right: 0.75rem;\n}\n.right-4 {\n right: 1rem;\n}\n.right-5 {\n right: 1.25rem;\n}\n.right-6 {\n right: 1.5rem;\n}\n.top-0 {\n top: 0px;\n}\n.top-0\\.5 {\n top: 0.125rem;\n}\n.top-1 {\n top: 0.25rem;\n}\n.top-1\\/2 {\n top: 50%;\n}\n.top-2 {\n top: 0.5rem;\n}\n.top-20 {\n top: 5rem;\n}\n.top-24 {\n top: 6rem;\n}\n.top-3 {\n top: 0.75rem;\n}\n.top-4 {\n top: 1rem;\n}\n.top-6 {\n top: 1.5rem;\n}\n.top-full {\n top: 100%;\n}\n.z-10 {\n z-index: 10;\n}\n.z-40 {\n z-index: 40;\n}\n.z-50 {\n z-index: 50;\n}\n.z-\\[200\\] {\n z-index: 200;\n}\n.z-\\[60\\] {\n z-index: 60;\n}\n.col-span-2 {\n grid-column: span 2 / span 2;\n}\n.m-0\\.5 {\n margin: 0.125rem;\n}\n.mx-0\\.5 {\n margin-left: 0.125rem;\n margin-right: 0.125rem;\n}\n.mx-4 {\n margin-left: 1rem;\n margin-right: 1rem;\n}\n.mx-5 {\n margin-left: 1.25rem;\n margin-right: 1.25rem;\n}\n.mx-auto {\n margin-left: auto;\n margin-right: auto;\n}\n.my-1 {\n margin-top: 0.25rem;\n margin-bottom: 0.25rem;\n}\n.-mb-px {\n margin-bottom: -1px;\n}\n.-mt-1 {\n margin-top: -0.25rem;\n}\n.-mt-px {\n margin-top: -1px;\n}\n.mb-0 {\n margin-bottom: 0px;\n}\n.mb-0\\.5 {\n margin-bottom: 0.125rem;\n}\n.mb-1 {\n margin-bottom: 0.25rem;\n}\n.mb-1\\.5 {\n margin-bottom: 0.375rem;\n}\n.mb-10 {\n margin-bottom: 2.5rem;\n}\n.mb-12 {\n margin-bottom: 3rem;\n}\n.mb-14 {\n margin-bottom: 3.5rem;\n}\n.mb-2 {\n margin-bottom: 0.5rem;\n}\n.mb-3 {\n margin-bottom: 0.75rem;\n}\n.mb-4 {\n margin-bottom: 1rem;\n}\n.mb-5 {\n margin-bottom: 1.25rem;\n}\n.mb-6 {\n margin-bottom: 1.5rem;\n}\n.mb-8 {\n margin-bottom: 2rem;\n}\n.ml-1 {\n margin-left: 0.25rem;\n}\n.ml-1\\.5 {\n margin-left: 0.375rem;\n}\n.ml-2 {\n margin-left: 0.5rem;\n}\n.ml-3 {\n margin-left: 0.75rem;\n}\n.ml-4 {\n margin-left: 1rem;\n}\n.ml-6 {\n margin-left: 1.5rem;\n}\n.ml-auto {\n margin-left: auto;\n}\n.mr-0\\.5 {\n margin-right: 0.125rem;\n}\n.mr-1 {\n margin-right: 0.25rem;\n}\n.mr-2 {\n margin-right: 0.5rem;\n}\n.mt-0\\.5 {\n margin-top: 0.125rem;\n}\n.mt-1 {\n margin-top: 0.25rem;\n}\n.mt-1\\.5 {\n margin-top: 0.375rem;\n}\n.mt-10 {\n margin-top: 2.5rem;\n}\n.mt-16 {\n margin-top: 4rem;\n}\n.mt-2 {\n margin-top: 0.5rem;\n}\n.mt-3 {\n margin-top: 0.75rem;\n}\n.mt-4 {\n margin-top: 1rem;\n}\n.mt-5 {\n margin-top: 1.25rem;\n}\n.mt-6 {\n margin-top: 1.5rem;\n}\n.mt-8 {\n margin-top: 2rem;\n}\n.mt-auto {\n margin-top: auto;\n}\n.line-clamp-1 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 1;\n}\n.line-clamp-2 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n}\n.block {\n display: block;\n}\n.inline-block {\n display: inline-block;\n}\n.inline {\n display: inline;\n}\n.flex {\n display: flex;\n}\n.inline-flex {\n display: inline-flex;\n}\n.table {\n display: table;\n}\n.grid {\n display: grid;\n}\n.hidden {\n display: none;\n}\n.aspect-square {\n aspect-ratio: 1 / 1;\n}\n.h-0 {\n height: 0px;\n}\n.h-0\\.5 {\n height: 0.125rem;\n}\n.h-1 {\n height: 0.25rem;\n}\n.h-1\\.5 {\n height: 0.375rem;\n}\n.h-10 {\n height: 2.5rem;\n}\n.h-12 {\n height: 3rem;\n}\n.h-14 {\n height: 3.5rem;\n}\n.h-16 {\n height: 4rem;\n}\n.h-2 {\n height: 0.5rem;\n}\n.h-2\\.5 {\n height: 0.625rem;\n}\n.h-20 {\n height: 5rem;\n}\n.h-24 {\n height: 6rem;\n}\n.h-28 {\n height: 7rem;\n}\n.h-3 {\n height: 0.75rem;\n}\n.h-3\\.5 {\n height: 0.875rem;\n}\n.h-4 {\n height: 1rem;\n}\n.h-40 {\n height: 10rem;\n}\n.h-5 {\n height: 1.25rem;\n}\n.h-6 {\n height: 1.5rem;\n}\n.h-7 {\n height: 1.75rem;\n}\n.h-8 {\n height: 2rem;\n}\n.h-9 {\n height: 2.25rem;\n}\n.h-\\[400px\\] {\n height: 400px;\n}\n.h-\\[500px\\] {\n height: 500px;\n}\n.h-\\[calc\\(100vh-80px\\)\\] {\n height: calc(100vh - 80px);\n}\n.h-full {\n height: 100%;\n}\n.h-px {\n height: 1px;\n}\n.max-h-32 {\n max-height: 8rem;\n}\n.max-h-40 {\n max-height: 10rem;\n}\n.max-h-64 {\n max-height: 16rem;\n}\n.max-h-72 {\n max-height: 18rem;\n}\n.max-h-80 {\n max-height: 20rem;\n}\n.max-h-96 {\n max-height: 24rem;\n}\n.max-h-\\[60vh\\] {\n max-height: 60vh;\n}\n.max-h-\\[80vh\\] {\n max-height: 80vh;\n}\n.max-h-\\[85vh\\] {\n max-height: 85vh;\n}\n.max-h-\\[90vh\\] {\n max-height: 90vh;\n}\n.min-h-0 {\n min-height: 0px;\n}\n.min-h-\\[24px\\] {\n min-height: 24px;\n}\n.min-h-\\[28px\\] {\n min-height: 28px;\n}\n.min-h-\\[40px\\] {\n min-height: 40px;\n}\n.min-h-screen {\n min-height: 100vh;\n}\n.w-0 {\n width: 0px;\n}\n.w-1 {\n width: 0.25rem;\n}\n.w-1\\.5 {\n width: 0.375rem;\n}\n.w-1\\/2 {\n width: 50%;\n}\n.w-10 {\n width: 2.5rem;\n}\n.w-11 {\n width: 2.75rem;\n}\n.w-12 {\n width: 3rem;\n}\n.w-14 {\n width: 3.5rem;\n}\n.w-16 {\n width: 4rem;\n}\n.w-2 {\n width: 0.5rem;\n}\n.w-2\\.5 {\n width: 0.625rem;\n}\n.w-20 {\n width: 5rem;\n}\n.w-24 {\n width: 6rem;\n}\n.w-28 {\n width: 7rem;\n}\n.w-3 {\n width: 0.75rem;\n}\n.w-3\\.5 {\n width: 0.875rem;\n}\n.w-4 {\n width: 1rem;\n}\n.w-40 {\n width: 10rem;\n}\n.w-44 {\n width: 11rem;\n}\n.w-5 {\n width: 1.25rem;\n}\n.w-52 {\n width: 13rem;\n}\n.w-56 {\n width: 14rem;\n}\n.w-6 {\n width: 1.5rem;\n}\n.w-7 {\n width: 1.75rem;\n}\n.w-72 {\n width: 18rem;\n}\n.w-8 {\n width: 2rem;\n}\n.w-9 {\n width: 2.25rem;\n}\n.w-\\[400px\\] {\n width: 400px;\n}\n.w-\\[500px\\] {\n width: 500px;\n}\n.w-fit {\n width: -moz-fit-content;\n width: fit-content;\n}\n.w-full {\n width: 100%;\n}\n.w-px {\n width: 1px;\n}\n.min-w-0 {\n min-width: 0px;\n}\n.min-w-32 {\n min-width: 8rem;\n}\n.min-w-72 {\n min-width: 18rem;\n}\n.min-w-\\[140px\\] {\n min-width: 140px;\n}\n.min-w-\\[16px\\] {\n min-width: 16px;\n}\n.min-w-\\[180px\\] {\n min-width: 180px;\n}\n.min-w-\\[200px\\] {\n min-width: 200px;\n}\n.min-w-\\[220px\\] {\n min-width: 220px;\n}\n.min-w-\\[240px\\] {\n min-width: 240px;\n}\n.min-w-fit {\n min-width: -moz-fit-content;\n min-width: fit-content;\n}\n.max-w-2xl {\n max-width: 42rem;\n}\n.max-w-3xl {\n max-width: 48rem;\n}\n.max-w-4xl {\n max-width: 56rem;\n}\n.max-w-5xl {\n max-width: 64rem;\n}\n.max-w-6xl {\n max-width: 72rem;\n}\n.max-w-7xl {\n max-width: 80rem;\n}\n.max-w-\\[100px\\] {\n max-width: 100px;\n}\n.max-w-\\[70\\%\\] {\n max-width: 70%;\n}\n.max-w-\\[90px\\] {\n max-width: 90px;\n}\n.max-w-full {\n max-width: 100%;\n}\n.max-w-lg {\n max-width: 32rem;\n}\n.max-w-md {\n max-width: 28rem;\n}\n.max-w-sm {\n max-width: 24rem;\n}\n.max-w-xl {\n max-width: 36rem;\n}\n.max-w-xs {\n max-width: 20rem;\n}\n.flex-1 {\n flex: 1 1 0%;\n}\n.flex-\\[2\\] {\n flex: 2;\n}\n.flex-shrink-0 {\n flex-shrink: 0;\n}\n.shrink-0 {\n flex-shrink: 0;\n}\n.grow {\n flex-grow: 1;\n}\n.-translate-x-1\\/2 {\n --tw-translate-x: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.-translate-x-12 {\n --tw-translate-x: -3rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.-translate-y-1\\/2 {\n --tw-translate-y: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-x-0 {\n --tw-translate-x: 0px;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-x-1 {\n --tw-translate-x: 0.25rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-x-12 {\n --tw-translate-x: 3rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-x-3 {\n --tw-translate-x: 0.75rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-x-5 {\n --tw-translate-x: 1.25rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-x-6 {\n --tw-translate-x: 1.5rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-y-0 {\n --tw-translate-y: 0px;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-y-4 {\n --tw-translate-y: 1rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-180 {\n --tw-rotate: 180deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-45 {\n --tw-rotate: 45deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-90 {\n --tw-rotate: 90deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.scale-105 {\n --tw-scale-x: 1.05;\n --tw-scale-y: 1.05;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.transform {\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n@keyframes pulse {\n\n 50% {\n opacity: .5;\n }\n}\n.animate-pulse {\n animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n}\n@keyframes spin {\n\n to {\n transform: rotate(360deg);\n }\n}\n.animate-spin {\n animation: spin 1s linear infinite;\n}\n.cursor-default {\n cursor: default;\n}\n.cursor-not-allowed {\n cursor: not-allowed;\n}\n.cursor-pointer {\n cursor: pointer;\n}\n.select-none {\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n.select-all {\n -webkit-user-select: all;\n -moz-user-select: all;\n user-select: all;\n}\n.resize-none {\n resize: none;\n}\n.resize-y {\n resize: vertical;\n}\n.snap-x {\n scroll-snap-type: x var(--tw-scroll-snap-strictness);\n}\n.snap-mandatory {\n --tw-scroll-snap-strictness: mandatory;\n}\n.snap-start {\n scroll-snap-align: start;\n}\n.grid-cols-1 {\n grid-template-columns: repeat(1, minmax(0, 1fr));\n}\n.grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n.grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n}\n.grid-cols-4 {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n}\n.grid-cols-7 {\n grid-template-columns: repeat(7, minmax(0, 1fr));\n}\n.flex-row-reverse {\n flex-direction: row-reverse;\n}\n.flex-col {\n flex-direction: column;\n}\n.flex-wrap {\n flex-wrap: wrap;\n}\n.items-start {\n align-items: flex-start;\n}\n.items-end {\n align-items: flex-end;\n}\n.items-center {\n align-items: center;\n}\n.justify-end {\n justify-content: flex-end;\n}\n.justify-center {\n justify-content: center;\n}\n.justify-between {\n justify-content: space-between;\n}\n.gap-0 {\n gap: 0px;\n}\n.gap-0\\.5 {\n gap: 0.125rem;\n}\n.gap-1 {\n gap: 0.25rem;\n}\n.gap-1\\.5 {\n gap: 0.375rem;\n}\n.gap-10 {\n gap: 2.5rem;\n}\n.gap-2 {\n gap: 0.5rem;\n}\n.gap-2\\.5 {\n gap: 0.625rem;\n}\n.gap-3 {\n gap: 0.75rem;\n}\n.gap-4 {\n gap: 1rem;\n}\n.gap-5 {\n gap: 1.25rem;\n}\n.gap-6 {\n gap: 1.5rem;\n}\n.gap-8 {\n gap: 2rem;\n}\n.gap-y-3 {\n row-gap: 0.75rem;\n}\n.space-y-0\\.5 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.125rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.125rem * var(--tw-space-y-reverse));\n}\n.space-y-1 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.25rem * var(--tw-space-y-reverse));\n}\n.space-y-1\\.5 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.375rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.375rem * var(--tw-space-y-reverse));\n}\n.space-y-16 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(4rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(4rem * var(--tw-space-y-reverse));\n}\n.space-y-2 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.5rem * var(--tw-space-y-reverse));\n}\n.space-y-3 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.75rem * var(--tw-space-y-reverse));\n}\n.space-y-4 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1rem * var(--tw-space-y-reverse));\n}\n.space-y-5 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1.25rem * var(--tw-space-y-reverse));\n}\n.space-y-6 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1.5rem * var(--tw-space-y-reverse));\n}\n.space-y-8 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(2rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(2rem * var(--tw-space-y-reverse));\n}\n.divide-y > :not([hidden]) ~ :not([hidden]) {\n --tw-divide-y-reverse: 0;\n border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));\n border-bottom-width: calc(1px * var(--tw-divide-y-reverse));\n}\n.divide-gray-100 > :not([hidden]) ~ :not([hidden]) {\n --tw-divide-opacity: 1;\n border-color: rgb(243 244 246 / var(--tw-divide-opacity, 1));\n}\n.self-end {\n align-self: flex-end;\n}\n.self-center {\n align-self: center;\n}\n.overflow-hidden {\n overflow: hidden;\n}\n.overflow-x-auto {\n overflow-x: auto;\n}\n.overflow-y-auto {\n overflow-y: auto;\n}\n.truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.whitespace-nowrap {\n white-space: nowrap;\n}\n.whitespace-pre-wrap {\n white-space: pre-wrap;\n}\n.rounded {\n border-radius: 0.25rem;\n}\n.rounded-2xl {\n border-radius: 1rem;\n}\n.rounded-\\[2\\.5rem\\] {\n border-radius: 2.5rem;\n}\n.rounded-full {\n border-radius: 9999px;\n}\n.rounded-lg {\n border-radius: 0.5rem;\n}\n.rounded-md {\n border-radius: 0.375rem;\n}\n.rounded-xl {\n border-radius: 0.75rem;\n}\n.rounded-b-xl {\n border-bottom-right-radius: 0.75rem;\n border-bottom-left-radius: 0.75rem;\n}\n.rounded-t-lg {\n border-top-left-radius: 0.5rem;\n border-top-right-radius: 0.5rem;\n}\n.rounded-tl-sm {\n border-top-left-radius: 0.125rem;\n}\n.rounded-tr-sm {\n border-top-right-radius: 0.125rem;\n}\n.border {\n border-width: 1px;\n}\n.border-0 {\n border-width: 0px;\n}\n.border-2 {\n border-width: 2px;\n}\n.border-y {\n border-top-width: 1px;\n border-bottom-width: 1px;\n}\n.border-b {\n border-bottom-width: 1px;\n}\n.border-b-2 {\n border-bottom-width: 2px;\n}\n.border-l-2 {\n border-left-width: 2px;\n}\n.border-r {\n border-right-width: 1px;\n}\n.border-r-2 {\n border-right-width: 2px;\n}\n.border-t {\n border-top-width: 1px;\n}\n.border-t-0 {\n border-top-width: 0px;\n}\n.border-t-4 {\n border-top-width: 4px;\n}\n.border-dashed {\n border-style: dashed;\n}\n.border-amber-100 {\n --tw-border-opacity: 1;\n border-color: rgb(254 243 199 / var(--tw-border-opacity, 1));\n}\n.border-amber-200 {\n --tw-border-opacity: 1;\n border-color: rgb(253 230 138 / var(--tw-border-opacity, 1));\n}\n.border-amber-300 {\n --tw-border-opacity: 1;\n border-color: rgb(252 211 77 / var(--tw-border-opacity, 1));\n}\n.border-amber-500 {\n --tw-border-opacity: 1;\n border-color: rgb(245 158 11 / var(--tw-border-opacity, 1));\n}\n.border-blue-100 {\n --tw-border-opacity: 1;\n border-color: rgb(219 234 254 / var(--tw-border-opacity, 1));\n}\n.border-blue-200 {\n --tw-border-opacity: 1;\n border-color: rgb(191 219 254 / var(--tw-border-opacity, 1));\n}\n.border-blue-300 {\n --tw-border-opacity: 1;\n border-color: rgb(147 197 253 / var(--tw-border-opacity, 1));\n}\n.border-blue-400 {\n --tw-border-opacity: 1;\n border-color: rgb(96 165 250 / var(--tw-border-opacity, 1));\n}\n.border-blue-50 {\n --tw-border-opacity: 1;\n border-color: rgb(239 246 255 / var(--tw-border-opacity, 1));\n}\n.border-blue-500 {\n --tw-border-opacity: 1;\n border-color: rgb(59 130 246 / var(--tw-border-opacity, 1));\n}\n.border-blue-500\\/10 {\n border-color: rgb(59 130 246 / 0.1);\n}\n.border-blue-500\\/20 {\n border-color: rgb(59 130 246 / 0.2);\n}\n.border-blue-600 {\n --tw-border-opacity: 1;\n border-color: rgb(37 99 235 / var(--tw-border-opacity, 1));\n}\n.border-emerald-100 {\n --tw-border-opacity: 1;\n border-color: rgb(209 250 229 / var(--tw-border-opacity, 1));\n}\n.border-emerald-300 {\n --tw-border-opacity: 1;\n border-color: rgb(110 231 183 / var(--tw-border-opacity, 1));\n}\n.border-emerald-400 {\n --tw-border-opacity: 1;\n border-color: rgb(52 211 153 / var(--tw-border-opacity, 1));\n}\n.border-emerald-500 {\n --tw-border-opacity: 1;\n border-color: rgb(16 185 129 / var(--tw-border-opacity, 1));\n}\n.border-emerald-500\\/20 {\n border-color: rgb(16 185 129 / 0.2);\n}\n.border-gray-100 {\n --tw-border-opacity: 1;\n border-color: rgb(243 244 246 / var(--tw-border-opacity, 1));\n}\n.border-gray-200 {\n --tw-border-opacity: 1;\n border-color: rgb(229 231 235 / var(--tw-border-opacity, 1));\n}\n.border-gray-300 {\n --tw-border-opacity: 1;\n border-color: rgb(209 213 219 / var(--tw-border-opacity, 1));\n}\n.border-gray-50 {\n --tw-border-opacity: 1;\n border-color: rgb(249 250 251 / var(--tw-border-opacity, 1));\n}\n.border-green-100 {\n --tw-border-opacity: 1;\n border-color: rgb(220 252 231 / var(--tw-border-opacity, 1));\n}\n.border-green-200 {\n --tw-border-opacity: 1;\n border-color: rgb(187 247 208 / var(--tw-border-opacity, 1));\n}\n.border-indigo-100 {\n --tw-border-opacity: 1;\n border-color: rgb(224 231 255 / var(--tw-border-opacity, 1));\n}\n.border-orange-100 {\n --tw-border-opacity: 1;\n border-color: rgb(255 237 213 / var(--tw-border-opacity, 1));\n}\n.border-orange-200 {\n --tw-border-opacity: 1;\n border-color: rgb(254 215 170 / var(--tw-border-opacity, 1));\n}\n.border-pink-200 {\n --tw-border-opacity: 1;\n border-color: rgb(251 207 232 / var(--tw-border-opacity, 1));\n}\n.border-purple-100 {\n --tw-border-opacity: 1;\n border-color: rgb(243 232 255 / var(--tw-border-opacity, 1));\n}\n.border-purple-200 {\n --tw-border-opacity: 1;\n border-color: rgb(233 213 255 / var(--tw-border-opacity, 1));\n}\n.border-purple-500\\/10 {\n border-color: rgb(168 85 247 / 0.1);\n}\n.border-red-100 {\n --tw-border-opacity: 1;\n border-color: rgb(254 226 226 / var(--tw-border-opacity, 1));\n}\n.border-red-200 {\n --tw-border-opacity: 1;\n border-color: rgb(254 202 202 / var(--tw-border-opacity, 1));\n}\n.border-red-300 {\n --tw-border-opacity: 1;\n border-color: rgb(252 165 165 / var(--tw-border-opacity, 1));\n}\n.border-red-400 {\n --tw-border-opacity: 1;\n border-color: rgb(248 113 113 / var(--tw-border-opacity, 1));\n}\n.border-rose-100 {\n --tw-border-opacity: 1;\n border-color: rgb(255 228 230 / var(--tw-border-opacity, 1));\n}\n.border-rose-300 {\n --tw-border-opacity: 1;\n border-color: rgb(253 164 175 / var(--tw-border-opacity, 1));\n}\n.border-rose-500 {\n --tw-border-opacity: 1;\n border-color: rgb(244 63 94 / var(--tw-border-opacity, 1));\n}\n.border-sky-100 {\n --tw-border-opacity: 1;\n border-color: rgb(224 242 254 / var(--tw-border-opacity, 1));\n}\n.border-slate-100 {\n --tw-border-opacity: 1;\n border-color: rgb(241 245 249 / var(--tw-border-opacity, 1));\n}\n.border-slate-200 {\n --tw-border-opacity: 1;\n border-color: rgb(226 232 240 / var(--tw-border-opacity, 1));\n}\n.border-teal-100 {\n --tw-border-opacity: 1;\n border-color: rgb(204 251 241 / var(--tw-border-opacity, 1));\n}\n.border-transparent {\n border-color: transparent;\n}\n.border-violet-100 {\n --tw-border-opacity: 1;\n border-color: rgb(237 233 254 / var(--tw-border-opacity, 1));\n}\n.border-white {\n --tw-border-opacity: 1;\n border-color: rgb(255 255 255 / var(--tw-border-opacity, 1));\n}\n.border-white\\/10 {\n border-color: rgb(255 255 255 / 0.1);\n}\n.border-white\\/20 {\n border-color: rgb(255 255 255 / 0.2);\n}\n.border-white\\/30 {\n border-color: rgb(255 255 255 / 0.3);\n}\n.border-white\\/40 {\n border-color: rgb(255 255 255 / 0.4);\n}\n.border-yellow-200 {\n --tw-border-opacity: 1;\n border-color: rgb(254 240 138 / var(--tw-border-opacity, 1));\n}\n.border-l-blue-500 {\n --tw-border-opacity: 1;\n border-left-color: rgb(59 130 246 / var(--tw-border-opacity, 1));\n}\n.border-t-blue-500 {\n --tw-border-opacity: 1;\n border-top-color: rgb(59 130 246 / var(--tw-border-opacity, 1));\n}\n.border-t-transparent {\n border-top-color: transparent;\n}\n.border-t-white {\n --tw-border-opacity: 1;\n border-top-color: rgb(255 255 255 / var(--tw-border-opacity, 1));\n}\n.bg-\\[\\#003087\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(0 48 135 / var(--tw-bg-opacity, 1));\n}\n.bg-amber-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 243 199 / var(--tw-bg-opacity, 1));\n}\n.bg-amber-400 {\n --tw-bg-opacity: 1;\n background-color: rgb(251 191 36 / var(--tw-bg-opacity, 1));\n}\n.bg-amber-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(255 251 235 / var(--tw-bg-opacity, 1));\n}\n.bg-amber-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(245 158 11 / var(--tw-bg-opacity, 1));\n}\n.bg-amber-500\\/10 {\n background-color: rgb(245 158 11 / 0.1);\n}\n.bg-black\\/0 {\n background-color: rgb(0 0 0 / 0);\n}\n.bg-black\\/40 {\n background-color: rgb(0 0 0 / 0.4);\n}\n.bg-black\\/50 {\n background-color: rgb(0 0 0 / 0.5);\n}\n.bg-black\\/60 {\n background-color: rgb(0 0 0 / 0.6);\n}\n.bg-black\\/70 {\n background-color: rgb(0 0 0 / 0.7);\n}\n.bg-black\\/80 {\n background-color: rgb(0 0 0 / 0.8);\n}\n.bg-black\\/85 {\n background-color: rgb(0 0 0 / 0.85);\n}\n.bg-black\\/90 {\n background-color: rgb(0 0 0 / 0.9);\n}\n.bg-blue-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(219 234 254 / var(--tw-bg-opacity, 1));\n}\n.bg-blue-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(239 246 255 / var(--tw-bg-opacity, 1));\n}\n.bg-blue-50\\/30 {\n background-color: rgb(239 246 255 / 0.3);\n}\n.bg-blue-50\\/60 {\n background-color: rgb(239 246 255 / 0.6);\n}\n.bg-blue-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(59 130 246 / var(--tw-bg-opacity, 1));\n}\n.bg-blue-500\\/10 {\n background-color: rgb(59 130 246 / 0.1);\n}\n.bg-blue-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(37 99 235 / var(--tw-bg-opacity, 1));\n}\n.bg-blue-600\\/10 {\n background-color: rgb(37 99 235 / 0.1);\n}\n.bg-emerald-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(209 250 229 / var(--tw-bg-opacity, 1));\n}\n.bg-emerald-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(167 243 208 / var(--tw-bg-opacity, 1));\n}\n.bg-emerald-400 {\n --tw-bg-opacity: 1;\n background-color: rgb(52 211 153 / var(--tw-bg-opacity, 1));\n}\n.bg-emerald-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(236 253 245 / var(--tw-bg-opacity, 1));\n}\n.bg-emerald-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(16 185 129 / var(--tw-bg-opacity, 1));\n}\n.bg-emerald-500\\/10 {\n background-color: rgb(16 185 129 / 0.1);\n}\n.bg-emerald-500\\/20 {\n background-color: rgb(16 185 129 / 0.2);\n}\n.bg-emerald-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(5 150 105 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(209 213 219 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-400 {\n --tw-bg-opacity: 1;\n background-color: rgb(156 163 175 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(75 85 99 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-900 {\n --tw-bg-opacity: 1;\n background-color: rgb(17 24 39 / var(--tw-bg-opacity, 1));\n}\n.bg-green-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(220 252 231 / var(--tw-bg-opacity, 1));\n}\n.bg-green-400 {\n --tw-bg-opacity: 1;\n background-color: rgb(74 222 128 / var(--tw-bg-opacity, 1));\n}\n.bg-green-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(240 253 244 / var(--tw-bg-opacity, 1));\n}\n.bg-green-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(34 197 94 / var(--tw-bg-opacity, 1));\n}\n.bg-green-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(22 163 74 / var(--tw-bg-opacity, 1));\n}\n.bg-indigo-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(224 231 255 / var(--tw-bg-opacity, 1));\n}\n.bg-indigo-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(238 242 255 / var(--tw-bg-opacity, 1));\n}\n.bg-indigo-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(79 70 229 / var(--tw-bg-opacity, 1));\n}\n.bg-orange-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(255 237 213 / var(--tw-bg-opacity, 1));\n}\n.bg-orange-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(255 247 237 / var(--tw-bg-opacity, 1));\n}\n.bg-orange-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(249 115 22 / var(--tw-bg-opacity, 1));\n}\n.bg-pink-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(253 242 248 / var(--tw-bg-opacity, 1));\n}\n.bg-purple-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(243 232 255 / var(--tw-bg-opacity, 1));\n}\n.bg-purple-400 {\n --tw-bg-opacity: 1;\n background-color: rgb(192 132 252 / var(--tw-bg-opacity, 1));\n}\n.bg-purple-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(250 245 255 / var(--tw-bg-opacity, 1));\n}\n.bg-purple-500\\/10 {\n background-color: rgb(168 85 247 / 0.1);\n}\n.bg-purple-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(147 51 234 / var(--tw-bg-opacity, 1));\n}\n.bg-red-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 226 226 / var(--tw-bg-opacity, 1));\n}\n.bg-red-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 202 202 / var(--tw-bg-opacity, 1));\n}\n.bg-red-400 {\n --tw-bg-opacity: 1;\n background-color: rgb(248 113 113 / var(--tw-bg-opacity, 1));\n}\n.bg-red-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 242 242 / var(--tw-bg-opacity, 1));\n}\n.bg-red-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(239 68 68 / var(--tw-bg-opacity, 1));\n}\n.bg-rose-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(255 241 242 / var(--tw-bg-opacity, 1));\n}\n.bg-rose-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(225 29 72 / var(--tw-bg-opacity, 1));\n}\n.bg-sky-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(240 249 255 / var(--tw-bg-opacity, 1));\n}\n.bg-sky-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(14 165 233 / var(--tw-bg-opacity, 1));\n}\n.bg-slate-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(241 245 249 / var(--tw-bg-opacity, 1));\n}\n.bg-slate-900 {\n --tw-bg-opacity: 1;\n background-color: rgb(15 23 42 / var(--tw-bg-opacity, 1));\n}\n.bg-teal-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(240 253 250 / var(--tw-bg-opacity, 1));\n}\n.bg-violet-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(245 243 255 / var(--tw-bg-opacity, 1));\n}\n.bg-violet-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(139 92 246 / var(--tw-bg-opacity, 1));\n}\n.bg-white {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));\n}\n.bg-white\\/10 {\n background-color: rgb(255 255 255 / 0.1);\n}\n.bg-white\\/15 {\n background-color: rgb(255 255 255 / 0.15);\n}\n.bg-white\\/20 {\n background-color: rgb(255 255 255 / 0.2);\n}\n.bg-white\\/60 {\n background-color: rgb(255 255 255 / 0.6);\n}\n.bg-white\\/80 {\n background-color: rgb(255 255 255 / 0.8);\n}\n.bg-white\\/90 {\n background-color: rgb(255 255 255 / 0.9);\n}\n.bg-yellow-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 249 195 / var(--tw-bg-opacity, 1));\n}\n.bg-yellow-400 {\n --tw-bg-opacity: 1;\n background-color: rgb(250 204 21 / var(--tw-bg-opacity, 1));\n}\n.bg-yellow-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 252 232 / var(--tw-bg-opacity, 1));\n}\n.bg-yellow-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(234 179 8 / var(--tw-bg-opacity, 1));\n}\n.bg-gradient-to-br {\n background-image: linear-gradient(to bottom right, var(--tw-gradient-stops));\n}\n.bg-gradient-to-r {\n background-image: linear-gradient(to right, var(--tw-gradient-stops));\n}\n.bg-gradient-to-t {\n background-image: linear-gradient(to top, var(--tw-gradient-stops));\n}\n.from-amber-400 {\n --tw-gradient-from: #fbbf24 var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(251 191 36 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.from-amber-50 {\n --tw-gradient-from: #fffbeb var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(255 251 235 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.from-amber-500 {\n --tw-gradient-from: #f59e0b var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(245 158 11 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.from-black\\/60 {\n --tw-gradient-from: rgb(0 0 0 / 0.6) var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.from-blue-500 {\n --tw-gradient-from: #3b82f6 var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.from-blue-700 {\n --tw-gradient-from: #1d4ed8 var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(29 78 216 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.from-indigo-100 {\n --tw-gradient-from: #e0e7ff var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(224 231 255 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.from-orange-400 {\n --tw-gradient-from: #fb923c var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(251 146 60 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.via-transparent {\n --tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), transparent var(--tw-gradient-via-position), var(--tw-gradient-to);\n}\n.via-yellow-400 {\n --tw-gradient-to: rgb(250 204 21 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), #facc15 var(--tw-gradient-via-position), var(--tw-gradient-to);\n}\n.to-amber-400 {\n --tw-gradient-to: #fbbf24 var(--tw-gradient-to-position);\n}\n.to-amber-50 {\n --tw-gradient-to: #fffbeb var(--tw-gradient-to-position);\n}\n.to-blue-500 {\n --tw-gradient-to: #3b82f6 var(--tw-gradient-to-position);\n}\n.to-orange-400 {\n --tw-gradient-to: #fb923c var(--tw-gradient-to-position);\n}\n.to-purple-500 {\n --tw-gradient-to: #a855f7 var(--tw-gradient-to-position);\n}\n.to-transparent {\n --tw-gradient-to: transparent var(--tw-gradient-to-position);\n}\n.to-yellow-50 {\n --tw-gradient-to: #fefce8 var(--tw-gradient-to-position);\n}\n.to-yellow-500 {\n --tw-gradient-to: #eab308 var(--tw-gradient-to-position);\n}\n.bg-clip-text {\n -webkit-background-clip: text;\n background-clip: text;\n}\n.fill-gray-900 {\n fill: #111827;\n}\n.object-contain {\n -o-object-fit: contain;\n object-fit: contain;\n}\n.object-cover {\n -o-object-fit: cover;\n object-fit: cover;\n}\n.p-0 {\n padding: 0px;\n}\n.p-1 {\n padding: 0.25rem;\n}\n.p-10 {\n padding: 2.5rem;\n}\n.p-2 {\n padding: 0.5rem;\n}\n.p-2\\.5 {\n padding: 0.625rem;\n}\n.p-3 {\n padding: 0.75rem;\n}\n.p-4 {\n padding: 1rem;\n}\n.p-5 {\n padding: 1.25rem;\n}\n.p-6 {\n padding: 1.5rem;\n}\n.p-8 {\n padding: 2rem;\n}\n.px-0\\.5 {\n padding-left: 0.125rem;\n padding-right: 0.125rem;\n}\n.px-1 {\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n}\n.px-1\\.5 {\n padding-left: 0.375rem;\n padding-right: 0.375rem;\n}\n.px-2 {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n.px-2\\.5 {\n padding-left: 0.625rem;\n padding-right: 0.625rem;\n}\n.px-3 {\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n}\n.px-3\\.5 {\n padding-left: 0.875rem;\n padding-right: 0.875rem;\n}\n.px-4 {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n.px-5 {\n padding-left: 1.25rem;\n padding-right: 1.25rem;\n}\n.px-6 {\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n}\n.px-7 {\n padding-left: 1.75rem;\n padding-right: 1.75rem;\n}\n.px-8 {\n padding-left: 2rem;\n padding-right: 2rem;\n}\n.py-0\\.5 {\n padding-top: 0.125rem;\n padding-bottom: 0.125rem;\n}\n.py-1 {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n}\n.py-1\\.5 {\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n}\n.py-10 {\n padding-top: 2.5rem;\n padding-bottom: 2.5rem;\n}\n.py-12 {\n padding-top: 3rem;\n padding-bottom: 3rem;\n}\n.py-14 {\n padding-top: 3.5rem;\n padding-bottom: 3.5rem;\n}\n.py-16 {\n padding-top: 4rem;\n padding-bottom: 4rem;\n}\n.py-2 {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n.py-2\\.5 {\n padding-top: 0.625rem;\n padding-bottom: 0.625rem;\n}\n.py-20 {\n padding-top: 5rem;\n padding-bottom: 5rem;\n}\n.py-24 {\n padding-top: 6rem;\n padding-bottom: 6rem;\n}\n.py-3 {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n}\n.py-3\\.5 {\n padding-top: 0.875rem;\n padding-bottom: 0.875rem;\n}\n.py-4 {\n padding-top: 1rem;\n padding-bottom: 1rem;\n}\n.py-5 {\n padding-top: 1.25rem;\n padding-bottom: 1.25rem;\n}\n.py-6 {\n padding-top: 1.5rem;\n padding-bottom: 1.5rem;\n}\n.py-8 {\n padding-top: 2rem;\n padding-bottom: 2rem;\n}\n.pb-0\\.5 {\n padding-bottom: 0.125rem;\n}\n.pb-1 {\n padding-bottom: 0.25rem;\n}\n.pb-2 {\n padding-bottom: 0.5rem;\n}\n.pb-20 {\n padding-bottom: 5rem;\n}\n.pb-4 {\n padding-bottom: 1rem;\n}\n.pb-5 {\n padding-bottom: 1.25rem;\n}\n.pl-10 {\n padding-left: 2.5rem;\n}\n.pl-12 {\n padding-left: 3rem;\n}\n.pl-5 {\n padding-left: 1.25rem;\n}\n.pl-7 {\n padding-left: 1.75rem;\n}\n.pl-8 {\n padding-left: 2rem;\n}\n.pr-14 {\n padding-right: 3.5rem;\n}\n.pr-2 {\n padding-right: 0.5rem;\n}\n.pr-24 {\n padding-right: 6rem;\n}\n.pr-3 {\n padding-right: 0.75rem;\n}\n.pr-4 {\n padding-right: 1rem;\n}\n.pt-1 {\n padding-top: 0.25rem;\n}\n.pt-10 {\n padding-top: 2.5rem;\n}\n.pt-16 {\n padding-top: 4rem;\n}\n.pt-2 {\n padding-top: 0.5rem;\n}\n.pt-3 {\n padding-top: 0.75rem;\n}\n.pt-4 {\n padding-top: 1rem;\n}\n.pt-6 {\n padding-top: 1.5rem;\n}\n.pt-8 {\n padding-top: 2rem;\n}\n.text-left {\n text-align: left;\n}\n.text-center {\n text-align: center;\n}\n.text-right {\n text-align: right;\n}\n.align-top {\n vertical-align: top;\n}\n.font-mono {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n.text-2xl {\n font-size: 1.5rem;\n line-height: 2rem;\n}\n.text-3xl {\n font-size: 1.875rem;\n line-height: 2.25rem;\n}\n.text-4xl {\n font-size: 2.25rem;\n line-height: 2.5rem;\n}\n.text-5xl {\n font-size: 3rem;\n line-height: 1;\n}\n.text-8xl {\n font-size: 6rem;\n line-height: 1;\n}\n.text-\\[10px\\] {\n font-size: 10px;\n}\n.text-\\[11px\\] {\n font-size: 11px;\n}\n.text-\\[8px\\] {\n font-size: 8px;\n}\n.text-\\[9px\\] {\n font-size: 9px;\n}\n.text-base {\n font-size: 1rem;\n line-height: 1.5rem;\n}\n.text-lg {\n font-size: 1.125rem;\n line-height: 1.75rem;\n}\n.text-sm {\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n.text-xl {\n font-size: 1.25rem;\n line-height: 1.75rem;\n}\n.text-xs {\n font-size: 0.75rem;\n line-height: 1rem;\n}\n.font-bold {\n font-weight: 700;\n}\n.font-extrabold {\n font-weight: 800;\n}\n.font-medium {\n font-weight: 500;\n}\n.font-normal {\n font-weight: 400;\n}\n.font-semibold {\n font-weight: 600;\n}\n.uppercase {\n text-transform: uppercase;\n}\n.italic {\n font-style: italic;\n}\n.leading-none {\n line-height: 1;\n}\n.leading-relaxed {\n line-height: 1.625;\n}\n.leading-snug {\n line-height: 1.375;\n}\n.leading-tight {\n line-height: 1.25;\n}\n.tracking-tight {\n letter-spacing: -0.025em;\n}\n.tracking-wide {\n letter-spacing: 0.025em;\n}\n.tracking-wider {\n letter-spacing: 0.05em;\n}\n.text-amber-400 {\n --tw-text-opacity: 1;\n color: rgb(251 191 36 / var(--tw-text-opacity, 1));\n}\n.text-amber-500 {\n --tw-text-opacity: 1;\n color: rgb(245 158 11 / var(--tw-text-opacity, 1));\n}\n.text-amber-600 {\n --tw-text-opacity: 1;\n color: rgb(217 119 6 / var(--tw-text-opacity, 1));\n}\n.text-amber-700 {\n --tw-text-opacity: 1;\n color: rgb(180 83 9 / var(--tw-text-opacity, 1));\n}\n.text-amber-800 {\n --tw-text-opacity: 1;\n color: rgb(146 64 14 / var(--tw-text-opacity, 1));\n}\n.text-amber-900 {\n --tw-text-opacity: 1;\n color: rgb(120 53 15 / var(--tw-text-opacity, 1));\n}\n.text-blue-100 {\n --tw-text-opacity: 1;\n color: rgb(219 234 254 / var(--tw-text-opacity, 1));\n}\n.text-blue-300 {\n --tw-text-opacity: 1;\n color: rgb(147 197 253 / var(--tw-text-opacity, 1));\n}\n.text-blue-400 {\n --tw-text-opacity: 1;\n color: rgb(96 165 250 / var(--tw-text-opacity, 1));\n}\n.text-blue-500 {\n --tw-text-opacity: 1;\n color: rgb(59 130 246 / var(--tw-text-opacity, 1));\n}\n.text-blue-600 {\n --tw-text-opacity: 1;\n color: rgb(37 99 235 / var(--tw-text-opacity, 1));\n}\n.text-blue-700 {\n --tw-text-opacity: 1;\n color: rgb(29 78 216 / var(--tw-text-opacity, 1));\n}\n.text-blue-800 {\n --tw-text-opacity: 1;\n color: rgb(30 64 175 / var(--tw-text-opacity, 1));\n}\n.text-blue-900 {\n --tw-text-opacity: 1;\n color: rgb(30 58 138 / var(--tw-text-opacity, 1));\n}\n.text-emerald-400 {\n --tw-text-opacity: 1;\n color: rgb(52 211 153 / var(--tw-text-opacity, 1));\n}\n.text-emerald-500 {\n --tw-text-opacity: 1;\n color: rgb(16 185 129 / var(--tw-text-opacity, 1));\n}\n.text-emerald-600 {\n --tw-text-opacity: 1;\n color: rgb(5 150 105 / var(--tw-text-opacity, 1));\n}\n.text-emerald-700 {\n --tw-text-opacity: 1;\n color: rgb(4 120 87 / var(--tw-text-opacity, 1));\n}\n.text-emerald-800 {\n --tw-text-opacity: 1;\n color: rgb(6 95 70 / var(--tw-text-opacity, 1));\n}\n.text-emerald-900 {\n --tw-text-opacity: 1;\n color: rgb(6 78 59 / var(--tw-text-opacity, 1));\n}\n.text-gray-200 {\n --tw-text-opacity: 1;\n color: rgb(229 231 235 / var(--tw-text-opacity, 1));\n}\n.text-gray-300 {\n --tw-text-opacity: 1;\n color: rgb(209 213 219 / var(--tw-text-opacity, 1));\n}\n.text-gray-400 {\n --tw-text-opacity: 1;\n color: rgb(156 163 175 / var(--tw-text-opacity, 1));\n}\n.text-gray-500 {\n --tw-text-opacity: 1;\n color: rgb(107 114 128 / var(--tw-text-opacity, 1));\n}\n.text-gray-600 {\n --tw-text-opacity: 1;\n color: rgb(75 85 99 / var(--tw-text-opacity, 1));\n}\n.text-gray-700 {\n --tw-text-opacity: 1;\n color: rgb(55 65 81 / var(--tw-text-opacity, 1));\n}\n.text-gray-800 {\n --tw-text-opacity: 1;\n color: rgb(31 41 55 / var(--tw-text-opacity, 1));\n}\n.text-gray-900 {\n --tw-text-opacity: 1;\n color: rgb(17 24 39 / var(--tw-text-opacity, 1));\n}\n.text-green-400 {\n --tw-text-opacity: 1;\n color: rgb(74 222 128 / var(--tw-text-opacity, 1));\n}\n.text-green-500 {\n --tw-text-opacity: 1;\n color: rgb(34 197 94 / var(--tw-text-opacity, 1));\n}\n.text-green-600 {\n --tw-text-opacity: 1;\n color: rgb(22 163 74 / var(--tw-text-opacity, 1));\n}\n.text-green-700 {\n --tw-text-opacity: 1;\n color: rgb(21 128 61 / var(--tw-text-opacity, 1));\n}\n.text-green-800 {\n --tw-text-opacity: 1;\n color: rgb(22 101 52 / var(--tw-text-opacity, 1));\n}\n.text-indigo-500 {\n --tw-text-opacity: 1;\n color: rgb(99 102 241 / var(--tw-text-opacity, 1));\n}\n.text-indigo-600 {\n --tw-text-opacity: 1;\n color: rgb(79 70 229 / var(--tw-text-opacity, 1));\n}\n.text-indigo-700 {\n --tw-text-opacity: 1;\n color: rgb(67 56 202 / var(--tw-text-opacity, 1));\n}\n.text-orange-400 {\n --tw-text-opacity: 1;\n color: rgb(251 146 60 / var(--tw-text-opacity, 1));\n}\n.text-orange-500 {\n --tw-text-opacity: 1;\n color: rgb(249 115 22 / var(--tw-text-opacity, 1));\n}\n.text-orange-600 {\n --tw-text-opacity: 1;\n color: rgb(234 88 12 / var(--tw-text-opacity, 1));\n}\n.text-orange-700 {\n --tw-text-opacity: 1;\n color: rgb(194 65 12 / var(--tw-text-opacity, 1));\n}\n.text-orange-800 {\n --tw-text-opacity: 1;\n color: rgb(154 52 18 / var(--tw-text-opacity, 1));\n}\n.text-pink-400 {\n --tw-text-opacity: 1;\n color: rgb(244 114 182 / var(--tw-text-opacity, 1));\n}\n.text-pink-500 {\n --tw-text-opacity: 1;\n color: rgb(236 72 153 / var(--tw-text-opacity, 1));\n}\n.text-pink-600 {\n --tw-text-opacity: 1;\n color: rgb(219 39 119 / var(--tw-text-opacity, 1));\n}\n.text-purple-400 {\n --tw-text-opacity: 1;\n color: rgb(192 132 252 / var(--tw-text-opacity, 1));\n}\n.text-purple-500 {\n --tw-text-opacity: 1;\n color: rgb(168 85 247 / var(--tw-text-opacity, 1));\n}\n.text-purple-600 {\n --tw-text-opacity: 1;\n color: rgb(147 51 234 / var(--tw-text-opacity, 1));\n}\n.text-purple-700 {\n --tw-text-opacity: 1;\n color: rgb(126 34 206 / var(--tw-text-opacity, 1));\n}\n.text-red-400 {\n --tw-text-opacity: 1;\n color: rgb(248 113 113 / var(--tw-text-opacity, 1));\n}\n.text-red-500 {\n --tw-text-opacity: 1;\n color: rgb(239 68 68 / var(--tw-text-opacity, 1));\n}\n.text-red-600 {\n --tw-text-opacity: 1;\n color: rgb(220 38 38 / var(--tw-text-opacity, 1));\n}\n.text-red-700 {\n --tw-text-opacity: 1;\n color: rgb(185 28 28 / var(--tw-text-opacity, 1));\n}\n.text-rose-700 {\n --tw-text-opacity: 1;\n color: rgb(190 18 60 / var(--tw-text-opacity, 1));\n}\n.text-rose-800 {\n --tw-text-opacity: 1;\n color: rgb(159 18 57 / var(--tw-text-opacity, 1));\n}\n.text-rose-900 {\n --tw-text-opacity: 1;\n color: rgb(136 19 55 / var(--tw-text-opacity, 1));\n}\n.text-sky-600 {\n --tw-text-opacity: 1;\n color: rgb(2 132 199 / var(--tw-text-opacity, 1));\n}\n.text-sky-700 {\n --tw-text-opacity: 1;\n color: rgb(3 105 161 / var(--tw-text-opacity, 1));\n}\n.text-slate-300 {\n --tw-text-opacity: 1;\n color: rgb(203 213 225 / var(--tw-text-opacity, 1));\n}\n.text-slate-400 {\n --tw-text-opacity: 1;\n color: rgb(148 163 184 / var(--tw-text-opacity, 1));\n}\n.text-slate-500 {\n --tw-text-opacity: 1;\n color: rgb(100 116 139 / var(--tw-text-opacity, 1));\n}\n.text-slate-600 {\n --tw-text-opacity: 1;\n color: rgb(71 85 105 / var(--tw-text-opacity, 1));\n}\n.text-slate-700 {\n --tw-text-opacity: 1;\n color: rgb(51 65 85 / var(--tw-text-opacity, 1));\n}\n.text-slate-900 {\n --tw-text-opacity: 1;\n color: rgb(15 23 42 / var(--tw-text-opacity, 1));\n}\n.text-teal-700 {\n --tw-text-opacity: 1;\n color: rgb(15 118 110 / var(--tw-text-opacity, 1));\n}\n.text-transparent {\n color: transparent;\n}\n.text-violet-600 {\n --tw-text-opacity: 1;\n color: rgb(124 58 237 / var(--tw-text-opacity, 1));\n}\n.text-violet-700 {\n --tw-text-opacity: 1;\n color: rgb(109 40 217 / var(--tw-text-opacity, 1));\n}\n.text-white {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity, 1));\n}\n.text-white\\/50 {\n color: rgb(255 255 255 / 0.5);\n}\n.text-white\\/60 {\n color: rgb(255 255 255 / 0.6);\n}\n.text-white\\/70 {\n color: rgb(255 255 255 / 0.7);\n}\n.text-white\\/80 {\n color: rgb(255 255 255 / 0.8);\n}\n.text-white\\/90 {\n color: rgb(255 255 255 / 0.9);\n}\n.text-yellow-300 {\n --tw-text-opacity: 1;\n color: rgb(253 224 71 / var(--tw-text-opacity, 1));\n}\n.text-yellow-400 {\n --tw-text-opacity: 1;\n color: rgb(250 204 21 / var(--tw-text-opacity, 1));\n}\n.text-yellow-500 {\n --tw-text-opacity: 1;\n color: rgb(234 179 8 / var(--tw-text-opacity, 1));\n}\n.text-yellow-600 {\n --tw-text-opacity: 1;\n color: rgb(202 138 4 / var(--tw-text-opacity, 1));\n}\n.text-yellow-700 {\n --tw-text-opacity: 1;\n color: rgb(161 98 7 / var(--tw-text-opacity, 1));\n}\n.text-yellow-800 {\n --tw-text-opacity: 1;\n color: rgb(133 77 14 / var(--tw-text-opacity, 1));\n}\n.underline {\n text-decoration-line: underline;\n}\n.line-through {\n text-decoration-line: line-through;\n}\n.opacity-0 {\n opacity: 0;\n}\n.opacity-100 {\n opacity: 1;\n}\n.opacity-25 {\n opacity: 0.25;\n}\n.opacity-40 {\n opacity: 0.4;\n}\n.opacity-50 {\n opacity: 0.5;\n}\n.opacity-60 {\n opacity: 0.6;\n}\n.opacity-70 {\n opacity: 0.7;\n}\n.opacity-75 {\n opacity: 0.75;\n}\n.shadow {\n --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-2xl {\n --tw-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25);\n --tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-lg {\n --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-md {\n --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-sm {\n --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-xl {\n --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-amber-100 {\n --tw-shadow-color: #fef3c7;\n --tw-shadow: var(--tw-shadow-colored);\n}\n.shadow-amber-300\\/50 {\n --tw-shadow-color: rgb(252 211 77 / 0.5);\n --tw-shadow: var(--tw-shadow-colored);\n}\n.shadow-amber-500\\/25 {\n --tw-shadow-color: rgb(245 158 11 / 0.25);\n --tw-shadow: var(--tw-shadow-colored);\n}\n.\\!ring-2 {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000) !important;\n}\n.ring-2 {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.ring-4 {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.\\!ring-blue-500 {\n --tw-ring-opacity: 1 !important;\n --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1)) !important;\n}\n.ring-blue-200 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(191 219 254 / var(--tw-ring-opacity, 1));\n}\n.ring-blue-400 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(96 165 250 / var(--tw-ring-opacity, 1));\n}\n.ring-blue-500 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1));\n}\n.\\!ring-offset-1 {\n --tw-ring-offset-width: 1px !important;\n}\n.ring-offset-1 {\n --tw-ring-offset-width: 1px;\n}\n.ring-offset-2 {\n --tw-ring-offset-width: 2px;\n}\n.blur {\n --tw-blur: blur(8px);\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.blur-\\[100px\\] {\n --tw-blur: blur(100px);\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.blur-\\[120px\\] {\n --tw-blur: blur(120px);\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.drop-shadow {\n --tw-drop-shadow: drop-shadow(0 1px 2px rgb(0 0 0 / 0.1)) drop-shadow(0 1px 1px rgb(0 0 0 / 0.06));\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.drop-shadow-lg {\n --tw-drop-shadow: drop-shadow(0 10px 8px rgb(0 0 0 / 0.04)) drop-shadow(0 4px 3px rgb(0 0 0 / 0.1));\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.filter {\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.backdrop-blur {\n --tw-backdrop-blur: blur(8px);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n.backdrop-blur-md {\n --tw-backdrop-blur: blur(12px);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n.backdrop-blur-sm {\n --tw-backdrop-blur: blur(4px);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n.backdrop-blur-xl {\n --tw-backdrop-blur: blur(24px);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n.transition {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-all {\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-colors {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-opacity {\n transition-property: opacity;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-transform {\n transition-property: transform;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.duration-200 {\n transition-duration: 200ms;\n}\n.duration-300 {\n transition-duration: 300ms;\n}\n.duration-500 {\n transition-duration: 500ms;\n}\n.ease-in-out {\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n\n:root {\n --blue-main: #2563eb;\n --blue-light: #60a5fa;\n --blue-dark: #1e40af;\n --orange-main: #f59e0b;\n --orange-light: #fbbf24;\n --orange-dark: #b45309;\n --glass-bg: rgba(255,255,255,0.65);\n --glass-blur: 18px;\n}\n\nbody {\n background: linear-gradient(135deg, var(--blue-main) 0%, var(--blue-light) 60%, var(--orange-light) 100%);\n color: #18181b;\n font-family: 'Inter', 'Segoe UI', Arial, sans-serif;\n min-height: 100vh;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n\n/* Section highlight styles */\n/* Glassmorphism section style */\n.section-contrast {\n background: var(--glass-bg);\n border-radius: 2.5rem;\n box-shadow: 0 8px 40px 0 rgba(37,99,235,0.10), 0 1.5px 8px 0 rgba(245,158,11,0.08);\n border: 1.5px solid rgba(96,165,250,0.13);\n margin-bottom: 3.5rem;\n padding: 3rem 1.5rem;\n backdrop-filter: blur(var(--glass-blur));\n -webkit-backdrop-filter: blur(var(--glass-blur));\n transition: box-shadow 0.3s, background 0.3s;\n}\n.section-contrast:before {\n display: none;\n}\n@media (min-width: 640px) {\n .section-contrast {\n padding: 4rem 2.5rem;\n margin-left: 1.5rem;\n margin-right: 1.5rem;\n }\n}\n@media (min-width: 1024px) {\n .section-contrast {\n margin-left: 2.5rem;\n margin-right: 2.5rem;\n }\n}\n\n/* Accent button */\n.btn-accent {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n background: var(--blue-main);\n color: #fff;\n font-weight: 700;\n border-radius: 1.2em;\n box-shadow: 0 4px 24px 0 rgba(37,99,235,0.13);\n padding: 0.9em 2.2em;\n font-size: 1.25rem;\n letter-spacing: 0.01em;\n transition: background 0.2s, box-shadow 0.2s, transform 0.15s;\n border: none;\n cursor: pointer;\n}\n.btn-accent:hover {\n background: var(--blue-dark);\n box-shadow: 0 8px 32px 0 rgba(245,158,11,0.13);\n transform: translateY(-2px) scale(1.03);\n}\n\n/* Outline button — same shape as btn-accent, white background */\n.btn-outline {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n background: #fff;\n color: var(--blue-main);\n font-weight: 700;\n border-radius: 1.2em;\n box-shadow: 0 4px 24px 0 rgba(37,99,235,0.10);\n padding: 0.9em 2.2em;\n font-size: 1.25rem;\n letter-spacing: 0.01em;\n border: 2px solid var(--blue-main);\n cursor: pointer;\n transition: background 0.2s, box-shadow 0.2s, transform 0.15s, color 0.2s;\n}\n.btn-outline:hover {\n background: var(--blue-main);\n color: #fff;\n box-shadow: 0 8px 32px 0 rgba(37,99,235,0.18);\n transform: translateY(-2px) scale(1.03);\n}\n\n/* Modern card */\n.modern-card {\n background: #fff;\n border-radius: 1.5rem;\n box-shadow: 0 2px 16px 0 rgba(37,99,235,0.07), 0 1.5px 8px 0 rgba(245,158,11,0.06);\n border: 1.5px solid rgba(96,165,250,0.09);\n transition: box-shadow 0.2s, border 0.2s;\n}\n.modern-card:hover {\n box-shadow: 0 8px 32px 0 rgba(245,158,11,0.13);\n border: 1.5px solid var(--orange-main);\n}\n\n/* Floating hero icons */\n@keyframes heroIconFloat {\n 0%, 100% { transform: translateY(0px) rotate(0deg); }\n 50% { transform: translateY(-14px) rotate(4deg); }\n}\n@keyframes heroIconDrift {\n 0%, 100% { transform: translateY(0px) rotate(0deg); }\n 33% { transform: translateY(-10px) rotate(-5deg); }\n 66% { transform: translateY(-6px) rotate(3deg); }\n}\n@keyframes heroIconSway {\n 0%, 100% { transform: translateY(0px) translateX(0px); }\n 50% { transform: translateY(-8px) translateX(6px); }\n}\n\n/* Animated gradient background for hero */\n.hero-bg-animated {\n background: linear-gradient(120deg, var(--blue-main) 0%, var(--blue-light) 60%, var(--orange-main) 100%);\n background-size: 200% 200%;\n animation: heroGradientMove 6s ease-in-out infinite;\n}\n@keyframes heroGradientMove {\n 0% { background-position: 0% 50%; }\n 50% { background-position: 100% 50%; }\n 100% { background-position: 0% 50%; }\n}\n\n/* Header shrink effect */\n.header-base {\n transition: all 0.3s cubic-bezier(.4,0,.2,1);\n}\n.header-shrink .header-content {\n height: 48px !important;\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n.header-shrink .logo-text {\n font-size: 1.3rem !important;\n letter-spacing: 0.01em;\n}\n\n.logo-text {\n font-family: 'Showpop', sans-serif !important;\n font-size: 1.7rem !important;\n font-weight: 300 !important;\n letter-spacing: 0.01em;\n text-transform: uppercase;\n}\n\n.logo-text-mini {\n font-family: 'Showpop', sans-serif !important;\n font-size: 1.3rem !important;\n font-weight: 300 !important;\n letter-spacing: 0.01em;\n text-transform: uppercase;\n transition: font-size 0.3s ease;\n}\n\n.logo-text-mini.scrolled {\n font-size: 1.1rem !important;\n}\n\n/* ── Site theme (dark = default) ── */\n.site-theme {\n --site-bg: #0a0a0f;\n --site-surface: rgba(255,255,255,0.03);\n --site-surface-hover: rgba(255,255,255,0.06);\n --site-border: rgba(255,255,255,0.05);\n --site-border-hover: rgba(255,255,255,0.1);\n --site-text: #ffffff;\n --site-text-secondary: rgba(255,255,255,0.5);\n --site-text-muted: rgba(255,255,255,0.3);\n --site-text-hint: rgba(255,255,255,0.2);\n --site-nav-bg: rgba(10,10,15,0.8);\n --site-modal-bg: #14141f;\n --site-input-bg: rgba(255,255,255,0.05);\n --site-input-border: rgba(255,255,255,0.1);\n --site-input-text: #ffffff;\n --site-input-placeholder: rgba(255,255,255,0.2);\n --site-tag-bg: rgba(255,255,255,0.05);\n --site-tag-border: rgba(255,255,255,0.05);\n --site-tag-text: rgba(255,255,255,0.6);\n --site-card-bg: rgba(255,255,255,0.03);\n --site-card-border: rgba(255,255,255,0.05);\n --site-name-from: #ffffff;\n --site-name-to: rgba(255,255,255,0.7);\n --site-avatar-border: rgba(255,255,255,0.1);\n --site-avatar-bg: rgba(255,255,255,0.05);\n --site-status-border-color: #0a0a0f;\n --site-phone-bg: rgba(255,255,255,0.05);\n --site-phone-border: rgba(255,255,255,0.1);\n --site-phone-text: #ffffff;\n --site-divider: rgba(255,255,255,0.1);\n --site-lang-dropdown: #1a1a24;\n --site-footer-text: rgba(255,255,255,0.2);\n --site-scroll-btn-bg: rgba(255,255,255,0.1);\n --site-scroll-btn-border: rgba(255,255,255,0.1);\n --site-scroll-btn-text: rgba(255,255,255,0.6);\n}\n\n.site-theme.site-light {\n --site-bg: #f8f9fb;\n --site-surface: rgba(0,0,0,0.02);\n --site-surface-hover: rgba(0,0,0,0.04);\n --site-border: rgba(0,0,0,0.08);\n --site-border-hover: rgba(0,0,0,0.15);\n --site-text: #1a1a2e;\n --site-text-secondary: rgba(0,0,0,0.55);\n --site-text-muted: rgba(0,0,0,0.4);\n --site-text-hint: rgba(0,0,0,0.25);\n --site-nav-bg: rgba(255,255,255,0.85);\n --site-modal-bg: #ffffff;\n --site-input-bg: rgba(0,0,0,0.03);\n --site-input-border: rgba(0,0,0,0.12);\n --site-input-text: #1a1a2e;\n --site-input-placeholder: rgba(0,0,0,0.3);\n --site-tag-bg: rgba(0,0,0,0.04);\n --site-tag-border: rgba(0,0,0,0.08);\n --site-tag-text: rgba(0,0,0,0.6);\n --site-card-bg: #ffffff;\n --site-card-border: rgba(0,0,0,0.08);\n --site-name-from: #1a1a2e;\n --site-name-to: rgba(26,26,46,0.7);\n --site-avatar-border: rgba(0,0,0,0.1);\n --site-avatar-bg: rgba(0,0,0,0.05);\n --site-status-border-color: #f8f9fb;\n --site-phone-bg: rgba(0,0,0,0.04);\n --site-phone-border: rgba(0,0,0,0.1);\n --site-phone-text: #1a1a2e;\n --site-divider: rgba(0,0,0,0.08);\n --site-lang-dropdown: #ffffff;\n --site-footer-text: rgba(0,0,0,0.3);\n --site-scroll-btn-bg: rgba(0,0,0,0.06);\n --site-scroll-btn-border: rgba(0,0,0,0.1);\n --site-scroll-btn-text: rgba(0,0,0,0.5);\n}\n\n.logo-text-jaipur {\n font-family: 'Jaipur', 'Inter', 'Segoe UI', Arial, sans-serif !important;\n font-size: 1.7rem !important;\n letter-spacing: 0.01em;\n text-transform: uppercase;\n}\n\n.logo-text-rennie {\n font-family: 'Rennie', 'Inter', 'Segoe UI', Arial, sans-serif !important;\n font-size: 1.7rem !important;\n letter-spacing: 0.01em;\n text-transform: uppercase;\n}\n\n/* Scroll to top button */\n.scroll-to-top-btn {\n position: fixed;\n right: 2rem;\n bottom: 2.5rem;\n z-index: 100;\n background: #6366f1;\n color: #fff;\n border-radius: 9999px;\n box-shadow: 0 2px 12px 0 rgba(80,80,120,0.13);\n padding: 0.75rem;\n width: 3rem;\n height: 3rem;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 1.5rem;\n border: none;\n cursor: pointer;\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.3s;\n}\n.scroll-to-top-btn.visible {\n opacity: 1;\n pointer-events: auto;\n}\n\n@font-face {\n font-family: 'NorseCyr2';\n src: url('/fonts/Norse-Regular.woff2') format('woff2');\n font-weight: normal;\n font-style: normal;\n font-display: swap;\n}\n\n@font-face {\n font-family: 'Jaipur';\n src: url('/fonts/Jaipur.woff2') format('woff2');\n font-weight: normal;\n font-style: normal;\n font-display: swap;\n}\n\n@font-face {\n font-family: 'Rennie';\n src: url('/fonts/Rennie.woff2') format('woff2');\n font-weight: normal;\n font-style: normal;\n font-display: swap;\n}\n\n.selection\\:bg-blue-500\\/30 *::-moz-selection {\n background-color: rgb(59 130 246 / 0.3);\n}\n\n.selection\\:bg-blue-500\\/30 *::selection {\n background-color: rgb(59 130 246 / 0.3);\n}\n\n.selection\\:bg-blue-500\\/30::-moz-selection {\n background-color: rgb(59 130 246 / 0.3);\n}\n\n.selection\\:bg-blue-500\\/30::selection {\n background-color: rgb(59 130 246 / 0.3);\n}\n\n.placeholder\\:text-blue-300::-moz-placeholder {\n --tw-text-opacity: 1;\n color: rgb(147 197 253 / var(--tw-text-opacity, 1));\n}\n\n.placeholder\\:text-blue-300::placeholder {\n --tw-text-opacity: 1;\n color: rgb(147 197 253 / var(--tw-text-opacity, 1));\n}\n\n.last\\:border-0:last-child {\n border-width: 0px;\n}\n\n.last\\:pb-0:last-child {\n padding-bottom: 0px;\n}\n\n.focus-within\\:ring-2:focus-within {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n\n.focus-within\\:ring-blue-400:focus-within {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(96 165 250 / var(--tw-ring-opacity, 1));\n}\n\n.hover\\:border-blue-300:hover {\n --tw-border-opacity: 1;\n border-color: rgb(147 197 253 / var(--tw-border-opacity, 1));\n}\n\n.hover\\:border-blue-400:hover {\n --tw-border-opacity: 1;\n border-color: rgb(96 165 250 / var(--tw-border-opacity, 1));\n}\n\n.hover\\:border-gray-300:hover {\n --tw-border-opacity: 1;\n border-color: rgb(209 213 219 / var(--tw-border-opacity, 1));\n}\n\n.hover\\:bg-amber-200:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(253 230 138 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-amber-50:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(255 251 235 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-amber-600:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(217 119 6 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-black\\/70:hover {\n background-color: rgb(0 0 0 / 0.7);\n}\n\n.hover\\:bg-blue-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(219 234 254 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-blue-50:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(239 246 255 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-blue-50\\/60:hover {\n background-color: rgb(239 246 255 / 0.6);\n}\n\n.hover\\:bg-blue-500:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(59 130 246 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-blue-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(29 78 216 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-emerald-200:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(167 243 208 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-emerald-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(4 120 87 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-gray-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-gray-200:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-gray-50:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-gray-50\\/50:hover {\n background-color: rgb(249 250 251 / 0.5);\n}\n\n.hover\\:bg-gray-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(55 65 81 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-green-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(220 252 231 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-green-50:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(240 253 244 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-green-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(21 128 61 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-indigo-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(224 231 255 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-indigo-200:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(199 210 254 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-indigo-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(67 56 202 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-orange-600:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(234 88 12 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-pink-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(252 231 243 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-pink-50:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(253 242 248 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-purple-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(243 232 255 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-purple-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(126 34 206 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-red-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(254 226 226 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-red-200:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(254 202 202 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-red-50:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(254 242 242 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-red-600:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(220 38 38 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-rose-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(190 18 60 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-slate-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(241 245 249 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-slate-800:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(30 41 59 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-white:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-white\\/10:hover {\n background-color: rgb(255 255 255 / 0.1);\n}\n\n.hover\\:bg-white\\/20:hover {\n background-color: rgb(255 255 255 / 0.2);\n}\n\n.hover\\:bg-white\\/25:hover {\n background-color: rgb(255 255 255 / 0.25);\n}\n\n.hover\\:bg-yellow-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(254 249 195 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-yellow-600:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(202 138 4 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:from-amber-600:hover {\n --tw-gradient-from: #d97706 var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(217 119 6 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n\n.hover\\:to-yellow-600:hover {\n --tw-gradient-to: #ca8a04 var(--tw-gradient-to-position);\n}\n\n.hover\\:text-black:hover {\n --tw-text-opacity: 1;\n color: rgb(0 0 0 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-blue-300:hover {\n --tw-text-opacity: 1;\n color: rgb(147 197 253 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-blue-400:hover {\n --tw-text-opacity: 1;\n color: rgb(96 165 250 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-blue-600:hover {\n --tw-text-opacity: 1;\n color: rgb(37 99 235 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-blue-700:hover {\n --tw-text-opacity: 1;\n color: rgb(29 78 216 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-blue-800:hover {\n --tw-text-opacity: 1;\n color: rgb(30 64 175 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-gray-600:hover {\n --tw-text-opacity: 1;\n color: rgb(75 85 99 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-gray-700:hover {\n --tw-text-opacity: 1;\n color: rgb(55 65 81 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-gray-800:hover {\n --tw-text-opacity: 1;\n color: rgb(31 41 55 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-gray-900:hover {\n --tw-text-opacity: 1;\n color: rgb(17 24 39 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-green-500:hover {\n --tw-text-opacity: 1;\n color: rgb(34 197 94 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-green-700:hover {\n --tw-text-opacity: 1;\n color: rgb(21 128 61 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-indigo-700:hover {\n --tw-text-opacity: 1;\n color: rgb(67 56 202 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-pink-400:hover {\n --tw-text-opacity: 1;\n color: rgb(244 114 182 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-pink-500:hover {\n --tw-text-opacity: 1;\n color: rgb(236 72 153 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-pink-600:hover {\n --tw-text-opacity: 1;\n color: rgb(219 39 119 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-purple-600:hover {\n --tw-text-opacity: 1;\n color: rgb(147 51 234 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-purple-700:hover {\n --tw-text-opacity: 1;\n color: rgb(126 34 206 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-red-400:hover {\n --tw-text-opacity: 1;\n color: rgb(248 113 113 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-red-500:hover {\n --tw-text-opacity: 1;\n color: rgb(239 68 68 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-red-600:hover {\n --tw-text-opacity: 1;\n color: rgb(220 38 38 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-red-700:hover {\n --tw-text-opacity: 1;\n color: rgb(185 28 28 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-sky-500:hover {\n --tw-text-opacity: 1;\n color: rgb(14 165 233 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-slate-700:hover {\n --tw-text-opacity: 1;\n color: rgb(51 65 85 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-white:hover {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-white\\/80:hover {\n color: rgb(255 255 255 / 0.8);\n}\n\n.hover\\:underline:hover {\n text-decoration-line: underline;\n}\n\n.hover\\:opacity-90:hover {\n opacity: 0.9;\n}\n\n.hover\\:shadow-lg:hover {\n --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.hover\\:shadow-md:hover {\n --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.hover\\:shadow-sm:hover {\n --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.hover\\:shadow-xl:hover {\n --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.hover\\:shadow-blue-500\\/25:hover {\n --tw-shadow-color: rgb(59 130 246 / 0.25);\n --tw-shadow: var(--tw-shadow-colored);\n}\n\n.focus\\:border-blue-500\\/50:focus {\n border-color: rgb(59 130 246 / 0.5);\n}\n\n.focus\\:outline-none:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n\n.focus\\:ring-2:focus {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n\n.focus\\:ring-blue-300:focus {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity, 1));\n}\n\n.focus\\:ring-blue-400:focus {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(96 165 250 / var(--tw-ring-opacity, 1));\n}\n\n.focus\\:ring-blue-500:focus {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1));\n}\n\n.focus\\:ring-emerald-400:focus {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(52 211 153 / var(--tw-ring-opacity, 1));\n}\n\n.focus\\:ring-rose-400:focus {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(251 113 133 / var(--tw-ring-opacity, 1));\n}\n\n.focus\\:ring-offset-2:focus {\n --tw-ring-offset-width: 2px;\n}\n\n.active\\:scale-95:active {\n --tw-scale-x: .95;\n --tw-scale-y: .95;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.disabled\\:cursor-not-allowed:disabled {\n cursor: not-allowed;\n}\n\n.disabled\\:bg-gray-300:disabled {\n --tw-bg-opacity: 1;\n background-color: rgb(209 213 219 / var(--tw-bg-opacity, 1));\n}\n\n.disabled\\:bg-gray-50:disabled {\n --tw-bg-opacity: 1;\n background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1));\n}\n\n.disabled\\:text-gray-400:disabled {\n --tw-text-opacity: 1;\n color: rgb(156 163 175 / var(--tw-text-opacity, 1));\n}\n\n.disabled\\:no-underline:disabled {\n text-decoration-line: none;\n}\n\n.disabled\\:opacity-40:disabled {\n opacity: 0.4;\n}\n\n.disabled\\:opacity-50:disabled {\n opacity: 0.5;\n}\n\n.disabled\\:opacity-60:disabled {\n opacity: 0.6;\n}\n\n.group:hover .group-hover\\:scale-105 {\n --tw-scale-x: 1.05;\n --tw-scale-y: 1.05;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.group:hover .group-hover\\:scale-110 {\n --tw-scale-x: 1.1;\n --tw-scale-y: 1.1;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.group:hover .group-hover\\:border-blue-400 {\n --tw-border-opacity: 1;\n border-color: rgb(96 165 250 / var(--tw-border-opacity, 1));\n}\n\n.group:hover .group-hover\\:bg-black\\/50 {\n background-color: rgb(0 0 0 / 0.5);\n}\n\n.group:hover .group-hover\\:text-blue-600 {\n --tw-text-opacity: 1;\n color: rgb(37 99 235 / var(--tw-text-opacity, 1));\n}\n\n.group:hover .group-hover\\:text-orange-600 {\n --tw-text-opacity: 1;\n color: rgb(234 88 12 / var(--tw-text-opacity, 1));\n}\n\n.group:hover .group-hover\\:underline {\n text-decoration-line: underline;\n}\n\n.group:hover .group-hover\\:opacity-100 {\n opacity: 1;\n}\n\n.group:hover .group-hover\\:opacity-80 {\n opacity: 0.8;\n}\n\n.has-\\[\\:checked\\]\\:border-blue-500:has(:checked) {\n --tw-border-opacity: 1;\n border-color: rgb(59 130 246 / var(--tw-border-opacity, 1));\n}\n\n.has-\\[\\:checked\\]\\:bg-blue-50:has(:checked) {\n --tw-bg-opacity: 1;\n background-color: rgb(239 246 255 / var(--tw-bg-opacity, 1));\n}\n\n@media (min-width: 640px) {\n\n .sm\\:mb-6 {\n margin-bottom: 1.5rem;\n }\n\n .sm\\:block {\n display: block;\n }\n\n .sm\\:hidden {\n display: none;\n }\n\n .sm\\:h-32 {\n height: 8rem;\n }\n\n .sm\\:w-32 {\n width: 8rem;\n }\n\n .sm\\:w-auto {\n width: auto;\n }\n\n .sm\\:flex-1 {\n flex: 1 1 0%;\n }\n\n .sm\\:grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n\n .sm\\:grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n\n .sm\\:grid-cols-4 {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n }\n\n .sm\\:flex-row {\n flex-direction: row;\n }\n\n .sm\\:items-center {\n align-items: center;\n }\n\n .sm\\:gap-3 {\n gap: 0.75rem;\n }\n\n .sm\\:gap-4 {\n gap: 1rem;\n }\n\n .sm\\:space-y-5 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1.25rem * var(--tw-space-y-reverse));\n }\n\n .sm\\:p-6 {\n padding: 1.5rem;\n }\n\n .sm\\:px-4 {\n padding-left: 1rem;\n padding-right: 1rem;\n }\n\n .sm\\:px-6 {\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n }\n\n .sm\\:py-8 {\n padding-top: 2rem;\n padding-bottom: 2rem;\n }\n\n .sm\\:pb-28 {\n padding-bottom: 7rem;\n }\n\n .sm\\:pt-24 {\n padding-top: 6rem;\n }\n\n .sm\\:text-2xl {\n font-size: 1.5rem;\n line-height: 2rem;\n }\n\n .sm\\:text-5xl {\n font-size: 3rem;\n line-height: 1;\n }\n\n .sm\\:text-lg {\n font-size: 1.125rem;\n line-height: 1.75rem;\n }\n}\n\n@media (min-width: 768px) {\n\n .md\\:flex {\n display: flex;\n }\n\n .md\\:hidden {\n display: none;\n }\n\n .md\\:w-64 {\n width: 16rem;\n }\n\n .md\\:grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n\n .md\\:grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n\n .md\\:grid-cols-4 {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n }\n\n .md\\:grid-cols-5 {\n grid-template-columns: repeat(5, minmax(0, 1fr));\n }\n\n .md\\:flex-row {\n flex-direction: row;\n }\n\n .md\\:p-14 {\n padding: 3.5rem;\n }\n\n .md\\:px-8 {\n padding-left: 2rem;\n padding-right: 2rem;\n }\n\n .md\\:text-3xl {\n font-size: 1.875rem;\n line-height: 2.25rem;\n }\n\n .md\\:text-5xl {\n font-size: 3rem;\n line-height: 1;\n }\n\n .md\\:text-6xl {\n font-size: 3.75rem;\n line-height: 1;\n }\n}\n\n@media (min-width: 1024px) {\n\n .lg\\:block {\n display: block;\n }\n\n .lg\\:w-64 {\n width: 16rem;\n }\n\n .lg\\:grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n\n .lg\\:grid-cols-4 {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n }\n\n .lg\\:grid-cols-6 {\n grid-template-columns: repeat(6, minmax(0, 1fr));\n }\n\n .lg\\:flex-row {\n flex-direction: row;\n }\n\n .lg\\:gap-8 {\n gap: 2rem;\n }\n\n .lg\\:px-8 {\n padding-left: 2rem;\n padding-right: 2rem;\n }\n}\n\n@media (min-width: 1280px) {\n\n .xl\\:grid-cols-7 {\n grid-template-columns: repeat(7, minmax(0, 1fr));\n }\n}\n", ""]); // Exports export default ___CSS_LOADER_EXPORT___; `žøÿÿ øÿÿ ºöÿÿ@ù÷ÿÿ ý`÷ÿÿ÷ÿÿ÷ÿÿ÷ÿÿ÷ÿÿ÷ÿÿ÷ÿÿ÷ÿÿ÷ÿÿ÷ÿÿÈøÿÿÉøÿÿšmoduleConcatenationBailout÷ÿÿ÷ÿÿ  ù÷ÿÿú÷ÿÿ÷ÿÿ ÷ÿÿda9501f77f57b6e0 Ñøÿÿ‰module.id —___CSS_LOADER_EXPORT___®ýÿÿ `I Wy²ÝyB%÷ÿÿû÷ÿÿý÷ÿÿÿ÷ÿÿ ÷ÿÿøÿÿ dÿÿý€` @Œ @¶webpack/lib/dependencies/RuntimeRequirementsDependencya ö b'AÀp×pA±pØp `'Ö../../../../node_modules/next/dist/build/webpack/loaders/css-loader/src/runtime/api.jsÿ @Šùÿÿ›___CSS_LOADER_API_IMPORT___A«Æ úúþ b9ºwebpack/lib/dependencies/HarmonyExportExpressionDependency`õö€ `'ô„ùÿÿ `' E÷ÿÿ I÷ÿÿeÿÿÿ˜öÿÿ÷ÿÿ¥/opt/canhelp/apps/web/src/lib/auth.ts€€ I÷ÿÿ€÷ÿÿ÷ÿÿ‘./src/lib/auth.tsÿÿ @‰ `z²ÝyBýQøÿÿ‰÷ÿÿ!`f¿ÙyBPf¿ÙyBeca3d166f7d8d806„`sÿÿÿTøÿÿ·/opt/canhelp/apps/web/opt/canhelp/apps/web/src/lib/authº/opt/canhelp/apps/web/opt/canhelp/apps/web/src/lib/auth.js»/opt/canhelp/apps/web/opt/canhelp/apps/web/src/lib/auth.mjs»/opt/canhelp/apps/web/opt/canhelp/apps/web/src/lib/auth.tsxº/opt/canhelp/apps/web/opt/canhelp/apps/web/src/lib/auth.ts»/opt/canhelp/apps/web/opt/canhelp/apps/web/src/lib/auth.jsx¼/opt/canhelp/apps/web/opt/canhelp/apps/web/src/lib/auth.json¼/opt/canhelp/apps/web/opt/canhelp/apps/web/src/lib/auth.wasmUøÿÿ¢/opt/canhelp/apps/web/src/lib/auth¥/opt/canhelp/apps/web/src/lib/auth.js¦/opt/canhelp/apps/web/src/lib/auth.mjs¦/opt/canhelp/apps/web/src/lib/auth.tsxˆ´÷ÿÿ¹÷ÿÿ .÷ÿÿ 2÷ÿÿNÿÿÿöÿÿîöÿÿ»/opt/canhelp/node_modules/next/dist/compiled/react/index.js€€ ¿/opt/canhelp/node_modules/next/dist/compiled/react/package.json2÷ÿÿ‰øÿÿ‡exportsreact-builtinˆindex.js.Ž./package.json./jsx-runtime‘./jsx-dev-runtime’./compiler-runtimeŒreact-server[ùÿÿ—./react.react-server.jsŠ./index.jsöü./jsx-runtime.react-server.js./jsx-runtime.jsù¡./jsx-dev-runtime.react-server.js”./jsx-dev-runtime.jsö•./compiler-runtime.jsÿ²/opt/canhelp/node_modules/next/dist/compiled/reactóóó @‰ `z²ÝyB™/opt/canhelp/node_modulesX÷ÿÿ÷ÿÿCÿÿÿ ˆöÿÿ³/opt/canhelp/apps/web/opt/canhelp/node_modules/next»/opt/canhelp/apps/web/opt/canhelp/node_modules/package.json³÷ÿÿˆ*missingÿ´÷ÿÿöÝܬ/opt/canhelp/node_modules/next/dist/compiled£/opt/canhelp/node_modules/next/dist‚öÿÿ`Î/opt/canhelp/apps/web/opt/canhelp/node_modules/next/dist/compiled/package.jsonÅ/opt/canhelp/apps/web/opt/canhelp/node_modules/next/dist/package.jsonÀ/opt/canhelp/apps/web/opt/canhelp/node_modules/next/package.json÷Ç/opt/canhelp/apps/web/opt/canhelp/node_modules/next/dist/compiled/reactÊ/opt/canhelp/apps/web/opt/canhelp/node_modules/next/dist/compiled/react.jsË/opt/canhelp/apps/web/opt/canhelp/node_modules/next/dist/compiled/react.mjsË/opt/canhelp/apps/web/opt/canhelp/node_modules/next/dist/compiled/react.tsxÊ/opt/canhelp/apps/web/opt/canhelp/node_modules/next/dist/compiled/react.tsË/opt/canhelp/apps/web/opt/canhelp/node_modules/next/dist/compiled/react.jsxÌ/opt/canhelp/apps/web/opt/canhelp/node_modules/next/dist/compiled/react.jsonÌ/opt/canhelp/apps/web/opt/canhelp/node_modules/next/dist/compiled/react.wasm¹/opt/canhelp/node_modules/next/dist/compiled/package.json°/opt/canhelp/node_modules/next/dist/package.jsonæµ/opt/canhelp/node_modules/next/dist/compiled/react.js¶/opt/canhelp/node_modules/next/dist/compiled/react.mjs¶/opt/canhelp/node_modules/next/dist/compiled/react.tsxµ/opt/canhelp/node_modules/next/dist/compiled/react.ts¶/opt/canhelp/node_modules/next/dist/compiled/react.jsx·/opt/canhelp/node_modules/next/dist/compiled/react.json·/opt/canhelp/node_modules/next/dist/compiled/react.wasmr÷ÿÿw÷ÿÿ‡sources“runtimeRequirements„dataŠjavascript«webpack/lib/util/registerExternalSerializerœwebpack-sources/CachedSource žu«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-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 _node_modules_next_dist_build_webpack_loaders_css_loader_src_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("/opt/canhelp/node_modules/next/dist/build/webpack/loaders/css-loader/src/runtime/api.js"); /* harmony import */ var _node_modules_next_dist_build_webpack_loaders_css_loader_src_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_next_dist_build_webpack_loaders_css_loader_src_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__); «webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSourceãp// Imports import ___CSS_LOADER_API_IMPORT___ from "../../../../node_modules/next/dist/build/webpack/loaders/css-loader/src/runtime/api.js"; var ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(false); // Module ___CSS_LOADER_EXPORT___.push([module.id, "@font-face {\n font-family: 'Showpop';\n src: url('/fonts/showpop.woff2') format('woff2');\n font-weight: normal;\n font-style: normal;\n font-display: swap;\n}\n\n.logo-text {\n font-family: 'Showpop', sans-serif;\n letter-spacing: 0.01em;\n font-weight: normal;\n}\n\n@font-face {\n font-family: 'UnifixSP';\n src: url('/fonts/UnifixSP.woff2') format('woff2');\n font-weight: normal;\n font-style: normal;\n font-display: swap;\n}\n\n.logo-text-unifix {\n font-family: 'UnifixSP', sans-serif;\n letter-spacing: 0.01em;\n font-weight: normal;\n}\n@font-face {\n font-family: 'MotivationOfHearts';\n src: url('/fonts/MotivationOfHearts.woff2') format('woff2');\n font-weight: normal;\n font-style: normal;\n font-display: swap;\n}\n\n.logo-text-motivation {\n font-family: 'MotivationOfHearts', sans-serif;\n letter-spacing: 0.01em;\n font-weight: normal;\n}\n*, ::before, ::after {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n --tw-contain-size: ;\n --tw-contain-layout: ;\n --tw-contain-paint: ;\n --tw-contain-style: ;\n}\n::backdrop {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n --tw-contain-size: ;\n --tw-contain-layout: ;\n --tw-contain-paint: ;\n --tw-contain-style: ;\n}\n/*\n! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com\n*/\n/*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n*,\n::before,\n::after {\n box-sizing: border-box; /* 1 */\n border-width: 0; /* 2 */\n border-style: solid; /* 2 */\n border-color: #e5e7eb; /* 2 */\n}\n::before,\n::after {\n --tw-content: '';\n}\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user's configured `sans` font-family by default.\n5. Use the user's configured `sans` font-feature-settings by default.\n6. Use the user's configured `sans` font-variation-settings by default.\n7. Disable tap highlights on iOS\n*/\nhtml,\n:host {\n line-height: 1.5; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n -moz-tab-size: 4; /* 3 */\n -o-tab-size: 4;\n tab-size: 4; /* 3 */\n font-family: Inter, system-ui, sans-serif; /* 4 */\n font-feature-settings: normal; /* 5 */\n font-variation-settings: normal; /* 6 */\n -webkit-tap-highlight-color: transparent; /* 7 */\n}\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\nbody {\n margin: 0; /* 1 */\n line-height: inherit; /* 2 */\n}\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\nhr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n border-top-width: 1px; /* 3 */\n}\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\nabbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n}\n/*\nRemove the default font size and weight for headings.\n*/\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: inherit;\n font-weight: inherit;\n}\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\na {\n color: inherit;\n text-decoration: inherit;\n}\n/*\nAdd the correct font weight in Edge and Safari.\n*/\nb,\nstrong {\n font-weight: bolder;\n}\n/*\n1. Use the user's configured `mono` font-family by default.\n2. Use the user's configured `mono` font-feature-settings by default.\n3. Use the user's configured `mono` font-variation-settings by default.\n4. Correct the odd `em` font sizing in all browsers.\n*/\ncode,\nkbd,\nsamp,\npre {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace; /* 1 */\n font-feature-settings: normal; /* 2 */\n font-variation-settings: normal; /* 3 */\n font-size: 1em; /* 4 */\n}\n/*\nAdd the correct font size in all browsers.\n*/\nsmall {\n font-size: 80%;\n}\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\nsub {\n bottom: -0.25em;\n}\nsup {\n top: -0.5em;\n}\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\ntable {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n border-collapse: collapse; /* 3 */\n}\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-feature-settings: inherit; /* 1 */\n font-variation-settings: inherit; /* 1 */\n font-size: 100%; /* 1 */\n font-weight: inherit; /* 1 */\n line-height: inherit; /* 1 */\n letter-spacing: inherit; /* 1 */\n color: inherit; /* 1 */\n margin: 0; /* 2 */\n padding: 0; /* 3 */\n}\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\nbutton,\nselect {\n text-transform: none;\n}\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\nbutton,\ninput:where([type='button']),\ninput:where([type='reset']),\ninput:where([type='submit']) {\n -webkit-appearance: button; /* 1 */\n background-color: transparent; /* 2 */\n background-image: none; /* 2 */\n}\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n:-moz-focusring {\n outline: auto;\n}\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n:-moz-ui-invalid {\n box-shadow: none;\n}\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\nprogress {\n vertical-align: baseline;\n}\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n height: auto;\n}\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n[type='search'] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n/*\nAdd the correct display in Chrome and Safari.\n*/\nsummary {\n display: list-item;\n}\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n margin: 0;\n}\nfieldset {\n margin: 0;\n padding: 0;\n}\nlegend {\n padding: 0;\n}\nol,\nul,\nmenu {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n/*\nReset default styling for dialogs.\n*/\ndialog {\n padding: 0;\n}\n/*\nPrevent resizing textareas horizontally by default.\n*/\ntextarea {\n resize: vertical;\n}\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user's configured gray 400 color.\n*/\ninput::-moz-placeholder, textarea::-moz-placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\ninput::placeholder,\ntextarea::placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n/*\nSet the default cursor for buttons.\n*/\nbutton,\n[role=\"button\"] {\n cursor: pointer;\n}\n/*\nMake sure disabled buttons don't get the pointer cursor.\n*/\n:disabled {\n cursor: default;\n}\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n This can trigger a poorly considered lint error in some tools but is included by design.\n*/\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n display: block; /* 1 */\n vertical-align: middle; /* 2 */\n}\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\nimg,\nvideo {\n max-width: 100%;\n height: auto;\n}\n/* Make elements with the HTML hidden attribute stay hidden by default */\n[hidden]:where(:not([hidden=\"until-found\"])) {\n display: none;\n}\n.container {\n width: 100%;\n}\n@media (min-width: 640px) {\n\n .container {\n max-width: 640px;\n }\n}\n@media (min-width: 768px) {\n\n .container {\n max-width: 768px;\n }\n}\n@media (min-width: 1024px) {\n\n .container {\n max-width: 1024px;\n }\n}\n@media (min-width: 1280px) {\n\n .container {\n max-width: 1280px;\n }\n}\n@media (min-width: 1536px) {\n\n .container {\n max-width: 1536px;\n }\n}\n.pointer-events-none {\n pointer-events: none;\n}\n.visible {\n visibility: visible;\n}\n.static {\n position: static;\n}\n.fixed {\n position: fixed;\n}\n.absolute {\n position: absolute;\n}\n.relative {\n position: relative;\n}\n.sticky {\n position: sticky;\n}\n.-inset-1 {\n inset: -0.25rem;\n}\n.inset-0 {\n inset: 0px;\n}\n.-right-1\\.5 {\n right: -0.375rem;\n}\n.-top-1\\.5 {\n top: -0.375rem;\n}\n.-top-10 {\n top: -2.5rem;\n}\n.bottom-1 {\n bottom: 0.25rem;\n}\n.bottom-20 {\n bottom: 5rem;\n}\n.bottom-5 {\n bottom: 1.25rem;\n}\n.bottom-6 {\n bottom: 1.5rem;\n}\n.left-0 {\n left: 0px;\n}\n.left-0\\.5 {\n left: 0.125rem;\n}\n.left-1\\/2 {\n left: 50%;\n}\n.left-1\\/4 {\n left: 25%;\n}\n.left-3 {\n left: 0.75rem;\n}\n.left-4 {\n left: 1rem;\n}\n.right-0 {\n right: 0px;\n}\n.right-0\\.5 {\n right: 0.125rem;\n}\n.right-1 {\n right: 0.25rem;\n}\n.right-1\\/4 {\n right: 25%;\n}\n.right-2 {\n right: 0.5rem;\n}\n.right-3 {\n right: 0.75rem;\n}\n.right-4 {\n right: 1rem;\n}\n.right-5 {\n right: 1.25rem;\n}\n.right-6 {\n right: 1.5rem;\n}\n.top-0 {\n top: 0px;\n}\n.top-0\\.5 {\n top: 0.125rem;\n}\n.top-1 {\n top: 0.25rem;\n}\n.top-1\\/2 {\n top: 50%;\n}\n.top-2 {\n top: 0.5rem;\n}\n.top-20 {\n top: 5rem;\n}\n.top-24 {\n top: 6rem;\n}\n.top-3 {\n top: 0.75rem;\n}\n.top-4 {\n top: 1rem;\n}\n.top-6 {\n top: 1.5rem;\n}\n.top-full {\n top: 100%;\n}\n.z-10 {\n z-index: 10;\n}\n.z-40 {\n z-index: 40;\n}\n.z-50 {\n z-index: 50;\n}\n.z-\\[200\\] {\n z-index: 200;\n}\n.z-\\[60\\] {\n z-index: 60;\n}\n.col-span-2 {\n grid-column: span 2 / span 2;\n}\n.m-0\\.5 {\n margin: 0.125rem;\n}\n.mx-0\\.5 {\n margin-left: 0.125rem;\n margin-right: 0.125rem;\n}\n.mx-4 {\n margin-left: 1rem;\n margin-right: 1rem;\n}\n.mx-5 {\n margin-left: 1.25rem;\n margin-right: 1.25rem;\n}\n.mx-auto {\n margin-left: auto;\n margin-right: auto;\n}\n.my-1 {\n margin-top: 0.25rem;\n margin-bottom: 0.25rem;\n}\n.-mb-px {\n margin-bottom: -1px;\n}\n.-mt-1 {\n margin-top: -0.25rem;\n}\n.-mt-px {\n margin-top: -1px;\n}\n.mb-0 {\n margin-bottom: 0px;\n}\n.mb-0\\.5 {\n margin-bottom: 0.125rem;\n}\n.mb-1 {\n margin-bottom: 0.25rem;\n}\n.mb-1\\.5 {\n margin-bottom: 0.375rem;\n}\n.mb-10 {\n margin-bottom: 2.5rem;\n}\n.mb-12 {\n margin-bottom: 3rem;\n}\n.mb-14 {\n margin-bottom: 3.5rem;\n}\n.mb-2 {\n margin-bottom: 0.5rem;\n}\n.mb-3 {\n margin-bottom: 0.75rem;\n}\n.mb-4 {\n margin-bottom: 1rem;\n}\n.mb-5 {\n margin-bottom: 1.25rem;\n}\n.mb-6 {\n margin-bottom: 1.5rem;\n}\n.mb-8 {\n margin-bottom: 2rem;\n}\n.ml-1 {\n margin-left: 0.25rem;\n}\n.ml-1\\.5 {\n margin-left: 0.375rem;\n}\n.ml-2 {\n margin-left: 0.5rem;\n}\n.ml-3 {\n margin-left: 0.75rem;\n}\n.ml-4 {\n margin-left: 1rem;\n}\n.ml-6 {\n margin-left: 1.5rem;\n}\n.ml-auto {\n margin-left: auto;\n}\n.mr-0\\.5 {\n margin-right: 0.125rem;\n}\n.mr-1 {\n margin-right: 0.25rem;\n}\n.mr-2 {\n margin-right: 0.5rem;\n}\n.mt-0\\.5 {\n margin-top: 0.125rem;\n}\n.mt-1 {\n margin-top: 0.25rem;\n}\n.mt-1\\.5 {\n margin-top: 0.375rem;\n}\n.mt-10 {\n margin-top: 2.5rem;\n}\n.mt-16 {\n margin-top: 4rem;\n}\n.mt-2 {\n margin-top: 0.5rem;\n}\n.mt-3 {\n margin-top: 0.75rem;\n}\n.mt-4 {\n margin-top: 1rem;\n}\n.mt-5 {\n margin-top: 1.25rem;\n}\n.mt-6 {\n margin-top: 1.5rem;\n}\n.mt-8 {\n margin-top: 2rem;\n}\n.mt-auto {\n margin-top: auto;\n}\n.line-clamp-1 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 1;\n}\n.line-clamp-2 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n}\n.block {\n display: block;\n}\n.inline-block {\n display: inline-block;\n}\n.inline {\n display: inline;\n}\n.flex {\n display: flex;\n}\n.inline-flex {\n display: inline-flex;\n}\n.table {\n display: table;\n}\n.grid {\n display: grid;\n}\n.hidden {\n display: none;\n}\n.aspect-square {\n aspect-ratio: 1 / 1;\n}\n.h-0 {\n height: 0px;\n}\n.h-0\\.5 {\n height: 0.125rem;\n}\n.h-1 {\n height: 0.25rem;\n}\n.h-1\\.5 {\n height: 0.375rem;\n}\n.h-10 {\n height: 2.5rem;\n}\n.h-12 {\n height: 3rem;\n}\n.h-14 {\n height: 3.5rem;\n}\n.h-16 {\n height: 4rem;\n}\n.h-2 {\n height: 0.5rem;\n}\n.h-2\\.5 {\n height: 0.625rem;\n}\n.h-20 {\n height: 5rem;\n}\n.h-24 {\n height: 6rem;\n}\n.h-28 {\n height: 7rem;\n}\n.h-3 {\n height: 0.75rem;\n}\n.h-3\\.5 {\n height: 0.875rem;\n}\n.h-4 {\n height: 1rem;\n}\n.h-40 {\n height: 10rem;\n}\n.h-5 {\n height: 1.25rem;\n}\n.h-6 {\n height: 1.5rem;\n}\n.h-7 {\n height: 1.75rem;\n}\n.h-8 {\n height: 2rem;\n}\n.h-9 {\n height: 2.25rem;\n}\n.h-\\[400px\\] {\n height: 400px;\n}\n.h-\\[500px\\] {\n height: 500px;\n}\n.h-\\[calc\\(100vh-80px\\)\\] {\n height: calc(100vh - 80px);\n}\n.h-full {\n height: 100%;\n}\n.h-px {\n height: 1px;\n}\n.max-h-32 {\n max-height: 8rem;\n}\n.max-h-40 {\n max-height: 10rem;\n}\n.max-h-64 {\n max-height: 16rem;\n}\n.max-h-72 {\n max-height: 18rem;\n}\n.max-h-80 {\n max-height: 20rem;\n}\n.max-h-96 {\n max-height: 24rem;\n}\n.max-h-\\[60vh\\] {\n max-height: 60vh;\n}\n.max-h-\\[80vh\\] {\n max-height: 80vh;\n}\n.max-h-\\[85vh\\] {\n max-height: 85vh;\n}\n.max-h-\\[90vh\\] {\n max-height: 90vh;\n}\n.min-h-0 {\n min-height: 0px;\n}\n.min-h-\\[24px\\] {\n min-height: 24px;\n}\n.min-h-\\[28px\\] {\n min-height: 28px;\n}\n.min-h-\\[40px\\] {\n min-height: 40px;\n}\n.min-h-screen {\n min-height: 100vh;\n}\n.w-0 {\n width: 0px;\n}\n.w-1 {\n width: 0.25rem;\n}\n.w-1\\.5 {\n width: 0.375rem;\n}\n.w-1\\/2 {\n width: 50%;\n}\n.w-10 {\n width: 2.5rem;\n}\n.w-11 {\n width: 2.75rem;\n}\n.w-12 {\n width: 3rem;\n}\n.w-14 {\n width: 3.5rem;\n}\n.w-16 {\n width: 4rem;\n}\n.w-2 {\n width: 0.5rem;\n}\n.w-2\\.5 {\n width: 0.625rem;\n}\n.w-20 {\n width: 5rem;\n}\n.w-24 {\n width: 6rem;\n}\n.w-28 {\n width: 7rem;\n}\n.w-3 {\n width: 0.75rem;\n}\n.w-3\\.5 {\n width: 0.875rem;\n}\n.w-4 {\n width: 1rem;\n}\n.w-40 {\n width: 10rem;\n}\n.w-44 {\n width: 11rem;\n}\n.w-5 {\n width: 1.25rem;\n}\n.w-52 {\n width: 13rem;\n}\n.w-56 {\n width: 14rem;\n}\n.w-6 {\n width: 1.5rem;\n}\n.w-7 {\n width: 1.75rem;\n}\n.w-72 {\n width: 18rem;\n}\n.w-8 {\n width: 2rem;\n}\n.w-9 {\n width: 2.25rem;\n}\n.w-\\[400px\\] {\n width: 400px;\n}\n.w-\\[500px\\] {\n width: 500px;\n}\n.w-fit {\n width: -moz-fit-content;\n width: fit-content;\n}\n.w-full {\n width: 100%;\n}\n.w-px {\n width: 1px;\n}\n.min-w-0 {\n min-width: 0px;\n}\n.min-w-32 {\n min-width: 8rem;\n}\n.min-w-72 {\n min-width: 18rem;\n}\n.min-w-\\[140px\\] {\n min-width: 140px;\n}\n.min-w-\\[16px\\] {\n min-width: 16px;\n}\n.min-w-\\[180px\\] {\n min-width: 180px;\n}\n.min-w-\\[200px\\] {\n min-width: 200px;\n}\n.min-w-\\[220px\\] {\n min-width: 220px;\n}\n.min-w-\\[240px\\] {\n min-width: 240px;\n}\n.min-w-fit {\n min-width: -moz-fit-content;\n min-width: fit-content;\n}\n.max-w-2xl {\n max-width: 42rem;\n}\n.max-w-3xl {\n max-width: 48rem;\n}\n.max-w-4xl {\n max-width: 56rem;\n}\n.max-w-5xl {\n max-width: 64rem;\n}\n.max-w-6xl {\n max-width: 72rem;\n}\n.max-w-7xl {\n max-width: 80rem;\n}\n.max-w-\\[100px\\] {\n max-width: 100px;\n}\n.max-w-\\[70\\%\\] {\n max-width: 70%;\n}\n.max-w-\\[90px\\] {\n max-width: 90px;\n}\n.max-w-full {\n max-width: 100%;\n}\n.max-w-lg {\n max-width: 32rem;\n}\n.max-w-md {\n max-width: 28rem;\n}\n.max-w-sm {\n max-width: 24rem;\n}\n.max-w-xl {\n max-width: 36rem;\n}\n.max-w-xs {\n max-width: 20rem;\n}\n.flex-1 {\n flex: 1 1 0%;\n}\n.flex-\\[2\\] {\n flex: 2;\n}\n.flex-shrink-0 {\n flex-shrink: 0;\n}\n.shrink-0 {\n flex-shrink: 0;\n}\n.grow {\n flex-grow: 1;\n}\n.-translate-x-1\\/2 {\n --tw-translate-x: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.-translate-x-12 {\n --tw-translate-x: -3rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.-translate-y-1\\/2 {\n --tw-translate-y: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-x-0 {\n --tw-translate-x: 0px;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-x-1 {\n --tw-translate-x: 0.25rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-x-12 {\n --tw-translate-x: 3rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-x-3 {\n --tw-translate-x: 0.75rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-x-5 {\n --tw-translate-x: 1.25rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-x-6 {\n --tw-translate-x: 1.5rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-y-0 {\n --tw-translate-y: 0px;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-y-4 {\n --tw-translate-y: 1rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-180 {\n --tw-rotate: 180deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-45 {\n --tw-rotate: 45deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-90 {\n --tw-rotate: 90deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.scale-105 {\n --tw-scale-x: 1.05;\n --tw-scale-y: 1.05;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.transform {\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n@keyframes pulse {\n\n 50% {\n opacity: .5;\n }\n}\n.animate-pulse {\n animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n}\n@keyframes spin {\n\n to {\n transform: rotate(360deg);\n }\n}\n.animate-spin {\n animation: spin 1s linear infinite;\n}\n.cursor-default {\n cursor: default;\n}\n.cursor-not-allowed {\n cursor: not-allowed;\n}\n.cursor-pointer {\n cursor: pointer;\n}\n.select-none {\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n.select-all {\n -webkit-user-select: all;\n -moz-user-select: all;\n user-select: all;\n}\n.resize-none {\n resize: none;\n}\n.resize-y {\n resize: vertical;\n}\n.snap-x {\n scroll-snap-type: x var(--tw-scroll-snap-strictness);\n}\n.snap-mandatory {\n --tw-scroll-snap-strictness: mandatory;\n}\n.snap-start {\n scroll-snap-align: start;\n}\n.grid-cols-1 {\n grid-template-columns: repeat(1, minmax(0, 1fr));\n}\n.grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n.grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n}\n.grid-cols-4 {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n}\n.grid-cols-7 {\n grid-template-columns: repeat(7, minmax(0, 1fr));\n}\n.flex-row-reverse {\n flex-direction: row-reverse;\n}\n.flex-col {\n flex-direction: column;\n}\n.flex-wrap {\n flex-wrap: wrap;\n}\n.items-start {\n align-items: flex-start;\n}\n.items-end {\n align-items: flex-end;\n}\n.items-center {\n align-items: center;\n}\n.justify-end {\n justify-content: flex-end;\n}\n.justify-center {\n justify-content: center;\n}\n.justify-between {\n justify-content: space-between;\n}\n.gap-0 {\n gap: 0px;\n}\n.gap-0\\.5 {\n gap: 0.125rem;\n}\n.gap-1 {\n gap: 0.25rem;\n}\n.gap-1\\.5 {\n gap: 0.375rem;\n}\n.gap-10 {\n gap: 2.5rem;\n}\n.gap-2 {\n gap: 0.5rem;\n}\n.gap-2\\.5 {\n gap: 0.625rem;\n}\n.gap-3 {\n gap: 0.75rem;\n}\n.gap-4 {\n gap: 1rem;\n}\n.gap-5 {\n gap: 1.25rem;\n}\n.gap-6 {\n gap: 1.5rem;\n}\n.gap-8 {\n gap: 2rem;\n}\n.gap-y-3 {\n row-gap: 0.75rem;\n}\n.space-y-0\\.5 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.125rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.125rem * var(--tw-space-y-reverse));\n}\n.space-y-1 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.25rem * var(--tw-space-y-reverse));\n}\n.space-y-1\\.5 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.375rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.375rem * var(--tw-space-y-reverse));\n}\n.space-y-16 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(4rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(4rem * var(--tw-space-y-reverse));\n}\n.space-y-2 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.5rem * var(--tw-space-y-reverse));\n}\n.space-y-3 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.75rem * var(--tw-space-y-reverse));\n}\n.space-y-4 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1rem * var(--tw-space-y-reverse));\n}\n.space-y-5 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1.25rem * var(--tw-space-y-reverse));\n}\n.space-y-6 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1.5rem * var(--tw-space-y-reverse));\n}\n.space-y-8 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(2rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(2rem * var(--tw-space-y-reverse));\n}\n.divide-y > :not([hidden]) ~ :not([hidden]) {\n --tw-divide-y-reverse: 0;\n border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));\n border-bottom-width: calc(1px * var(--tw-divide-y-reverse));\n}\n.divide-gray-100 > :not([hidden]) ~ :not([hidden]) {\n --tw-divide-opacity: 1;\n border-color: rgb(243 244 246 / var(--tw-divide-opacity, 1));\n}\n.self-end {\n align-self: flex-end;\n}\n.self-center {\n align-self: center;\n}\n.overflow-hidden {\n overflow: hidden;\n}\n.overflow-x-auto {\n overflow-x: auto;\n}\n.overflow-y-auto {\n overflow-y: auto;\n}\n.truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.whitespace-nowrap {\n white-space: nowrap;\n}\n.whitespace-pre-wrap {\n white-space: pre-wrap;\n}\n.rounded {\n border-radius: 0.25rem;\n}\n.rounded-2xl {\n border-radius: 1rem;\n}\n.rounded-\\[2\\.5rem\\] {\n border-radius: 2.5rem;\n}\n.rounded-full {\n border-radius: 9999px;\n}\n.rounded-lg {\n border-radius: 0.5rem;\n}\n.rounded-md {\n border-radius: 0.375rem;\n}\n.rounded-xl {\n border-radius: 0.75rem;\n}\n.rounded-b-xl {\n border-bottom-right-radius: 0.75rem;\n border-bottom-left-radius: 0.75rem;\n}\n.rounded-t-lg {\n border-top-left-radius: 0.5rem;\n border-top-right-radius: 0.5rem;\n}\n.rounded-tl-sm {\n border-top-left-radius: 0.125rem;\n}\n.rounded-tr-sm {\n border-top-right-radius: 0.125rem;\n}\n.border {\n border-width: 1px;\n}\n.border-0 {\n border-width: 0px;\n}\n.border-2 {\n border-width: 2px;\n}\n.border-y {\n border-top-width: 1px;\n border-bottom-width: 1px;\n}\n.border-b {\n border-bottom-width: 1px;\n}\n.border-b-2 {\n border-bottom-width: 2px;\n}\n.border-l-2 {\n border-left-width: 2px;\n}\n.border-r {\n border-right-width: 1px;\n}\n.border-r-2 {\n border-right-width: 2px;\n}\n.border-t {\n border-top-width: 1px;\n}\n.border-t-0 {\n border-top-width: 0px;\n}\n.border-t-4 {\n border-top-width: 4px;\n}\n.border-dashed {\n border-style: dashed;\n}\n.border-amber-100 {\n --tw-border-opacity: 1;\n border-color: rgb(254 243 199 / var(--tw-border-opacity, 1));\n}\n.border-amber-200 {\n --tw-border-opacity: 1;\n border-color: rgb(253 230 138 / var(--tw-border-opacity, 1));\n}\n.border-amber-300 {\n --tw-border-opacity: 1;\n border-color: rgb(252 211 77 / var(--tw-border-opacity, 1));\n}\n.border-amber-500 {\n --tw-border-opacity: 1;\n border-color: rgb(245 158 11 / var(--tw-border-opacity, 1));\n}\n.border-blue-100 {\n --tw-border-opacity: 1;\n border-color: rgb(219 234 254 / var(--tw-border-opacity, 1));\n}\n.border-blue-200 {\n --tw-border-opacity: 1;\n border-color: rgb(191 219 254 / var(--tw-border-opacity, 1));\n}\n.border-blue-300 {\n --tw-border-opacity: 1;\n border-color: rgb(147 197 253 / var(--tw-border-opacity, 1));\n}\n.border-blue-400 {\n --tw-border-opacity: 1;\n border-color: rgb(96 165 250 / var(--tw-border-opacity, 1));\n}\n.border-blue-50 {\n --tw-border-opacity: 1;\n border-color: rgb(239 246 255 / var(--tw-border-opacity, 1));\n}\n.border-blue-500 {\n --tw-border-opacity: 1;\n border-color: rgb(59 130 246 / var(--tw-border-opacity, 1));\n}\n.border-blue-500\\/10 {\n border-color: rgb(59 130 246 / 0.1);\n}\n.border-blue-500\\/20 {\n border-color: rgb(59 130 246 / 0.2);\n}\n.border-blue-600 {\n --tw-border-opacity: 1;\n border-color: rgb(37 99 235 / var(--tw-border-opacity, 1));\n}\n.border-emerald-100 {\n --tw-border-opacity: 1;\n border-color: rgb(209 250 229 / var(--tw-border-opacity, 1));\n}\n.border-emerald-300 {\n --tw-border-opacity: 1;\n border-color: rgb(110 231 183 / var(--tw-border-opacity, 1));\n}\n.border-emerald-400 {\n --tw-border-opacity: 1;\n border-color: rgb(52 211 153 / var(--tw-border-opacity, 1));\n}\n.border-emerald-500 {\n --tw-border-opacity: 1;\n border-color: rgb(16 185 129 / var(--tw-border-opacity, 1));\n}\n.border-emerald-500\\/20 {\n border-color: rgb(16 185 129 / 0.2);\n}\n.border-gray-100 {\n --tw-border-opacity: 1;\n border-color: rgb(243 244 246 / var(--tw-border-opacity, 1));\n}\n.border-gray-200 {\n --tw-border-opacity: 1;\n border-color: rgb(229 231 235 / var(--tw-border-opacity, 1));\n}\n.border-gray-300 {\n --tw-border-opacity: 1;\n border-color: rgb(209 213 219 / var(--tw-border-opacity, 1));\n}\n.border-gray-50 {\n --tw-border-opacity: 1;\n border-color: rgb(249 250 251 / var(--tw-border-opacity, 1));\n}\n.border-green-100 {\n --tw-border-opacity: 1;\n border-color: rgb(220 252 231 / var(--tw-border-opacity, 1));\n}\n.border-green-200 {\n --tw-border-opacity: 1;\n border-color: rgb(187 247 208 / var(--tw-border-opacity, 1));\n}\n.border-indigo-100 {\n --tw-border-opacity: 1;\n border-color: rgb(224 231 255 / var(--tw-border-opacity, 1));\n}\n.border-orange-100 {\n --tw-border-opacity: 1;\n border-color: rgb(255 237 213 / var(--tw-border-opacity, 1));\n}\n.border-orange-200 {\n --tw-border-opacity: 1;\n border-color: rgb(254 215 170 / var(--tw-border-opacity, 1));\n}\n.border-pink-200 {\n --tw-border-opacity: 1;\n border-color: rgb(251 207 232 / var(--tw-border-opacity, 1));\n}\n.border-purple-100 {\n --tw-border-opacity: 1;\n border-color: rgb(243 232 255 / var(--tw-border-opacity, 1));\n}\n.border-purple-200 {\n --tw-border-opacity: 1;\n border-color: rgb(233 213 255 / var(--tw-border-opacity, 1));\n}\n.border-purple-500\\/10 {\n border-color: rgb(168 85 247 / 0.1);\n}\n.border-red-100 {\n --tw-border-opacity: 1;\n border-color: rgb(254 226 226 / var(--tw-border-opacity, 1));\n}\n.border-red-200 {\n --tw-border-opacity: 1;\n border-color: rgb(254 202 202 / var(--tw-border-opacity, 1));\n}\n.border-red-300 {\n --tw-border-opacity: 1;\n border-color: rgb(252 165 165 / var(--tw-border-opacity, 1));\n}\n.border-red-400 {\n --tw-border-opacity: 1;\n border-color: rgb(248 113 113 / var(--tw-border-opacity, 1));\n}\n.border-rose-100 {\n --tw-border-opacity: 1;\n border-color: rgb(255 228 230 / var(--tw-border-opacity, 1));\n}\n.border-rose-300 {\n --tw-border-opacity: 1;\n border-color: rgb(253 164 175 / var(--tw-border-opacity, 1));\n}\n.border-rose-500 {\n --tw-border-opacity: 1;\n border-color: rgb(244 63 94 / var(--tw-border-opacity, 1));\n}\n.border-sky-100 {\n --tw-border-opacity: 1;\n border-color: rgb(224 242 254 / var(--tw-border-opacity, 1));\n}\n.border-slate-100 {\n --tw-border-opacity: 1;\n border-color: rgb(241 245 249 / var(--tw-border-opacity, 1));\n}\n.border-slate-200 {\n --tw-border-opacity: 1;\n border-color: rgb(226 232 240 / var(--tw-border-opacity, 1));\n}\n.border-teal-100 {\n --tw-border-opacity: 1;\n border-color: rgb(204 251 241 / var(--tw-border-opacity, 1));\n}\n.border-transparent {\n border-color: transparent;\n}\n.border-violet-100 {\n --tw-border-opacity: 1;\n border-color: rgb(237 233 254 / var(--tw-border-opacity, 1));\n}\n.border-white {\n --tw-border-opacity: 1;\n border-color: rgb(255 255 255 / var(--tw-border-opacity, 1));\n}\n.border-white\\/10 {\n border-color: rgb(255 255 255 / 0.1);\n}\n.border-white\\/20 {\n border-color: rgb(255 255 255 / 0.2);\n}\n.border-white\\/30 {\n border-color: rgb(255 255 255 / 0.3);\n}\n.border-white\\/40 {\n border-color: rgb(255 255 255 / 0.4);\n}\n.border-yellow-200 {\n --tw-border-opacity: 1;\n border-color: rgb(254 240 138 / var(--tw-border-opacity, 1));\n}\n.border-l-blue-500 {\n --tw-border-opacity: 1;\n border-left-color: rgb(59 130 246 / var(--tw-border-opacity, 1));\n}\n.border-t-blue-500 {\n --tw-border-opacity: 1;\n border-top-color: rgb(59 130 246 / var(--tw-border-opacity, 1));\n}\n.border-t-transparent {\n border-top-color: transparent;\n}\n.border-t-white {\n --tw-border-opacity: 1;\n border-top-color: rgb(255 255 255 / var(--tw-border-opacity, 1));\n}\n.bg-\\[\\#003087\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(0 48 135 / var(--tw-bg-opacity, 1));\n}\n.bg-amber-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 243 199 / var(--tw-bg-opacity, 1));\n}\n.bg-amber-400 {\n --tw-bg-opacity: 1;\n background-color: rgb(251 191 36 / var(--tw-bg-opacity, 1));\n}\n.bg-amber-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(255 251 235 / var(--tw-bg-opacity, 1));\n}\n.bg-amber-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(245 158 11 / var(--tw-bg-opacity, 1));\n}\n.bg-amber-500\\/10 {\n background-color: rgb(245 158 11 / 0.1);\n}\n.bg-black\\/0 {\n background-color: rgb(0 0 0 / 0);\n}\n.bg-black\\/40 {\n background-color: rgb(0 0 0 / 0.4);\n}\n.bg-black\\/50 {\n background-color: rgb(0 0 0 / 0.5);\n}\n.bg-black\\/60 {\n background-color: rgb(0 0 0 / 0.6);\n}\n.bg-black\\/70 {\n background-color: rgb(0 0 0 / 0.7);\n}\n.bg-black\\/80 {\n background-color: rgb(0 0 0 / 0.8);\n}\n.bg-black\\/85 {\n background-color: rgb(0 0 0 / 0.85);\n}\n.bg-black\\/90 {\n background-color: rgb(0 0 0 / 0.9);\n}\n.bg-blue-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(219 234 254 / var(--tw-bg-opacity, 1));\n}\n.bg-blue-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(239 246 255 / var(--tw-bg-opacity, 1));\n}\n.bg-blue-50\\/30 {\n background-color: rgb(239 246 255 / 0.3);\n}\n.bg-blue-50\\/60 {\n background-color: rgb(239 246 255 / 0.6);\n}\n.bg-blue-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(59 130 246 / var(--tw-bg-opacity, 1));\n}\n.bg-blue-500\\/10 {\n background-color: rgb(59 130 246 / 0.1);\n}\n.bg-blue-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(37 99 235 / var(--tw-bg-opacity, 1));\n}\n.bg-blue-600\\/10 {\n background-color: rgb(37 99 235 / 0.1);\n}\n.bg-emerald-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(209 250 229 / var(--tw-bg-opacity, 1));\n}\n.bg-emerald-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(167 243 208 / var(--tw-bg-opacity, 1));\n}\n.bg-emerald-400 {\n --tw-bg-opacity: 1;\n background-color: rgb(52 211 153 / var(--tw-bg-opacity, 1));\n}\n.bg-emerald-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(236 253 245 / var(--tw-bg-opacity, 1));\n}\n.bg-emerald-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(16 185 129 / var(--tw-bg-opacity, 1));\n}\n.bg-emerald-500\\/10 {\n background-color: rgb(16 185 129 / 0.1);\n}\n.bg-emerald-500\\/20 {\n background-color: rgb(16 185 129 / 0.2);\n}\n.bg-emerald-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(5 150 105 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(209 213 219 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-400 {\n --tw-bg-opacity: 1;\n background-color: rgb(156 163 175 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(75 85 99 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-900 {\n --tw-bg-opacity: 1;\n background-color: rgb(17 24 39 / var(--tw-bg-opacity, 1));\n}\n.bg-green-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(220 252 231 / var(--tw-bg-opacity, 1));\n}\n.bg-green-400 {\n --tw-bg-opacity: 1;\n background-color: rgb(74 222 128 / var(--tw-bg-opacity, 1));\n}\n.bg-green-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(240 253 244 / var(--tw-bg-opacity, 1));\n}\n.bg-green-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(34 197 94 / var(--tw-bg-opacity, 1));\n}\n.bg-green-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(22 163 74 / var(--tw-bg-opacity, 1));\n}\n.bg-indigo-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(224 231 255 / var(--tw-bg-opacity, 1));\n}\n.bg-indigo-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(238 242 255 / var(--tw-bg-opacity, 1));\n}\n.bg-indigo-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(79 70 229 / var(--tw-bg-opacity, 1));\n}\n.bg-orange-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(255 237 213 / var(--tw-bg-opacity, 1));\n}\n.bg-orange-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(255 247 237 / var(--tw-bg-opacity, 1));\n}\n.bg-orange-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(249 115 22 / var(--tw-bg-opacity, 1));\n}\n.bg-pink-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(253 242 248 / var(--tw-bg-opacity, 1));\n}\n.bg-purple-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(243 232 255 / var(--tw-bg-opacity, 1));\n}\n.bg-purple-400 {\n --tw-bg-opacity: 1;\n background-color: rgb(192 132 252 / var(--tw-bg-opacity, 1));\n}\n.bg-purple-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(250 245 255 / var(--tw-bg-opacity, 1));\n}\n.bg-purple-500\\/10 {\n background-color: rgb(168 85 247 / 0.1);\n}\n.bg-purple-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(147 51 234 / var(--tw-bg-opacity, 1));\n}\n.bg-red-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 226 226 / var(--tw-bg-opacity, 1));\n}\n.bg-red-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 202 202 / var(--tw-bg-opacity, 1));\n}\n.bg-red-400 {\n --tw-bg-opacity: 1;\n background-color: rgb(248 113 113 / var(--tw-bg-opacity, 1));\n}\n.bg-red-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 242 242 / var(--tw-bg-opacity, 1));\n}\n.bg-red-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(239 68 68 / var(--tw-bg-opacity, 1));\n}\n.bg-rose-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(255 241 242 / var(--tw-bg-opacity, 1));\n}\n.bg-rose-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(225 29 72 / var(--tw-bg-opacity, 1));\n}\n.bg-sky-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(240 249 255 / var(--tw-bg-opacity, 1));\n}\n.bg-sky-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(14 165 233 / var(--tw-bg-opacity, 1));\n}\n.bg-slate-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(241 245 249 / var(--tw-bg-opacity, 1));\n}\n.bg-slate-900 {\n --tw-bg-opacity: 1;\n background-color: rgb(15 23 42 / var(--tw-bg-opacity, 1));\n}\n.bg-teal-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(240 253 250 / var(--tw-bg-opacity, 1));\n}\n.bg-violet-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(245 243 255 / var(--tw-bg-opacity, 1));\n}\n.bg-violet-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(139 92 246 / var(--tw-bg-opacity, 1));\n}\n.bg-white {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));\n}\n.bg-white\\/10 {\n background-color: rgb(255 255 255 / 0.1);\n}\n.bg-white\\/15 {\n background-color: rgb(255 255 255 / 0.15);\n}\n.bg-white\\/20 {\n background-color: rgb(255 255 255 / 0.2);\n}\n.bg-white\\/60 {\n background-color: rgb(255 255 255 / 0.6);\n}\n.bg-white\\/80 {\n background-color: rgb(255 255 255 / 0.8);\n}\n.bg-white\\/90 {\n background-color: rgb(255 255 255 / 0.9);\n}\n.bg-yellow-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 249 195 / var(--tw-bg-opacity, 1));\n}\n.bg-yellow-400 {\n --tw-bg-opacity: 1;\n background-color: rgb(250 204 21 / var(--tw-bg-opacity, 1));\n}\n.bg-yellow-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 252 232 / var(--tw-bg-opacity, 1));\n}\n.bg-yellow-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(234 179 8 / var(--tw-bg-opacity, 1));\n}\n.bg-gradient-to-br {\n background-image: linear-gradient(to bottom right, var(--tw-gradient-stops));\n}\n.bg-gradient-to-r {\n background-image: linear-gradient(to right, var(--tw-gradient-stops));\n}\n.bg-gradient-to-t {\n background-image: linear-gradient(to top, var(--tw-gradient-stops));\n}\n.from-amber-400 {\n --tw-gradient-from: #fbbf24 var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(251 191 36 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.from-amber-50 {\n --tw-gradient-from: #fffbeb var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(255 251 235 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.from-amber-500 {\n --tw-gradient-from: #f59e0b var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(245 158 11 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.from-black\\/60 {\n --tw-gradient-from: rgb(0 0 0 / 0.6) var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.from-blue-500 {\n --tw-gradient-from: #3b82f6 var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.from-blue-700 {\n --tw-gradient-from: #1d4ed8 var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(29 78 216 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.from-indigo-100 {\n --tw-gradient-from: #e0e7ff var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(224 231 255 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.from-orange-400 {\n --tw-gradient-from: #fb923c var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(251 146 60 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.via-transparent {\n --tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), transparent var(--tw-gradient-via-position), var(--tw-gradient-to);\n}\n.via-yellow-400 {\n --tw-gradient-to: rgb(250 204 21 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), #facc15 var(--tw-gradient-via-position), var(--tw-gradient-to);\n}\n.to-amber-400 {\n --tw-gradient-to: #fbbf24 var(--tw-gradient-to-position);\n}\n.to-amber-50 {\n --tw-gradient-to: #fffbeb var(--tw-gradient-to-position);\n}\n.to-blue-500 {\n --tw-gradient-to: #3b82f6 var(--tw-gradient-to-position);\n}\n.to-orange-400 {\n --tw-gradient-to: #fb923c var(--tw-gradient-to-position);\n}\n.to-purple-500 {\n --tw-gradient-to: #a855f7 var(--tw-gradient-to-position);\n}\n.to-transparent {\n --tw-gradient-to: transparent var(--tw-gradient-to-position);\n}\n.to-yellow-50 {\n --tw-gradient-to: #fefce8 var(--tw-gradient-to-position);\n}\n.to-yellow-500 {\n --tw-gradient-to: #eab308 var(--tw-gradient-to-position);\n}\n.bg-clip-text {\n -webkit-background-clip: text;\n background-clip: text;\n}\n.fill-gray-900 {\n fill: #111827;\n}\n.object-contain {\n -o-object-fit: contain;\n object-fit: contain;\n}\n.object-cover {\n -o-object-fit: cover;\n object-fit: cover;\n}\n.p-0 {\n padding: 0px;\n}\n.p-1 {\n padding: 0.25rem;\n}\n.p-10 {\n padding: 2.5rem;\n}\n.p-2 {\n padding: 0.5rem;\n}\n.p-2\\.5 {\n padding: 0.625rem;\n}\n.p-3 {\n padding: 0.75rem;\n}\n.p-4 {\n padding: 1rem;\n}\n.p-5 {\n padding: 1.25rem;\n}\n.p-6 {\n padding: 1.5rem;\n}\n.p-8 {\n padding: 2rem;\n}\n.px-0\\.5 {\n padding-left: 0.125rem;\n padding-right: 0.125rem;\n}\n.px-1 {\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n}\n.px-1\\.5 {\n padding-left: 0.375rem;\n padding-right: 0.375rem;\n}\n.px-2 {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n.px-2\\.5 {\n padding-left: 0.625rem;\n padding-right: 0.625rem;\n}\n.px-3 {\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n}\n.px-3\\.5 {\n padding-left: 0.875rem;\n padding-right: 0.875rem;\n}\n.px-4 {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n.px-5 {\n padding-left: 1.25rem;\n padding-right: 1.25rem;\n}\n.px-6 {\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n}\n.px-7 {\n padding-left: 1.75rem;\n padding-right: 1.75rem;\n}\n.px-8 {\n padding-left: 2rem;\n padding-right: 2rem;\n}\n.py-0\\.5 {\n padding-top: 0.125rem;\n padding-bottom: 0.125rem;\n}\n.py-1 {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n}\n.py-1\\.5 {\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n}\n.py-10 {\n padding-top: 2.5rem;\n padding-bottom: 2.5rem;\n}\n.py-12 {\n padding-top: 3rem;\n padding-bottom: 3rem;\n}\n.py-14 {\n padding-top: 3.5rem;\n padding-bottom: 3.5rem;\n}\n.py-16 {\n padding-top: 4rem;\n padding-bottom: 4rem;\n}\n.py-2 {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n.py-2\\.5 {\n padding-top: 0.625rem;\n padding-bottom: 0.625rem;\n}\n.py-20 {\n padding-top: 5rem;\n padding-bottom: 5rem;\n}\n.py-24 {\n padding-top: 6rem;\n padding-bottom: 6rem;\n}\n.py-3 {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n}\n.py-3\\.5 {\n padding-top: 0.875rem;\n padding-bottom: 0.875rem;\n}\n.py-4 {\n padding-top: 1rem;\n padding-bottom: 1rem;\n}\n.py-5 {\n padding-top: 1.25rem;\n padding-bottom: 1.25rem;\n}\n.py-6 {\n padding-top: 1.5rem;\n padding-bottom: 1.5rem;\n}\n.py-8 {\n padding-top: 2rem;\n padding-bottom: 2rem;\n}\n.pb-0\\.5 {\n padding-bottom: 0.125rem;\n}\n.pb-1 {\n padding-bottom: 0.25rem;\n}\n.pb-2 {\n padding-bottom: 0.5rem;\n}\n.pb-20 {\n padding-bottom: 5rem;\n}\n.pb-4 {\n padding-bottom: 1rem;\n}\n.pb-5 {\n padding-bottom: 1.25rem;\n}\n.pl-10 {\n padding-left: 2.5rem;\n}\n.pl-12 {\n padding-left: 3rem;\n}\n.pl-5 {\n padding-left: 1.25rem;\n}\n.pl-7 {\n padding-left: 1.75rem;\n}\n.pl-8 {\n padding-left: 2rem;\n}\n.pr-14 {\n padding-right: 3.5rem;\n}\n.pr-2 {\n padding-right: 0.5rem;\n}\n.pr-24 {\n padding-right: 6rem;\n}\n.pr-3 {\n padding-right: 0.75rem;\n}\n.pr-4 {\n padding-right: 1rem;\n}\n.pt-1 {\n padding-top: 0.25rem;\n}\n.pt-10 {\n padding-top: 2.5rem;\n}\n.pt-16 {\n padding-top: 4rem;\n}\n.pt-2 {\n padding-top: 0.5rem;\n}\n.pt-3 {\n padding-top: 0.75rem;\n}\n.pt-4 {\n padding-top: 1rem;\n}\n.pt-6 {\n padding-top: 1.5rem;\n}\n.pt-8 {\n padding-top: 2rem;\n}\n.text-left {\n text-align: left;\n}\n.text-center {\n text-align: center;\n}\n.text-right {\n text-align: right;\n}\n.align-top {\n vertical-align: top;\n}\n.font-mono {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n.text-2xl {\n font-size: 1.5rem;\n line-height: 2rem;\n}\n.text-3xl {\n font-size: 1.875rem;\n line-height: 2.25rem;\n}\n.text-4xl {\n font-size: 2.25rem;\n line-height: 2.5rem;\n}\n.text-5xl {\n font-size: 3rem;\n line-height: 1;\n}\n.text-8xl {\n font-size: 6rem;\n line-height: 1;\n}\n.text-\\[10px\\] {\n font-size: 10px;\n}\n.text-\\[11px\\] {\n font-size: 11px;\n}\n.text-\\[8px\\] {\n font-size: 8px;\n}\n.text-\\[9px\\] {\n font-size: 9px;\n}\n.text-base {\n font-size: 1rem;\n line-height: 1.5rem;\n}\n.text-lg {\n font-size: 1.125rem;\n line-height: 1.75rem;\n}\n.text-sm {\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n.text-xl {\n font-size: 1.25rem;\n line-height: 1.75rem;\n}\n.text-xs {\n font-size: 0.75rem;\n line-height: 1rem;\n}\n.font-bold {\n font-weight: 700;\n}\n.font-extrabold {\n font-weight: 800;\n}\n.font-medium {\n font-weight: 500;\n}\n.font-normal {\n font-weight: 400;\n}\n.font-semibold {\n font-weight: 600;\n}\n.uppercase {\n text-transform: uppercase;\n}\n.italic {\n font-style: italic;\n}\n.leading-none {\n line-height: 1;\n}\n.leading-relaxed {\n line-height: 1.625;\n}\n.leading-snug {\n line-height: 1.375;\n}\n.leading-tight {\n line-height: 1.25;\n}\n.tracking-tight {\n letter-spacing: -0.025em;\n}\n.tracking-wide {\n letter-spacing: 0.025em;\n}\n.tracking-wider {\n letter-spacing: 0.05em;\n}\n.text-amber-400 {\n --tw-text-opacity: 1;\n color: rgb(251 191 36 / var(--tw-text-opacity, 1));\n}\n.text-amber-500 {\n --tw-text-opacity: 1;\n color: rgb(245 158 11 / var(--tw-text-opacity, 1));\n}\n.text-amber-600 {\n --tw-text-opacity: 1;\n color: rgb(217 119 6 / var(--tw-text-opacity, 1));\n}\n.text-amber-700 {\n --tw-text-opacity: 1;\n color: rgb(180 83 9 / var(--tw-text-opacity, 1));\n}\n.text-amber-800 {\n --tw-text-opacity: 1;\n color: rgb(146 64 14 / var(--tw-text-opacity, 1));\n}\n.text-amber-900 {\n --tw-text-opacity: 1;\n color: rgb(120 53 15 / var(--tw-text-opacity, 1));\n}\n.text-blue-100 {\n --tw-text-opacity: 1;\n color: rgb(219 234 254 / var(--tw-text-opacity, 1));\n}\n.text-blue-300 {\n --tw-text-opacity: 1;\n color: rgb(147 197 253 / var(--tw-text-opacity, 1));\n}\n.text-blue-400 {\n --tw-text-opacity: 1;\n color: rgb(96 165 250 / var(--tw-text-opacity, 1));\n}\n.text-blue-500 {\n --tw-text-opacity: 1;\n color: rgb(59 130 246 / var(--tw-text-opacity, 1));\n}\n.text-blue-600 {\n --tw-text-opacity: 1;\n color: rgb(37 99 235 / var(--tw-text-opacity, 1));\n}\n.text-blue-700 {\n --tw-text-opacity: 1;\n color: rgb(29 78 216 / var(--tw-text-opacity, 1));\n}\n.text-blue-800 {\n --tw-text-opacity: 1;\n color: rgb(30 64 175 / var(--tw-text-opacity, 1));\n}\n.text-blue-900 {\n --tw-text-opacity: 1;\n color: rgb(30 58 138 / var(--tw-text-opacity, 1));\n}\n.text-emerald-400 {\n --tw-text-opacity: 1;\n color: rgb(52 211 153 / var(--tw-text-opacity, 1));\n}\n.text-emerald-500 {\n --tw-text-opacity: 1;\n color: rgb(16 185 129 / var(--tw-text-opacity, 1));\n}\n.text-emerald-600 {\n --tw-text-opacity: 1;\n color: rgb(5 150 105 / var(--tw-text-opacity, 1));\n}\n.text-emerald-700 {\n --tw-text-opacity: 1;\n color: rgb(4 120 87 / var(--tw-text-opacity, 1));\n}\n.text-emerald-800 {\n --tw-text-opacity: 1;\n color: rgb(6 95 70 / var(--tw-text-opacity, 1));\n}\n.text-emerald-900 {\n --tw-text-opacity: 1;\n color: rgb(6 78 59 / var(--tw-text-opacity, 1));\n}\n.text-gray-200 {\n --tw-text-opacity: 1;\n color: rgb(229 231 235 / var(--tw-text-opacity, 1));\n}\n.text-gray-300 {\n --tw-text-opacity: 1;\n color: rgb(209 213 219 / var(--tw-text-opacity, 1));\n}\n.text-gray-400 {\n --tw-text-opacity: 1;\n color: rgb(156 163 175 / var(--tw-text-opacity, 1));\n}\n.text-gray-500 {\n --tw-text-opacity: 1;\n color: rgb(107 114 128 / var(--tw-text-opacity, 1));\n}\n.text-gray-600 {\n --tw-text-opacity: 1;\n color: rgb(75 85 99 / var(--tw-text-opacity, 1));\n}\n.text-gray-700 {\n --tw-text-opacity: 1;\n color: rgb(55 65 81 / var(--tw-text-opacity, 1));\n}\n.text-gray-800 {\n --tw-text-opacity: 1;\n color: rgb(31 41 55 / var(--tw-text-opacity, 1));\n}\n.text-gray-900 {\n --tw-text-opacity: 1;\n color: rgb(17 24 39 / var(--tw-text-opacity, 1));\n}\n.text-green-400 {\n --tw-text-opacity: 1;\n color: rgb(74 222 128 / var(--tw-text-opacity, 1));\n}\n.text-green-500 {\n --tw-text-opacity: 1;\n color: rgb(34 197 94 / var(--tw-text-opacity, 1));\n}\n.text-green-600 {\n --tw-text-opacity: 1;\n color: rgb(22 163 74 / var(--tw-text-opacity, 1));\n}\n.text-green-700 {\n --tw-text-opacity: 1;\n color: rgb(21 128 61 / var(--tw-text-opacity, 1));\n}\n.text-green-800 {\n --tw-text-opacity: 1;\n color: rgb(22 101 52 / var(--tw-text-opacity, 1));\n}\n.text-indigo-500 {\n --tw-text-opacity: 1;\n color: rgb(99 102 241 / var(--tw-text-opacity, 1));\n}\n.text-indigo-600 {\n --tw-text-opacity: 1;\n color: rgb(79 70 229 / var(--tw-text-opacity, 1));\n}\n.text-indigo-700 {\n --tw-text-opacity: 1;\n color: rgb(67 56 202 / var(--tw-text-opacity, 1));\n}\n.text-orange-400 {\n --tw-text-opacity: 1;\n color: rgb(251 146 60 / var(--tw-text-opacity, 1));\n}\n.text-orange-500 {\n --tw-text-opacity: 1;\n color: rgb(249 115 22 / var(--tw-text-opacity, 1));\n}\n.text-orange-600 {\n --tw-text-opacity: 1;\n color: rgb(234 88 12 / var(--tw-text-opacity, 1));\n}\n.text-orange-700 {\n --tw-text-opacity: 1;\n color: rgb(194 65 12 / var(--tw-text-opacity, 1));\n}\n.text-orange-800 {\n --tw-text-opacity: 1;\n color: rgb(154 52 18 / var(--tw-text-opacity, 1));\n}\n.text-pink-400 {\n --tw-text-opacity: 1;\n color: rgb(244 114 182 / var(--tw-text-opacity, 1));\n}\n.text-pink-500 {\n --tw-text-opacity: 1;\n color: rgb(236 72 153 / var(--tw-text-opacity, 1));\n}\n.text-pink-600 {\n --tw-text-opacity: 1;\n color: rgb(219 39 119 / var(--tw-text-opacity, 1));\n}\n.text-purple-400 {\n --tw-text-opacity: 1;\n color: rgb(192 132 252 / var(--tw-text-opacity, 1));\n}\n.text-purple-500 {\n --tw-text-opacity: 1;\n color: rgb(168 85 247 / var(--tw-text-opacity, 1));\n}\n.text-purple-600 {\n --tw-text-opacity: 1;\n color: rgb(147 51 234 / var(--tw-text-opacity, 1));\n}\n.text-purple-700 {\n --tw-text-opacity: 1;\n color: rgb(126 34 206 / var(--tw-text-opacity, 1));\n}\n.text-red-400 {\n --tw-text-opacity: 1;\n color: rgb(248 113 113 / var(--tw-text-opacity, 1));\n}\n.text-red-500 {\n --tw-text-opacity: 1;\n color: rgb(239 68 68 / var(--tw-text-opacity, 1));\n}\n.text-red-600 {\n --tw-text-opacity: 1;\n color: rgb(220 38 38 / var(--tw-text-opacity, 1));\n}\n.text-red-700 {\n --tw-text-opacity: 1;\n color: rgb(185 28 28 / var(--tw-text-opacity, 1));\n}\n.text-rose-700 {\n --tw-text-opacity: 1;\n color: rgb(190 18 60 / var(--tw-text-opacity, 1));\n}\n.text-rose-800 {\n --tw-text-opacity: 1;\n color: rgb(159 18 57 / var(--tw-text-opacity, 1));\n}\n.text-rose-900 {\n --tw-text-opacity: 1;\n color: rgb(136 19 55 / var(--tw-text-opacity, 1));\n}\n.text-sky-600 {\n --tw-text-opacity: 1;\n color: rgb(2 132 199 / var(--tw-text-opacity, 1));\n}\n.text-sky-700 {\n --tw-text-opacity: 1;\n color: rgb(3 105 161 / var(--tw-text-opacity, 1));\n}\n.text-slate-300 {\n --tw-text-opacity: 1;\n color: rgb(203 213 225 / var(--tw-text-opacity, 1));\n}\n.text-slate-400 {\n --tw-text-opacity: 1;\n color: rgb(148 163 184 / var(--tw-text-opacity, 1));\n}\n.text-slate-500 {\n --tw-text-opacity: 1;\n color: rgb(100 116 139 / var(--tw-text-opacity, 1));\n}\n.text-slate-600 {\n --tw-text-opacity: 1;\n color: rgb(71 85 105 / var(--tw-text-opacity, 1));\n}\n.text-slate-700 {\n --tw-text-opacity: 1;\n color: rgb(51 65 85 / var(--tw-text-opacity, 1));\n}\n.text-slate-900 {\n --tw-text-opacity: 1;\n color: rgb(15 23 42 / var(--tw-text-opacity, 1));\n}\n.text-teal-700 {\n --tw-text-opacity: 1;\n color: rgb(15 118 110 / var(--tw-text-opacity, 1));\n}\n.text-transparent {\n color: transparent;\n}\n.text-violet-600 {\n --tw-text-opacity: 1;\n color: rgb(124 58 237 / var(--tw-text-opacity, 1));\n}\n.text-violet-700 {\n --tw-text-opacity: 1;\n color: rgb(109 40 217 / var(--tw-text-opacity, 1));\n}\n.text-white {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity, 1));\n}\n.text-white\\/50 {\n color: rgb(255 255 255 / 0.5);\n}\n.text-white\\/60 {\n color: rgb(255 255 255 / 0.6);\n}\n.text-white\\/70 {\n color: rgb(255 255 255 / 0.7);\n}\n.text-white\\/80 {\n color: rgb(255 255 255 / 0.8);\n}\n.text-white\\/90 {\n color: rgb(255 255 255 / 0.9);\n}\n.text-yellow-300 {\n --tw-text-opacity: 1;\n color: rgb(253 224 71 / var(--tw-text-opacity, 1));\n}\n.text-yellow-400 {\n --tw-text-opacity: 1;\n color: rgb(250 204 21 / var(--tw-text-opacity, 1));\n}\n.text-yellow-500 {\n --tw-text-opacity: 1;\n color: rgb(234 179 8 / var(--tw-text-opacity, 1));\n}\n.text-yellow-600 {\n --tw-text-opacity: 1;\n color: rgb(202 138 4 / var(--tw-text-opacity, 1));\n}\n.text-yellow-700 {\n --tw-text-opacity: 1;\n color: rgb(161 98 7 / var(--tw-text-opacity, 1));\n}\n.text-yellow-800 {\n --tw-text-opacity: 1;\n color: rgb(133 77 14 / var(--tw-text-opacity, 1));\n}\n.underline {\n text-decoration-line: underline;\n}\n.line-through {\n text-decoration-line: line-through;\n}\n.opacity-0 {\n opacity: 0;\n}\n.opacity-100 {\n opacity: 1;\n}\n.opacity-25 {\n opacity: 0.25;\n}\n.opacity-40 {\n opacity: 0.4;\n}\n.opacity-50 {\n opacity: 0.5;\n}\n.opacity-60 {\n opacity: 0.6;\n}\n.opacity-70 {\n opacity: 0.7;\n}\n.opacity-75 {\n opacity: 0.75;\n}\n.shadow {\n --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-2xl {\n --tw-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25);\n --tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-lg {\n --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-md {\n --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-sm {\n --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-xl {\n --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-amber-100 {\n --tw-shadow-color: #fef3c7;\n --tw-shadow: var(--tw-shadow-colored);\n}\n.shadow-amber-300\\/50 {\n --tw-shadow-color: rgb(252 211 77 / 0.5);\n --tw-shadow: var(--tw-shadow-colored);\n}\n.shadow-amber-500\\/25 {\n --tw-shadow-color: rgb(245 158 11 / 0.25);\n --tw-shadow: var(--tw-shadow-colored);\n}\n.\\!ring-2 {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000) !important;\n}\n.ring-2 {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.ring-4 {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.\\!ring-blue-500 {\n --tw-ring-opacity: 1 !important;\n --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1)) !important;\n}\n.ring-blue-200 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(191 219 254 / var(--tw-ring-opacity, 1));\n}\n.ring-blue-400 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(96 165 250 / var(--tw-ring-opacity, 1));\n}\n.ring-blue-500 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1));\n}\n.\\!ring-offset-1 {\n --tw-ring-offset-width: 1px !important;\n}\n.ring-offset-1 {\n --tw-ring-offset-width: 1px;\n}\n.ring-offset-2 {\n --tw-ring-offset-width: 2px;\n}\n.blur {\n --tw-blur: blur(8px);\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.blur-\\[100px\\] {\n --tw-blur: blur(100px);\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.blur-\\[120px\\] {\n --tw-blur: blur(120px);\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.drop-shadow {\n --tw-drop-shadow: drop-shadow(0 1px 2px rgb(0 0 0 / 0.1)) drop-shadow(0 1px 1px rgb(0 0 0 / 0.06));\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.drop-shadow-lg {\n --tw-drop-shadow: drop-shadow(0 10px 8px rgb(0 0 0 / 0.04)) drop-shadow(0 4px 3px rgb(0 0 0 / 0.1));\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.filter {\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.backdrop-blur {\n --tw-backdrop-blur: blur(8px);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n.backdrop-blur-md {\n --tw-backdrop-blur: blur(12px);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n.backdrop-blur-sm {\n --tw-backdrop-blur: blur(4px);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n.backdrop-blur-xl {\n --tw-backdrop-blur: blur(24px);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n.transition {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-all {\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-colors {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-opacity {\n transition-property: opacity;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-transform {\n transition-property: transform;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.duration-200 {\n transition-duration: 200ms;\n}\n.duration-300 {\n transition-duration: 300ms;\n}\n.duration-500 {\n transition-duration: 500ms;\n}\n.ease-in-out {\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n\n:root {\n --blue-main: #2563eb;\n --blue-light: #60a5fa;\n --blue-dark: #1e40af;\n --orange-main: #f59e0b;\n --orange-light: #fbbf24;\n --orange-dark: #b45309;\n --glass-bg: rgba(255,255,255,0.65);\n --glass-blur: 18px;\n}\n\nbody {\n background: linear-gradient(135deg, var(--blue-main) 0%, var(--blue-light) 60%, var(--orange-light) 100%);\n color: #18181b;\n font-family: 'Inter', 'Segoe UI', Arial, sans-serif;\n min-height: 100vh;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n\n/* Section highlight styles */\n/* Glassmorphism section style */\n.section-contrast {\n background: var(--glass-bg);\n border-radius: 2.5rem;\n box-shadow: 0 8px 40px 0 rgba(37,99,235,0.10), 0 1.5px 8px 0 rgba(245,158,11,0.08);\n border: 1.5px solid rgba(96,165,250,0.13);\n margin-bottom: 3.5rem;\n padding: 3rem 1.5rem;\n backdrop-filter: blur(var(--glass-blur));\n -webkit-backdrop-filter: blur(var(--glass-blur));\n transition: box-shadow 0.3s, background 0.3s;\n}\n.section-contrast:before {\n display: none;\n}\n@media (min-width: 640px) {\n .section-contrast {\n padding: 4rem 2.5rem;\n margin-left: 1.5rem;\n margin-right: 1.5rem;\n }\n}\n@media (min-width: 1024px) {\n .section-contrast {\n margin-left: 2.5rem;\n margin-right: 2.5rem;\n }\n}\n\n/* Accent button */\n.btn-accent {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n background: var(--blue-main);\n color: #fff;\n font-weight: 700;\n border-radius: 1.2em;\n box-shadow: 0 4px 24px 0 rgba(37,99,235,0.13);\n padding: 0.9em 2.2em;\n font-size: 1.25rem;\n letter-spacing: 0.01em;\n transition: background 0.2s, box-shadow 0.2s, transform 0.15s;\n border: none;\n cursor: pointer;\n}\n.btn-accent:hover {\n background: var(--blue-dark);\n box-shadow: 0 8px 32px 0 rgba(245,158,11,0.13);\n transform: translateY(-2px) scale(1.03);\n}\n\n/* Outline button — same shape as btn-accent, white background */\n.btn-outline {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n background: #fff;\n color: var(--blue-main);\n font-weight: 700;\n border-radius: 1.2em;\n box-shadow: 0 4px 24px 0 rgba(37,99,235,0.10);\n padding: 0.9em 2.2em;\n font-size: 1.25rem;\n letter-spacing: 0.01em;\n border: 2px solid var(--blue-main);\n cursor: pointer;\n transition: background 0.2s, box-shadow 0.2s, transform 0.15s, color 0.2s;\n}\n.btn-outline:hover {\n background: var(--blue-main);\n color: #fff;\n box-shadow: 0 8px 32px 0 rgba(37,99,235,0.18);\n transform: translateY(-2px) scale(1.03);\n}\n\n/* Modern card */\n.modern-card {\n background: #fff;\n border-radius: 1.5rem;\n box-shadow: 0 2px 16px 0 rgba(37,99,235,0.07), 0 1.5px 8px 0 rgba(245,158,11,0.06);\n border: 1.5px solid rgba(96,165,250,0.09);\n transition: box-shadow 0.2s, border 0.2s;\n}\n.modern-card:hover {\n box-shadow: 0 8px 32px 0 rgba(245,158,11,0.13);\n border: 1.5px solid var(--orange-main);\n}\n\n/* Floating hero icons */\n@keyframes heroIconFloat {\n 0%, 100% { transform: translateY(0px) rotate(0deg); }\n 50% { transform: translateY(-14px) rotate(4deg); }\n}\n@keyframes heroIconDrift {\n 0%, 100% { transform: translateY(0px) rotate(0deg); }\n 33% { transform: translateY(-10px) rotate(-5deg); }\n 66% { transform: translateY(-6px) rotate(3deg); }\n}\n@keyframes heroIconSway {\n 0%, 100% { transform: translateY(0px) translateX(0px); }\n 50% { transform: translateY(-8px) translateX(6px); }\n}\n\n/* Animated gradient background for hero */\n.hero-bg-animated {\n background: linear-gradient(120deg, var(--blue-main) 0%, var(--blue-light) 60%, var(--orange-main) 100%);\n background-size: 200% 200%;\n animation: heroGradientMove 6s ease-in-out infinite;\n}\n@keyframes heroGradientMove {\n 0% { background-position: 0% 50%; }\n 50% { background-position: 100% 50%; }\n 100% { background-position: 0% 50%; }\n}\n\n/* Header shrink effect */\n.header-base {\n transition: all 0.3s cubic-bezier(.4,0,.2,1);\n}\n.header-shrink .header-content {\n height: 48px !important;\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n.header-shrink .logo-text {\n font-size: 1.3rem !important;\n letter-spacing: 0.01em;\n}\n\n.logo-text {\n font-family: 'Showpop', sans-serif !important;\n font-size: 1.7rem !important;\n font-weight: 300 !important;\n letter-spacing: 0.01em;\n text-transform: uppercase;\n}\n\n.logo-text-mini {\n font-family: 'Showpop', sans-serif !important;\n font-size: 1.3rem !important;\n font-weight: 300 !important;\n letter-spacing: 0.01em;\n text-transform: uppercase;\n transition: font-size 0.3s ease;\n}\n\n.logo-text-mini.scrolled {\n font-size: 1.1rem !important;\n}\n\n/* ── Site theme (dark = default) ── */\n.site-theme {\n --site-bg: #0a0a0f;\n --site-surface: rgba(255,255,255,0.03);\n --site-surface-hover: rgba(255,255,255,0.06);\n --site-border: rgba(255,255,255,0.05);\n --site-border-hover: rgba(255,255,255,0.1);\n --site-text: #ffffff;\n --site-text-secondary: rgba(255,255,255,0.5);\n --site-text-muted: rgba(255,255,255,0.3);\n --site-text-hint: rgba(255,255,255,0.2);\n --site-nav-bg: rgba(10,10,15,0.8);\n --site-modal-bg: #14141f;\n --site-input-bg: rgba(255,255,255,0.05);\n --site-input-border: rgba(255,255,255,0.1);\n --site-input-text: #ffffff;\n --site-input-placeholder: rgba(255,255,255,0.2);\n --site-tag-bg: rgba(255,255,255,0.05);\n --site-tag-border: rgba(255,255,255,0.05);\n --site-tag-text: rgba(255,255,255,0.6);\n --site-card-bg: rgba(255,255,255,0.03);\n --site-card-border: rgba(255,255,255,0.05);\n --site-name-from: #ffffff;\n --site-name-to: rgba(255,255,255,0.7);\n --site-avatar-border: rgba(255,255,255,0.1);\n --site-avatar-bg: rgba(255,255,255,0.05);\n --site-status-border-color: #0a0a0f;\n --site-phone-bg: rgba(255,255,255,0.05);\n --site-phone-border: rgba(255,255,255,0.1);\n --site-phone-text: #ffffff;\n --site-divider: rgba(255,255,255,0.1);\n --site-lang-dropdown: #1a1a24;\n --site-footer-text: rgba(255,255,255,0.2);\n --site-scroll-btn-bg: rgba(255,255,255,0.1);\n --site-scroll-btn-border: rgba(255,255,255,0.1);\n --site-scroll-btn-text: rgba(255,255,255,0.6);\n}\n\n.site-theme.site-light {\n --site-bg: #f8f9fb;\n --site-surface: rgba(0,0,0,0.02);\n --site-surface-hover: rgba(0,0,0,0.04);\n --site-border: rgba(0,0,0,0.08);\n --site-border-hover: rgba(0,0,0,0.15);\n --site-text: #1a1a2e;\n --site-text-secondary: rgba(0,0,0,0.55);\n --site-text-muted: rgba(0,0,0,0.4);\n --site-text-hint: rgba(0,0,0,0.25);\n --site-nav-bg: rgba(255,255,255,0.85);\n --site-modal-bg: #ffffff;\n --site-input-bg: rgba(0,0,0,0.03);\n --site-input-border: rgba(0,0,0,0.12);\n --site-input-text: #1a1a2e;\n --site-input-placeholder: rgba(0,0,0,0.3);\n --site-tag-bg: rgba(0,0,0,0.04);\n --site-tag-border: rgba(0,0,0,0.08);\n --site-tag-text: rgba(0,0,0,0.6);\n --site-card-bg: #ffffff;\n --site-card-border: rgba(0,0,0,0.08);\n --site-name-from: #1a1a2e;\n --site-name-to: rgba(26,26,46,0.7);\n --site-avatar-border: rgba(0,0,0,0.1);\n --site-avatar-bg: rgba(0,0,0,0.05);\n --site-status-border-color: #f8f9fb;\n --site-phone-bg: rgba(0,0,0,0.04);\n --site-phone-border: rgba(0,0,0,0.1);\n --site-phone-text: #1a1a2e;\n --site-divider: rgba(0,0,0,0.08);\n --site-lang-dropdown: #ffffff;\n --site-footer-text: rgba(0,0,0,0.3);\n --site-scroll-btn-bg: rgba(0,0,0,0.06);\n --site-scroll-btn-border: rgba(0,0,0,0.1);\n --site-scroll-btn-text: rgba(0,0,0,0.5);\n}\n\n.logo-text-jaipur {\n font-family: 'Jaipur', 'Inter', 'Segoe UI', Arial, sans-serif !important;\n font-size: 1.7rem !important;\n letter-spacing: 0.01em;\n text-transform: uppercase;\n}\n\n.logo-text-rennie {\n font-family: 'Rennie', 'Inter', 'Segoe UI', Arial, sans-serif !important;\n font-size: 1.7rem !important;\n letter-spacing: 0.01em;\n text-transform: uppercase;\n}\n\n/* Scroll to top button */\n.scroll-to-top-btn {\n position: fixed;\n right: 2rem;\n bottom: 2.5rem;\n z-index: 100;\n background: #6366f1;\n color: #fff;\n border-radius: 9999px;\n box-shadow: 0 2px 12px 0 rgba(80,80,120,0.13);\n padding: 0.75rem;\n width: 3rem;\n height: 3rem;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 1.5rem;\n border: none;\n cursor: pointer;\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.3s;\n}\n.scroll-to-top-btn.visible {\n opacity: 1;\n pointer-events: auto;\n}\n\n@font-face {\n font-family: 'NorseCyr2';\n src: url('/fonts/Norse-Regular.woff2') format('woff2');\n font-weight: normal;\n font-style: normal;\n font-display: swap;\n}\n\n@font-face {\n font-family: 'Jaipur';\n src: url('/fonts/Jaipur.woff2') format('woff2');\n font-weight: normal;\n font-style: normal;\n font-display: swap;\n}\n\n@font-face {\n font-family: 'Rennie';\n src: url('/fonts/Rennie.woff2') format('woff2');\n font-weight: normal;\n font-style: normal;\n font-display: swap;\n}\n\n.selection\\:bg-blue-500\\/30 *::-moz-selection {\n background-color: rgb(59 130 246 / 0.3);\n}\n\n.selection\\:bg-blue-500\\/30 *::selection {\n background-color: rgb(59 130 246 / 0.3);\n}\n\n.selection\\:bg-blue-500\\/30::-moz-selection {\n background-color: rgb(59 130 246 / 0.3);\n}\n\n.selection\\:bg-blue-500\\/30::selection {\n background-color: rgb(59 130 246 / 0.3);\n}\n\n.placeholder\\:text-blue-300::-moz-placeholder {\n --tw-text-opacity: 1;\n color: rgb(147 197 253 / var(--tw-text-opacity, 1));\n}\n\n.placeholder\\:text-blue-300::placeholder {\n --tw-text-opacity: 1;\n color: rgb(147 197 253 / var(--tw-text-opacity, 1));\n}\n\n.last\\:border-0:last-child {\n border-width: 0px;\n}\n\n.last\\:pb-0:last-child {\n padding-bottom: 0px;\n}\n\n.focus-within\\:ring-2:focus-within {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n\n.focus-within\\:ring-blue-400:focus-within {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(96 165 250 / var(--tw-ring-opacity, 1));\n}\n\n.hover\\:border-blue-300:hover {\n --tw-border-opacity: 1;\n border-color: rgb(147 197 253 / var(--tw-border-opacity, 1));\n}\n\n.hover\\:border-blue-400:hover {\n --tw-border-opacity: 1;\n border-color: rgb(96 165 250 / var(--tw-border-opacity, 1));\n}\n\n.hover\\:border-gray-300:hover {\n --tw-border-opacity: 1;\n border-color: rgb(209 213 219 / var(--tw-border-opacity, 1));\n}\n\n.hover\\:bg-amber-200:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(253 230 138 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-amber-50:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(255 251 235 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-amber-600:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(217 119 6 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-black\\/70:hover {\n background-color: rgb(0 0 0 / 0.7);\n}\n\n.hover\\:bg-blue-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(219 234 254 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-blue-50:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(239 246 255 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-blue-50\\/60:hover {\n background-color: rgb(239 246 255 / 0.6);\n}\n\n.hover\\:bg-blue-500:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(59 130 246 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-blue-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(29 78 216 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-emerald-200:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(167 243 208 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-emerald-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(4 120 87 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-gray-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-gray-200:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-gray-50:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-gray-50\\/50:hover {\n background-color: rgb(249 250 251 / 0.5);\n}\n\n.hover\\:bg-gray-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(55 65 81 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-green-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(220 252 231 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-green-50:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(240 253 244 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-green-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(21 128 61 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-indigo-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(224 231 255 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-indigo-200:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(199 210 254 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-indigo-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(67 56 202 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-orange-600:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(234 88 12 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-pink-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(252 231 243 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-pink-50:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(253 242 248 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-purple-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(243 232 255 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-purple-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(126 34 206 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-red-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(254 226 226 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-red-200:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(254 202 202 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-red-50:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(254 242 242 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-red-600:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(220 38 38 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-rose-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(190 18 60 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-slate-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(241 245 249 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-slate-800:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(30 41 59 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-white:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-white\\/10:hover {\n background-color: rgb(255 255 255 / 0.1);\n}\n\n.hover\\:bg-white\\/20:hover {\n background-color: rgb(255 255 255 / 0.2);\n}\n\n.hover\\:bg-white\\/25:hover {\n background-color: rgb(255 255 255 / 0.25);\n}\n\n.hover\\:bg-yellow-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(254 249 195 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-yellow-600:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(202 138 4 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:from-amber-600:hover {\n --tw-gradient-from: #d97706 var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(217 119 6 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n\n.hover\\:to-yellow-600:hover {\n --tw-gradient-to: #ca8a04 var(--tw-gradient-to-position);\n}\n\n.hover\\:text-black:hover {\n --tw-text-opacity: 1;\n color: rgb(0 0 0 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-blue-300:hover {\n --tw-text-opacity: 1;\n color: rgb(147 197 253 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-blue-400:hover {\n --tw-text-opacity: 1;\n color: rgb(96 165 250 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-blue-600:hover {\n --tw-text-opacity: 1;\n color: rgb(37 99 235 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-blue-700:hover {\n --tw-text-opacity: 1;\n color: rgb(29 78 216 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-blue-800:hover {\n --tw-text-opacity: 1;\n color: rgb(30 64 175 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-gray-600:hover {\n --tw-text-opacity: 1;\n color: rgb(75 85 99 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-gray-700:hover {\n --tw-text-opacity: 1;\n color: rgb(55 65 81 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-gray-800:hover {\n --tw-text-opacity: 1;\n color: rgb(31 41 55 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-gray-900:hover {\n --tw-text-opacity: 1;\n color: rgb(17 24 39 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-green-500:hover {\n --tw-text-opacity: 1;\n color: rgb(34 197 94 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-green-700:hover {\n --tw-text-opacity: 1;\n color: rgb(21 128 61 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-indigo-700:hover {\n --tw-text-opacity: 1;\n color: rgb(67 56 202 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-pink-400:hover {\n --tw-text-opacity: 1;\n color: rgb(244 114 182 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-pink-500:hover {\n --tw-text-opacity: 1;\n color: rgb(236 72 153 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-pink-600:hover {\n --tw-text-opacity: 1;\n color: rgb(219 39 119 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-purple-600:hover {\n --tw-text-opacity: 1;\n color: rgb(147 51 234 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-purple-700:hover {\n --tw-text-opacity: 1;\n color: rgb(126 34 206 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-red-400:hover {\n --tw-text-opacity: 1;\n color: rgb(248 113 113 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-red-500:hover {\n --tw-text-opacity: 1;\n color: rgb(239 68 68 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-red-600:hover {\n --tw-text-opacity: 1;\n color: rgb(220 38 38 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-red-700:hover {\n --tw-text-opacity: 1;\n color: rgb(185 28 28 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-sky-500:hover {\n --tw-text-opacity: 1;\n color: rgb(14 165 233 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-slate-700:hover {\n --tw-text-opacity: 1;\n color: rgb(51 65 85 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-white:hover {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-white\\/80:hover {\n color: rgb(255 255 255 / 0.8);\n}\n\n.hover\\:underline:hover {\n text-decoration-line: underline;\n}\n\n.hover\\:opacity-90:hover {\n opacity: 0.9;\n}\n\n.hover\\:shadow-lg:hover {\n --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.hover\\:shadow-md:hover {\n --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.hover\\:shadow-sm:hover {\n --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.hover\\:shadow-xl:hover {\n --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.hover\\:shadow-blue-500\\/25:hover {\n --tw-shadow-color: rgb(59 130 246 / 0.25);\n --tw-shadow: var(--tw-shadow-colored);\n}\n\n.focus\\:border-blue-500\\/50:focus {\n border-color: rgb(59 130 246 / 0.5);\n}\n\n.focus\\:outline-none:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n\n.focus\\:ring-2:focus {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n\n.focus\\:ring-blue-300:focus {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity, 1));\n}\n\n.focus\\:ring-blue-400:focus {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(96 165 250 / var(--tw-ring-opacity, 1));\n}\n\n.focus\\:ring-blue-500:focus {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1));\n}\n\n.focus\\:ring-emerald-400:focus {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(52 211 153 / var(--tw-ring-opacity, 1));\n}\n\n.focus\\:ring-rose-400:focus {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(251 113 133 / var(--tw-ring-opacity, 1));\n}\n\n.focus\\:ring-offset-2:focus {\n --tw-ring-offset-width: 2px;\n}\n\n.active\\:scale-95:active {\n --tw-scale-x: .95;\n --tw-scale-y: .95;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.disabled\\:cursor-not-allowed:disabled {\n cursor: not-allowed;\n}\n\n.disabled\\:bg-gray-300:disabled {\n --tw-bg-opacity: 1;\n background-color: rgb(209 213 219 / var(--tw-bg-opacity, 1));\n}\n\n.disabled\\:bg-gray-50:disabled {\n --tw-bg-opacity: 1;\n background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1));\n}\n\n.disabled\\:text-gray-400:disabled {\n --tw-text-opacity: 1;\n color: rgb(156 163 175 / var(--tw-text-opacity, 1));\n}\n\n.disabled\\:no-underline:disabled {\n text-decoration-line: none;\n}\n\n.disabled\\:opacity-40:disabled {\n opacity: 0.4;\n}\n\n.disabled\\:opacity-50:disabled {\n opacity: 0.5;\n}\n\n.disabled\\:opacity-60:disabled {\n opacity: 0.6;\n}\n\n.group:hover .group-hover\\:scale-105 {\n --tw-scale-x: 1.05;\n --tw-scale-y: 1.05;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.group:hover .group-hover\\:scale-110 {\n --tw-scale-x: 1.1;\n --tw-scale-y: 1.1;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.group:hover .group-hover\\:border-blue-400 {\n --tw-border-opacity: 1;\n border-color: rgb(96 165 250 / var(--tw-border-opacity, 1));\n}\n\n.group:hover .group-hover\\:bg-black\\/50 {\n background-color: rgb(0 0 0 / 0.5);\n}\n\n.group:hover .group-hover\\:text-blue-600 {\n --tw-text-opacity: 1;\n color: rgb(37 99 235 / var(--tw-text-opacity, 1));\n}\n\n.group:hover .group-hover\\:text-orange-600 {\n --tw-text-opacity: 1;\n color: rgb(234 88 12 / var(--tw-text-opacity, 1));\n}\n\n.group:hover .group-hover\\:underline {\n text-decoration-line: underline;\n}\n\n.group:hover .group-hover\\:opacity-100 {\n opacity: 1;\n}\n\n.group:hover .group-hover\\:opacity-80 {\n opacity: 0.8;\n}\n\n.has-\\[\\:checked\\]\\:border-blue-500:has(:checked) {\n --tw-border-opacity: 1;\n border-color: rgb(59 130 246 / var(--tw-border-opacity, 1));\n}\n\n.has-\\[\\:checked\\]\\:bg-blue-50:has(:checked) {\n --tw-bg-opacity: 1;\n background-color: rgb(239 246 255 / var(--tw-bg-opacity, 1));\n}\n\n@media (min-width: 640px) {\n\n .sm\\:mb-6 {\n margin-bottom: 1.5rem;\n }\n\n .sm\\:block {\n display: block;\n }\n\n .sm\\:hidden {\n display: none;\n }\n\n .sm\\:h-32 {\n height: 8rem;\n }\n\n .sm\\:w-32 {\n width: 8rem;\n }\n\n .sm\\:w-auto {\n width: auto;\n }\n\n .sm\\:flex-1 {\n flex: 1 1 0%;\n }\n\n .sm\\:grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n\n .sm\\:grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n\n .sm\\:grid-cols-4 {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n }\n\n .sm\\:flex-row {\n flex-direction: row;\n }\n\n .sm\\:items-center {\n align-items: center;\n }\n\n .sm\\:gap-3 {\n gap: 0.75rem;\n }\n\n .sm\\:gap-4 {\n gap: 1rem;\n }\n\n .sm\\:space-y-5 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1.25rem * var(--tw-space-y-reverse));\n }\n\n .sm\\:p-6 {\n padding: 1.5rem;\n }\n\n .sm\\:px-4 {\n padding-left: 1rem;\n padding-right: 1rem;\n }\n\n .sm\\:px-6 {\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n }\n\n .sm\\:py-8 {\n padding-top: 2rem;\n padding-bottom: 2rem;\n }\n\n .sm\\:pb-28 {\n padding-bottom: 7rem;\n }\n\n .sm\\:pt-24 {\n padding-top: 6rem;\n }\n\n .sm\\:text-2xl {\n font-size: 1.5rem;\n line-height: 2rem;\n }\n\n .sm\\:text-5xl {\n font-size: 3rem;\n line-height: 1;\n }\n\n .sm\\:text-lg {\n font-size: 1.125rem;\n line-height: 1.75rem;\n }\n}\n\n@media (min-width: 768px) {\n\n .md\\:flex {\n display: flex;\n }\n\n .md\\:hidden {\n display: none;\n }\n\n .md\\:w-64 {\n width: 16rem;\n }\n\n .md\\:grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n\n .md\\:grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n\n .md\\:grid-cols-4 {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n }\n\n .md\\:grid-cols-5 {\n grid-template-columns: repeat(5, minmax(0, 1fr));\n }\n\n .md\\:flex-row {\n flex-direction: row;\n }\n\n .md\\:p-14 {\n padding: 3.5rem;\n }\n\n .md\\:px-8 {\n padding-left: 2rem;\n padding-right: 2rem;\n }\n\n .md\\:text-3xl {\n font-size: 1.875rem;\n line-height: 2.25rem;\n }\n\n .md\\:text-5xl {\n font-size: 3rem;\n line-height: 1;\n }\n\n .md\\:text-6xl {\n font-size: 3.75rem;\n line-height: 1;\n }\n}\n\n@media (min-width: 1024px) {\n\n .lg\\:block {\n display: block;\n }\n\n .lg\\:w-64 {\n width: 16rem;\n }\n\n .lg\\:grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n\n .lg\\:grid-cols-4 {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n }\n\n .lg\\:grid-cols-6 {\n grid-template-columns: repeat(6, minmax(0, 1fr));\n }\n\n .lg\\:flex-row {\n flex-direction: row;\n }\n\n .lg\\:gap-8 {\n gap: 2rem;\n }\n\n .lg\\:px-8 {\n padding-left: 2rem;\n padding-right: 2rem;\n }\n}\n\n@media (min-width: 1280px) {\n\n .xl\\:grid-cols-7 {\n grid-template-columns: repeat(7, minmax(0, 1fr));\n }\n}\n", ""]); // Exports export default ___CSS_LOADER_EXPORT___; ` G‹«Å±p¿p±p¿p×p x ÷@€ò_node_modules_next_dist_build_webpack_loaders_css_loader_src_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()Á/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (€‚);göÿÿ†source„size„maps˜öÿÿÆs__webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_next_dist_build_webpack_loaders_css_loader_src_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("/opt/canhelp/node_modules/next/dist/build/webpack/loaders/css-loader/src/runtime/api.js"); /* harmony import */ var _node_modules_next_dist_build_webpack_loaders_css_loader_src_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_next_dist_build_webpack_loaders_css_loader_src_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_next_dist_build_webpack_loaders_css_loader_src_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(false); // Module ___CSS_LOADER_EXPORT___.push([module.id, "@font-face {\n font-family: 'Showpop';\n src: url('/fonts/showpop.woff2') format('woff2');\n font-weight: normal;\n font-style: normal;\n font-display: swap;\n}\n\n.logo-text {\n font-family: 'Showpop', sans-serif;\n letter-spacing: 0.01em;\n font-weight: normal;\n}\n\n@font-face {\n font-family: 'UnifixSP';\n src: url('/fonts/UnifixSP.woff2') format('woff2');\n font-weight: normal;\n font-style: normal;\n font-display: swap;\n}\n\n.logo-text-unifix {\n font-family: 'UnifixSP', sans-serif;\n letter-spacing: 0.01em;\n font-weight: normal;\n}\n@font-face {\n font-family: 'MotivationOfHearts';\n src: url('/fonts/MotivationOfHearts.woff2') format('woff2');\n font-weight: normal;\n font-style: normal;\n font-display: swap;\n}\n\n.logo-text-motivation {\n font-family: 'MotivationOfHearts', sans-serif;\n letter-spacing: 0.01em;\n font-weight: normal;\n}\n*, ::before, ::after {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n --tw-contain-size: ;\n --tw-contain-layout: ;\n --tw-contain-paint: ;\n --tw-contain-style: ;\n}\n::backdrop {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n --tw-contain-size: ;\n --tw-contain-layout: ;\n --tw-contain-paint: ;\n --tw-contain-style: ;\n}\n/*\n! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com\n*/\n/*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n*,\n::before,\n::after {\n box-sizing: border-box; /* 1 */\n border-width: 0; /* 2 */\n border-style: solid; /* 2 */\n border-color: #e5e7eb; /* 2 */\n}\n::before,\n::after {\n --tw-content: '';\n}\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user's configured `sans` font-family by default.\n5. Use the user's configured `sans` font-feature-settings by default.\n6. Use the user's configured `sans` font-variation-settings by default.\n7. Disable tap highlights on iOS\n*/\nhtml,\n:host {\n line-height: 1.5; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n -moz-tab-size: 4; /* 3 */\n -o-tab-size: 4;\n tab-size: 4; /* 3 */\n font-family: Inter, system-ui, sans-serif; /* 4 */\n font-feature-settings: normal; /* 5 */\n font-variation-settings: normal; /* 6 */\n -webkit-tap-highlight-color: transparent; /* 7 */\n}\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\nbody {\n margin: 0; /* 1 */\n line-height: inherit; /* 2 */\n}\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\nhr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n border-top-width: 1px; /* 3 */\n}\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\nabbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n}\n/*\nRemove the default font size and weight for headings.\n*/\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: inherit;\n font-weight: inherit;\n}\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\na {\n color: inherit;\n text-decoration: inherit;\n}\n/*\nAdd the correct font weight in Edge and Safari.\n*/\nb,\nstrong {\n font-weight: bolder;\n}\n/*\n1. Use the user's configured `mono` font-family by default.\n2. Use the user's configured `mono` font-feature-settings by default.\n3. Use the user's configured `mono` font-variation-settings by default.\n4. Correct the odd `em` font sizing in all browsers.\n*/\ncode,\nkbd,\nsamp,\npre {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace; /* 1 */\n font-feature-settings: normal; /* 2 */\n font-variation-settings: normal; /* 3 */\n font-size: 1em; /* 4 */\n}\n/*\nAdd the correct font size in all browsers.\n*/\nsmall {\n font-size: 80%;\n}\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\nsub {\n bottom: -0.25em;\n}\nsup {\n top: -0.5em;\n}\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\ntable {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n border-collapse: collapse; /* 3 */\n}\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-feature-settings: inherit; /* 1 */\n font-variation-settings: inherit; /* 1 */\n font-size: 100%; /* 1 */\n font-weight: inherit; /* 1 */\n line-height: inherit; /* 1 */\n letter-spacing: inherit; /* 1 */\n color: inherit; /* 1 */\n margin: 0; /* 2 */\n padding: 0; /* 3 */\n}\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\nbutton,\nselect {\n text-transform: none;\n}\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\nbutton,\ninput:where([type='button']),\ninput:where([type='reset']),\ninput:where([type='submit']) {\n -webkit-appearance: button; /* 1 */\n background-color: transparent; /* 2 */\n background-image: none; /* 2 */\n}\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n:-moz-focusring {\n outline: auto;\n}\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n:-moz-ui-invalid {\n box-shadow: none;\n}\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\nprogress {\n vertical-align: baseline;\n}\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n height: auto;\n}\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n[type='search'] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n/*\nAdd the correct display in Chrome and Safari.\n*/\nsummary {\n display: list-item;\n}\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n margin: 0;\n}\nfieldset {\n margin: 0;\n padding: 0;\n}\nlegend {\n padding: 0;\n}\nol,\nul,\nmenu {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n/*\nReset default styling for dialogs.\n*/\ndialog {\n padding: 0;\n}\n/*\nPrevent resizing textareas horizontally by default.\n*/\ntextarea {\n resize: vertical;\n}\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user's configured gray 400 color.\n*/\ninput::-moz-placeholder, textarea::-moz-placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\ninput::placeholder,\ntextarea::placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n/*\nSet the default cursor for buttons.\n*/\nbutton,\n[role=\"button\"] {\n cursor: pointer;\n}\n/*\nMake sure disabled buttons don't get the pointer cursor.\n*/\n:disabled {\n cursor: default;\n}\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n This can trigger a poorly considered lint error in some tools but is included by design.\n*/\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n display: block; /* 1 */\n vertical-align: middle; /* 2 */\n}\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\nimg,\nvideo {\n max-width: 100%;\n height: auto;\n}\n/* Make elements with the HTML hidden attribute stay hidden by default */\n[hidden]:where(:not([hidden=\"until-found\"])) {\n display: none;\n}\n.container {\n width: 100%;\n}\n@media (min-width: 640px) {\n\n .container {\n max-width: 640px;\n }\n}\n@media (min-width: 768px) {\n\n .container {\n max-width: 768px;\n }\n}\n@media (min-width: 1024px) {\n\n .container {\n max-width: 1024px;\n }\n}\n@media (min-width: 1280px) {\n\n .container {\n max-width: 1280px;\n }\n}\n@media (min-width: 1536px) {\n\n .container {\n max-width: 1536px;\n }\n}\n.pointer-events-none {\n pointer-events: none;\n}\n.visible {\n visibility: visible;\n}\n.static {\n position: static;\n}\n.fixed {\n position: fixed;\n}\n.absolute {\n position: absolute;\n}\n.relative {\n position: relative;\n}\n.sticky {\n position: sticky;\n}\n.-inset-1 {\n inset: -0.25rem;\n}\n.inset-0 {\n inset: 0px;\n}\n.-right-1\\.5 {\n right: -0.375rem;\n}\n.-top-1\\.5 {\n top: -0.375rem;\n}\n.-top-10 {\n top: -2.5rem;\n}\n.bottom-1 {\n bottom: 0.25rem;\n}\n.bottom-20 {\n bottom: 5rem;\n}\n.bottom-5 {\n bottom: 1.25rem;\n}\n.bottom-6 {\n bottom: 1.5rem;\n}\n.left-0 {\n left: 0px;\n}\n.left-0\\.5 {\n left: 0.125rem;\n}\n.left-1\\/2 {\n left: 50%;\n}\n.left-1\\/4 {\n left: 25%;\n}\n.left-3 {\n left: 0.75rem;\n}\n.left-4 {\n left: 1rem;\n}\n.right-0 {\n right: 0px;\n}\n.right-0\\.5 {\n right: 0.125rem;\n}\n.right-1 {\n right: 0.25rem;\n}\n.right-1\\/4 {\n right: 25%;\n}\n.right-2 {\n right: 0.5rem;\n}\n.right-3 {\n right: 0.75rem;\n}\n.right-4 {\n right: 1rem;\n}\n.right-5 {\n right: 1.25rem;\n}\n.right-6 {\n right: 1.5rem;\n}\n.top-0 {\n top: 0px;\n}\n.top-0\\.5 {\n top: 0.125rem;\n}\n.top-1 {\n top: 0.25rem;\n}\n.top-1\\/2 {\n top: 50%;\n}\n.top-2 {\n top: 0.5rem;\n}\n.top-20 {\n top: 5rem;\n}\n.top-24 {\n top: 6rem;\n}\n.top-3 {\n top: 0.75rem;\n}\n.top-4 {\n top: 1rem;\n}\n.top-6 {\n top: 1.5rem;\n}\n.top-full {\n top: 100%;\n}\n.z-10 {\n z-index: 10;\n}\n.z-40 {\n z-index: 40;\n}\n.z-50 {\n z-index: 50;\n}\n.z-\\[200\\] {\n z-index: 200;\n}\n.z-\\[60\\] {\n z-index: 60;\n}\n.col-span-2 {\n grid-column: span 2 / span 2;\n}\n.m-0\\.5 {\n margin: 0.125rem;\n}\n.mx-0\\.5 {\n margin-left: 0.125rem;\n margin-right: 0.125rem;\n}\n.mx-4 {\n margin-left: 1rem;\n margin-right: 1rem;\n}\n.mx-5 {\n margin-left: 1.25rem;\n margin-right: 1.25rem;\n}\n.mx-auto {\n margin-left: auto;\n margin-right: auto;\n}\n.my-1 {\n margin-top: 0.25rem;\n margin-bottom: 0.25rem;\n}\n.-mb-px {\n margin-bottom: -1px;\n}\n.-mt-1 {\n margin-top: -0.25rem;\n}\n.-mt-px {\n margin-top: -1px;\n}\n.mb-0 {\n margin-bottom: 0px;\n}\n.mb-0\\.5 {\n margin-bottom: 0.125rem;\n}\n.mb-1 {\n margin-bottom: 0.25rem;\n}\n.mb-1\\.5 {\n margin-bottom: 0.375rem;\n}\n.mb-10 {\n margin-bottom: 2.5rem;\n}\n.mb-12 {\n margin-bottom: 3rem;\n}\n.mb-14 {\n margin-bottom: 3.5rem;\n}\n.mb-2 {\n margin-bottom: 0.5rem;\n}\n.mb-3 {\n margin-bottom: 0.75rem;\n}\n.mb-4 {\n margin-bottom: 1rem;\n}\n.mb-5 {\n margin-bottom: 1.25rem;\n}\n.mb-6 {\n margin-bottom: 1.5rem;\n}\n.mb-8 {\n margin-bottom: 2rem;\n}\n.ml-1 {\n margin-left: 0.25rem;\n}\n.ml-1\\.5 {\n margin-left: 0.375rem;\n}\n.ml-2 {\n margin-left: 0.5rem;\n}\n.ml-3 {\n margin-left: 0.75rem;\n}\n.ml-4 {\n margin-left: 1rem;\n}\n.ml-6 {\n margin-left: 1.5rem;\n}\n.ml-auto {\n margin-left: auto;\n}\n.mr-0\\.5 {\n margin-right: 0.125rem;\n}\n.mr-1 {\n margin-right: 0.25rem;\n}\n.mr-2 {\n margin-right: 0.5rem;\n}\n.mt-0\\.5 {\n margin-top: 0.125rem;\n}\n.mt-1 {\n margin-top: 0.25rem;\n}\n.mt-1\\.5 {\n margin-top: 0.375rem;\n}\n.mt-10 {\n margin-top: 2.5rem;\n}\n.mt-16 {\n margin-top: 4rem;\n}\n.mt-2 {\n margin-top: 0.5rem;\n}\n.mt-3 {\n margin-top: 0.75rem;\n}\n.mt-4 {\n margin-top: 1rem;\n}\n.mt-5 {\n margin-top: 1.25rem;\n}\n.mt-6 {\n margin-top: 1.5rem;\n}\n.mt-8 {\n margin-top: 2rem;\n}\n.mt-auto {\n margin-top: auto;\n}\n.line-clamp-1 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 1;\n}\n.line-clamp-2 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n}\n.block {\n display: block;\n}\n.inline-block {\n display: inline-block;\n}\n.inline {\n display: inline;\n}\n.flex {\n display: flex;\n}\n.inline-flex {\n display: inline-flex;\n}\n.table {\n display: table;\n}\n.grid {\n display: grid;\n}\n.hidden {\n display: none;\n}\n.aspect-square {\n aspect-ratio: 1 / 1;\n}\n.h-0 {\n height: 0px;\n}\n.h-0\\.5 {\n height: 0.125rem;\n}\n.h-1 {\n height: 0.25rem;\n}\n.h-1\\.5 {\n height: 0.375rem;\n}\n.h-10 {\n height: 2.5rem;\n}\n.h-12 {\n height: 3rem;\n}\n.h-14 {\n height: 3.5rem;\n}\n.h-16 {\n height: 4rem;\n}\n.h-2 {\n height: 0.5rem;\n}\n.h-2\\.5 {\n height: 0.625rem;\n}\n.h-20 {\n height: 5rem;\n}\n.h-24 {\n height: 6rem;\n}\n.h-28 {\n height: 7rem;\n}\n.h-3 {\n height: 0.75rem;\n}\n.h-3\\.5 {\n height: 0.875rem;\n}\n.h-4 {\n height: 1rem;\n}\n.h-40 {\n height: 10rem;\n}\n.h-5 {\n height: 1.25rem;\n}\n.h-6 {\n height: 1.5rem;\n}\n.h-7 {\n height: 1.75rem;\n}\n.h-8 {\n height: 2rem;\n}\n.h-9 {\n height: 2.25rem;\n}\n.h-\\[400px\\] {\n height: 400px;\n}\n.h-\\[500px\\] {\n height: 500px;\n}\n.h-\\[calc\\(100vh-80px\\)\\] {\n height: calc(100vh - 80px);\n}\n.h-full {\n height: 100%;\n}\n.h-px {\n height: 1px;\n}\n.max-h-32 {\n max-height: 8rem;\n}\n.max-h-40 {\n max-height: 10rem;\n}\n.max-h-64 {\n max-height: 16rem;\n}\n.max-h-72 {\n max-height: 18rem;\n}\n.max-h-80 {\n max-height: 20rem;\n}\n.max-h-96 {\n max-height: 24rem;\n}\n.max-h-\\[60vh\\] {\n max-height: 60vh;\n}\n.max-h-\\[80vh\\] {\n max-height: 80vh;\n}\n.max-h-\\[85vh\\] {\n max-height: 85vh;\n}\n.max-h-\\[90vh\\] {\n max-height: 90vh;\n}\n.min-h-0 {\n min-height: 0px;\n}\n.min-h-\\[24px\\] {\n min-height: 24px;\n}\n.min-h-\\[28px\\] {\n min-height: 28px;\n}\n.min-h-\\[40px\\] {\n min-height: 40px;\n}\n.min-h-screen {\n min-height: 100vh;\n}\n.w-0 {\n width: 0px;\n}\n.w-1 {\n width: 0.25rem;\n}\n.w-1\\.5 {\n width: 0.375rem;\n}\n.w-1\\/2 {\n width: 50%;\n}\n.w-10 {\n width: 2.5rem;\n}\n.w-11 {\n width: 2.75rem;\n}\n.w-12 {\n width: 3rem;\n}\n.w-14 {\n width: 3.5rem;\n}\n.w-16 {\n width: 4rem;\n}\n.w-2 {\n width: 0.5rem;\n}\n.w-2\\.5 {\n width: 0.625rem;\n}\n.w-20 {\n width: 5rem;\n}\n.w-24 {\n width: 6rem;\n}\n.w-28 {\n width: 7rem;\n}\n.w-3 {\n width: 0.75rem;\n}\n.w-3\\.5 {\n width: 0.875rem;\n}\n.w-4 {\n width: 1rem;\n}\n.w-40 {\n width: 10rem;\n}\n.w-44 {\n width: 11rem;\n}\n.w-5 {\n width: 1.25rem;\n}\n.w-52 {\n width: 13rem;\n}\n.w-56 {\n width: 14rem;\n}\n.w-6 {\n width: 1.5rem;\n}\n.w-7 {\n width: 1.75rem;\n}\n.w-72 {\n width: 18rem;\n}\n.w-8 {\n width: 2rem;\n}\n.w-9 {\n width: 2.25rem;\n}\n.w-\\[400px\\] {\n width: 400px;\n}\n.w-\\[500px\\] {\n width: 500px;\n}\n.w-fit {\n width: -moz-fit-content;\n width: fit-content;\n}\n.w-full {\n width: 100%;\n}\n.w-px {\n width: 1px;\n}\n.min-w-0 {\n min-width: 0px;\n}\n.min-w-32 {\n min-width: 8rem;\n}\n.min-w-72 {\n min-width: 18rem;\n}\n.min-w-\\[140px\\] {\n min-width: 140px;\n}\n.min-w-\\[16px\\] {\n min-width: 16px;\n}\n.min-w-\\[180px\\] {\n min-width: 180px;\n}\n.min-w-\\[200px\\] {\n min-width: 200px;\n}\n.min-w-\\[220px\\] {\n min-width: 220px;\n}\n.min-w-\\[240px\\] {\n min-width: 240px;\n}\n.min-w-fit {\n min-width: -moz-fit-content;\n min-width: fit-content;\n}\n.max-w-2xl {\n max-width: 42rem;\n}\n.max-w-3xl {\n max-width: 48rem;\n}\n.max-w-4xl {\n max-width: 56rem;\n}\n.max-w-5xl {\n max-width: 64rem;\n}\n.max-w-6xl {\n max-width: 72rem;\n}\n.max-w-7xl {\n max-width: 80rem;\n}\n.max-w-\\[100px\\] {\n max-width: 100px;\n}\n.max-w-\\[70\\%\\] {\n max-width: 70%;\n}\n.max-w-\\[90px\\] {\n max-width: 90px;\n}\n.max-w-full {\n max-width: 100%;\n}\n.max-w-lg {\n max-width: 32rem;\n}\n.max-w-md {\n max-width: 28rem;\n}\n.max-w-sm {\n max-width: 24rem;\n}\n.max-w-xl {\n max-width: 36rem;\n}\n.max-w-xs {\n max-width: 20rem;\n}\n.flex-1 {\n flex: 1 1 0%;\n}\n.flex-\\[2\\] {\n flex: 2;\n}\n.flex-shrink-0 {\n flex-shrink: 0;\n}\n.shrink-0 {\n flex-shrink: 0;\n}\n.grow {\n flex-grow: 1;\n}\n.-translate-x-1\\/2 {\n --tw-translate-x: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.-translate-x-12 {\n --tw-translate-x: -3rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.-translate-y-1\\/2 {\n --tw-translate-y: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-x-0 {\n --tw-translate-x: 0px;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-x-1 {\n --tw-translate-x: 0.25rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-x-12 {\n --tw-translate-x: 3rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-x-3 {\n --tw-translate-x: 0.75rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-x-5 {\n --tw-translate-x: 1.25rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-x-6 {\n --tw-translate-x: 1.5rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-y-0 {\n --tw-translate-y: 0px;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-y-4 {\n --tw-translate-y: 1rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-180 {\n --tw-rotate: 180deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-45 {\n --tw-rotate: 45deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-90 {\n --tw-rotate: 90deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.scale-105 {\n --tw-scale-x: 1.05;\n --tw-scale-y: 1.05;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.transform {\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n@keyframes pulse {\n\n 50% {\n opacity: .5;\n }\n}\n.animate-pulse {\n animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n}\n@keyframes spin {\n\n to {\n transform: rotate(360deg);\n }\n}\n.animate-spin {\n animation: spin 1s linear infinite;\n}\n.cursor-default {\n cursor: default;\n}\n.cursor-not-allowed {\n cursor: not-allowed;\n}\n.cursor-pointer {\n cursor: pointer;\n}\n.select-none {\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n.select-all {\n -webkit-user-select: all;\n -moz-user-select: all;\n user-select: all;\n}\n.resize-none {\n resize: none;\n}\n.resize-y {\n resize: vertical;\n}\n.snap-x {\n scroll-snap-type: x var(--tw-scroll-snap-strictness);\n}\n.snap-mandatory {\n --tw-scroll-snap-strictness: mandatory;\n}\n.snap-start {\n scroll-snap-align: start;\n}\n.grid-cols-1 {\n grid-template-columns: repeat(1, minmax(0, 1fr));\n}\n.grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n.grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n}\n.grid-cols-4 {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n}\n.grid-cols-7 {\n grid-template-columns: repeat(7, minmax(0, 1fr));\n}\n.flex-row-reverse {\n flex-direction: row-reverse;\n}\n.flex-col {\n flex-direction: column;\n}\n.flex-wrap {\n flex-wrap: wrap;\n}\n.items-start {\n align-items: flex-start;\n}\n.items-end {\n align-items: flex-end;\n}\n.items-center {\n align-items: center;\n}\n.justify-end {\n justify-content: flex-end;\n}\n.justify-center {\n justify-content: center;\n}\n.justify-between {\n justify-content: space-between;\n}\n.gap-0 {\n gap: 0px;\n}\n.gap-0\\.5 {\n gap: 0.125rem;\n}\n.gap-1 {\n gap: 0.25rem;\n}\n.gap-1\\.5 {\n gap: 0.375rem;\n}\n.gap-10 {\n gap: 2.5rem;\n}\n.gap-2 {\n gap: 0.5rem;\n}\n.gap-2\\.5 {\n gap: 0.625rem;\n}\n.gap-3 {\n gap: 0.75rem;\n}\n.gap-4 {\n gap: 1rem;\n}\n.gap-5 {\n gap: 1.25rem;\n}\n.gap-6 {\n gap: 1.5rem;\n}\n.gap-8 {\n gap: 2rem;\n}\n.gap-y-3 {\n row-gap: 0.75rem;\n}\n.space-y-0\\.5 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.125rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.125rem * var(--tw-space-y-reverse));\n}\n.space-y-1 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.25rem * var(--tw-space-y-reverse));\n}\n.space-y-1\\.5 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.375rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.375rem * var(--tw-space-y-reverse));\n}\n.space-y-16 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(4rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(4rem * var(--tw-space-y-reverse));\n}\n.space-y-2 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.5rem * var(--tw-space-y-reverse));\n}\n.space-y-3 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.75rem * var(--tw-space-y-reverse));\n}\n.space-y-4 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1rem * var(--tw-space-y-reverse));\n}\n.space-y-5 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1.25rem * var(--tw-space-y-reverse));\n}\n.space-y-6 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1.5rem * var(--tw-space-y-reverse));\n}\n.space-y-8 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(2rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(2rem * var(--tw-space-y-reverse));\n}\n.divide-y > :not([hidden]) ~ :not([hidden]) {\n --tw-divide-y-reverse: 0;\n border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));\n border-bottom-width: calc(1px * var(--tw-divide-y-reverse));\n}\n.divide-gray-100 > :not([hidden]) ~ :not([hidden]) {\n --tw-divide-opacity: 1;\n border-color: rgb(243 244 246 / var(--tw-divide-opacity, 1));\n}\n.self-end {\n align-self: flex-end;\n}\n.self-center {\n align-self: center;\n}\n.overflow-hidden {\n overflow: hidden;\n}\n.overflow-x-auto {\n overflow-x: auto;\n}\n.overflow-y-auto {\n overflow-y: auto;\n}\n.truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.whitespace-nowrap {\n white-space: nowrap;\n}\n.whitespace-pre-wrap {\n white-space: pre-wrap;\n}\n.rounded {\n border-radius: 0.25rem;\n}\n.rounded-2xl {\n border-radius: 1rem;\n}\n.rounded-\\[2\\.5rem\\] {\n border-radius: 2.5rem;\n}\n.rounded-full {\n border-radius: 9999px;\n}\n.rounded-lg {\n border-radius: 0.5rem;\n}\n.rounded-md {\n border-radius: 0.375rem;\n}\n.rounded-xl {\n border-radius: 0.75rem;\n}\n.rounded-b-xl {\n border-bottom-right-radius: 0.75rem;\n border-bottom-left-radius: 0.75rem;\n}\n.rounded-t-lg {\n border-top-left-radius: 0.5rem;\n border-top-right-radius: 0.5rem;\n}\n.rounded-tl-sm {\n border-top-left-radius: 0.125rem;\n}\n.rounded-tr-sm {\n border-top-right-radius: 0.125rem;\n}\n.border {\n border-width: 1px;\n}\n.border-0 {\n border-width: 0px;\n}\n.border-2 {\n border-width: 2px;\n}\n.border-y {\n border-top-width: 1px;\n border-bottom-width: 1px;\n}\n.border-b {\n border-bottom-width: 1px;\n}\n.border-b-2 {\n border-bottom-width: 2px;\n}\n.border-l-2 {\n border-left-width: 2px;\n}\n.border-r {\n border-right-width: 1px;\n}\n.border-r-2 {\n border-right-width: 2px;\n}\n.border-t {\n border-top-width: 1px;\n}\n.border-t-0 {\n border-top-width: 0px;\n}\n.border-t-4 {\n border-top-width: 4px;\n}\n.border-dashed {\n border-style: dashed;\n}\n.border-amber-100 {\n --tw-border-opacity: 1;\n border-color: rgb(254 243 199 / var(--tw-border-opacity, 1));\n}\n.border-amber-200 {\n --tw-border-opacity: 1;\n border-color: rgb(253 230 138 / var(--tw-border-opacity, 1));\n}\n.border-amber-300 {\n --tw-border-opacity: 1;\n border-color: rgb(252 211 77 / var(--tw-border-opacity, 1));\n}\n.border-amber-500 {\n --tw-border-opacity: 1;\n border-color: rgb(245 158 11 / var(--tw-border-opacity, 1));\n}\n.border-blue-100 {\n --tw-border-opacity: 1;\n border-color: rgb(219 234 254 / var(--tw-border-opacity, 1));\n}\n.border-blue-200 {\n --tw-border-opacity: 1;\n border-color: rgb(191 219 254 / var(--tw-border-opacity, 1));\n}\n.border-blue-300 {\n --tw-border-opacity: 1;\n border-color: rgb(147 197 253 / var(--tw-border-opacity, 1));\n}\n.border-blue-400 {\n --tw-border-opacity: 1;\n border-color: rgb(96 165 250 / var(--tw-border-opacity, 1));\n}\n.border-blue-50 {\n --tw-border-opacity: 1;\n border-color: rgb(239 246 255 / var(--tw-border-opacity, 1));\n}\n.border-blue-500 {\n --tw-border-opacity: 1;\n border-color: rgb(59 130 246 / var(--tw-border-opacity, 1));\n}\n.border-blue-500\\/10 {\n border-color: rgb(59 130 246 / 0.1);\n}\n.border-blue-500\\/20 {\n border-color: rgb(59 130 246 / 0.2);\n}\n.border-blue-600 {\n --tw-border-opacity: 1;\n border-color: rgb(37 99 235 / var(--tw-border-opacity, 1));\n}\n.border-emerald-100 {\n --tw-border-opacity: 1;\n border-color: rgb(209 250 229 / var(--tw-border-opacity, 1));\n}\n.border-emerald-300 {\n --tw-border-opacity: 1;\n border-color: rgb(110 231 183 / var(--tw-border-opacity, 1));\n}\n.border-emerald-400 {\n --tw-border-opacity: 1;\n border-color: rgb(52 211 153 / var(--tw-border-opacity, 1));\n}\n.border-emerald-500 {\n --tw-border-opacity: 1;\n border-color: rgb(16 185 129 / var(--tw-border-opacity, 1));\n}\n.border-emerald-500\\/20 {\n border-color: rgb(16 185 129 / 0.2);\n}\n.border-gray-100 {\n --tw-border-opacity: 1;\n border-color: rgb(243 244 246 / var(--tw-border-opacity, 1));\n}\n.border-gray-200 {\n --tw-border-opacity: 1;\n border-color: rgb(229 231 235 / var(--tw-border-opacity, 1));\n}\n.border-gray-300 {\n --tw-border-opacity: 1;\n border-color: rgb(209 213 219 / var(--tw-border-opacity, 1));\n}\n.border-gray-50 {\n --tw-border-opacity: 1;\n border-color: rgb(249 250 251 / var(--tw-border-opacity, 1));\n}\n.border-green-100 {\n --tw-border-opacity: 1;\n border-color: rgb(220 252 231 / var(--tw-border-opacity, 1));\n}\n.border-green-200 {\n --tw-border-opacity: 1;\n border-color: rgb(187 247 208 / var(--tw-border-opacity, 1));\n}\n.border-indigo-100 {\n --tw-border-opacity: 1;\n border-color: rgb(224 231 255 / var(--tw-border-opacity, 1));\n}\n.border-orange-100 {\n --tw-border-opacity: 1;\n border-color: rgb(255 237 213 / var(--tw-border-opacity, 1));\n}\n.border-orange-200 {\n --tw-border-opacity: 1;\n border-color: rgb(254 215 170 / var(--tw-border-opacity, 1));\n}\n.border-pink-200 {\n --tw-border-opacity: 1;\n border-color: rgb(251 207 232 / var(--tw-border-opacity, 1));\n}\n.border-purple-100 {\n --tw-border-opacity: 1;\n border-color: rgb(243 232 255 / var(--tw-border-opacity, 1));\n}\n.border-purple-200 {\n --tw-border-opacity: 1;\n border-color: rgb(233 213 255 / var(--tw-border-opacity, 1));\n}\n.border-purple-500\\/10 {\n border-color: rgb(168 85 247 / 0.1);\n}\n.border-red-100 {\n --tw-border-opacity: 1;\n border-color: rgb(254 226 226 / var(--tw-border-opacity, 1));\n}\n.border-red-200 {\n --tw-border-opacity: 1;\n border-color: rgb(254 202 202 / var(--tw-border-opacity, 1));\n}\n.border-red-300 {\n --tw-border-opacity: 1;\n border-color: rgb(252 165 165 / var(--tw-border-opacity, 1));\n}\n.border-red-400 {\n --tw-border-opacity: 1;\n border-color: rgb(248 113 113 / var(--tw-border-opacity, 1));\n}\n.border-rose-100 {\n --tw-border-opacity: 1;\n border-color: rgb(255 228 230 / var(--tw-border-opacity, 1));\n}\n.border-rose-300 {\n --tw-border-opacity: 1;\n border-color: rgb(253 164 175 / var(--tw-border-opacity, 1));\n}\n.border-rose-500 {\n --tw-border-opacity: 1;\n border-color: rgb(244 63 94 / var(--tw-border-opacity, 1));\n}\n.border-sky-100 {\n --tw-border-opacity: 1;\n border-color: rgb(224 242 254 / var(--tw-border-opacity, 1));\n}\n.border-slate-100 {\n --tw-border-opacity: 1;\n border-color: rgb(241 245 249 / var(--tw-border-opacity, 1));\n}\n.border-slate-200 {\n --tw-border-opacity: 1;\n border-color: rgb(226 232 240 / var(--tw-border-opacity, 1));\n}\n.border-teal-100 {\n --tw-border-opacity: 1;\n border-color: rgb(204 251 241 / var(--tw-border-opacity, 1));\n}\n.border-transparent {\n border-color: transparent;\n}\n.border-violet-100 {\n --tw-border-opacity: 1;\n border-color: rgb(237 233 254 / var(--tw-border-opacity, 1));\n}\n.border-white {\n --tw-border-opacity: 1;\n border-color: rgb(255 255 255 / var(--tw-border-opacity, 1));\n}\n.border-white\\/10 {\n border-color: rgb(255 255 255 / 0.1);\n}\n.border-white\\/20 {\n border-color: rgb(255 255 255 / 0.2);\n}\n.border-white\\/30 {\n border-color: rgb(255 255 255 / 0.3);\n}\n.border-white\\/40 {\n border-color: rgb(255 255 255 / 0.4);\n}\n.border-yellow-200 {\n --tw-border-opacity: 1;\n border-color: rgb(254 240 138 / var(--tw-border-opacity, 1));\n}\n.border-l-blue-500 {\n --tw-border-opacity: 1;\n border-left-color: rgb(59 130 246 / var(--tw-border-opacity, 1));\n}\n.border-t-blue-500 {\n --tw-border-opacity: 1;\n border-top-color: rgb(59 130 246 / var(--tw-border-opacity, 1));\n}\n.border-t-transparent {\n border-top-color: transparent;\n}\n.border-t-white {\n --tw-border-opacity: 1;\n border-top-color: rgb(255 255 255 / var(--tw-border-opacity, 1));\n}\n.bg-\\[\\#003087\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(0 48 135 / var(--tw-bg-opacity, 1));\n}\n.bg-amber-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 243 199 / var(--tw-bg-opacity, 1));\n}\n.bg-amber-400 {\n --tw-bg-opacity: 1;\n background-color: rgb(251 191 36 / var(--tw-bg-opacity, 1));\n}\n.bg-amber-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(255 251 235 / var(--tw-bg-opacity, 1));\n}\n.bg-amber-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(245 158 11 / var(--tw-bg-opacity, 1));\n}\n.bg-amber-500\\/10 {\n background-color: rgb(245 158 11 / 0.1);\n}\n.bg-black\\/0 {\n background-color: rgb(0 0 0 / 0);\n}\n.bg-black\\/40 {\n background-color: rgb(0 0 0 / 0.4);\n}\n.bg-black\\/50 {\n background-color: rgb(0 0 0 / 0.5);\n}\n.bg-black\\/60 {\n background-color: rgb(0 0 0 / 0.6);\n}\n.bg-black\\/70 {\n background-color: rgb(0 0 0 / 0.7);\n}\n.bg-black\\/80 {\n background-color: rgb(0 0 0 / 0.8);\n}\n.bg-black\\/85 {\n background-color: rgb(0 0 0 / 0.85);\n}\n.bg-black\\/90 {\n background-color: rgb(0 0 0 / 0.9);\n}\n.bg-blue-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(219 234 254 / var(--tw-bg-opacity, 1));\n}\n.bg-blue-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(239 246 255 / var(--tw-bg-opacity, 1));\n}\n.bg-blue-50\\/30 {\n background-color: rgb(239 246 255 / 0.3);\n}\n.bg-blue-50\\/60 {\n background-color: rgb(239 246 255 / 0.6);\n}\n.bg-blue-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(59 130 246 / var(--tw-bg-opacity, 1));\n}\n.bg-blue-500\\/10 {\n background-color: rgb(59 130 246 / 0.1);\n}\n.bg-blue-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(37 99 235 / var(--tw-bg-opacity, 1));\n}\n.bg-blue-600\\/10 {\n background-color: rgb(37 99 235 / 0.1);\n}\n.bg-emerald-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(209 250 229 / var(--tw-bg-opacity, 1));\n}\n.bg-emerald-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(167 243 208 / var(--tw-bg-opacity, 1));\n}\n.bg-emerald-400 {\n --tw-bg-opacity: 1;\n background-color: rgb(52 211 153 / var(--tw-bg-opacity, 1));\n}\n.bg-emerald-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(236 253 245 / var(--tw-bg-opacity, 1));\n}\n.bg-emerald-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(16 185 129 / var(--tw-bg-opacity, 1));\n}\n.bg-emerald-500\\/10 {\n background-color: rgb(16 185 129 / 0.1);\n}\n.bg-emerald-500\\/20 {\n background-color: rgb(16 185 129 / 0.2);\n}\n.bg-emerald-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(5 150 105 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(209 213 219 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-400 {\n --tw-bg-opacity: 1;\n background-color: rgb(156 163 175 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(75 85 99 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-900 {\n --tw-bg-opacity: 1;\n background-color: rgb(17 24 39 / var(--tw-bg-opacity, 1));\n}\n.bg-green-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(220 252 231 / var(--tw-bg-opacity, 1));\n}\n.bg-green-400 {\n --tw-bg-opacity: 1;\n background-color: rgb(74 222 128 / var(--tw-bg-opacity, 1));\n}\n.bg-green-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(240 253 244 / var(--tw-bg-opacity, 1));\n}\n.bg-green-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(34 197 94 / var(--tw-bg-opacity, 1));\n}\n.bg-green-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(22 163 74 / var(--tw-bg-opacity, 1));\n}\n.bg-indigo-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(224 231 255 / var(--tw-bg-opacity, 1));\n}\n.bg-indigo-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(238 242 255 / var(--tw-bg-opacity, 1));\n}\n.bg-indigo-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(79 70 229 / var(--tw-bg-opacity, 1));\n}\n.bg-orange-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(255 237 213 / var(--tw-bg-opacity, 1));\n}\n.bg-orange-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(255 247 237 / var(--tw-bg-opacity, 1));\n}\n.bg-orange-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(249 115 22 / var(--tw-bg-opacity, 1));\n}\n.bg-pink-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(253 242 248 / var(--tw-bg-opacity, 1));\n}\n.bg-purple-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(243 232 255 / var(--tw-bg-opacity, 1));\n}\n.bg-purple-400 {\n --tw-bg-opacity: 1;\n background-color: rgb(192 132 252 / var(--tw-bg-opacity, 1));\n}\n.bg-purple-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(250 245 255 / var(--tw-bg-opacity, 1));\n}\n.bg-purple-500\\/10 {\n background-color: rgb(168 85 247 / 0.1);\n}\n.bg-purple-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(147 51 234 / var(--tw-bg-opacity, 1));\n}\n.bg-red-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 226 226 / var(--tw-bg-opacity, 1));\n}\n.bg-red-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 202 202 / var(--tw-bg-opacity, 1));\n}\n.bg-red-400 {\n --tw-bg-opacity: 1;\n background-color: rgb(248 113 113 / var(--tw-bg-opacity, 1));\n}\n.bg-red-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 242 242 / var(--tw-bg-opacity, 1));\n}\n.bg-red-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(239 68 68 / var(--tw-bg-opacity, 1));\n}\n.bg-rose-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(255 241 242 / var(--tw-bg-opacity, 1));\n}\n.bg-rose-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(225 29 72 / var(--tw-bg-opacity, 1));\n}\n.bg-sky-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(240 249 255 / var(--tw-bg-opacity, 1));\n}\n.bg-sky-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(14 165 233 / var(--tw-bg-opacity, 1));\n}\n.bg-slate-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(241 245 249 / var(--tw-bg-opacity, 1));\n}\n.bg-slate-900 {\n --tw-bg-opacity: 1;\n background-color: rgb(15 23 42 / var(--tw-bg-opacity, 1));\n}\n.bg-teal-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(240 253 250 / var(--tw-bg-opacity, 1));\n}\n.bg-violet-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(245 243 255 / var(--tw-bg-opacity, 1));\n}\n.bg-violet-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(139 92 246 / var(--tw-bg-opacity, 1));\n}\n.bg-white {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));\n}\n.bg-white\\/10 {\n background-color: rgb(255 255 255 / 0.1);\n}\n.bg-white\\/15 {\n background-color: rgb(255 255 255 / 0.15);\n}\n.bg-white\\/20 {\n background-color: rgb(255 255 255 / 0.2);\n}\n.bg-white\\/60 {\n background-color: rgb(255 255 255 / 0.6);\n}\n.bg-white\\/80 {\n background-color: rgb(255 255 255 / 0.8);\n}\n.bg-white\\/90 {\n background-color: rgb(255 255 255 / 0.9);\n}\n.bg-yellow-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 249 195 / var(--tw-bg-opacity, 1));\n}\n.bg-yellow-400 {\n --tw-bg-opacity: 1;\n background-color: rgb(250 204 21 / var(--tw-bg-opacity, 1));\n}\n.bg-yellow-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 252 232 / var(--tw-bg-opacity, 1));\n}\n.bg-yellow-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(234 179 8 / var(--tw-bg-opacity, 1));\n}\n.bg-gradient-to-br {\n background-image: linear-gradient(to bottom right, var(--tw-gradient-stops));\n}\n.bg-gradient-to-r {\n background-image: linear-gradient(to right, var(--tw-gradient-stops));\n}\n.bg-gradient-to-t {\n background-image: linear-gradient(to top, var(--tw-gradient-stops));\n}\n.from-amber-400 {\n --tw-gradient-from: #fbbf24 var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(251 191 36 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.from-amber-50 {\n --tw-gradient-from: #fffbeb var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(255 251 235 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.from-amber-500 {\n --tw-gradient-from: #f59e0b var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(245 158 11 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.from-black\\/60 {\n --tw-gradient-from: rgb(0 0 0 / 0.6) var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.from-blue-500 {\n --tw-gradient-from: #3b82f6 var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.from-blue-700 {\n --tw-gradient-from: #1d4ed8 var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(29 78 216 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.from-indigo-100 {\n --tw-gradient-from: #e0e7ff var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(224 231 255 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.from-orange-400 {\n --tw-gradient-from: #fb923c var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(251 146 60 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.via-transparent {\n --tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), transparent var(--tw-gradient-via-position), var(--tw-gradient-to);\n}\n.via-yellow-400 {\n --tw-gradient-to: rgb(250 204 21 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), #facc15 var(--tw-gradient-via-position), var(--tw-gradient-to);\n}\n.to-amber-400 {\n --tw-gradient-to: #fbbf24 var(--tw-gradient-to-position);\n}\n.to-amber-50 {\n --tw-gradient-to: #fffbeb var(--tw-gradient-to-position);\n}\n.to-blue-500 {\n --tw-gradient-to: #3b82f6 var(--tw-gradient-to-position);\n}\n.to-orange-400 {\n --tw-gradient-to: #fb923c var(--tw-gradient-to-position);\n}\n.to-purple-500 {\n --tw-gradient-to: #a855f7 var(--tw-gradient-to-position);\n}\n.to-transparent {\n --tw-gradient-to: transparent var(--tw-gradient-to-position);\n}\n.to-yellow-50 {\n --tw-gradient-to: #fefce8 var(--tw-gradient-to-position);\n}\n.to-yellow-500 {\n --tw-gradient-to: #eab308 var(--tw-gradient-to-position);\n}\n.bg-clip-text {\n -webkit-background-clip: text;\n background-clip: text;\n}\n.fill-gray-900 {\n fill: #111827;\n}\n.object-contain {\n -o-object-fit: contain;\n object-fit: contain;\n}\n.object-cover {\n -o-object-fit: cover;\n object-fit: cover;\n}\n.p-0 {\n padding: 0px;\n}\n.p-1 {\n padding: 0.25rem;\n}\n.p-10 {\n padding: 2.5rem;\n}\n.p-2 {\n padding: 0.5rem;\n}\n.p-2\\.5 {\n padding: 0.625rem;\n}\n.p-3 {\n padding: 0.75rem;\n}\n.p-4 {\n padding: 1rem;\n}\n.p-5 {\n padding: 1.25rem;\n}\n.p-6 {\n padding: 1.5rem;\n}\n.p-8 {\n padding: 2rem;\n}\n.px-0\\.5 {\n padding-left: 0.125rem;\n padding-right: 0.125rem;\n}\n.px-1 {\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n}\n.px-1\\.5 {\n padding-left: 0.375rem;\n padding-right: 0.375rem;\n}\n.px-2 {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n.px-2\\.5 {\n padding-left: 0.625rem;\n padding-right: 0.625rem;\n}\n.px-3 {\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n}\n.px-3\\.5 {\n padding-left: 0.875rem;\n padding-right: 0.875rem;\n}\n.px-4 {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n.px-5 {\n padding-left: 1.25rem;\n padding-right: 1.25rem;\n}\n.px-6 {\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n}\n.px-7 {\n padding-left: 1.75rem;\n padding-right: 1.75rem;\n}\n.px-8 {\n padding-left: 2rem;\n padding-right: 2rem;\n}\n.py-0\\.5 {\n padding-top: 0.125rem;\n padding-bottom: 0.125rem;\n}\n.py-1 {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n}\n.py-1\\.5 {\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n}\n.py-10 {\n padding-top: 2.5rem;\n padding-bottom: 2.5rem;\n}\n.py-12 {\n padding-top: 3rem;\n padding-bottom: 3rem;\n}\n.py-14 {\n padding-top: 3.5rem;\n padding-bottom: 3.5rem;\n}\n.py-16 {\n padding-top: 4rem;\n padding-bottom: 4rem;\n}\n.py-2 {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n.py-2\\.5 {\n padding-top: 0.625rem;\n padding-bottom: 0.625rem;\n}\n.py-20 {\n padding-top: 5rem;\n padding-bottom: 5rem;\n}\n.py-24 {\n padding-top: 6rem;\n padding-bottom: 6rem;\n}\n.py-3 {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n}\n.py-3\\.5 {\n padding-top: 0.875rem;\n padding-bottom: 0.875rem;\n}\n.py-4 {\n padding-top: 1rem;\n padding-bottom: 1rem;\n}\n.py-5 {\n padding-top: 1.25rem;\n padding-bottom: 1.25rem;\n}\n.py-6 {\n padding-top: 1.5rem;\n padding-bottom: 1.5rem;\n}\n.py-8 {\n padding-top: 2rem;\n padding-bottom: 2rem;\n}\n.pb-0\\.5 {\n padding-bottom: 0.125rem;\n}\n.pb-1 {\n padding-bottom: 0.25rem;\n}\n.pb-2 {\n padding-bottom: 0.5rem;\n}\n.pb-20 {\n padding-bottom: 5rem;\n}\n.pb-4 {\n padding-bottom: 1rem;\n}\n.pb-5 {\n padding-bottom: 1.25rem;\n}\n.pl-10 {\n padding-left: 2.5rem;\n}\n.pl-12 {\n padding-left: 3rem;\n}\n.pl-5 {\n padding-left: 1.25rem;\n}\n.pl-7 {\n padding-left: 1.75rem;\n}\n.pl-8 {\n padding-left: 2rem;\n}\n.pr-14 {\n padding-right: 3.5rem;\n}\n.pr-2 {\n padding-right: 0.5rem;\n}\n.pr-24 {\n padding-right: 6rem;\n}\n.pr-3 {\n padding-right: 0.75rem;\n}\n.pr-4 {\n padding-right: 1rem;\n}\n.pt-1 {\n padding-top: 0.25rem;\n}\n.pt-10 {\n padding-top: 2.5rem;\n}\n.pt-16 {\n padding-top: 4rem;\n}\n.pt-2 {\n padding-top: 0.5rem;\n}\n.pt-3 {\n padding-top: 0.75rem;\n}\n.pt-4 {\n padding-top: 1rem;\n}\n.pt-6 {\n padding-top: 1.5rem;\n}\n.pt-8 {\n padding-top: 2rem;\n}\n.text-left {\n text-align: left;\n}\n.text-center {\n text-align: center;\n}\n.text-right {\n text-align: right;\n}\n.align-top {\n vertical-align: top;\n}\n.font-mono {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n.text-2xl {\n font-size: 1.5rem;\n line-height: 2rem;\n}\n.text-3xl {\n font-size: 1.875rem;\n line-height: 2.25rem;\n}\n.text-4xl {\n font-size: 2.25rem;\n line-height: 2.5rem;\n}\n.text-5xl {\n font-size: 3rem;\n line-height: 1;\n}\n.text-8xl {\n font-size: 6rem;\n line-height: 1;\n}\n.text-\\[10px\\] {\n font-size: 10px;\n}\n.text-\\[11px\\] {\n font-size: 11px;\n}\n.text-\\[8px\\] {\n font-size: 8px;\n}\n.text-\\[9px\\] {\n font-size: 9px;\n}\n.text-base {\n font-size: 1rem;\n line-height: 1.5rem;\n}\n.text-lg {\n font-size: 1.125rem;\n line-height: 1.75rem;\n}\n.text-sm {\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n.text-xl {\n font-size: 1.25rem;\n line-height: 1.75rem;\n}\n.text-xs {\n font-size: 0.75rem;\n line-height: 1rem;\n}\n.font-bold {\n font-weight: 700;\n}\n.font-extrabold {\n font-weight: 800;\n}\n.font-medium {\n font-weight: 500;\n}\n.font-normal {\n font-weight: 400;\n}\n.font-semibold {\n font-weight: 600;\n}\n.uppercase {\n text-transform: uppercase;\n}\n.italic {\n font-style: italic;\n}\n.leading-none {\n line-height: 1;\n}\n.leading-relaxed {\n line-height: 1.625;\n}\n.leading-snug {\n line-height: 1.375;\n}\n.leading-tight {\n line-height: 1.25;\n}\n.tracking-tight {\n letter-spacing: -0.025em;\n}\n.tracking-wide {\n letter-spacing: 0.025em;\n}\n.tracking-wider {\n letter-spacing: 0.05em;\n}\n.text-amber-400 {\n --tw-text-opacity: 1;\n color: rgb(251 191 36 / var(--tw-text-opacity, 1));\n}\n.text-amber-500 {\n --tw-text-opacity: 1;\n color: rgb(245 158 11 / var(--tw-text-opacity, 1));\n}\n.text-amber-600 {\n --tw-text-opacity: 1;\n color: rgb(217 119 6 / var(--tw-text-opacity, 1));\n}\n.text-amber-700 {\n --tw-text-opacity: 1;\n color: rgb(180 83 9 / var(--tw-text-opacity, 1));\n}\n.text-amber-800 {\n --tw-text-opacity: 1;\n color: rgb(146 64 14 / var(--tw-text-opacity, 1));\n}\n.text-amber-900 {\n --tw-text-opacity: 1;\n color: rgb(120 53 15 / var(--tw-text-opacity, 1));\n}\n.text-blue-100 {\n --tw-text-opacity: 1;\n color: rgb(219 234 254 / var(--tw-text-opacity, 1));\n}\n.text-blue-300 {\n --tw-text-opacity: 1;\n color: rgb(147 197 253 / var(--tw-text-opacity, 1));\n}\n.text-blue-400 {\n --tw-text-opacity: 1;\n color: rgb(96 165 250 / var(--tw-text-opacity, 1));\n}\n.text-blue-500 {\n --tw-text-opacity: 1;\n color: rgb(59 130 246 / var(--tw-text-opacity, 1));\n}\n.text-blue-600 {\n --tw-text-opacity: 1;\n color: rgb(37 99 235 / var(--tw-text-opacity, 1));\n}\n.text-blue-700 {\n --tw-text-opacity: 1;\n color: rgb(29 78 216 / var(--tw-text-opacity, 1));\n}\n.text-blue-800 {\n --tw-text-opacity: 1;\n color: rgb(30 64 175 / var(--tw-text-opacity, 1));\n}\n.text-blue-900 {\n --tw-text-opacity: 1;\n color: rgb(30 58 138 / var(--tw-text-opacity, 1));\n}\n.text-emerald-400 {\n --tw-text-opacity: 1;\n color: rgb(52 211 153 / var(--tw-text-opacity, 1));\n}\n.text-emerald-500 {\n --tw-text-opacity: 1;\n color: rgb(16 185 129 / var(--tw-text-opacity, 1));\n}\n.text-emerald-600 {\n --tw-text-opacity: 1;\n color: rgb(5 150 105 / var(--tw-text-opacity, 1));\n}\n.text-emerald-700 {\n --tw-text-opacity: 1;\n color: rgb(4 120 87 / var(--tw-text-opacity, 1));\n}\n.text-emerald-800 {\n --tw-text-opacity: 1;\n color: rgb(6 95 70 / var(--tw-text-opacity, 1));\n}\n.text-emerald-900 {\n --tw-text-opacity: 1;\n color: rgb(6 78 59 / var(--tw-text-opacity, 1));\n}\n.text-gray-200 {\n --tw-text-opacity: 1;\n color: rgb(229 231 235 / var(--tw-text-opacity, 1));\n}\n.text-gray-300 {\n --tw-text-opacity: 1;\n color: rgb(209 213 219 / var(--tw-text-opacity, 1));\n}\n.text-gray-400 {\n --tw-text-opacity: 1;\n color: rgb(156 163 175 / var(--tw-text-opacity, 1));\n}\n.text-gray-500 {\n --tw-text-opacity: 1;\n color: rgb(107 114 128 / var(--tw-text-opacity, 1));\n}\n.text-gray-600 {\n --tw-text-opacity: 1;\n color: rgb(75 85 99 / var(--tw-text-opacity, 1));\n}\n.text-gray-700 {\n --tw-text-opacity: 1;\n color: rgb(55 65 81 / var(--tw-text-opacity, 1));\n}\n.text-gray-800 {\n --tw-text-opacity: 1;\n color: rgb(31 41 55 / var(--tw-text-opacity, 1));\n}\n.text-gray-900 {\n --tw-text-opacity: 1;\n color: rgb(17 24 39 / var(--tw-text-opacity, 1));\n}\n.text-green-400 {\n --tw-text-opacity: 1;\n color: rgb(74 222 128 / var(--tw-text-opacity, 1));\n}\n.text-green-500 {\n --tw-text-opacity: 1;\n color: rgb(34 197 94 / var(--tw-text-opacity, 1));\n}\n.text-green-600 {\n --tw-text-opacity: 1;\n color: rgb(22 163 74 / var(--tw-text-opacity, 1));\n}\n.text-green-700 {\n --tw-text-opacity: 1;\n color: rgb(21 128 61 / var(--tw-text-opacity, 1));\n}\n.text-green-800 {\n --tw-text-opacity: 1;\n color: rgb(22 101 52 / var(--tw-text-opacity, 1));\n}\n.text-indigo-500 {\n --tw-text-opacity: 1;\n color: rgb(99 102 241 / var(--tw-text-opacity, 1));\n}\n.text-indigo-600 {\n --tw-text-opacity: 1;\n color: rgb(79 70 229 / var(--tw-text-opacity, 1));\n}\n.text-indigo-700 {\n --tw-text-opacity: 1;\n color: rgb(67 56 202 / var(--tw-text-opacity, 1));\n}\n.text-orange-400 {\n --tw-text-opacity: 1;\n color: rgb(251 146 60 / var(--tw-text-opacity, 1));\n}\n.text-orange-500 {\n --tw-text-opacity: 1;\n color: rgb(249 115 22 / var(--tw-text-opacity, 1));\n}\n.text-orange-600 {\n --tw-text-opacity: 1;\n color: rgb(234 88 12 / var(--tw-text-opacity, 1));\n}\n.text-orange-700 {\n --tw-text-opacity: 1;\n color: rgb(194 65 12 / var(--tw-text-opacity, 1));\n}\n.text-orange-800 {\n --tw-text-opacity: 1;\n color: rgb(154 52 18 / var(--tw-text-opacity, 1));\n}\n.text-pink-400 {\n --tw-text-opacity: 1;\n color: rgb(244 114 182 / var(--tw-text-opacity, 1));\n}\n.text-pink-500 {\n --tw-text-opacity: 1;\n color: rgb(236 72 153 / var(--tw-text-opacity, 1));\n}\n.text-pink-600 {\n --tw-text-opacity: 1;\n color: rgb(219 39 119 / var(--tw-text-opacity, 1));\n}\n.text-purple-400 {\n --tw-text-opacity: 1;\n color: rgb(192 132 252 / var(--tw-text-opacity, 1));\n}\n.text-purple-500 {\n --tw-text-opacity: 1;\n color: rgb(168 85 247 / var(--tw-text-opacity, 1));\n}\n.text-purple-600 {\n --tw-text-opacity: 1;\n color: rgb(147 51 234 / var(--tw-text-opacity, 1));\n}\n.text-purple-700 {\n --tw-text-opacity: 1;\n color: rgb(126 34 206 / var(--tw-text-opacity, 1));\n}\n.text-red-400 {\n --tw-text-opacity: 1;\n color: rgb(248 113 113 / var(--tw-text-opacity, 1));\n}\n.text-red-500 {\n --tw-text-opacity: 1;\n color: rgb(239 68 68 / var(--tw-text-opacity, 1));\n}\n.text-red-600 {\n --tw-text-opacity: 1;\n color: rgb(220 38 38 / var(--tw-text-opacity, 1));\n}\n.text-red-700 {\n --tw-text-opacity: 1;\n color: rgb(185 28 28 / var(--tw-text-opacity, 1));\n}\n.text-rose-700 {\n --tw-text-opacity: 1;\n color: rgb(190 18 60 / var(--tw-text-opacity, 1));\n}\n.text-rose-800 {\n --tw-text-opacity: 1;\n color: rgb(159 18 57 / var(--tw-text-opacity, 1));\n}\n.text-rose-900 {\n --tw-text-opacity: 1;\n color: rgb(136 19 55 / var(--tw-text-opacity, 1));\n}\n.text-sky-600 {\n --tw-text-opacity: 1;\n color: rgb(2 132 199 / var(--tw-text-opacity, 1));\n}\n.text-sky-700 {\n --tw-text-opacity: 1;\n color: rgb(3 105 161 / var(--tw-text-opacity, 1));\n}\n.text-slate-300 {\n --tw-text-opacity: 1;\n color: rgb(203 213 225 / var(--tw-text-opacity, 1));\n}\n.text-slate-400 {\n --tw-text-opacity: 1;\n color: rgb(148 163 184 / var(--tw-text-opacity, 1));\n}\n.text-slate-500 {\n --tw-text-opacity: 1;\n color: rgb(100 116 139 / var(--tw-text-opacity, 1));\n}\n.text-slate-600 {\n --tw-text-opacity: 1;\n color: rgb(71 85 105 / var(--tw-text-opacity, 1));\n}\n.text-slate-700 {\n --tw-text-opacity: 1;\n color: rgb(51 65 85 / var(--tw-text-opacity, 1));\n}\n.text-slate-900 {\n --tw-text-opacity: 1;\n color: rgb(15 23 42 / var(--tw-text-opacity, 1));\n}\n.text-teal-700 {\n --tw-text-opacity: 1;\n color: rgb(15 118 110 / var(--tw-text-opacity, 1));\n}\n.text-transparent {\n color: transparent;\n}\n.text-violet-600 {\n --tw-text-opacity: 1;\n color: rgb(124 58 237 / var(--tw-text-opacity, 1));\n}\n.text-violet-700 {\n --tw-text-opacity: 1;\n color: rgb(109 40 217 / var(--tw-text-opacity, 1));\n}\n.text-white {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity, 1));\n}\n.text-white\\/50 {\n color: rgb(255 255 255 / 0.5);\n}\n.text-white\\/60 {\n color: rgb(255 255 255 / 0.6);\n}\n.text-white\\/70 {\n color: rgb(255 255 255 / 0.7);\n}\n.text-white\\/80 {\n color: rgb(255 255 255 / 0.8);\n}\n.text-white\\/90 {\n color: rgb(255 255 255 / 0.9);\n}\n.text-yellow-300 {\n --tw-text-opacity: 1;\n color: rgb(253 224 71 / var(--tw-text-opacity, 1));\n}\n.text-yellow-400 {\n --tw-text-opacity: 1;\n color: rgb(250 204 21 / var(--tw-text-opacity, 1));\n}\n.text-yellow-500 {\n --tw-text-opacity: 1;\n color: rgb(234 179 8 / var(--tw-text-opacity, 1));\n}\n.text-yellow-600 {\n --tw-text-opacity: 1;\n color: rgb(202 138 4 / var(--tw-text-opacity, 1));\n}\n.text-yellow-700 {\n --tw-text-opacity: 1;\n color: rgb(161 98 7 / var(--tw-text-opacity, 1));\n}\n.text-yellow-800 {\n --tw-text-opacity: 1;\n color: rgb(133 77 14 / var(--tw-text-opacity, 1));\n}\n.underline {\n text-decoration-line: underline;\n}\n.line-through {\n text-decoration-line: line-through;\n}\n.opacity-0 {\n opacity: 0;\n}\n.opacity-100 {\n opacity: 1;\n}\n.opacity-25 {\n opacity: 0.25;\n}\n.opacity-40 {\n opacity: 0.4;\n}\n.opacity-50 {\n opacity: 0.5;\n}\n.opacity-60 {\n opacity: 0.6;\n}\n.opacity-70 {\n opacity: 0.7;\n}\n.opacity-75 {\n opacity: 0.75;\n}\n.shadow {\n --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-2xl {\n --tw-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25);\n --tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-lg {\n --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-md {\n --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-sm {\n --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-xl {\n --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-amber-100 {\n --tw-shadow-color: #fef3c7;\n --tw-shadow: var(--tw-shadow-colored);\n}\n.shadow-amber-300\\/50 {\n --tw-shadow-color: rgb(252 211 77 / 0.5);\n --tw-shadow: var(--tw-shadow-colored);\n}\n.shadow-amber-500\\/25 {\n --tw-shadow-color: rgb(245 158 11 / 0.25);\n --tw-shadow: var(--tw-shadow-colored);\n}\n.\\!ring-2 {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000) !important;\n}\n.ring-2 {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.ring-4 {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.\\!ring-blue-500 {\n --tw-ring-opacity: 1 !important;\n --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1)) !important;\n}\n.ring-blue-200 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(191 219 254 / var(--tw-ring-opacity, 1));\n}\n.ring-blue-400 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(96 165 250 / var(--tw-ring-opacity, 1));\n}\n.ring-blue-500 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1));\n}\n.\\!ring-offset-1 {\n --tw-ring-offset-width: 1px !important;\n}\n.ring-offset-1 {\n --tw-ring-offset-width: 1px;\n}\n.ring-offset-2 {\n --tw-ring-offset-width: 2px;\n}\n.blur {\n --tw-blur: blur(8px);\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.blur-\\[100px\\] {\n --tw-blur: blur(100px);\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.blur-\\[120px\\] {\n --tw-blur: blur(120px);\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.drop-shadow {\n --tw-drop-shadow: drop-shadow(0 1px 2px rgb(0 0 0 / 0.1)) drop-shadow(0 1px 1px rgb(0 0 0 / 0.06));\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.drop-shadow-lg {\n --tw-drop-shadow: drop-shadow(0 10px 8px rgb(0 0 0 / 0.04)) drop-shadow(0 4px 3px rgb(0 0 0 / 0.1));\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.filter {\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.backdrop-blur {\n --tw-backdrop-blur: blur(8px);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n.backdrop-blur-md {\n --tw-backdrop-blur: blur(12px);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n.backdrop-blur-sm {\n --tw-backdrop-blur: blur(4px);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n.backdrop-blur-xl {\n --tw-backdrop-blur: blur(24px);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n.transition {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-all {\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-colors {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-opacity {\n transition-property: opacity;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-transform {\n transition-property: transform;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.duration-200 {\n transition-duration: 200ms;\n}\n.duration-300 {\n transition-duration: 300ms;\n}\n.duration-500 {\n transition-duration: 500ms;\n}\n.ease-in-out {\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n\n:root {\n --blue-main: #2563eb;\n --blue-light: #60a5fa;\n --blue-dark: #1e40af;\n --orange-main: #f59e0b;\n --orange-light: #fbbf24;\n --orange-dark: #b45309;\n --glass-bg: rgba(255,255,255,0.65);\n --glass-blur: 18px;\n}\n\nbody {\n background: linear-gradient(135deg, var(--blue-main) 0%, var(--blue-light) 60%, var(--orange-light) 100%);\n color: #18181b;\n font-family: 'Inter', 'Segoe UI', Arial, sans-serif;\n min-height: 100vh;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n\n/* Section highlight styles */\n/* Glassmorphism section style */\n.section-contrast {\n background: var(--glass-bg);\n border-radius: 2.5rem;\n box-shadow: 0 8px 40px 0 rgba(37,99,235,0.10), 0 1.5px 8px 0 rgba(245,158,11,0.08);\n border: 1.5px solid rgba(96,165,250,0.13);\n margin-bottom: 3.5rem;\n padding: 3rem 1.5rem;\n backdrop-filter: blur(var(--glass-blur));\n -webkit-backdrop-filter: blur(var(--glass-blur));\n transition: box-shadow 0.3s, background 0.3s;\n}\n.section-contrast:before {\n display: none;\n}\n@media (min-width: 640px) {\n .section-contrast {\n padding: 4rem 2.5rem;\n margin-left: 1.5rem;\n margin-right: 1.5rem;\n }\n}\n@media (min-width: 1024px) {\n .section-contrast {\n margin-left: 2.5rem;\n margin-right: 2.5rem;\n }\n}\n\n/* Accent button */\n.btn-accent {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n background: var(--blue-main);\n color: #fff;\n font-weight: 700;\n border-radius: 1.2em;\n box-shadow: 0 4px 24px 0 rgba(37,99,235,0.13);\n padding: 0.9em 2.2em;\n font-size: 1.25rem;\n letter-spacing: 0.01em;\n transition: background 0.2s, box-shadow 0.2s, transform 0.15s;\n border: none;\n cursor: pointer;\n}\n.btn-accent:hover {\n background: var(--blue-dark);\n box-shadow: 0 8px 32px 0 rgba(245,158,11,0.13);\n transform: translateY(-2px) scale(1.03);\n}\n\n/* Outline button — same shape as btn-accent, white background */\n.btn-outline {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n background: #fff;\n color: var(--blue-main);\n font-weight: 700;\n border-radius: 1.2em;\n box-shadow: 0 4px 24px 0 rgba(37,99,235,0.10);\n padding: 0.9em 2.2em;\n font-size: 1.25rem;\n letter-spacing: 0.01em;\n border: 2px solid var(--blue-main);\n cursor: pointer;\n transition: background 0.2s, box-shadow 0.2s, transform 0.15s, color 0.2s;\n}\n.btn-outline:hover {\n background: var(--blue-main);\n color: #fff;\n box-shadow: 0 8px 32px 0 rgba(37,99,235,0.18);\n transform: translateY(-2px) scale(1.03);\n}\n\n/* Modern card */\n.modern-card {\n background: #fff;\n border-radius: 1.5rem;\n box-shadow: 0 2px 16px 0 rgba(37,99,235,0.07), 0 1.5px 8px 0 rgba(245,158,11,0.06);\n border: 1.5px solid rgba(96,165,250,0.09);\n transition: box-shadow 0.2s, border 0.2s;\n}\n.modern-card:hover {\n box-shadow: 0 8px 32px 0 rgba(245,158,11,0.13);\n border: 1.5px solid var(--orange-main);\n}\n\n/* Floating hero icons */\n@keyframes heroIconFloat {\n 0%, 100% { transform: translateY(0px) rotate(0deg); }\n 50% { transform: translateY(-14px) rotate(4deg); }\n}\n@keyframes heroIconDrift {\n 0%, 100% { transform: translateY(0px) rotate(0deg); }\n 33% { transform: translateY(-10px) rotate(-5deg); }\n 66% { transform: translateY(-6px) rotate(3deg); }\n}\n@keyframes heroIconSway {\n 0%, 100% { transform: translateY(0px) translateX(0px); }\n 50% { transform: translateY(-8px) translateX(6px); }\n}\n\n/* Animated gradient background for hero */\n.hero-bg-animated {\n background: linear-gradient(120deg, var(--blue-main) 0%, var(--blue-light) 60%, var(--orange-main) 100%);\n background-size: 200% 200%;\n animation: heroGradientMove 6s ease-in-out infinite;\n}\n@keyframes heroGradientMove {\n 0% { background-position: 0% 50%; }\n 50% { background-position: 100% 50%; }\n 100% { background-position: 0% 50%; }\n}\n\n/* Header shrink effect */\n.header-base {\n transition: all 0.3s cubic-bezier(.4,0,.2,1);\n}\n.header-shrink .header-content {\n height: 48px !important;\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n.header-shrink .logo-text {\n font-size: 1.3rem !important;\n letter-spacing: 0.01em;\n}\n\n.logo-text {\n font-family: 'Showpop', sans-serif !important;\n font-size: 1.7rem !important;\n font-weight: 300 !important;\n letter-spacing: 0.01em;\n text-transform: uppercase;\n}\n\n.logo-text-mini {\n font-family: 'Showpop', sans-serif !important;\n font-size: 1.3rem !important;\n font-weight: 300 !important;\n letter-spacing: 0.01em;\n text-transform: uppercase;\n transition: font-size 0.3s ease;\n}\n\n.logo-text-mini.scrolled {\n font-size: 1.1rem !important;\n}\n\n/* ── Site theme (dark = default) ── */\n.site-theme {\n --site-bg: #0a0a0f;\n --site-surface: rgba(255,255,255,0.03);\n --site-surface-hover: rgba(255,255,255,0.06);\n --site-border: rgba(255,255,255,0.05);\n --site-border-hover: rgba(255,255,255,0.1);\n --site-text: #ffffff;\n --site-text-secondary: rgba(255,255,255,0.5);\n --site-text-muted: rgba(255,255,255,0.3);\n --site-text-hint: rgba(255,255,255,0.2);\n --site-nav-bg: rgba(10,10,15,0.8);\n --site-modal-bg: #14141f;\n --site-input-bg: rgba(255,255,255,0.05);\n --site-input-border: rgba(255,255,255,0.1);\n --site-input-text: #ffffff;\n --site-input-placeholder: rgba(255,255,255,0.2);\n --site-tag-bg: rgba(255,255,255,0.05);\n --site-tag-border: rgba(255,255,255,0.05);\n --site-tag-text: rgba(255,255,255,0.6);\n --site-card-bg: rgba(255,255,255,0.03);\n --site-card-border: rgba(255,255,255,0.05);\n --site-name-from: #ffffff;\n --site-name-to: rgba(255,255,255,0.7);\n --site-avatar-border: rgba(255,255,255,0.1);\n --site-avatar-bg: rgba(255,255,255,0.05);\n --site-status-border-color: #0a0a0f;\n --site-phone-bg: rgba(255,255,255,0.05);\n --site-phone-border: rgba(255,255,255,0.1);\n --site-phone-text: #ffffff;\n --site-divider: rgba(255,255,255,0.1);\n --site-lang-dropdown: #1a1a24;\n --site-footer-text: rgba(255,255,255,0.2);\n --site-scroll-btn-bg: rgba(255,255,255,0.1);\n --site-scroll-btn-border: rgba(255,255,255,0.1);\n --site-scroll-btn-text: rgba(255,255,255,0.6);\n}\n\n.site-theme.site-light {\n --site-bg: #f8f9fb;\n --site-surface: rgba(0,0,0,0.02);\n --site-surface-hover: rgba(0,0,0,0.04);\n --site-border: rgba(0,0,0,0.08);\n --site-border-hover: rgba(0,0,0,0.15);\n --site-text: #1a1a2e;\n --site-text-secondary: rgba(0,0,0,0.55);\n --site-text-muted: rgba(0,0,0,0.4);\n --site-text-hint: rgba(0,0,0,0.25);\n --site-nav-bg: rgba(255,255,255,0.85);\n --site-modal-bg: #ffffff;\n --site-input-bg: rgba(0,0,0,0.03);\n --site-input-border: rgba(0,0,0,0.12);\n --site-input-text: #1a1a2e;\n --site-input-placeholder: rgba(0,0,0,0.3);\n --site-tag-bg: rgba(0,0,0,0.04);\n --site-tag-border: rgba(0,0,0,0.08);\n --site-tag-text: rgba(0,0,0,0.6);\n --site-card-bg: #ffffff;\n --site-card-border: rgba(0,0,0,0.08);\n --site-name-from: #1a1a2e;\n --site-name-to: rgba(26,26,46,0.7);\n --site-avatar-border: rgba(0,0,0,0.1);\n --site-avatar-bg: rgba(0,0,0,0.05);\n --site-status-border-color: #f8f9fb;\n --site-phone-bg: rgba(0,0,0,0.04);\n --site-phone-border: rgba(0,0,0,0.1);\n --site-phone-text: #1a1a2e;\n --site-divider: rgba(0,0,0,0.08);\n --site-lang-dropdown: #ffffff;\n --site-footer-text: rgba(0,0,0,0.3);\n --site-scroll-btn-bg: rgba(0,0,0,0.06);\n --site-scroll-btn-border: rgba(0,0,0,0.1);\n --site-scroll-btn-text: rgba(0,0,0,0.5);\n}\n\n.logo-text-jaipur {\n font-family: 'Jaipur', 'Inter', 'Segoe UI', Arial, sans-serif !important;\n font-size: 1.7rem !important;\n letter-spacing: 0.01em;\n text-transform: uppercase;\n}\n\n.logo-text-rennie {\n font-family: 'Rennie', 'Inter', 'Segoe UI', Arial, sans-serif !important;\n font-size: 1.7rem !important;\n letter-spacing: 0.01em;\n text-transform: uppercase;\n}\n\n/* Scroll to top button */\n.scroll-to-top-btn {\n position: fixed;\n right: 2rem;\n bottom: 2.5rem;\n z-index: 100;\n background: #6366f1;\n color: #fff;\n border-radius: 9999px;\n box-shadow: 0 2px 12px 0 rgba(80,80,120,0.13);\n padding: 0.75rem;\n width: 3rem;\n height: 3rem;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 1.5rem;\n border: none;\n cursor: pointer;\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.3s;\n}\n.scroll-to-top-btn.visible {\n opacity: 1;\n pointer-events: auto;\n}\n\n@font-face {\n font-family: 'NorseCyr2';\n src: url('/fonts/Norse-Regular.woff2') format('woff2');\n font-weight: normal;\n font-style: normal;\n font-display: swap;\n}\n\n@font-face {\n font-family: 'Jaipur';\n src: url('/fonts/Jaipur.woff2') format('woff2');\n font-weight: normal;\n font-style: normal;\n font-display: swap;\n}\n\n@font-face {\n font-family: 'Rennie';\n src: url('/fonts/Rennie.woff2') format('woff2');\n font-weight: normal;\n font-style: normal;\n font-display: swap;\n}\n\n.selection\\:bg-blue-500\\/30 *::-moz-selection {\n background-color: rgb(59 130 246 / 0.3);\n}\n\n.selection\\:bg-blue-500\\/30 *::selection {\n background-color: rgb(59 130 246 / 0.3);\n}\n\n.selection\\:bg-blue-500\\/30::-moz-selection {\n background-color: rgb(59 130 246 / 0.3);\n}\n\n.selection\\:bg-blue-500\\/30::selection {\n background-color: rgb(59 130 246 / 0.3);\n}\n\n.placeholder\\:text-blue-300::-moz-placeholder {\n --tw-text-opacity: 1;\n color: rgb(147 197 253 / var(--tw-text-opacity, 1));\n}\n\n.placeholder\\:text-blue-300::placeholder {\n --tw-text-opacity: 1;\n color: rgb(147 197 253 / var(--tw-text-opacity, 1));\n}\n\n.last\\:border-0:last-child {\n border-width: 0px;\n}\n\n.last\\:pb-0:last-child {\n padding-bottom: 0px;\n}\n\n.focus-within\\:ring-2:focus-within {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n\n.focus-within\\:ring-blue-400:focus-within {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(96 165 250 / var(--tw-ring-opacity, 1));\n}\n\n.hover\\:border-blue-300:hover {\n --tw-border-opacity: 1;\n border-color: rgb(147 197 253 / var(--tw-border-opacity, 1));\n}\n\n.hover\\:border-blue-400:hover {\n --tw-border-opacity: 1;\n border-color: rgb(96 165 250 / var(--tw-border-opacity, 1));\n}\n\n.hover\\:border-gray-300:hover {\n --tw-border-opacity: 1;\n border-color: rgb(209 213 219 / var(--tw-border-opacity, 1));\n}\n\n.hover\\:bg-amber-200:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(253 230 138 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-amber-50:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(255 251 235 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-amber-600:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(217 119 6 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-black\\/70:hover {\n background-color: rgb(0 0 0 / 0.7);\n}\n\n.hover\\:bg-blue-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(219 234 254 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-blue-50:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(239 246 255 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-blue-50\\/60:hover {\n background-color: rgb(239 246 255 / 0.6);\n}\n\n.hover\\:bg-blue-500:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(59 130 246 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-blue-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(29 78 216 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-emerald-200:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(167 243 208 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-emerald-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(4 120 87 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-gray-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-gray-200:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-gray-50:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-gray-50\\/50:hover {\n background-color: rgb(249 250 251 / 0.5);\n}\n\n.hover\\:bg-gray-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(55 65 81 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-green-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(220 252 231 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-green-50:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(240 253 244 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-green-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(21 128 61 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-indigo-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(224 231 255 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-indigo-200:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(199 210 254 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-indigo-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(67 56 202 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-orange-600:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(234 88 12 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-pink-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(252 231 243 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-pink-50:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(253 242 248 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-purple-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(243 232 255 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-purple-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(126 34 206 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-red-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(254 226 226 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-red-200:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(254 202 202 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-red-50:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(254 242 242 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-red-600:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(220 38 38 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-rose-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(190 18 60 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-slate-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(241 245 249 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-slate-800:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(30 41 59 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-white:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-white\\/10:hover {\n background-color: rgb(255 255 255 / 0.1);\n}\n\n.hover\\:bg-white\\/20:hover {\n background-color: rgb(255 255 255 / 0.2);\n}\n\n.hover\\:bg-white\\/25:hover {\n background-color: rgb(255 255 255 / 0.25);\n}\n\n.hover\\:bg-yellow-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(254 249 195 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-yellow-600:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(202 138 4 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:from-amber-600:hover {\n --tw-gradient-from: #d97706 var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(217 119 6 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n\n.hover\\:to-yellow-600:hover {\n --tw-gradient-to: #ca8a04 var(--tw-gradient-to-position);\n}\n\n.hover\\:text-black:hover {\n --tw-text-opacity: 1;\n color: rgb(0 0 0 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-blue-300:hover {\n --tw-text-opacity: 1;\n color: rgb(147 197 253 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-blue-400:hover {\n --tw-text-opacity: 1;\n color: rgb(96 165 250 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-blue-600:hover {\n --tw-text-opacity: 1;\n color: rgb(37 99 235 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-blue-700:hover {\n --tw-text-opacity: 1;\n color: rgb(29 78 216 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-blue-800:hover {\n --tw-text-opacity: 1;\n color: rgb(30 64 175 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-gray-600:hover {\n --tw-text-opacity: 1;\n color: rgb(75 85 99 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-gray-700:hover {\n --tw-text-opacity: 1;\n color: rgb(55 65 81 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-gray-800:hover {\n --tw-text-opacity: 1;\n color: rgb(31 41 55 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-gray-900:hover {\n --tw-text-opacity: 1;\n color: rgb(17 24 39 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-green-500:hover {\n --tw-text-opacity: 1;\n color: rgb(34 197 94 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-green-700:hover {\n --tw-text-opacity: 1;\n color: rgb(21 128 61 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-indigo-700:hover {\n --tw-text-opacity: 1;\n color: rgb(67 56 202 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-pink-400:hover {\n --tw-text-opacity: 1;\n color: rgb(244 114 182 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-pink-500:hover {\n --tw-text-opacity: 1;\n color: rgb(236 72 153 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-pink-600:hover {\n --tw-text-opacity: 1;\n color: rgb(219 39 119 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-purple-600:hover {\n --tw-text-opacity: 1;\n color: rgb(147 51 234 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-purple-700:hover {\n --tw-text-opacity: 1;\n color: rgb(126 34 206 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-red-400:hover {\n --tw-text-opacity: 1;\n color: rgb(248 113 113 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-red-500:hover {\n --tw-text-opacity: 1;\n color: rgb(239 68 68 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-red-600:hover {\n --tw-text-opacity: 1;\n color: rgb(220 38 38 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-red-700:hover {\n --tw-text-opacity: 1;\n color: rgb(185 28 28 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-sky-500:hover {\n --tw-text-opacity: 1;\n color: rgb(14 165 233 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-slate-700:hover {\n --tw-text-opacity: 1;\n color: rgb(51 65 85 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-white:hover {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-white\\/80:hover {\n color: rgb(255 255 255 / 0.8);\n}\n\n.hover\\:underline:hover {\n text-decoration-line: underline;\n}\n\n.hover\\:opacity-90:hover {\n opacity: 0.9;\n}\n\n.hover\\:shadow-lg:hover {\n --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.hover\\:shadow-md:hover {\n --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.hover\\:shadow-sm:hover {\n --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.hover\\:shadow-xl:hover {\n --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.hover\\:shadow-blue-500\\/25:hover {\n --tw-shadow-color: rgb(59 130 246 / 0.25);\n --tw-shadow: var(--tw-shadow-colored);\n}\n\n.focus\\:border-blue-500\\/50:focus {\n border-color: rgb(59 130 246 / 0.5);\n}\n\n.focus\\:outline-none:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n\n.focus\\:ring-2:focus {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n\n.focus\\:ring-blue-300:focus {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity, 1));\n}\n\n.focus\\:ring-blue-400:focus {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(96 165 250 / var(--tw-ring-opacity, 1));\n}\n\n.focus\\:ring-blue-500:focus {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1));\n}\n\n.focus\\:ring-emerald-400:focus {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(52 211 153 / var(--tw-ring-opacity, 1));\n}\n\n.focus\\:ring-rose-400:focus {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(251 113 133 / var(--tw-ring-opacity, 1));\n}\n\n.focus\\:ring-offset-2:focus {\n --tw-ring-offset-width: 2px;\n}\n\n.active\\:scale-95:active {\n --tw-scale-x: .95;\n --tw-scale-y: .95;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.disabled\\:cursor-not-allowed:disabled {\n cursor: not-allowed;\n}\n\n.disabled\\:bg-gray-300:disabled {\n --tw-bg-opacity: 1;\n background-color: rgb(209 213 219 / var(--tw-bg-opacity, 1));\n}\n\n.disabled\\:bg-gray-50:disabled {\n --tw-bg-opacity: 1;\n background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1));\n}\n\n.disabled\\:text-gray-400:disabled {\n --tw-text-opacity: 1;\n color: rgb(156 163 175 / var(--tw-text-opacity, 1));\n}\n\n.disabled\\:no-underline:disabled {\n text-decoration-line: none;\n}\n\n.disabled\\:opacity-40:disabled {\n opacity: 0.4;\n}\n\n.disabled\\:opacity-50:disabled {\n opacity: 0.5;\n}\n\n.disabled\\:opacity-60:disabled {\n opacity: 0.6;\n}\n\n.group:hover .group-hover\\:scale-105 {\n --tw-scale-x: 1.05;\n --tw-scale-y: 1.05;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.group:hover .group-hover\\:scale-110 {\n --tw-scale-x: 1.1;\n --tw-scale-y: 1.1;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.group:hover .group-hover\\:border-blue-400 {\n --tw-border-opacity: 1;\n border-color: rgb(96 165 250 / var(--tw-border-opacity, 1));\n}\n\n.group:hover .group-hover\\:bg-black\\/50 {\n background-color: rgb(0 0 0 / 0.5);\n}\n\n.group:hover .group-hover\\:text-blue-600 {\n --tw-text-opacity: 1;\n color: rgb(37 99 235 / var(--tw-text-opacity, 1));\n}\n\n.group:hover .group-hover\\:text-orange-600 {\n --tw-text-opacity: 1;\n color: rgb(234 88 12 / var(--tw-text-opacity, 1));\n}\n\n.group:hover .group-hover\\:underline {\n text-decoration-line: underline;\n}\n\n.group:hover .group-hover\\:opacity-100 {\n opacity: 1;\n}\n\n.group:hover .group-hover\\:opacity-80 {\n opacity: 0.8;\n}\n\n.has-\\[\\:checked\\]\\:border-blue-500:has(:checked) {\n --tw-border-opacity: 1;\n border-color: rgb(59 130 246 / var(--tw-border-opacity, 1));\n}\n\n.has-\\[\\:checked\\]\\:bg-blue-50:has(:checked) {\n --tw-bg-opacity: 1;\n background-color: rgb(239 246 255 / var(--tw-bg-opacity, 1));\n}\n\n@media (min-width: 640px) {\n\n .sm\\:mb-6 {\n margin-bottom: 1.5rem;\n }\n\n .sm\\:block {\n display: block;\n }\n\n .sm\\:hidden {\n display: none;\n }\n\n .sm\\:h-32 {\n height: 8rem;\n }\n\n .sm\\:w-32 {\n width: 8rem;\n }\n\n .sm\\:w-auto {\n width: auto;\n }\n\n .sm\\:flex-1 {\n flex: 1 1 0%;\n }\n\n .sm\\:grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n\n .sm\\:grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n\n .sm\\:grid-cols-4 {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n }\n\n .sm\\:flex-row {\n flex-direction: row;\n }\n\n .sm\\:items-center {\n align-items: center;\n }\n\n .sm\\:gap-3 {\n gap: 0.75rem;\n }\n\n .sm\\:gap-4 {\n gap: 1rem;\n }\n\n .sm\\:space-y-5 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1.25rem * var(--tw-space-y-reverse));\n }\n\n .sm\\:p-6 {\n padding: 1.5rem;\n }\n\n .sm\\:px-4 {\n padding-left: 1rem;\n padding-right: 1rem;\n }\n\n .sm\\:px-6 {\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n }\n\n .sm\\:py-8 {\n padding-top: 2rem;\n padding-bottom: 2rem;\n }\n\n .sm\\:pb-28 {\n padding-bottom: 7rem;\n }\n\n .sm\\:pt-24 {\n padding-top: 6rem;\n }\n\n .sm\\:text-2xl {\n font-size: 1.5rem;\n line-height: 2rem;\n }\n\n .sm\\:text-5xl {\n font-size: 3rem;\n line-height: 1;\n }\n\n .sm\\:text-lg {\n font-size: 1.125rem;\n line-height: 1.75rem;\n }\n}\n\n@media (min-width: 768px) {\n\n .md\\:flex {\n display: flex;\n }\n\n .md\\:hidden {\n display: none;\n }\n\n .md\\:w-64 {\n width: 16rem;\n }\n\n .md\\:grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n\n .md\\:grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n\n .md\\:grid-cols-4 {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n }\n\n .md\\:grid-cols-5 {\n grid-template-columns: repeat(5, minmax(0, 1fr));\n }\n\n .md\\:flex-row {\n flex-direction: row;\n }\n\n .md\\:p-14 {\n padding: 3.5rem;\n }\n\n .md\\:px-8 {\n padding-left: 2rem;\n padding-right: 2rem;\n }\n\n .md\\:text-3xl {\n font-size: 1.875rem;\n line-height: 2.25rem;\n }\n\n .md\\:text-5xl {\n font-size: 3rem;\n line-height: 1;\n }\n\n .md\\:text-6xl {\n font-size: 3.75rem;\n line-height: 1;\n }\n}\n\n@media (min-width: 1024px) {\n\n .lg\\:block {\n display: block;\n }\n\n .lg\\:w-64 {\n width: 16rem;\n }\n\n .lg\\:grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n\n .lg\\:grid-cols-4 {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n }\n\n .lg\\:grid-cols-6 {\n grid-template-columns: repeat(6, minmax(0, 1fr));\n }\n\n .lg\\:flex-row {\n flex-direction: row;\n }\n\n .lg\\:gap-8 {\n gap: 2rem;\n }\n\n .lg\\:px-8 {\n padding-left: 2rem;\n padding-right: 2rem;\n }\n}\n\n@media (min-width: 1280px) {\n\n .xl\\:grid-cols-7 {\n grid-template-columns: repeat(7, minmax(0, 1fr));\n }\n}\n", ""]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); “__webpack_require__•__webpack_require__.nMøÿÿ•__webpack_require__.r{ÿÿÿ•__webpack_require__.drÿÿÿ¦mini-css-extract-plugin/dist/CssModule@÷ÿÿ‰÷ÿÿŠ÷ÿÿ€ css/mini-extract÷ÿÿ  Šöÿÿ‹öÿÿ‚öÿÿ‰öÿÿ 2a4ecde6aeb2226c—webpack/lib/ModuleGraph“RestoreProvidedDataØöÿÿˆprovidedcanMangleProvideterminalBinding‹exportsInfo¡öÿÿ üëûÿÿ ù$üÿÿ öŒöÿÿ óúøÿÿ ðÿÿÿïÿÿÿîÿÿÿ ë¬øÿÿ èïøÿÿ ÇÈ º«webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSource«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSource@import(/* webpackMode: "eager" */ "/opt/canhelp/apps/web/src/app/globals.css"); ; 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"); aMRJÕÚIN½ÂGLÀÅ=åPromise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 8761, 23))ÞPromise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 300))ßPromise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 9808))ßPromise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 7443))ßPromise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 7380))ßPromise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 9906))ßPromise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 4029))̸Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 8761, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 300)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 9808)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 7443)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 7380)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 9906)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 4029)); ”{"finalSource":true}ƒmap‹bufferedMap ReplaceSourceRawSourceøõÿÿ077Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 8761, 23))undefined82213Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 300))undefined218329Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 9808))undefined334445Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 7443))undefined450583Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 7380))undefined588704Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 9906))undefined709829Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 4029))undefined•__webpack_require__.tÄôõÿÿ·¸ ¤ «webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSourceÀ/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ HeroSearch: () => (/* binding */ HeroSearch) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7541); «webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSource«/* __next_internal_client_entry_do_not_use__ HeroSearch auto */ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; import { useState } from 'react'; import { useRouter } from 'next/navigation'; export function HeroSearch(param) { let { placeholder, mode = 'customer' } = param; const [q, setQ] = useState(''); const router = useRouter(); const handleSubmit = (e)=>{ e.preventDefault(); const trimmed = q.trim(); if (mode === 'specialist') { if (trimmed) router.push("/tasks?q=".concat(encodeURIComponent(trimmed))); else router.push('/tasks'); } else { if (trimmed) router.push("/specialists?q=".concat(encodeURIComponent(trimmed))); else router.push('/specialists'); } }; return /*#__PURE__*/ _jsxs("form", { onSubmit: handleSubmit, className: "relative w-full mb-8", children: [ /*#__PURE__*/ _jsx("input", { type: "text", value: q, onChange: (e)=>setQ(e.target.value), placeholder: placeholder, className: "w-full pl-5 pr-14 py-3.5 rounded-2xl border border-blue-200 bg-white/90 text-blue-900 placeholder:text-blue-300 focus:outline-none focus:ring-2 focus:ring-blue-400 text-base shadow-sm" }), /*#__PURE__*/ _jsx("button", { type: "submit", className: "absolute right-2 top-1/2 -translate-y-1/2 bg-blue-600 hover:bg-blue-700 text-white p-2.5 rounded-xl transition-colors duration-200", "aria-label": "Search", children: /*#__PURE__*/ _jsx("svg", { className: "w-5 h-5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2.5, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 5.196a7.5 7.5 0 0010.607 10.607z" }) }) }) ] }); } b @~S€ ¢ÍÏÕ=D^f37¼¿be„‡†‰€€€€¯(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)º(0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)·(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)¶(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)ÿÿÿ¼* /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ HeroSearch: () => (/* binding */ HeroSearch) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7541); /* __next_internal_client_entry_do_not_use__ HeroSearch auto */ function HeroSearch(param) { let { placeholder, mode = 'customer' } = param; const [q, setQ] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(''); const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)(); const handleSubmit = (e)=>{ e.preventDefault(); const trimmed = q.trim(); if (mode === 'specialist') { if (trimmed) router.push("/tasks?q=".concat(encodeURIComponent(trimmed))); else router.push('/tasks'); } else { if (trimmed) router.push("/specialists?q=".concat(encodeURIComponent(trimmed))); else router.push('/specialists'); } }; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("form", { onSubmit: handleSubmit, className: "relative w-full mb-8", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("input", { type: "text", value: q, onChange: (e)=>setQ(e.target.value), placeholder: placeholder, className: "w-full pl-5 pr-14 py-3.5 rounded-2xl border border-blue-200 bg-white/90 text-blue-900 placeholder:text-blue-300 focus:outline-none focus:ring-2 focus:ring-blue-400 text-base shadow-sm" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { type: "submit", className: "absolute right-2 top-1/2 -translate-y-1/2 bg-blue-600 hover:bg-blue-700 text-white p-2.5 rounded-xl transition-colors duration-200", "aria-label": "Search", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("svg", { className: "w-5 h-5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2.5, children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 5.196a7.5 7.5 0 0010.607 10.607z" }) }) }) ] }); } ðó ConcatSourceRawSourceÀ/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ HeroSearch: () => (/* binding */ HeroSearch) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7541); ò·ûÿÿ"64126undefined128160undefined162205undefined207213undefined317324(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined350358(0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)undefined819823(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined956959(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined13781381(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined16681671(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined19261929(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined¸øÿÿ»´ûÿÿ«¬ ¡«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSource5/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ HomeCityCloud: () => (/* binding */ HomeCityCloud) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7541); /* harmony import */ var _context_location__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4029); /* harmony import */ var _context_locale__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9906); «webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSourceÌ /* __next_internal_client_entry_do_not_use__ HomeCityCloud auto */ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; import { useRouter } from 'next/navigation'; import { useLocation } from '@/context/location'; import { useLocale } from '@/context/locale'; export function HomeCityCloud(param) { let { locationTree, isSpecialist = false } = param; const router = useRouter(); const { setLocation } = useLocation(); const { locale } = useLocale(); const handleClick = (slug)=>{ if (isSpecialist) { router.push("/tasks?location=".concat(slug)); } else { setLocation(slug); router.push('/tasks/new'); } }; if (!locationTree.length) return null; return /*#__PURE__*/ _jsx("div", { className: "flex flex-wrap justify-center gap-3", children: locationTree.map((city)=>{ var _city_names_locale, _city_children; return /*#__PURE__*/ _jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [ /*#__PURE__*/ _jsxs("button", { type: "button", onClick: ()=>handleClick(city.slug), className: "inline-flex items-center gap-1 px-4 py-2 rounded-full bg-indigo-100 text-indigo-700 font-semibold text-sm hover:bg-indigo-200 transition cursor-pointer", children: [ "\uD83D\uDCCD ", (_city_names_locale = city.names[locale]) !== null && _city_names_locale !== void 0 ? _city_names_locale : city.names['el'] ] }), ((_city_children = city.children) !== null && _city_children !== void 0 ? _city_children : []).map((d)=>{ var _d_names_locale; return /*#__PURE__*/ _jsx("button", { type: "button", onClick: ()=>handleClick(d.slug), className: "inline-flex items-center px-3 py-1.5 rounded-full bg-slate-100 text-slate-700 text-sm hover:bg-indigo-100 hover:text-indigo-700 transition cursor-pointer", children: (_d_names_locale = d.names[locale]) !== null && _d_names_locale !== void 0 ? _d_names_locale : d.names['el'] }, d.id); }) ] }, city.id); }) }); } a CVƒ®°à₊«µÑÙÌÐY]„€€€€€º(0,next_navigation__WEBPACK_IMPORTED_MODULE_1__.useRouter)Ç(0,_context_location__WEBPACK_IMPORTED_MODULE_2__/* .useLocation */ .z)Ã(0,_context_locale__WEBPACK_IMPORTED_MODULE_3__/* .useLocale */ .Y)¶(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)·(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)ÿþ°  /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ HomeCityCloud: () => (/* binding */ HomeCityCloud) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7541); /* harmony import */ var _context_location__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4029); /* harmony import */ var _context_locale__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9906); /* __next_internal_client_entry_do_not_use__ HomeCityCloud auto */ function HomeCityCloud(param) { let { locationTree, isSpecialist = false } = param; const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_1__.useRouter)(); const { setLocation } = (0,_context_location__WEBPACK_IMPORTED_MODULE_2__/* .useLocation */ .z)(); const { locale } = (0,_context_locale__WEBPACK_IMPORTED_MODULE_3__/* .useLocale */ .Y)(); const handleClick = (slug)=>{ if (isSpecialist) { router.push("/tasks?location=".concat(slug)); } else { setLocation(slug); router.push('/tasks/new'); } }; if (!locationTree.length) return null; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "flex flex-wrap justify-center gap-3", children: locationTree.map((city)=>{ var _city_names_locale, _city_children; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "flex flex-wrap items-center gap-2", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("button", { type: "button", onClick: ()=>handleClick(city.slug), className: "inline-flex items-center gap-1 px-4 py-2 rounded-full bg-indigo-100 text-indigo-700 font-semibold text-sm hover:bg-indigo-200 transition cursor-pointer", children: [ "\uD83D\uDCCD ", (_city_names_locale = city.names[locale]) !== null && _city_names_locale !== void 0 ? _city_names_locale : city.names['el'] ] }), ((_city_children = city.children) !== null && _city_children !== void 0 ? _city_children : []).map((d)=>{ var _d_names_locale; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { type: "button", onClick: ()=>handleClick(d.slug), className: "inline-flex items-center px-3 py-1.5 rounded-full bg-slate-100 text-slate-700 text-sm hover:bg-indigo-100 hover:text-indigo-700 transition cursor-pointer", children: (_d_names_locale = d.names[locale]) !== null && _d_names_locale !== void 0 ? _d_names_locale : d.names['el'] }, d.id); }) ] }, city.id); }) }); } äç ô5/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ HomeCityCloud: () => (/* binding */ HomeCityCloud) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7541); /* harmony import */ var _context_location__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4029); /* harmony import */ var _context_locale__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9906); çèûÿÿU67129undefined131174undefined176224undefined226270undefined272278undefined386394(0,next_navigation__WEBPACK_IMPORTED_MODULE_1__.useRouter)undefined427437(0,_context_location__WEBPACK_IMPORTED_MODULE_2__/* .useLocation */ .z)undefined465473(0,_context_locale__WEBPACK_IMPORTED_MODULE_3__/* .useLocale */ .Y)undefined770773(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined972976(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined11131117(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined19211924(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined­ü÷ÿÿ°åûÿÿ ¡ K,«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-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__(4568); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1592); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7541); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7620); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(2982); «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 ROLE_COOKIE = 'canhelp_preview_role'; const ORIG_PLAN_KEY = 'canhelp_admin_orig_plan'; function getPreviewRole() { if (typeof document === 'undefined') return null; const m = document.cookie.match(/(?:^|;\s*)canhelp_preview_role=([^;]+)/); var _m_; return (_m_ = m === null || m === void 0 ? void 0 : m[1]) !== null && _m_ !== void 0 ? _m_ : null; } const TIER_COLORS = { free: 'bg-slate-100 text-slate-600', pro: 'bg-blue-100 text-blue-700', ultimate: 'bg-amber-100 text-amber-700' }; export function AdminRolePreview() { var _session_user, _session_user1; const { data: session } = useSession(); const router = useRouter(); const isAdmin = (session === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.role) === 'admin'; const userId = session === null || session === void 0 ? void 0 : (_session_user1 = session.user) === null || _session_user1 === void 0 ? void 0 : _session_user1.id; const [preview, setPreview] = useState(null); const [plans, setPlans] = useState([]); const [activePlanId, setActivePlanId] = useState(null); const [loading, setLoading] = useState(false); const [expanded, setExpanded] = useState(false); const origPlanRef = useRef(null); useEffect(()=>{ setPreview(getPreviewRole()); if ("object" !== 'undefined') { origPlanRef.current = localStorage.getItem(ORIG_PLAN_KEY); } }, []); useEffect(()=>{ if (!isAdmin) return; getPlans().then(setPlans).catch(()=>{}); }, [ isAdmin ]); useEffect(()=>{ var _session_user; var _session_user_planId; // Sync active plan from session const currentPlanId = (_session_user_planId = session === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.planId) !== null && _session_user_planId !== void 0 ? _session_user_planId : null; setActivePlanId(currentPlanId); }, [ session ]); if (!isAdmin) return null; const toggleRole = (role)=>{ if (preview === role) { document.cookie = "".concat(ROLE_COOKIE, "=; path=/; max-age=0"); setPreview(null); window.dispatchEvent(new CustomEvent('canhelp:preview-role', { detail: { role: null } })); } else { document.cookie = "".concat(ROLE_COOKIE, "=").concat(role, "; path=/; max-age=86400"); setPreview(role); window.dispatchEvent(new CustomEvent('canhelp:preview-role', { detail: { role } })); } router.refresh(); }; 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 (e) {} setLoading(false); }; const restorePlan = async ()=>{ const orig = origPlanRef.current; localStorage.removeItem(ORIG_PLAN_KEY); origPlanRef.current = null; await setPlan(orig !== null && orig !== void 0 ? orig : null); }; const visiblePlans = preview ? plans.filter((p)=>p.role === preview) : 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__*/ _jsxs("div", { className: "flex flex-col gap-1 px-2 pb-2 border-t border-slate-100 pt-2", children: [ /*#__PURE__*/ _jsx("div", { className: "text-slate-400 px-1 mb-0.5", children: "Role" }), /*#__PURE__*/ _jsx("button", { onClick: ()=>toggleRole('customer'), className: "px-3 py-1.5 rounded-xl transition text-left ".concat(preview === 'customer' ? 'bg-blue-600 text-white' : 'text-slate-600 hover:bg-slate-100'), children: "Customer" }), /*#__PURE__*/ _jsx("button", { onClick: ()=>toggleRole('specialist'), className: "px-3 py-1.5 rounded-xl transition text-left ".concat(preview === 'specialist' ? 'bg-orange-500 text-white' : 'text-slate-600 hover:bg-slate-100'), children: "Specialist" }), preview && /*#__PURE__*/ _jsx("button", { onClick: ()=>{ document.cookie = "".concat(ROLE_COOKIE, "=; path=/; max-age=0"); setPreview(null); router.refresh(); }, className: "px-3 py-1 rounded-xl text-slate-400 hover:text-red-500 hover:bg-red-50 transition text-left", children: "✕ Reset role" }), 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)=>{ var _TIER_COLORS_plan_tier; return /*#__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 ".concat(activePlanId === plan.id ? 'bg-indigo-600 text-white' : 'text-slate-600 hover:bg-slate-100', " ").concat(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 ".concat(activePlanId === plan.id ? 'bg-white/20 text-white' : (_TIER_COLORS_plan_tier = TIER_COLORS[plan.tier]) !== null && _TIER_COLORS_plan_tier !== void 0 ? _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_›ÄÆñó&(]gmÑÚòúˆ¯¶éð"PWy~‹“ÍäJ_R€‡ÎÖâ ð ÌÐÉÍÞá`c:>âå”—üÿwzŒ’šíðBHFjmknÌ!Ï!e#h#€€€€€€¿(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)„trueþ¼(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__.Fragmentþýþþþþ¥î+/* 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__(4568); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1592); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7541); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7620); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(2982); /* __next_internal_client_entry_do_not_use__ AdminRolePreview auto */ const ROLE_COOKIE = 'canhelp_preview_role'; const ORIG_PLAN_KEY = 'canhelp_admin_orig_plan'; function getPreviewRole() { if (typeof document === 'undefined') return null; const m = document.cookie.match(/(?:^|;\s*)canhelp_preview_role=([^;]+)/); var _m_; return (_m_ = m === null || m === void 0 ? void 0 : m[1]) !== null && _m_ !== void 0 ? _m_ : null; } const TIER_COLORS = { free: 'bg-slate-100 text-slate-600', pro: 'bg-blue-100 text-blue-700', ultimate: 'bg-amber-100 text-amber-700' }; function AdminRolePreview() { var _session_user, _session_user1; 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 === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.role) === 'admin'; const userId = session === null || session === void 0 ? void 0 : (_session_user1 = session.user) === null || _session_user1 === void 0 ? void 0 : _session_user1.id; const [preview, setPreview] = (0,react__WEBPACK_IMPORTED_MODULE_3__.useState)(null); 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); (0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)(()=>{ setPreview(getPreviewRole()); if (true) { origPlanRef.current = localStorage.getItem(ORIG_PLAN_KEY); } }, []); (0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)(()=>{ if (!isAdmin) return; (0,_lib_api__WEBPACK_IMPORTED_MODULE_4__/* .getPlans */ .T9)().then(setPlans).catch(()=>{}); }, [ isAdmin ]); (0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)(()=>{ var _session_user; var _session_user_planId; // Sync active plan from session const currentPlanId = (_session_user_planId = session === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.planId) !== null && _session_user_planId !== void 0 ? _session_user_planId : null; setActivePlanId(currentPlanId); }, [ session ]); if (!isAdmin) return null; const toggleRole = (role)=>{ if (preview === role) { document.cookie = "".concat(ROLE_COOKIE, "=; path=/; max-age=0"); setPreview(null); window.dispatchEvent(new CustomEvent('canhelp:preview-role', { detail: { role: null } })); } else { document.cookie = "".concat(ROLE_COOKIE, "=").concat(role, "; path=/; max-age=86400"); setPreview(role); window.dispatchEvent(new CustomEvent('canhelp:preview-role', { detail: { role } })); } router.refresh(); }; 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 (e) {} setLoading(false); }; const restorePlan = async ()=>{ const orig = origPlanRef.current; localStorage.removeItem(ORIG_PLAN_KEY); origPlanRef.current = null; await setPlan(orig !== null && orig !== void 0 ? orig : null); }; const visiblePlans = preview ? plans.filter((p)=>p.role === preview) : 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__.jsxs)("div", { className: "flex flex-col gap-1 px-2 pb-2 border-t border-slate-100 pt-2", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "text-slate-400 px-1 mb-0.5", children: "Role" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { onClick: ()=>toggleRole('customer'), className: "px-3 py-1.5 rounded-xl transition text-left ".concat(preview === 'customer' ? 'bg-blue-600 text-white' : 'text-slate-600 hover:bg-slate-100'), children: "Customer" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { onClick: ()=>toggleRole('specialist'), className: "px-3 py-1.5 rounded-xl transition text-left ".concat(preview === 'specialist' ? 'bg-orange-500 text-white' : 'text-slate-600 hover:bg-slate-100'), children: "Specialist" }), preview && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { onClick: ()=>{ document.cookie = "".concat(ROLE_COOKIE, "=; path=/; max-age=0"); setPreview(null); router.refresh(); }, className: "px-3 py-1 rounded-xl text-slate-400 hover:text-red-500 hover:bg-red-50 transition text-left", children: "✕ Reset role" }), 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)=>{ var _TIER_COLORS_plan_tier; return /*#__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 ".concat(activePlanId === plan.id ? 'bg-indigo-600 text-white' : 'text-slate-600 hover:bg-slate-100', " ").concat(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 ".concat(activePlanId === plan.id ? 'bg-white/20 text-white' : (_TIER_COLORS_plan_tier = TIER_COLORS[plan.tier]) !== null && _TIER_COLORS_plan_tier !== void 0 ? _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__(4568); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1592); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7541); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7620); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(2982); Üüÿÿ¦70155undefined157196undefined198241undefined243294undefined296349undefined871877undefined977986(0,_lib_auth__WEBPACK_IMPORTED_MODULE_1__/* .useSession */ .wV)undefined10101018(0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)undefined14091416(0,react__WEBPACK_IMPORTED_MODULE_3__.useState)undefined14551462(0,react__WEBPACK_IMPORTED_MODULE_3__.useState)undefined15131520(0,react__WEBPACK_IMPORTED_MODULE_3__.useState)undefined15631570(0,react__WEBPACK_IMPORTED_MODULE_3__.useState)undefined16161623(0,react__WEBPACK_IMPORTED_MODULE_3__.useState)undefined16571662(0,react__WEBPACK_IMPORTED_MODULE_3__.useRef)undefined16751683(0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)undefined17411764trueundefined18661874(0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)undefined19201927(0,_lib_api__WEBPACK_IMPORTED_MODULE_4__/* .getPlans */ .T9)undefined19982006(0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)undefined35543568(0,_lib_api__WEBPACK_IMPORTED_MODULE_4__/* .updateAdminUser */ .wl)undefined43004304(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined45534557(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined48304833(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined49604963(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined51785182(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined53465349(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined55245527(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined58845887(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined62636266(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined67966800(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined68026810react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragmentundefined68936896(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined72347238(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined77867789(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined80438046(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined86528655(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined90619064(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined¢ñ÷ÿÿ¥üÿÿ•– •«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSourceÏ__webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ PricingPage) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(9664); /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7541); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1592); /* harmony import */ var _context_locale__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(9906); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(2982); /* harmony import */ var _components_PlanBadge__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(2035); /* harmony import */ var _hooks_useEffectiveRole__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(7795); «webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSourceâ†/* __next_internal_client_entry_do_not_use__ default auto */ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime"; import { useState, useEffect } from 'react'; import Link from 'next/link'; import { useRouter } from 'next/navigation'; import { useSession } from '@/lib/auth'; import { useLocale } from '@/context/locale'; import { getPlans, getMyDashboard, previewPlanChange, purchasePlan } from '@/lib/api'; import { PlanBadge } from '@/components/PlanBadge'; import { useEffectiveRole } from '@/hooks/useEffectiveRole'; const FEATURE_ROWS = [ { key: 'maxMessagesPerDay', labelKey: 'pricing.feat.messages', format: (v)=>v === null ? '∞' : String(v) }, { key: 'maxOrdersPerDay', labelKey: 'pricing.feat.orders', format: (v)=>v === null ? '∞' : String(v) }, { key: 'canContactAll', labelKey: 'pricing.feat.contact_all' }, { key: 'canViewPhone', labelKey: 'pricing.feat.view_phone' }, { key: 'canShowContactInfo', labelKey: 'pricing.feat.show_contact' }, { key: 'hasFavorites', labelKey: 'pricing.feat.favorites' }, { key: 'hasVerifiedBadge', labelKey: 'pricing.feat.verified_badge' }, { key: 'hasGoogleCalendar', labelKey: 'pricing.feat.google_calendar' }, { key: 'hasPersonalSite', labelKey: 'pricing.feat.personal_site' }, { key: 'hasAutoResponse', labelKey: 'pricing.feat.auto_response' }, { key: 'hasAutoMatch', labelKey: 'pricing.feat.auto_match' }, { key: 'highlightedReviews', labelKey: 'pricing.feat.highlighted_reviews' }, { key: 'maxPortfolioItems', labelKey: 'pricing.feat.portfolio', format: (v)=>v === null ? '∞' : String(v) }, { key: 'maxCards', labelKey: 'pricing.feat.cards', format: (v)=>v === null ? '∞' : String(v) }, { key: 'notifyNewTasks', labelKey: 'pricing.feat.notify_tasks' }, { key: 'canUploadVideo', labelKey: 'pricing.feat.video' } ]; const SPECIALIST_FEATURES = new Set([ 'hasGoogleCalendar', 'hasAutoResponse', 'highlightedReviews', 'maxPortfolioItems', 'maxCards', 'notifyNewTasks', 'canUploadVideo' ]); const CUSTOMER_FEATURES = new Set([ 'hasAutoMatch' ]); function CheckIcon() { return /*#__PURE__*/ _jsx("svg", { viewBox: "0 0 20 20", fill: "currentColor", className: "w-5 h-5 text-green-500 mx-auto", children: /*#__PURE__*/ _jsx("path", { fillRule: "evenodd", d: "M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z", clipRule: "evenodd" }) }); } function XIcon() { return /*#__PURE__*/ _jsx("svg", { viewBox: "0 0 20 20", fill: "currentColor", className: "w-4 h-4 text-gray-300 mx-auto", children: /*#__PURE__*/ _jsx("path", { d: "M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z" }) }); } const tierOrder = [ 'free', 'pro', 'ultimate' ]; const tierHeaderColors = { free: 'bg-gray-50 border-gray-200', pro: 'bg-blue-50 border-blue-200', ultimate: 'bg-gradient-to-br from-amber-50 to-yellow-50 border-amber-300' }; const tierPriceColors = { free: 'text-gray-700', pro: 'text-blue-700', ultimate: 'text-amber-600' }; const tierBtnColors = { free: 'bg-gray-100 text-gray-700 hover:bg-gray-200', pro: 'bg-blue-600 text-white hover:bg-blue-700', ultimate: 'bg-gradient-to-r from-amber-500 to-yellow-500 text-white hover:from-amber-600 hover:to-yellow-600' }; export default function PricingPage() { const { data: session } = useSession(); const { t } = useLocale(); const router = useRouter(); const effectiveRole = useEffectiveRole(); const [role, setRole] = useState('customer'); const [plans, setPlans] = useState([]); const [currentPlanId, setCurrentPlanId] = useState(null); const [loading, setLoading] = useState(true); const [confirmPlan, setConfirmPlan] = useState(null); const [preview, setPreview] = useState(null); const [previewLoading, setPreviewLoading] = useState(false); const [purchasing, setPurchasing] = useState(false); // Sync role from effective role — skip 'admin' (transient before preview cookie is read) useEffect(()=>{ if (!effectiveRole || effectiveRole === 'admin') return; setRole(effectiveRole === 'specialist' ? 'specialist' : 'customer'); }, [ effectiveRole ]); // Fetch plans with abort to prevent stale race conditions useEffect(()=>{ let aborted = false; setLoading(true); getPlans(role).then((data)=>{ if (!aborted) setPlans(data.sort((a, b)=>tierOrder.indexOf(a.tier) - tierOrder.indexOf(b.tier))); }).catch(()=>{}).finally(()=>{ if (!aborted) setLoading(false); }); return ()=>{ aborted = true; }; }, [ role ]); const fetchCurrentPlan = ()=>{ if (!session) return; getMyDashboard().then((d)=>{ var _d_plan; var _d_plan_id; return setCurrentPlanId((_d_plan_id = (_d_plan = d.plan) === null || _d_plan === void 0 ? void 0 : _d_plan.id) !== null && _d_plan_id !== void 0 ? _d_plan_id : null); }).catch(()=>{}); }; useEffect(fetchCurrentPlan, [ session ]); // Refresh active plan when admin widget changes it useEffect(()=>{ const handler = ()=>fetchCurrentPlan(); window.addEventListener('canhelp:plan-changed', handler); document.addEventListener('visibilitychange', handler); return ()=>{ window.removeEventListener('canhelp:plan-changed', handler); document.removeEventListener('visibilitychange', handler); }; }, [ session ]); async function handleSelectPlan(plan) { if (!session) { router.push('/sign-in'); return; } setConfirmPlan(plan); setPreview(null); setPreviewLoading(true); try { const p = await previewPlanChange(plan.id); setPreview(p); } catch (e) { setConfirmPlan(null); } finally{ setPreviewLoading(false); } } async function handleConfirm() { if (!confirmPlan || !preview) return; setPurchasing(true); try { const result = await purchasePlan(confirmPlan.id, preview.canPayFromBalance); if (result.url && result.params) { const form = document.createElement('form'); form.method = 'POST'; form.action = result.url; Object.entries(result.params).forEach((param)=>{ let [k, v] = param; const inp = document.createElement('input'); inp.type = 'hidden'; inp.name = k; inp.value = v; form.appendChild(inp); }); document.body.appendChild(form); form.submit(); return; } setCurrentPlanId(confirmPlan.id); setConfirmPlan(null); setPreview(null); } catch (e) { // ignore } finally{ setPurchasing(false); } } const visibleFeatures = FEATURE_ROWS.filter((param)=>{ let { key } = param; if (role === 'specialist' && CUSTOMER_FEATURES.has(key)) return false; if (role === 'customer' && SPECIALIST_FEATURES.has(key)) return false; return true; }); return /*#__PURE__*/ _jsxs("main", { className: "min-h-screen py-12 px-4", children: [ /*#__PURE__*/ _jsxs("div", { className: "max-w-5xl mx-auto", children: [ /*#__PURE__*/ _jsxs("div", { className: "text-center mb-10", children: [ /*#__PURE__*/ _jsx("h1", { className: "text-4xl font-bold text-white mb-3", children: t('pricing.title', 'Тарифы') }), /*#__PURE__*/ _jsx("p", { className: "text-white/70 text-lg", children: session ? t("pricing.subtitle_".concat(role), role === 'specialist' ? 'Тарифы Ð´Ð»Ñ ÑпециалиÑтов' : 'Тарифы Ð´Ð»Ñ Ð·Ð°ÐºÐ°Ð·Ñ‡Ð¸ÐºÐ¾Ð²') : t('pricing.subtitle', 'Выберите подходÑщий план') }), " " ] }), !session && /*#__PURE__*/ _jsx("div", { className: "flex justify-center mb-10", children: /*#__PURE__*/ _jsxs("div", { className: "inline-flex bg-white/10 rounded-xl p-1 gap-1", children: [ /*#__PURE__*/ _jsx("button", { onClick: ()=>setRole('customer'), className: "px-6 py-2 rounded-lg text-sm font-semibold transition ".concat(role === 'customer' ? 'bg-white text-gray-900 shadow-sm' : 'text-white/70 hover:text-white'), children: t('pricing.role.customer', 'Заказчик') }), /*#__PURE__*/ _jsx("button", { onClick: ()=>setRole('specialist'), className: "px-6 py-2 rounded-lg text-sm font-semibold transition ".concat(role === 'specialist' ? 'bg-white text-gray-900 shadow-sm' : 'text-white/70 hover:text-white'), children: t('pricing.role.specialist', 'СпециалиÑÑ‚') }) ] }) }), loading ? /*#__PURE__*/ _jsx("div", { className: "text-center text-white/60 py-20", children: t('common.loading', 'Загрузка...') }) : /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-6 mb-12", children: plans.map((plan)=>{ const isCurrentPlan = plan.id === currentPlanId; const isFree = plan.tier === 'free'; return /*#__PURE__*/ _jsxs("div", { className: "rounded-2xl border-2 p-6 bg-white flex flex-col transition ".concat(isCurrentPlan ? 'ring-2 ring-blue-500 ring-offset-2' : '', " ").concat(plan.tier === 'ultimate' ? 'border-amber-300 shadow-lg shadow-amber-100' : 'border-gray-200'), children: [ /*#__PURE__*/ _jsxs("div", { className: "flex items-center gap-2 mb-4", children: [ /*#__PURE__*/ _jsx(PlanBadge, { tier: plan.tier, size: "md" }), isCurrentPlan && /*#__PURE__*/ _jsx("span", { className: "text-xs font-medium text-green-600 bg-green-50 border border-green-200 px-2 py-0.5 rounded-full", children: t('pricing.current_plan', 'Ваш план') }), plan.tier === 'pro' && !isCurrentPlan && /*#__PURE__*/ _jsx("span", { className: "text-xs font-medium text-blue-600 bg-blue-50 border border-blue-100 px-2 py-0.5 rounded-full", children: t('pricing.popular', 'ПопулÑрный') }) ] }), /*#__PURE__*/ _jsx("h2", { className: "text-xl font-bold text-gray-900 mb-1", children: plan.name }), /*#__PURE__*/ _jsx("p", { className: "text-gray-500 text-sm mb-4 min-h-[40px]", children: plan.description }), /*#__PURE__*/ _jsxs("div", { className: "text-3xl font-extrabold mb-1 ".concat(tierPriceColors[plan.tier]), children: [ isFree ? t('pricing.free', 'БеÑплатно') : /*#__PURE__*/ _jsxs(_Fragment, { children: [ plan.oldPrice && /*#__PURE__*/ _jsxs("span", { className: "text-lg font-normal text-gray-400 line-through mr-2", children: [ "€", plan.oldPrice ] }), "€", plan.price ] }), !isFree && /*#__PURE__*/ _jsxs("span", { className: "text-base font-normal text-gray-400", children: [ "/", t('pricing.per_month', 'меÑ') ] }) ] }), plan.durationDays && !isFree && /*#__PURE__*/ _jsxs("p", { className: "text-xs text-gray-400 mb-5", children: [ t('pricing.duration', 'Срок'), ": ", plan.durationDays, " ", t('pricing.days', 'дн.') ] }), isFree && /*#__PURE__*/ _jsx("div", { className: "mb-5" }), /*#__PURE__*/ _jsx("div", { className: "mt-auto", children: isCurrentPlan ? /*#__PURE__*/ _jsx("div", { className: "w-full py-2.5 text-center text-sm font-semibold text-green-700 bg-green-50 border border-green-200 rounded-xl", children: t('pricing.your_plan', 'Ðктивный план') }) : isFree ? /*#__PURE__*/ _jsx("div", { className: "w-full py-2.5 text-center text-sm font-medium text-gray-400 bg-gray-50 border border-gray-200 rounded-xl", children: t('pricing.free_default', 'По умолчанию') }) : /*#__PURE__*/ _jsxs("button", { onClick: ()=>handleSelectPlan(plan), className: "block w-full py-2.5 text-center text-sm font-semibold rounded-xl transition ".concat(tierBtnColors[plan.tier]), children: [ t('pricing.choose', 'Выбрать'), " ", plan.name ] }) }) ] }, plan.id); }) }), /*#__PURE__*/ _jsxs("div", { className: "bg-white rounded-2xl border border-gray-200 overflow-hidden", children: [ /*#__PURE__*/ _jsx("div", { className: "px-6 py-4 border-b border-gray-100", children: /*#__PURE__*/ _jsx("h3", { className: "font-semibold text-gray-900", children: t('pricing.compare', 'Сравнение функций') }) }), /*#__PURE__*/ _jsx("div", { className: "overflow-x-auto", children: /*#__PURE__*/ _jsxs("table", { className: "w-full text-sm", children: [ /*#__PURE__*/ _jsx("thead", { children: /*#__PURE__*/ _jsxs("tr", { className: "border-b border-gray-100", children: [ /*#__PURE__*/ _jsx("th", { className: "text-left px-6 py-3 text-gray-500 font-medium w-1/2", children: t('pricing.feature', 'ФункциÑ') }), plans.map((plan)=>/*#__PURE__*/ _jsx("th", { className: "text-center px-4 py-3 font-medium text-gray-700", children: /*#__PURE__*/ _jsxs("div", { className: "flex flex-col items-center gap-1", children: [ /*#__PURE__*/ _jsx(PlanBadge, { tier: plan.tier, size: "sm" }), /*#__PURE__*/ _jsx("span", { className: "text-xs text-gray-400", children: plan.tier === 'free' ? t('pricing.free', 'БеÑплатно') : "€".concat(plan.price) }) ] }) }, plan.id)) ] }) }), /*#__PURE__*/ _jsx("tbody", { children: visibleFeatures.map((param)=>{ let { key, labelKey, format } = param; return /*#__PURE__*/ _jsxs("tr", { className: "border-b border-gray-50 hover:bg-gray-50/50 transition", children: [ /*#__PURE__*/ _jsx("td", { className: "px-6 py-3 text-gray-600", children: t(labelKey, labelKey) }), plans.map((plan)=>{ const val = plan[key]; let cell; if (format) { cell = /*#__PURE__*/ _jsx("span", { className: "text-gray-700 font-medium", children: format(val) }); } else if (typeof val === 'boolean') { cell = val ? /*#__PURE__*/ _jsx(CheckIcon, {}) : /*#__PURE__*/ _jsx(XIcon, {}); } else { cell = /*#__PURE__*/ _jsx("span", { className: "text-gray-700", children: val === null ? '∞' : String(val !== null && val !== void 0 ? val : '—') }); } return /*#__PURE__*/ _jsx("td", { className: "text-center px-4 py-3", children: cell }, plan.id); }) ] }, key); }) }) ] }) }) ] }), /*#__PURE__*/ _jsx("p", { className: "text-center text-white/50 text-sm mt-8", children: t('pricing.faq_note', 'Оплата ÑпиÑываетÑÑ Ñ Ð±Ð°Ð»Ð°Ð½Ñа CanHelp. Пополнение доÑтупно в разделе Оплата.') }) ] }) ] }), confirmPlan && /*#__PURE__*/ _jsx("div", { className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50 px-4", children: /*#__PURE__*/ _jsxs("div", { className: "bg-white rounded-2xl shadow-2xl w-full max-w-md p-6", children: [ /*#__PURE__*/ _jsx("h2", { className: "text-lg font-bold text-gray-900 mb-4", children: t('pricing.confirm.title', 'Подтвердите выбор тарифа') }), previewLoading ? /*#__PURE__*/ _jsx("div", { className: "py-10 text-center text-gray-400", children: t('common.loading', 'Загрузка...') }) : preview ? /*#__PURE__*/ _jsxs("div", { className: "space-y-3 text-sm text-gray-700", children: [ /*#__PURE__*/ _jsxs("div", { className: "flex justify-between", children: [ /*#__PURE__*/ _jsx("span", { className: "text-gray-500", children: t('pricing.confirm.plan', 'Тариф') }), /*#__PURE__*/ _jsx("span", { className: "font-semibold", children: confirmPlan.name }) ] }), preview.type === 'upgrade' && Number(preview.prorated) > 0 && /*#__PURE__*/ _jsxs("div", { className: "flex justify-between", children: [ /*#__PURE__*/ _jsx("span", { className: "text-gray-500", children: t('pricing.confirm.prorated', 'Зачёт оÑтатка') }), /*#__PURE__*/ _jsxs("span", { className: "text-green-600 font-medium", children: [ "−€", preview.prorated ] }) ] }), preview.type !== 'downgrade' && /*#__PURE__*/ _jsxs("div", { className: "flex justify-between", children: [ /*#__PURE__*/ _jsx("span", { className: "text-gray-500", children: t('pricing.confirm.effective_price', 'К оплате') }), /*#__PURE__*/ _jsxs("span", { className: "font-bold text-gray-900", children: [ "€", preview.effectivePrice ] }) ] }), preview.type !== 'downgrade' && /*#__PURE__*/ _jsxs("div", { className: "flex justify-between", children: [ /*#__PURE__*/ _jsx("span", { className: "text-gray-500", children: t('pricing.confirm.your_balance', 'Ваш баланÑ') }), /*#__PURE__*/ _jsxs("span", { className: preview.canPayFromBalance ? 'text-green-600' : 'text-red-500', children: [ "€", preview.currentBalance ] }) ] }), preview.type === 'downgrade' && /*#__PURE__*/ _jsxs("div", { className: "bg-orange-50 border border-orange-200 rounded-xl p-3 text-orange-800 text-xs", children: [ t('pricing.confirm.downgrade_info', 'Переход на новый тариф произойдёт автоматичеÑки поÑле Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ периода.'), preview.scheduledDate && /*#__PURE__*/ _jsxs(_Fragment, { children: [ " ", new Date(preview.scheduledDate).toLocaleDateString('ru-RU') ] }) ] }), preview.type !== 'downgrade' && !preview.canPayFromBalance && /*#__PURE__*/ _jsxs("div", { className: "bg-red-50 border border-red-200 rounded-xl p-3 text-red-700 text-xs", children: [ t('pricing.confirm.insufficient', 'ÐедоÑтаточно ÑредÑтв на баланÑе.'), ' ', /*#__PURE__*/ _jsx(Link, { href: "/payment", className: "underline font-medium", onClick: ()=>setConfirmPlan(null), children: t('pricing.confirm.top_up', 'Пополнить') }) ] }), /*#__PURE__*/ _jsxs("div", { className: "flex gap-3 pt-2", children: [ /*#__PURE__*/ _jsx("button", { onClick: ()=>{ setConfirmPlan(null); setPreview(null); }, className: "flex-1 py-2.5 rounded-xl border border-gray-200 text-sm font-medium text-gray-600 hover:bg-gray-50 transition", children: t('common.cancel', 'Отмена') }), (preview.type === 'downgrade' || preview.canPayFromBalance) && /*#__PURE__*/ _jsx("button", { onClick: handleConfirm, disabled: purchasing, className: "flex-1 py-2.5 rounded-xl text-sm font-semibold text-white transition ".concat(preview.type === 'downgrade' ? 'bg-orange-500 hover:bg-orange-600' : tierBtnColors[confirmPlan.tier].replace('block w-full', '').trim(), " disabled:opacity-50"), children: purchasing ? t('common.loading', 'Загрузка...') : preview.type === 'downgrade' ? t('pricing.confirm.schedule_downgrade', 'Запланировать переход') : t('pricing.confirm.pay', 'Оплатить') }) ] }) ] }) : null ] }) }) ] }); } ar=_’”¿ÁÝß  35ac¸ºìî)× Ú v y ¦ © D G Š˜ÐÙðø_7Fgn›¢×Þ CJu|µ¼îõaiiq¸¿GTqyãë€_×â ¤  ‰ !!! ""Ý#à#[$_$%%â&å&))Ã)Ç)É)Ñ)$*'*¡+¥+<-_@-$.'.).1.M/P/ 11÷2ú244<5@5r6v6x6€6$7(7f:j:ì<ð<Ž?‘?H@K@ô@÷@dB_gBÈCÌCZG^G1H4HØHÛH J#J´J¸J„K‡KàKäKÛLÞLpNsN[O_OP’P”PœPR RCUFU\V_`VW„WLZOZK\N\o\r\*]-]*_-_cbfbîcñc‡d‹d2e5e>fAfggÃgÇgh‚h‘i”ik_kÌkÏkêlîlïnón«o®oËpÏpÒrÖrŽs‘s­t±tØvÜv‡x‹xx•x‚z†z | |||õ}ù}¬~B¯~KN€€€€€€€€€¶(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)ÿÿÿ€¿(0,_lib_auth__WEBPACK_IMPORTED_MODULE_4__/* .useSession */ .wV)Ã(0,_context_locale__WEBPACK_IMPORTED_MODULE_5__/* .useLocale */ .Y)º(0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)Ò(0,_hooks_useEffectiveRole__WEBPACK_IMPORTED_MODULE_8__/* .useEffectiveRole */ .F)¯(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)ÿÿÿÿÿÿÿ°(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)ÿ¼(0,_lib_api__WEBPACK_IMPORTED_MODULE_6__/* .getPlans */ .T9)Á(0,_lib_api__WEBPACK_IMPORTED_MODULE_6__/* .getMyDashboard */ .H)ýýÅ(0,_lib_api__WEBPACK_IMPORTED_MODULE_6__/* .previewPlanChange */ .Cs)À(0,_lib_api__WEBPACK_IMPORTED_MODULE_6__/* .purchasePlan */ .Je)·(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)ÿÿôôôÿôôôÿ·react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.FragmentóþþóÅ_components_PlanBadge__WEBPACK_IMPORTED_MODULE_7__/* .PlanBadge */ .dòòòòýýþýýýòòòòýýòòòýòýòòýòÿòòýòòòòòòòòýòòýýòòýòýýòýýòýýýþýò²(next_link__WEBPACK_IMPORTED_MODULE_2___default())üññš®__webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ PricingPage) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(9664); /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7541); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1592); /* harmony import */ var _context_locale__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(9906); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(2982); /* harmony import */ var _components_PlanBadge__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(2035); /* harmony import */ var _hooks_useEffectiveRole__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(7795); /* __next_internal_client_entry_do_not_use__ default auto */ const FEATURE_ROWS = [ { key: 'maxMessagesPerDay', labelKey: 'pricing.feat.messages', format: (v)=>v === null ? '∞' : String(v) }, { key: 'maxOrdersPerDay', labelKey: 'pricing.feat.orders', format: (v)=>v === null ? '∞' : String(v) }, { key: 'canContactAll', labelKey: 'pricing.feat.contact_all' }, { key: 'canViewPhone', labelKey: 'pricing.feat.view_phone' }, { key: 'canShowContactInfo', labelKey: 'pricing.feat.show_contact' }, { key: 'hasFavorites', labelKey: 'pricing.feat.favorites' }, { key: 'hasVerifiedBadge', labelKey: 'pricing.feat.verified_badge' }, { key: 'hasGoogleCalendar', labelKey: 'pricing.feat.google_calendar' }, { key: 'hasPersonalSite', labelKey: 'pricing.feat.personal_site' }, { key: 'hasAutoResponse', labelKey: 'pricing.feat.auto_response' }, { key: 'hasAutoMatch', labelKey: 'pricing.feat.auto_match' }, { key: 'highlightedReviews', labelKey: 'pricing.feat.highlighted_reviews' }, { key: 'maxPortfolioItems', labelKey: 'pricing.feat.portfolio', format: (v)=>v === null ? '∞' : String(v) }, { key: 'maxCards', labelKey: 'pricing.feat.cards', format: (v)=>v === null ? '∞' : String(v) }, { key: 'notifyNewTasks', labelKey: 'pricing.feat.notify_tasks' }, { key: 'canUploadVideo', labelKey: 'pricing.feat.video' } ]; const SPECIALIST_FEATURES = new Set([ 'hasGoogleCalendar', 'hasAutoResponse', 'highlightedReviews', 'maxPortfolioItems', 'maxCards', 'notifyNewTasks', 'canUploadVideo' ]); const CUSTOMER_FEATURES = new Set([ 'hasAutoMatch' ]); function CheckIcon() { return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("svg", { viewBox: "0 0 20 20", fill: "currentColor", className: "w-5 h-5 text-green-500 mx-auto", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path", { fillRule: "evenodd", d: "M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z", clipRule: "evenodd" }) }); } function XIcon() { return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("svg", { viewBox: "0 0 20 20", fill: "currentColor", className: "w-4 h-4 text-gray-300 mx-auto", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path", { d: "M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z" }) }); } const tierOrder = [ 'free', 'pro', 'ultimate' ]; const tierHeaderColors = { free: 'bg-gray-50 border-gray-200', pro: 'bg-blue-50 border-blue-200', ultimate: 'bg-gradient-to-br from-amber-50 to-yellow-50 border-amber-300' }; const tierPriceColors = { free: 'text-gray-700', pro: 'text-blue-700', ultimate: 'text-amber-600' }; const tierBtnColors = { free: 'bg-gray-100 text-gray-700 hover:bg-gray-200', pro: 'bg-blue-600 text-white hover:bg-blue-700', ultimate: 'bg-gradient-to-r from-amber-500 to-yellow-500 text-white hover:from-amber-600 hover:to-yellow-600' }; function PricingPage() { const { data: session } = (0,_lib_auth__WEBPACK_IMPORTED_MODULE_4__/* .useSession */ .wV)(); const { t } = (0,_context_locale__WEBPACK_IMPORTED_MODULE_5__/* .useLocale */ .Y)(); const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)(); const effectiveRole = (0,_hooks_useEffectiveRole__WEBPACK_IMPORTED_MODULE_8__/* .useEffectiveRole */ .F)(); const [role, setRole] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('customer'); const [plans, setPlans] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]); const [currentPlanId, setCurrentPlanId] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null); const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true); const [confirmPlan, setConfirmPlan] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null); const [preview, setPreview] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null); const [previewLoading, setPreviewLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false); const [purchasing, setPurchasing] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false); // Sync role from effective role — skip 'admin' (transient before preview cookie is read) (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{ if (!effectiveRole || effectiveRole === 'admin') return; setRole(effectiveRole === 'specialist' ? 'specialist' : 'customer'); }, [ effectiveRole ]); // Fetch plans with abort to prevent stale race conditions (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{ let aborted = false; setLoading(true); (0,_lib_api__WEBPACK_IMPORTED_MODULE_6__/* .getPlans */ .T9)(role).then((data)=>{ if (!aborted) setPlans(data.sort((a, b)=>tierOrder.indexOf(a.tier) - tierOrder.indexOf(b.tier))); }).catch(()=>{}).finally(()=>{ if (!aborted) setLoading(false); }); return ()=>{ aborted = true; }; }, [ role ]); const fetchCurrentPlan = ()=>{ if (!session) return; (0,_lib_api__WEBPACK_IMPORTED_MODULE_6__/* .getMyDashboard */ .H)().then((d)=>{ var _d_plan; var _d_plan_id; return setCurrentPlanId((_d_plan_id = (_d_plan = d.plan) === null || _d_plan === void 0 ? void 0 : _d_plan.id) !== null && _d_plan_id !== void 0 ? _d_plan_id : null); }).catch(()=>{}); }; (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(fetchCurrentPlan, [ session ]); // Refresh active plan when admin widget changes it (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{ const handler = ()=>fetchCurrentPlan(); window.addEventListener('canhelp:plan-changed', handler); document.addEventListener('visibilitychange', handler); return ()=>{ window.removeEventListener('canhelp:plan-changed', handler); document.removeEventListener('visibilitychange', handler); }; }, [ session ]); async function handleSelectPlan(plan) { if (!session) { router.push('/sign-in'); return; } setConfirmPlan(plan); setPreview(null); setPreviewLoading(true); try { const p = await (0,_lib_api__WEBPACK_IMPORTED_MODULE_6__/* .previewPlanChange */ .Cs)(plan.id); setPreview(p); } catch (e) { setConfirmPlan(null); } finally{ setPreviewLoading(false); } } async function handleConfirm() { if (!confirmPlan || !preview) return; setPurchasing(true); try { const result = await (0,_lib_api__WEBPACK_IMPORTED_MODULE_6__/* .purchasePlan */ .Je)(confirmPlan.id, preview.canPayFromBalance); if (result.url && result.params) { const form = document.createElement('form'); form.method = 'POST'; form.action = result.url; Object.entries(result.params).forEach((param)=>{ let [k, v] = param; const inp = document.createElement('input'); inp.type = 'hidden'; inp.name = k; inp.value = v; form.appendChild(inp); }); document.body.appendChild(form); form.submit(); return; } setCurrentPlanId(confirmPlan.id); setConfirmPlan(null); setPreview(null); } catch (e) { // ignore } finally{ setPurchasing(false); } } const visibleFeatures = FEATURE_ROWS.filter((param)=>{ let { key } = param; if (role === 'specialist' && CUSTOMER_FEATURES.has(key)) return false; if (role === 'customer' && SPECIALIST_FEATURES.has(key)) return false; return true; }); return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("main", { className: "min-h-screen py-12 px-4", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "max-w-5xl mx-auto", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "text-center mb-10", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h1", { className: "text-4xl font-bold text-white mb-3", children: t('pricing.title', 'Тарифы') }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { className: "text-white/70 text-lg", children: session ? t("pricing.subtitle_".concat(role), role === 'specialist' ? 'Тарифы Ð´Ð»Ñ ÑпециалиÑтов' : 'Тарифы Ð´Ð»Ñ Ð·Ð°ÐºÐ°Ð·Ñ‡Ð¸ÐºÐ¾Ð²') : t('pricing.subtitle', 'Выберите подходÑщий план') }), " " ] }), !session && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "flex justify-center mb-10", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "inline-flex bg-white/10 rounded-xl p-1 gap-1", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { onClick: ()=>setRole('customer'), className: "px-6 py-2 rounded-lg text-sm font-semibold transition ".concat(role === 'customer' ? 'bg-white text-gray-900 shadow-sm' : 'text-white/70 hover:text-white'), children: t('pricing.role.customer', 'Заказчик') }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { onClick: ()=>setRole('specialist'), className: "px-6 py-2 rounded-lg text-sm font-semibold transition ".concat(role === 'specialist' ? 'bg-white text-gray-900 shadow-sm' : 'text-white/70 hover:text-white'), children: t('pricing.role.specialist', 'СпециалиÑÑ‚') }) ] }) }), loading ? /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "text-center text-white/60 py-20", children: t('common.loading', 'Загрузка...') }) : /*#__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: "grid grid-cols-1 md:grid-cols-3 gap-6 mb-12", children: plans.map((plan)=>{ const isCurrentPlan = plan.id === currentPlanId; const isFree = plan.tier === 'free'; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "rounded-2xl border-2 p-6 bg-white flex flex-col transition ".concat(isCurrentPlan ? 'ring-2 ring-blue-500 ring-offset-2' : '', " ").concat(plan.tier === 'ultimate' ? 'border-amber-300 shadow-lg shadow-amber-100' : 'border-gray-200'), children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "flex items-center gap-2 mb-4", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_PlanBadge__WEBPACK_IMPORTED_MODULE_7__/* .PlanBadge */ .d, { tier: plan.tier, size: "md" }), isCurrentPlan && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "text-xs font-medium text-green-600 bg-green-50 border border-green-200 px-2 py-0.5 rounded-full", children: t('pricing.current_plan', 'Ваш план') }), plan.tier === 'pro' && !isCurrentPlan && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "text-xs font-medium text-blue-600 bg-blue-50 border border-blue-100 px-2 py-0.5 rounded-full", children: t('pricing.popular', 'ПопулÑрный') }) ] }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h2", { className: "text-xl font-bold text-gray-900 mb-1", children: plan.name }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { className: "text-gray-500 text-sm mb-4 min-h-[40px]", children: plan.description }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "text-3xl font-extrabold mb-1 ".concat(tierPriceColors[plan.tier]), children: [ isFree ? t('pricing.free', 'БеÑплатно') : /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [ plan.oldPrice && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", { className: "text-lg font-normal text-gray-400 line-through mr-2", children: [ "€", plan.oldPrice ] }), "€", plan.price ] }), !isFree && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", { className: "text-base font-normal text-gray-400", children: [ "/", t('pricing.per_month', 'меÑ') ] }) ] }), plan.durationDays && !isFree && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("p", { className: "text-xs text-gray-400 mb-5", children: [ t('pricing.duration', 'Срок'), ": ", plan.durationDays, " ", t('pricing.days', 'дн.') ] }), isFree && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "mb-5" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "mt-auto", children: isCurrentPlan ? /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "w-full py-2.5 text-center text-sm font-semibold text-green-700 bg-green-50 border border-green-200 rounded-xl", children: t('pricing.your_plan', 'Ðктивный план') }) : isFree ? /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "w-full py-2.5 text-center text-sm font-medium text-gray-400 bg-gray-50 border border-gray-200 rounded-xl", children: t('pricing.free_default', 'По умолчанию') }) : /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("button", { onClick: ()=>handleSelectPlan(plan), className: "block w-full py-2.5 text-center text-sm font-semibold rounded-xl transition ".concat(tierBtnColors[plan.tier]), children: [ t('pricing.choose', 'Выбрать'), " ", plan.name ] }) }) ] }, plan.id); }) }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "bg-white rounded-2xl border border-gray-200 overflow-hidden", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "px-6 py-4 border-b border-gray-100", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h3", { className: "font-semibold text-gray-900", children: t('pricing.compare', 'Сравнение функций') }) }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "overflow-x-auto", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("table", { className: "w-full text-sm", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("thead", { children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("tr", { className: "border-b border-gray-100", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("th", { className: "text-left px-6 py-3 text-gray-500 font-medium w-1/2", children: t('pricing.feature', 'ФункциÑ') }), plans.map((plan)=>/*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("th", { className: "text-center px-4 py-3 font-medium text-gray-700", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "flex flex-col items-center gap-1", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_PlanBadge__WEBPACK_IMPORTED_MODULE_7__/* .PlanBadge */ .d, { tier: plan.tier, size: "sm" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "text-xs text-gray-400", children: plan.tier === 'free' ? t('pricing.free', 'БеÑплатно') : "€".concat(plan.price) }) ] }) }, plan.id)) ] }) }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("tbody", { children: visibleFeatures.map((param)=>{ let { key, labelKey, format } = param; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("tr", { className: "border-b border-gray-50 hover:bg-gray-50/50 transition", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("td", { className: "px-6 py-3 text-gray-600", children: t(labelKey, labelKey) }), plans.map((plan)=>{ const val = plan[key]; let cell; if (format) { cell = /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "text-gray-700 font-medium", children: format(val) }); } else if (typeof val === 'boolean') { cell = val ? /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(CheckIcon, {}) : /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(XIcon, {}); } else { cell = /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "text-gray-700", children: val === null ? '∞' : String(val !== null && val !== void 0 ? val : '—') }); } return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("td", { className: "text-center px-4 py-3", children: cell }, plan.id); }) ] }, key); }) }) ] }) }) ] }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { className: "text-center text-white/50 text-sm mt-8", children: t('pricing.faq_note', 'Оплата ÑпиÑываетÑÑ Ñ Ð±Ð°Ð»Ð°Ð½Ñа CanHelp. Пополнение доÑтупно в разделе Оплата.') }) ] }) ] }), confirmPlan && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50 px-4", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "bg-white rounded-2xl shadow-2xl w-full max-w-md p-6", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h2", { className: "text-lg font-bold text-gray-900 mb-4", children: t('pricing.confirm.title', 'Подтвердите выбор тарифа') }), previewLoading ? /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "py-10 text-center text-gray-400", children: t('common.loading', 'Загрузка...') }) : preview ? /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "space-y-3 text-sm text-gray-700", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "flex justify-between", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "text-gray-500", children: t('pricing.confirm.plan', 'Тариф') }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "font-semibold", children: confirmPlan.name }) ] }), preview.type === 'upgrade' && Number(preview.prorated) > 0 && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "flex justify-between", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "text-gray-500", children: t('pricing.confirm.prorated', 'Зачёт оÑтатка') }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", { className: "text-green-600 font-medium", children: [ "−€", preview.prorated ] }) ] }), preview.type !== 'downgrade' && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "flex justify-between", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "text-gray-500", children: t('pricing.confirm.effective_price', 'К оплате') }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", { className: "font-bold text-gray-900", children: [ "€", preview.effectivePrice ] }) ] }), preview.type !== 'downgrade' && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "flex justify-between", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "text-gray-500", children: t('pricing.confirm.your_balance', 'Ваш баланÑ') }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", { className: preview.canPayFromBalance ? 'text-green-600' : 'text-red-500', children: [ "€", preview.currentBalance ] }) ] }), preview.type === 'downgrade' && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "bg-orange-50 border border-orange-200 rounded-xl p-3 text-orange-800 text-xs", children: [ t('pricing.confirm.downgrade_info', 'Переход на новый тариф произойдёт автоматичеÑки поÑле Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ периода.'), preview.scheduledDate && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [ " ", new Date(preview.scheduledDate).toLocaleDateString('ru-RU') ] }) ] }), preview.type !== 'downgrade' && !preview.canPayFromBalance && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "bg-red-50 border border-red-200 rounded-xl p-3 text-red-700 text-xs", children: [ t('pricing.confirm.insufficient', 'ÐедоÑтаточно ÑредÑтв на баланÑе.'), ' ', /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)((next_link__WEBPACK_IMPORTED_MODULE_2___default()), { href: "/payment", className: "underline font-medium", onClick: ()=>setConfirmPlan(null), children: t('pricing.confirm.top_up', 'Пополнить') }) ] }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "flex gap-3 pt-2", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { onClick: ()=>{ setConfirmPlan(null); setPreview(null); }, className: "flex-1 py-2.5 rounded-xl border border-gray-200 text-sm font-medium text-gray-600 hover:bg-gray-50 transition", children: t('common.cancel', 'Отмена') }), (preview.type === 'downgrade' || preview.canPayFromBalance) && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { onClick: handleConfirm, disabled: purchasing, className: "flex-1 py-2.5 rounded-xl text-sm font-semibold text-white transition ".concat(preview.type === 'downgrade' ? 'bg-orange-500 hover:bg-orange-600' : tierBtnColors[confirmPlan.tier].replace('block w-full', '').trim(), " disabled:opacity-50"), children: purchasing ? t('common.loading', 'Загрузка...') : preview.type === 'downgrade' ? t('pricing.confirm.schedule_downgrade', 'Запланировать переход') : t('pricing.confirm.pay', 'Оплатить') }) ] }) ] }) : null ] }) }) ] }); } ÎÑ ÞÏ__webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ PricingPage) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(9664); /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7541); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1592); /* harmony import */ var _context_locale__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(9906); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(2982); /* harmony import */ var _components_PlanBadge__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(2035); /* harmony import */ var _hooks_useEffectiveRole__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(7795); ѹüÿÿI61146undefined148191undefined193221undefined223266undefined268307undefined309353undefined355440undefined442492undefined494553undefined25192522(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined26782681(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined29822985(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined31403143(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined39783992undefined40484057(0,_lib_auth__WEBPACK_IMPORTED_MODULE_4__/* .useSession */ .wV)undefined40804088(0,_context_locale__WEBPACK_IMPORTED_MODULE_5__/* .useLocale */ .Y)undefined41124120(0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)undefined41514166(0,_hooks_useEffectiveRole__WEBPACK_IMPORTED_MODULE_8__/* .useEffectiveRole */ .F)undefined41994206(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined42514258(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined43114318(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined43614368(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined44194426(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined44694476(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined45334540(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined45904597(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined47054713(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined49694977(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined50485055(0,_lib_api__WEBPACK_IMPORTED_MODULE_6__/* .getPlans */ .T9)undefined54475460(0,_lib_api__WEBPACK_IMPORTED_MODULE_6__/* .getMyDashboard */ .H)undefined57455753(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined58595867(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined65286544(0,_lib_api__WEBPACK_IMPORTED_MODULE_6__/* .previewPlanChange */ .Cs)undefined68716882(0,_lib_api__WEBPACK_IMPORTED_MODULE_6__/* .purchasePlan */ .Je)undefined80968100(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined82048208(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined83298333(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined84788481(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined87178720(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined91819184(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined93079311(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined94959498(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined99549957(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1049910502(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1069110695(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1069710705react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragmentundefined1078810791(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1116911173(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1158011584(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1181211815(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1181711825_components_PlanBadge__WEBPACK_IMPORTED_MODULE_7__/* .PlanBadge */ .dundefined1210912112(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1255712560(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1304713050(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1333313336(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1362813632(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1393813942(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1394413952react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragmentundefined1411614120(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1495014954(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1559615600(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1627016273(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1645616459(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1662816631(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1699616999(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1735217356(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1826618270(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1848118484(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1864818651(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1897618979(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1912419128(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1933219335(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1942419428(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1967519678(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2008020083(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2031520319(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined2062320626(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2062820636_components_PlanBadge__WEBPACK_IMPORTED_MODULE_7__/* .PlanBadge */ .dundefined2099921002(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2182721830(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2210822112(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined2240122404(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2311623119(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2362723630(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2366323666(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2385023853(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2436224365(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2518725190(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2558225585(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2573525739(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined2590625909(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2617426177(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2638826392(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined2656326567(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined2675126754(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2702527028(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2740827412(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined2759627599(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2788227886(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined2839928403(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined2858728590(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2887528879(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined2939429398(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined2958229585(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2986929873(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined3042430428(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined3085530859(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined3086130869react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragmentundefined3136231366(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined3175331756(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined3175831761(next_link__WEBPACK_IMPORTED_MODULE_2___default())undefined3224532249(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined3242832431(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined3309933102(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined—˜™æ÷ÿÿš¶üÿÿŠ‹ €«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-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/ReplaceSource~export const LOCALES = [ { code: 'el', label: 'Ελληνικά', flag: '🇬🇷' }, { code: 'en', label: 'English', 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.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': 'δωÏεάν εγγÏαφή', // 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.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.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': 'ΕπιστÏοφή στη σÏνδεση', // Dashboard 'dashboard.title': 'Πίνακας ελέγχου', 'dashboard.new_task': '+ Îέα εÏγασία', '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': 'ΠεÏιοχή εÏγασίας', '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.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.body.new_offer': 'Îέα Ï€ÏοσφοÏά για «{title}»', 'notif.body.offer_accepted': 'Η Ï€ÏοσφοÏά σας για «{title}» έγινε δεκτή', 'notif.body.offer_declined': 'Η Ï€ÏοσφοÏά σας για «{title}» αποÏÏίφθηκε', 'notif.body.task_invite': 'Σας Ï€ÏοσκαλοÏν για «{title}»', 'notif.body.new_review': 'Λάβατε αξιολόγηση {rating}★', // 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.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': 'Το βιογÏαφικό και η φωτογÏαφία Ïυθμίζονται στην καÏτέλα «Βασικά».', '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.create_first': 'ΔημιουÏγήστε το Ï€Ïώτο σας χαÏτοφυλάκιο', 'profile.cards.delete_confirm': 'ΔιαγÏαφή χαÏτοφυλακίου;', 'profile.card.tab.main': 'Γενικά', 'profile.card.tab.skills': 'Δεξιότητες', 'profile.card.tab.categories': 'ΚατηγοÏίες', 'profile.card.tab.geography': 'ΓεωγÏαφία', 'profile.card.tab.portfolio': 'ΓκαλεÏί', 'profile.card.active': 'ΕνεÏγή', '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.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.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.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.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.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.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.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.order': 'ΣειÏά', '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': 'Όλα τα δικαιώματα διατηÏοÏνται.', // 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': 'ΤώÏα μποÏείτε να λαμβάνετε παÏαγγελίες από πελάτες. Αναζητήστε εÏγασίες που ταιÏιάζουν με τις δεξιότητές σας.' }, 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': 'Dashboard', 'nav.chat': 'Messages', 'nav.notifications': 'Notifications', 'nav.profile': 'Profile', 'nav.admin': 'Admin Panel', 'nav.specialists': 'Specialists', 'nav.new_task': 'New task', 'nav.login': 'Login', 'nav.register': 'Register', 'nav.logout': 'Logout', 'hero.title': 'Find a specialist for any job', 'hero.subtitle': 'Post a task, receive offers and choose the best professional', 'hero.cta.post': 'Post a task', 'hero.cta.browse': 'Become a specialist', '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': 'specialists', 'stats.tasks': 'tasks', 'stats.categories': 'categories', 'stats.free': 'free sign-up', '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.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.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', 'dashboard.title': 'Dashboard', 'dashboard.new_task': '+ New 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', '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.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.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', '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': '🔧 Specialist', 'profile.role.admin': '👑 Admin', 'profile.role.customer': '👤 User', 'profile.role.change': 'To change your role please contact support.', 'profile.become_specialist': 'Become a Specialist', 'profile.become_specialist.desc': 'Upgrade to Specialist to take on tasks and build your profile.', 'become_specialist.hero.title': 'Earn money doing what you do best', 'become_specialist.hero.subtitle': 'Create a specialist profile and receive orders from clients across Greece', '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.', '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': 'Portfolio', 'profile.cards.count': 'Portfolio', 'profile.cards.add': 'Add portfolio', 'profile.cards.new_title': 'New portfolio title', 'profile.cards.placeholder': 'e.g. Plumbing', 'profile.cards.create': 'Create', 'profile.cards.cancel': 'Cancel', 'profile.cards.empty': 'No portfolio yet', 'profile.cards.create_first': 'Create your first portfolio', 'profile.cards.delete_confirm': 'Delete portfolio?', '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.active': 'Active', '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.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.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.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': 'Specialists', '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 portfolio (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': 'Specialist', '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.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': 'Portfolio', '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': 'Specialists', '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.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 specialists', '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.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': 'Portfolio', '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': 'Portfolio', 'admin.user_edit.no_cards': 'No portfolio found', 'admin.user_edit.card_title': 'Portfolio 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.specialist': 'Specialist', '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.order': 'Order', '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': 'Specialists', '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.', // 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': 'Portfolio items', 'pricing.feat.cards': 'Specialist cards', 'pricing.feat.notify_tasks': 'New task notifications', 'pricing.feat.video': 'Video in portfolio', // 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.' }, 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.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': 'беÑÐ¿Ð»Ð°Ñ‚Ð½Ð°Ñ Ñ€ÐµÐ³Ð¸ÑтрациÑ', '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.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.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': 'ВернутьÑÑ Ðº входу', 'dashboard.title': 'Панель управлениÑ', 'dashboard.new_task': '+ ÐÐ¾Ð²Ð°Ñ Ð·Ð°Ð´Ð°Ñ‡Ð°', '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': 'Район работы', '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.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.body.new_offer': 'Ðовое предложение на «{title}»', 'notif.body.offer_accepted': 'Ваше предложение на «{title}» принÑто', 'notif.body.offer_declined': 'Ваше предложение на «{title}» отклонено', 'notif.body.task_invite': 'Ð’Ð°Ñ Ð¿Ñ€Ð¸Ð³Ð»Ð°ÑˆÐ°ÑŽÑ‚ на «{title}»', 'notif.body.new_review': 'Ð’Ñ‹ получили оценку {rating}★', '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.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': 'Ð‘Ð¸Ð¾Ð³Ñ€Ð°Ñ„Ð¸Ñ Ð¸ фото наÑтраиваютÑÑ Ð²Ð¾ вкладке «ОÑновное».', '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.create_first': 'Создать первое портфолио', 'profile.cards.delete_confirm': 'Удалить портфолио?', 'profile.card.tab.main': 'ОÑновное', 'profile.card.tab.skills': 'Ðавыки', 'profile.card.tab.categories': 'Категории', 'profile.card.tab.geography': 'ГеографиÑ', 'profile.card.tab.portfolio': 'ГалереÑ', 'profile.card.active': 'Ðктивна', '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.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.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.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.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.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.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.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.order': 'ПорÑдок', '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': 'Ð’Ñе права защищены.', // 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': 'Теперь вы можете получать заказы от клиентов. Ðайдите задачи, которые ÑоответÑтвуют вашим навыкам.' } }; export function getTranslations(locale) { var _translations_locale; const t = (_translations_locale = translations[locale]) !== null && _translations_locale !== void 0 ? _translations_locale : translations.el; return (key, fallback)=>{ var _t_key, _ref, _ref1; return (_ref1 = (_ref = (_t_key = t[key]) !== null && _t_key !== void 0 ? _t_key : translations.el[key]) !== null && _ref !== void 0 ? _ref : fallback) !== null && _ref1 !== void 0 ? _ref1 : key; }; } C ÈèÎ耀€y/* 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: '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.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': 'δωÏεάν εγγÏαφή', // 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.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.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': 'ΕπιστÏοφή στη σÏνδεση', // Dashboard 'dashboard.title': 'Πίνακας ελέγχου', 'dashboard.new_task': '+ Îέα εÏγασία', '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': 'ΠεÏιοχή εÏγασίας', '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.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.body.new_offer': 'Îέα Ï€ÏοσφοÏά για «{title}»', 'notif.body.offer_accepted': 'Η Ï€ÏοσφοÏά σας για «{title}» έγινε δεκτή', 'notif.body.offer_declined': 'Η Ï€ÏοσφοÏά σας για «{title}» αποÏÏίφθηκε', 'notif.body.task_invite': 'Σας Ï€ÏοσκαλοÏν για «{title}»', 'notif.body.new_review': 'Λάβατε αξιολόγηση {rating}★', // 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.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': 'Το βιογÏαφικό και η φωτογÏαφία Ïυθμίζονται στην καÏτέλα «Βασικά».', '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.create_first': 'ΔημιουÏγήστε το Ï€Ïώτο σας χαÏτοφυλάκιο', 'profile.cards.delete_confirm': 'ΔιαγÏαφή χαÏτοφυλακίου;', 'profile.card.tab.main': 'Γενικά', 'profile.card.tab.skills': 'Δεξιότητες', 'profile.card.tab.categories': 'ΚατηγοÏίες', 'profile.card.tab.geography': 'ΓεωγÏαφία', 'profile.card.tab.portfolio': 'ΓκαλεÏί', 'profile.card.active': 'ΕνεÏγή', '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.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.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.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.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.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.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.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.order': 'ΣειÏά', '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': 'Όλα τα δικαιώματα διατηÏοÏνται.', // 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': 'ΤώÏα μποÏείτε να λαμβάνετε παÏαγγελίες από πελάτες. Αναζητήστε εÏγασίες που ταιÏιάζουν με τις δεξιότητές σας.' }, 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': 'Dashboard', 'nav.chat': 'Messages', 'nav.notifications': 'Notifications', 'nav.profile': 'Profile', 'nav.admin': 'Admin Panel', 'nav.specialists': 'Specialists', 'nav.new_task': 'New task', 'nav.login': 'Login', 'nav.register': 'Register', 'nav.logout': 'Logout', 'hero.title': 'Find a specialist for any job', 'hero.subtitle': 'Post a task, receive offers and choose the best professional', 'hero.cta.post': 'Post a task', 'hero.cta.browse': 'Become a specialist', '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': 'specialists', 'stats.tasks': 'tasks', 'stats.categories': 'categories', 'stats.free': 'free sign-up', '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.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.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', 'dashboard.title': 'Dashboard', 'dashboard.new_task': '+ New 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', '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.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.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', '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': '🔧 Specialist', 'profile.role.admin': '👑 Admin', 'profile.role.customer': '👤 User', 'profile.role.change': 'To change your role please contact support.', 'profile.become_specialist': 'Become a Specialist', 'profile.become_specialist.desc': 'Upgrade to Specialist to take on tasks and build your profile.', 'become_specialist.hero.title': 'Earn money doing what you do best', 'become_specialist.hero.subtitle': 'Create a specialist profile and receive orders from clients across Greece', '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.', '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': 'Portfolio', 'profile.cards.count': 'Portfolio', 'profile.cards.add': 'Add portfolio', 'profile.cards.new_title': 'New portfolio title', 'profile.cards.placeholder': 'e.g. Plumbing', 'profile.cards.create': 'Create', 'profile.cards.cancel': 'Cancel', 'profile.cards.empty': 'No portfolio yet', 'profile.cards.create_first': 'Create your first portfolio', 'profile.cards.delete_confirm': 'Delete portfolio?', '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.active': 'Active', '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.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.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.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': 'Specialists', '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 portfolio (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': 'Specialist', '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.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': 'Portfolio', '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': 'Specialists', '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.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 specialists', '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.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': 'Portfolio', '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': 'Portfolio', 'admin.user_edit.no_cards': 'No portfolio found', 'admin.user_edit.card_title': 'Portfolio 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.specialist': 'Specialist', '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.order': 'Order', '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': 'Specialists', '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.', // 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': 'Portfolio items', 'pricing.feat.cards': 'Specialist cards', 'pricing.feat.notify_tasks': 'New task notifications', 'pricing.feat.video': 'Video in portfolio', // 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.' }, 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.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': 'беÑÐ¿Ð»Ð°Ñ‚Ð½Ð°Ñ Ñ€ÐµÐ³Ð¸ÑтрациÑ', '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.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.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': 'ВернутьÑÑ Ðº входу', 'dashboard.title': 'Панель управлениÑ', 'dashboard.new_task': '+ ÐÐ¾Ð²Ð°Ñ Ð·Ð°Ð´Ð°Ñ‡Ð°', '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': 'Район работы', '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.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.body.new_offer': 'Ðовое предложение на «{title}»', 'notif.body.offer_accepted': 'Ваше предложение на «{title}» принÑто', 'notif.body.offer_declined': 'Ваше предложение на «{title}» отклонено', 'notif.body.task_invite': 'Ð’Ð°Ñ Ð¿Ñ€Ð¸Ð³Ð»Ð°ÑˆÐ°ÑŽÑ‚ на «{title}»', 'notif.body.new_review': 'Ð’Ñ‹ получили оценку {rating}★', '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.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': 'Ð‘Ð¸Ð¾Ð³Ñ€Ð°Ñ„Ð¸Ñ Ð¸ фото наÑтраиваютÑÑ Ð²Ð¾ вкладке «ОÑновное».', '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.create_first': 'Создать первое портфолио', 'profile.cards.delete_confirm': 'Удалить портфолио?', 'profile.card.tab.main': 'ОÑновное', 'profile.card.tab.skills': 'Ðавыки', 'profile.card.tab.categories': 'Категории', 'profile.card.tab.geography': 'ГеографиÑ', 'profile.card.tab.portfolio': 'ГалереÑ', 'profile.card.active': 'Ðктивна', '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.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.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.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.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.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.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.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.order': 'ПорÑдок', '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': 'Ð’Ñе права защищены.', // 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': 'Теперь вы можете получать заказы от клиентов. Ðайдите задачи, которые ÑоответÑтвуют вашим навыкам.' } }; function getTranslations(locale) { var _translations_locale; const t = (_translations_locale = translations[locale]) !== null && _translations_locale !== void 0 ? _translations_locale : translations.el; return (key, fallback)=>{ var _t_key, _ref, _ref1; return (_ref1 = (_ref = (_t_key = t[key]) !== null && _t_key !== void 0 ? _t_key : translations.el[key]) !== null && _ref !== void 0 ? _ref : fallback) !== null && _ref1 !== void 0 ? _ref1 : key; }; } ÃÆ Óþ/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ $: () => (/* binding */ getTranslations), /* harmony export */ YZ: () => (/* binding */ LOCALES) /* harmony export */ }); /* unused harmony export translations */ Ƽþÿÿ/06undefined268274undefined190664190670undefinedÛ÷ÿÿ¹þÿÿÿÿÿ€ o «webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSourceR/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ F: () => (/* binding */ useEffectiveRole) /* harmony export */ }); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1592); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); «webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSourceT/* __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=([^;]+)/); var _m_; return (_m_ = m === null || m === void 0 ? void 0 : m[1]) !== null && _m_ !== void 0 ? _m_ : 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() { var _session_user; const { data: session } = useSession(); const userRole = session === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.role; const isAdmin = userRole === 'admin'; const [previewRole, setPreviewRole] = useState(null); 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š“™íöù €€€¿(0,_lib_auth__WEBPACK_IMPORTED_MODULE_0__/* .useSession */ .wV)¯(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)°(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)„Î/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ F: () => (/* binding */ useEffectiveRole) /* harmony export */ }); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1592); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* __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=([^;]+)/); var _m_; return (_m_ = m === null || m === void 0 ? void 0 : m[1]) !== null && _m_ !== void 0 ? _m_ : 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() { var _session_user; const { data: session } = (0,_lib_auth__WEBPACK_IMPORTED_MODULE_0__/* .useSession */ .wV)(); const userRole = session === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.role; const isAdmin = userRole === 'admin'; const [previewRole, setPreviewRole] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null); (0,react__WEBPACK_IMPORTED_MODULE_1__.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; } ¸» ÈR/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ F: () => (/* binding */ useEffectiveRole) /* harmony export */ }); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1592); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); »Ñþÿÿû70109undefined111154undefined659665undefined749758(0,_lib_auth__WEBPACK_IMPORTED_MODULE_0__/* .useSession */ .wV)undefined10171024(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined10371045(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefinedÐ÷ÿÿ„Îþÿÿqÿÿÿrÿÿÿmÿÿÿoÿÿÿnÿÿÿpÿÿÿ ­o«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSource // EXPORTS __webpack_require__.d(__webpack_exports__, { Header: () => (/* binding */ Header) }); // EXTERNAL MODULE: ../../node_modules/next/dist/compiled/react/jsx-runtime.js var jsx_runtime = __webpack_require__(4568); // EXTERNAL MODULE: ../../node_modules/next/dist/client/app-dir/link.js var app_dir_link = __webpack_require__(9664); var link_default = /*#__PURE__*/__webpack_require__.n(app_dir_link); // EXTERNAL MODULE: ../../node_modules/next/dist/api/navigation.js var navigation = __webpack_require__(7541); // EXTERNAL MODULE: ./src/lib/auth.ts var auth = __webpack_require__(1592); // EXTERNAL MODULE: ./src/context/locale.tsx var context_locale = __webpack_require__(9906); // EXTERNAL MODULE: ./src/lib/formatName.ts var formatName = __webpack_require__(1258); // EXTERNAL MODULE: ../../node_modules/next/dist/compiled/react/index.js var react = __webpack_require__(7620); // EXTERNAL MODULE: ./src/lib/translations.ts var translations = __webpack_require__(4962); ;// ./src/components/LanguageSwitcher.tsx «webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSource«webpack/lib/util/registerExternalSerializerœwebpack-sources/CachedSource ˆ«webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSource«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSource“/* __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); var _LOCALES_find; const current = (_LOCALES_find = LOCALES.find((l)=>l.code === locale)) !== null && _LOCALES_find !== void 0 ? _LOCALES_find : LOCALES[0]; // Close on outside click 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-blue-400 hover:bg-blue-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 ".concat(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-blue-50 transition ".concat(locale === loc.code ? 'bg-blue-50 text-blue-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-blue-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_„†¹»çé^f‡Ž¨­òøOU}…¶º$(Ž‘ux“J–> D _ c / 2 Ó Ö Õ Ø €€€€€×__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__._ÿÿÿûþÿÿÿ€†buffer†source„size„maps„hasht/* __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); var _LOCALES_find; const current = (_LOCALES_find = __WEBPACK_MODULE_REFERENCE__7_5b224c4f43414c4553225d_call_asiSafe1__._.find((l)=>l.code === locale)) !== null && _LOCALES_find !== void 0 ? _LOCALES_find : __WEBPACK_MODULE_REFERENCE__7_5b224c4f43414c4553225d_asiSafe1__._[0]; // Close on outside click __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-blue-400 hover:bg-blue-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 ".concat(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-blue-50 transition ".concat(locale === loc.code ? 'bg-blue-50 text-blue-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-blue-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}ƒmap‹bufferedMap ReplaceSourceRawSource“/* __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); var _LOCALES_find; const current = (_LOCALES_find = LOCALES.find((l)=>l.code === locale)) !== null && _LOCALES_find !== void 0 ? _LOCALES_find : LOCALES[0]; // Close on outside click 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-blue-400 hover:bg-blue-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 ".concat(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-blue-50 transition ".concat(locale === loc.code ? 'bg-blue-50 text-blue-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-blue-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__._undefined498504__WEBPACK_MODULE_REFERENCE__7_5b224c4f43414c4553225d_call_asiSafe1__._undefined591597__WEBPACK_MODULE_REFERENCE__7_5b224c4f43414c4553225d_asiSafe1__._undefined637645__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined950954__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined10601064__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined14221425__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined15561559__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined19091912__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined21952198__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined23662372__WEBPACK_MODULE_REFERENCE__7_5b224c4f43414c4553225d_call_asiSafe1__._undefined23992403__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined28632866__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined30273030__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined32853288__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined`_ŠàUo¿I à^ÛE‘÷AÄl ¶ Ñ  à  # o ;…&pAo¹£(0,context_locale/* useLocale */.Y)’(0,react.useState)(0,react.useRef)œtranslations/* LOCALES */.YZÿ“(0,react.useEffect)”(0,jsx_runtime.jsxs)ÿ“(0,jsx_runtime.jsx)ÿÿÿüþÿÿÿN // EXTERNAL MODULE: ./src/lib/api.ts var api = __webpack_require__(2982); // EXTERNAL MODULE: ../../node_modules/socket.io-client/build/esm/index.js + 28 modules var esm = __webpack_require__(2838); // EXTERNAL MODULE: ./src/hooks/useEffectiveRole.ts var useEffectiveRole = __webpack_require__(7795); ;// ./src/components/Header.tsx  ;«webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSource«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSourceý)/* __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'; const API_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:4000'; export function Header() { var _session_user; 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 [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); useEffect(()=>{ pathnameRef.current = pathname; }, [ pathname ]); // Close dropdowns on outside click 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 === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.role) === 'admin'; const effectiveRole = useEffectiveRole(); const isSpecialist = effectiveRole === 'specialist'; const isActive = function(href) { let exact = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; return exact ? pathname === href : pathname === href || pathname.startsWith(href + '/'); }; const navCls = function(href) { let exact = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; return "font-medium text-sm transition ".concat(isActive(href, exact) ? 'text-blue-600' : 'text-gray-600 hover:text-blue-600'); }; const mobileNavCls = function(href) { let exact = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; return "flex items-center gap-2 font-medium py-1 ".concat(isActive(href, exact) ? 'text-blue-600' : 'text-gray-700'); }; // Reset chat badge when entering chat useEffect(()=>{ if (pathname === '/chat') setUnreadChat(0); }, [ pathname ]); 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 ]); 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 ]); useEffect(()=>{ if (!session) { setPlanTier(null); return; } getMyDashboard().then((d)=>{ var _d_plan; var _d_plan_tier; return setPlanTier((_d_plan_tier = (_d_plan = d.plan) === null || _d_plan === void 0 ? void 0 : _d_plan.tier) !== null && _d_plan_tier !== void 0 ? _d_plan_tier : null); }).catch(()=>{}); }, [ session ]); 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__*/ _jsx(Link, { href: "/", className: "flex items-center shrink-0", children: /*#__PURE__*/ _jsx("span", { className: "logo-text text-2xl font-bold text-blue-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: "/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 ".concat(unreadNotif > 0 ? 'text-orange-500' : ''), 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 ".concat(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-blue-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-blue-100 text-blue-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 ".concat(unreadNotif > 0 ? 'text-orange-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: "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 ".concat(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') ] }) ] }), isAdmin && /*#__PURE__*/ _jsxs(Link, { href: "/tasks", 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: "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" }) }), t('nav.find_tasks') ] }), (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-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-blue-600 font-medium text-sm", children: t('nav.login') }), /*#__PURE__*/ _jsx(Link, { href: "/register", className: "bg-blue-600 text-white px-4 py-2 rounded-lg hover:bg-blue-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: "/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 ".concat(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 ".concat(unreadNotif > 0 ? 'text-orange-500' : ''), 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-blue-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=".concat(msgToast.roomId), onClick: ()=>setMsgToast(null), className: "text-xs text-blue-600 hover:underline font-medium", children: t('chat.toast_open') }) ] }) ] }) }) ] }); } @ï`<_‘“¯±éëIK}´¶éë%'LN‰›¹¾Ô×Ý$>Hk_t“›ÄËÿ:Aov §ÔÛû$DIjo€ˆ,;¬ ´  _ [ \ çïfs9A¦³ï÷ÃÇÉÑ×ÛuyVY[^\`<_@BJÅÈÊÍ+.03ÂÆÈÐKNPSÃÆÈˇ Š Œ á!å!ç!ï!j"_n"p"s"É#Ì#í%ð%˜(›(Ý*á*ã*æ*3,6,U.X.Ë0Î0335494Þ5á5¤6²6ž7¡7q9t9u;_x;ž=¡=#@'@{AAA‰A4B8B:B=BmDpDG G_JcJeJhJšLL3O6OŒSS’SšSETITKT_NT‚V…VLYOYt\x\I^L^—a›aa aËcÎc“f–f‡i‹iRkUk n¤n¦n©nÙpÜprsusÚwÞwàw_ãwçyêyP|S|¡£¦­°„„z‡~‡€‡ƒ‡‡‰‹‰CŒFŒ˜“œ“ž“¡“§•ª•˜˜U›_Y›[›^›fiÏŸÒŸN£Q£S¤W¤¦¦·§º§ªªh®l®n®v®ñ®ô®ö®ù®y°|°~°°t²w²y²_ˆ²³ ³Ð³Ó³Õ³ä³"´%´OµRµ··I¸L¸„ºˆº^»b»d»l»×»Û»Ý»à»3½6½þ¾¿VÁZÁ\Á__ÁºÂ½Â…ĈÄcÇgÇiÇqÇÜÇàÇâÇåÇFÉIÉËËJÍNÍPÍSͲεÎ}ЀпÓÃÓÅÓÍÓ8Ô<Ô>Ô_AÔ˜Õ›Õ“×–×ÚÚÒÛÖÛØÛàÛ[Ü_ÜaÜdÜíÝðÝèßëßiâmâoârâùãüãôå÷å]éaécékéæé_êéìéïé€ëƒë­í°íEðIðºñ½ñ;ô?ôAôDôÇõÊõÂ÷Å÷ûûû ûü„üLþOþx_{HKÔØÚÝ04; > š  (,.1Ž‘^aËÏŒ’DG ª®°\¸#&(+¹¼¾Áÿ !‚!†!Y"\"##¹#¼#±$´$Ô%Ø%Š&& ( (((€€€€€€€€€€€˜"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__._ùûÿûûûûùùúùüûûùüûûùúùüûûùüûûùúùüûûûùúùüûûùüûûùúùüûûùûùüûûùüûûùüûûùüùûûùüûûùþûûùúûüûüûùûùûûùûûüèug/* __next_internal_client_entry_do_not_use__ Header auto */ const API_URL = "https://api.canhelp.gr" || 0; function Header() { var _session_user; 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 [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); __WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._(()=>{ pathnameRef.current = pathname; }, [ pathname ]); // Close dropdowns on outside click __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 === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.role) === 'admin'; const effectiveRole = __WEBPACK_MODULE_REFERENCE__11_5b22757365456666656374697665526f6c65225d_call_directImport_asiSafe1__._(); const isSpecialist = effectiveRole === 'specialist'; const isActive = function(href) { let exact = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; return exact ? pathname === href : pathname === href || pathname.startsWith(href + '/'); }; const navCls = function(href) { let exact = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; return "font-medium text-sm transition ".concat(isActive(href, exact) ? 'text-blue-600' : 'text-gray-600 hover:text-blue-600'); }; const mobileNavCls = function(href) { let exact = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; return "flex items-center gap-2 font-medium py-1 ".concat(isActive(href, exact) ? 'text-blue-600' : 'text-gray-700'); }; // Reset chat badge when entering chat __WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._(()=>{ if (pathname === '/chat') setUnreadChat(0); }, [ pathname ]); __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 ]); __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 ]); __WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._(()=>{ if (!session) { setPlanTier(null); return; } __WEBPACK_MODULE_REFERENCE__9_5b226765744d7944617368626f617264225d_call_directImport_asiSafe1__._().then((d)=>{ var _d_plan; var _d_plan_tier; return setPlanTier((_d_plan_tier = (_d_plan = d.plan) === null || _d_plan === void 0 ? void 0 : _d_plan.tier) !== null && _d_plan_tier !== void 0 ? _d_plan_tier : null); }).catch(()=>{}); }, [ session ]); __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_5b226a7378225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/", className: "flex items-center shrink-0", children: /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("span", { className: "logo-text text-2xl font-bold text-blue-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: "/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 ".concat(unreadNotif > 0 ? 'text-orange-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: "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 ".concat(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-blue-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-blue-100 text-blue-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 ".concat(unreadNotif > 0 ? 'text-orange-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: "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 ".concat(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') ] }) ] }), isAdmin && /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/tasks", 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: "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" }) }), t('nav.find_tasks') ] }), (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-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-blue-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-blue-600 text-white px-4 py-2 rounded-lg hover:bg-blue-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: "/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 ".concat(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 ".concat(unreadNotif > 0 ? 'text-orange-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: "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-blue-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=".concat(msgToast.roomId), onClick: ()=>setMsgToast(null), className: "text-xs text-blue-600 hover:underline font-medium", children: t('chat.toast_open') }) ] }) ] }) }) ] }); } éì íý)/* __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'; const API_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:4000'; export function Header() { var _session_user; 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 [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); useEffect(()=>{ pathnameRef.current = pathname; }, [ pathname ]); // Close dropdowns on outside click 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 === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.role) === 'admin'; const effectiveRole = useEffectiveRole(); const isSpecialist = effectiveRole === 'specialist'; const isActive = function(href) { let exact = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; return exact ? pathname === href : pathname === href || pathname.startsWith(href + '/'); }; const navCls = function(href) { let exact = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; return "font-medium text-sm transition ".concat(isActive(href, exact) ? 'text-blue-600' : 'text-gray-600 hover:text-blue-600'); }; const mobileNavCls = function(href) { let exact = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; return "flex items-center gap-2 font-medium py-1 ".concat(isActive(href, exact) ? 'text-blue-600' : 'text-gray-700'); }; // Reset chat badge when entering chat useEffect(()=>{ if (pathname === '/chat') setUnreadChat(0); }, [ pathname ]); 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 ]); 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 ]); useEffect(()=>{ if (!session) { setPlanTier(null); return; } getMyDashboard().then((d)=>{ var _d_plan; var _d_plan_tier; return setPlanTier((_d_plan_tier = (_d_plan = d.plan) === null || _d_plan === void 0 ? void 0 : _d_plan.tier) !== null && _d_plan_tier !== void 0 ? _d_plan_tier : null); }).catch(()=>{}); }, [ session ]); 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__*/ _jsx(Link, { href: "/", className: "flex items-center shrink-0", children: /*#__PURE__*/ _jsx("span", { className: "logo-text text-2xl font-bold text-blue-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: "/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 ".concat(unreadNotif > 0 ? 'text-orange-500' : ''), 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 ".concat(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-blue-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-blue-100 text-blue-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 ".concat(unreadNotif > 0 ? 'text-orange-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: "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 ".concat(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') ] }) ] }), isAdmin && /*#__PURE__*/ _jsxs(Link, { href: "/tasks", 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: "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" }) }), t('nav.find_tasks') ] }), (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-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-blue-600 font-medium text-sm", children: t('nav.login') }), /*#__PURE__*/ _jsx(Link, { href: "/register", className: "bg-blue-600 text-white px-4 py-2 rounded-lg hover:bg-blue-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: "/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 ".concat(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 ".concat(unreadNotif > 0 ? 'text-orange-500' : ''), 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-blue-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=".concat(msgToast.roomId), onClick: ()=>setMsgToast(null), className: "text-xs text-blue-600 hover:underline font-medium", children: t('chat.toast_open') }) ] }) ] }) }) ] }); } ¥U60145undefined147175undefined177233undefined235283undefined285329undefined331381undefined383436undefined438489undefined491549undefined551588undefined590649undefined667697"https://api.canhelp.gr"undefined7027240undefined727733undefined796804__WEBPACK_MODULE_REFERENCE__2_5b22757365526f75746572225d_call_directImport_asiSafe1__._undefined830840__WEBPACK_MODULE_REFERENCE__2_5b22757365506174686e616d65225d_call_directImport_asiSafe1__._undefined875884__WEBPACK_MODULE_REFERENCE__3_5b2275736553657373696f6e225d_call_directImport_asiSafe1__._undefined915923__WEBPACK_MODULE_REFERENCE__4_5b227573654c6f63616c65225d_call_directImport_asiSafe1__._undefined964971__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined10231030__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined10821089__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined11351142__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined11841191__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined12361243__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined12751280__WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._undefined13111316__WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._undefined13481353__WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._undefined13861391__WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._undefined14081416__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined15421550__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined20922107__WEBPACK_MODULE_REFERENCE__11_5b22757365456666656374697665526f6c65225d_call_directImport_asiSafe1__._undefined29882996__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined30943102__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined31633164__WEBPACK_MODULE_REFERENCE__10_5b22696f225d_call_directImport_asiSafe1__._undefined38153823__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined39423955__WEBPACK_MODULE_REFERENCE__9_5b22676574556e72656164436f756e74225d_call_directImport_asiSafe1__._undefined41534161__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined42624275__WEBPACK_MODULE_REFERENCE__9_5b226765744d7944617368626f617264225d_call_directImport_asiSafe1__._undefined45914599__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined50595063__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined50655073__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined51245127__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined53355339__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined54935497__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined57185721__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined57235726__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined59155918__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined62366240__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined64606464__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined64666474__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined65976600__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined66026605__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined69556958__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined69606963__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined73627366__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined73687376__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined74997502__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined75047507__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined78757878__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined78807883__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined83278330__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined83328335__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined86738677__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined86798687__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined88108814__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined88168819__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined91619164__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined97099712__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1039210395__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1097310977__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1097910982__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined1131511318__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1186111864__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1249112494__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1307213076__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1336513369__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1379013793__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1398814002__WEBPACK_MODULE_REFERENCE__5_5b22666f726d617453686f72744e616d65225d_call_directImport_asiSafe1__._undefined1423814241__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1470514708__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1522115224__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1577415777__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1641916423__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1676316767__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1676916777__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined1694816952__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1695416957__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined1751717520__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1818218185__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1903919043__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1904519048__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined1961019613__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2027520278__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2138821392__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2139421402__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined2157321577__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2157921582__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined2214622149__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2286022863__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2366823672__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2413724140__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2498324987__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2498924992__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined2554725550__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2625926262__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2701527019__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2747427477__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2832028324__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2832628329__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined2888928892__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2955429557__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3068230686__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3068830691__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined3120731210__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3182431827__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3266932673__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3267532678__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined3319733200__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3381433817__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3468234686__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3468834691__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined3520735211__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3590735910__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3689036893__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3778437788__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3779037793__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined3831138314__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3892838931__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3976539769__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3977139774__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined4029440297__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4091140914__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4180641809__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4206742071__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4249742503__WEBPACK_MODULE_REFERENCE__3_5b227369676e4f7574225d_call_directImport_asiSafe1__._undefined4293542938__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4353843541__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4464844652__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4465444662__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined4478544788__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4479044793__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined4517745180__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4518245185__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined4568445687__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4568945704__WEBPACK_MODULE_REFERENCE__8_5b224c616e67756167655377697463686572225d_directImport_asiSafe1__._undefined4583145835__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4603246035__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4603746052__WEBPACK_MODULE_REFERENCE__8_5b224c616e67756167655377697463686572225d_directImport_asiSafe1__._undefined4611446117__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4641546418__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4686446867__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4717747180__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4774847752__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4796647970__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4797247980__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined4808748091__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4809348096__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined4843548438__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4889448897__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4949449498__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4950049503__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined4985049853__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5030950312__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5104351047__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5104951057__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined5116451168__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5117051173__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5152651529__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5198551988__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5255452558__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5256052563__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5291452917__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5337353376__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5420754211__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5421354221__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined5432854332__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5433454337__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5468054683__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5518755190__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5583255835__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5627456278__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5628056288__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined5641156415__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5641756420__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5681356816__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5732057323__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5796157965__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5796757970__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5836158364__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5886858871__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5974159745__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5974759755__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined5987859882__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5988459887__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6028860291__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6084560848__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6150961513__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6188261885__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6252362527__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6252962532__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6291962922__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6342663429__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6427964283__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6428564288__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6464164644__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6510065103__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6580865812__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6581465817__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6616866171__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6663266635__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6728467288__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6729067293__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6763267636__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6815568158__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6901869021__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6967269676__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6967869681__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined7003070033__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7049470497__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7111571119__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7130871314__WEBPACK_MODULE_REFERENCE__3_5b227369676e4f7574225d_call_directImport_asiSafe1__._undefined7174871751__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7219872201__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7287472878__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7288072888__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined7299572998__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7300073003__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined7340173404__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7340673409__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined7398373986__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7411474118__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7432974332__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7452374527__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7468174684__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7492974932__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7522075224__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7540275405__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7578675789__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7579175794__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined_á´ $~¡ùn—ës§û)}§û(|œì [{Ëì<M£!_w• ú kÁ#y¶ÿŠàW·}Ó8˜Ô*öBD“Æà,Æï9;_ˆEÍ õ A!C!’! "W"Y"¦"$N$P$$,&x&z&É&D'Ž''Ý'M)—)™)æ)¢+ì+î+_;,-Ù-Û-*.¥.ñ.ó.@/–0à03K3ó5=68Ë8Í89g:±:Ð<=?×?BeB†CÒCwEÁE„F_æFÒGHìI6J7LL§NñNsQ¿QS_SaS°S[T§T©TöT&WpWZPZ¦]ò]ô]A^s`½`Sccóg_?hAhh;i‡i‰iÖi lTloeoŠrÖr§tñtÆîÇ8ÈÊÚÊ-ÏyÏ{ÏÊÏEÐБÐÞÐ^Ò_¨ÒªÒ÷ÒêÔ4Õ6Õ•ÕÖ`Ö%×o×q×ÐרXØ‚ÙÌÙŠÛÔÛ ÝTÝŒßØß®àúàüàKá¶áââQâ¤ã_îã¶åæUè¡è£èðèKê•ê]ì§ì‚ïÎïÐïðŠðÖðØð%ñ†òÐò˜ôâô÷d÷f÷³÷ù\ù$ûnû­þ_ùþûþJÿµÿP§ñé3µÿ¶  S Î   i ò < 4~üHJ—h`_ª\^­(tvÃTžÈ§!ó!d#®#,&x&z&Ç&J(”(Œ*Ö*(.t.v.Ã.$0n062_€2A555Ü5;7…7R9œ9%<q<s<À<>_>f@°@ DVDáF-G/G|GÙH#IðJ:K¤MðM­NÿN±P_ûPºRS¥UñUóUBV­V÷VùVFWÔXY YmY«[õ[u\Á\”]Þ]^é^ƒ_Í_Â` a,bxb*ctcñdB;e=eŠe˜(0,navigation.useRouter)š(0,navigation.usePathname)›(0,auth/* useSession */.wV)ëììììììííííïï¬(0,useEffectiveRole/* useEffectiveRole */.F)îîŠ(0,esm.io)íž(0,api/* getUnreadCount */.$M)ì(0,api/* getMyDashboard */.H)ëì”jsx_runtime.Fragmentìëëì(link_default())ëêêþëÿëÿêþëÿëÿëÿêþêÿëëëêÿëëëêêë¥(0,formatName/* formatShortName */.H)êêêêééýéþêêéþêêéýéþêêéêéþêêéêéþêêéþêêéþêêéþéêêéþêêéþêêêé˜(0,auth/* signOut */.CI)ééèüéýéýéLanguageSwitcherçèÿèèèèççûçüèèçüèèçûçüèèçüèèçûçüèèèçûçüèèçüèèçûçüèèçèçüèèçüèèçüèèçüçèèçüèèçþèèçûèüèüèçèçèèçèèütÿÿÿìG // EXPORTS __webpack_require__.d(__webpack_exports__, { Header: () => (/* binding */ Header) }); // EXTERNAL MODULE: ../../node_modules/next/dist/compiled/react/jsx-runtime.js var jsx_runtime = __webpack_require__(4568); // EXTERNAL MODULE: ../../node_modules/next/dist/client/app-dir/link.js var app_dir_link = __webpack_require__(9664); var link_default = /*#__PURE__*/__webpack_require__.n(app_dir_link); // EXTERNAL MODULE: ../../node_modules/next/dist/api/navigation.js var navigation = __webpack_require__(7541); // EXTERNAL MODULE: ./src/lib/auth.ts var auth = __webpack_require__(1592); // EXTERNAL MODULE: ./src/context/locale.tsx var context_locale = __webpack_require__(9906); // EXTERNAL MODULE: ./src/lib/formatName.ts var formatName = __webpack_require__(1258); // EXTERNAL MODULE: ../../node_modules/next/dist/compiled/react/index.js var react = __webpack_require__(7620); // EXTERNAL MODULE: ./src/lib/translations.ts var translations = __webpack_require__(4962); ;// ./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); var _LOCALES_find; const current = (_LOCALES_find = translations/* LOCALES */.YZ.find((l)=>l.code === locale)) !== null && _LOCALES_find !== void 0 ? _LOCALES_find : translations/* LOCALES */.YZ[0]; // Close on outside click (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,jsx_runtime.jsxs)("div", { ref: ref, className: "relative", children: [ /*#__PURE__*/ (0,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-blue-400 hover:bg-blue-50 transition text-sm font-medium text-gray-700", "aria-label": "Change language", children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)("span", { children: current.code.toUpperCase() }), /*#__PURE__*/ (0,jsx_runtime.jsx)("svg", { className: "w-3.5 h-3.5 text-gray-400 transition-transform ".concat(open ? 'rotate-180' : ''), fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: /*#__PURE__*/ (0,jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19 9l-7 7-7-7" }) }) ] }), open && /*#__PURE__*/ (0,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,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-blue-50 transition ".concat(locale === loc.code ? 'bg-blue-50 text-blue-700 font-medium' : 'text-gray-700'), children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)("span", { children: loc.label }), locale === loc.code && /*#__PURE__*/ (0,jsx_runtime.jsx)("svg", { className: "w-3.5 h-3.5 ml-auto text-blue-600", fill: "currentColor", viewBox: "0 0 20 20", children: /*#__PURE__*/ (0,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__(2982); // EXTERNAL MODULE: ../../node_modules/socket.io-client/build/esm/index.js + 28 modules var esm = __webpack_require__(2838); // EXTERNAL MODULE: ./src/hooks/useEffectiveRole.ts var useEffectiveRole = __webpack_require__(7795); ;// ./src/components/Header.tsx /* __next_internal_client_entry_do_not_use__ Header auto */ const API_URL = "https://api.canhelp.gr" || 0; function Header() { var _session_user; 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 [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); (0,react.useEffect)(()=>{ pathnameRef.current = pathname; }, [ pathname ]); // Close dropdowns on outside click (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 === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.role) === 'admin'; const effectiveRole = (0,useEffectiveRole/* useEffectiveRole */.F)(); const isSpecialist = effectiveRole === 'specialist'; const isActive = function(href) { let exact = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; return exact ? pathname === href : pathname === href || pathname.startsWith(href + '/'); }; const navCls = function(href) { let exact = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; return "font-medium text-sm transition ".concat(isActive(href, exact) ? 'text-blue-600' : 'text-gray-600 hover:text-blue-600'); }; const mobileNavCls = function(href) { let exact = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; return "flex items-center gap-2 font-medium py-1 ".concat(isActive(href, exact) ? 'text-blue-600' : 'text-gray-700'); }; // Reset chat badge when entering chat (0,react.useEffect)(()=>{ if (pathname === '/chat') setUnreadChat(0); }, [ pathname ]); (0,react.useEffect)(()=>{ if (!session) return; const socket = (0,esm.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 ]); (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 ]); (0,react.useEffect)(()=>{ if (!session) { setPlanTier(null); return; } (0,api/* getMyDashboard */.H)().then((d)=>{ var _d_plan; var _d_plan_tier; return setPlanTier((_d_plan_tier = (_d_plan = d.plan) === null || _d_plan === void 0 ? void 0 : _d_plan.tier) !== null && _d_plan_tier !== void 0 ? _d_plan_tier : null); }).catch(()=>{}); }, [ session ]); (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,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,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,jsx_runtime.jsxs)("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: [ /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", { className: "flex items-center justify-between h-16 header-content transition-all duration-300", children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/", className: "flex items-center shrink-0", children: /*#__PURE__*/ (0,jsx_runtime.jsx)("span", { className: "logo-text text-2xl font-bold text-blue-600 transition-all duration-300", children: "CanHelp" }) }), /*#__PURE__*/ (0,jsx_runtime.jsxs)("nav", { className: "hidden md:flex items-center gap-5 ml-auto", children: [ isSpecialist ? /*#__PURE__*/ (0,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/tasks", className: navCls('/tasks'), children: t('nav.find_tasks') }), /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/dashboard", className: navCls('/dashboard'), children: t('nav.dashboard') }) ] }) : /*#__PURE__*/ (0,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/tasks/new", className: navCls('/tasks/new', true), children: t('dashboard.new_task') }), /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/specialists", className: navCls('/specialists'), children: t('nav.specialists') }) ] }), /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/pricing", className: navCls('/pricing', true), children: t('nav.pricing', 'Pricing') }), session ? /*#__PURE__*/ (0,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,jsx_runtime.jsxs)((link_default()), { href: "/notifications", className: "relative text-gray-600 hover:text-gray-900 flex items-center", children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)("svg", { className: "w-5 h-5 ".concat(unreadNotif > 0 ? 'text-orange-500' : ''), fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: /*#__PURE__*/ (0,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,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,jsx_runtime.jsxs)((link_default()), { href: "/chat", className: "relative text-gray-600 hover:text-gray-900 flex items-center", children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)("svg", { className: "w-5 h-5 ".concat(unreadChat > 0 ? 'text-green-500' : ''), fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: /*#__PURE__*/ (0,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,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,jsx_runtime.jsxs)("div", { className: "relative", ref: profileRef, children: [ /*#__PURE__*/ (0,jsx_runtime.jsxs)("button", { onClick: ()=>setProfileOpen(!profileOpen), className: "flex items-center gap-1.5 text-sm font-medium text-gray-600 hover:text-blue-600", children: [ /*#__PURE__*/ (0,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,jsx_runtime.jsx)("span", { className: "inline-flex items-center px-1.5 py-0.5 rounded-full text-[10px] font-bold bg-blue-100 text-blue-700 leading-none", children: "Pro" }), planTier === 'ultimate' && /*#__PURE__*/ (0,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,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,jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19 9l-7 7-7-7" }) }) ] }), profileOpen && /*#__PURE__*/ (0,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,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,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,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,jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 4v16m8-8H4" }) }), t('nav.new_task') ] }), /*#__PURE__*/ (0,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,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,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,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,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,jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0 ".concat(unreadNotif > 0 ? 'text-orange-500' : 'text-gray-400'), fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,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,jsx_runtime.jsxs)("span", { className: "flex items-center gap-1.5", children: [ t('nav.notifications'), unreadNotif > 0 && /*#__PURE__*/ (0,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,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,jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0 ".concat(unreadChat > 0 ? 'text-green-500' : 'text-gray-400'), fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,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,jsx_runtime.jsxs)("span", { className: "flex items-center gap-1.5", children: [ t('nav.chat'), unreadChat > 0 && /*#__PURE__*/ (0,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,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,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,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') ] }) ] }), isAdmin && /*#__PURE__*/ (0,jsx_runtime.jsxs)((link_default()), { href: "/tasks", 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,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,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') ] }), (isSpecialist || isAdmin) && /*#__PURE__*/ (0,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,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,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,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,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,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,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,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,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,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,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,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,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,jsx_runtime.jsx)("hr", { className: "my-1 border-gray-100" }), /*#__PURE__*/ (0,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,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,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,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/login", className: "text-gray-600 hover:text-blue-600 font-medium text-sm", children: t('nav.login') }), /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/register", className: "bg-blue-600 text-white px-4 py-2 rounded-lg hover:bg-blue-700 font-medium text-sm", children: t('nav.register') }) ] }), /*#__PURE__*/ (0,jsx_runtime.jsx)(LanguageSwitcher, {}) ] }), /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", { className: "md:hidden flex items-center gap-2", children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)(LanguageSwitcher, {}), /*#__PURE__*/ (0,jsx_runtime.jsx)("button", { className: "p-2", onClick: ()=>setMenuOpen(!menuOpen), "aria-label": "Toggle menu", children: /*#__PURE__*/ (0,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,jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6 18L18 6M6 6l12 12" }) : /*#__PURE__*/ (0,jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4 6h16M4 12h16M4 18h16" }) }) }) ] }) ] }), menuOpen && /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", { className: "md:hidden py-4 border-t border-gray-100 flex flex-col gap-3", children: [ isSpecialist ? /*#__PURE__*/ (0,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,jsx_runtime.jsxs)((link_default()), { href: "/tasks", className: mobileNavCls('/tasks'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,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,jsx_runtime.jsxs)((link_default()), { href: "/dashboard", className: mobileNavCls('/dashboard'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,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,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,jsx_runtime.jsxs)((link_default()), { href: "/tasks/new", className: mobileNavCls('/tasks/new', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 4v16m8-8H4" }) }), t('nav.new_task') ] }), /*#__PURE__*/ (0,jsx_runtime.jsxs)((link_default()), { href: "/specialists", className: mobileNavCls('/specialists'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,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,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,jsx_runtime.jsxs)((link_default()), { href: "/chat", className: mobileNavCls('/chat', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0 ".concat(unreadChat > 0 ? 'text-green-500' : ''), fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,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,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,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,jsx_runtime.jsxs)((link_default()), { href: "/tasks/new", className: mobileNavCls('/tasks/new', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 4v16m8-8H4" }) }), t('nav.new_task') ] }), /*#__PURE__*/ (0,jsx_runtime.jsxs)((link_default()), { href: "/specialists", className: mobileNavCls('/specialists'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,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,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,jsx_runtime.jsxs)((link_default()), { href: "/notifications", className: mobileNavCls('/notifications', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0 ".concat(unreadNotif > 0 ? 'text-orange-500' : ''), fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,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,jsx_runtime.jsxs)("span", { className: "flex items-center gap-1.5", children: [ t('nav.notifications'), unreadNotif > 0 && /*#__PURE__*/ (0,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,jsx_runtime.jsxs)((link_default()), { href: "/dashboard", className: mobileNavCls('/dashboard'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,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,jsx_runtime.jsxs)((link_default()), { href: "/favorites", className: mobileNavCls('/favorites', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,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,jsx_runtime.jsxs)((link_default()), { href: "/schedule", className: mobileNavCls('/schedule', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,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,jsx_runtime.jsxs)((link_default()), { href: "/admin", className: mobileNavCls('/admin'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,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,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,jsx_runtime.jsxs)((link_default()), { href: "/profile", className: mobileNavCls('/profile', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,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,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,jsx_runtime.jsx)("svg", { className: "w-4 h-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,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,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/login", className: "text-gray-700 font-medium py-1", onClick: ()=>setMenuOpen(false), children: t('nav.login') }), /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/register", className: "text-blue-600 font-medium py-1", onClick: ()=>setMenuOpen(false), children: t('nav.register') }) ] }) ] }) ] }) }), msgToast && /*#__PURE__*/ (0,jsx_runtime.jsx)("div", { className: "fixed bottom-5 right-5 z-[200] max-w-sm w-full", children: /*#__PURE__*/ (0,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,jsx_runtime.jsx)("span", { className: "text-2xl shrink-0", children: "\uD83D\uDCAC" }), /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", { className: "flex-1 min-w-0", children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)("p", { className: "font-semibold text-gray-900 text-sm", children: t('chat.toast_title') }), /*#__PURE__*/ (0,jsx_runtime.jsx)("p", { className: "text-xs text-gray-500 truncate mt-0.5", children: msgToast.body }) ] }), /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", { className: "flex flex-col items-end gap-2 shrink-0", children: [ /*#__PURE__*/ (0,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,jsx_runtime.jsx)((link_default()), { href: "/chat?room=".concat(msgToast.roomId), onClick: ()=>setMsgToast(null), className: "text-xs text-blue-600 hover:underline font-medium", children: t('chat.toast_open') }) ] }) ] }) }) ] }); } ¨« ` ¸ // EXPORTS __webpack_require__.d(__webpack_exports__, { Header: () => (/* binding */ Header) }); // EXTERNAL MODULE: ../../node_modules/next/dist/compiled/react/jsx-runtime.js var jsx_runtime = __webpack_require__(4568); // EXTERNAL MODULE: ../../node_modules/next/dist/client/app-dir/link.js var app_dir_link = __webpack_require__(9664); var link_default = /*#__PURE__*/__webpack_require__.n(app_dir_link); // EXTERNAL MODULE: ../../node_modules/next/dist/api/navigation.js var navigation = __webpack_require__(7541); // EXTERNAL MODULE: ./src/lib/auth.ts var auth = __webpack_require__(1592); // EXTERNAL MODULE: ./src/context/locale.tsx var context_locale = __webpack_require__(9906); // EXTERNAL MODULE: ./src/lib/formatName.ts var formatName = __webpack_require__(1258); // EXTERNAL MODULE: ../../node_modules/next/dist/compiled/react/index.js var react = __webpack_require__(7620); // EXTERNAL MODULE: ./src/lib/translations.ts var translations = __webpack_require__(4962); ;// ./src/components/LanguageSwitcher.tsx  ReplaceSourceª“/* __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); var _LOCALES_find; const current = (_LOCALES_find = LOCALES.find((l)=>l.code === locale)) !== null && _LOCALES_find !== void 0 ? _LOCALES_find : LOCALES[0]; // Close on outside click 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-blue-400 hover:bg-blue-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 ".concat(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-blue-50 transition ".concat(locale === loc.code ? 'bg-blue-50 text-blue-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-blue-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__._undefined498504__WEBPACK_MODULE_REFERENCE__7_5b224c4f43414c4553225d_call_asiSafe1__._undefined591597__WEBPACK_MODULE_REFERENCE__7_5b224c4f43414c4553225d_asiSafe1__._undefined637645__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined950954__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined10601064__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined14221425__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined15561559__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined19091912__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined21952198__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined23662372__WEBPACK_MODULE_REFERENCE__7_5b224c4f43414c4553225d_call_asiSafe1__._undefined23992403__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined28632866__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined30273030__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined32853288__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined‹138224(0,context_locale/* useLocale */.Y)undefined257341(0,react.useState)undefined367447(0,react.useRef)undefined516585translations/* LOCALES */.YZundefined672736translations/* LOCALES */.YZundefined776862(0,react.useEffect)undefined11671243(0,jsx_runtime.jsxs)undefined13491425(0,jsx_runtime.jsxs)undefined17831857(0,jsx_runtime.jsx)undefined19882062(0,jsx_runtime.jsx)undefined24122486(0,jsx_runtime.jsx)undefined27692843(0,jsx_runtime.jsx)undefined30113080translations/* LOCALES */.YZundefined31073183(0,jsx_runtime.jsxs)undefined36433717(0,jsx_runtime.jsx)undefined38783952(0,jsx_runtime.jsx)undefined42074281(0,jsx_runtime.jsx)undefinedRawSourceN // EXTERNAL MODULE: ./src/lib/api.ts var api = __webpack_require__(2982); // EXTERNAL MODULE: ../../node_modules/socket.io-client/build/esm/index.js + 28 modules var esm = __webpack_require__(2838); // EXTERNAL MODULE: ./src/hooks/useEffectiveRole.ts var useEffectiveRole = __webpack_require__(7795); ;// ./src/components/Header.tsx û¦ƒ÷ÿÿ¥U60145undefined147175undefined177233undefined235283undefined285329undefined331381undefined383436undefined438489undefined491549undefined551588undefined590649undefined667697"https://api.canhelp.gr"undefined7027240undefined727733undefined796804__WEBPACK_MODULE_REFERENCE__2_5b22757365526f75746572225d_call_directImport_asiSafe1__._undefined830840__WEBPACK_MODULE_REFERENCE__2_5b22757365506174686e616d65225d_call_directImport_asiSafe1__._undefined875884__WEBPACK_MODULE_REFERENCE__3_5b2275736553657373696f6e225d_call_directImport_asiSafe1__._undefined915923__WEBPACK_MODULE_REFERENCE__4_5b227573654c6f63616c65225d_call_directImport_asiSafe1__._undefined964971__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined10231030__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined10821089__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined11351142__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined11841191__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined12361243__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined12751280__WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._undefined13111316__WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._undefined13481353__WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._undefined13861391__WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._undefined14081416__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined15421550__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined20922107__WEBPACK_MODULE_REFERENCE__11_5b22757365456666656374697665526f6c65225d_call_directImport_asiSafe1__._undefined29882996__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined30943102__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined31633164__WEBPACK_MODULE_REFERENCE__10_5b22696f225d_call_directImport_asiSafe1__._undefined38153823__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined39423955__WEBPACK_MODULE_REFERENCE__9_5b22676574556e72656164436f756e74225d_call_directImport_asiSafe1__._undefined41534161__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined42624275__WEBPACK_MODULE_REFERENCE__9_5b226765744d7944617368626f617264225d_call_directImport_asiSafe1__._undefined45914599__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined50595063__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined50655073__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined51245127__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined53355339__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined54935497__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined57185721__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined57235726__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined59155918__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined62366240__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined64606464__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined64666474__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined65976600__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined66026605__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined69556958__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined69606963__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined73627366__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined73687376__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined74997502__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined75047507__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined78757878__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined78807883__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined83278330__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined83328335__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined86738677__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined86798687__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined88108814__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined88168819__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined91619164__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined97099712__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1039210395__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1097310977__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1097910982__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined1131511318__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1186111864__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1249112494__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1307213076__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1336513369__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1379013793__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1398814002__WEBPACK_MODULE_REFERENCE__5_5b22666f726d617453686f72744e616d65225d_call_directImport_asiSafe1__._undefined1423814241__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1470514708__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1522115224__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1577415777__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1641916423__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1676316767__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1676916777__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined1694816952__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1695416957__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined1751717520__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1818218185__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1903919043__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1904519048__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined1961019613__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2027520278__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2138821392__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2139421402__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined2157321577__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2157921582__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined2214622149__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2286022863__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2366823672__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2413724140__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2498324987__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2498924992__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined2554725550__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2625926262__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2701527019__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2747427477__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2832028324__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2832628329__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined2888928892__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2955429557__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3068230686__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3068830691__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined3120731210__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3182431827__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3266932673__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3267532678__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined3319733200__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3381433817__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3468234686__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3468834691__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined3520735211__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3590735910__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3689036893__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3778437788__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3779037793__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined3831138314__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3892838931__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3976539769__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3977139774__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined4029440297__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4091140914__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4180641809__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4206742071__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4249742503__WEBPACK_MODULE_REFERENCE__3_5b227369676e4f7574225d_call_directImport_asiSafe1__._undefined4293542938__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4353843541__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4464844652__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4465444662__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined4478544788__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4479044793__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined4517745180__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4518245185__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined4568445687__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4568945704__WEBPACK_MODULE_REFERENCE__8_5b224c616e67756167655377697463686572225d_directImport_asiSafe1__._undefined4583145835__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4603246035__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4603746052__WEBPACK_MODULE_REFERENCE__8_5b224c616e67756167655377697463686572225d_directImport_asiSafe1__._undefined4611446117__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4641546418__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4686446867__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4717747180__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4774847752__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4796647970__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4797247980__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined4808748091__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4809348096__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined4843548438__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4889448897__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4949449498__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4950049503__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined4985049853__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5030950312__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5104351047__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5104951057__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined5116451168__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5117051173__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5152651529__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5198551988__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5255452558__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5256052563__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5291452917__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5337353376__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5420754211__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5421354221__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined5432854332__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5433454337__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5468054683__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5518755190__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5583255835__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5627456278__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5628056288__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined5641156415__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5641756420__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5681356816__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5732057323__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5796157965__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5796757970__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5836158364__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5886858871__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5974159745__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5974759755__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined5987859882__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5988459887__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6028860291__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6084560848__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6150961513__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6188261885__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6252362527__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6252962532__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6291962922__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6342663429__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6427964283__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6428564288__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6464164644__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6510065103__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6580865812__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6581465817__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6616866171__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6663266635__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6728467288__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6729067293__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6763267636__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6815568158__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6901869021__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6967269676__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6967869681__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined7003070033__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7049470497__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7111571119__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7130871314__WEBPACK_MODULE_REFERENCE__3_5b227369676e4f7574225d_call_directImport_asiSafe1__._undefined7174871751__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7219872201__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7287472878__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7288072888__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined7299572998__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7300073003__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined7340173404__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7340673409__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined7398373986__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7411474118__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7432974332__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7452374527__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7468174684__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7492974932__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7522075224__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7540275405__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7578675789__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7579175794__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined+!180266(0,navigation.useRouter)undefined292382(0,navigation.usePathname)undefined417505(0,auth/* useSession */.wV)undefined536622(0,context_locale/* useLocale */.Y)undefined663747(0,react.useState)undefined799883(0,react.useState)undefined9351019(0,react.useState)undefined10651149(0,react.useState)undefined11911275(0,react.useState)undefined13201404(0,react.useState)undefined14361516(0,react.useRef)undefined15471627(0,react.useRef)undefined16591739(0,react.useRef)undefined17721852(0,react.useRef)undefined18691955(0,react.useEffect)undefined20812167(0,react.useEffect)undefined27092810(0,useEffectiveRole/* useEffectiveRole */.F)undefined36913777(0,react.useEffect)undefined38753961(0,react.useEffect)undefined40224095(0,esm.io)undefined47464832(0,react.useEffect)undefined49515047(0,api/* getUnreadCount */.$M)undefined52455331(0,react.useEffect)undefined54325528(0,api/* getMyDashboard */.H)undefined58445930(0,react.useEffect)undefined63906466(0,jsx_runtime.jsxs)undefined64686547jsx_runtime.Fragmentundefined65986672(0,jsx_runtime.jsx)undefined68806956(0,jsx_runtime.jsxs)undefined71107186(0,jsx_runtime.jsxs)undefined74077481(0,jsx_runtime.jsx)undefined74837560(link_default())undefined77497823(0,jsx_runtime.jsx)undefined81418217(0,jsx_runtime.jsxs)undefined84378513(0,jsx_runtime.jsxs)undefined85158594jsx_runtime.Fragmentundefined87178791(0,jsx_runtime.jsx)undefined87938870(link_default())undefined92209294(0,jsx_runtime.jsx)undefined92969373(link_default())undefined97729848(0,jsx_runtime.jsxs)undefined98509929jsx_runtime.Fragmentundefined1005210126(0,jsx_runtime.jsx)undefined1012810205(link_default())undefined1057310647(0,jsx_runtime.jsx)undefined1064910726(link_default())undefined1117011244(0,jsx_runtime.jsx)undefined1124611323(link_default())undefined1166111737(0,jsx_runtime.jsxs)undefined1173911818jsx_runtime.Fragmentundefined1194112017(0,jsx_runtime.jsxs)undefined1201912096(link_default())undefined1243812512(0,jsx_runtime.jsx)undefined1305713131(0,jsx_runtime.jsx)undefined1381113885(0,jsx_runtime.jsx)undefined1446314539(0,jsx_runtime.jsxs)undefined1454114618(link_default())undefined1495115025(0,jsx_runtime.jsx)undefined1556815642(0,jsx_runtime.jsx)undefined1626916343(0,jsx_runtime.jsx)undefined1692116997(0,jsx_runtime.jsxs)undefined1728617362(0,jsx_runtime.jsxs)undefined1778317857(0,jsx_runtime.jsx)undefined1805218150(0,formatName/* formatShortName */.H)undefined1838618460(0,jsx_runtime.jsx)undefined1892418998(0,jsx_runtime.jsx)undefined1951119585(0,jsx_runtime.jsx)undefined2013520209(0,jsx_runtime.jsx)undefined2085120927(0,jsx_runtime.jsxs)undefined2126721343(0,jsx_runtime.jsxs)undefined2134521424jsx_runtime.Fragmentundefined2159521671(0,jsx_runtime.jsxs)undefined2167321750(link_default())undefined2231022384(0,jsx_runtime.jsx)undefined2304623120(0,jsx_runtime.jsx)undefined2397424050(0,jsx_runtime.jsxs)undefined2405224129(link_default())undefined2469124765(0,jsx_runtime.jsx)undefined2542725501(0,jsx_runtime.jsx)undefined2661126687(0,jsx_runtime.jsxs)undefined2668926768jsx_runtime.Fragmentundefined2693927015(0,jsx_runtime.jsxs)undefined2701727094(link_default())undefined2765827732(0,jsx_runtime.jsx)undefined2844328517(0,jsx_runtime.jsx)undefined2932229398(0,jsx_runtime.jsxs)undefined2986329937(0,jsx_runtime.jsx)undefined3078030856(0,jsx_runtime.jsxs)undefined3085830935(link_default())undefined3149031564(0,jsx_runtime.jsx)undefined3227332347(0,jsx_runtime.jsx)undefined3310033176(0,jsx_runtime.jsxs)undefined3363133705(0,jsx_runtime.jsx)undefined3454834624(0,jsx_runtime.jsxs)undefined3462634703(link_default())undefined3526335337(0,jsx_runtime.jsx)undefined3599936073(0,jsx_runtime.jsx)undefined3719837274(0,jsx_runtime.jsxs)undefined3727637353(link_default())undefined3786937943(0,jsx_runtime.jsx)undefined3855738631(0,jsx_runtime.jsx)undefined3947339549(0,jsx_runtime.jsxs)undefined3955139628(link_default())undefined4014740221(0,jsx_runtime.jsx)undefined4083540909(0,jsx_runtime.jsx)undefined4177441850(0,jsx_runtime.jsxs)undefined4185241929(link_default())undefined4244542521(0,jsx_runtime.jsxs)undefined4321743291(0,jsx_runtime.jsx)undefined4427144345(0,jsx_runtime.jsx)undefined4523645312(0,jsx_runtime.jsxs)undefined4531445391(link_default())undefined4590945983(0,jsx_runtime.jsx)undefined4659746671(0,jsx_runtime.jsx)undefined4750547581(0,jsx_runtime.jsxs)undefined4758347660(link_default())undefined4818048254(0,jsx_runtime.jsx)undefined4886848942(0,jsx_runtime.jsx)undefined4983449908(0,jsx_runtime.jsx)undefined5016650242(0,jsx_runtime.jsxs)undefined5066850750(0,auth/* signOut */.CI)undefined5118251256(0,jsx_runtime.jsx)undefined5185651930(0,jsx_runtime.jsx)undefined5303753113(0,jsx_runtime.jsxs)undefined5311553194jsx_runtime.Fragmentundefined5331753391(0,jsx_runtime.jsx)undefined5339353470(link_default())undefined5385453928(0,jsx_runtime.jsx)undefined5393054007(link_default())undefined5450654580(0,jsx_runtime.jsx)undefined5458254677LanguageSwitcherundefined5480454880(0,jsx_runtime.jsxs)undefined5507755151(0,jsx_runtime.jsx)undefined5515355248LanguageSwitcherundefined5531055384(0,jsx_runtime.jsx)undefined5568255756(0,jsx_runtime.jsx)undefined5620256276(0,jsx_runtime.jsx)undefined5658656660(0,jsx_runtime.jsx)undefined5722857304(0,jsx_runtime.jsxs)undefined5751857594(0,jsx_runtime.jsxs)undefined5759657675jsx_runtime.Fragmentundefined5778257858(0,jsx_runtime.jsxs)undefined5786057937(link_default())undefined5827658350(0,jsx_runtime.jsx)undefined5880658880(0,jsx_runtime.jsx)undefined5947759553(0,jsx_runtime.jsxs)undefined5955559632(link_default())undefined5997960053(0,jsx_runtime.jsx)undefined6050960583(0,jsx_runtime.jsx)undefined6131461390(0,jsx_runtime.jsxs)undefined6139261471jsx_runtime.Fragmentundefined6157861654(0,jsx_runtime.jsxs)undefined6165661733(link_default())undefined6208662160(0,jsx_runtime.jsx)undefined6261662690(0,jsx_runtime.jsx)undefined6325663332(0,jsx_runtime.jsxs)undefined6333463411(link_default())undefined6376263836(0,jsx_runtime.jsx)undefined6429264366(0,jsx_runtime.jsx)undefined6519765273(0,jsx_runtime.jsxs)undefined6527565354jsx_runtime.Fragmentundefined6546165537(0,jsx_runtime.jsxs)undefined6553965616(link_default())undefined6595966033(0,jsx_runtime.jsx)undefined6653766611(0,jsx_runtime.jsx)undefined6725367327(0,jsx_runtime.jsx)undefined6776667842(0,jsx_runtime.jsxs)undefined6784467923jsx_runtime.Fragmentundefined6804668122(0,jsx_runtime.jsxs)undefined6812468201(link_default())undefined6859468668(0,jsx_runtime.jsx)undefined6917269246(0,jsx_runtime.jsx)undefined6988469960(0,jsx_runtime.jsxs)undefined6996270039(link_default())undefined7043070504(0,jsx_runtime.jsx)undefined7100871082(0,jsx_runtime.jsx)undefined7195272028(0,jsx_runtime.jsxs)undefined7203072109jsx_runtime.Fragmentundefined7223272308(0,jsx_runtime.jsxs)undefined7231072387(link_default())undefined7278872862(0,jsx_runtime.jsx)undefined7341673490(0,jsx_runtime.jsx)undefined7415174227(0,jsx_runtime.jsxs)undefined7459674670(0,jsx_runtime.jsx)undefined7530875384(0,jsx_runtime.jsxs)undefined7538675463(link_default())undefined7585075924(0,jsx_runtime.jsx)undefined7642876502(0,jsx_runtime.jsx)undefined7735277428(0,jsx_runtime.jsxs)undefined7743077507(link_default())undefined7786077934(0,jsx_runtime.jsx)undefined7839078464(0,jsx_runtime.jsx)undefined7916979245(0,jsx_runtime.jsxs)undefined7924779324(link_default())undefined7967579749(0,jsx_runtime.jsx)undefined8021080284(0,jsx_runtime.jsx)undefined8093381009(0,jsx_runtime.jsxs)undefined8101181088(link_default())undefined8142781503(0,jsx_runtime.jsxs)undefined8202282096(0,jsx_runtime.jsx)undefined8295683030(0,jsx_runtime.jsx)undefined8368183757(0,jsx_runtime.jsxs)undefined8375983836(link_default())undefined8418584259(0,jsx_runtime.jsx)undefined8472084794(0,jsx_runtime.jsx)undefined8541285488(0,jsx_runtime.jsxs)undefined8567785759(0,auth/* signOut */.CI)undefined8619386267(0,jsx_runtime.jsx)undefined8671486788(0,jsx_runtime.jsx)undefined8746187537(0,jsx_runtime.jsxs)undefined8753987618jsx_runtime.Fragmentundefined8772587799(0,jsx_runtime.jsx)undefined8780187878(link_default())undefined8827688350(0,jsx_runtime.jsx)undefined8835288429(link_default())undefined8900389077(0,jsx_runtime.jsx)undefined8920589281(0,jsx_runtime.jsxs)undefined8949289566(0,jsx_runtime.jsx)undefined8975789833(0,jsx_runtime.jsxs)undefined8998790061(0,jsx_runtime.jsx)undefined9030690380(0,jsx_runtime.jsx)undefined9066890744(0,jsx_runtime.jsxs)undefined9092290996(0,jsx_runtime.jsx)undefined9137791451(0,jsx_runtime.jsx)undefined9145391530(link_default())undefinedöÿÿ`‹jsx_runtime›jsx_runtime_namespaceObject“jsx_runtime_defaultŒapp_dir_link”link_namespaceObjectŒlink_defaultŠnavigation„authŽcontext_localeŠformatNameaöÿÿ•react_namespaceObjectreact_default“þÿÿðùÿÿ LanguageSwitcher_namespaceObjectƒapiƒesm0øÿÿ¬÷ÿÿöÿÿ–Header_namespaceObject¨÷ÿÿ\ÿÿÿYÿÿÿZÿÿÿ Ыwebpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€`«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSourceV(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([[177],{ /***/ 300: «webpack/lib/util/registerExternalSerializerœwebpack-sources/CachedSource Š«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSource_/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; «webpack/lib/util/registerExternalSerializerœwebpack-sources/CachedSource K,«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-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__(4568); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1592); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7541); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7620); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(2982); «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 ROLE_COOKIE = 'canhelp_preview_role'; const ORIG_PLAN_KEY = 'canhelp_admin_orig_plan'; function getPreviewRole() { if (typeof document === 'undefined') return null; const m = document.cookie.match(/(?:^|;\s*)canhelp_preview_role=([^;]+)/); var _m_; return (_m_ = m === null || m === void 0 ? void 0 : m[1]) !== null && _m_ !== void 0 ? _m_ : null; } const TIER_COLORS = { free: 'bg-slate-100 text-slate-600', pro: 'bg-blue-100 text-blue-700', ultimate: 'bg-amber-100 text-amber-700' }; export function AdminRolePreview() { var _session_user, _session_user1; const { data: session } = useSession(); const router = useRouter(); const isAdmin = (session === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.role) === 'admin'; const userId = session === null || session === void 0 ? void 0 : (_session_user1 = session.user) === null || _session_user1 === void 0 ? void 0 : _session_user1.id; const [preview, setPreview] = useState(null); const [plans, setPlans] = useState([]); const [activePlanId, setActivePlanId] = useState(null); const [loading, setLoading] = useState(false); const [expanded, setExpanded] = useState(false); const origPlanRef = useRef(null); useEffect(()=>{ setPreview(getPreviewRole()); if ("object" !== 'undefined') { origPlanRef.current = localStorage.getItem(ORIG_PLAN_KEY); } }, []); useEffect(()=>{ if (!isAdmin) return; getPlans().then(setPlans).catch(()=>{}); }, [ isAdmin ]); useEffect(()=>{ var _session_user; var _session_user_planId; // Sync active plan from session const currentPlanId = (_session_user_planId = session === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.planId) !== null && _session_user_planId !== void 0 ? _session_user_planId : null; setActivePlanId(currentPlanId); }, [ session ]); if (!isAdmin) return null; const toggleRole = (role)=>{ if (preview === role) { document.cookie = "".concat(ROLE_COOKIE, "=; path=/; max-age=0"); setPreview(null); window.dispatchEvent(new CustomEvent('canhelp:preview-role', { detail: { role: null } })); } else { document.cookie = "".concat(ROLE_COOKIE, "=").concat(role, "; path=/; max-age=86400"); setPreview(role); window.dispatchEvent(new CustomEvent('canhelp:preview-role', { detail: { role } })); } router.refresh(); }; 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 (e) {} setLoading(false); }; const restorePlan = async ()=>{ const orig = origPlanRef.current; localStorage.removeItem(ORIG_PLAN_KEY); origPlanRef.current = null; await setPlan(orig !== null && orig !== void 0 ? orig : null); }; const visiblePlans = preview ? plans.filter((p)=>p.role === preview) : 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__*/ _jsxs("div", { className: "flex flex-col gap-1 px-2 pb-2 border-t border-slate-100 pt-2", children: [ /*#__PURE__*/ _jsx("div", { className: "text-slate-400 px-1 mb-0.5", children: "Role" }), /*#__PURE__*/ _jsx("button", { onClick: ()=>toggleRole('customer'), className: "px-3 py-1.5 rounded-xl transition text-left ".concat(preview === 'customer' ? 'bg-blue-600 text-white' : 'text-slate-600 hover:bg-slate-100'), children: "Customer" }), /*#__PURE__*/ _jsx("button", { onClick: ()=>toggleRole('specialist'), className: "px-3 py-1.5 rounded-xl transition text-left ".concat(preview === 'specialist' ? 'bg-orange-500 text-white' : 'text-slate-600 hover:bg-slate-100'), children: "Specialist" }), preview && /*#__PURE__*/ _jsx("button", { onClick: ()=>{ document.cookie = "".concat(ROLE_COOKIE, "=; path=/; max-age=0"); setPreview(null); router.refresh(); }, className: "px-3 py-1 rounded-xl text-slate-400 hover:text-red-500 hover:bg-red-50 transition text-left", children: "✕ Reset role" }), 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)=>{ var _TIER_COLORS_plan_tier; return /*#__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 ".concat(activePlanId === plan.id ? 'bg-indigo-600 text-white' : 'text-slate-600 hover:bg-slate-100', " ").concat(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 ".concat(activePlanId === plan.id ? 'bg-white/20 text-white' : (_TIER_COLORS_plan_tier = TIER_COLORS[plan.tier]) !== null && _TIER_COLORS_plan_tier !== void 0 ? _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_›ÄÆñó&(]gmÑÚòúˆ¯¶éð"PWy~‹“ÍäJ_R€‡ÎÖâ ð ÌÐÉÍÞá`c:>âå”—üÿwzŒ’šíðBHFjmknÌ!Ï!e#h#€€€€€€¿(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)„trueþ¼(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__.Fragmentþýþþþþ€†buffer†source„size„maps„hashî+/* 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__(4568); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1592); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7541); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7620); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(2982); /* __next_internal_client_entry_do_not_use__ AdminRolePreview auto */ const ROLE_COOKIE = 'canhelp_preview_role'; const ORIG_PLAN_KEY = 'canhelp_admin_orig_plan'; function getPreviewRole() { if (typeof document === 'undefined') return null; const m = document.cookie.match(/(?:^|;\s*)canhelp_preview_role=([^;]+)/); var _m_; return (_m_ = m === null || m === void 0 ? void 0 : m[1]) !== null && _m_ !== void 0 ? _m_ : null; } const TIER_COLORS = { free: 'bg-slate-100 text-slate-600', pro: 'bg-blue-100 text-blue-700', ultimate: 'bg-amber-100 text-amber-700' }; function AdminRolePreview() { var _session_user, _session_user1; 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 === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.role) === 'admin'; const userId = session === null || session === void 0 ? void 0 : (_session_user1 = session.user) === null || _session_user1 === void 0 ? void 0 : _session_user1.id; const [preview, setPreview] = (0,react__WEBPACK_IMPORTED_MODULE_3__.useState)(null); 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); (0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)(()=>{ setPreview(getPreviewRole()); if (true) { origPlanRef.current = localStorage.getItem(ORIG_PLAN_KEY); } }, []); (0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)(()=>{ if (!isAdmin) return; (0,_lib_api__WEBPACK_IMPORTED_MODULE_4__/* .getPlans */ .T9)().then(setPlans).catch(()=>{}); }, [ isAdmin ]); (0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)(()=>{ var _session_user; var _session_user_planId; // Sync active plan from session const currentPlanId = (_session_user_planId = session === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.planId) !== null && _session_user_planId !== void 0 ? _session_user_planId : null; setActivePlanId(currentPlanId); }, [ session ]); if (!isAdmin) return null; const toggleRole = (role)=>{ if (preview === role) { document.cookie = "".concat(ROLE_COOKIE, "=; path=/; max-age=0"); setPreview(null); window.dispatchEvent(new CustomEvent('canhelp:preview-role', { detail: { role: null } })); } else { document.cookie = "".concat(ROLE_COOKIE, "=").concat(role, "; path=/; max-age=86400"); setPreview(role); window.dispatchEvent(new CustomEvent('canhelp:preview-role', { detail: { role } })); } router.refresh(); }; 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 (e) {} setLoading(false); }; const restorePlan = async ()=>{ const orig = origPlanRef.current; localStorage.removeItem(ORIG_PLAN_KEY); origPlanRef.current = null; await setPlan(orig !== null && orig !== void 0 ? orig : null); }; const visiblePlans = preview ? plans.filter((p)=>p.role === preview) : 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__.jsxs)("div", { className: "flex flex-col gap-1 px-2 pb-2 border-t border-slate-100 pt-2", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "text-slate-400 px-1 mb-0.5", children: "Role" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { onClick: ()=>toggleRole('customer'), className: "px-3 py-1.5 rounded-xl transition text-left ".concat(preview === 'customer' ? 'bg-blue-600 text-white' : 'text-slate-600 hover:bg-slate-100'), children: "Customer" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { onClick: ()=>toggleRole('specialist'), className: "px-3 py-1.5 rounded-xl transition text-left ".concat(preview === 'specialist' ? 'bg-orange-500 text-white' : 'text-slate-600 hover:bg-slate-100'), children: "Specialist" }), preview && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { onClick: ()=>{ document.cookie = "".concat(ROLE_COOKIE, "=; path=/; max-age=0"); setPreview(null); router.refresh(); }, className: "px-3 py-1 rounded-xl text-slate-400 hover:text-red-500 hover:bg-red-50 transition text-left", children: "✕ Reset role" }), 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)=>{ var _TIER_COLORS_plan_tier; return /*#__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 ".concat(activePlanId === plan.id ? 'bg-indigo-600 text-white' : 'text-slate-600 hover:bg-slate-100', " ").concat(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 ".concat(activePlanId === plan.id ? 'bg-white/20 text-white' : (_TIER_COLORS_plan_tier = TIER_COLORS[plan.tier]) !== null && _TIER_COLORS_plan_tier !== void 0 ? _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}ƒmap‹bufferedMap 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__(4568); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1592); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7541); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7620); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(2982); 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 ROLE_COOKIE = 'canhelp_preview_role'; const ORIG_PLAN_KEY = 'canhelp_admin_orig_plan'; function getPreviewRole() { if (typeof document === 'undefined') return null; const m = document.cookie.match(/(?:^|;\s*)canhelp_preview_role=([^;]+)/); var _m_; return (_m_ = m === null || m === void 0 ? void 0 : m[1]) !== null && _m_ !== void 0 ? _m_ : null; } const TIER_COLORS = { free: 'bg-slate-100 text-slate-600', pro: 'bg-blue-100 text-blue-700', ultimate: 'bg-amber-100 text-amber-700' }; export function AdminRolePreview() { var _session_user, _session_user1; const { data: session } = useSession(); const router = useRouter(); const isAdmin = (session === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.role) === 'admin'; const userId = session === null || session === void 0 ? void 0 : (_session_user1 = session.user) === null || _session_user1 === void 0 ? void 0 : _session_user1.id; const [preview, setPreview] = useState(null); const [plans, setPlans] = useState([]); const [activePlanId, setActivePlanId] = useState(null); const [loading, setLoading] = useState(false); const [expanded, setExpanded] = useState(false); const origPlanRef = useRef(null); useEffect(()=>{ setPreview(getPreviewRole()); if ("object" !== 'undefined') { origPlanRef.current = localStorage.getItem(ORIG_PLAN_KEY); } }, []); useEffect(()=>{ if (!isAdmin) return; getPlans().then(setPlans).catch(()=>{}); }, [ isAdmin ]); useEffect(()=>{ var _session_user; var _session_user_planId; // Sync active plan from session const currentPlanId = (_session_user_planId = session === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.planId) !== null && _session_user_planId !== void 0 ? _session_user_planId : null; setActivePlanId(currentPlanId); }, [ session ]); if (!isAdmin) return null; const toggleRole = (role)=>{ if (preview === role) { document.cookie = "".concat(ROLE_COOKIE, "=; path=/; max-age=0"); setPreview(null); window.dispatchEvent(new CustomEvent('canhelp:preview-role', { detail: { role: null } })); } else { document.cookie = "".concat(ROLE_COOKIE, "=").concat(role, "; path=/; max-age=86400"); setPreview(role); window.dispatchEvent(new CustomEvent('canhelp:preview-role', { detail: { role } })); } router.refresh(); }; 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 (e) {} setLoading(false); }; const restorePlan = async ()=>{ const orig = origPlanRef.current; localStorage.removeItem(ORIG_PLAN_KEY); origPlanRef.current = null; await setPlan(orig !== null && orig !== void 0 ? orig : null); }; const visiblePlans = preview ? plans.filter((p)=>p.role === preview) : 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__*/ _jsxs("div", { className: "flex flex-col gap-1 px-2 pb-2 border-t border-slate-100 pt-2", children: [ /*#__PURE__*/ _jsx("div", { className: "text-slate-400 px-1 mb-0.5", children: "Role" }), /*#__PURE__*/ _jsx("button", { onClick: ()=>toggleRole('customer'), className: "px-3 py-1.5 rounded-xl transition text-left ".concat(preview === 'customer' ? 'bg-blue-600 text-white' : 'text-slate-600 hover:bg-slate-100'), children: "Customer" }), /*#__PURE__*/ _jsx("button", { onClick: ()=>toggleRole('specialist'), className: "px-3 py-1.5 rounded-xl transition text-left ".concat(preview === 'specialist' ? 'bg-orange-500 text-white' : 'text-slate-600 hover:bg-slate-100'), children: "Specialist" }), preview && /*#__PURE__*/ _jsx("button", { onClick: ()=>{ document.cookie = "".concat(ROLE_COOKIE, "=; path=/; max-age=0"); setPreview(null); router.refresh(); }, className: "px-3 py-1 rounded-xl text-slate-400 hover:text-red-500 hover:bg-red-50 transition text-left", children: "✕ Reset role" }), 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)=>{ var _TIER_COLORS_plan_tier; return /*#__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 ".concat(activePlanId === plan.id ? 'bg-indigo-600 text-white' : 'text-slate-600 hover:bg-slate-100', " ").concat(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 ".concat(activePlanId === plan.id ? 'bg-white/20 text-white' : (_TIER_COLORS_plan_tier = TIER_COLORS[plan.tier]) !== null && _TIER_COLORS_plan_tier !== void 0 ? _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" }) ] }) ] }) ] }); } ¦70155undefined157196undefined198241undefined243294undefined296349undefined871877undefined977986(0,_lib_auth__WEBPACK_IMPORTED_MODULE_1__/* .useSession */ .wV)undefined10101018(0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)undefined14091416(0,react__WEBPACK_IMPORTED_MODULE_3__.useState)undefined14551462(0,react__WEBPACK_IMPORTED_MODULE_3__.useState)undefined15131520(0,react__WEBPACK_IMPORTED_MODULE_3__.useState)undefined15631570(0,react__WEBPACK_IMPORTED_MODULE_3__.useState)undefined16161623(0,react__WEBPACK_IMPORTED_MODULE_3__.useState)undefined16571662(0,react__WEBPACK_IMPORTED_MODULE_3__.useRef)undefined16751683(0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)undefined17411764trueundefined18661874(0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)undefined19201927(0,_lib_api__WEBPACK_IMPORTED_MODULE_4__/* .getPlans */ .T9)undefined19982006(0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)undefined35543568(0,_lib_api__WEBPACK_IMPORTED_MODULE_4__/* .updateAdminUser */ .wl)undefined43004304(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined45534557(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined48304833(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined49604963(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined51785182(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined53465349(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined55245527(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined58845887(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined62636266(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined67966800(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined68026810react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragmentundefined68936896(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined72347238(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined77867789(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined80438046(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined86528655(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined90619064(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined /***/ }) €†buffer†source„size„maps„hashW,/***/ ((__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__(4568); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1592); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7541); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7620); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(2982); /* __next_internal_client_entry_do_not_use__ AdminRolePreview auto */ const ROLE_COOKIE = 'canhelp_preview_role'; const ORIG_PLAN_KEY = 'canhelp_admin_orig_plan'; function getPreviewRole() { if (typeof document === 'undefined') return null; const m = document.cookie.match(/(?:^|;\s*)canhelp_preview_role=([^;]+)/); var _m_; return (_m_ = m === null || m === void 0 ? void 0 : m[1]) !== null && _m_ !== void 0 ? _m_ : null; } const TIER_COLORS = { free: 'bg-slate-100 text-slate-600', pro: 'bg-blue-100 text-blue-700', ultimate: 'bg-amber-100 text-amber-700' }; function AdminRolePreview() { var _session_user, _session_user1; 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 === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.role) === 'admin'; const userId = session === null || session === void 0 ? void 0 : (_session_user1 = session.user) === null || _session_user1 === void 0 ? void 0 : _session_user1.id; const [preview, setPreview] = (0,react__WEBPACK_IMPORTED_MODULE_3__.useState)(null); 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); (0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)(()=>{ setPreview(getPreviewRole()); if (true) { origPlanRef.current = localStorage.getItem(ORIG_PLAN_KEY); } }, []); (0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)(()=>{ if (!isAdmin) return; (0,_lib_api__WEBPACK_IMPORTED_MODULE_4__/* .getPlans */ .T9)().then(setPlans).catch(()=>{}); }, [ isAdmin ]); (0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)(()=>{ var _session_user; var _session_user_planId; // Sync active plan from session const currentPlanId = (_session_user_planId = session === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.planId) !== null && _session_user_planId !== void 0 ? _session_user_planId : null; setActivePlanId(currentPlanId); }, [ session ]); if (!isAdmin) return null; const toggleRole = (role)=>{ if (preview === role) { document.cookie = "".concat(ROLE_COOKIE, "=; path=/; max-age=0"); setPreview(null); window.dispatchEvent(new CustomEvent('canhelp:preview-role', { detail: { role: null } })); } else { document.cookie = "".concat(ROLE_COOKIE, "=").concat(role, "; path=/; max-age=86400"); setPreview(role); window.dispatchEvent(new CustomEvent('canhelp:preview-role', { detail: { role } })); } router.refresh(); }; 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 (e) {} setLoading(false); }; const restorePlan = async ()=>{ const orig = origPlanRef.current; localStorage.removeItem(ORIG_PLAN_KEY); origPlanRef.current = null; await setPlan(orig !== null && orig !== void 0 ? orig : null); }; const visiblePlans = preview ? plans.filter((p)=>p.role === preview) : 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__.jsxs)("div", { className: "flex flex-col gap-1 px-2 pb-2 border-t border-slate-100 pt-2", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "text-slate-400 px-1 mb-0.5", children: "Role" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { onClick: ()=>toggleRole('customer'), className: "px-3 py-1.5 rounded-xl transition text-left ".concat(preview === 'customer' ? 'bg-blue-600 text-white' : 'text-slate-600 hover:bg-slate-100'), children: "Customer" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { onClick: ()=>toggleRole('specialist'), className: "px-3 py-1.5 rounded-xl transition text-left ".concat(preview === 'specialist' ? 'bg-orange-500 text-white' : 'text-slate-600 hover:bg-slate-100'), children: "Specialist" }), preview && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { onClick: ()=>{ document.cookie = "".concat(ROLE_COOKIE, "=; path=/; max-age=0"); setPreview(null); router.refresh(); }, className: "px-3 py-1 rounded-xl text-slate-400 hover:text-red-500 hover:bg-red-50 transition text-left", children: "✕ Reset role" }), 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)=>{ var _TIER_COLORS_plan_tier; return /*#__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 ".concat(activePlanId === plan.id ? 'bg-indigo-600 text-white' : 'text-slate-600 hover:bg-slate-100', " ").concat(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 ".concat(activePlanId === plan.id ? 'bg-white/20 text-white' : (_TIER_COLORS_plan_tier = TIER_COLORS[plan.tier]) !== null && _TIER_COLORS_plan_tier !== void 0 ? _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}ƒmap‹bufferedMap  ConcatSourceRawSource_/***/ ((__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__(4568); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1592); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7541); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7620); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(2982); 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 ROLE_COOKIE = 'canhelp_preview_role'; const ORIG_PLAN_KEY = 'canhelp_admin_orig_plan'; function getPreviewRole() { if (typeof document === 'undefined') return null; const m = document.cookie.match(/(?:^|;\s*)canhelp_preview_role=([^;]+)/); var _m_; return (_m_ = m === null || m === void 0 ? void 0 : m[1]) !== null && _m_ !== void 0 ? _m_ : null; } const TIER_COLORS = { free: 'bg-slate-100 text-slate-600', pro: 'bg-blue-100 text-blue-700', ultimate: 'bg-amber-100 text-amber-700' }; export function AdminRolePreview() { var _session_user, _session_user1; const { data: session } = useSession(); const router = useRouter(); const isAdmin = (session === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.role) === 'admin'; const userId = session === null || session === void 0 ? void 0 : (_session_user1 = session.user) === null || _session_user1 === void 0 ? void 0 : _session_user1.id; const [preview, setPreview] = useState(null); const [plans, setPlans] = useState([]); const [activePlanId, setActivePlanId] = useState(null); const [loading, setLoading] = useState(false); const [expanded, setExpanded] = useState(false); const origPlanRef = useRef(null); useEffect(()=>{ setPreview(getPreviewRole()); if ("object" !== 'undefined') { origPlanRef.current = localStorage.getItem(ORIG_PLAN_KEY); } }, []); useEffect(()=>{ if (!isAdmin) return; getPlans().then(setPlans).catch(()=>{}); }, [ isAdmin ]); useEffect(()=>{ var _session_user; var _session_user_planId; // Sync active plan from session const currentPlanId = (_session_user_planId = session === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.planId) !== null && _session_user_planId !== void 0 ? _session_user_planId : null; setActivePlanId(currentPlanId); }, [ session ]); if (!isAdmin) return null; const toggleRole = (role)=>{ if (preview === role) { document.cookie = "".concat(ROLE_COOKIE, "=; path=/; max-age=0"); setPreview(null); window.dispatchEvent(new CustomEvent('canhelp:preview-role', { detail: { role: null } })); } else { document.cookie = "".concat(ROLE_COOKIE, "=").concat(role, "; path=/; max-age=86400"); setPreview(role); window.dispatchEvent(new CustomEvent('canhelp:preview-role', { detail: { role } })); } router.refresh(); }; 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 (e) {} setLoading(false); }; const restorePlan = async ()=>{ const orig = origPlanRef.current; localStorage.removeItem(ORIG_PLAN_KEY); origPlanRef.current = null; await setPlan(orig !== null && orig !== void 0 ? orig : null); }; const visiblePlans = preview ? plans.filter((p)=>p.role === preview) : 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__*/ _jsxs("div", { className: "flex flex-col gap-1 px-2 pb-2 border-t border-slate-100 pt-2", children: [ /*#__PURE__*/ _jsx("div", { className: "text-slate-400 px-1 mb-0.5", children: "Role" }), /*#__PURE__*/ _jsx("button", { onClick: ()=>toggleRole('customer'), className: "px-3 py-1.5 rounded-xl transition text-left ".concat(preview === 'customer' ? 'bg-blue-600 text-white' : 'text-slate-600 hover:bg-slate-100'), children: "Customer" }), /*#__PURE__*/ _jsx("button", { onClick: ()=>toggleRole('specialist'), className: "px-3 py-1.5 rounded-xl transition text-left ".concat(preview === 'specialist' ? 'bg-orange-500 text-white' : 'text-slate-600 hover:bg-slate-100'), children: "Specialist" }), preview && /*#__PURE__*/ _jsx("button", { onClick: ()=>{ document.cookie = "".concat(ROLE_COOKIE, "=; path=/; max-age=0"); setPreview(null); router.refresh(); }, className: "px-3 py-1 rounded-xl text-slate-400 hover:text-red-500 hover:bg-red-50 transition text-left", children: "✕ Reset role" }), 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)=>{ var _TIER_COLORS_plan_tier; return /*#__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 ".concat(activePlanId === plan.id ? 'bg-indigo-600 text-white' : 'text-slate-600 hover:bg-slate-100', " ").concat(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 ".concat(activePlanId === plan.id ? 'bg-white/20 text-white' : (_TIER_COLORS_plan_tier = TIER_COLORS[plan.tier]) !== null && _TIER_COLORS_plan_tier !== void 0 ? _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" }) ] }) ] }) ] }); } ¦70155undefined157196undefined198241undefined243294undefined296349undefined871877undefined977986(0,_lib_auth__WEBPACK_IMPORTED_MODULE_1__/* .useSession */ .wV)undefined10101018(0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)undefined14091416(0,react__WEBPACK_IMPORTED_MODULE_3__.useState)undefined14551462(0,react__WEBPACK_IMPORTED_MODULE_3__.useState)undefined15131520(0,react__WEBPACK_IMPORTED_MODULE_3__.useState)undefined15631570(0,react__WEBPACK_IMPORTED_MODULE_3__.useState)undefined16161623(0,react__WEBPACK_IMPORTED_MODULE_3__.useState)undefined16571662(0,react__WEBPACK_IMPORTED_MODULE_3__.useRef)undefined16751683(0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)undefined17411764trueundefined18661874(0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)undefined19201927(0,_lib_api__WEBPACK_IMPORTED_MODULE_4__/* .getPlans */ .T9)undefined19982006(0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)undefined35543568(0,_lib_api__WEBPACK_IMPORTED_MODULE_4__/* .updateAdminUser */ .wl)undefined43004304(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined45534557(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined48304833(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined49604963(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined51785182(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined53465349(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined55245527(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined58845887(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined62636266(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined67966800(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined68026810react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragmentundefined68936896(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined72347238(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined77867789(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined80438046(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined86528655(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined90619064(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined RawSource /***/ }), /***/ 1258:  d«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSource_/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; «webpack/lib/util/registerExternalSerializerœwebpack-sources/CachedSource Ê«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-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 === null || fullName === void 0 ? void 0 : fullName.trim())) return '—'; const parts = fullName.trim().split(/\s+/); if (parts.length < 2 || !parts[1]) return parts[0]; return "".concat(parts[0], " ").concat(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 === null || firstName === void 0 ? void 0 : firstName.trim()) { const l = lastName === null || lastName === void 0 ? void 0 : lastName.trim(); return l ? "".concat(firstName.trim(), " ").concat(l[0].toUpperCase(), ".") : firstName.trim(); } return shortName(fallbackName); } CˆŽTZ€€€†buffer†source„size„maps„hash±/* 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 === null || fullName === void 0 ? void 0 : fullName.trim())) return '—'; const parts = fullName.trim().split(/\s+/); if (parts.length < 2 || !parts[1]) return parts[0]; return "".concat(parts[0], " ").concat(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 === null || firstName === void 0 ? void 0 : firstName.trim()) { const l = lastName === null || lastName === void 0 ? void 0 : lastName.trim(); return l ? "".concat(firstName.trim(), " ").concat(l[0].toUpperCase(), ".") : firstName.trim(); } return shortName(fallbackName); } €”{"finalSource":true}ƒmap‹bufferedMap 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 === null || fullName === void 0 ? void 0 : fullName.trim())) return '—'; const parts = fullName.trim().split(/\s+/); if (parts.length < 2 || !parts[1]) return parts[0]; return "".concat(parts[0], " ").concat(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 === null || firstName === void 0 ? void 0 : firstName.trim()) { const l = lastName === null || lastName === void 0 ? void 0 : lastName.trim(); return l ? "".concat(firstName.trim(), " ").concat(l[0].toUpperCase(), ".") : firstName.trim(); } return shortName(fallbackName); } 136142undefined596602undefined /***/ }) ë/***/ ((__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 === null || fullName === void 0 ? void 0 : fullName.trim())) return '—'; const parts = fullName.trim().split(/\s+/); if (parts.length < 2 || !parts[1]) return parts[0]; return "".concat(parts[0], " ").concat(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 === null || firstName === void 0 ? void 0 : firstName.trim()) { const l = lastName === null || lastName === void 0 ? void 0 : lastName.trim(); return l ? "".concat(firstName.trim(), " ").concat(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 === null || fullName === void 0 ? void 0 : fullName.trim())) return '—'; const parts = fullName.trim().split(/\s+/); if (parts.length < 2 || !parts[1]) return parts[0]; return "".concat(parts[0], " ").concat(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 === null || firstName === void 0 ? void 0 : firstName.trim()) { const l = lastName === null || lastName === void 0 ? void 0 : lastName.trim(); return l ? "".concat(firstName.trim(), " ").concat(l[0].toUpperCase(), ".") : firstName.trim(); } return shortName(fallbackName); } 136142undefined596602undefinedóô, /***/ 1592:  ú «webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSource_/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; «webpack/lib/util/registerExternalSerializerœwebpack-sources/CachedSource w«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-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__(6504); «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)€€†buffer†source„size„maps„hashÌ/* 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__(6504); 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}ƒmap‹bufferedMap 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__(6504); 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 /***/ }) à5/***/ ((__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__(6504); 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__(6504); ç 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èé, /***/ 2568:  ™«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSourceV/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { «webpack/lib/util/registerExternalSerializerœwebpack-sources/CachedSource º«webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSource«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSource@import(/* webpackMode: "eager" */ "/opt/canhelp/apps/web/src/app/globals.css"); ; 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"); aMRJÕÚIN½ÂGLÀÅ=åPromise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 8761, 23))ÞPromise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 300))ßPromise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 9808))ßPromise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 7443))ßPromise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 7380))ßPromise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 9906))ßPromise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 4029))€†buffer†source„size„maps„hash¸Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 8761, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 300)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 9808)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 7443)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 7380)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 9906)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 4029)); €”{"finalSource":true}ƒmap‹bufferedMap ReplaceSourceRawSource@import(/* webpackMode: "eager" */ "/opt/canhelp/apps/web/src/app/globals.css"); ; 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"); 077Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 8761, 23))undefined82213Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 300))undefined218329Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 9808))undefined334445Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 7443))undefined450583Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 7380))undefined588704Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 9906))undefined709829Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 4029))undefined /***/ }) Õ/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 8761, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 300)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 9808)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 7443)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 7380)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 9906)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 4029)); /***/ }) ÖÙ ÚV/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { Ü@import(/* webpackMode: "eager" */ "/opt/canhelp/apps/web/src/app/globals.css"); ; 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"); 077Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 8761, 23))undefined82213Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 300))undefined218329Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 9808))undefined334445Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 7443))undefined450583Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 7380))undefined588704Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 9906))undefined709829Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 4029))undefinedÝÞ, /***/ 4029:  Æ.«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSource_/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; «webpack/lib/util/registerExternalSerializerœwebpack-sources/CachedSource …«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSource/* 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__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2982); «webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSource~ /* __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 === null || match === void 0 ? void 0 : match[1]) ? decodeURIComponent(match[1]) : ''; } export function LocationProvider(param) { let { children, initialSlug = '' } = param; const [locationSlug, setLocationSlug] = useState(initialSlug); const [locationTree, setLocationTree] = useState([]); const [locationLoading, setLocationLoading] = useState(true); // Sync from cookie on client mount useEffect(()=>{ const cookieSlug = readCookieLocation(); setLocationSlug(cookieSlug); }, []); // Load location tree once useEffect(()=>{ getLocations().then((tree)=>setLocationTree(tree)).catch(()=>{}).finally(()=>setLocationLoading(false)); }, []); const setLocation = useCallback((slug)=>{ setLocationSlug(slug); const encoded = encodeURIComponent(slug); document.cookie = "canhelp_location=".concat(encoded, "; path=/; max-age=31536000; SameSite=Lax"); }, []); const getLabel = useCallback((locale)=>{ if (!locationSlug) return ''; for (const city of locationTree){ var _city_names_locale; if (city.slug === locationSlug) return (_city_names_locale = city.names[locale]) !== null && _city_names_locale !== void 0 ? _city_names_locale : city.names.el; var _city_children; for (const d of (_city_children = city.children) !== null && _city_children !== void 0 ? _city_children : []){ var _d_names_locale; if (d.slug === locationSlug) return (_d_names_locale = d.names[locale]) !== null && _d_names_locale !== void 0 ? _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^ƒÖØ(4¿ÅELˆÈÏ ™¡±¼>H1;S V 4 : _ h €€€´(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)€†buffer†source„size„maps„hashŠ /* 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__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2982); /* __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 === null || match === void 0 ? void 0 : match[1]) ? decodeURIComponent(match[1]) : ''; } function LocationProvider(param) { let { children, initialSlug = '' } = param; 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 (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{ const cookieSlug = readCookieLocation(); setLocationSlug(cookieSlug); }, []); // Load location tree once (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=".concat(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){ var _city_names_locale; if (city.slug === locationSlug) return (_city_names_locale = city.names[locale]) !== null && _city_names_locale !== void 0 ? _city_names_locale : city.names.el; var _city_children; for (const d of (_city_children = city.children) !== null && _city_children !== void 0 ? _city_children : []){ var _d_names_locale; if (d.slug === locationSlug) return (_d_names_locale = d.names[locale]) !== null && _d_names_locale !== void 0 ? _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}ƒmap‹bufferedMap ConcatSourceRawSource/* 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__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2982); ReplaceSourceRawSource~ /* __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 === null || match === void 0 ? void 0 : match[1]) ? decodeURIComponent(match[1]) : ''; } export function LocationProvider(param) { let { children, initialSlug = '' } = param; const [locationSlug, setLocationSlug] = useState(initialSlug); const [locationTree, setLocationTree] = useState([]); const [locationLoading, setLocationLoading] = useState(true); // Sync from cookie on client mount useEffect(()=>{ const cookieSlug = readCookieLocation(); setLocationSlug(cookieSlug); }, []); // Load location tree once useEffect(()=>{ getLocations().then((tree)=>setLocationTree(tree)).catch(()=>{}).finally(()=>setLocationLoading(false)); }, []); const setLocation = useCallback((slug)=>{ setLocationSlug(slug); const encoded = encodeURIComponent(slug); document.cookie = "canhelp_location=".concat(encoded, "; path=/; max-age=31536000; SameSite=Lax"); }, []); const getLabel = useCallback((locale)=>{ if (!locationSlug) return ''; for (const city of locationTree){ var _city_names_locale; if (city.slug === locationSlug) return (_city_names_locale = city.names[locale]) !== null && _city_names_locale !== void 0 ? _city_names_locale : city.names.el; var _city_children; for (const d of (_city_children = city.children) !== null && _city_children !== void 0 ? _city_children : []){ var _d_names_locale; if (d.slug === locationSlug) return (_d_names_locale = d.names[locale]) !== null && _d_names_locale !== void 0 ? _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)undefined703709undefined837844(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined904911(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined968975(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined10281036(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined11771185(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined12011212(0,_lib_api__WEBPACK_IMPORTED_MODULE_2__/* .getLocations */ .Vs)undefined13421352(0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)undefined15851595(0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)undefined23872390(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined26122618undefined26552664(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__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2982); /* __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 === null || match === void 0 ? void 0 : match[1]) ? decodeURIComponent(match[1]) : ''; } function LocationProvider(param) { let { children, initialSlug = '' } = param; 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 (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{ const cookieSlug = readCookieLocation(); setLocationSlug(cookieSlug); }, []); // Load location tree once (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=".concat(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){ var _city_names_locale; if (city.slug === locationSlug) return (_city_names_locale = city.names[locale]) !== null && _city_names_locale !== void 0 ? _city_names_locale : city.names.el; var _city_children; for (const d of (_city_children = city.children) !== null && _city_children !== void 0 ? _city_children : []){ var _d_names_locale; if (d.slug === locationSlug) return (_d_names_locale = d.names[locale]) !== null && _d_names_locale !== void 0 ? _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); } /***/ }) ËÎ  ÏÐÏ/* 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__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2982); Ñ~ /* __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 === null || match === void 0 ? void 0 : match[1]) ? decodeURIComponent(match[1]) : ''; } export function LocationProvider(param) { let { children, initialSlug = '' } = param; const [locationSlug, setLocationSlug] = useState(initialSlug); const [locationTree, setLocationTree] = useState([]); const [locationLoading, setLocationLoading] = useState(true); // Sync from cookie on client mount useEffect(()=>{ const cookieSlug = readCookieLocation(); setLocationSlug(cookieSlug); }, []); // Load location tree once useEffect(()=>{ getLocations().then((tree)=>setLocationTree(tree)).catch(()=>{}).finally(()=>setLocationLoading(false)); }, []); const setLocation = useCallback((slug)=>{ setLocationSlug(slug); const encoded = encodeURIComponent(slug); document.cookie = "canhelp_location=".concat(encoded, "; path=/; max-age=31536000; SameSite=Lax"); }, []); const getLabel = useCallback((locale)=>{ if (!locationSlug) return ''; for (const city of locationTree){ var _city_names_locale; if (city.slug === locationSlug) return (_city_names_locale = city.names[locale]) !== null && _city_names_locale !== void 0 ? _city_names_locale : city.names.el; var _city_children; for (const d of (_city_children = city.children) !== null && _city_children !== void 0 ? _city_children : []){ var _d_names_locale; if (d.slug === locationSlug) return (_d_names_locale = d.names[locale]) !== null && _d_names_locale !== void 0 ? _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)undefined703709undefined837844(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined904911(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined968975(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined10281036(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined11771185(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined12011212(0,_lib_api__WEBPACK_IMPORTED_MODULE_2__/* .getLocations */ .Vs)undefined13421352(0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)undefined15851595(0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)undefined23872390(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined26122618undefined26552664(0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)undefinedÒÓ, /***/ 7380:  Õ«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSource_/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; «webpack/lib/util/registerExternalSerializerœwebpack-sources/CachedSource )«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSourcek/* 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__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); «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); 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".concat(visible ? ' visible' : ''), "aria-label": "Ðаверх", 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" }) }) }); } bGvxL£¥«íô  æé€€€¯(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)°(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)¶(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)ÿÿ€†buffer†source„size„maps„hashÔ/* 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__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* __next_internal_client_entry_do_not_use__ ScrollToTopButton auto */ function ScrollToTopButton() { const [visible, setVisible] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(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".concat(visible ? ' visible' : ''), "aria-label": "Ðаверх", 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}ƒmap‹bufferedMap ConcatSourceRawSourcek/* 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__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); 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); 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".concat(visible ? ' visible' : ''), "aria-label": "Ðаверх", 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" }) }) }); } y71118undefined120163undefined165171undefined237244(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined258266(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined519522(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined788791(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined9981001(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__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* __next_internal_client_entry_do_not_use__ ScrollToTopButton auto */ function ScrollToTopButton() { const [visible, setVisible] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(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".concat(visible ? ' visible' : ''), "aria-label": "Ðаверх", 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" }) }) }); } /***/ }) Àà  ÄÅÄk/* 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__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); Æè/* __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); 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".concat(visible ? ' visible' : ''), "aria-label": "Ðаверх", 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" }) }) }); } y71118undefined120163undefined165171undefined237244(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined258266(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined519522(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined788791(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined9981001(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefinedÇÈ, /***/ 7443:  ‚w«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSource_/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; «webpack/lib/util/registerExternalSerializerœwebpack-sources/CachedSource ­o«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSource // EXPORTS __webpack_require__.d(__webpack_exports__, { Header: () => (/* binding */ Header) }); // EXTERNAL MODULE: ../../node_modules/next/dist/compiled/react/jsx-runtime.js var jsx_runtime = __webpack_require__(4568); // EXTERNAL MODULE: ../../node_modules/next/dist/client/app-dir/link.js var app_dir_link = __webpack_require__(9664); var link_default = /*#__PURE__*/__webpack_require__.n(app_dir_link); // EXTERNAL MODULE: ../../node_modules/next/dist/api/navigation.js var navigation = __webpack_require__(7541); // EXTERNAL MODULE: ./src/lib/auth.ts var auth = __webpack_require__(1592); // EXTERNAL MODULE: ./src/context/locale.tsx var context_locale = __webpack_require__(9906); // EXTERNAL MODULE: ./src/lib/formatName.ts var formatName = __webpack_require__(1258); // EXTERNAL MODULE: ../../node_modules/next/dist/compiled/react/index.js var react = __webpack_require__(7620); // EXTERNAL MODULE: ./src/lib/translations.ts var translations = __webpack_require__(4962); ;// ./src/components/LanguageSwitcher.tsx «webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSource«webpack/lib/util/registerExternalSerializerœwebpack-sources/CachedSource ˆ«webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSource«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSource“/* __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); var _LOCALES_find; const current = (_LOCALES_find = LOCALES.find((l)=>l.code === locale)) !== null && _LOCALES_find !== void 0 ? _LOCALES_find : LOCALES[0]; // Close on outside click 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-blue-400 hover:bg-blue-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 ".concat(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-blue-50 transition ".concat(locale === loc.code ? 'bg-blue-50 text-blue-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-blue-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_„†¹»çé^f‡Ž¨­òøOU}…¶º$(Ž‘ux“J–> D _ c / 2 Ó Ö Õ Ø €€€€€×__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__._ÿÿÿûþÿÿÿ€†buffer†source„size„maps„hasht/* __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); var _LOCALES_find; const current = (_LOCALES_find = __WEBPACK_MODULE_REFERENCE__7_5b224c4f43414c4553225d_call_asiSafe1__._.find((l)=>l.code === locale)) !== null && _LOCALES_find !== void 0 ? _LOCALES_find : __WEBPACK_MODULE_REFERENCE__7_5b224c4f43414c4553225d_asiSafe1__._[0]; // Close on outside click __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-blue-400 hover:bg-blue-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 ".concat(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-blue-50 transition ".concat(locale === loc.code ? 'bg-blue-50 text-blue-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-blue-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}ƒmap‹bufferedMap ReplaceSourceRawSource“/* __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); var _LOCALES_find; const current = (_LOCALES_find = LOCALES.find((l)=>l.code === locale)) !== null && _LOCALES_find !== void 0 ? _LOCALES_find : LOCALES[0]; // Close on outside click 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-blue-400 hover:bg-blue-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 ".concat(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-blue-50 transition ".concat(locale === loc.code ? 'bg-blue-50 text-blue-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-blue-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__._undefined498504__WEBPACK_MODULE_REFERENCE__7_5b224c4f43414c4553225d_call_asiSafe1__._undefined591597__WEBPACK_MODULE_REFERENCE__7_5b224c4f43414c4553225d_asiSafe1__._undefined637645__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined950954__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined10601064__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined14221425__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined15561559__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined19091912__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined21952198__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined23662372__WEBPACK_MODULE_REFERENCE__7_5b224c4f43414c4553225d_call_asiSafe1__._undefined23992403__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined28632866__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined30273030__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined32853288__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined`_ŠàUo¿I à^ÛE‘÷AÄl ¶ Ñ  à  # o ;…&pAo¹£(0,context_locale/* useLocale */.Y)’(0,react.useState)(0,react.useRef)œtranslations/* LOCALES */.YZÿ“(0,react.useEffect)”(0,jsx_runtime.jsxs)ÿ“(0,jsx_runtime.jsx)ÿÿÿüþÿÿÿN // EXTERNAL MODULE: ./src/lib/api.ts var api = __webpack_require__(2982); // EXTERNAL MODULE: ../../node_modules/socket.io-client/build/esm/index.js + 28 modules var esm = __webpack_require__(2838); // EXTERNAL MODULE: ./src/hooks/useEffectiveRole.ts var useEffectiveRole = __webpack_require__(7795); ;// ./src/components/Header.tsx  ;«webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSource«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSourceý)/* __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'; const API_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:4000'; export function Header() { var _session_user; 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 [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); useEffect(()=>{ pathnameRef.current = pathname; }, [ pathname ]); // Close dropdowns on outside click 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 === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.role) === 'admin'; const effectiveRole = useEffectiveRole(); const isSpecialist = effectiveRole === 'specialist'; const isActive = function(href) { let exact = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; return exact ? pathname === href : pathname === href || pathname.startsWith(href + '/'); }; const navCls = function(href) { let exact = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; return "font-medium text-sm transition ".concat(isActive(href, exact) ? 'text-blue-600' : 'text-gray-600 hover:text-blue-600'); }; const mobileNavCls = function(href) { let exact = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; return "flex items-center gap-2 font-medium py-1 ".concat(isActive(href, exact) ? 'text-blue-600' : 'text-gray-700'); }; // Reset chat badge when entering chat useEffect(()=>{ if (pathname === '/chat') setUnreadChat(0); }, [ pathname ]); 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 ]); 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 ]); useEffect(()=>{ if (!session) { setPlanTier(null); return; } getMyDashboard().then((d)=>{ var _d_plan; var _d_plan_tier; return setPlanTier((_d_plan_tier = (_d_plan = d.plan) === null || _d_plan === void 0 ? void 0 : _d_plan.tier) !== null && _d_plan_tier !== void 0 ? _d_plan_tier : null); }).catch(()=>{}); }, [ session ]); 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__*/ _jsx(Link, { href: "/", className: "flex items-center shrink-0", children: /*#__PURE__*/ _jsx("span", { className: "logo-text text-2xl font-bold text-blue-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: "/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 ".concat(unreadNotif > 0 ? 'text-orange-500' : ''), 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 ".concat(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-blue-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-blue-100 text-blue-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 ".concat(unreadNotif > 0 ? 'text-orange-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: "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 ".concat(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') ] }) ] }), isAdmin && /*#__PURE__*/ _jsxs(Link, { href: "/tasks", 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: "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" }) }), t('nav.find_tasks') ] }), (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-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-blue-600 font-medium text-sm", children: t('nav.login') }), /*#__PURE__*/ _jsx(Link, { href: "/register", className: "bg-blue-600 text-white px-4 py-2 rounded-lg hover:bg-blue-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: "/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 ".concat(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 ".concat(unreadNotif > 0 ? 'text-orange-500' : ''), 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-blue-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=".concat(msgToast.roomId), onClick: ()=>setMsgToast(null), className: "text-xs text-blue-600 hover:underline font-medium", children: t('chat.toast_open') }) ] }) ] }) }) ] }); } @ï`<_‘“¯±éëIK}´¶éë%'LN‰›¹¾Ô×Ý$>Hk_t“›ÄËÿ:Aov §ÔÛû$DIjo€ˆ,;¬ ´  _ [ \ çïfs9A¦³ï÷ÃÇÉÑ×ÛuyVY[^\`<_@BJÅÈÊÍ+.03ÂÆÈÐKNPSÃÆÈˇ Š Œ á!å!ç!ï!j"_n"p"s"É#Ì#í%ð%˜(›(Ý*á*ã*æ*3,6,U.X.Ë0Î0335494Þ5á5¤6²6ž7¡7q9t9u;_x;ž=¡=#@'@{AAA‰A4B8B:B=BmDpDG G_JcJeJhJšLL3O6OŒSS’SšSETITKT_NT‚V…VLYOYt\x\I^L^—a›aa aËcÎc“f–f‡i‹iRkUk n¤n¦n©nÙpÜprsusÚwÞwàw_ãwçyêyP|S|¡£¦­°„„z‡~‡€‡ƒ‡‡‰‹‰CŒFŒ˜“œ“ž“¡“§•ª•˜˜U›_Y›[›^›fiÏŸÒŸN£Q£S¤W¤¦¦·§º§ªªh®l®n®v®ñ®ô®ö®ù®y°|°~°°t²w²y²_ˆ²³ ³Ð³Ó³Õ³ä³"´%´OµRµ··I¸L¸„ºˆº^»b»d»l»×»Û»Ý»à»3½6½þ¾¿VÁZÁ\Á__ÁºÂ½Â…ĈÄcÇgÇiÇqÇÜÇàÇâÇåÇFÉIÉËËJÍNÍPÍSͲεÎ}ЀпÓÃÓÅÓÍÓ8Ô<Ô>Ô_AÔ˜Õ›Õ“×–×ÚÚÒÛÖÛØÛàÛ[Ü_ÜaÜdÜíÝðÝèßëßiâmâoârâùãüãôå÷å]éaécékéæé_êéìéïé€ëƒë­í°íEðIðºñ½ñ;ô?ôAôDôÇõÊõÂ÷Å÷ûûû ûü„üLþOþx_{HKÔØÚÝ04; > š  (,.1Ž‘^aËÏŒ’DG ª®°\¸#&(+¹¼¾Áÿ !‚!†!Y"\"##¹#¼#±$´$Ô%Ø%Š&& ( (((€€€€€€€€€€€˜"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__._ùûÿûûûûùùúùüûûùüûûùúùüûûùüûûùúùüûûûùúùüûûùüûûùúùüûûùûùüûûùüûûùüûûùüùûûùüûûùþûûùúûüûüûùûùûûùûûüèug/* __next_internal_client_entry_do_not_use__ Header auto */ const API_URL = "https://api.canhelp.gr" || 0; function Header() { var _session_user; 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 [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); __WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._(()=>{ pathnameRef.current = pathname; }, [ pathname ]); // Close dropdowns on outside click __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 === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.role) === 'admin'; const effectiveRole = __WEBPACK_MODULE_REFERENCE__11_5b22757365456666656374697665526f6c65225d_call_directImport_asiSafe1__._(); const isSpecialist = effectiveRole === 'specialist'; const isActive = function(href) { let exact = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; return exact ? pathname === href : pathname === href || pathname.startsWith(href + '/'); }; const navCls = function(href) { let exact = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; return "font-medium text-sm transition ".concat(isActive(href, exact) ? 'text-blue-600' : 'text-gray-600 hover:text-blue-600'); }; const mobileNavCls = function(href) { let exact = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; return "flex items-center gap-2 font-medium py-1 ".concat(isActive(href, exact) ? 'text-blue-600' : 'text-gray-700'); }; // Reset chat badge when entering chat __WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._(()=>{ if (pathname === '/chat') setUnreadChat(0); }, [ pathname ]); __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 ]); __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 ]); __WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._(()=>{ if (!session) { setPlanTier(null); return; } __WEBPACK_MODULE_REFERENCE__9_5b226765744d7944617368626f617264225d_call_directImport_asiSafe1__._().then((d)=>{ var _d_plan; var _d_plan_tier; return setPlanTier((_d_plan_tier = (_d_plan = d.plan) === null || _d_plan === void 0 ? void 0 : _d_plan.tier) !== null && _d_plan_tier !== void 0 ? _d_plan_tier : null); }).catch(()=>{}); }, [ session ]); __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_5b226a7378225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/", className: "flex items-center shrink-0", children: /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._("span", { className: "logo-text text-2xl font-bold text-blue-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: "/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 ".concat(unreadNotif > 0 ? 'text-orange-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: "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 ".concat(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-blue-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-blue-100 text-blue-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 ".concat(unreadNotif > 0 ? 'text-orange-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: "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 ".concat(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') ] }) ] }), isAdmin && /*#__PURE__*/ __WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._(__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._, { href: "/tasks", 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: "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" }) }), t('nav.find_tasks') ] }), (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-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-blue-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-blue-600 text-white px-4 py-2 rounded-lg hover:bg-blue-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: "/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 ".concat(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 ".concat(unreadNotif > 0 ? 'text-orange-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: "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-blue-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=".concat(msgToast.roomId), onClick: ()=>setMsgToast(null), className: "text-xs text-blue-600 hover:underline font-medium", children: t('chat.toast_open') }) ] }) ] }) }) ] }); } éì íý)/* __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'; const API_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:4000'; export function Header() { var _session_user; 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 [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); useEffect(()=>{ pathnameRef.current = pathname; }, [ pathname ]); // Close dropdowns on outside click 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 === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.role) === 'admin'; const effectiveRole = useEffectiveRole(); const isSpecialist = effectiveRole === 'specialist'; const isActive = function(href) { let exact = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; return exact ? pathname === href : pathname === href || pathname.startsWith(href + '/'); }; const navCls = function(href) { let exact = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; return "font-medium text-sm transition ".concat(isActive(href, exact) ? 'text-blue-600' : 'text-gray-600 hover:text-blue-600'); }; const mobileNavCls = function(href) { let exact = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; return "flex items-center gap-2 font-medium py-1 ".concat(isActive(href, exact) ? 'text-blue-600' : 'text-gray-700'); }; // Reset chat badge when entering chat useEffect(()=>{ if (pathname === '/chat') setUnreadChat(0); }, [ pathname ]); 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 ]); 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 ]); useEffect(()=>{ if (!session) { setPlanTier(null); return; } getMyDashboard().then((d)=>{ var _d_plan; var _d_plan_tier; return setPlanTier((_d_plan_tier = (_d_plan = d.plan) === null || _d_plan === void 0 ? void 0 : _d_plan.tier) !== null && _d_plan_tier !== void 0 ? _d_plan_tier : null); }).catch(()=>{}); }, [ session ]); 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__*/ _jsx(Link, { href: "/", className: "flex items-center shrink-0", children: /*#__PURE__*/ _jsx("span", { className: "logo-text text-2xl font-bold text-blue-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: "/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 ".concat(unreadNotif > 0 ? 'text-orange-500' : ''), 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 ".concat(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-blue-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-blue-100 text-blue-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 ".concat(unreadNotif > 0 ? 'text-orange-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: "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 ".concat(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') ] }) ] }), isAdmin && /*#__PURE__*/ _jsxs(Link, { href: "/tasks", 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: "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" }) }), t('nav.find_tasks') ] }), (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-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-blue-600 font-medium text-sm", children: t('nav.login') }), /*#__PURE__*/ _jsx(Link, { href: "/register", className: "bg-blue-600 text-white px-4 py-2 rounded-lg hover:bg-blue-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: "/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 ".concat(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 ".concat(unreadNotif > 0 ? 'text-orange-500' : ''), 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-blue-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=".concat(msgToast.roomId), onClick: ()=>setMsgToast(null), className: "text-xs text-blue-600 hover:underline font-medium", children: t('chat.toast_open') }) ] }) ] }) }) ] }); } ¥U60145undefined147175undefined177233undefined235283undefined285329undefined331381undefined383436undefined438489undefined491549undefined551588undefined590649undefined667697"https://api.canhelp.gr"undefined7027240undefined727733undefined796804__WEBPACK_MODULE_REFERENCE__2_5b22757365526f75746572225d_call_directImport_asiSafe1__._undefined830840__WEBPACK_MODULE_REFERENCE__2_5b22757365506174686e616d65225d_call_directImport_asiSafe1__._undefined875884__WEBPACK_MODULE_REFERENCE__3_5b2275736553657373696f6e225d_call_directImport_asiSafe1__._undefined915923__WEBPACK_MODULE_REFERENCE__4_5b227573654c6f63616c65225d_call_directImport_asiSafe1__._undefined964971__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined10231030__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined10821089__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined11351142__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined11841191__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined12361243__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined12751280__WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._undefined13111316__WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._undefined13481353__WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._undefined13861391__WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._undefined14081416__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined15421550__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined20922107__WEBPACK_MODULE_REFERENCE__11_5b22757365456666656374697665526f6c65225d_call_directImport_asiSafe1__._undefined29882996__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined30943102__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined31633164__WEBPACK_MODULE_REFERENCE__10_5b22696f225d_call_directImport_asiSafe1__._undefined38153823__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined39423955__WEBPACK_MODULE_REFERENCE__9_5b22676574556e72656164436f756e74225d_call_directImport_asiSafe1__._undefined41534161__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined42624275__WEBPACK_MODULE_REFERENCE__9_5b226765744d7944617368626f617264225d_call_directImport_asiSafe1__._undefined45914599__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined50595063__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined50655073__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined51245127__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined53355339__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined54935497__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined57185721__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined57235726__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined59155918__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined62366240__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined64606464__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined64666474__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined65976600__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined66026605__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined69556958__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined69606963__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined73627366__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined73687376__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined74997502__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined75047507__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined78757878__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined78807883__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined83278330__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined83328335__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined86738677__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined86798687__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined88108814__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined88168819__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined91619164__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined97099712__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1039210395__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1097310977__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1097910982__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined1131511318__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1186111864__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1249112494__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1307213076__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1336513369__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1379013793__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1398814002__WEBPACK_MODULE_REFERENCE__5_5b22666f726d617453686f72744e616d65225d_call_directImport_asiSafe1__._undefined1423814241__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1470514708__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1522115224__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1577415777__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1641916423__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1676316767__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1676916777__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined1694816952__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1695416957__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined1751717520__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1818218185__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1903919043__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1904519048__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined1961019613__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2027520278__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2138821392__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2139421402__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined2157321577__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2157921582__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined2214622149__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2286022863__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2366823672__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2413724140__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2498324987__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2498924992__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined2554725550__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2625926262__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2701527019__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2747427477__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2832028324__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2832628329__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined2888928892__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2955429557__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3068230686__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3068830691__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined3120731210__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3182431827__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3266932673__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3267532678__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined3319733200__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3381433817__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3468234686__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3468834691__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined3520735211__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3590735910__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3689036893__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3778437788__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3779037793__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined3831138314__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3892838931__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3976539769__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3977139774__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined4029440297__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4091140914__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4180641809__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4206742071__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4249742503__WEBPACK_MODULE_REFERENCE__3_5b227369676e4f7574225d_call_directImport_asiSafe1__._undefined4293542938__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4353843541__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4464844652__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4465444662__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined4478544788__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4479044793__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined4517745180__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4518245185__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined4568445687__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4568945704__WEBPACK_MODULE_REFERENCE__8_5b224c616e67756167655377697463686572225d_directImport_asiSafe1__._undefined4583145835__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4603246035__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4603746052__WEBPACK_MODULE_REFERENCE__8_5b224c616e67756167655377697463686572225d_directImport_asiSafe1__._undefined4611446117__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4641546418__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4686446867__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4717747180__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4774847752__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4796647970__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4797247980__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined4808748091__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4809348096__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined4843548438__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4889448897__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4949449498__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4950049503__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined4985049853__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5030950312__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5104351047__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5104951057__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined5116451168__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5117051173__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5152651529__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5198551988__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5255452558__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5256052563__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5291452917__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5337353376__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5420754211__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5421354221__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined5432854332__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5433454337__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5468054683__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5518755190__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5583255835__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5627456278__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5628056288__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined5641156415__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5641756420__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5681356816__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5732057323__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5796157965__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5796757970__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5836158364__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5886858871__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5974159745__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5974759755__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined5987859882__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5988459887__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6028860291__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6084560848__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6150961513__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6188261885__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6252362527__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6252962532__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6291962922__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6342663429__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6427964283__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6428564288__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6464164644__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6510065103__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6580865812__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6581465817__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6616866171__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6663266635__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6728467288__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6729067293__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6763267636__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6815568158__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6901869021__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6967269676__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6967869681__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined7003070033__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7049470497__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7111571119__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7130871314__WEBPACK_MODULE_REFERENCE__3_5b227369676e4f7574225d_call_directImport_asiSafe1__._undefined7174871751__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7219872201__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7287472878__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7288072888__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined7299572998__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7300073003__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined7340173404__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7340673409__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined7398373986__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7411474118__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7432974332__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7452374527__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7468174684__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7492974932__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7522075224__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7540275405__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7578675789__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7579175794__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined_á´ $~¡ùn—ës§û)}§û(|œì [{Ëì<M£!_w• ú kÁ#y¶ÿŠàW·}Ó8˜Ô*öBD“Æà,Æï9;_ˆEÍ õ A!C!’! "W"Y"¦"$N$P$$,&x&z&É&D'Ž''Ý'M)—)™)æ)¢+ì+î+_;,-Ù-Û-*.¥.ñ.ó.@/–0à03K3ó5=68Ë8Í89g:±:Ð<=?×?BeB†CÒCwEÁE„F_æFÒGHìI6J7LL§NñNsQ¿QS_SaS°S[T§T©TöT&WpWZPZ¦]ò]ô]A^s`½`Sccóg_?hAhh;i‡i‰iÖi lTloeoŠrÖr§tñtÆîÇ8ÈÊÚÊ-ÏyÏ{ÏÊÏEÐБÐÞÐ^Ò_¨ÒªÒ÷ÒêÔ4Õ6Õ•ÕÖ`Ö%×o×q×ÐרXØ‚ÙÌÙŠÛÔÛ ÝTÝŒßØß®àúàüàKá¶áââQâ¤ã_îã¶åæUè¡è£èðèKê•ê]ì§ì‚ïÎïÐïðŠðÖðØð%ñ†òÐò˜ôâô÷d÷f÷³÷ù\ù$ûnû­þ_ùþûþJÿµÿP§ñé3µÿ¶  S Î   i ò < 4~üHJ—h`_ª\^­(tvÃTžÈ§!ó!d#®#,&x&z&Ç&J(”(Œ*Ö*(.t.v.Ã.$0n062_€2A555Ü5;7…7R9œ9%<q<s<À<>_>f@°@ DVDáF-G/G|GÙH#IðJ:K¤MðM­NÿN±P_ûPºRS¥UñUóUBV­V÷VùVFWÔXY YmY«[õ[u\Á\”]Þ]^é^ƒ_Í_Â` a,bxb*ctcñdB;e=eŠe˜(0,navigation.useRouter)š(0,navigation.usePathname)›(0,auth/* useSession */.wV)ëììììììííííïï¬(0,useEffectiveRole/* useEffectiveRole */.F)îîŠ(0,esm.io)íž(0,api/* getUnreadCount */.$M)ì(0,api/* getMyDashboard */.H)ëì”jsx_runtime.Fragmentìëëì(link_default())ëêêþëÿëÿêþëÿëÿëÿêþêÿëëëêÿëëëêêë¥(0,formatName/* formatShortName */.H)êêêêééýéþêêéþêêéýéþêêéêéþêêéêéþêêéþêêéþêêéþéêêéþêêéþêêêé˜(0,auth/* signOut */.CI)ééèüéýéýéLanguageSwitcherçèÿèèèèççûçüèèçüèèçûçüèèçüèèçûçüèèèçûçüèèçüèèçûçüèèçèçüèèçüèèçüèèçüçèèçüèèçþèèçûèüèüèçèçèèçèèü€†buffer†source„size„maps„hashìG // EXPORTS __webpack_require__.d(__webpack_exports__, { Header: () => (/* binding */ Header) }); // EXTERNAL MODULE: ../../node_modules/next/dist/compiled/react/jsx-runtime.js var jsx_runtime = __webpack_require__(4568); // EXTERNAL MODULE: ../../node_modules/next/dist/client/app-dir/link.js var app_dir_link = __webpack_require__(9664); var link_default = /*#__PURE__*/__webpack_require__.n(app_dir_link); // EXTERNAL MODULE: ../../node_modules/next/dist/api/navigation.js var navigation = __webpack_require__(7541); // EXTERNAL MODULE: ./src/lib/auth.ts var auth = __webpack_require__(1592); // EXTERNAL MODULE: ./src/context/locale.tsx var context_locale = __webpack_require__(9906); // EXTERNAL MODULE: ./src/lib/formatName.ts var formatName = __webpack_require__(1258); // EXTERNAL MODULE: ../../node_modules/next/dist/compiled/react/index.js var react = __webpack_require__(7620); // EXTERNAL MODULE: ./src/lib/translations.ts var translations = __webpack_require__(4962); ;// ./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); var _LOCALES_find; const current = (_LOCALES_find = translations/* LOCALES */.YZ.find((l)=>l.code === locale)) !== null && _LOCALES_find !== void 0 ? _LOCALES_find : translations/* LOCALES */.YZ[0]; // Close on outside click (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,jsx_runtime.jsxs)("div", { ref: ref, className: "relative", children: [ /*#__PURE__*/ (0,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-blue-400 hover:bg-blue-50 transition text-sm font-medium text-gray-700", "aria-label": "Change language", children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)("span", { children: current.code.toUpperCase() }), /*#__PURE__*/ (0,jsx_runtime.jsx)("svg", { className: "w-3.5 h-3.5 text-gray-400 transition-transform ".concat(open ? 'rotate-180' : ''), fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: /*#__PURE__*/ (0,jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19 9l-7 7-7-7" }) }) ] }), open && /*#__PURE__*/ (0,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,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-blue-50 transition ".concat(locale === loc.code ? 'bg-blue-50 text-blue-700 font-medium' : 'text-gray-700'), children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)("span", { children: loc.label }), locale === loc.code && /*#__PURE__*/ (0,jsx_runtime.jsx)("svg", { className: "w-3.5 h-3.5 ml-auto text-blue-600", fill: "currentColor", viewBox: "0 0 20 20", children: /*#__PURE__*/ (0,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__(2982); // EXTERNAL MODULE: ../../node_modules/socket.io-client/build/esm/index.js + 28 modules var esm = __webpack_require__(2838); // EXTERNAL MODULE: ./src/hooks/useEffectiveRole.ts var useEffectiveRole = __webpack_require__(7795); ;// ./src/components/Header.tsx /* __next_internal_client_entry_do_not_use__ Header auto */ const API_URL = "https://api.canhelp.gr" || 0; function Header() { var _session_user; 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 [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); (0,react.useEffect)(()=>{ pathnameRef.current = pathname; }, [ pathname ]); // Close dropdowns on outside click (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 === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.role) === 'admin'; const effectiveRole = (0,useEffectiveRole/* useEffectiveRole */.F)(); const isSpecialist = effectiveRole === 'specialist'; const isActive = function(href) { let exact = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; return exact ? pathname === href : pathname === href || pathname.startsWith(href + '/'); }; const navCls = function(href) { let exact = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; return "font-medium text-sm transition ".concat(isActive(href, exact) ? 'text-blue-600' : 'text-gray-600 hover:text-blue-600'); }; const mobileNavCls = function(href) { let exact = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; return "flex items-center gap-2 font-medium py-1 ".concat(isActive(href, exact) ? 'text-blue-600' : 'text-gray-700'); }; // Reset chat badge when entering chat (0,react.useEffect)(()=>{ if (pathname === '/chat') setUnreadChat(0); }, [ pathname ]); (0,react.useEffect)(()=>{ if (!session) return; const socket = (0,esm.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 ]); (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 ]); (0,react.useEffect)(()=>{ if (!session) { setPlanTier(null); return; } (0,api/* getMyDashboard */.H)().then((d)=>{ var _d_plan; var _d_plan_tier; return setPlanTier((_d_plan_tier = (_d_plan = d.plan) === null || _d_plan === void 0 ? void 0 : _d_plan.tier) !== null && _d_plan_tier !== void 0 ? _d_plan_tier : null); }).catch(()=>{}); }, [ session ]); (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,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,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,jsx_runtime.jsxs)("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: [ /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", { className: "flex items-center justify-between h-16 header-content transition-all duration-300", children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/", className: "flex items-center shrink-0", children: /*#__PURE__*/ (0,jsx_runtime.jsx)("span", { className: "logo-text text-2xl font-bold text-blue-600 transition-all duration-300", children: "CanHelp" }) }), /*#__PURE__*/ (0,jsx_runtime.jsxs)("nav", { className: "hidden md:flex items-center gap-5 ml-auto", children: [ isSpecialist ? /*#__PURE__*/ (0,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/tasks", className: navCls('/tasks'), children: t('nav.find_tasks') }), /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/dashboard", className: navCls('/dashboard'), children: t('nav.dashboard') }) ] }) : /*#__PURE__*/ (0,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/tasks/new", className: navCls('/tasks/new', true), children: t('dashboard.new_task') }), /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/specialists", className: navCls('/specialists'), children: t('nav.specialists') }) ] }), /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/pricing", className: navCls('/pricing', true), children: t('nav.pricing', 'Pricing') }), session ? /*#__PURE__*/ (0,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,jsx_runtime.jsxs)((link_default()), { href: "/notifications", className: "relative text-gray-600 hover:text-gray-900 flex items-center", children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)("svg", { className: "w-5 h-5 ".concat(unreadNotif > 0 ? 'text-orange-500' : ''), fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: /*#__PURE__*/ (0,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,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,jsx_runtime.jsxs)((link_default()), { href: "/chat", className: "relative text-gray-600 hover:text-gray-900 flex items-center", children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)("svg", { className: "w-5 h-5 ".concat(unreadChat > 0 ? 'text-green-500' : ''), fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: /*#__PURE__*/ (0,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,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,jsx_runtime.jsxs)("div", { className: "relative", ref: profileRef, children: [ /*#__PURE__*/ (0,jsx_runtime.jsxs)("button", { onClick: ()=>setProfileOpen(!profileOpen), className: "flex items-center gap-1.5 text-sm font-medium text-gray-600 hover:text-blue-600", children: [ /*#__PURE__*/ (0,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,jsx_runtime.jsx)("span", { className: "inline-flex items-center px-1.5 py-0.5 rounded-full text-[10px] font-bold bg-blue-100 text-blue-700 leading-none", children: "Pro" }), planTier === 'ultimate' && /*#__PURE__*/ (0,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,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,jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19 9l-7 7-7-7" }) }) ] }), profileOpen && /*#__PURE__*/ (0,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,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,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,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,jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 4v16m8-8H4" }) }), t('nav.new_task') ] }), /*#__PURE__*/ (0,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,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,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,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,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,jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0 ".concat(unreadNotif > 0 ? 'text-orange-500' : 'text-gray-400'), fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,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,jsx_runtime.jsxs)("span", { className: "flex items-center gap-1.5", children: [ t('nav.notifications'), unreadNotif > 0 && /*#__PURE__*/ (0,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,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,jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0 ".concat(unreadChat > 0 ? 'text-green-500' : 'text-gray-400'), fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,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,jsx_runtime.jsxs)("span", { className: "flex items-center gap-1.5", children: [ t('nav.chat'), unreadChat > 0 && /*#__PURE__*/ (0,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,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,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,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') ] }) ] }), isAdmin && /*#__PURE__*/ (0,jsx_runtime.jsxs)((link_default()), { href: "/tasks", 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,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,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') ] }), (isSpecialist || isAdmin) && /*#__PURE__*/ (0,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,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,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,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,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,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,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,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,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,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,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,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,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,jsx_runtime.jsx)("hr", { className: "my-1 border-gray-100" }), /*#__PURE__*/ (0,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,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,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,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/login", className: "text-gray-600 hover:text-blue-600 font-medium text-sm", children: t('nav.login') }), /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/register", className: "bg-blue-600 text-white px-4 py-2 rounded-lg hover:bg-blue-700 font-medium text-sm", children: t('nav.register') }) ] }), /*#__PURE__*/ (0,jsx_runtime.jsx)(LanguageSwitcher, {}) ] }), /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", { className: "md:hidden flex items-center gap-2", children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)(LanguageSwitcher, {}), /*#__PURE__*/ (0,jsx_runtime.jsx)("button", { className: "p-2", onClick: ()=>setMenuOpen(!menuOpen), "aria-label": "Toggle menu", children: /*#__PURE__*/ (0,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,jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6 18L18 6M6 6l12 12" }) : /*#__PURE__*/ (0,jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4 6h16M4 12h16M4 18h16" }) }) }) ] }) ] }), menuOpen && /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", { className: "md:hidden py-4 border-t border-gray-100 flex flex-col gap-3", children: [ isSpecialist ? /*#__PURE__*/ (0,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,jsx_runtime.jsxs)((link_default()), { href: "/tasks", className: mobileNavCls('/tasks'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,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,jsx_runtime.jsxs)((link_default()), { href: "/dashboard", className: mobileNavCls('/dashboard'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,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,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,jsx_runtime.jsxs)((link_default()), { href: "/tasks/new", className: mobileNavCls('/tasks/new', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 4v16m8-8H4" }) }), t('nav.new_task') ] }), /*#__PURE__*/ (0,jsx_runtime.jsxs)((link_default()), { href: "/specialists", className: mobileNavCls('/specialists'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,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,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,jsx_runtime.jsxs)((link_default()), { href: "/chat", className: mobileNavCls('/chat', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0 ".concat(unreadChat > 0 ? 'text-green-500' : ''), fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,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,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,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,jsx_runtime.jsxs)((link_default()), { href: "/tasks/new", className: mobileNavCls('/tasks/new', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 4v16m8-8H4" }) }), t('nav.new_task') ] }), /*#__PURE__*/ (0,jsx_runtime.jsxs)((link_default()), { href: "/specialists", className: mobileNavCls('/specialists'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,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,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,jsx_runtime.jsxs)((link_default()), { href: "/notifications", className: mobileNavCls('/notifications', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0 ".concat(unreadNotif > 0 ? 'text-orange-500' : ''), fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,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,jsx_runtime.jsxs)("span", { className: "flex items-center gap-1.5", children: [ t('nav.notifications'), unreadNotif > 0 && /*#__PURE__*/ (0,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,jsx_runtime.jsxs)((link_default()), { href: "/dashboard", className: mobileNavCls('/dashboard'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,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,jsx_runtime.jsxs)((link_default()), { href: "/favorites", className: mobileNavCls('/favorites', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,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,jsx_runtime.jsxs)((link_default()), { href: "/schedule", className: mobileNavCls('/schedule', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,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,jsx_runtime.jsxs)((link_default()), { href: "/admin", className: mobileNavCls('/admin'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,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,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,jsx_runtime.jsxs)((link_default()), { href: "/profile", className: mobileNavCls('/profile', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,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,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,jsx_runtime.jsx)("svg", { className: "w-4 h-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,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,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/login", className: "text-gray-700 font-medium py-1", onClick: ()=>setMenuOpen(false), children: t('nav.login') }), /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/register", className: "text-blue-600 font-medium py-1", onClick: ()=>setMenuOpen(false), children: t('nav.register') }) ] }) ] }) ] }) }), msgToast && /*#__PURE__*/ (0,jsx_runtime.jsx)("div", { className: "fixed bottom-5 right-5 z-[200] max-w-sm w-full", children: /*#__PURE__*/ (0,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,jsx_runtime.jsx)("span", { className: "text-2xl shrink-0", children: "\uD83D\uDCAC" }), /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", { className: "flex-1 min-w-0", children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)("p", { className: "font-semibold text-gray-900 text-sm", children: t('chat.toast_title') }), /*#__PURE__*/ (0,jsx_runtime.jsx)("p", { className: "text-xs text-gray-500 truncate mt-0.5", children: msgToast.body }) ] }), /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", { className: "flex flex-col items-end gap-2 shrink-0", children: [ /*#__PURE__*/ (0,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,jsx_runtime.jsx)((link_default()), { href: "/chat?room=".concat(msgToast.roomId), onClick: ()=>setMsgToast(null), className: "text-xs text-blue-600 hover:underline font-medium", children: t('chat.toast_open') }) ] }) ] }) }) ] }); } €”{"finalSource":true}ƒmap‹bufferedMap ` ConcatSourceRawSource // EXPORTS __webpack_require__.d(__webpack_exports__, { Header: () => (/* binding */ Header) }); // EXTERNAL MODULE: ../../node_modules/next/dist/compiled/react/jsx-runtime.js var jsx_runtime = __webpack_require__(4568); // EXTERNAL MODULE: ../../node_modules/next/dist/client/app-dir/link.js var app_dir_link = __webpack_require__(9664); var link_default = /*#__PURE__*/__webpack_require__.n(app_dir_link); // EXTERNAL MODULE: ../../node_modules/next/dist/api/navigation.js var navigation = __webpack_require__(7541); // EXTERNAL MODULE: ./src/lib/auth.ts var auth = __webpack_require__(1592); // EXTERNAL MODULE: ./src/context/locale.tsx var context_locale = __webpack_require__(9906); // EXTERNAL MODULE: ./src/lib/formatName.ts var formatName = __webpack_require__(1258); // EXTERNAL MODULE: ../../node_modules/next/dist/compiled/react/index.js var react = __webpack_require__(7620); // EXTERNAL MODULE: ./src/lib/translations.ts var translations = __webpack_require__(4962); ;// ./src/components/LanguageSwitcher.tsx  ReplaceSourceReplaceSourceRawSource“/* __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); var _LOCALES_find; const current = (_LOCALES_find = LOCALES.find((l)=>l.code === locale)) !== null && _LOCALES_find !== void 0 ? _LOCALES_find : LOCALES[0]; // Close on outside click 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-blue-400 hover:bg-blue-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 ".concat(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-blue-50 transition ".concat(locale === loc.code ? 'bg-blue-50 text-blue-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-blue-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__._undefined498504__WEBPACK_MODULE_REFERENCE__7_5b224c4f43414c4553225d_call_asiSafe1__._undefined591597__WEBPACK_MODULE_REFERENCE__7_5b224c4f43414c4553225d_asiSafe1__._undefined637645__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined950954__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined10601064__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined14221425__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined15561559__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined19091912__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined21952198__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined23662372__WEBPACK_MODULE_REFERENCE__7_5b224c4f43414c4553225d_call_asiSafe1__._undefined23992403__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined28632866__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined30273030__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined32853288__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined‹138224(0,context_locale/* useLocale */.Y)undefined257341(0,react.useState)undefined367447(0,react.useRef)undefined516585translations/* LOCALES */.YZundefined672736translations/* LOCALES */.YZundefined776862(0,react.useEffect)undefined11671243(0,jsx_runtime.jsxs)undefined13491425(0,jsx_runtime.jsxs)undefined17831857(0,jsx_runtime.jsx)undefined19882062(0,jsx_runtime.jsx)undefined24122486(0,jsx_runtime.jsx)undefined27692843(0,jsx_runtime.jsx)undefined30113080translations/* LOCALES */.YZundefined31073183(0,jsx_runtime.jsxs)undefined36433717(0,jsx_runtime.jsx)undefined38783952(0,jsx_runtime.jsx)undefined42074281(0,jsx_runtime.jsx)undefinedRawSourceN // EXTERNAL MODULE: ./src/lib/api.ts var api = __webpack_require__(2982); // EXTERNAL MODULE: ../../node_modules/socket.io-client/build/esm/index.js + 28 modules var esm = __webpack_require__(2838); // EXTERNAL MODULE: ./src/hooks/useEffectiveRole.ts var useEffectiveRole = __webpack_require__(7795); ;// ./src/components/Header.tsx úûý)/* __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'; const API_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:4000'; export function Header() { var _session_user; 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 [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); useEffect(()=>{ pathnameRef.current = pathname; }, [ pathname ]); // Close dropdowns on outside click 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 === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.role) === 'admin'; const effectiveRole = useEffectiveRole(); const isSpecialist = effectiveRole === 'specialist'; const isActive = function(href) { let exact = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; return exact ? pathname === href : pathname === href || pathname.startsWith(href + '/'); }; const navCls = function(href) { let exact = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; return "font-medium text-sm transition ".concat(isActive(href, exact) ? 'text-blue-600' : 'text-gray-600 hover:text-blue-600'); }; const mobileNavCls = function(href) { let exact = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; return "flex items-center gap-2 font-medium py-1 ".concat(isActive(href, exact) ? 'text-blue-600' : 'text-gray-700'); }; // Reset chat badge when entering chat useEffect(()=>{ if (pathname === '/chat') setUnreadChat(0); }, [ pathname ]); 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 ]); 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 ]); useEffect(()=>{ if (!session) { setPlanTier(null); return; } getMyDashboard().then((d)=>{ var _d_plan; var _d_plan_tier; return setPlanTier((_d_plan_tier = (_d_plan = d.plan) === null || _d_plan === void 0 ? void 0 : _d_plan.tier) !== null && _d_plan_tier !== void 0 ? _d_plan_tier : null); }).catch(()=>{}); }, [ session ]); 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__*/ _jsx(Link, { href: "/", className: "flex items-center shrink-0", children: /*#__PURE__*/ _jsx("span", { className: "logo-text text-2xl font-bold text-blue-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: "/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 ".concat(unreadNotif > 0 ? 'text-orange-500' : ''), 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 ".concat(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-blue-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-blue-100 text-blue-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 ".concat(unreadNotif > 0 ? 'text-orange-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: "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 ".concat(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') ] }) ] }), isAdmin && /*#__PURE__*/ _jsxs(Link, { href: "/tasks", 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: "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" }) }), t('nav.find_tasks') ] }), (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-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-blue-600 font-medium text-sm", children: t('nav.login') }), /*#__PURE__*/ _jsx(Link, { href: "/register", className: "bg-blue-600 text-white px-4 py-2 rounded-lg hover:bg-blue-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: "/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 ".concat(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 ".concat(unreadNotif > 0 ? 'text-orange-500' : ''), 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-blue-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=".concat(msgToast.roomId), onClick: ()=>setMsgToast(null), className: "text-xs text-blue-600 hover:underline font-medium", children: t('chat.toast_open') }) ] }) ] }) }) ] }); } ¥U60145undefined147175undefined177233undefined235283undefined285329undefined331381undefined383436undefined438489undefined491549undefined551588undefined590649undefined667697"https://api.canhelp.gr"undefined7027240undefined727733undefined796804__WEBPACK_MODULE_REFERENCE__2_5b22757365526f75746572225d_call_directImport_asiSafe1__._undefined830840__WEBPACK_MODULE_REFERENCE__2_5b22757365506174686e616d65225d_call_directImport_asiSafe1__._undefined875884__WEBPACK_MODULE_REFERENCE__3_5b2275736553657373696f6e225d_call_directImport_asiSafe1__._undefined915923__WEBPACK_MODULE_REFERENCE__4_5b227573654c6f63616c65225d_call_directImport_asiSafe1__._undefined964971__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined10231030__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined10821089__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined11351142__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined11841191__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined12361243__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined12751280__WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._undefined13111316__WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._undefined13481353__WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._undefined13861391__WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._undefined14081416__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined15421550__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined20922107__WEBPACK_MODULE_REFERENCE__11_5b22757365456666656374697665526f6c65225d_call_directImport_asiSafe1__._undefined29882996__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined30943102__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined31633164__WEBPACK_MODULE_REFERENCE__10_5b22696f225d_call_directImport_asiSafe1__._undefined38153823__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined39423955__WEBPACK_MODULE_REFERENCE__9_5b22676574556e72656164436f756e74225d_call_directImport_asiSafe1__._undefined41534161__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined42624275__WEBPACK_MODULE_REFERENCE__9_5b226765744d7944617368626f617264225d_call_directImport_asiSafe1__._undefined45914599__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined50595063__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined50655073__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined51245127__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined53355339__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined54935497__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined57185721__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined57235726__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined59155918__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined62366240__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined64606464__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined64666474__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined65976600__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined66026605__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined69556958__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined69606963__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined73627366__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined73687376__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined74997502__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined75047507__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined78757878__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined78807883__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined83278330__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined83328335__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined86738677__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined86798687__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined88108814__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined88168819__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined91619164__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined97099712__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1039210395__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1097310977__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1097910982__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined1131511318__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1186111864__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1249112494__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1307213076__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1336513369__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1379013793__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1398814002__WEBPACK_MODULE_REFERENCE__5_5b22666f726d617453686f72744e616d65225d_call_directImport_asiSafe1__._undefined1423814241__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1470514708__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1522115224__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1577415777__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1641916423__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1676316767__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1676916777__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined1694816952__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1695416957__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined1751717520__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1818218185__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1903919043__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1904519048__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined1961019613__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2027520278__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2138821392__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2139421402__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined2157321577__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2157921582__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined2214622149__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2286022863__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2366823672__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2413724140__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2498324987__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2498924992__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined2554725550__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2625926262__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2701527019__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2747427477__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2832028324__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2832628329__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined2888928892__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2955429557__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3068230686__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3068830691__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined3120731210__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3182431827__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3266932673__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3267532678__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined3319733200__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3381433817__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3468234686__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3468834691__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined3520735211__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3590735910__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3689036893__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3778437788__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3779037793__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined3831138314__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3892838931__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3976539769__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3977139774__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined4029440297__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4091140914__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4180641809__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4206742071__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4249742503__WEBPACK_MODULE_REFERENCE__3_5b227369676e4f7574225d_call_directImport_asiSafe1__._undefined4293542938__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4353843541__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4464844652__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4465444662__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined4478544788__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4479044793__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined4517745180__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4518245185__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined4568445687__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4568945704__WEBPACK_MODULE_REFERENCE__8_5b224c616e67756167655377697463686572225d_directImport_asiSafe1__._undefined4583145835__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4603246035__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4603746052__WEBPACK_MODULE_REFERENCE__8_5b224c616e67756167655377697463686572225d_directImport_asiSafe1__._undefined4611446117__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4641546418__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4686446867__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4717747180__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4774847752__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4796647970__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4797247980__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined4808748091__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4809348096__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined4843548438__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4889448897__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4949449498__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4950049503__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined4985049853__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5030950312__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5104351047__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5104951057__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined5116451168__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5117051173__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5152651529__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5198551988__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5255452558__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5256052563__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5291452917__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5337353376__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5420754211__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5421354221__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined5432854332__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5433454337__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5468054683__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5518755190__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5583255835__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5627456278__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5628056288__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined5641156415__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5641756420__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5681356816__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5732057323__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5796157965__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5796757970__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5836158364__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5886858871__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5974159745__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5974759755__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined5987859882__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5988459887__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6028860291__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6084560848__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6150961513__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6188261885__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6252362527__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6252962532__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6291962922__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6342663429__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6427964283__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6428564288__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6464164644__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6510065103__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6580865812__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6581465817__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6616866171__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6663266635__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6728467288__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6729067293__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6763267636__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6815568158__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6901869021__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6967269676__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6967869681__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined7003070033__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7049470497__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7111571119__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7130871314__WEBPACK_MODULE_REFERENCE__3_5b227369676e4f7574225d_call_directImport_asiSafe1__._undefined7174871751__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7219872201__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7287472878__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7288072888__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined7299572998__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7300073003__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined7340173404__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7340673409__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined7398373986__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7411474118__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7432974332__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7452374527__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7468174684__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7492974932__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7522075224__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7540275405__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7578675789__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7579175794__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined+!180266(0,navigation.useRouter)undefined292382(0,navigation.usePathname)undefined417505(0,auth/* useSession */.wV)undefined536622(0,context_locale/* useLocale */.Y)undefined663747(0,react.useState)undefined799883(0,react.useState)undefined9351019(0,react.useState)undefined10651149(0,react.useState)undefined11911275(0,react.useState)undefined13201404(0,react.useState)undefined14361516(0,react.useRef)undefined15471627(0,react.useRef)undefined16591739(0,react.useRef)undefined17721852(0,react.useRef)undefined18691955(0,react.useEffect)undefined20812167(0,react.useEffect)undefined27092810(0,useEffectiveRole/* useEffectiveRole */.F)undefined36913777(0,react.useEffect)undefined38753961(0,react.useEffect)undefined40224095(0,esm.io)undefined47464832(0,react.useEffect)undefined49515047(0,api/* getUnreadCount */.$M)undefined52455331(0,react.useEffect)undefined54325528(0,api/* getMyDashboard */.H)undefined58445930(0,react.useEffect)undefined63906466(0,jsx_runtime.jsxs)undefined64686547jsx_runtime.Fragmentundefined65986672(0,jsx_runtime.jsx)undefined68806956(0,jsx_runtime.jsxs)undefined71107186(0,jsx_runtime.jsxs)undefined74077481(0,jsx_runtime.jsx)undefined74837560(link_default())undefined77497823(0,jsx_runtime.jsx)undefined81418217(0,jsx_runtime.jsxs)undefined84378513(0,jsx_runtime.jsxs)undefined85158594jsx_runtime.Fragmentundefined87178791(0,jsx_runtime.jsx)undefined87938870(link_default())undefined92209294(0,jsx_runtime.jsx)undefined92969373(link_default())undefined97729848(0,jsx_runtime.jsxs)undefined98509929jsx_runtime.Fragmentundefined1005210126(0,jsx_runtime.jsx)undefined1012810205(link_default())undefined1057310647(0,jsx_runtime.jsx)undefined1064910726(link_default())undefined1117011244(0,jsx_runtime.jsx)undefined1124611323(link_default())undefined1166111737(0,jsx_runtime.jsxs)undefined1173911818jsx_runtime.Fragmentundefined1194112017(0,jsx_runtime.jsxs)undefined1201912096(link_default())undefined1243812512(0,jsx_runtime.jsx)undefined1305713131(0,jsx_runtime.jsx)undefined1381113885(0,jsx_runtime.jsx)undefined1446314539(0,jsx_runtime.jsxs)undefined1454114618(link_default())undefined1495115025(0,jsx_runtime.jsx)undefined1556815642(0,jsx_runtime.jsx)undefined1626916343(0,jsx_runtime.jsx)undefined1692116997(0,jsx_runtime.jsxs)undefined1728617362(0,jsx_runtime.jsxs)undefined1778317857(0,jsx_runtime.jsx)undefined1805218150(0,formatName/* formatShortName */.H)undefined1838618460(0,jsx_runtime.jsx)undefined1892418998(0,jsx_runtime.jsx)undefined1951119585(0,jsx_runtime.jsx)undefined2013520209(0,jsx_runtime.jsx)undefined2085120927(0,jsx_runtime.jsxs)undefined2126721343(0,jsx_runtime.jsxs)undefined2134521424jsx_runtime.Fragmentundefined2159521671(0,jsx_runtime.jsxs)undefined2167321750(link_default())undefined2231022384(0,jsx_runtime.jsx)undefined2304623120(0,jsx_runtime.jsx)undefined2397424050(0,jsx_runtime.jsxs)undefined2405224129(link_default())undefined2469124765(0,jsx_runtime.jsx)undefined2542725501(0,jsx_runtime.jsx)undefined2661126687(0,jsx_runtime.jsxs)undefined2668926768jsx_runtime.Fragmentundefined2693927015(0,jsx_runtime.jsxs)undefined2701727094(link_default())undefined2765827732(0,jsx_runtime.jsx)undefined2844328517(0,jsx_runtime.jsx)undefined2932229398(0,jsx_runtime.jsxs)undefined2986329937(0,jsx_runtime.jsx)undefined3078030856(0,jsx_runtime.jsxs)undefined3085830935(link_default())undefined3149031564(0,jsx_runtime.jsx)undefined3227332347(0,jsx_runtime.jsx)undefined3310033176(0,jsx_runtime.jsxs)undefined3363133705(0,jsx_runtime.jsx)undefined3454834624(0,jsx_runtime.jsxs)undefined3462634703(link_default())undefined3526335337(0,jsx_runtime.jsx)undefined3599936073(0,jsx_runtime.jsx)undefined3719837274(0,jsx_runtime.jsxs)undefined3727637353(link_default())undefined3786937943(0,jsx_runtime.jsx)undefined3855738631(0,jsx_runtime.jsx)undefined3947339549(0,jsx_runtime.jsxs)undefined3955139628(link_default())undefined4014740221(0,jsx_runtime.jsx)undefined4083540909(0,jsx_runtime.jsx)undefined4177441850(0,jsx_runtime.jsxs)undefined4185241929(link_default())undefined4244542521(0,jsx_runtime.jsxs)undefined4321743291(0,jsx_runtime.jsx)undefined4427144345(0,jsx_runtime.jsx)undefined4523645312(0,jsx_runtime.jsxs)undefined4531445391(link_default())undefined4590945983(0,jsx_runtime.jsx)undefined4659746671(0,jsx_runtime.jsx)undefined4750547581(0,jsx_runtime.jsxs)undefined4758347660(link_default())undefined4818048254(0,jsx_runtime.jsx)undefined4886848942(0,jsx_runtime.jsx)undefined4983449908(0,jsx_runtime.jsx)undefined5016650242(0,jsx_runtime.jsxs)undefined5066850750(0,auth/* signOut */.CI)undefined5118251256(0,jsx_runtime.jsx)undefined5185651930(0,jsx_runtime.jsx)undefined5303753113(0,jsx_runtime.jsxs)undefined5311553194jsx_runtime.Fragmentundefined5331753391(0,jsx_runtime.jsx)undefined5339353470(link_default())undefined5385453928(0,jsx_runtime.jsx)undefined5393054007(link_default())undefined5450654580(0,jsx_runtime.jsx)undefined5458254677LanguageSwitcherundefined5480454880(0,jsx_runtime.jsxs)undefined5507755151(0,jsx_runtime.jsx)undefined5515355248LanguageSwitcherundefined5531055384(0,jsx_runtime.jsx)undefined5568255756(0,jsx_runtime.jsx)undefined5620256276(0,jsx_runtime.jsx)undefined5658656660(0,jsx_runtime.jsx)undefined5722857304(0,jsx_runtime.jsxs)undefined5751857594(0,jsx_runtime.jsxs)undefined5759657675jsx_runtime.Fragmentundefined5778257858(0,jsx_runtime.jsxs)undefined5786057937(link_default())undefined5827658350(0,jsx_runtime.jsx)undefined5880658880(0,jsx_runtime.jsx)undefined5947759553(0,jsx_runtime.jsxs)undefined5955559632(link_default())undefined5997960053(0,jsx_runtime.jsx)undefined6050960583(0,jsx_runtime.jsx)undefined6131461390(0,jsx_runtime.jsxs)undefined6139261471jsx_runtime.Fragmentundefined6157861654(0,jsx_runtime.jsxs)undefined6165661733(link_default())undefined6208662160(0,jsx_runtime.jsx)undefined6261662690(0,jsx_runtime.jsx)undefined6325663332(0,jsx_runtime.jsxs)undefined6333463411(link_default())undefined6376263836(0,jsx_runtime.jsx)undefined6429264366(0,jsx_runtime.jsx)undefined6519765273(0,jsx_runtime.jsxs)undefined6527565354jsx_runtime.Fragmentundefined6546165537(0,jsx_runtime.jsxs)undefined6553965616(link_default())undefined6595966033(0,jsx_runtime.jsx)undefined6653766611(0,jsx_runtime.jsx)undefined6725367327(0,jsx_runtime.jsx)undefined6776667842(0,jsx_runtime.jsxs)undefined6784467923jsx_runtime.Fragmentundefined6804668122(0,jsx_runtime.jsxs)undefined6812468201(link_default())undefined6859468668(0,jsx_runtime.jsx)undefined6917269246(0,jsx_runtime.jsx)undefined6988469960(0,jsx_runtime.jsxs)undefined6996270039(link_default())undefined7043070504(0,jsx_runtime.jsx)undefined7100871082(0,jsx_runtime.jsx)undefined7195272028(0,jsx_runtime.jsxs)undefined7203072109jsx_runtime.Fragmentundefined7223272308(0,jsx_runtime.jsxs)undefined7231072387(link_default())undefined7278872862(0,jsx_runtime.jsx)undefined7341673490(0,jsx_runtime.jsx)undefined7415174227(0,jsx_runtime.jsxs)undefined7459674670(0,jsx_runtime.jsx)undefined7530875384(0,jsx_runtime.jsxs)undefined7538675463(link_default())undefined7585075924(0,jsx_runtime.jsx)undefined7642876502(0,jsx_runtime.jsx)undefined7735277428(0,jsx_runtime.jsxs)undefined7743077507(link_default())undefined7786077934(0,jsx_runtime.jsx)undefined7839078464(0,jsx_runtime.jsx)undefined7916979245(0,jsx_runtime.jsxs)undefined7924779324(link_default())undefined7967579749(0,jsx_runtime.jsx)undefined8021080284(0,jsx_runtime.jsx)undefined8093381009(0,jsx_runtime.jsxs)undefined8101181088(link_default())undefined8142781503(0,jsx_runtime.jsxs)undefined8202282096(0,jsx_runtime.jsx)undefined8295683030(0,jsx_runtime.jsx)undefined8368183757(0,jsx_runtime.jsxs)undefined8375983836(link_default())undefined8418584259(0,jsx_runtime.jsx)undefined8472084794(0,jsx_runtime.jsx)undefined8541285488(0,jsx_runtime.jsxs)undefined8567785759(0,auth/* signOut */.CI)undefined8619386267(0,jsx_runtime.jsx)undefined8671486788(0,jsx_runtime.jsx)undefined8746187537(0,jsx_runtime.jsxs)undefined8753987618jsx_runtime.Fragmentundefined8772587799(0,jsx_runtime.jsx)undefined8780187878(link_default())undefined8827688350(0,jsx_runtime.jsx)undefined8835288429(link_default())undefined8900389077(0,jsx_runtime.jsx)undefined8920589281(0,jsx_runtime.jsxs)undefined8949289566(0,jsx_runtime.jsx)undefined8975789833(0,jsx_runtime.jsxs)undefined8998790061(0,jsx_runtime.jsx)undefined9030690380(0,jsx_runtime.jsx)undefined9066890744(0,jsx_runtime.jsxs)undefined9092290996(0,jsx_runtime.jsx)undefined9137791451(0,jsx_runtime.jsx)undefined9145391530(link_default())undefined /***/ }) ´UH/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; // EXPORTS __webpack_require__.d(__webpack_exports__, { Header: () => (/* binding */ Header) }); // EXTERNAL MODULE: ../../node_modules/next/dist/compiled/react/jsx-runtime.js var jsx_runtime = __webpack_require__(4568); // EXTERNAL MODULE: ../../node_modules/next/dist/client/app-dir/link.js var app_dir_link = __webpack_require__(9664); var link_default = /*#__PURE__*/__webpack_require__.n(app_dir_link); // EXTERNAL MODULE: ../../node_modules/next/dist/api/navigation.js var navigation = __webpack_require__(7541); // EXTERNAL MODULE: ./src/lib/auth.ts var auth = __webpack_require__(1592); // EXTERNAL MODULE: ./src/context/locale.tsx var context_locale = __webpack_require__(9906); // EXTERNAL MODULE: ./src/lib/formatName.ts var formatName = __webpack_require__(1258); // EXTERNAL MODULE: ../../node_modules/next/dist/compiled/react/index.js var react = __webpack_require__(7620); // EXTERNAL MODULE: ./src/lib/translations.ts var translations = __webpack_require__(4962); ;// ./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); var _LOCALES_find; const current = (_LOCALES_find = translations/* LOCALES */.YZ.find((l)=>l.code === locale)) !== null && _LOCALES_find !== void 0 ? _LOCALES_find : translations/* LOCALES */.YZ[0]; // Close on outside click (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,jsx_runtime.jsxs)("div", { ref: ref, className: "relative", children: [ /*#__PURE__*/ (0,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-blue-400 hover:bg-blue-50 transition text-sm font-medium text-gray-700", "aria-label": "Change language", children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)("span", { children: current.code.toUpperCase() }), /*#__PURE__*/ (0,jsx_runtime.jsx)("svg", { className: "w-3.5 h-3.5 text-gray-400 transition-transform ".concat(open ? 'rotate-180' : ''), fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: /*#__PURE__*/ (0,jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19 9l-7 7-7-7" }) }) ] }), open && /*#__PURE__*/ (0,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,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-blue-50 transition ".concat(locale === loc.code ? 'bg-blue-50 text-blue-700 font-medium' : 'text-gray-700'), children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)("span", { children: loc.label }), locale === loc.code && /*#__PURE__*/ (0,jsx_runtime.jsx)("svg", { className: "w-3.5 h-3.5 ml-auto text-blue-600", fill: "currentColor", viewBox: "0 0 20 20", children: /*#__PURE__*/ (0,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__(2982); // EXTERNAL MODULE: ../../node_modules/socket.io-client/build/esm/index.js + 28 modules var esm = __webpack_require__(2838); // EXTERNAL MODULE: ./src/hooks/useEffectiveRole.ts var useEffectiveRole = __webpack_require__(7795); ;// ./src/components/Header.tsx /* __next_internal_client_entry_do_not_use__ Header auto */ const API_URL = "https://api.canhelp.gr" || 0; function Header() { var _session_user; 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 [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); (0,react.useEffect)(()=>{ pathnameRef.current = pathname; }, [ pathname ]); // Close dropdowns on outside click (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 === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.role) === 'admin'; const effectiveRole = (0,useEffectiveRole/* useEffectiveRole */.F)(); const isSpecialist = effectiveRole === 'specialist'; const isActive = function(href) { let exact = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; return exact ? pathname === href : pathname === href || pathname.startsWith(href + '/'); }; const navCls = function(href) { let exact = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; return "font-medium text-sm transition ".concat(isActive(href, exact) ? 'text-blue-600' : 'text-gray-600 hover:text-blue-600'); }; const mobileNavCls = function(href) { let exact = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; return "flex items-center gap-2 font-medium py-1 ".concat(isActive(href, exact) ? 'text-blue-600' : 'text-gray-700'); }; // Reset chat badge when entering chat (0,react.useEffect)(()=>{ if (pathname === '/chat') setUnreadChat(0); }, [ pathname ]); (0,react.useEffect)(()=>{ if (!session) return; const socket = (0,esm.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 ]); (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 ]); (0,react.useEffect)(()=>{ if (!session) { setPlanTier(null); return; } (0,api/* getMyDashboard */.H)().then((d)=>{ var _d_plan; var _d_plan_tier; return setPlanTier((_d_plan_tier = (_d_plan = d.plan) === null || _d_plan === void 0 ? void 0 : _d_plan.tier) !== null && _d_plan_tier !== void 0 ? _d_plan_tier : null); }).catch(()=>{}); }, [ session ]); (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,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,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,jsx_runtime.jsxs)("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: [ /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", { className: "flex items-center justify-between h-16 header-content transition-all duration-300", children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/", className: "flex items-center shrink-0", children: /*#__PURE__*/ (0,jsx_runtime.jsx)("span", { className: "logo-text text-2xl font-bold text-blue-600 transition-all duration-300", children: "CanHelp" }) }), /*#__PURE__*/ (0,jsx_runtime.jsxs)("nav", { className: "hidden md:flex items-center gap-5 ml-auto", children: [ isSpecialist ? /*#__PURE__*/ (0,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/tasks", className: navCls('/tasks'), children: t('nav.find_tasks') }), /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/dashboard", className: navCls('/dashboard'), children: t('nav.dashboard') }) ] }) : /*#__PURE__*/ (0,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/tasks/new", className: navCls('/tasks/new', true), children: t('dashboard.new_task') }), /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/specialists", className: navCls('/specialists'), children: t('nav.specialists') }) ] }), /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/pricing", className: navCls('/pricing', true), children: t('nav.pricing', 'Pricing') }), session ? /*#__PURE__*/ (0,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,jsx_runtime.jsxs)((link_default()), { href: "/notifications", className: "relative text-gray-600 hover:text-gray-900 flex items-center", children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)("svg", { className: "w-5 h-5 ".concat(unreadNotif > 0 ? 'text-orange-500' : ''), fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: /*#__PURE__*/ (0,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,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,jsx_runtime.jsxs)((link_default()), { href: "/chat", className: "relative text-gray-600 hover:text-gray-900 flex items-center", children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)("svg", { className: "w-5 h-5 ".concat(unreadChat > 0 ? 'text-green-500' : ''), fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: /*#__PURE__*/ (0,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,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,jsx_runtime.jsxs)("div", { className: "relative", ref: profileRef, children: [ /*#__PURE__*/ (0,jsx_runtime.jsxs)("button", { onClick: ()=>setProfileOpen(!profileOpen), className: "flex items-center gap-1.5 text-sm font-medium text-gray-600 hover:text-blue-600", children: [ /*#__PURE__*/ (0,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,jsx_runtime.jsx)("span", { className: "inline-flex items-center px-1.5 py-0.5 rounded-full text-[10px] font-bold bg-blue-100 text-blue-700 leading-none", children: "Pro" }), planTier === 'ultimate' && /*#__PURE__*/ (0,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,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,jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19 9l-7 7-7-7" }) }) ] }), profileOpen && /*#__PURE__*/ (0,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,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,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,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,jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 4v16m8-8H4" }) }), t('nav.new_task') ] }), /*#__PURE__*/ (0,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,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,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,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,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,jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0 ".concat(unreadNotif > 0 ? 'text-orange-500' : 'text-gray-400'), fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,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,jsx_runtime.jsxs)("span", { className: "flex items-center gap-1.5", children: [ t('nav.notifications'), unreadNotif > 0 && /*#__PURE__*/ (0,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,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,jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0 ".concat(unreadChat > 0 ? 'text-green-500' : 'text-gray-400'), fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,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,jsx_runtime.jsxs)("span", { className: "flex items-center gap-1.5", children: [ t('nav.chat'), unreadChat > 0 && /*#__PURE__*/ (0,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,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,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,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') ] }) ] }), isAdmin && /*#__PURE__*/ (0,jsx_runtime.jsxs)((link_default()), { href: "/tasks", 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,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,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') ] }), (isSpecialist || isAdmin) && /*#__PURE__*/ (0,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,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,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,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,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,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,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,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,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,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,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,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,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,jsx_runtime.jsx)("hr", { className: "my-1 border-gray-100" }), /*#__PURE__*/ (0,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,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,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,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/login", className: "text-gray-600 hover:text-blue-600 font-medium text-sm", children: t('nav.login') }), /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/register", className: "bg-blue-600 text-white px-4 py-2 rounded-lg hover:bg-blue-700 font-medium text-sm", children: t('nav.register') }) ] }), /*#__PURE__*/ (0,jsx_runtime.jsx)(LanguageSwitcher, {}) ] }), /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", { className: "md:hidden flex items-center gap-2", children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)(LanguageSwitcher, {}), /*#__PURE__*/ (0,jsx_runtime.jsx)("button", { className: "p-2", onClick: ()=>setMenuOpen(!menuOpen), "aria-label": "Toggle menu", children: /*#__PURE__*/ (0,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,jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6 18L18 6M6 6l12 12" }) : /*#__PURE__*/ (0,jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4 6h16M4 12h16M4 18h16" }) }) }) ] }) ] }), menuOpen && /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", { className: "md:hidden py-4 border-t border-gray-100 flex flex-col gap-3", children: [ isSpecialist ? /*#__PURE__*/ (0,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,jsx_runtime.jsxs)((link_default()), { href: "/tasks", className: mobileNavCls('/tasks'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,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,jsx_runtime.jsxs)((link_default()), { href: "/dashboard", className: mobileNavCls('/dashboard'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,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,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,jsx_runtime.jsxs)((link_default()), { href: "/tasks/new", className: mobileNavCls('/tasks/new', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 4v16m8-8H4" }) }), t('nav.new_task') ] }), /*#__PURE__*/ (0,jsx_runtime.jsxs)((link_default()), { href: "/specialists", className: mobileNavCls('/specialists'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,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,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,jsx_runtime.jsxs)((link_default()), { href: "/chat", className: mobileNavCls('/chat', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0 ".concat(unreadChat > 0 ? 'text-green-500' : ''), fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,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,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,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,jsx_runtime.jsxs)((link_default()), { href: "/tasks/new", className: mobileNavCls('/tasks/new', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 4v16m8-8H4" }) }), t('nav.new_task') ] }), /*#__PURE__*/ (0,jsx_runtime.jsxs)((link_default()), { href: "/specialists", className: mobileNavCls('/specialists'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,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,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,jsx_runtime.jsxs)((link_default()), { href: "/notifications", className: mobileNavCls('/notifications', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0 ".concat(unreadNotif > 0 ? 'text-orange-500' : ''), fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,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,jsx_runtime.jsxs)("span", { className: "flex items-center gap-1.5", children: [ t('nav.notifications'), unreadNotif > 0 && /*#__PURE__*/ (0,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,jsx_runtime.jsxs)((link_default()), { href: "/dashboard", className: mobileNavCls('/dashboard'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,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,jsx_runtime.jsxs)((link_default()), { href: "/favorites", className: mobileNavCls('/favorites', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,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,jsx_runtime.jsxs)((link_default()), { href: "/schedule", className: mobileNavCls('/schedule', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,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,jsx_runtime.jsxs)((link_default()), { href: "/admin", className: mobileNavCls('/admin'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,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,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,jsx_runtime.jsxs)((link_default()), { href: "/profile", className: mobileNavCls('/profile', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,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,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,jsx_runtime.jsx)("svg", { className: "w-4 h-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,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,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/login", className: "text-gray-700 font-medium py-1", onClick: ()=>setMenuOpen(false), children: t('nav.login') }), /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/register", className: "text-blue-600 font-medium py-1", onClick: ()=>setMenuOpen(false), children: t('nav.register') }) ] }) ] }) ] }) }), msgToast && /*#__PURE__*/ (0,jsx_runtime.jsx)("div", { className: "fixed bottom-5 right-5 z-[200] max-w-sm w-full", children: /*#__PURE__*/ (0,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,jsx_runtime.jsx)("span", { className: "text-2xl shrink-0", children: "\uD83D\uDCAC" }), /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", { className: "flex-1 min-w-0", children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)("p", { className: "font-semibold text-gray-900 text-sm", children: t('chat.toast_title') }), /*#__PURE__*/ (0,jsx_runtime.jsx)("p", { className: "text-xs text-gray-500 truncate mt-0.5", children: msgToast.body }) ] }), /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", { className: "flex flex-col items-end gap-2 shrink-0", children: [ /*#__PURE__*/ (0,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,jsx_runtime.jsx)((link_default()), { href: "/chat?room=".concat(msgToast.roomId), onClick: ()=>setMsgToast(null), className: "text-xs text-blue-600 hover:underline font-medium", children: t('chat.toast_open') }) ] }) ] }) }) ] }); } /***/ }) µ¸ `¹º¹ // EXPORTS __webpack_require__.d(__webpack_exports__, { Header: () => (/* binding */ Header) }); // EXTERNAL MODULE: ../../node_modules/next/dist/compiled/react/jsx-runtime.js var jsx_runtime = __webpack_require__(4568); // EXTERNAL MODULE: ../../node_modules/next/dist/client/app-dir/link.js var app_dir_link = __webpack_require__(9664); var link_default = /*#__PURE__*/__webpack_require__.n(app_dir_link); // EXTERNAL MODULE: ../../node_modules/next/dist/api/navigation.js var navigation = __webpack_require__(7541); // EXTERNAL MODULE: ./src/lib/auth.ts var auth = __webpack_require__(1592); // EXTERNAL MODULE: ./src/context/locale.tsx var context_locale = __webpack_require__(9906); // EXTERNAL MODULE: ./src/lib/formatName.ts var formatName = __webpack_require__(1258); // EXTERNAL MODULE: ../../node_modules/next/dist/compiled/react/index.js var react = __webpack_require__(7620); // EXTERNAL MODULE: ./src/lib/translations.ts var translations = __webpack_require__(4962); ;// ./src/components/LanguageSwitcher.tsx  ReplaceSourceº“/* __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); var _LOCALES_find; const current = (_LOCALES_find = LOCALES.find((l)=>l.code === locale)) !== null && _LOCALES_find !== void 0 ? _LOCALES_find : LOCALES[0]; // Close on outside click 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-blue-400 hover:bg-blue-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 ".concat(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-blue-50 transition ".concat(locale === loc.code ? 'bg-blue-50 text-blue-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-blue-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__._undefined498504__WEBPACK_MODULE_REFERENCE__7_5b224c4f43414c4553225d_call_asiSafe1__._undefined591597__WEBPACK_MODULE_REFERENCE__7_5b224c4f43414c4553225d_asiSafe1__._undefined637645__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined950954__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined10601064__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined14221425__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined15561559__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined19091912__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined21952198__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined23662372__WEBPACK_MODULE_REFERENCE__7_5b224c4f43414c4553225d_call_asiSafe1__._undefined23992403__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined28632866__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined30273030__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined32853288__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined‹138224(0,context_locale/* useLocale */.Y)undefined257341(0,react.useState)undefined367447(0,react.useRef)undefined516585translations/* LOCALES */.YZundefined672736translations/* LOCALES */.YZundefined776862(0,react.useEffect)undefined11671243(0,jsx_runtime.jsxs)undefined13491425(0,jsx_runtime.jsxs)undefined17831857(0,jsx_runtime.jsx)undefined19882062(0,jsx_runtime.jsx)undefined24122486(0,jsx_runtime.jsx)undefined27692843(0,jsx_runtime.jsx)undefined30113080translations/* LOCALES */.YZundefined31073183(0,jsx_runtime.jsxs)undefined36433717(0,jsx_runtime.jsx)undefined38783952(0,jsx_runtime.jsx)undefined42074281(0,jsx_runtime.jsx)undefinedRawSourceN // EXTERNAL MODULE: ./src/lib/api.ts var api = __webpack_require__(2982); // EXTERNAL MODULE: ../../node_modules/socket.io-client/build/esm/index.js + 28 modules var esm = __webpack_require__(2838); // EXTERNAL MODULE: ./src/hooks/useEffectiveRole.ts var useEffectiveRole = __webpack_require__(7795); ;// ./src/components/Header.tsx û¶ý)/* __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'; const API_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:4000'; export function Header() { var _session_user; 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 [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); useEffect(()=>{ pathnameRef.current = pathname; }, [ pathname ]); // Close dropdowns on outside click 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 === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.role) === 'admin'; const effectiveRole = useEffectiveRole(); const isSpecialist = effectiveRole === 'specialist'; const isActive = function(href) { let exact = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; return exact ? pathname === href : pathname === href || pathname.startsWith(href + '/'); }; const navCls = function(href) { let exact = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; return "font-medium text-sm transition ".concat(isActive(href, exact) ? 'text-blue-600' : 'text-gray-600 hover:text-blue-600'); }; const mobileNavCls = function(href) { let exact = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; return "flex items-center gap-2 font-medium py-1 ".concat(isActive(href, exact) ? 'text-blue-600' : 'text-gray-700'); }; // Reset chat badge when entering chat useEffect(()=>{ if (pathname === '/chat') setUnreadChat(0); }, [ pathname ]); 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 ]); 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 ]); useEffect(()=>{ if (!session) { setPlanTier(null); return; } getMyDashboard().then((d)=>{ var _d_plan; var _d_plan_tier; return setPlanTier((_d_plan_tier = (_d_plan = d.plan) === null || _d_plan === void 0 ? void 0 : _d_plan.tier) !== null && _d_plan_tier !== void 0 ? _d_plan_tier : null); }).catch(()=>{}); }, [ session ]); 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__*/ _jsx(Link, { href: "/", className: "flex items-center shrink-0", children: /*#__PURE__*/ _jsx("span", { className: "logo-text text-2xl font-bold text-blue-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: "/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 ".concat(unreadNotif > 0 ? 'text-orange-500' : ''), 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 ".concat(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-blue-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-blue-100 text-blue-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 ".concat(unreadNotif > 0 ? 'text-orange-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: "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 ".concat(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') ] }) ] }), isAdmin && /*#__PURE__*/ _jsxs(Link, { href: "/tasks", 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: "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" }) }), t('nav.find_tasks') ] }), (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-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-blue-600 font-medium text-sm", children: t('nav.login') }), /*#__PURE__*/ _jsx(Link, { href: "/register", className: "bg-blue-600 text-white px-4 py-2 rounded-lg hover:bg-blue-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: "/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 ".concat(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 ".concat(unreadNotif > 0 ? 'text-orange-500' : ''), 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-blue-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=".concat(msgToast.roomId), onClick: ()=>setMsgToast(null), className: "text-xs text-blue-600 hover:underline font-medium", children: t('chat.toast_open') }) ] }) ] }) }) ] }); } ¥U60145undefined147175undefined177233undefined235283undefined285329undefined331381undefined383436undefined438489undefined491549undefined551588undefined590649undefined667697"https://api.canhelp.gr"undefined7027240undefined727733undefined796804__WEBPACK_MODULE_REFERENCE__2_5b22757365526f75746572225d_call_directImport_asiSafe1__._undefined830840__WEBPACK_MODULE_REFERENCE__2_5b22757365506174686e616d65225d_call_directImport_asiSafe1__._undefined875884__WEBPACK_MODULE_REFERENCE__3_5b2275736553657373696f6e225d_call_directImport_asiSafe1__._undefined915923__WEBPACK_MODULE_REFERENCE__4_5b227573654c6f63616c65225d_call_directImport_asiSafe1__._undefined964971__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined10231030__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined10821089__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined11351142__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined11841191__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined12361243__WEBPACK_MODULE_REFERENCE__6_5b227573655374617465225d_call_directImport_asiSafe1__._undefined12751280__WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._undefined13111316__WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._undefined13481353__WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._undefined13861391__WEBPACK_MODULE_REFERENCE__6_5b22757365526566225d_call_directImport_asiSafe1__._undefined14081416__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined15421550__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined20922107__WEBPACK_MODULE_REFERENCE__11_5b22757365456666656374697665526f6c65225d_call_directImport_asiSafe1__._undefined29882996__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined30943102__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined31633164__WEBPACK_MODULE_REFERENCE__10_5b22696f225d_call_directImport_asiSafe1__._undefined38153823__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined39423955__WEBPACK_MODULE_REFERENCE__9_5b22676574556e72656164436f756e74225d_call_directImport_asiSafe1__._undefined41534161__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined42624275__WEBPACK_MODULE_REFERENCE__9_5b226765744d7944617368626f617264225d_call_directImport_asiSafe1__._undefined45914599__WEBPACK_MODULE_REFERENCE__6_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined50595063__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined50655073__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined51245127__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined53355339__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined54935497__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined57185721__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined57235726__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined59155918__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined62366240__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined64606464__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined64666474__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined65976600__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined66026605__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined69556958__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined69606963__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined73627366__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined73687376__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined74997502__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined75047507__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined78757878__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined78807883__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined83278330__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined83328335__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined86738677__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined86798687__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined88108814__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined88168819__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined91619164__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined97099712__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1039210395__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1097310977__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1097910982__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined1131511318__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1186111864__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1249112494__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1307213076__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1336513369__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1379013793__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1398814002__WEBPACK_MODULE_REFERENCE__5_5b22666f726d617453686f72744e616d65225d_call_directImport_asiSafe1__._undefined1423814241__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1470514708__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1522115224__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1577415777__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1641916423__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1676316767__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1676916777__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined1694816952__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1695416957__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined1751717520__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1818218185__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined1903919043__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined1904519048__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined1961019613__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2027520278__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2138821392__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2139421402__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined2157321577__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2157921582__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined2214622149__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2286022863__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2366823672__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2413724140__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2498324987__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2498924992__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined2554725550__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2625926262__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2701527019__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2747427477__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2832028324__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined2832628329__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined2888928892__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined2955429557__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3068230686__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3068830691__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined3120731210__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3182431827__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3266932673__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3267532678__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined3319733200__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3381433817__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3468234686__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3468834691__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined3520735211__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3590735910__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3689036893__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3778437788__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3779037793__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined3831138314__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3892838931__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined3976539769__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined3977139774__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined4029440297__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4091140914__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4180641809__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4206742071__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4249742503__WEBPACK_MODULE_REFERENCE__3_5b227369676e4f7574225d_call_directImport_asiSafe1__._undefined4293542938__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4353843541__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4464844652__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4465444662__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined4478544788__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4479044793__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined4517745180__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4518245185__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined4568445687__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4568945704__WEBPACK_MODULE_REFERENCE__8_5b224c616e67756167655377697463686572225d_directImport_asiSafe1__._undefined4583145835__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4603246035__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4603746052__WEBPACK_MODULE_REFERENCE__8_5b224c616e67756167655377697463686572225d_directImport_asiSafe1__._undefined4611446117__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4641546418__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4686446867__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4717747180__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4774847752__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4796647970__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4797247980__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined4808748091__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4809348096__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined4843548438__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4889448897__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined4949449498__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined4950049503__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined4985049853__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5030950312__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5104351047__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5104951057__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined5116451168__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5117051173__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5152651529__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5198551988__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5255452558__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5256052563__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5291452917__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5337353376__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5420754211__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5421354221__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined5432854332__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5433454337__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5468054683__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5518755190__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5583255835__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5627456278__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5628056288__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined5641156415__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5641756420__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5681356816__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5732057323__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5796157965__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5796757970__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined5836158364__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5886858871__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined5974159745__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5974759755__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined5987859882__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined5988459887__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6028860291__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6084560848__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6150961513__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6188261885__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6252362527__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6252962532__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6291962922__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6342663429__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6427964283__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6428564288__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6464164644__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6510065103__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6580865812__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6581465817__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6616866171__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6663266635__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6728467288__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6729067293__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined6763267636__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6815568158__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6901869021__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined6967269676__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined6967869681__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined7003070033__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7049470497__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7111571119__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7130871314__WEBPACK_MODULE_REFERENCE__3_5b227369676e4f7574225d_call_directImport_asiSafe1__._undefined7174871751__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7219872201__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7287472878__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7288072888__WEBPACK_MODULE_REFERENCE__0_5b22467261676d656e74225d_directImport_asiSafe1__._undefined7299572998__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7300073003__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined7340173404__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7340673409__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined7398373986__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7411474118__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7432974332__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7452374527__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7468174684__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7492974932__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7522075224__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined7540275405__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7578675789__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined7579175794__WEBPACK_MODULE_REFERENCE__1_5b2264656661756c74225d_directImport_asiSafe1__._undefined+!180266(0,navigation.useRouter)undefined292382(0,navigation.usePathname)undefined417505(0,auth/* useSession */.wV)undefined536622(0,context_locale/* useLocale */.Y)undefined663747(0,react.useState)undefined799883(0,react.useState)undefined9351019(0,react.useState)undefined10651149(0,react.useState)undefined11911275(0,react.useState)undefined13201404(0,react.useState)undefined14361516(0,react.useRef)undefined15471627(0,react.useRef)undefined16591739(0,react.useRef)undefined17721852(0,react.useRef)undefined18691955(0,react.useEffect)undefined20812167(0,react.useEffect)undefined27092810(0,useEffectiveRole/* useEffectiveRole */.F)undefined36913777(0,react.useEffect)undefined38753961(0,react.useEffect)undefined40224095(0,esm.io)undefined47464832(0,react.useEffect)undefined49515047(0,api/* getUnreadCount */.$M)undefined52455331(0,react.useEffect)undefined54325528(0,api/* getMyDashboard */.H)undefined58445930(0,react.useEffect)undefined63906466(0,jsx_runtime.jsxs)undefined64686547jsx_runtime.Fragmentundefined65986672(0,jsx_runtime.jsx)undefined68806956(0,jsx_runtime.jsxs)undefined71107186(0,jsx_runtime.jsxs)undefined74077481(0,jsx_runtime.jsx)undefined74837560(link_default())undefined77497823(0,jsx_runtime.jsx)undefined81418217(0,jsx_runtime.jsxs)undefined84378513(0,jsx_runtime.jsxs)undefined85158594jsx_runtime.Fragmentundefined87178791(0,jsx_runtime.jsx)undefined87938870(link_default())undefined92209294(0,jsx_runtime.jsx)undefined92969373(link_default())undefined97729848(0,jsx_runtime.jsxs)undefined98509929jsx_runtime.Fragmentundefined1005210126(0,jsx_runtime.jsx)undefined1012810205(link_default())undefined1057310647(0,jsx_runtime.jsx)undefined1064910726(link_default())undefined1117011244(0,jsx_runtime.jsx)undefined1124611323(link_default())undefined1166111737(0,jsx_runtime.jsxs)undefined1173911818jsx_runtime.Fragmentundefined1194112017(0,jsx_runtime.jsxs)undefined1201912096(link_default())undefined1243812512(0,jsx_runtime.jsx)undefined1305713131(0,jsx_runtime.jsx)undefined1381113885(0,jsx_runtime.jsx)undefined1446314539(0,jsx_runtime.jsxs)undefined1454114618(link_default())undefined1495115025(0,jsx_runtime.jsx)undefined1556815642(0,jsx_runtime.jsx)undefined1626916343(0,jsx_runtime.jsx)undefined1692116997(0,jsx_runtime.jsxs)undefined1728617362(0,jsx_runtime.jsxs)undefined1778317857(0,jsx_runtime.jsx)undefined1805218150(0,formatName/* formatShortName */.H)undefined1838618460(0,jsx_runtime.jsx)undefined1892418998(0,jsx_runtime.jsx)undefined1951119585(0,jsx_runtime.jsx)undefined2013520209(0,jsx_runtime.jsx)undefined2085120927(0,jsx_runtime.jsxs)undefined2126721343(0,jsx_runtime.jsxs)undefined2134521424jsx_runtime.Fragmentundefined2159521671(0,jsx_runtime.jsxs)undefined2167321750(link_default())undefined2231022384(0,jsx_runtime.jsx)undefined2304623120(0,jsx_runtime.jsx)undefined2397424050(0,jsx_runtime.jsxs)undefined2405224129(link_default())undefined2469124765(0,jsx_runtime.jsx)undefined2542725501(0,jsx_runtime.jsx)undefined2661126687(0,jsx_runtime.jsxs)undefined2668926768jsx_runtime.Fragmentundefined2693927015(0,jsx_runtime.jsxs)undefined2701727094(link_default())undefined2765827732(0,jsx_runtime.jsx)undefined2844328517(0,jsx_runtime.jsx)undefined2932229398(0,jsx_runtime.jsxs)undefined2986329937(0,jsx_runtime.jsx)undefined3078030856(0,jsx_runtime.jsxs)undefined3085830935(link_default())undefined3149031564(0,jsx_runtime.jsx)undefined3227332347(0,jsx_runtime.jsx)undefined3310033176(0,jsx_runtime.jsxs)undefined3363133705(0,jsx_runtime.jsx)undefined3454834624(0,jsx_runtime.jsxs)undefined3462634703(link_default())undefined3526335337(0,jsx_runtime.jsx)undefined3599936073(0,jsx_runtime.jsx)undefined3719837274(0,jsx_runtime.jsxs)undefined3727637353(link_default())undefined3786937943(0,jsx_runtime.jsx)undefined3855738631(0,jsx_runtime.jsx)undefined3947339549(0,jsx_runtime.jsxs)undefined3955139628(link_default())undefined4014740221(0,jsx_runtime.jsx)undefined4083540909(0,jsx_runtime.jsx)undefined4177441850(0,jsx_runtime.jsxs)undefined4185241929(link_default())undefined4244542521(0,jsx_runtime.jsxs)undefined4321743291(0,jsx_runtime.jsx)undefined4427144345(0,jsx_runtime.jsx)undefined4523645312(0,jsx_runtime.jsxs)undefined4531445391(link_default())undefined4590945983(0,jsx_runtime.jsx)undefined4659746671(0,jsx_runtime.jsx)undefined4750547581(0,jsx_runtime.jsxs)undefined4758347660(link_default())undefined4818048254(0,jsx_runtime.jsx)undefined4886848942(0,jsx_runtime.jsx)undefined4983449908(0,jsx_runtime.jsx)undefined5016650242(0,jsx_runtime.jsxs)undefined5066850750(0,auth/* signOut */.CI)undefined5118251256(0,jsx_runtime.jsx)undefined5185651930(0,jsx_runtime.jsx)undefined5303753113(0,jsx_runtime.jsxs)undefined5311553194jsx_runtime.Fragmentundefined5331753391(0,jsx_runtime.jsx)undefined5339353470(link_default())undefined5385453928(0,jsx_runtime.jsx)undefined5393054007(link_default())undefined5450654580(0,jsx_runtime.jsx)undefined5458254677LanguageSwitcherundefined5480454880(0,jsx_runtime.jsxs)undefined5507755151(0,jsx_runtime.jsx)undefined5515355248LanguageSwitcherundefined5531055384(0,jsx_runtime.jsx)undefined5568255756(0,jsx_runtime.jsx)undefined5620256276(0,jsx_runtime.jsx)undefined5658656660(0,jsx_runtime.jsx)undefined5722857304(0,jsx_runtime.jsxs)undefined5751857594(0,jsx_runtime.jsxs)undefined5759657675jsx_runtime.Fragmentundefined5778257858(0,jsx_runtime.jsxs)undefined5786057937(link_default())undefined5827658350(0,jsx_runtime.jsx)undefined5880658880(0,jsx_runtime.jsx)undefined5947759553(0,jsx_runtime.jsxs)undefined5955559632(link_default())undefined5997960053(0,jsx_runtime.jsx)undefined6050960583(0,jsx_runtime.jsx)undefined6131461390(0,jsx_runtime.jsxs)undefined6139261471jsx_runtime.Fragmentundefined6157861654(0,jsx_runtime.jsxs)undefined6165661733(link_default())undefined6208662160(0,jsx_runtime.jsx)undefined6261662690(0,jsx_runtime.jsx)undefined6325663332(0,jsx_runtime.jsxs)undefined6333463411(link_default())undefined6376263836(0,jsx_runtime.jsx)undefined6429264366(0,jsx_runtime.jsx)undefined6519765273(0,jsx_runtime.jsxs)undefined6527565354jsx_runtime.Fragmentundefined6546165537(0,jsx_runtime.jsxs)undefined6553965616(link_default())undefined6595966033(0,jsx_runtime.jsx)undefined6653766611(0,jsx_runtime.jsx)undefined6725367327(0,jsx_runtime.jsx)undefined6776667842(0,jsx_runtime.jsxs)undefined6784467923jsx_runtime.Fragmentundefined6804668122(0,jsx_runtime.jsxs)undefined6812468201(link_default())undefined6859468668(0,jsx_runtime.jsx)undefined6917269246(0,jsx_runtime.jsx)undefined6988469960(0,jsx_runtime.jsxs)undefined6996270039(link_default())undefined7043070504(0,jsx_runtime.jsx)undefined7100871082(0,jsx_runtime.jsx)undefined7195272028(0,jsx_runtime.jsxs)undefined7203072109jsx_runtime.Fragmentundefined7223272308(0,jsx_runtime.jsxs)undefined7231072387(link_default())undefined7278872862(0,jsx_runtime.jsx)undefined7341673490(0,jsx_runtime.jsx)undefined7415174227(0,jsx_runtime.jsxs)undefined7459674670(0,jsx_runtime.jsx)undefined7530875384(0,jsx_runtime.jsxs)undefined7538675463(link_default())undefined7585075924(0,jsx_runtime.jsx)undefined7642876502(0,jsx_runtime.jsx)undefined7735277428(0,jsx_runtime.jsxs)undefined7743077507(link_default())undefined7786077934(0,jsx_runtime.jsx)undefined7839078464(0,jsx_runtime.jsx)undefined7916979245(0,jsx_runtime.jsxs)undefined7924779324(link_default())undefined7967579749(0,jsx_runtime.jsx)undefined8021080284(0,jsx_runtime.jsx)undefined8093381009(0,jsx_runtime.jsxs)undefined8101181088(link_default())undefined8142781503(0,jsx_runtime.jsxs)undefined8202282096(0,jsx_runtime.jsx)undefined8295683030(0,jsx_runtime.jsx)undefined8368183757(0,jsx_runtime.jsxs)undefined8375983836(link_default())undefined8418584259(0,jsx_runtime.jsx)undefined8472084794(0,jsx_runtime.jsx)undefined8541285488(0,jsx_runtime.jsxs)undefined8567785759(0,auth/* signOut */.CI)undefined8619386267(0,jsx_runtime.jsx)undefined8671486788(0,jsx_runtime.jsx)undefined8746187537(0,jsx_runtime.jsxs)undefined8753987618jsx_runtime.Fragmentundefined8772587799(0,jsx_runtime.jsx)undefined8780187878(link_default())undefined8827688350(0,jsx_runtime.jsx)undefined8835288429(link_default())undefined8900389077(0,jsx_runtime.jsx)undefined8920589281(0,jsx_runtime.jsxs)undefined8949289566(0,jsx_runtime.jsx)undefined8975789833(0,jsx_runtime.jsxs)undefined8998790061(0,jsx_runtime.jsx)undefined9030690380(0,jsx_runtime.jsx)undefined9066890744(0,jsx_runtime.jsxs)undefined9092290996(0,jsx_runtime.jsx)undefined9137791451(0,jsx_runtime.jsx)undefined9145391530(link_default())undefined¶·, /***/ 7795:  ê«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSource_/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; «webpack/lib/util/registerExternalSerializerœwebpack-sources/CachedSource o «webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSourceR/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ F: () => (/* binding */ useEffectiveRole) /* harmony export */ }); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1592); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); «webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSourceT/* __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=([^;]+)/); var _m_; return (_m_ = m === null || m === void 0 ? void 0 : m[1]) !== null && _m_ !== void 0 ? _m_ : 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() { var _session_user; const { data: session } = useSession(); const userRole = session === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.role; const isAdmin = userRole === 'admin'; const [previewRole, setPreviewRole] = useState(null); 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š“™íöù €€€¿(0,_lib_auth__WEBPACK_IMPORTED_MODULE_0__/* .useSession */ .wV)¯(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)°(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)€†buffer†source„size„maps„hashÎ/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ F: () => (/* binding */ useEffectiveRole) /* harmony export */ }); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1592); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* __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=([^;]+)/); var _m_; return (_m_ = m === null || m === void 0 ? void 0 : m[1]) !== null && _m_ !== void 0 ? _m_ : 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() { var _session_user; const { data: session } = (0,_lib_auth__WEBPACK_IMPORTED_MODULE_0__/* .useSession */ .wV)(); const userRole = session === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.role; const isAdmin = userRole === 'admin'; const [previewRole, setPreviewRole] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null); (0,react__WEBPACK_IMPORTED_MODULE_1__.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; } €”{"finalSource":true}ƒmap‹bufferedMap ConcatSourceRawSourceR/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ F: () => (/* binding */ useEffectiveRole) /* harmony export */ }); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1592); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); ReplaceSourceRawSourceT/* __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=([^;]+)/); var _m_; return (_m_ = m === null || m === void 0 ? void 0 : m[1]) !== null && _m_ !== void 0 ? _m_ : 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() { var _session_user; const { data: session } = useSession(); const userRole = session === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.role; const isAdmin = userRole === 'admin'; const [previewRole, setPreviewRole] = useState(null); 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; } û70109undefined111154undefined659665undefined749758(0,_lib_auth__WEBPACK_IMPORTED_MODULE_0__/* .useSession */ .wV)undefined10171024(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined10371045(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined /***/ }) £7/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ F: () => (/* binding */ useEffectiveRole) /* harmony export */ }); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1592); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* __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=([^;]+)/); var _m_; return (_m_ = m === null || m === void 0 ? void 0 : m[1]) !== null && _m_ !== void 0 ? _m_ : 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() { var _session_user; const { data: session } = (0,_lib_auth__WEBPACK_IMPORTED_MODULE_0__/* .useSession */ .wV)(); const userRole = session === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.role; const isAdmin = userRole === 'admin'; const [previewRole, setPreviewRole] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null); (0,react__WEBPACK_IMPORTED_MODULE_1__.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; } /***/ }) ¤§  ¨©¨R/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ F: () => (/* binding */ useEffectiveRole) /* harmony export */ }); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1592); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); ªT/* __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=([^;]+)/); var _m_; return (_m_ = m === null || m === void 0 ? void 0 : m[1]) !== null && _m_ !== void 0 ? _m_ : 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() { var _session_user; const { data: session } = useSession(); const userRole = session === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.role; const isAdmin = userRole === 'admin'; const [previewRole, setPreviewRole] = useState(null); 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; } û70109undefined111154undefined659665undefined749758(0,_lib_auth__WEBPACK_IMPORTED_MODULE_0__/* .useSession */ .wV)undefined10171024(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined10371045(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined«¬, /***/ 8761:  †«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSource/***/ (() => { «webpack/lib/util/registerExternalSerializerœwebpack-sources/CachedSource Ä«webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSource«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSource'// extracted by mini-css-extract-plugin €†buffer†source„size„maps„hash'// extracted by mini-css-extract-plugin €”{"finalSource":true}ƒmap‹bufferedMap ReplaceSourceRawSourceø /***/ }) ˜A/***/ (() => { // extracted by mini-css-extract-plugin /***/ }) ™œ /***/ (() => { Ÿ'// extracted by mini-css-extract-plugin ¡, /***/ 9808:  #A«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSource_/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; «webpack/lib/util/registerExternalSerializerœwebpack-sources/CachedSource ¾«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSource† // EXPORTS __webpack_require__.d(__webpack_exports__, { Footer: () => (/* binding */ Footer) }); // EXTERNAL MODULE: ../../node_modules/next/dist/compiled/react/jsx-runtime.js var jsx_runtime = __webpack_require__(4568); // EXTERNAL MODULE: ./src/context/locale.tsx var locale = __webpack_require__(9906); // EXTERNAL MODULE: ../../node_modules/next/dist/compiled/react/index.js var react = __webpack_require__(7620); // EXTERNAL MODULE: ../../node_modules/next/dist/client/app-dir/link.js var app_dir_link = __webpack_require__(9664); var link_default = /*#__PURE__*/__webpack_require__.n(app_dir_link); ;// ./src/components/SocialIcons.tsx «webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSource«webpack/lib/util/registerExternalSerializerœwebpack-sources/CachedSource I«webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSource«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSource1import { 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-blue-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(param) { let { className = '', links } = param; const active = ICONS.filter((param)=>{ let { key } = param; return links === null || links === void 0 ? void 0 : links[key]; }); if (active.length === 0) return null; return /*#__PURE__*/ _jsx("div", { className: "flex gap-4 flex-wrap ".concat(className), children: active.map((param)=>{ let { key, label, hoverClass, svg } = param; return /*#__PURE__*/ _jsx("a", { href: links[key], target: "_blank", rel: "noopener noreferrer", "aria-label": label, className: "text-gray-500 transition ".concat(hoverClass), children: /*#__PURE__*/ _jsx("svg", { width: "22", height: "22", viewBox: "0 0 24 24", fill: "currentColor", dangerouslySetInnerHTML: { __html: svg } }) }, key); }) }); } `/GØÞÒտ退Ë__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._ÿÿ€†buffer†source„size„maps„hashÏ 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-blue-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(param) { let { className = '', links } = param; const active = ICONS.filter((param)=>{ let { key } = param; return links === null || links === void 0 ? void 0 : 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 ".concat(className), children: active.map((param)=>{ let { key, label, hoverClass, svg } = param; return /*#__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 ".concat(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}ƒmap‹bufferedMap ReplaceSourceRawSource1import { 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-blue-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(param) { let { className = '', links } = param; const active = ICONS.filter((param)=>{ let { key } = param; return links === null || links === void 0 ? void 0 : links[key]; }); if (active.length === 0) return null; return /*#__PURE__*/ _jsx("div", { className: "flex gap-4 flex-wrap ".concat(className), children: active.map((param)=>{ let { key, label, hoverClass, svg } = param; return /*#__PURE__*/ _jsx("a", { href: links[key], target: "_blank", rel: "noopener noreferrer", "aria-label": label, className: "text-gray-500 transition ".concat(hoverClass), children: /*#__PURE__*/ _jsx("svg", { width: "22", height: "22", viewBox: "0 0 24 24", fill: "currentColor", dangerouslySetInnerHTML: { __html: svg } }) }, key); }) }); } 1047undefined63606366undefined66606663__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined68666869__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined71427145__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefinedEÍâ,=‡“(0,jsx_runtime.jsx)ÿÿ! ;// ./src/components/Footer.tsx  Ô«webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSource«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSourceQ/* __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({}); useEffect(()=>{ fetch("".concat(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-blue-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-blue-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-blue-600 transition", children: t('nav.home') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/tasks", className: "hover:text-blue-600 transition", children: t('nav.tasks') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/become-specialist", className: "hover:text-blue-600 transition", children: t('nav.specialists') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/pricing", className: "hover:text-blue-600 transition", children: t('nav.pricing') }) }) ] }) ] }), /*#__PURE__*/ _jsxs("div", { className: "flex-1 min-w-[180px]", children: [ /*#__PURE__*/ _jsx("h3", { className: "text-lg font-semibold text-blue-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&{ fetch("".concat(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-blue-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-blue-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-blue-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-blue-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: "/become-specialist", className: "hover:text-blue-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-blue-600 transition", children: t('nav.pricing') }) }) ] }) ] }), /*#__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-blue-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') ] }) ] }) }); } ïò óQ/* __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({}); useEffect(()=>{ fetch("".concat(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-blue-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-blue-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-blue-600 transition", children: t('nav.home') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/tasks", className: "hover:text-blue-600 transition", children: t('nav.tasks') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/become-specialist", className: "hover:text-blue-600 transition", children: t('nav.specialists') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/pricing", className: "hover:text-blue-600 transition", children: t('nav.pricing') }) }) ] }) ] }), /*#__PURE__*/ _jsxs("div", { className: "flex-1 min-w-[180px]", children: [ /*#__PURE__*/ _jsx("h3", { className: "text-lg font-semibold text-blue-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__._undefined523531__WEBPACK_MODULE_REFERENCE__2_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined898901__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined10091013__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined11491153__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined13291333__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined15191522__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined17701773__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined20572061__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined22212224__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined24712475__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined26472650__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined27282731__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined27332736__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined31103113__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined31913194__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined31963199__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined35793582__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined36603663__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined36653668__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined40664069__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined41474150__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined41524155__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined46534657__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined48174820__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined50695072__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined53045307__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined53095319__WEBPACK_MODULE_REFERENCE__4_5b22536f6369616c49636f6e73225d_directImport_asiSafe1__._undefined55985602__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined`_’èB–¡÷f°hð<ì8ò<4~š æ † Ð Ç  ¿ W ¡ £ ð f°[þHJ—]«õ÷DÒj´¶õAá+$nV ¢÷Z›(0,locale/* useLocale */.Y)’(0,react.useState)“(0,react.useEffect)ñ”(0,jsx_runtime.jsxs)ÿÿððÿðÿðð(link_default())ïïÿïïÿïïÿþïïï‹SocialIconsý€†buffer†source„size„maps„hashº7 // EXPORTS __webpack_require__.d(__webpack_exports__, { Footer: () => (/* binding */ Footer) }); // EXTERNAL MODULE: ../../node_modules/next/dist/compiled/react/jsx-runtime.js var jsx_runtime = __webpack_require__(4568); // EXTERNAL MODULE: ./src/context/locale.tsx var locale = __webpack_require__(9906); // EXTERNAL MODULE: ../../node_modules/next/dist/compiled/react/index.js var react = __webpack_require__(7620); // EXTERNAL MODULE: ../../node_modules/next/dist/client/app-dir/link.js var app_dir_link = __webpack_require__(9664); 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-blue-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(param) { let { className = '', links } = param; const active = ICONS.filter((param)=>{ let { key } = param; return links === null || links === void 0 ? void 0 : links[key]; }); if (active.length === 0) return null; return /*#__PURE__*/ (0,jsx_runtime.jsx)("div", { className: "flex gap-4 flex-wrap ".concat(className), children: active.map((param)=>{ let { key, label, hoverClass, svg } = param; return /*#__PURE__*/ (0,jsx_runtime.jsx)("a", { href: links[key], target: "_blank", rel: "noopener noreferrer", "aria-label": label, className: "text-gray-500 transition ".concat(hoverClass), children: /*#__PURE__*/ (0,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)({}); (0,react.useEffect)(()=>{ fetch("".concat(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,jsx_runtime.jsx)("footer", { className: "bg-white border-t border-gray-200 mt-16", children: /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12", children: [ /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", { className: "flex flex-col md:flex-row justify-between items-start gap-10", children: [ /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", { className: "flex-1 min-w-[200px] flex flex-col items-start", children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)("span", { className: "logo-text text-3xl text-blue-700 font-bold mb-2", children: "CanHelp" }), /*#__PURE__*/ (0,jsx_runtime.jsx)("p", { className: "text-base text-gray-600 mb-4", children: t('footer.slogan') }) ] }), /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", { className: "flex-1 min-w-[180px]", children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)("h3", { className: "text-lg font-semibold text-blue-900 mb-3", children: t('footer.links') }), /*#__PURE__*/ (0,jsx_runtime.jsxs)("ul", { className: "space-y-2", children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)("li", { children: /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/", className: "hover:text-blue-600 transition", children: t('nav.home') }) }), /*#__PURE__*/ (0,jsx_runtime.jsx)("li", { children: /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/tasks", className: "hover:text-blue-600 transition", children: t('nav.tasks') }) }), /*#__PURE__*/ (0,jsx_runtime.jsx)("li", { children: /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/become-specialist", className: "hover:text-blue-600 transition", children: t('nav.specialists') }) }), /*#__PURE__*/ (0,jsx_runtime.jsx)("li", { children: /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/pricing", className: "hover:text-blue-600 transition", children: t('nav.pricing') }) }) ] }) ] }), /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", { className: "flex-1 min-w-[180px]", children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)("h3", { className: "text-lg font-semibold text-blue-900 mb-3", children: t('footer.socials') }), /*#__PURE__*/ (0,jsx_runtime.jsx)("p", { className: "text-gray-500 text-sm mb-2", children: "info@canhelp.gr" }), /*#__PURE__*/ (0,jsx_runtime.jsx)(SocialIcons, { className: "mt-2", links: socialLinks }) ] }) ] }), /*#__PURE__*/ (0,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}ƒmap‹bufferedMap ` ConcatSourceRawSource† // EXPORTS __webpack_require__.d(__webpack_exports__, { Footer: () => (/* binding */ Footer) }); // EXTERNAL MODULE: ../../node_modules/next/dist/compiled/react/jsx-runtime.js var jsx_runtime = __webpack_require__(4568); // EXTERNAL MODULE: ./src/context/locale.tsx var locale = __webpack_require__(9906); // EXTERNAL MODULE: ../../node_modules/next/dist/compiled/react/index.js var react = __webpack_require__(7620); // EXTERNAL MODULE: ../../node_modules/next/dist/client/app-dir/link.js var app_dir_link = __webpack_require__(9664); var link_default = /*#__PURE__*/__webpack_require__.n(app_dir_link); ;// ./src/components/SocialIcons.tsx  ReplaceSourceReplaceSourceRawSource1import { 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-blue-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(param) { let { className = '', links } = param; const active = ICONS.filter((param)=>{ let { key } = param; return links === null || links === void 0 ? void 0 : links[key]; }); if (active.length === 0) return null; return /*#__PURE__*/ _jsx("div", { className: "flex gap-4 flex-wrap ".concat(className), children: active.map((param)=>{ let { key, label, hoverClass, svg } = param; return /*#__PURE__*/ _jsx("a", { href: links[key], target: "_blank", rel: "noopener noreferrer", "aria-label": label, className: "text-gray-500 transition ".concat(hoverClass), children: /*#__PURE__*/ _jsx("svg", { width: "22", height: "22", viewBox: "0 0 24 24", fill: "currentColor", dangerouslySetInnerHTML: { __html: svg } }) }, key); }) }); } 1047undefined63606366undefined66606663__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined68666869__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined71427145__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefinedu66056679(0,jsx_runtime.jsx)undefined68826956(0,jsx_runtime.jsx)undefined72297303(0,jsx_runtime.jsx)undefinedRawSource! ;// ./src/components/Footer.tsx úûQ/* __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({}); useEffect(()=>{ fetch("".concat(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-blue-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-blue-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-blue-600 transition", children: t('nav.home') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/tasks", className: "hover:text-blue-600 transition", children: t('nav.tasks') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/become-specialist", className: "hover:text-blue-600 transition", children: t('nav.specialists') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/pricing", className: "hover:text-blue-600 transition", children: t('nav.pricing') }) }) ] }) ] }), /*#__PURE__*/ _jsxs("div", { className: "flex-1 min-w-[180px]", children: [ /*#__PURE__*/ _jsx("h3", { className: "text-lg font-semibold text-blue-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__._undefined523531__WEBPACK_MODULE_REFERENCE__2_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined898901__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined10091013__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined11491153__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined13291333__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined15191522__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined17701773__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined20572061__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined22212224__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined24712475__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined26472650__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined27282731__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined27332736__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined31103113__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined31913194__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined31963199__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined35793582__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined36603663__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined36653668__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined40664069__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined41474150__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined41524155__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined46534657__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined48174820__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined50695072__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined53045307__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined53095319__WEBPACK_MODULE_REFERENCE__4_5b22536f6369616c49636f6e73225d_directImport_asiSafe1__._undefined55985602__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined*146232(0,locale/* useLocale */.Y)undefined322406(0,react.useState)undefined417503(0,react.useEffect)undefined870944(0,jsx_runtime.jsx)undefined10521128(0,jsx_runtime.jsxs)undefined12641340(0,jsx_runtime.jsxs)undefined15161592(0,jsx_runtime.jsxs)undefined17781852(0,jsx_runtime.jsx)undefined21002174(0,jsx_runtime.jsx)undefined24582534(0,jsx_runtime.jsxs)undefined26942768(0,jsx_runtime.jsx)undefined30153091(0,jsx_runtime.jsxs)undefined32633337(0,jsx_runtime.jsx)undefined34153489(0,jsx_runtime.jsx)undefined34913568(link_default())undefined39424016(0,jsx_runtime.jsx)undefined40944168(0,jsx_runtime.jsx)undefined41704247(link_default())undefined46274701(0,jsx_runtime.jsx)undefined47794853(0,jsx_runtime.jsx)undefined48554932(link_default())undefined53305404(0,jsx_runtime.jsx)undefined54825556(0,jsx_runtime.jsx)undefined55585635(link_default())undefined61336209(0,jsx_runtime.jsxs)undefined63696443(0,jsx_runtime.jsx)undefined66926766(0,jsx_runtime.jsx)undefined69987072(0,jsx_runtime.jsx)undefined70747159SocialIconsundefined74387514(0,jsx_runtime.jsxs)undefined /***/ }) #8/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; // EXPORTS __webpack_require__.d(__webpack_exports__, { Footer: () => (/* binding */ Footer) }); // EXTERNAL MODULE: ../../node_modules/next/dist/compiled/react/jsx-runtime.js var jsx_runtime = __webpack_require__(4568); // EXTERNAL MODULE: ./src/context/locale.tsx var locale = __webpack_require__(9906); // EXTERNAL MODULE: ../../node_modules/next/dist/compiled/react/index.js var react = __webpack_require__(7620); // EXTERNAL MODULE: ../../node_modules/next/dist/client/app-dir/link.js var app_dir_link = __webpack_require__(9664); 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-blue-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(param) { let { className = '', links } = param; const active = ICONS.filter((param)=>{ let { key } = param; return links === null || links === void 0 ? void 0 : links[key]; }); if (active.length === 0) return null; return /*#__PURE__*/ (0,jsx_runtime.jsx)("div", { className: "flex gap-4 flex-wrap ".concat(className), children: active.map((param)=>{ let { key, label, hoverClass, svg } = param; return /*#__PURE__*/ (0,jsx_runtime.jsx)("a", { href: links[key], target: "_blank", rel: "noopener noreferrer", "aria-label": label, className: "text-gray-500 transition ".concat(hoverClass), children: /*#__PURE__*/ (0,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)({}); (0,react.useEffect)(()=>{ fetch("".concat(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,jsx_runtime.jsx)("footer", { className: "bg-white border-t border-gray-200 mt-16", children: /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12", children: [ /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", { className: "flex flex-col md:flex-row justify-between items-start gap-10", children: [ /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", { className: "flex-1 min-w-[200px] flex flex-col items-start", children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)("span", { className: "logo-text text-3xl text-blue-700 font-bold mb-2", children: "CanHelp" }), /*#__PURE__*/ (0,jsx_runtime.jsx)("p", { className: "text-base text-gray-600 mb-4", children: t('footer.slogan') }) ] }), /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", { className: "flex-1 min-w-[180px]", children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)("h3", { className: "text-lg font-semibold text-blue-900 mb-3", children: t('footer.links') }), /*#__PURE__*/ (0,jsx_runtime.jsxs)("ul", { className: "space-y-2", children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)("li", { children: /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/", className: "hover:text-blue-600 transition", children: t('nav.home') }) }), /*#__PURE__*/ (0,jsx_runtime.jsx)("li", { children: /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/tasks", className: "hover:text-blue-600 transition", children: t('nav.tasks') }) }), /*#__PURE__*/ (0,jsx_runtime.jsx)("li", { children: /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/become-specialist", className: "hover:text-blue-600 transition", children: t('nav.specialists') }) }), /*#__PURE__*/ (0,jsx_runtime.jsx)("li", { children: /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/pricing", className: "hover:text-blue-600 transition", children: t('nav.pricing') }) }) ] }) ] }), /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", { className: "flex-1 min-w-[180px]", children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)("h3", { className: "text-lg font-semibold text-blue-900 mb-3", children: t('footer.socials') }), /*#__PURE__*/ (0,jsx_runtime.jsx)("p", { className: "text-gray-500 text-sm mb-2", children: "info@canhelp.gr" }), /*#__PURE__*/ (0,jsx_runtime.jsx)(SocialIcons, { className: "mt-2", links: socialLinks }) ] }) ] }), /*#__PURE__*/ (0,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/compiled/react/jsx-runtime.js var jsx_runtime = __webpack_require__(4568); // EXTERNAL MODULE: ./src/context/locale.tsx var locale = __webpack_require__(9906); // EXTERNAL MODULE: ../../node_modules/next/dist/compiled/react/index.js var react = __webpack_require__(7620); // EXTERNAL MODULE: ../../node_modules/next/dist/client/app-dir/link.js var app_dir_link = __webpack_require__(9664); var link_default = /*#__PURE__*/__webpack_require__.n(app_dir_link); ;// ./src/components/SocialIcons.tsx Ù”1import { 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-blue-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(param) { let { className = '', links } = param; const active = ICONS.filter((param)=>{ let { key } = param; return links === null || links === void 0 ? void 0 : links[key]; }); if (active.length === 0) return null; return /*#__PURE__*/ _jsx("div", { className: "flex gap-4 flex-wrap ".concat(className), children: active.map((param)=>{ let { key, label, hoverClass, svg } = param; return /*#__PURE__*/ _jsx("a", { href: links[key], target: "_blank", rel: "noopener noreferrer", "aria-label": label, className: "text-gray-500 transition ".concat(hoverClass), children: /*#__PURE__*/ _jsx("svg", { width: "22", height: "22", viewBox: "0 0 24 24", fill: "currentColor", dangerouslySetInnerHTML: { __html: svg } }) }, key); }) }); } 1047undefined63606366undefined66606663__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined68666869__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined71427145__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefinedu66056679(0,jsx_runtime.jsx)undefined68826956(0,jsx_runtime.jsx)undefined72297303(0,jsx_runtime.jsx)undefinedRawSource! ;// ./src/components/Footer.tsx ÕQ/* __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({}); useEffect(()=>{ fetch("".concat(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-blue-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-blue-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-blue-600 transition", children: t('nav.home') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/tasks", className: "hover:text-blue-600 transition", children: t('nav.tasks') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/become-specialist", className: "hover:text-blue-600 transition", children: t('nav.specialists') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/pricing", className: "hover:text-blue-600 transition", children: t('nav.pricing') }) }) ] }) ] }), /*#__PURE__*/ _jsxs("div", { className: "flex-1 min-w-[180px]", children: [ /*#__PURE__*/ _jsx("h3", { className: "text-lg font-semibold text-blue-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__._undefined523531__WEBPACK_MODULE_REFERENCE__2_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined898901__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined10091013__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined11491153__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined13291333__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined15191522__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined17701773__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined20572061__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined22212224__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined24712475__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined26472650__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined27282731__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined27332736__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined31103113__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined31913194__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined31963199__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined35793582__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined36603663__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined36653668__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined40664069__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined41474150__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined41524155__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined46534657__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined48174820__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined50695072__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined53045307__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined53095319__WEBPACK_MODULE_REFERENCE__4_5b22536f6369616c49636f6e73225d_directImport_asiSafe1__._undefined55985602__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined*146232(0,locale/* useLocale */.Y)undefined322406(0,react.useState)undefined417503(0,react.useEffect)undefined870944(0,jsx_runtime.jsx)undefined10521128(0,jsx_runtime.jsxs)undefined12641340(0,jsx_runtime.jsxs)undefined15161592(0,jsx_runtime.jsxs)undefined17781852(0,jsx_runtime.jsx)undefined21002174(0,jsx_runtime.jsx)undefined24582534(0,jsx_runtime.jsxs)undefined26942768(0,jsx_runtime.jsx)undefined30153091(0,jsx_runtime.jsxs)undefined32633337(0,jsx_runtime.jsx)undefined34153489(0,jsx_runtime.jsx)undefined34913568(link_default())undefined39424016(0,jsx_runtime.jsx)undefined40944168(0,jsx_runtime.jsx)undefined41704247(link_default())undefined46274701(0,jsx_runtime.jsx)undefined47794853(0,jsx_runtime.jsx)undefined48554932(link_default())undefined53305404(0,jsx_runtime.jsx)undefined54825556(0,jsx_runtime.jsx)undefined55585635(link_default())undefined61336209(0,jsx_runtime.jsxs)undefined63696443(0,jsx_runtime.jsx)undefined66926766(0,jsx_runtime.jsx)undefined69987072(0,jsx_runtime.jsx)undefined70747159SocialIconsundefined74387514(0,jsx_runtime.jsxs)undefined‘ }, «webpack/lib/util/registerExternalSerializerœwebpack-sources/PrefixSource‰/******/ 2__webpack_require__ => { // webpackRuntimeModules ðvar __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) __webpack_require__.O(0, [950,516,664,838,906,982,587,18,358], () => (__webpack_exec__(2568))); var __webpack_exports__ = __webpack_require__.O(); _N_E = __webpack_exports__; } ]); Qÿÿÿ9Ø(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([[177],{ /***/ 300: /***/ ((__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__(4568); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1592); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7541); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7620); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(2982); /* __next_internal_client_entry_do_not_use__ AdminRolePreview auto */ const ROLE_COOKIE = 'canhelp_preview_role'; const ORIG_PLAN_KEY = 'canhelp_admin_orig_plan'; function getPreviewRole() { if (typeof document === 'undefined') return null; const m = document.cookie.match(/(?:^|;\s*)canhelp_preview_role=([^;]+)/); var _m_; return (_m_ = m === null || m === void 0 ? void 0 : m[1]) !== null && _m_ !== void 0 ? _m_ : null; } const TIER_COLORS = { free: 'bg-slate-100 text-slate-600', pro: 'bg-blue-100 text-blue-700', ultimate: 'bg-amber-100 text-amber-700' }; function AdminRolePreview() { var _session_user, _session_user1; 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 === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.role) === 'admin'; const userId = session === null || session === void 0 ? void 0 : (_session_user1 = session.user) === null || _session_user1 === void 0 ? void 0 : _session_user1.id; const [preview, setPreview] = (0,react__WEBPACK_IMPORTED_MODULE_3__.useState)(null); 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); (0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)(()=>{ setPreview(getPreviewRole()); if (true) { origPlanRef.current = localStorage.getItem(ORIG_PLAN_KEY); } }, []); (0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)(()=>{ if (!isAdmin) return; (0,_lib_api__WEBPACK_IMPORTED_MODULE_4__/* .getPlans */ .T9)().then(setPlans).catch(()=>{}); }, [ isAdmin ]); (0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)(()=>{ var _session_user; var _session_user_planId; // Sync active plan from session const currentPlanId = (_session_user_planId = session === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.planId) !== null && _session_user_planId !== void 0 ? _session_user_planId : null; setActivePlanId(currentPlanId); }, [ session ]); if (!isAdmin) return null; const toggleRole = (role)=>{ if (preview === role) { document.cookie = "".concat(ROLE_COOKIE, "=; path=/; max-age=0"); setPreview(null); window.dispatchEvent(new CustomEvent('canhelp:preview-role', { detail: { role: null } })); } else { document.cookie = "".concat(ROLE_COOKIE, "=").concat(role, "; path=/; max-age=86400"); setPreview(role); window.dispatchEvent(new CustomEvent('canhelp:preview-role', { detail: { role } })); } router.refresh(); }; 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 (e) {} setLoading(false); }; const restorePlan = async ()=>{ const orig = origPlanRef.current; localStorage.removeItem(ORIG_PLAN_KEY); origPlanRef.current = null; await setPlan(orig !== null && orig !== void 0 ? orig : null); }; const visiblePlans = preview ? plans.filter((p)=>p.role === preview) : 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__.jsxs)("div", { className: "flex flex-col gap-1 px-2 pb-2 border-t border-slate-100 pt-2", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "text-slate-400 px-1 mb-0.5", children: "Role" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { onClick: ()=>toggleRole('customer'), className: "px-3 py-1.5 rounded-xl transition text-left ".concat(preview === 'customer' ? 'bg-blue-600 text-white' : 'text-slate-600 hover:bg-slate-100'), children: "Customer" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { onClick: ()=>toggleRole('specialist'), className: "px-3 py-1.5 rounded-xl transition text-left ".concat(preview === 'specialist' ? 'bg-orange-500 text-white' : 'text-slate-600 hover:bg-slate-100'), children: "Specialist" }), preview && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { onClick: ()=>{ document.cookie = "".concat(ROLE_COOKIE, "=; path=/; max-age=0"); setPreview(null); router.refresh(); }, className: "px-3 py-1 rounded-xl text-slate-400 hover:text-red-500 hover:bg-red-50 transition text-left", children: "✕ Reset role" }), 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)=>{ var _TIER_COLORS_plan_tier; return /*#__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 ".concat(activePlanId === plan.id ? 'bg-indigo-600 text-white' : 'text-slate-600 hover:bg-slate-100', " ").concat(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 ".concat(activePlanId === plan.id ? 'bg-white/20 text-white' : (_TIER_COLORS_plan_tier = TIER_COLORS[plan.tier]) !== null && _TIER_COLORS_plan_tier !== void 0 ? _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" }) ] }) ] }) ] }); } /***/ }), /***/ 1258: /***/ ((__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 === null || fullName === void 0 ? void 0 : fullName.trim())) return '—'; const parts = fullName.trim().split(/\s+/); if (parts.length < 2 || !parts[1]) return parts[0]; return "".concat(parts[0], " ").concat(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 === null || firstName === void 0 ? void 0 : firstName.trim()) { const l = lastName === null || lastName === void 0 ? void 0 : lastName.trim(); return l ? "".concat(firstName.trim(), " ").concat(l[0].toUpperCase(), ".") : firstName.trim(); } return shortName(fallbackName); } /***/ }), /***/ 1592: /***/ ((__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__(6504); 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; /***/ }), /***/ 2568: /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 8761, 23)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 300)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 9808)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 7443)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 7380)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 9906)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 4029)); /***/ }), /***/ 4029: /***/ ((__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__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2982); /* __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 === null || match === void 0 ? void 0 : match[1]) ? decodeURIComponent(match[1]) : ''; } function LocationProvider(param) { let { children, initialSlug = '' } = param; 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 (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{ const cookieSlug = readCookieLocation(); setLocationSlug(cookieSlug); }, []); // Load location tree once (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=".concat(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){ var _city_names_locale; if (city.slug === locationSlug) return (_city_names_locale = city.names[locale]) !== null && _city_names_locale !== void 0 ? _city_names_locale : city.names.el; var _city_children; for (const d of (_city_children = city.children) !== null && _city_children !== void 0 ? _city_children : []){ var _d_names_locale; if (d.slug === locationSlug) return (_d_names_locale = d.names[locale]) !== null && _d_names_locale !== void 0 ? _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); } /***/ }), /***/ 7380: /***/ ((__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__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* __next_internal_client_entry_do_not_use__ ScrollToTopButton auto */ function ScrollToTopButton() { const [visible, setVisible] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(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".concat(visible ? ' visible' : ''), "aria-label": "Ðаверх", 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" }) }) }); } /***/ }), /***/ 7443: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; // EXPORTS __webpack_require__.d(__webpack_exports__, { Header: () => (/* binding */ Header) }); // EXTERNAL MODULE: ../../node_modules/next/dist/compiled/react/jsx-runtime.js var jsx_runtime = __webpack_require__(4568); // EXTERNAL MODULE: ../../node_modules/next/dist/client/app-dir/link.js var app_dir_link = __webpack_require__(9664); var link_default = /*#__PURE__*/__webpack_require__.n(app_dir_link); // EXTERNAL MODULE: ../../node_modules/next/dist/api/navigation.js var navigation = __webpack_require__(7541); // EXTERNAL MODULE: ./src/lib/auth.ts var auth = __webpack_require__(1592); // EXTERNAL MODULE: ./src/context/locale.tsx var context_locale = __webpack_require__(9906); // EXTERNAL MODULE: ./src/lib/formatName.ts var formatName = __webpack_require__(1258); // EXTERNAL MODULE: ../../node_modules/next/dist/compiled/react/index.js var react = __webpack_require__(7620); // EXTERNAL MODULE: ./src/lib/translations.ts var translations = __webpack_require__(4962); ;// ./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); var _LOCALES_find; const current = (_LOCALES_find = translations/* LOCALES */.YZ.find((l)=>l.code === locale)) !== null && _LOCALES_find !== void 0 ? _LOCALES_find : translations/* LOCALES */.YZ[0]; // Close on outside click (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,jsx_runtime.jsxs)("div", { ref: ref, className: "relative", children: [ /*#__PURE__*/ (0,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-blue-400 hover:bg-blue-50 transition text-sm font-medium text-gray-700", "aria-label": "Change language", children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)("span", { children: current.code.toUpperCase() }), /*#__PURE__*/ (0,jsx_runtime.jsx)("svg", { className: "w-3.5 h-3.5 text-gray-400 transition-transform ".concat(open ? 'rotate-180' : ''), fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: /*#__PURE__*/ (0,jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19 9l-7 7-7-7" }) }) ] }), open && /*#__PURE__*/ (0,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,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-blue-50 transition ".concat(locale === loc.code ? 'bg-blue-50 text-blue-700 font-medium' : 'text-gray-700'), children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)("span", { children: loc.label }), locale === loc.code && /*#__PURE__*/ (0,jsx_runtime.jsx)("svg", { className: "w-3.5 h-3.5 ml-auto text-blue-600", fill: "currentColor", viewBox: "0 0 20 20", children: /*#__PURE__*/ (0,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__(2982); // EXTERNAL MODULE: ../../node_modules/socket.io-client/build/esm/index.js + 28 modules var esm = __webpack_require__(2838); // EXTERNAL MODULE: ./src/hooks/useEffectiveRole.ts var useEffectiveRole = __webpack_require__(7795); ;// ./src/components/Header.tsx /* __next_internal_client_entry_do_not_use__ Header auto */ const API_URL = "https://api.canhelp.gr" || 0; function Header() { var _session_user; 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 [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); (0,react.useEffect)(()=>{ pathnameRef.current = pathname; }, [ pathname ]); // Close dropdowns on outside click (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 === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.role) === 'admin'; const effectiveRole = (0,useEffectiveRole/* useEffectiveRole */.F)(); const isSpecialist = effectiveRole === 'specialist'; const isActive = function(href) { let exact = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; return exact ? pathname === href : pathname === href || pathname.startsWith(href + '/'); }; const navCls = function(href) { let exact = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; return "font-medium text-sm transition ".concat(isActive(href, exact) ? 'text-blue-600' : 'text-gray-600 hover:text-blue-600'); }; const mobileNavCls = function(href) { let exact = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; return "flex items-center gap-2 font-medium py-1 ".concat(isActive(href, exact) ? 'text-blue-600' : 'text-gray-700'); }; // Reset chat badge when entering chat (0,react.useEffect)(()=>{ if (pathname === '/chat') setUnreadChat(0); }, [ pathname ]); (0,react.useEffect)(()=>{ if (!session) return; const socket = (0,esm.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 ]); (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 ]); (0,react.useEffect)(()=>{ if (!session) { setPlanTier(null); return; } (0,api/* getMyDashboard */.H)().then((d)=>{ var _d_plan; var _d_plan_tier; return setPlanTier((_d_plan_tier = (_d_plan = d.plan) === null || _d_plan === void 0 ? void 0 : _d_plan.tier) !== null && _d_plan_tier !== void 0 ? _d_plan_tier : null); }).catch(()=>{}); }, [ session ]); (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,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,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,jsx_runtime.jsxs)("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: [ /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", { className: "flex items-center justify-between h-16 header-content transition-all duration-300", children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/", className: "flex items-center shrink-0", children: /*#__PURE__*/ (0,jsx_runtime.jsx)("span", { className: "logo-text text-2xl font-bold text-blue-600 transition-all duration-300", children: "CanHelp" }) }), /*#__PURE__*/ (0,jsx_runtime.jsxs)("nav", { className: "hidden md:flex items-center gap-5 ml-auto", children: [ isSpecialist ? /*#__PURE__*/ (0,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/tasks", className: navCls('/tasks'), children: t('nav.find_tasks') }), /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/dashboard", className: navCls('/dashboard'), children: t('nav.dashboard') }) ] }) : /*#__PURE__*/ (0,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/tasks/new", className: navCls('/tasks/new', true), children: t('dashboard.new_task') }), /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/specialists", className: navCls('/specialists'), children: t('nav.specialists') }) ] }), /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/pricing", className: navCls('/pricing', true), children: t('nav.pricing', 'Pricing') }), session ? /*#__PURE__*/ (0,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,jsx_runtime.jsxs)((link_default()), { href: "/notifications", className: "relative text-gray-600 hover:text-gray-900 flex items-center", children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)("svg", { className: "w-5 h-5 ".concat(unreadNotif > 0 ? 'text-orange-500' : ''), fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: /*#__PURE__*/ (0,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,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,jsx_runtime.jsxs)((link_default()), { href: "/chat", className: "relative text-gray-600 hover:text-gray-900 flex items-center", children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)("svg", { className: "w-5 h-5 ".concat(unreadChat > 0 ? 'text-green-500' : ''), fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: /*#__PURE__*/ (0,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,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,jsx_runtime.jsxs)("div", { className: "relative", ref: profileRef, children: [ /*#__PURE__*/ (0,jsx_runtime.jsxs)("button", { onClick: ()=>setProfileOpen(!profileOpen), className: "flex items-center gap-1.5 text-sm font-medium text-gray-600 hover:text-blue-600", children: [ /*#__PURE__*/ (0,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,jsx_runtime.jsx)("span", { className: "inline-flex items-center px-1.5 py-0.5 rounded-full text-[10px] font-bold bg-blue-100 text-blue-700 leading-none", children: "Pro" }), planTier === 'ultimate' && /*#__PURE__*/ (0,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,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,jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19 9l-7 7-7-7" }) }) ] }), profileOpen && /*#__PURE__*/ (0,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,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,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,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,jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 4v16m8-8H4" }) }), t('nav.new_task') ] }), /*#__PURE__*/ (0,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,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,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,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,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,jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0 ".concat(unreadNotif > 0 ? 'text-orange-500' : 'text-gray-400'), fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,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,jsx_runtime.jsxs)("span", { className: "flex items-center gap-1.5", children: [ t('nav.notifications'), unreadNotif > 0 && /*#__PURE__*/ (0,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,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,jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0 ".concat(unreadChat > 0 ? 'text-green-500' : 'text-gray-400'), fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,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,jsx_runtime.jsxs)("span", { className: "flex items-center gap-1.5", children: [ t('nav.chat'), unreadChat > 0 && /*#__PURE__*/ (0,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,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,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,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') ] }) ] }), isAdmin && /*#__PURE__*/ (0,jsx_runtime.jsxs)((link_default()), { href: "/tasks", 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,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,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') ] }), (isSpecialist || isAdmin) && /*#__PURE__*/ (0,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,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,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,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,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,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,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,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,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,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,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,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,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,jsx_runtime.jsx)("hr", { className: "my-1 border-gray-100" }), /*#__PURE__*/ (0,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,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,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,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/login", className: "text-gray-600 hover:text-blue-600 font-medium text-sm", children: t('nav.login') }), /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/register", className: "bg-blue-600 text-white px-4 py-2 rounded-lg hover:bg-blue-700 font-medium text-sm", children: t('nav.register') }) ] }), /*#__PURE__*/ (0,jsx_runtime.jsx)(LanguageSwitcher, {}) ] }), /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", { className: "md:hidden flex items-center gap-2", children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)(LanguageSwitcher, {}), /*#__PURE__*/ (0,jsx_runtime.jsx)("button", { className: "p-2", onClick: ()=>setMenuOpen(!menuOpen), "aria-label": "Toggle menu", children: /*#__PURE__*/ (0,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,jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6 18L18 6M6 6l12 12" }) : /*#__PURE__*/ (0,jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4 6h16M4 12h16M4 18h16" }) }) }) ] }) ] }), menuOpen && /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", { className: "md:hidden py-4 border-t border-gray-100 flex flex-col gap-3", children: [ isSpecialist ? /*#__PURE__*/ (0,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,jsx_runtime.jsxs)((link_default()), { href: "/tasks", className: mobileNavCls('/tasks'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,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,jsx_runtime.jsxs)((link_default()), { href: "/dashboard", className: mobileNavCls('/dashboard'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,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,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,jsx_runtime.jsxs)((link_default()), { href: "/tasks/new", className: mobileNavCls('/tasks/new', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 4v16m8-8H4" }) }), t('nav.new_task') ] }), /*#__PURE__*/ (0,jsx_runtime.jsxs)((link_default()), { href: "/specialists", className: mobileNavCls('/specialists'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,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,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,jsx_runtime.jsxs)((link_default()), { href: "/chat", className: mobileNavCls('/chat', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0 ".concat(unreadChat > 0 ? 'text-green-500' : ''), fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,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,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,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,jsx_runtime.jsxs)((link_default()), { href: "/tasks/new", className: mobileNavCls('/tasks/new', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 4v16m8-8H4" }) }), t('nav.new_task') ] }), /*#__PURE__*/ (0,jsx_runtime.jsxs)((link_default()), { href: "/specialists", className: mobileNavCls('/specialists'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,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,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,jsx_runtime.jsxs)((link_default()), { href: "/notifications", className: mobileNavCls('/notifications', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)("svg", { className: "w-4 h-4 shrink-0 ".concat(unreadNotif > 0 ? 'text-orange-500' : ''), fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,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,jsx_runtime.jsxs)("span", { className: "flex items-center gap-1.5", children: [ t('nav.notifications'), unreadNotif > 0 && /*#__PURE__*/ (0,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,jsx_runtime.jsxs)((link_default()), { href: "/dashboard", className: mobileNavCls('/dashboard'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,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,jsx_runtime.jsxs)((link_default()), { href: "/favorites", className: mobileNavCls('/favorites', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,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,jsx_runtime.jsxs)((link_default()), { href: "/schedule", className: mobileNavCls('/schedule', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,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,jsx_runtime.jsxs)((link_default()), { href: "/admin", className: mobileNavCls('/admin'), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,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,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,jsx_runtime.jsxs)((link_default()), { href: "/profile", className: mobileNavCls('/profile', true), onClick: ()=>setMenuOpen(false), children: [ /*#__PURE__*/ (0,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,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,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,jsx_runtime.jsx)("svg", { className: "w-4 h-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.8, children: /*#__PURE__*/ (0,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,jsx_runtime.jsxs)(jsx_runtime.Fragment, { children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/login", className: "text-gray-700 font-medium py-1", onClick: ()=>setMenuOpen(false), children: t('nav.login') }), /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/register", className: "text-blue-600 font-medium py-1", onClick: ()=>setMenuOpen(false), children: t('nav.register') }) ] }) ] }) ] }) }), msgToast && /*#__PURE__*/ (0,jsx_runtime.jsx)("div", { className: "fixed bottom-5 right-5 z-[200] max-w-sm w-full", children: /*#__PURE__*/ (0,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,jsx_runtime.jsx)("span", { className: "text-2xl shrink-0", children: "\uD83D\uDCAC" }), /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", { className: "flex-1 min-w-0", children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)("p", { className: "font-semibold text-gray-900 text-sm", children: t('chat.toast_title') }), /*#__PURE__*/ (0,jsx_runtime.jsx)("p", { className: "text-xs text-gray-500 truncate mt-0.5", children: msgToast.body }) ] }), /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", { className: "flex flex-col items-end gap-2 shrink-0", children: [ /*#__PURE__*/ (0,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,jsx_runtime.jsx)((link_default()), { href: "/chat?room=".concat(msgToast.roomId), onClick: ()=>setMsgToast(null), className: "text-xs text-blue-600 hover:underline font-medium", children: t('chat.toast_open') }) ] }) ] }) }) ] }); } /***/ }), /***/ 7795: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ F: () => (/* binding */ useEffectiveRole) /* harmony export */ }); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1592); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* __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=([^;]+)/); var _m_; return (_m_ = m === null || m === void 0 ? void 0 : m[1]) !== null && _m_ !== void 0 ? _m_ : 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() { var _session_user; const { data: session } = (0,_lib_auth__WEBPACK_IMPORTED_MODULE_0__/* .useSession */ .wV)(); const userRole = session === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.role; const isAdmin = userRole === 'admin'; const [previewRole, setPreviewRole] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null); (0,react__WEBPACK_IMPORTED_MODULE_1__.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; } /***/ }), /***/ 8761: /***/ (() => { // extracted by mini-css-extract-plugin /***/ }), /***/ 9808: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; // EXPORTS __webpack_require__.d(__webpack_exports__, { Footer: () => (/* binding */ Footer) }); // EXTERNAL MODULE: ../../node_modules/next/dist/compiled/react/jsx-runtime.js var jsx_runtime = __webpack_require__(4568); // EXTERNAL MODULE: ./src/context/locale.tsx var locale = __webpack_require__(9906); // EXTERNAL MODULE: ../../node_modules/next/dist/compiled/react/index.js var react = __webpack_require__(7620); // EXTERNAL MODULE: ../../node_modules/next/dist/client/app-dir/link.js var app_dir_link = __webpack_require__(9664); 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-blue-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(param) { let { className = '', links } = param; const active = ICONS.filter((param)=>{ let { key } = param; return links === null || links === void 0 ? void 0 : links[key]; }); if (active.length === 0) return null; return /*#__PURE__*/ (0,jsx_runtime.jsx)("div", { className: "flex gap-4 flex-wrap ".concat(className), children: active.map((param)=>{ let { key, label, hoverClass, svg } = param; return /*#__PURE__*/ (0,jsx_runtime.jsx)("a", { href: links[key], target: "_blank", rel: "noopener noreferrer", "aria-label": label, className: "text-gray-500 transition ".concat(hoverClass), children: /*#__PURE__*/ (0,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)({}); (0,react.useEffect)(()=>{ fetch("".concat(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,jsx_runtime.jsx)("footer", { className: "bg-white border-t border-gray-200 mt-16", children: /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12", children: [ /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", { className: "flex flex-col md:flex-row justify-between items-start gap-10", children: [ /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", { className: "flex-1 min-w-[200px] flex flex-col items-start", children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)("span", { className: "logo-text text-3xl text-blue-700 font-bold mb-2", children: "CanHelp" }), /*#__PURE__*/ (0,jsx_runtime.jsx)("p", { className: "text-base text-gray-600 mb-4", children: t('footer.slogan') }) ] }), /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", { className: "flex-1 min-w-[180px]", children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)("h3", { className: "text-lg font-semibold text-blue-900 mb-3", children: t('footer.links') }), /*#__PURE__*/ (0,jsx_runtime.jsxs)("ul", { className: "space-y-2", children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)("li", { children: /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/", className: "hover:text-blue-600 transition", children: t('nav.home') }) }), /*#__PURE__*/ (0,jsx_runtime.jsx)("li", { children: /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/tasks", className: "hover:text-blue-600 transition", children: t('nav.tasks') }) }), /*#__PURE__*/ (0,jsx_runtime.jsx)("li", { children: /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/become-specialist", className: "hover:text-blue-600 transition", children: t('nav.specialists') }) }), /*#__PURE__*/ (0,jsx_runtime.jsx)("li", { children: /*#__PURE__*/ (0,jsx_runtime.jsx)((link_default()), { href: "/pricing", className: "hover:text-blue-600 transition", children: t('nav.pricing') }) }) ] }) ] }), /*#__PURE__*/ (0,jsx_runtime.jsxs)("div", { className: "flex-1 min-w-[180px]", children: [ /*#__PURE__*/ (0,jsx_runtime.jsx)("h3", { className: "text-lg font-semibold text-blue-900 mb-3", children: t('footer.socials') }), /*#__PURE__*/ (0,jsx_runtime.jsx)("p", { className: "text-gray-500 text-sm mb-2", children: "info@canhelp.gr" }), /*#__PURE__*/ (0,jsx_runtime.jsx)(SocialIcons, { className: "mt-2", links: socialLinks }) ] }) ] }), /*#__PURE__*/ (0,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') ] }) ] }) }); } /***/ }) }, /******/ __webpack_require__ => { // webpackRuntimeModules /******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) /******/ __webpack_require__.O(0, [950,516,664,838,906,982,587,18,358], () => (__webpack_exec__(2568))); /******/ var __webpack_exports__ = __webpack_require__.O(); /******/ _N_E = __webpack_exports__; /******/ } ]); ‚{}‡ @„”V(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([[177],{ /***/ 300: “_/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; ’©†Èûÿÿª RawSource /***/ })þ, /***/ 1258: üÖ/* 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 === null || fullName === void 0 ? void 0 : fullName.trim())) return '—'; const parts = fullName.trim().split(/\s+/); if (parts.length < 2 || !parts[1]) return parts[0]; return "".concat(parts[0], " ").concat(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 === null || firstName === void 0 ? void 0 : firstName.trim()) { const l = lastName === null || lastName === void 0 ? void 0 : lastName.trim(); return l ? "".concat(firstName.trim(), " ").concat(l[0].toUpperCase(), ".") : firstName.trim(); } return shortName(fallbackName); } 136142undefined596602undefinedúûú, /***/ 1592: ‹ø‹å/* 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__(6504); ~ÿÿÿ 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ö÷ö, /***/ 2568: ‡V/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { zÿÿÿsõÿÿ{ÿÿÿôõô, /***/ 4029: …ò…/* 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__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2982); xÿÿÿ~ /* __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 === null || match === void 0 ? void 0 : match[1]) ? decodeURIComponent(match[1]) : ''; } export function LocationProvider(param) { let { children, initialSlug = '' } = param; const [locationSlug, setLocationSlug] = useState(initialSlug); const [locationTree, setLocationTree] = useState([]); const [locationLoading, setLocationLoading] = useState(true); // Sync from cookie on client mount useEffect(()=>{ const cookieSlug = readCookieLocation(); setLocationSlug(cookieSlug); }, []); // Load location tree once useEffect(()=>{ getLocations().then((tree)=>setLocationTree(tree)).catch(()=>{}).finally(()=>setLocationLoading(false)); }, []); const setLocation = useCallback((slug)=>{ setLocationSlug(slug); const encoded = encodeURIComponent(slug); document.cookie = "canhelp_location=".concat(encoded, "; path=/; max-age=31536000; SameSite=Lax"); }, []); const getLabel = useCallback((locale)=>{ if (!locationSlug) return ''; for (const city of locationTree){ var _city_names_locale; if (city.slug === locationSlug) return (_city_names_locale = city.names[locale]) !== null && _city_names_locale !== void 0 ? _city_names_locale : city.names.el; var _city_children; for (const d of (_city_children = city.children) !== null && _city_children !== void 0 ? _city_children : []){ var _d_names_locale; if (d.slug === locationSlug) return (_d_names_locale = d.names[locale]) !== null && _d_names_locale !== void 0 ? _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)undefined703709undefined837844(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined904911(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined968975(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined10281036(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined11771185(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined12011212(0,_lib_api__WEBPACK_IMPORTED_MODULE_2__/* .getLocations */ .Vs)undefined13421352(0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)undefined15851595(0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)undefined23872390(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined26122618undefined26552664(0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)undefinedðñð, /***/ 7380: îk/* 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__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); tÿÿÿè/* __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); 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".concat(visible ? ' visible' : ''), "aria-label": "Ðаверх", 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" }) }) }); } y71118undefined120163undefined165171undefined237244(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined258266(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined519522(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined788791(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined9981001(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefinedìíì, /***/ 7443: }ÿÿÿê}ÿÿÿÅÆqÿÿÿÇÈÉÊÆqÿÿÿN÷ÿÿËÌëìë, /***/ 7795: |ÿÿÿé|ÿÿÿ´pÿÿÿ†þÿÿµêëê, /***/ 8761: {ÿÿÿ/***/ (() => { nÿÿÿ¥öÿÿçèç, /***/ 9808: xÿÿÿåxÿÿÿ† // EXPORTS __webpack_require__.d(__webpack_exports__, { Footer: () => (/* binding */ Footer) }); // EXTERNAL MODULE: ../../node_modules/next/dist/compiled/react/jsx-runtime.js var jsx_runtime = __webpack_require__(4568); // EXTERNAL MODULE: ./src/context/locale.tsx var locale = __webpack_require__(9906); // EXTERNAL MODULE: ../../node_modules/next/dist/compiled/react/index.js var react = __webpack_require__(7620); // EXTERNAL MODULE: ../../node_modules/next/dist/client/app-dir/link.js var app_dir_link = __webpack_require__(9664); var link_default = /*#__PURE__*/__webpack_require__.n(app_dir_link); ;// ./src/components/SocialIcons.tsx Àkÿÿÿ1import { 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-blue-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(param) { let { className = '', links } = param; const active = ICONS.filter((param)=>{ let { key } = param; return links === null || links === void 0 ? void 0 : links[key]; }); if (active.length === 0) return null; return /*#__PURE__*/ _jsx("div", { className: "flex gap-4 flex-wrap ".concat(className), children: active.map((param)=>{ let { key, label, hoverClass, svg } = param; return /*#__PURE__*/ _jsx("a", { href: links[key], target: "_blank", rel: "noopener noreferrer", "aria-label": label, className: "text-gray-500 transition ".concat(hoverClass), children: /*#__PURE__*/ _jsx("svg", { width: "22", height: "22", viewBox: "0 0 24 24", fill: "currentColor", dangerouslySetInnerHTML: { __html: svg } }) }, key); }) }); } 1047undefined63606366undefined66606663__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined68666869__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined71427145__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefinedu66056679(0,jsx_runtime.jsx)undefined68826956(0,jsx_runtime.jsx)undefined72297303(0,jsx_runtime.jsx)undefinedRawSource! ;// ./src/components/Footer.tsx ¼gÿÿÿQ/* __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({}); useEffect(()=>{ fetch("".concat(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-blue-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-blue-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-blue-600 transition", children: t('nav.home') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/tasks", className: "hover:text-blue-600 transition", children: t('nav.tasks') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/become-specialist", className: "hover:text-blue-600 transition", children: t('nav.specialists') }) }), /*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsx(Link, { href: "/pricing", className: "hover:text-blue-600 transition", children: t('nav.pricing') }) }) ] }) ] }), /*#__PURE__*/ _jsxs("div", { className: "flex-1 min-w-[180px]", children: [ /*#__PURE__*/ _jsx("h3", { className: "text-lg font-semibold text-blue-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__._undefined523531__WEBPACK_MODULE_REFERENCE__2_5b22757365456666656374225d_call_directImport_asiSafe1__._undefined898901__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined10091013__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined11491153__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined13291333__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined15191522__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined17701773__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined20572061__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined22212224__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined24712475__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined26472650__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined27282731__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined27332736__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined31103113__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined31913194__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined31963199__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined35793582__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined36603663__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined36653668__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined40664069__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined41474150__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined41524155__WEBPACK_MODULE_REFERENCE__3_5b2264656661756c74225d_directImport_asiSafe1__._undefined46534657__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined48174820__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined50695072__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined53045307__WEBPACK_MODULE_REFERENCE__0_5b226a7378225d_call_directImport_asiSafe1__._undefined53095319__WEBPACK_MODULE_REFERENCE__4_5b22536f6369616c49636f6e73225d_directImport_asiSafe1__._undefined55985602__WEBPACK_MODULE_REFERENCE__0_5b226a737873225d_call_directImport_asiSafe1__._undefined*146232(0,locale/* useLocale */.Y)undefined322406(0,react.useState)undefined417503(0,react.useEffect)undefined870944(0,jsx_runtime.jsx)undefined10521128(0,jsx_runtime.jsxs)undefined12641340(0,jsx_runtime.jsxs)undefined15161592(0,jsx_runtime.jsxs)undefined17781852(0,jsx_runtime.jsx)undefined21002174(0,jsx_runtime.jsx)undefined24582534(0,jsx_runtime.jsxs)undefined26942768(0,jsx_runtime.jsx)undefined30153091(0,jsx_runtime.jsxs)undefined32633337(0,jsx_runtime.jsx)undefined34153489(0,jsx_runtime.jsx)undefined34913568(link_default())undefined39424016(0,jsx_runtime.jsx)undefined40944168(0,jsx_runtime.jsx)undefined41704247(link_default())undefined46274701(0,jsx_runtime.jsx)undefined47794853(0,jsx_runtime.jsx)undefined48554932(link_default())undefined53305404(0,jsx_runtime.jsx)undefined54825556(0,jsx_runtime.jsx)undefined55585635(link_default())undefined61336209(0,jsx_runtime.jsxs)undefined63696443(0,jsx_runtime.jsx)undefined66926766(0,jsx_runtime.jsx)undefined69987072(0,jsx_runtime.jsx)undefined70747159SocialIconsundefined74387514(0,jsx_runtime.jsxs)undefinedÞßÞ }, !PrefixSourceConcatSourceRawSource2__webpack_require__ => { // webpackRuntimeModules Ûðvar __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) __webpack_require__.O(0, [950,516,664,838,906,982,587,18,358], () => (__webpack_exec__(2568))); var __webpack_exports__ = __webpack_require__.O(); Ú_N_E = __webpack_exports__; } /******/ RawSource]); ø«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€`«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSourceV(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([[974],{ /***/ 912: «webpack/lib/util/registerExternalSerializerœwebpack-sources/CachedSource R«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSource_/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; «webpack/lib/util/registerExternalSerializerœwebpack-sources/CachedSource Ê «webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSource_/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ShareButton: () => (/* binding */ ShareButton) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); «webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSource1/* __next_internal_client_entry_do_not_use__ ShareButton auto */ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime"; import { useState } from 'react'; export function ShareButton(param) { let { label, copiedLabel } = param; const [copied, setCopied] = useState(false); const handle = async ()=>{ const url = window.location.origin; if (navigator.share) { try { await navigator.share({ url, title: 'CanHelp' }); return; } catch (e) {} } await navigator.clipboard.writeText(url); setCopied(true); setTimeout(()=>setCopied(false), 2500); }; return /*#__PURE__*/ _jsx("button", { type: "button", onClick: handle, className: "inline-flex items-center gap-2 bg-amber-500 text-white px-8 py-3.5 rounded-2xl font-bold text-base hover:bg-amber-600 transition shadow-md shadow-amber-500/25 active:scale-95", children: copied ? /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx("span", { className: "text-lg", children: "✓" }), copiedLabel ] }) : /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx("span", { className: "text-lg", children: "\uD83D\uDD17" }), label ] }) }); } a AT–˜¸ºÀ'. 6:<D‚379A|€€€¯(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)¶(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)·(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)·react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragmentýþÿý€†buffer†source„size„maps„hash/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ShareButton: () => (/* binding */ ShareButton) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* __next_internal_client_entry_do_not_use__ ShareButton auto */ function ShareButton(param) { let { label, copiedLabel } = param; const [copied, setCopied] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false); const handle = async ()=>{ const url = window.location.origin; if (navigator.share) { try { await navigator.share({ url, title: 'CanHelp' }); return; } catch (e) {} } await navigator.clipboard.writeText(url); setCopied(true); setTimeout(()=>setCopied(false), 2500); }; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { type: "button", onClick: handle, className: "inline-flex items-center gap-2 bg-amber-500 text-white px-8 py-3.5 rounded-2xl font-bold text-base hover:bg-amber-600 transition shadow-md shadow-amber-500/25 active:scale-95", children: copied ? /*#__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)("span", { className: "text-lg", children: "✓" }), copiedLabel ] }) : /*#__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)("span", { className: "text-lg", children: "\uD83D\uDD17" }), label ] }) }); } €”{"finalSource":true}ƒmap‹bufferedMap ConcatSourceRawSource_/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ShareButton: () => (/* binding */ ShareButton) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); ReplaceSourceRawSource1/* __next_internal_client_entry_do_not_use__ ShareButton auto */ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime"; import { useState } from 'react'; export function ShareButton(param) { let { label, copiedLabel } = param; const [copied, setCopied] = useState(false); const handle = async ()=>{ const url = window.location.origin; if (navigator.share) { try { await navigator.share({ url, title: 'CanHelp' }); return; } catch (e) {} } await navigator.clipboard.writeText(url); setCopied(true); setTimeout(()=>setCopied(false), 2500); }; return /*#__PURE__*/ _jsx("button", { type: "button", onClick: handle, className: "inline-flex items-center gap-2 bg-amber-500 text-white px-8 py-3.5 rounded-2xl font-bold text-base hover:bg-amber-600 transition shadow-md shadow-amber-500/25 active:scale-95", children: copied ? /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx("span", { className: "text-lg", children: "✓" }), copiedLabel ] }) : /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx("span", { className: "text-lg", children: "\uD83D\uDD17" }), label ] }) }); } ]65150undefined152184undefined186192undefined295302(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined774777(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined10781082(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined10841092react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragmentundefined11511154(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined13311335(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined13371345react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragmentundefined14041407(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined /***/ }) €†buffer†source„size„maps„hashø/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ShareButton: () => (/* binding */ ShareButton) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* __next_internal_client_entry_do_not_use__ ShareButton auto */ function ShareButton(param) { let { label, copiedLabel } = param; const [copied, setCopied] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false); const handle = async ()=>{ const url = window.location.origin; if (navigator.share) { try { await navigator.share({ url, title: 'CanHelp' }); return; } catch (e) {} } await navigator.clipboard.writeText(url); setCopied(true); setTimeout(()=>setCopied(false), 2500); }; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { type: "button", onClick: handle, className: "inline-flex items-center gap-2 bg-amber-500 text-white px-8 py-3.5 rounded-2xl font-bold text-base hover:bg-amber-600 transition shadow-md shadow-amber-500/25 active:scale-95", children: copied ? /*#__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)("span", { className: "text-lg", children: "✓" }), copiedLabel ] }) : /*#__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)("span", { className: "text-lg", children: "\uD83D\uDD17" }), label ] }) }); } /***/ }) €”{"finalSource":true}ƒmap‹bufferedMap  ConcatSourceRawSource_/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; þ_/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ShareButton: () => (/* binding */ ShareButton) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); ReplaceSourceRawSource1/* __next_internal_client_entry_do_not_use__ ShareButton auto */ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime"; import { useState } from 'react'; export function ShareButton(param) { let { label, copiedLabel } = param; const [copied, setCopied] = useState(false); const handle = async ()=>{ const url = window.location.origin; if (navigator.share) { try { await navigator.share({ url, title: 'CanHelp' }); return; } catch (e) {} } await navigator.clipboard.writeText(url); setCopied(true); setTimeout(()=>setCopied(false), 2500); }; return /*#__PURE__*/ _jsx("button", { type: "button", onClick: handle, className: "inline-flex items-center gap-2 bg-amber-500 text-white px-8 py-3.5 rounded-2xl font-bold text-base hover:bg-amber-600 transition shadow-md shadow-amber-500/25 active:scale-95", children: copied ? /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx("span", { className: "text-lg", children: "✓" }), copiedLabel ] }) : /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx("span", { className: "text-lg", children: "\uD83D\uDD17" }), label ] }) }); } ]65150undefined152184undefined186192undefined295302(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined774777(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined10781082(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined10841092react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragmentundefined11511154(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined13311335(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined13371345react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragmentundefined14041407(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined RawSource /***/ }), /***/ 1592:  ú «webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSource_/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; «webpack/lib/util/registerExternalSerializerœwebpack-sources/CachedSource w«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-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__(6504); «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)€€†buffer†source„size„maps„hashÌ/* 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__(6504); 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}ƒmap‹bufferedMap 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__(6504); 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 /***/ }) ë5/***/ ((__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__(6504); 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__(6504); ò 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óô, /***/ 2294:  £+«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSource_/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; «webpack/lib/util/registerExternalSerializerœwebpack-sources/CachedSource ¡«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSource5/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ HomeCityCloud: () => (/* binding */ HomeCityCloud) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7541); /* harmony import */ var _context_location__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4029); /* harmony import */ var _context_locale__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9906); «webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSourceÌ /* __next_internal_client_entry_do_not_use__ HomeCityCloud auto */ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; import { useRouter } from 'next/navigation'; import { useLocation } from '@/context/location'; import { useLocale } from '@/context/locale'; export function HomeCityCloud(param) { let { locationTree, isSpecialist = false } = param; const router = useRouter(); const { setLocation } = useLocation(); const { locale } = useLocale(); const handleClick = (slug)=>{ if (isSpecialist) { router.push("/tasks?location=".concat(slug)); } else { setLocation(slug); router.push('/tasks/new'); } }; if (!locationTree.length) return null; return /*#__PURE__*/ _jsx("div", { className: "flex flex-wrap justify-center gap-3", children: locationTree.map((city)=>{ var _city_names_locale, _city_children; return /*#__PURE__*/ _jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [ /*#__PURE__*/ _jsxs("button", { type: "button", onClick: ()=>handleClick(city.slug), className: "inline-flex items-center gap-1 px-4 py-2 rounded-full bg-indigo-100 text-indigo-700 font-semibold text-sm hover:bg-indigo-200 transition cursor-pointer", children: [ "\uD83D\uDCCD ", (_city_names_locale = city.names[locale]) !== null && _city_names_locale !== void 0 ? _city_names_locale : city.names['el'] ] }), ((_city_children = city.children) !== null && _city_children !== void 0 ? _city_children : []).map((d)=>{ var _d_names_locale; return /*#__PURE__*/ _jsx("button", { type: "button", onClick: ()=>handleClick(d.slug), className: "inline-flex items-center px-3 py-1.5 rounded-full bg-slate-100 text-slate-700 text-sm hover:bg-indigo-100 hover:text-indigo-700 transition cursor-pointer", children: (_d_names_locale = d.names[locale]) !== null && _d_names_locale !== void 0 ? _d_names_locale : d.names['el'] }, d.id); }) ] }, city.id); }) }); } a CVƒ®°à₊«µÑÙÌÐY]„€€€€€º(0,next_navigation__WEBPACK_IMPORTED_MODULE_1__.useRouter)Ç(0,_context_location__WEBPACK_IMPORTED_MODULE_2__/* .useLocation */ .z)Ã(0,_context_locale__WEBPACK_IMPORTED_MODULE_3__/* .useLocale */ .Y)¶(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)·(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)ÿþ€†buffer†source„size„maps„hash  /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ HomeCityCloud: () => (/* binding */ HomeCityCloud) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7541); /* harmony import */ var _context_location__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4029); /* harmony import */ var _context_locale__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9906); /* __next_internal_client_entry_do_not_use__ HomeCityCloud auto */ function HomeCityCloud(param) { let { locationTree, isSpecialist = false } = param; const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_1__.useRouter)(); const { setLocation } = (0,_context_location__WEBPACK_IMPORTED_MODULE_2__/* .useLocation */ .z)(); const { locale } = (0,_context_locale__WEBPACK_IMPORTED_MODULE_3__/* .useLocale */ .Y)(); const handleClick = (slug)=>{ if (isSpecialist) { router.push("/tasks?location=".concat(slug)); } else { setLocation(slug); router.push('/tasks/new'); } }; if (!locationTree.length) return null; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "flex flex-wrap justify-center gap-3", children: locationTree.map((city)=>{ var _city_names_locale, _city_children; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "flex flex-wrap items-center gap-2", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("button", { type: "button", onClick: ()=>handleClick(city.slug), className: "inline-flex items-center gap-1 px-4 py-2 rounded-full bg-indigo-100 text-indigo-700 font-semibold text-sm hover:bg-indigo-200 transition cursor-pointer", children: [ "\uD83D\uDCCD ", (_city_names_locale = city.names[locale]) !== null && _city_names_locale !== void 0 ? _city_names_locale : city.names['el'] ] }), ((_city_children = city.children) !== null && _city_children !== void 0 ? _city_children : []).map((d)=>{ var _d_names_locale; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { type: "button", onClick: ()=>handleClick(d.slug), className: "inline-flex items-center px-3 py-1.5 rounded-full bg-slate-100 text-slate-700 text-sm hover:bg-indigo-100 hover:text-indigo-700 transition cursor-pointer", children: (_d_names_locale = d.names[locale]) !== null && _d_names_locale !== void 0 ? _d_names_locale : d.names['el'] }, d.id); }) ] }, city.id); }) }); } €”{"finalSource":true}ƒmap‹bufferedMap ConcatSourceRawSource5/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ HomeCityCloud: () => (/* binding */ HomeCityCloud) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7541); /* harmony import */ var _context_location__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4029); /* harmony import */ var _context_locale__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9906); ReplaceSourceRawSourceÌ /* __next_internal_client_entry_do_not_use__ HomeCityCloud auto */ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; import { useRouter } from 'next/navigation'; import { useLocation } from '@/context/location'; import { useLocale } from '@/context/locale'; export function HomeCityCloud(param) { let { locationTree, isSpecialist = false } = param; const router = useRouter(); const { setLocation } = useLocation(); const { locale } = useLocale(); const handleClick = (slug)=>{ if (isSpecialist) { router.push("/tasks?location=".concat(slug)); } else { setLocation(slug); router.push('/tasks/new'); } }; if (!locationTree.length) return null; return /*#__PURE__*/ _jsx("div", { className: "flex flex-wrap justify-center gap-3", children: locationTree.map((city)=>{ var _city_names_locale, _city_children; return /*#__PURE__*/ _jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [ /*#__PURE__*/ _jsxs("button", { type: "button", onClick: ()=>handleClick(city.slug), className: "inline-flex items-center gap-1 px-4 py-2 rounded-full bg-indigo-100 text-indigo-700 font-semibold text-sm hover:bg-indigo-200 transition cursor-pointer", children: [ "\uD83D\uDCCD ", (_city_names_locale = city.names[locale]) !== null && _city_names_locale !== void 0 ? _city_names_locale : city.names['el'] ] }), ((_city_children = city.children) !== null && _city_children !== void 0 ? _city_children : []).map((d)=>{ var _d_names_locale; return /*#__PURE__*/ _jsx("button", { type: "button", onClick: ()=>handleClick(d.slug), className: "inline-flex items-center px-3 py-1.5 rounded-full bg-slate-100 text-slate-700 text-sm hover:bg-indigo-100 hover:text-indigo-700 transition cursor-pointer", children: (_d_names_locale = d.names[locale]) !== null && _d_names_locale !== void 0 ? _d_names_locale : d.names['el'] }, d.id); }) ] }, city.id); }) }); } U67129undefined131174undefined176224undefined226270undefined272278undefined386394(0,next_navigation__WEBPACK_IMPORTED_MODULE_1__.useRouter)undefined427437(0,_context_location__WEBPACK_IMPORTED_MODULE_2__/* .useLocation */ .z)undefined465473(0,_context_locale__WEBPACK_IMPORTED_MODULE_3__/* .useLocale */ .Y)undefined770773(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined972976(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined11131117(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined19211924(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 */ HomeCityCloud: () => (/* binding */ HomeCityCloud) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7541); /* harmony import */ var _context_location__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4029); /* harmony import */ var _context_locale__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9906); /* __next_internal_client_entry_do_not_use__ HomeCityCloud auto */ function HomeCityCloud(param) { let { locationTree, isSpecialist = false } = param; const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_1__.useRouter)(); const { setLocation } = (0,_context_location__WEBPACK_IMPORTED_MODULE_2__/* .useLocation */ .z)(); const { locale } = (0,_context_locale__WEBPACK_IMPORTED_MODULE_3__/* .useLocale */ .Y)(); const handleClick = (slug)=>{ if (isSpecialist) { router.push("/tasks?location=".concat(slug)); } else { setLocation(slug); router.push('/tasks/new'); } }; if (!locationTree.length) return null; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "flex flex-wrap justify-center gap-3", children: locationTree.map((city)=>{ var _city_names_locale, _city_children; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "flex flex-wrap items-center gap-2", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("button", { type: "button", onClick: ()=>handleClick(city.slug), className: "inline-flex items-center gap-1 px-4 py-2 rounded-full bg-indigo-100 text-indigo-700 font-semibold text-sm hover:bg-indigo-200 transition cursor-pointer", children: [ "\uD83D\uDCCD ", (_city_names_locale = city.names[locale]) !== null && _city_names_locale !== void 0 ? _city_names_locale : city.names['el'] ] }), ((_city_children = city.children) !== null && _city_children !== void 0 ? _city_children : []).map((d)=>{ var _d_names_locale; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { type: "button", onClick: ()=>handleClick(d.slug), className: "inline-flex items-center px-3 py-1.5 rounded-full bg-slate-100 text-slate-700 text-sm hover:bg-indigo-100 hover:text-indigo-700 transition cursor-pointer", children: (_d_names_locale = d.names[locale]) !== null && _d_names_locale !== void 0 ? _d_names_locale : d.names['el'] }, d.id); }) ] }, city.id); }) }); } /***/ }) áä  åæå5/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ HomeCityCloud: () => (/* binding */ HomeCityCloud) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7541); /* harmony import */ var _context_location__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4029); /* harmony import */ var _context_locale__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9906); çÌ /* __next_internal_client_entry_do_not_use__ HomeCityCloud auto */ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; import { useRouter } from 'next/navigation'; import { useLocation } from '@/context/location'; import { useLocale } from '@/context/locale'; export function HomeCityCloud(param) { let { locationTree, isSpecialist = false } = param; const router = useRouter(); const { setLocation } = useLocation(); const { locale } = useLocale(); const handleClick = (slug)=>{ if (isSpecialist) { router.push("/tasks?location=".concat(slug)); } else { setLocation(slug); router.push('/tasks/new'); } }; if (!locationTree.length) return null; return /*#__PURE__*/ _jsx("div", { className: "flex flex-wrap justify-center gap-3", children: locationTree.map((city)=>{ var _city_names_locale, _city_children; return /*#__PURE__*/ _jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [ /*#__PURE__*/ _jsxs("button", { type: "button", onClick: ()=>handleClick(city.slug), className: "inline-flex items-center gap-1 px-4 py-2 rounded-full bg-indigo-100 text-indigo-700 font-semibold text-sm hover:bg-indigo-200 transition cursor-pointer", children: [ "\uD83D\uDCCD ", (_city_names_locale = city.names[locale]) !== null && _city_names_locale !== void 0 ? _city_names_locale : city.names['el'] ] }), ((_city_children = city.children) !== null && _city_children !== void 0 ? _city_children : []).map((d)=>{ var _d_names_locale; return /*#__PURE__*/ _jsx("button", { type: "button", onClick: ()=>handleClick(d.slug), className: "inline-flex items-center px-3 py-1.5 rounded-full bg-slate-100 text-slate-700 text-sm hover:bg-indigo-100 hover:text-indigo-700 transition cursor-pointer", children: (_d_names_locale = d.names[locale]) !== null && _d_names_locale !== void 0 ? _d_names_locale : d.names['el'] }, d.id); }) ] }, city.id); }) }); } U67129undefined131174undefined176224undefined226270undefined272278undefined386394(0,next_navigation__WEBPACK_IMPORTED_MODULE_1__.useRouter)undefined427437(0,_context_location__WEBPACK_IMPORTED_MODULE_2__/* .useLocation */ .z)undefined465473(0,_context_locale__WEBPACK_IMPORTED_MODULE_3__/* .useLocale */ .Y)undefined770773(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined972976(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined11131117(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined19211924(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefinedèé, /***/ 3875:  «webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSourceV/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { «webpack/lib/util/registerExternalSerializerœwebpack-sources/CachedSource 1«webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSource«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSourceimport(/* webpackMode: "eager", webpackExports: ["BecomeSpecialistButton"] */ "/opt/canhelp/apps/web/src/components/BecomeSpecialistButton.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["FaqAccordion"] */ "/opt/canhelp/apps/web/src/components/FaqAccordion.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["HeroSearch"] */ "/opt/canhelp/apps/web/src/components/HeroSearch.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["HomeCityCloud"] */ "/opt/canhelp/apps/web/src/components/HomeCityCloud.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["ShareButton"] */ "/opt/canhelp/apps/web/src/components/ShareButton.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["__esModule","default"] */ "/opt/canhelp/node_modules/next/dist/client/app-dir/link.js"); J”‹ ‹ßPromise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 6811))ßPromise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 9869))ßPromise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 6787))ßPromise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 2294))ÞPromise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 912))åPromise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 9664, 23))€†buffer†source„size„maps„hashUPromise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 6811)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 9869)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 6787)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 2294)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 912)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 9664, 23)); €”{"finalSource":true}ƒmap‹bufferedMap ReplaceSourceRawSourceimport(/* webpackMode: "eager", webpackExports: ["BecomeSpecialistButton"] */ "/opt/canhelp/apps/web/src/components/BecomeSpecialistButton.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["FaqAccordion"] */ "/opt/canhelp/apps/web/src/components/FaqAccordion.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["HeroSearch"] */ "/opt/canhelp/apps/web/src/components/HeroSearch.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["HomeCityCloud"] */ "/opt/canhelp/apps/web/src/components/HomeCityCloud.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["ShareButton"] */ "/opt/canhelp/apps/web/src/components/ShareButton.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["__esModule","default"] */ "/opt/canhelp/node_modules/next/dist/client/app-dir/link.js"); —0143Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 6811))undefined148271Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 9869))undefined276395Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 6787))undefined400525Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 2294))undefined530651Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 912))undefined656792Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 9664, 23))undefined /***/ }) Õµ/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 6811)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 9869)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 6787)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 2294)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 912)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 9664, 23)); /***/ }) ÖÙ ÚV/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { Üimport(/* webpackMode: "eager", webpackExports: ["BecomeSpecialistButton"] */ "/opt/canhelp/apps/web/src/components/BecomeSpecialistButton.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["FaqAccordion"] */ "/opt/canhelp/apps/web/src/components/FaqAccordion.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["HeroSearch"] */ "/opt/canhelp/apps/web/src/components/HeroSearch.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["HomeCityCloud"] */ "/opt/canhelp/apps/web/src/components/HomeCityCloud.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["ShareButton"] */ "/opt/canhelp/apps/web/src/components/ShareButton.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["__esModule","default"] */ "/opt/canhelp/node_modules/next/dist/client/app-dir/link.js"); —0143Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 6811))undefined148271Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 9869))undefined276395Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 6787))undefined400525Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 2294))undefined530651Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 912))undefined656792Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 9664, 23))undefinedÝÞ, /***/ 4029:  Æ.«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSource_/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; «webpack/lib/util/registerExternalSerializerœwebpack-sources/CachedSource …«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSource/* 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__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2982); «webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSource~ /* __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 === null || match === void 0 ? void 0 : match[1]) ? decodeURIComponent(match[1]) : ''; } export function LocationProvider(param) { let { children, initialSlug = '' } = param; const [locationSlug, setLocationSlug] = useState(initialSlug); const [locationTree, setLocationTree] = useState([]); const [locationLoading, setLocationLoading] = useState(true); // Sync from cookie on client mount useEffect(()=>{ const cookieSlug = readCookieLocation(); setLocationSlug(cookieSlug); }, []); // Load location tree once useEffect(()=>{ getLocations().then((tree)=>setLocationTree(tree)).catch(()=>{}).finally(()=>setLocationLoading(false)); }, []); const setLocation = useCallback((slug)=>{ setLocationSlug(slug); const encoded = encodeURIComponent(slug); document.cookie = "canhelp_location=".concat(encoded, "; path=/; max-age=31536000; SameSite=Lax"); }, []); const getLabel = useCallback((locale)=>{ if (!locationSlug) return ''; for (const city of locationTree){ var _city_names_locale; if (city.slug === locationSlug) return (_city_names_locale = city.names[locale]) !== null && _city_names_locale !== void 0 ? _city_names_locale : city.names.el; var _city_children; for (const d of (_city_children = city.children) !== null && _city_children !== void 0 ? _city_children : []){ var _d_names_locale; if (d.slug === locationSlug) return (_d_names_locale = d.names[locale]) !== null && _d_names_locale !== void 0 ? _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^ƒÖØ(4¿ÅELˆÈÏ ™¡±¼>H1;S V 4 : _ h €€€´(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)€†buffer†source„size„maps„hashŠ /* 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__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2982); /* __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 === null || match === void 0 ? void 0 : match[1]) ? decodeURIComponent(match[1]) : ''; } function LocationProvider(param) { let { children, initialSlug = '' } = param; 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 (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{ const cookieSlug = readCookieLocation(); setLocationSlug(cookieSlug); }, []); // Load location tree once (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=".concat(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){ var _city_names_locale; if (city.slug === locationSlug) return (_city_names_locale = city.names[locale]) !== null && _city_names_locale !== void 0 ? _city_names_locale : city.names.el; var _city_children; for (const d of (_city_children = city.children) !== null && _city_children !== void 0 ? _city_children : []){ var _d_names_locale; if (d.slug === locationSlug) return (_d_names_locale = d.names[locale]) !== null && _d_names_locale !== void 0 ? _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}ƒmap‹bufferedMap ConcatSourceRawSource/* 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__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2982); ReplaceSourceRawSource~ /* __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 === null || match === void 0 ? void 0 : match[1]) ? decodeURIComponent(match[1]) : ''; } export function LocationProvider(param) { let { children, initialSlug = '' } = param; const [locationSlug, setLocationSlug] = useState(initialSlug); const [locationTree, setLocationTree] = useState([]); const [locationLoading, setLocationLoading] = useState(true); // Sync from cookie on client mount useEffect(()=>{ const cookieSlug = readCookieLocation(); setLocationSlug(cookieSlug); }, []); // Load location tree once useEffect(()=>{ getLocations().then((tree)=>setLocationTree(tree)).catch(()=>{}).finally(()=>setLocationLoading(false)); }, []); const setLocation = useCallback((slug)=>{ setLocationSlug(slug); const encoded = encodeURIComponent(slug); document.cookie = "canhelp_location=".concat(encoded, "; path=/; max-age=31536000; SameSite=Lax"); }, []); const getLabel = useCallback((locale)=>{ if (!locationSlug) return ''; for (const city of locationTree){ var _city_names_locale; if (city.slug === locationSlug) return (_city_names_locale = city.names[locale]) !== null && _city_names_locale !== void 0 ? _city_names_locale : city.names.el; var _city_children; for (const d of (_city_children = city.children) !== null && _city_children !== void 0 ? _city_children : []){ var _d_names_locale; if (d.slug === locationSlug) return (_d_names_locale = d.names[locale]) !== null && _d_names_locale !== void 0 ? _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)undefined703709undefined837844(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined904911(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined968975(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined10281036(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined11771185(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined12011212(0,_lib_api__WEBPACK_IMPORTED_MODULE_2__/* .getLocations */ .Vs)undefined13421352(0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)undefined15851595(0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)undefined23872390(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined26122618undefined26552664(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__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2982); /* __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 === null || match === void 0 ? void 0 : match[1]) ? decodeURIComponent(match[1]) : ''; } function LocationProvider(param) { let { children, initialSlug = '' } = param; 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 (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{ const cookieSlug = readCookieLocation(); setLocationSlug(cookieSlug); }, []); // Load location tree once (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=".concat(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){ var _city_names_locale; if (city.slug === locationSlug) return (_city_names_locale = city.names[locale]) !== null && _city_names_locale !== void 0 ? _city_names_locale : city.names.el; var _city_children; for (const d of (_city_children = city.children) !== null && _city_children !== void 0 ? _city_children : []){ var _d_names_locale; if (d.slug === locationSlug) return (_d_names_locale = d.names[locale]) !== null && _d_names_locale !== void 0 ? _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); } /***/ }) ËÎ  ÏÐÏ/* 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__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2982); Ñ~ /* __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 === null || match === void 0 ? void 0 : match[1]) ? decodeURIComponent(match[1]) : ''; } export function LocationProvider(param) { let { children, initialSlug = '' } = param; const [locationSlug, setLocationSlug] = useState(initialSlug); const [locationTree, setLocationTree] = useState([]); const [locationLoading, setLocationLoading] = useState(true); // Sync from cookie on client mount useEffect(()=>{ const cookieSlug = readCookieLocation(); setLocationSlug(cookieSlug); }, []); // Load location tree once useEffect(()=>{ getLocations().then((tree)=>setLocationTree(tree)).catch(()=>{}).finally(()=>setLocationLoading(false)); }, []); const setLocation = useCallback((slug)=>{ setLocationSlug(slug); const encoded = encodeURIComponent(slug); document.cookie = "canhelp_location=".concat(encoded, "; path=/; max-age=31536000; SameSite=Lax"); }, []); const getLabel = useCallback((locale)=>{ if (!locationSlug) return ''; for (const city of locationTree){ var _city_names_locale; if (city.slug === locationSlug) return (_city_names_locale = city.names[locale]) !== null && _city_names_locale !== void 0 ? _city_names_locale : city.names.el; var _city_children; for (const d of (_city_children = city.children) !== null && _city_children !== void 0 ? _city_children : []){ var _d_names_locale; if (d.slug === locationSlug) return (_d_names_locale = d.names[locale]) !== null && _d_names_locale !== void 0 ? _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)undefined703709undefined837844(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined904911(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined968975(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined10281036(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined11771185(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined12011212(0,_lib_api__WEBPACK_IMPORTED_MODULE_2__/* .getLocations */ .Vs)undefined13421352(0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)undefined15851595(0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)undefined23872390(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined26122618undefined26552664(0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)undefinedÒÓ, /***/ 6787:  g&«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSource_/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; «webpack/lib/util/registerExternalSerializerœwebpack-sources/CachedSource ¤ «webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSourceÀ/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ HeroSearch: () => (/* binding */ HeroSearch) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7541); «webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSource«/* __next_internal_client_entry_do_not_use__ HeroSearch auto */ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; import { useState } from 'react'; import { useRouter } from 'next/navigation'; export function HeroSearch(param) { let { placeholder, mode = 'customer' } = param; const [q, setQ] = useState(''); const router = useRouter(); const handleSubmit = (e)=>{ e.preventDefault(); const trimmed = q.trim(); if (mode === 'specialist') { if (trimmed) router.push("/tasks?q=".concat(encodeURIComponent(trimmed))); else router.push('/tasks'); } else { if (trimmed) router.push("/specialists?q=".concat(encodeURIComponent(trimmed))); else router.push('/specialists'); } }; return /*#__PURE__*/ _jsxs("form", { onSubmit: handleSubmit, className: "relative w-full mb-8", children: [ /*#__PURE__*/ _jsx("input", { type: "text", value: q, onChange: (e)=>setQ(e.target.value), placeholder: placeholder, className: "w-full pl-5 pr-14 py-3.5 rounded-2xl border border-blue-200 bg-white/90 text-blue-900 placeholder:text-blue-300 focus:outline-none focus:ring-2 focus:ring-blue-400 text-base shadow-sm" }), /*#__PURE__*/ _jsx("button", { type: "submit", className: "absolute right-2 top-1/2 -translate-y-1/2 bg-blue-600 hover:bg-blue-700 text-white p-2.5 rounded-xl transition-colors duration-200", "aria-label": "Search", children: /*#__PURE__*/ _jsx("svg", { className: "w-5 h-5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2.5, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 5.196a7.5 7.5 0 0010.607 10.607z" }) }) }) ] }); } b @~S€ ¢ÍÏÕ=D^f37¼¿be„‡†‰€€€€¯(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)º(0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)·(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)¶(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)ÿÿÿ€†buffer†source„size„maps„hash* /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ HeroSearch: () => (/* binding */ HeroSearch) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7541); /* __next_internal_client_entry_do_not_use__ HeroSearch auto */ function HeroSearch(param) { let { placeholder, mode = 'customer' } = param; const [q, setQ] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(''); const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)(); const handleSubmit = (e)=>{ e.preventDefault(); const trimmed = q.trim(); if (mode === 'specialist') { if (trimmed) router.push("/tasks?q=".concat(encodeURIComponent(trimmed))); else router.push('/tasks'); } else { if (trimmed) router.push("/specialists?q=".concat(encodeURIComponent(trimmed))); else router.push('/specialists'); } }; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("form", { onSubmit: handleSubmit, className: "relative w-full mb-8", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("input", { type: "text", value: q, onChange: (e)=>setQ(e.target.value), placeholder: placeholder, className: "w-full pl-5 pr-14 py-3.5 rounded-2xl border border-blue-200 bg-white/90 text-blue-900 placeholder:text-blue-300 focus:outline-none focus:ring-2 focus:ring-blue-400 text-base shadow-sm" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { type: "submit", className: "absolute right-2 top-1/2 -translate-y-1/2 bg-blue-600 hover:bg-blue-700 text-white p-2.5 rounded-xl transition-colors duration-200", "aria-label": "Search", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("svg", { className: "w-5 h-5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2.5, children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 5.196a7.5 7.5 0 0010.607 10.607z" }) }) }) ] }); } €”{"finalSource":true}ƒmap‹bufferedMap ConcatSourceRawSourceÀ/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ HeroSearch: () => (/* binding */ HeroSearch) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7541); ReplaceSourceRawSource«/* __next_internal_client_entry_do_not_use__ HeroSearch auto */ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; import { useState } from 'react'; import { useRouter } from 'next/navigation'; export function HeroSearch(param) { let { placeholder, mode = 'customer' } = param; const [q, setQ] = useState(''); const router = useRouter(); const handleSubmit = (e)=>{ e.preventDefault(); const trimmed = q.trim(); if (mode === 'specialist') { if (trimmed) router.push("/tasks?q=".concat(encodeURIComponent(trimmed))); else router.push('/tasks'); } else { if (trimmed) router.push("/specialists?q=".concat(encodeURIComponent(trimmed))); else router.push('/specialists'); } }; return /*#__PURE__*/ _jsxs("form", { onSubmit: handleSubmit, className: "relative w-full mb-8", children: [ /*#__PURE__*/ _jsx("input", { type: "text", value: q, onChange: (e)=>setQ(e.target.value), placeholder: placeholder, className: "w-full pl-5 pr-14 py-3.5 rounded-2xl border border-blue-200 bg-white/90 text-blue-900 placeholder:text-blue-300 focus:outline-none focus:ring-2 focus:ring-blue-400 text-base shadow-sm" }), /*#__PURE__*/ _jsx("button", { type: "submit", className: "absolute right-2 top-1/2 -translate-y-1/2 bg-blue-600 hover:bg-blue-700 text-white p-2.5 rounded-xl transition-colors duration-200", "aria-label": "Search", children: /*#__PURE__*/ _jsx("svg", { className: "w-5 h-5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2.5, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 5.196a7.5 7.5 0 0010.607 10.607z" }) }) }) ] }); } "64126undefined128160undefined162205undefined207213undefined317324(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined350358(0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)undefined819823(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined956959(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined13781381(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined16681671(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined19261929(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 */ HeroSearch: () => (/* binding */ HeroSearch) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7541); /* __next_internal_client_entry_do_not_use__ HeroSearch auto */ function HeroSearch(param) { let { placeholder, mode = 'customer' } = param; const [q, setQ] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(''); const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)(); const handleSubmit = (e)=>{ e.preventDefault(); const trimmed = q.trim(); if (mode === 'specialist') { if (trimmed) router.push("/tasks?q=".concat(encodeURIComponent(trimmed))); else router.push('/tasks'); } else { if (trimmed) router.push("/specialists?q=".concat(encodeURIComponent(trimmed))); else router.push('/specialists'); } }; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("form", { onSubmit: handleSubmit, className: "relative w-full mb-8", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("input", { type: "text", value: q, onChange: (e)=>setQ(e.target.value), placeholder: placeholder, className: "w-full pl-5 pr-14 py-3.5 rounded-2xl border border-blue-200 bg-white/90 text-blue-900 placeholder:text-blue-300 focus:outline-none focus:ring-2 focus:ring-blue-400 text-base shadow-sm" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { type: "submit", className: "absolute right-2 top-1/2 -translate-y-1/2 bg-blue-600 hover:bg-blue-700 text-white p-2.5 rounded-xl transition-colors duration-200", "aria-label": "Search", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("svg", { className: "w-5 h-5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2.5, children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 5.196a7.5 7.5 0 0010.607 10.607z" }) }) }) ] }); } /***/ }) Àà  ÄÅÄÀ/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ HeroSearch: () => (/* binding */ HeroSearch) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7541); Æ«/* __next_internal_client_entry_do_not_use__ HeroSearch auto */ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; import { useState } from 'react'; import { useRouter } from 'next/navigation'; export function HeroSearch(param) { let { placeholder, mode = 'customer' } = param; const [q, setQ] = useState(''); const router = useRouter(); const handleSubmit = (e)=>{ e.preventDefault(); const trimmed = q.trim(); if (mode === 'specialist') { if (trimmed) router.push("/tasks?q=".concat(encodeURIComponent(trimmed))); else router.push('/tasks'); } else { if (trimmed) router.push("/specialists?q=".concat(encodeURIComponent(trimmed))); else router.push('/specialists'); } }; return /*#__PURE__*/ _jsxs("form", { onSubmit: handleSubmit, className: "relative w-full mb-8", children: [ /*#__PURE__*/ _jsx("input", { type: "text", value: q, onChange: (e)=>setQ(e.target.value), placeholder: placeholder, className: "w-full pl-5 pr-14 py-3.5 rounded-2xl border border-blue-200 bg-white/90 text-blue-900 placeholder:text-blue-300 focus:outline-none focus:ring-2 focus:ring-blue-400 text-base shadow-sm" }), /*#__PURE__*/ _jsx("button", { type: "submit", className: "absolute right-2 top-1/2 -translate-y-1/2 bg-blue-600 hover:bg-blue-700 text-white p-2.5 rounded-xl transition-colors duration-200", "aria-label": "Search", children: /*#__PURE__*/ _jsx("svg", { className: "w-5 h-5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2.5, children: /*#__PURE__*/ _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 5.196a7.5 7.5 0 0010.607 10.607z" }) }) }) ] }); } "64126undefined128160undefined162205undefined207213undefined317324(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined350358(0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)undefined819823(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined956959(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined13781381(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined16681671(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined19261929(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefinedÇÈ, /***/ 6811:  ‘«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSource_/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; «webpack/lib/util/registerExternalSerializerœwebpack-sources/CachedSource #«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSource?/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ BecomeSpecialistButton: () => (/* binding */ BecomeSpecialistButton) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1592); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7541); /* harmony import */ var _context_locale__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9906); «webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSource©/* __next_internal_client_entry_do_not_use__ BecomeSpecialistButton auto */ import { jsx as _jsx } from "react/jsx-runtime"; import { useSession } from '@/lib/auth'; import { useRouter } from 'next/navigation'; import { useLocale } from '@/context/locale'; export function BecomeSpecialistButton(param) { let { className } = param; const { data: session, isPending } = useSession(); const router = useRouter(); const { t } = useLocale(); function handleClick() { if (isPending) return; if (!session) { router.push('/register?role=specialist'); } else { router.push('/become-specialist'); } } return /*#__PURE__*/ _jsx("button", { type: "button", onClick: handleClick, className: className !== null && className !== void 0 ? className : 'btn-outline w-full sm:w-auto text-center', children: t('hero.cta.browse') }); }  bL{}N¤¦ÑÓÿy‚š¢¹Á¹¼€€€€€¿(0,_lib_auth__WEBPACK_IMPORTED_MODULE_1__/* .useSession */ .wV)º(0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)Ã(0,_context_locale__WEBPACK_IMPORTED_MODULE_3__/* .useLocale */ .Y)¶(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)€†buffer†source„size„maps„hash/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ BecomeSpecialistButton: () => (/* binding */ BecomeSpecialistButton) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1592); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7541); /* harmony import */ var _context_locale__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9906); /* __next_internal_client_entry_do_not_use__ BecomeSpecialistButton auto */ function BecomeSpecialistButton(param) { let { className } = param; const { data: session, isPending } = (0,_lib_auth__WEBPACK_IMPORTED_MODULE_1__/* .useSession */ .wV)(); const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)(); const { t } = (0,_context_locale__WEBPACK_IMPORTED_MODULE_3__/* .useLocale */ .Y)(); function handleClick() { if (isPending) return; if (!session) { router.push('/register?role=specialist'); } else { router.push('/become-specialist'); } } return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { type: "button", onClick: handleClick, className: className !== null && className !== void 0 ? className : 'btn-outline w-full sm:w-auto text-center', children: t('hero.cta.browse') }); } €”{"finalSource":true}ƒmap‹bufferedMap ConcatSourceRawSource?/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ BecomeSpecialistButton: () => (/* binding */ BecomeSpecialistButton) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1592); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7541); /* harmony import */ var _context_locale__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9906); ReplaceSourceRawSource©/* __next_internal_client_entry_do_not_use__ BecomeSpecialistButton auto */ import { jsx as _jsx } from "react/jsx-runtime"; import { useSession } from '@/lib/auth'; import { useRouter } from 'next/navigation'; import { useLocale } from '@/context/locale'; export function BecomeSpecialistButton(param) { let { className } = param; const { data: session, isPending } = useSession(); const router = useRouter(); const { t } = useLocale(); function handleClick() { if (isPending) return; if (!session) { router.push('/register?role=specialist'); } else { router.push('/become-specialist'); } } return /*#__PURE__*/ _jsx("button", { type: "button", onClick: handleClick, className: className !== null && className !== void 0 ? className : 'btn-outline w-full sm:w-auto text-center', children: t('hero.cta.browse') }); } x76123undefined125164undefined166209undefined211255undefined257263undefined377386(0,_lib_auth__WEBPACK_IMPORTED_MODULE_1__/* .useSession */ .wV)undefined410418(0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)undefined441449(0,_context_locale__WEBPACK_IMPORTED_MODULE_3__/* .useLocale */ .Y)undefined697700(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined /***/ }) ´k/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ BecomeSpecialistButton: () => (/* binding */ BecomeSpecialistButton) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1592); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7541); /* harmony import */ var _context_locale__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9906); /* __next_internal_client_entry_do_not_use__ BecomeSpecialistButton auto */ function BecomeSpecialistButton(param) { let { className } = param; const { data: session, isPending } = (0,_lib_auth__WEBPACK_IMPORTED_MODULE_1__/* .useSession */ .wV)(); const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)(); const { t } = (0,_context_locale__WEBPACK_IMPORTED_MODULE_3__/* .useLocale */ .Y)(); function handleClick() { if (isPending) return; if (!session) { router.push('/register?role=specialist'); } else { router.push('/become-specialist'); } } return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { type: "button", onClick: handleClick, className: className !== null && className !== void 0 ? className : 'btn-outline w-full sm:w-auto text-center', children: t('hero.cta.browse') }); } /***/ }) µ¸  ¹º¹?/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ BecomeSpecialistButton: () => (/* binding */ BecomeSpecialistButton) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1592); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7541); /* harmony import */ var _context_locale__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9906); »©/* __next_internal_client_entry_do_not_use__ BecomeSpecialistButton auto */ import { jsx as _jsx } from "react/jsx-runtime"; import { useSession } from '@/lib/auth'; import { useRouter } from 'next/navigation'; import { useLocale } from '@/context/locale'; export function BecomeSpecialistButton(param) { let { className } = param; const { data: session, isPending } = useSession(); const router = useRouter(); const { t } = useLocale(); function handleClick() { if (isPending) return; if (!session) { router.push('/register?role=specialist'); } else { router.push('/become-specialist'); } } return /*#__PURE__*/ _jsx("button", { type: "button", onClick: handleClick, className: className !== null && className !== void 0 ? className : 'btn-outline w-full sm:w-auto text-center', children: t('hero.cta.browse') }); } x76123undefined125164undefined166209undefined211255undefined257263undefined377386(0,_lib_auth__WEBPACK_IMPORTED_MODULE_1__/* .useSession */ .wV)undefined410418(0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)undefined441449(0,_context_locale__WEBPACK_IMPORTED_MODULE_3__/* .useLocale */ .Y)undefined697700(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined¼½, /***/ 9869:  ;(«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSource_/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; «webpack/lib/util/registerExternalSerializerœwebpack-sources/CachedSource Ë «webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSourcea/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ FaqAccordion: () => (/* binding */ FaqAccordion) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); «webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSource[ /* __next_internal_client_entry_do_not_use__ FaqAccordion auto */ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; import { useState } from 'react'; export function FaqAccordion(param) { let { items } = param; const [open, setOpen] = useState(null); return /*#__PURE__*/ _jsx("div", { className: "space-y-3", children: items.map((item, i)=>{ const isOpen = open === i; return /*#__PURE__*/ _jsxs("div", { className: "modern-card overflow-hidden transition-all duration-200", children: [ /*#__PURE__*/ _jsxs("button", { type: "button", className: "w-full flex items-center justify-between gap-4 px-6 py-5 text-left", onClick: ()=>setOpen(isOpen ? null : i), children: [ /*#__PURE__*/ _jsx("span", { className: "font-semibold text-blue-900 text-base leading-snug", children: item.q }), /*#__PURE__*/ _jsx("span", { className: "shrink-0 w-6 h-6 rounded-full bg-blue-50 flex items-center justify-center transition-transform ".concat(isOpen ? 'rotate-45' : ''), children: /*#__PURE__*/ _jsx("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", children: /*#__PURE__*/ _jsx("path", { d: "M7 2v10M2 7h10", stroke: "#2563EB", strokeWidth: "2", strokeLinecap: "round" }) }) }) ] }), isOpen && /*#__PURE__*/ _jsx("div", { className: "px-6 pb-5 text-blue-700 text-sm leading-relaxed border-t border-blue-50 pt-4", children: item.a }) ] }, i); }) }); } a BV€‚¢¤ª*-ÉÍlpž¡‰Œ€ƒ™œ`c€€€¯(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)¶(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)·(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)ÿþþþþþ€†buffer†source„size„maps„hash /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ FaqAccordion: () => (/* binding */ FaqAccordion) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* __next_internal_client_entry_do_not_use__ FaqAccordion auto */ function FaqAccordion(param) { let { items } = param; const [open, setOpen] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null); return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "space-y-3", children: items.map((item, i)=>{ const isOpen = open === i; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "modern-card overflow-hidden transition-all duration-200", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("button", { type: "button", className: "w-full flex items-center justify-between gap-4 px-6 py-5 text-left", onClick: ()=>setOpen(isOpen ? null : i), children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "font-semibold text-blue-900 text-base leading-snug", children: item.q }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "shrink-0 w-6 h-6 rounded-full bg-blue-50 flex items-center justify-center transition-transform ".concat(isOpen ? 'rotate-45' : ''), children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path", { d: "M7 2v10M2 7h10", stroke: "#2563EB", strokeWidth: "2", strokeLinecap: "round" }) }) }) ] }), isOpen && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "px-6 pb-5 text-blue-700 text-sm leading-relaxed border-t border-blue-50 pt-4", children: item.a }) ] }, i); }) }); } €”{"finalSource":true}ƒmap‹bufferedMap ConcatSourceRawSourcea/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ FaqAccordion: () => (/* binding */ FaqAccordion) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); ReplaceSourceRawSource[ /* __next_internal_client_entry_do_not_use__ FaqAccordion auto */ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; import { useState } from 'react'; export function FaqAccordion(param) { let { items } = param; const [open, setOpen] = useState(null); return /*#__PURE__*/ _jsx("div", { className: "space-y-3", children: items.map((item, i)=>{ const isOpen = open === i; return /*#__PURE__*/ _jsxs("div", { className: "modern-card overflow-hidden transition-all duration-200", children: [ /*#__PURE__*/ _jsxs("button", { type: "button", className: "w-full flex items-center justify-between gap-4 px-6 py-5 text-left", onClick: ()=>setOpen(isOpen ? null : i), children: [ /*#__PURE__*/ _jsx("span", { className: "font-semibold text-blue-900 text-base leading-snug", children: item.q }), /*#__PURE__*/ _jsx("span", { className: "shrink-0 w-6 h-6 rounded-full bg-blue-50 flex items-center justify-center transition-transform ".concat(isOpen ? 'rotate-45' : ''), children: /*#__PURE__*/ _jsx("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", children: /*#__PURE__*/ _jsx("path", { d: "M7 2v10M2 7h10", stroke: "#2563EB", strokeWidth: "2", strokeLinecap: "round" }) }) }) ] }), isOpen && /*#__PURE__*/ _jsx("div", { className: "px-6 pb-5 text-blue-700 text-sm leading-relaxed border-t border-blue-50 pt-4", children: item.a }) ] }, i); }) }); } œ66128undefined130162undefined164170undefined257264(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined298301(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined457461(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined620624(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined926929(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined11611164(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined14081411(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined16891692(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined21442147(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined /***/ }) ©u /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ FaqAccordion: () => (/* binding */ FaqAccordion) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* __next_internal_client_entry_do_not_use__ FaqAccordion auto */ function FaqAccordion(param) { let { items } = param; const [open, setOpen] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null); return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "space-y-3", children: items.map((item, i)=>{ const isOpen = open === i; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "modern-card overflow-hidden transition-all duration-200", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("button", { type: "button", className: "w-full flex items-center justify-between gap-4 px-6 py-5 text-left", onClick: ()=>setOpen(isOpen ? null : i), children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "font-semibold text-blue-900 text-base leading-snug", children: item.q }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "shrink-0 w-6 h-6 rounded-full bg-blue-50 flex items-center justify-center transition-transform ".concat(isOpen ? 'rotate-45' : ''), children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path", { d: "M7 2v10M2 7h10", stroke: "#2563EB", strokeWidth: "2", strokeLinecap: "round" }) }) }) ] }), isOpen && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "px-6 pb-5 text-blue-700 text-sm leading-relaxed border-t border-blue-50 pt-4", children: item.a }) ] }, i); }) }); } /***/ }) ª­  ®¯®a/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ FaqAccordion: () => (/* binding */ FaqAccordion) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); °[ /* __next_internal_client_entry_do_not_use__ FaqAccordion auto */ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; import { useState } from 'react'; export function FaqAccordion(param) { let { items } = param; const [open, setOpen] = useState(null); return /*#__PURE__*/ _jsx("div", { className: "space-y-3", children: items.map((item, i)=>{ const isOpen = open === i; return /*#__PURE__*/ _jsxs("div", { className: "modern-card overflow-hidden transition-all duration-200", children: [ /*#__PURE__*/ _jsxs("button", { type: "button", className: "w-full flex items-center justify-between gap-4 px-6 py-5 text-left", onClick: ()=>setOpen(isOpen ? null : i), children: [ /*#__PURE__*/ _jsx("span", { className: "font-semibold text-blue-900 text-base leading-snug", children: item.q }), /*#__PURE__*/ _jsx("span", { className: "shrink-0 w-6 h-6 rounded-full bg-blue-50 flex items-center justify-center transition-transform ".concat(isOpen ? 'rotate-45' : ''), children: /*#__PURE__*/ _jsx("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", children: /*#__PURE__*/ _jsx("path", { d: "M7 2v10M2 7h10", stroke: "#2563EB", strokeWidth: "2", strokeLinecap: "round" }) }) }) ] }), isOpen && /*#__PURE__*/ _jsx("div", { className: "px-6 pb-5 text-blue-700 text-sm leading-relaxed border-t border-blue-50 pt-4", children: item.a }) ] }, i); }) }); } œ66128undefined130162undefined164170undefined257264(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined298301(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined457461(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined620624(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined926929(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined11611164(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined14081411(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined16891692(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined21442147(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined±² }, «webpack/lib/util/registerExternalSerializerœwebpack-sources/PrefixSource‰/******/ 2__webpack_require__ => { // webpackRuntimeModules èvar __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) __webpack_require__.O(0, [516,664,906,982,587,18,358], () => (__webpack_exec__(3875))); var __webpack_exports__ = __webpack_require__.O(); _N_E = __webpack_exports__; } ]); ÿÿÿ†J(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([[974],{ /***/ 912: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ShareButton: () => (/* binding */ ShareButton) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* __next_internal_client_entry_do_not_use__ ShareButton auto */ function ShareButton(param) { let { label, copiedLabel } = param; const [copied, setCopied] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false); const handle = async ()=>{ const url = window.location.origin; if (navigator.share) { try { await navigator.share({ url, title: 'CanHelp' }); return; } catch (e) {} } await navigator.clipboard.writeText(url); setCopied(true); setTimeout(()=>setCopied(false), 2500); }; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { type: "button", onClick: handle, className: "inline-flex items-center gap-2 bg-amber-500 text-white px-8 py-3.5 rounded-2xl font-bold text-base hover:bg-amber-600 transition shadow-md shadow-amber-500/25 active:scale-95", children: copied ? /*#__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)("span", { className: "text-lg", children: "✓" }), copiedLabel ] }) : /*#__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)("span", { className: "text-lg", children: "\uD83D\uDD17" }), label ] }) }); } /***/ }), /***/ 1592: /***/ ((__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__(6504); 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; /***/ }), /***/ 2294: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ HomeCityCloud: () => (/* binding */ HomeCityCloud) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7541); /* harmony import */ var _context_location__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4029); /* harmony import */ var _context_locale__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9906); /* __next_internal_client_entry_do_not_use__ HomeCityCloud auto */ function HomeCityCloud(param) { let { locationTree, isSpecialist = false } = param; const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_1__.useRouter)(); const { setLocation } = (0,_context_location__WEBPACK_IMPORTED_MODULE_2__/* .useLocation */ .z)(); const { locale } = (0,_context_locale__WEBPACK_IMPORTED_MODULE_3__/* .useLocale */ .Y)(); const handleClick = (slug)=>{ if (isSpecialist) { router.push("/tasks?location=".concat(slug)); } else { setLocation(slug); router.push('/tasks/new'); } }; if (!locationTree.length) return null; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "flex flex-wrap justify-center gap-3", children: locationTree.map((city)=>{ var _city_names_locale, _city_children; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "flex flex-wrap items-center gap-2", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("button", { type: "button", onClick: ()=>handleClick(city.slug), className: "inline-flex items-center gap-1 px-4 py-2 rounded-full bg-indigo-100 text-indigo-700 font-semibold text-sm hover:bg-indigo-200 transition cursor-pointer", children: [ "\uD83D\uDCCD ", (_city_names_locale = city.names[locale]) !== null && _city_names_locale !== void 0 ? _city_names_locale : city.names['el'] ] }), ((_city_children = city.children) !== null && _city_children !== void 0 ? _city_children : []).map((d)=>{ var _d_names_locale; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { type: "button", onClick: ()=>handleClick(d.slug), className: "inline-flex items-center px-3 py-1.5 rounded-full bg-slate-100 text-slate-700 text-sm hover:bg-indigo-100 hover:text-indigo-700 transition cursor-pointer", children: (_d_names_locale = d.names[locale]) !== null && _d_names_locale !== void 0 ? _d_names_locale : d.names['el'] }, d.id); }) ] }, city.id); }) }); } /***/ }), /***/ 3875: /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 6811)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 9869)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 6787)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 2294)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 912)); ; Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 9664, 23)); /***/ }), /***/ 4029: /***/ ((__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__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2982); /* __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 === null || match === void 0 ? void 0 : match[1]) ? decodeURIComponent(match[1]) : ''; } function LocationProvider(param) { let { children, initialSlug = '' } = param; 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 (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{ const cookieSlug = readCookieLocation(); setLocationSlug(cookieSlug); }, []); // Load location tree once (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=".concat(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){ var _city_names_locale; if (city.slug === locationSlug) return (_city_names_locale = city.names[locale]) !== null && _city_names_locale !== void 0 ? _city_names_locale : city.names.el; var _city_children; for (const d of (_city_children = city.children) !== null && _city_children !== void 0 ? _city_children : []){ var _d_names_locale; if (d.slug === locationSlug) return (_d_names_locale = d.names[locale]) !== null && _d_names_locale !== void 0 ? _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); } /***/ }), /***/ 6787: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ HeroSearch: () => (/* binding */ HeroSearch) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7541); /* __next_internal_client_entry_do_not_use__ HeroSearch auto */ function HeroSearch(param) { let { placeholder, mode = 'customer' } = param; const [q, setQ] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(''); const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)(); const handleSubmit = (e)=>{ e.preventDefault(); const trimmed = q.trim(); if (mode === 'specialist') { if (trimmed) router.push("/tasks?q=".concat(encodeURIComponent(trimmed))); else router.push('/tasks'); } else { if (trimmed) router.push("/specialists?q=".concat(encodeURIComponent(trimmed))); else router.push('/specialists'); } }; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("form", { onSubmit: handleSubmit, className: "relative w-full mb-8", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("input", { type: "text", value: q, onChange: (e)=>setQ(e.target.value), placeholder: placeholder, className: "w-full pl-5 pr-14 py-3.5 rounded-2xl border border-blue-200 bg-white/90 text-blue-900 placeholder:text-blue-300 focus:outline-none focus:ring-2 focus:ring-blue-400 text-base shadow-sm" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { type: "submit", className: "absolute right-2 top-1/2 -translate-y-1/2 bg-blue-600 hover:bg-blue-700 text-white p-2.5 rounded-xl transition-colors duration-200", "aria-label": "Search", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("svg", { className: "w-5 h-5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2.5, children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 5.196a7.5 7.5 0 0010.607 10.607z" }) }) }) ] }); } /***/ }), /***/ 6811: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ BecomeSpecialistButton: () => (/* binding */ BecomeSpecialistButton) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1592); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7541); /* harmony import */ var _context_locale__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9906); /* __next_internal_client_entry_do_not_use__ BecomeSpecialistButton auto */ function BecomeSpecialistButton(param) { let { className } = param; const { data: session, isPending } = (0,_lib_auth__WEBPACK_IMPORTED_MODULE_1__/* .useSession */ .wV)(); const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)(); const { t } = (0,_context_locale__WEBPACK_IMPORTED_MODULE_3__/* .useLocale */ .Y)(); function handleClick() { if (isPending) return; if (!session) { router.push('/register?role=specialist'); } else { router.push('/become-specialist'); } } return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { type: "button", onClick: handleClick, className: className !== null && className !== void 0 ? className : 'btn-outline w-full sm:w-auto text-center', children: t('hero.cta.browse') }); } /***/ }), /***/ 9869: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ FaqAccordion: () => (/* binding */ FaqAccordion) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* __next_internal_client_entry_do_not_use__ FaqAccordion auto */ function FaqAccordion(param) { let { items } = param; const [open, setOpen] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null); return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "space-y-3", children: items.map((item, i)=>{ const isOpen = open === i; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "modern-card overflow-hidden transition-all duration-200", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("button", { type: "button", className: "w-full flex items-center justify-between gap-4 px-6 py-5 text-left", onClick: ()=>setOpen(isOpen ? null : i), children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "font-semibold text-blue-900 text-base leading-snug", children: item.q }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "shrink-0 w-6 h-6 rounded-full bg-blue-50 flex items-center justify-center transition-transform ".concat(isOpen ? 'rotate-45' : ''), children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path", { d: "M7 2v10M2 7h10", stroke: "#2563EB", strokeWidth: "2", strokeLinecap: "round" }) }) }) ] }), isOpen && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "px-6 pb-5 text-blue-700 text-sm leading-relaxed border-t border-blue-50 pt-4", children: item.a }) ] }, i); }) }); } /***/ }) }, /******/ __webpack_require__ => { // webpackRuntimeModules /******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) /******/ __webpack_require__.O(0, [516,664,906,982,587,18,358], () => (__webpack_exec__(3875))); /******/ var __webpack_exports__ = __webpack_require__.O(); /******/ _N_E = __webpack_exports__; /******/ } ]); ÎVÿÿÿ ``cÿÿÿV(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([[974],{ /***/ 912: bÿÿÿÏbÿÿÿ_/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ShareButton: () => (/* binding */ ShareButton) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); Uÿÿÿ1/* __next_internal_client_entry_do_not_use__ ShareButton auto */ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime"; import { useState } from 'react'; export function ShareButton(param) { let { label, copiedLabel } = param; const [copied, setCopied] = useState(false); const handle = async ()=>{ const url = window.location.origin; if (navigator.share) { try { await navigator.share({ url, title: 'CanHelp' }); return; } catch (e) {} } await navigator.clipboard.writeText(url); setCopied(true); setTimeout(()=>setCopied(false), 2500); }; return /*#__PURE__*/ _jsx("button", { type: "button", onClick: handle, className: "inline-flex items-center gap-2 bg-amber-500 text-white px-8 py-3.5 rounded-2xl font-bold text-base hover:bg-amber-600 transition shadow-md shadow-amber-500/25 active:scale-95", children: copied ? /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx("span", { className: "text-lg", children: "✓" }), copiedLabel ] }) : /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx("span", { className: "text-lg", children: "\uD83D\uDD17" }), label ] }) }); } ]65150undefined152184undefined186192undefined295302(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined774777(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined10781082(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined10841092react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragmentundefined11511154(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined13311335(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined13371345react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragmentundefined14041407(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefinedÍÎÍÓ_ÿÿÿÌ_ÿÿÿÔSÿÿÿÕÖÍÎÍ, /***/ 2294: ^ÿÿÿË^ÿÿÿjÿÿÿRÿÿÿSûÿÿkÿÿÿÌÍÌ, /***/ 3875: ]ÿÿÿV/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { Pÿÿÿimport(/* webpackMode: "eager", webpackExports: ["BecomeSpecialistButton"] */ "/opt/canhelp/apps/web/src/components/BecomeSpecialistButton.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["FaqAccordion"] */ "/opt/canhelp/apps/web/src/components/FaqAccordion.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["HeroSearch"] */ "/opt/canhelp/apps/web/src/components/HeroSearch.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["HomeCityCloud"] */ "/opt/canhelp/apps/web/src/components/HomeCityCloud.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["ShareButton"] */ "/opt/canhelp/apps/web/src/components/ShareButton.tsx"); ; import(/* webpackMode: "eager", webpackExports: ["__esModule","default"] */ "/opt/canhelp/node_modules/next/dist/client/app-dir/link.js"); —0143Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 6811))undefined148271Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 9869))undefined276395Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 6787))undefined400525Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 2294))undefined530651Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 912))undefined656792Promise.resolve(/* import() eager */).then(__webpack_require__.t.bind(__webpack_require__, 9664, 23))undefinedÈÉÈÔZÿÿÿÇZÿÿÿÕNÿÿÿÖ×ÈÉÈ, /***/ 6787: YÿÿÿÆYÿÿÿZÿÿÿMÿÿÿûÿÿ[ÿÿÿÇÈÇ, /***/ 6811: XÿÿÿÅXÿÿÿ?/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ BecomeSpecialistButton: () => (/* binding */ BecomeSpecialistButton) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1592); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7541); /* harmony import */ var _context_locale__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9906); Kÿÿÿ©/* __next_internal_client_entry_do_not_use__ BecomeSpecialistButton auto */ import { jsx as _jsx } from "react/jsx-runtime"; import { useSession } from '@/lib/auth'; import { useRouter } from 'next/navigation'; import { useLocale } from '@/context/locale'; export function BecomeSpecialistButton(param) { let { className } = param; const { data: session, isPending } = useSession(); const router = useRouter(); const { t } = useLocale(); function handleClick() { if (isPending) return; if (!session) { router.push('/register?role=specialist'); } else { router.push('/become-specialist'); } } return /*#__PURE__*/ _jsx("button", { type: "button", onClick: handleClick, className: className !== null && className !== void 0 ? className : 'btn-outline w-full sm:w-auto text-center', children: t('hero.cta.browse') }); } x76123undefined125164undefined166209undefined211255undefined257263undefined377386(0,_lib_auth__WEBPACK_IMPORTED_MODULE_1__/* .useSession */ .wV)undefined410418(0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)undefined441449(0,_context_locale__WEBPACK_IMPORTED_MODULE_3__/* .useLocale */ .Y)undefined697700(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefinedÃÄÃ, /***/ 9869: TÿÿÿÁTÿÿÿa/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ FaqAccordion: () => (/* binding */ FaqAccordion) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); Gÿÿÿ[ /* __next_internal_client_entry_do_not_use__ FaqAccordion auto */ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; import { useState } from 'react'; export function FaqAccordion(param) { let { items } = param; const [open, setOpen] = useState(null); return /*#__PURE__*/ _jsx("div", { className: "space-y-3", children: items.map((item, i)=>{ const isOpen = open === i; return /*#__PURE__*/ _jsxs("div", { className: "modern-card overflow-hidden transition-all duration-200", children: [ /*#__PURE__*/ _jsxs("button", { type: "button", className: "w-full flex items-center justify-between gap-4 px-6 py-5 text-left", onClick: ()=>setOpen(isOpen ? null : i), children: [ /*#__PURE__*/ _jsx("span", { className: "font-semibold text-blue-900 text-base leading-snug", children: item.q }), /*#__PURE__*/ _jsx("span", { className: "shrink-0 w-6 h-6 rounded-full bg-blue-50 flex items-center justify-center transition-transform ".concat(isOpen ? 'rotate-45' : ''), children: /*#__PURE__*/ _jsx("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", children: /*#__PURE__*/ _jsx("path", { d: "M7 2v10M2 7h10", stroke: "#2563EB", strokeWidth: "2", strokeLinecap: "round" }) }) }) ] }), isOpen && /*#__PURE__*/ _jsx("div", { className: "px-6 pb-5 text-blue-700 text-sm leading-relaxed border-t border-blue-50 pt-4", children: item.a }) ] }, i); }) }); } œ66128undefined130162undefined164170undefined257264(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined298301(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined457461(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined620624(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined926929(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined11611164(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined14081411(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined16891692(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined21442147(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined¿À¿á!PrefixSourceConcatSourceRawSourceâ¾èvar __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) __webpack_require__.O(0, [516,664,906,982,587,18,358], () => (__webpack_exec__(3875))); var __webpack_exports__ = __webpack_require__.O(); ½ãäå áÜ«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€` «webpack/lib/util/registerExternalSerializer™webpack-sources/RawSourceV(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([[907],{ /***/ 160: «webpack/lib/util/registerExternalSerializerœwebpack-sources/CachedSource [«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSourceV/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { «webpack/lib/util/registerExternalSerializerœwebpack-sources/CachedSource V«webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSource«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSourceUimport(/* webpackMode: "eager" */ "/opt/canhelp/apps/web/src/app/pricing/page.tsx"); `RßPromise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 8880))€†buffer†source„size„maps„hashaPromise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 8880)); €”{"finalSource":true}ƒmap‹bufferedMap ReplaceSourceRawSourceUimport(/* webpackMode: "eager" */ "/opt/canhelp/apps/web/src/app/pricing/page.tsx"); k082Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 8880))undefined /***/ }) €†buffer†source„size„maps„hashÁ/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 8880)); /***/ }) €”{"finalSource":true}ƒmap‹bufferedMap ConcatSourceRawSourceV/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { ReplaceSourceRawSourceUimport(/* webpackMode: "eager" */ "/opt/canhelp/apps/web/src/app/pricing/page.tsx"); k082Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 8880))undefined RawSource /***/ }), /***/ 1592:  ú «webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSource_/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; «webpack/lib/util/registerExternalSerializerœwebpack-sources/CachedSource w«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-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__(6504); «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)€€†buffer†source„size„maps„hashÌ/* 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__(6504); 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}ƒmap‹bufferedMap 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__(6504); 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 /***/ }) ì5/***/ ((__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__(6504); 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; /***/ }) íð  ñ_/***/ ((__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__(6504); ñ 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òó, /***/ 2035:  @?«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSource_/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; «webpack/lib/util/registerExternalSerializerœwebpack-sources/CachedSource ;«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSourceú/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ d: () => (/* binding */ PlanBadge) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); «webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSourceimport { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; const tierConfig = { free: { label: 'Free', class: 'bg-gray-100 text-gray-500 border border-gray-200', icon: '' }, pro: { label: 'Pro', class: 'bg-blue-100 text-blue-700 border border-blue-200', icon: /*#__PURE__*/ _jsx("svg", { viewBox: "0 0 16 16", fill: "none", className: "w-3 h-3 inline-block mr-0.5 -mt-px", children: /*#__PURE__*/ _jsx("path", { d: "M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.5l-3.7 1.9.7-4.1-3-2.9 4.2-.9L8 1z", fill: "currentColor" }) }) }, ultimate: { label: 'Ultimate', class: 'bg-gradient-to-r from-amber-400 via-yellow-400 to-amber-400 text-gray-900 border border-amber-500 shadow-sm shadow-amber-300/50', icon: /*#__PURE__*/ _jsx("svg", { viewBox: "0 0 16 16", fill: "none", className: "w-3 h-3 inline-block mr-0.5 -mt-px", children: /*#__PURE__*/ _jsx("path", { d: "M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.5l-3.7 1.9.7-4.1-3-2.9 4.2-.9L8 1z", fill: "currentColor" }) }) } }; export function PlanBadge(param) { let { tier, verified, size = 'sm', className = '' } = param; if (tier === 'free' && !verified) return null; const sizeClass = size === 'sm' ? 'text-[10px] px-1.5 py-0.5' : 'text-xs px-2 py-0.5'; if (verified && tier !== 'free') { return /*#__PURE__*/ _jsxs("span", { className: "inline-flex items-center gap-1 rounded-full font-semibold ".concat(sizeClass, " ").concat(tierConfig[tier].class, " ").concat(className), children: [ tier === 'ultimate' ? /*#__PURE__*/ _jsx(StarIcon, { className: "w-3 h-3 fill-gray-900" }) : /*#__PURE__*/ _jsx(VerifiedIcon, { className: "w-3 h-3" }), tierConfig[tier].label ] }); } if (verified) { return /*#__PURE__*/ _jsx("span", { className: "inline-flex items-center gap-0.5 rounded-full font-semibold ".concat(sizeClass, " bg-blue-100 text-blue-700 border border-blue-200 ").concat(className), children: /*#__PURE__*/ _jsx(VerifiedIcon, { className: "w-3 h-3" }) }); } const cfg = tierConfig[tier]; return /*#__PURE__*/ _jsxs("span", { className: "inline-flex items-center rounded-full font-semibold ".concat(sizeClass, " ").concat(cfg.class, " ").concat(className), children: [ tier === 'pro' && /*#__PURE__*/ _jsx(StarIcon, { className: "w-3 h-3 mr-0.5 -mt-px" }), tier === 'ultimate' && /*#__PURE__*/ _jsx(StarIcon, { className: "w-3 h-3 mr-0.5 -mt-px fill-gray-900" }), cfg.label ] }); } function StarIcon(param) { let { className = '' } = param; return /*#__PURE__*/ _jsx("svg", { viewBox: "0 0 16 16", fill: "none", className: className, children: /*#__PURE__*/ _jsx("path", { d: "M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.5l-3.7 1.9.7-4.1-3-2.9 4.2-.9L8 1z", fill: "currentColor" }) }); } function VerifiedIcon(param) { let { className = '' } = param; return /*#__PURE__*/ _jsxs("svg", { viewBox: "0 0 16 16", fill: "none", className: className, children: [ /*#__PURE__*/ _jsx("path", { d: "M8 1l2 1.4 2.4-.4 1 2.2 2 1.2-.4 2.4L16 10l-1.8 1.6.4 2.4-2.2.8L10.8 17 8 16.2 5.2 17l-1.2-2.2-2.2-.8.4-2.4L0 10l1-2.2-.4-2.4 2-1.2 1-2.2 2.4.4L8 1z", fill: "#3B82F6" }), /*#__PURE__*/ _jsx("path", { d: "M5.5 8.5l1.5 1.5 3-3", stroke: "white", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) ] }); } b>_SVþ‹Ž69ìò"& #‹ŽUX9 < Ï Ó ª ­ / 2   “ – “ C!"%€¶(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)ÿÿÿ€·(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)þþþþÿþþþþÿþþ€†buffer†source„size„maps„hash/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ d: () => (/* binding */ PlanBadge) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); const tierConfig = { free: { label: 'Free', class: 'bg-gray-100 text-gray-500 border border-gray-200', icon: '' }, pro: { label: 'Pro', class: 'bg-blue-100 text-blue-700 border border-blue-200', icon: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("svg", { viewBox: "0 0 16 16", fill: "none", className: "w-3 h-3 inline-block mr-0.5 -mt-px", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path", { d: "M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.5l-3.7 1.9.7-4.1-3-2.9 4.2-.9L8 1z", fill: "currentColor" }) }) }, ultimate: { label: 'Ultimate', class: 'bg-gradient-to-r from-amber-400 via-yellow-400 to-amber-400 text-gray-900 border border-amber-500 shadow-sm shadow-amber-300/50', icon: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("svg", { viewBox: "0 0 16 16", fill: "none", className: "w-3 h-3 inline-block mr-0.5 -mt-px", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path", { d: "M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.5l-3.7 1.9.7-4.1-3-2.9 4.2-.9L8 1z", fill: "currentColor" }) }) } }; function PlanBadge(param) { let { tier, verified, size = 'sm', className = '' } = param; if (tier === 'free' && !verified) return null; const sizeClass = size === 'sm' ? 'text-[10px] px-1.5 py-0.5' : 'text-xs px-2 py-0.5'; if (verified && tier !== 'free') { return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", { className: "inline-flex items-center gap-1 rounded-full font-semibold ".concat(sizeClass, " ").concat(tierConfig[tier].class, " ").concat(className), children: [ tier === 'ultimate' ? /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(StarIcon, { className: "w-3 h-3 fill-gray-900" }) : /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(VerifiedIcon, { className: "w-3 h-3" }), tierConfig[tier].label ] }); } if (verified) { return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "inline-flex items-center gap-0.5 rounded-full font-semibold ".concat(sizeClass, " bg-blue-100 text-blue-700 border border-blue-200 ").concat(className), children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(VerifiedIcon, { className: "w-3 h-3" }) }); } const cfg = tierConfig[tier]; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", { className: "inline-flex items-center rounded-full font-semibold ".concat(sizeClass, " ").concat(cfg.class, " ").concat(className), children: [ tier === 'pro' && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(StarIcon, { className: "w-3 h-3 mr-0.5 -mt-px" }), tier === 'ultimate' && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(StarIcon, { className: "w-3 h-3 mr-0.5 -mt-px fill-gray-900" }), cfg.label ] }); } function StarIcon(param) { let { className = '' } = param; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("svg", { viewBox: "0 0 16 16", fill: "none", className: className, children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path", { d: "M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.5l-3.7 1.9.7-4.1-3-2.9 4.2-.9L8 1z", fill: "currentColor" }) }); } function VerifiedIcon(param) { let { className = '' } = param; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("svg", { viewBox: "0 0 16 16", fill: "none", className: className, children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path", { d: "M8 1l2 1.4 2.4-.4 1 2.2 2 1.2-.4 2.4L16 10l-1.8 1.6.4 2.4-2.2.8L10.8 17 8 16.2 5.2 17l-1.2-2.2-2.2-.8.4-2.4L0 10l1-2.2-.4-2.4 2-1.2 1-2.2 2.4.4L8 1z", fill: "#3B82F6" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path", { d: "M5.5 8.5l1.5 1.5 3-3", stroke: "white", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) ] }); } €”{"finalSource":true}ƒmap‹bufferedMap ConcatSourceRawSourceú/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ d: () => (/* binding */ PlanBadge) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); ReplaceSourceRawSourceimport { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; const tierConfig = { free: { label: 'Free', class: 'bg-gray-100 text-gray-500 border border-gray-200', icon: '' }, pro: { label: 'Pro', class: 'bg-blue-100 text-blue-700 border border-blue-200', icon: /*#__PURE__*/ _jsx("svg", { viewBox: "0 0 16 16", fill: "none", className: "w-3 h-3 inline-block mr-0.5 -mt-px", children: /*#__PURE__*/ _jsx("path", { d: "M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.5l-3.7 1.9.7-4.1-3-2.9 4.2-.9L8 1z", fill: "currentColor" }) }) }, ultimate: { label: 'Ultimate', class: 'bg-gradient-to-r from-amber-400 via-yellow-400 to-amber-400 text-gray-900 border border-amber-500 shadow-sm shadow-amber-300/50', icon: /*#__PURE__*/ _jsx("svg", { viewBox: "0 0 16 16", fill: "none", className: "w-3 h-3 inline-block mr-0.5 -mt-px", children: /*#__PURE__*/ _jsx("path", { d: "M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.5l-3.7 1.9.7-4.1-3-2.9 4.2-.9L8 1z", fill: "currentColor" }) }) } }; export function PlanBadge(param) { let { tier, verified, size = 'sm', className = '' } = param; if (tier === 'free' && !verified) return null; const sizeClass = size === 'sm' ? 'text-[10px] px-1.5 py-0.5' : 'text-xs px-2 py-0.5'; if (verified && tier !== 'free') { return /*#__PURE__*/ _jsxs("span", { className: "inline-flex items-center gap-1 rounded-full font-semibold ".concat(sizeClass, " ").concat(tierConfig[tier].class, " ").concat(className), children: [ tier === 'ultimate' ? /*#__PURE__*/ _jsx(StarIcon, { className: "w-3 h-3 fill-gray-900" }) : /*#__PURE__*/ _jsx(VerifiedIcon, { className: "w-3 h-3" }), tierConfig[tier].label ] }); } if (verified) { return /*#__PURE__*/ _jsx("span", { className: "inline-flex items-center gap-0.5 rounded-full font-semibold ".concat(sizeClass, " bg-blue-100 text-blue-700 border border-blue-200 ").concat(className), children: /*#__PURE__*/ _jsx(VerifiedIcon, { className: "w-3 h-3" }) }); } const cfg = tierConfig[tier]; return /*#__PURE__*/ _jsxs("span", { className: "inline-flex items-center rounded-full font-semibold ".concat(sizeClass, " ").concat(cfg.class, " ").concat(className), children: [ tier === 'pro' && /*#__PURE__*/ _jsx(StarIcon, { className: "w-3 h-3 mr-0.5 -mt-px" }), tier === 'ultimate' && /*#__PURE__*/ _jsx(StarIcon, { className: "w-3 h-3 mr-0.5 -mt-px fill-gray-900" }), cfg.label ] }); } function StarIcon(param) { let { className = '' } = param; return /*#__PURE__*/ _jsx("svg", { viewBox: "0 0 16 16", fill: "none", className: className, children: /*#__PURE__*/ _jsx("path", { d: "M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.5l-3.7 1.9.7-4.1-3-2.9 4.2-.9L8 1z", fill: "currentColor" }) }); } function VerifiedIcon(param) { let { className = '' } = param; return /*#__PURE__*/ _jsxs("svg", { viewBox: "0 0 16 16", fill: "none", className: className, children: [ /*#__PURE__*/ _jsx("path", { d: "M8 1l2 1.4 2.4-.4 1 2.2 2 1.2-.4 2.4L16 10l-1.8 1.6.4 2.4-2.2.8L10.8 17 8 16.2 5.2 17l-1.2-2.2-2.2-.8.4-2.4L0 10l1-2.2-.4-2.4 2-1.2 1-2.2 2.4.4L8 1z", fill: "#3B82F6" }), /*#__PURE__*/ _jsx("path", { d: "M5.5 8.5l1.5 1.5 3-3", stroke: "white", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) ] }); } Ñ062undefined339342(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined510513(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined907910(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined10781081(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined12601266undefined15701574(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined18241827(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined19311934(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined21332136(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined23612364(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined25112515(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined27302733(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined28632866(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined30913094(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined32193222(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined34713475(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined36143617(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined38743877(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 */ d: () => (/* binding */ PlanBadge) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); const tierConfig = { free: { label: 'Free', class: 'bg-gray-100 text-gray-500 border border-gray-200', icon: '' }, pro: { label: 'Pro', class: 'bg-blue-100 text-blue-700 border border-blue-200', icon: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("svg", { viewBox: "0 0 16 16", fill: "none", className: "w-3 h-3 inline-block mr-0.5 -mt-px", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path", { d: "M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.5l-3.7 1.9.7-4.1-3-2.9 4.2-.9L8 1z", fill: "currentColor" }) }) }, ultimate: { label: 'Ultimate', class: 'bg-gradient-to-r from-amber-400 via-yellow-400 to-amber-400 text-gray-900 border border-amber-500 shadow-sm shadow-amber-300/50', icon: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("svg", { viewBox: "0 0 16 16", fill: "none", className: "w-3 h-3 inline-block mr-0.5 -mt-px", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path", { d: "M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.5l-3.7 1.9.7-4.1-3-2.9 4.2-.9L8 1z", fill: "currentColor" }) }) } }; function PlanBadge(param) { let { tier, verified, size = 'sm', className = '' } = param; if (tier === 'free' && !verified) return null; const sizeClass = size === 'sm' ? 'text-[10px] px-1.5 py-0.5' : 'text-xs px-2 py-0.5'; if (verified && tier !== 'free') { return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", { className: "inline-flex items-center gap-1 rounded-full font-semibold ".concat(sizeClass, " ").concat(tierConfig[tier].class, " ").concat(className), children: [ tier === 'ultimate' ? /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(StarIcon, { className: "w-3 h-3 fill-gray-900" }) : /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(VerifiedIcon, { className: "w-3 h-3" }), tierConfig[tier].label ] }); } if (verified) { return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "inline-flex items-center gap-0.5 rounded-full font-semibold ".concat(sizeClass, " bg-blue-100 text-blue-700 border border-blue-200 ").concat(className), children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(VerifiedIcon, { className: "w-3 h-3" }) }); } const cfg = tierConfig[tier]; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", { className: "inline-flex items-center rounded-full font-semibold ".concat(sizeClass, " ").concat(cfg.class, " ").concat(className), children: [ tier === 'pro' && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(StarIcon, { className: "w-3 h-3 mr-0.5 -mt-px" }), tier === 'ultimate' && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(StarIcon, { className: "w-3 h-3 mr-0.5 -mt-px fill-gray-900" }), cfg.label ] }); } function StarIcon(param) { let { className = '' } = param; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("svg", { viewBox: "0 0 16 16", fill: "none", className: className, children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path", { d: "M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.5l-3.7 1.9.7-4.1-3-2.9 4.2-.9L8 1z", fill: "currentColor" }) }); } function VerifiedIcon(param) { let { className = '' } = param; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("svg", { viewBox: "0 0 16 16", fill: "none", className: className, children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path", { d: "M8 1l2 1.4 2.4-.4 1 2.2 2 1.2-.4 2.4L16 10l-1.8 1.6.4 2.4-2.2.8L10.8 17 8 16.2 5.2 17l-1.2-2.2-2.2-.8.4-2.4L0 10l1-2.2-.4-2.4 2-1.2 1-2.2 2.4.4L8 1z", fill: "#3B82F6" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path", { d: "M5.5 8.5l1.5 1.5 3-3", stroke: "white", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) ] }); } /***/ }) áä  åôåú/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ d: () => (/* binding */ PlanBadge) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); æimport { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; const tierConfig = { free: { label: 'Free', class: 'bg-gray-100 text-gray-500 border border-gray-200', icon: '' }, pro: { label: 'Pro', class: 'bg-blue-100 text-blue-700 border border-blue-200', icon: /*#__PURE__*/ _jsx("svg", { viewBox: "0 0 16 16", fill: "none", className: "w-3 h-3 inline-block mr-0.5 -mt-px", children: /*#__PURE__*/ _jsx("path", { d: "M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.5l-3.7 1.9.7-4.1-3-2.9 4.2-.9L8 1z", fill: "currentColor" }) }) }, ultimate: { label: 'Ultimate', class: 'bg-gradient-to-r from-amber-400 via-yellow-400 to-amber-400 text-gray-900 border border-amber-500 shadow-sm shadow-amber-300/50', icon: /*#__PURE__*/ _jsx("svg", { viewBox: "0 0 16 16", fill: "none", className: "w-3 h-3 inline-block mr-0.5 -mt-px", children: /*#__PURE__*/ _jsx("path", { d: "M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.5l-3.7 1.9.7-4.1-3-2.9 4.2-.9L8 1z", fill: "currentColor" }) }) } }; export function PlanBadge(param) { let { tier, verified, size = 'sm', className = '' } = param; if (tier === 'free' && !verified) return null; const sizeClass = size === 'sm' ? 'text-[10px] px-1.5 py-0.5' : 'text-xs px-2 py-0.5'; if (verified && tier !== 'free') { return /*#__PURE__*/ _jsxs("span", { className: "inline-flex items-center gap-1 rounded-full font-semibold ".concat(sizeClass, " ").concat(tierConfig[tier].class, " ").concat(className), children: [ tier === 'ultimate' ? /*#__PURE__*/ _jsx(StarIcon, { className: "w-3 h-3 fill-gray-900" }) : /*#__PURE__*/ _jsx(VerifiedIcon, { className: "w-3 h-3" }), tierConfig[tier].label ] }); } if (verified) { return /*#__PURE__*/ _jsx("span", { className: "inline-flex items-center gap-0.5 rounded-full font-semibold ".concat(sizeClass, " bg-blue-100 text-blue-700 border border-blue-200 ").concat(className), children: /*#__PURE__*/ _jsx(VerifiedIcon, { className: "w-3 h-3" }) }); } const cfg = tierConfig[tier]; return /*#__PURE__*/ _jsxs("span", { className: "inline-flex items-center rounded-full font-semibold ".concat(sizeClass, " ").concat(cfg.class, " ").concat(className), children: [ tier === 'pro' && /*#__PURE__*/ _jsx(StarIcon, { className: "w-3 h-3 mr-0.5 -mt-px" }), tier === 'ultimate' && /*#__PURE__*/ _jsx(StarIcon, { className: "w-3 h-3 mr-0.5 -mt-px fill-gray-900" }), cfg.label ] }); } function StarIcon(param) { let { className = '' } = param; return /*#__PURE__*/ _jsx("svg", { viewBox: "0 0 16 16", fill: "none", className: className, children: /*#__PURE__*/ _jsx("path", { d: "M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.5l-3.7 1.9.7-4.1-3-2.9 4.2-.9L8 1z", fill: "currentColor" }) }); } function VerifiedIcon(param) { let { className = '' } = param; return /*#__PURE__*/ _jsxs("svg", { viewBox: "0 0 16 16", fill: "none", className: className, children: [ /*#__PURE__*/ _jsx("path", { d: "M8 1l2 1.4 2.4-.4 1 2.2 2 1.2-.4 2.4L16 10l-1.8 1.6.4 2.4-2.2.8L10.8 17 8 16.2 5.2 17l-1.2-2.2-2.2-.8.4-2.4L0 10l1-2.2-.4-2.4 2-1.2 1-2.2 2.4.4L8 1z", fill: "#3B82F6" }), /*#__PURE__*/ _jsx("path", { d: "M5.5 8.5l1.5 1.5 3-3", stroke: "white", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) ] }); } Ñ062undefined339342(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined510513(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined907910(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined10781081(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined12601266undefined15701574(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined18241827(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined19311934(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined21332136(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined23612364(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined25112515(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined27302733(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined28632866(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined30913094(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined32193222(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined34713475(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined36143617(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined38743877(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefinedçè, /***/ 7795:  ê«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSource_/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; «webpack/lib/util/registerExternalSerializerœwebpack-sources/CachedSource o «webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSourceR/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ F: () => (/* binding */ useEffectiveRole) /* harmony export */ }); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1592); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); «webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSourceT/* __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=([^;]+)/); var _m_; return (_m_ = m === null || m === void 0 ? void 0 : m[1]) !== null && _m_ !== void 0 ? _m_ : 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() { var _session_user; const { data: session } = useSession(); const userRole = session === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.role; const isAdmin = userRole === 'admin'; const [previewRole, setPreviewRole] = useState(null); 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š“™íöù €€€¿(0,_lib_auth__WEBPACK_IMPORTED_MODULE_0__/* .useSession */ .wV)¯(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)°(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)€†buffer†source„size„maps„hashÎ/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ F: () => (/* binding */ useEffectiveRole) /* harmony export */ }); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1592); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* __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=([^;]+)/); var _m_; return (_m_ = m === null || m === void 0 ? void 0 : m[1]) !== null && _m_ !== void 0 ? _m_ : 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() { var _session_user; const { data: session } = (0,_lib_auth__WEBPACK_IMPORTED_MODULE_0__/* .useSession */ .wV)(); const userRole = session === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.role; const isAdmin = userRole === 'admin'; const [previewRole, setPreviewRole] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null); (0,react__WEBPACK_IMPORTED_MODULE_1__.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; } €”{"finalSource":true}ƒmap‹bufferedMap ConcatSourceRawSourceR/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ F: () => (/* binding */ useEffectiveRole) /* harmony export */ }); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1592); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); ReplaceSourceRawSourceT/* __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=([^;]+)/); var _m_; return (_m_ = m === null || m === void 0 ? void 0 : m[1]) !== null && _m_ !== void 0 ? _m_ : 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() { var _session_user; const { data: session } = useSession(); const userRole = session === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.role; const isAdmin = userRole === 'admin'; const [previewRole, setPreviewRole] = useState(null); 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; } û70109undefined111154undefined659665undefined749758(0,_lib_auth__WEBPACK_IMPORTED_MODULE_0__/* .useSession */ .wV)undefined10171024(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined10371045(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined /***/ }) Õ7/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ F: () => (/* binding */ useEffectiveRole) /* harmony export */ }); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1592); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* __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=([^;]+)/); var _m_; return (_m_ = m === null || m === void 0 ? void 0 : m[1]) !== null && _m_ !== void 0 ? _m_ : 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() { var _session_user; const { data: session } = (0,_lib_auth__WEBPACK_IMPORTED_MODULE_0__/* .useSession */ .wV)(); const userRole = session === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.role; const isAdmin = userRole === 'admin'; const [previewRole, setPreviewRole] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null); (0,react__WEBPACK_IMPORTED_MODULE_1__.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; } /***/ }) ÖÙ  ÚéÚR/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ F: () => (/* binding */ useEffectiveRole) /* harmony export */ }); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1592); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); ÛT/* __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=([^;]+)/); var _m_; return (_m_ = m === null || m === void 0 ? void 0 : m[1]) !== null && _m_ !== void 0 ? _m_ : 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() { var _session_user; const { data: session } = useSession(); const userRole = session === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.role; const isAdmin = userRole === 'admin'; const [previewRole, setPreviewRole] = useState(null); 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; } û70109undefined111154undefined659665undefined749758(0,_lib_auth__WEBPACK_IMPORTED_MODULE_0__/* .useSession */ .wV)undefined10171024(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined10371045(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefinedÜÝ, /***/ 8880:  ¸Þ«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSource_/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; «webpack/lib/util/registerExternalSerializerœwebpack-sources/CachedSource •«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSourceÏ__webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ PricingPage) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(9664); /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7541); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1592); /* harmony import */ var _context_locale__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(9906); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(2982); /* harmony import */ var _components_PlanBadge__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(2035); /* harmony import */ var _hooks_useEffectiveRole__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(7795); «webpack/lib/util/registerExternalSerializerwebpack-sources/ReplaceSourceâ†/* __next_internal_client_entry_do_not_use__ default auto */ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime"; import { useState, useEffect } from 'react'; import Link from 'next/link'; import { useRouter } from 'next/navigation'; import { useSession } from '@/lib/auth'; import { useLocale } from '@/context/locale'; import { getPlans, getMyDashboard, previewPlanChange, purchasePlan } from '@/lib/api'; import { PlanBadge } from '@/components/PlanBadge'; import { useEffectiveRole } from '@/hooks/useEffectiveRole'; const FEATURE_ROWS = [ { key: 'maxMessagesPerDay', labelKey: 'pricing.feat.messages', format: (v)=>v === null ? '∞' : String(v) }, { key: 'maxOrdersPerDay', labelKey: 'pricing.feat.orders', format: (v)=>v === null ? '∞' : String(v) }, { key: 'canContactAll', labelKey: 'pricing.feat.contact_all' }, { key: 'canViewPhone', labelKey: 'pricing.feat.view_phone' }, { key: 'canShowContactInfo', labelKey: 'pricing.feat.show_contact' }, { key: 'hasFavorites', labelKey: 'pricing.feat.favorites' }, { key: 'hasVerifiedBadge', labelKey: 'pricing.feat.verified_badge' }, { key: 'hasGoogleCalendar', labelKey: 'pricing.feat.google_calendar' }, { key: 'hasPersonalSite', labelKey: 'pricing.feat.personal_site' }, { key: 'hasAutoResponse', labelKey: 'pricing.feat.auto_response' }, { key: 'hasAutoMatch', labelKey: 'pricing.feat.auto_match' }, { key: 'highlightedReviews', labelKey: 'pricing.feat.highlighted_reviews' }, { key: 'maxPortfolioItems', labelKey: 'pricing.feat.portfolio', format: (v)=>v === null ? '∞' : String(v) }, { key: 'maxCards', labelKey: 'pricing.feat.cards', format: (v)=>v === null ? '∞' : String(v) }, { key: 'notifyNewTasks', labelKey: 'pricing.feat.notify_tasks' }, { key: 'canUploadVideo', labelKey: 'pricing.feat.video' } ]; const SPECIALIST_FEATURES = new Set([ 'hasGoogleCalendar', 'hasAutoResponse', 'highlightedReviews', 'maxPortfolioItems', 'maxCards', 'notifyNewTasks', 'canUploadVideo' ]); const CUSTOMER_FEATURES = new Set([ 'hasAutoMatch' ]); function CheckIcon() { return /*#__PURE__*/ _jsx("svg", { viewBox: "0 0 20 20", fill: "currentColor", className: "w-5 h-5 text-green-500 mx-auto", children: /*#__PURE__*/ _jsx("path", { fillRule: "evenodd", d: "M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z", clipRule: "evenodd" }) }); } function XIcon() { return /*#__PURE__*/ _jsx("svg", { viewBox: "0 0 20 20", fill: "currentColor", className: "w-4 h-4 text-gray-300 mx-auto", children: /*#__PURE__*/ _jsx("path", { d: "M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z" }) }); } const tierOrder = [ 'free', 'pro', 'ultimate' ]; const tierHeaderColors = { free: 'bg-gray-50 border-gray-200', pro: 'bg-blue-50 border-blue-200', ultimate: 'bg-gradient-to-br from-amber-50 to-yellow-50 border-amber-300' }; const tierPriceColors = { free: 'text-gray-700', pro: 'text-blue-700', ultimate: 'text-amber-600' }; const tierBtnColors = { free: 'bg-gray-100 text-gray-700 hover:bg-gray-200', pro: 'bg-blue-600 text-white hover:bg-blue-700', ultimate: 'bg-gradient-to-r from-amber-500 to-yellow-500 text-white hover:from-amber-600 hover:to-yellow-600' }; export default function PricingPage() { const { data: session } = useSession(); const { t } = useLocale(); const router = useRouter(); const effectiveRole = useEffectiveRole(); const [role, setRole] = useState('customer'); const [plans, setPlans] = useState([]); const [currentPlanId, setCurrentPlanId] = useState(null); const [loading, setLoading] = useState(true); const [confirmPlan, setConfirmPlan] = useState(null); const [preview, setPreview] = useState(null); const [previewLoading, setPreviewLoading] = useState(false); const [purchasing, setPurchasing] = useState(false); // Sync role from effective role — skip 'admin' (transient before preview cookie is read) useEffect(()=>{ if (!effectiveRole || effectiveRole === 'admin') return; setRole(effectiveRole === 'specialist' ? 'specialist' : 'customer'); }, [ effectiveRole ]); // Fetch plans with abort to prevent stale race conditions useEffect(()=>{ let aborted = false; setLoading(true); getPlans(role).then((data)=>{ if (!aborted) setPlans(data.sort((a, b)=>tierOrder.indexOf(a.tier) - tierOrder.indexOf(b.tier))); }).catch(()=>{}).finally(()=>{ if (!aborted) setLoading(false); }); return ()=>{ aborted = true; }; }, [ role ]); const fetchCurrentPlan = ()=>{ if (!session) return; getMyDashboard().then((d)=>{ var _d_plan; var _d_plan_id; return setCurrentPlanId((_d_plan_id = (_d_plan = d.plan) === null || _d_plan === void 0 ? void 0 : _d_plan.id) !== null && _d_plan_id !== void 0 ? _d_plan_id : null); }).catch(()=>{}); }; useEffect(fetchCurrentPlan, [ session ]); // Refresh active plan when admin widget changes it useEffect(()=>{ const handler = ()=>fetchCurrentPlan(); window.addEventListener('canhelp:plan-changed', handler); document.addEventListener('visibilitychange', handler); return ()=>{ window.removeEventListener('canhelp:plan-changed', handler); document.removeEventListener('visibilitychange', handler); }; }, [ session ]); async function handleSelectPlan(plan) { if (!session) { router.push('/sign-in'); return; } setConfirmPlan(plan); setPreview(null); setPreviewLoading(true); try { const p = await previewPlanChange(plan.id); setPreview(p); } catch (e) { setConfirmPlan(null); } finally{ setPreviewLoading(false); } } async function handleConfirm() { if (!confirmPlan || !preview) return; setPurchasing(true); try { const result = await purchasePlan(confirmPlan.id, preview.canPayFromBalance); if (result.url && result.params) { const form = document.createElement('form'); form.method = 'POST'; form.action = result.url; Object.entries(result.params).forEach((param)=>{ let [k, v] = param; const inp = document.createElement('input'); inp.type = 'hidden'; inp.name = k; inp.value = v; form.appendChild(inp); }); document.body.appendChild(form); form.submit(); return; } setCurrentPlanId(confirmPlan.id); setConfirmPlan(null); setPreview(null); } catch (e) { // ignore } finally{ setPurchasing(false); } } const visibleFeatures = FEATURE_ROWS.filter((param)=>{ let { key } = param; if (role === 'specialist' && CUSTOMER_FEATURES.has(key)) return false; if (role === 'customer' && SPECIALIST_FEATURES.has(key)) return false; return true; }); return /*#__PURE__*/ _jsxs("main", { className: "min-h-screen py-12 px-4", children: [ /*#__PURE__*/ _jsxs("div", { className: "max-w-5xl mx-auto", children: [ /*#__PURE__*/ _jsxs("div", { className: "text-center mb-10", children: [ /*#__PURE__*/ _jsx("h1", { className: "text-4xl font-bold text-white mb-3", children: t('pricing.title', 'Тарифы') }), /*#__PURE__*/ _jsx("p", { className: "text-white/70 text-lg", children: session ? t("pricing.subtitle_".concat(role), role === 'specialist' ? 'Тарифы Ð´Ð»Ñ ÑпециалиÑтов' : 'Тарифы Ð´Ð»Ñ Ð·Ð°ÐºÐ°Ð·Ñ‡Ð¸ÐºÐ¾Ð²') : t('pricing.subtitle', 'Выберите подходÑщий план') }), " " ] }), !session && /*#__PURE__*/ _jsx("div", { className: "flex justify-center mb-10", children: /*#__PURE__*/ _jsxs("div", { className: "inline-flex bg-white/10 rounded-xl p-1 gap-1", children: [ /*#__PURE__*/ _jsx("button", { onClick: ()=>setRole('customer'), className: "px-6 py-2 rounded-lg text-sm font-semibold transition ".concat(role === 'customer' ? 'bg-white text-gray-900 shadow-sm' : 'text-white/70 hover:text-white'), children: t('pricing.role.customer', 'Заказчик') }), /*#__PURE__*/ _jsx("button", { onClick: ()=>setRole('specialist'), className: "px-6 py-2 rounded-lg text-sm font-semibold transition ".concat(role === 'specialist' ? 'bg-white text-gray-900 shadow-sm' : 'text-white/70 hover:text-white'), children: t('pricing.role.specialist', 'СпециалиÑÑ‚') }) ] }) }), loading ? /*#__PURE__*/ _jsx("div", { className: "text-center text-white/60 py-20", children: t('common.loading', 'Загрузка...') }) : /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-6 mb-12", children: plans.map((plan)=>{ const isCurrentPlan = plan.id === currentPlanId; const isFree = plan.tier === 'free'; return /*#__PURE__*/ _jsxs("div", { className: "rounded-2xl border-2 p-6 bg-white flex flex-col transition ".concat(isCurrentPlan ? 'ring-2 ring-blue-500 ring-offset-2' : '', " ").concat(plan.tier === 'ultimate' ? 'border-amber-300 shadow-lg shadow-amber-100' : 'border-gray-200'), children: [ /*#__PURE__*/ _jsxs("div", { className: "flex items-center gap-2 mb-4", children: [ /*#__PURE__*/ _jsx(PlanBadge, { tier: plan.tier, size: "md" }), isCurrentPlan && /*#__PURE__*/ _jsx("span", { className: "text-xs font-medium text-green-600 bg-green-50 border border-green-200 px-2 py-0.5 rounded-full", children: t('pricing.current_plan', 'Ваш план') }), plan.tier === 'pro' && !isCurrentPlan && /*#__PURE__*/ _jsx("span", { className: "text-xs font-medium text-blue-600 bg-blue-50 border border-blue-100 px-2 py-0.5 rounded-full", children: t('pricing.popular', 'ПопулÑрный') }) ] }), /*#__PURE__*/ _jsx("h2", { className: "text-xl font-bold text-gray-900 mb-1", children: plan.name }), /*#__PURE__*/ _jsx("p", { className: "text-gray-500 text-sm mb-4 min-h-[40px]", children: plan.description }), /*#__PURE__*/ _jsxs("div", { className: "text-3xl font-extrabold mb-1 ".concat(tierPriceColors[plan.tier]), children: [ isFree ? t('pricing.free', 'БеÑплатно') : /*#__PURE__*/ _jsxs(_Fragment, { children: [ plan.oldPrice && /*#__PURE__*/ _jsxs("span", { className: "text-lg font-normal text-gray-400 line-through mr-2", children: [ "€", plan.oldPrice ] }), "€", plan.price ] }), !isFree && /*#__PURE__*/ _jsxs("span", { className: "text-base font-normal text-gray-400", children: [ "/", t('pricing.per_month', 'меÑ') ] }) ] }), plan.durationDays && !isFree && /*#__PURE__*/ _jsxs("p", { className: "text-xs text-gray-400 mb-5", children: [ t('pricing.duration', 'Срок'), ": ", plan.durationDays, " ", t('pricing.days', 'дн.') ] }), isFree && /*#__PURE__*/ _jsx("div", { className: "mb-5" }), /*#__PURE__*/ _jsx("div", { className: "mt-auto", children: isCurrentPlan ? /*#__PURE__*/ _jsx("div", { className: "w-full py-2.5 text-center text-sm font-semibold text-green-700 bg-green-50 border border-green-200 rounded-xl", children: t('pricing.your_plan', 'Ðктивный план') }) : isFree ? /*#__PURE__*/ _jsx("div", { className: "w-full py-2.5 text-center text-sm font-medium text-gray-400 bg-gray-50 border border-gray-200 rounded-xl", children: t('pricing.free_default', 'По умолчанию') }) : /*#__PURE__*/ _jsxs("button", { onClick: ()=>handleSelectPlan(plan), className: "block w-full py-2.5 text-center text-sm font-semibold rounded-xl transition ".concat(tierBtnColors[plan.tier]), children: [ t('pricing.choose', 'Выбрать'), " ", plan.name ] }) }) ] }, plan.id); }) }), /*#__PURE__*/ _jsxs("div", { className: "bg-white rounded-2xl border border-gray-200 overflow-hidden", children: [ /*#__PURE__*/ _jsx("div", { className: "px-6 py-4 border-b border-gray-100", children: /*#__PURE__*/ _jsx("h3", { className: "font-semibold text-gray-900", children: t('pricing.compare', 'Сравнение функций') }) }), /*#__PURE__*/ _jsx("div", { className: "overflow-x-auto", children: /*#__PURE__*/ _jsxs("table", { className: "w-full text-sm", children: [ /*#__PURE__*/ _jsx("thead", { children: /*#__PURE__*/ _jsxs("tr", { className: "border-b border-gray-100", children: [ /*#__PURE__*/ _jsx("th", { className: "text-left px-6 py-3 text-gray-500 font-medium w-1/2", children: t('pricing.feature', 'ФункциÑ') }), plans.map((plan)=>/*#__PURE__*/ _jsx("th", { className: "text-center px-4 py-3 font-medium text-gray-700", children: /*#__PURE__*/ _jsxs("div", { className: "flex flex-col items-center gap-1", children: [ /*#__PURE__*/ _jsx(PlanBadge, { tier: plan.tier, size: "sm" }), /*#__PURE__*/ _jsx("span", { className: "text-xs text-gray-400", children: plan.tier === 'free' ? t('pricing.free', 'БеÑплатно') : "€".concat(plan.price) }) ] }) }, plan.id)) ] }) }), /*#__PURE__*/ _jsx("tbody", { children: visibleFeatures.map((param)=>{ let { key, labelKey, format } = param; return /*#__PURE__*/ _jsxs("tr", { className: "border-b border-gray-50 hover:bg-gray-50/50 transition", children: [ /*#__PURE__*/ _jsx("td", { className: "px-6 py-3 text-gray-600", children: t(labelKey, labelKey) }), plans.map((plan)=>{ const val = plan[key]; let cell; if (format) { cell = /*#__PURE__*/ _jsx("span", { className: "text-gray-700 font-medium", children: format(val) }); } else if (typeof val === 'boolean') { cell = val ? /*#__PURE__*/ _jsx(CheckIcon, {}) : /*#__PURE__*/ _jsx(XIcon, {}); } else { cell = /*#__PURE__*/ _jsx("span", { className: "text-gray-700", children: val === null ? '∞' : String(val !== null && val !== void 0 ? val : '—') }); } return /*#__PURE__*/ _jsx("td", { className: "text-center px-4 py-3", children: cell }, plan.id); }) ] }, key); }) }) ] }) }) ] }), /*#__PURE__*/ _jsx("p", { className: "text-center text-white/50 text-sm mt-8", children: t('pricing.faq_note', 'Оплата ÑпиÑываетÑÑ Ñ Ð±Ð°Ð»Ð°Ð½Ñа CanHelp. Пополнение доÑтупно в разделе Оплата.') }) ] }) ] }), confirmPlan && /*#__PURE__*/ _jsx("div", { className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50 px-4", children: /*#__PURE__*/ _jsxs("div", { className: "bg-white rounded-2xl shadow-2xl w-full max-w-md p-6", children: [ /*#__PURE__*/ _jsx("h2", { className: "text-lg font-bold text-gray-900 mb-4", children: t('pricing.confirm.title', 'Подтвердите выбор тарифа') }), previewLoading ? /*#__PURE__*/ _jsx("div", { className: "py-10 text-center text-gray-400", children: t('common.loading', 'Загрузка...') }) : preview ? /*#__PURE__*/ _jsxs("div", { className: "space-y-3 text-sm text-gray-700", children: [ /*#__PURE__*/ _jsxs("div", { className: "flex justify-between", children: [ /*#__PURE__*/ _jsx("span", { className: "text-gray-500", children: t('pricing.confirm.plan', 'Тариф') }), /*#__PURE__*/ _jsx("span", { className: "font-semibold", children: confirmPlan.name }) ] }), preview.type === 'upgrade' && Number(preview.prorated) > 0 && /*#__PURE__*/ _jsxs("div", { className: "flex justify-between", children: [ /*#__PURE__*/ _jsx("span", { className: "text-gray-500", children: t('pricing.confirm.prorated', 'Зачёт оÑтатка') }), /*#__PURE__*/ _jsxs("span", { className: "text-green-600 font-medium", children: [ "−€", preview.prorated ] }) ] }), preview.type !== 'downgrade' && /*#__PURE__*/ _jsxs("div", { className: "flex justify-between", children: [ /*#__PURE__*/ _jsx("span", { className: "text-gray-500", children: t('pricing.confirm.effective_price', 'К оплате') }), /*#__PURE__*/ _jsxs("span", { className: "font-bold text-gray-900", children: [ "€", preview.effectivePrice ] }) ] }), preview.type !== 'downgrade' && /*#__PURE__*/ _jsxs("div", { className: "flex justify-between", children: [ /*#__PURE__*/ _jsx("span", { className: "text-gray-500", children: t('pricing.confirm.your_balance', 'Ваш баланÑ') }), /*#__PURE__*/ _jsxs("span", { className: preview.canPayFromBalance ? 'text-green-600' : 'text-red-500', children: [ "€", preview.currentBalance ] }) ] }), preview.type === 'downgrade' && /*#__PURE__*/ _jsxs("div", { className: "bg-orange-50 border border-orange-200 rounded-xl p-3 text-orange-800 text-xs", children: [ t('pricing.confirm.downgrade_info', 'Переход на новый тариф произойдёт автоматичеÑки поÑле Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ периода.'), preview.scheduledDate && /*#__PURE__*/ _jsxs(_Fragment, { children: [ " ", new Date(preview.scheduledDate).toLocaleDateString('ru-RU') ] }) ] }), preview.type !== 'downgrade' && !preview.canPayFromBalance && /*#__PURE__*/ _jsxs("div", { className: "bg-red-50 border border-red-200 rounded-xl p-3 text-red-700 text-xs", children: [ t('pricing.confirm.insufficient', 'ÐедоÑтаточно ÑредÑтв на баланÑе.'), ' ', /*#__PURE__*/ _jsx(Link, { href: "/payment", className: "underline font-medium", onClick: ()=>setConfirmPlan(null), children: t('pricing.confirm.top_up', 'Пополнить') }) ] }), /*#__PURE__*/ _jsxs("div", { className: "flex gap-3 pt-2", children: [ /*#__PURE__*/ _jsx("button", { onClick: ()=>{ setConfirmPlan(null); setPreview(null); }, className: "flex-1 py-2.5 rounded-xl border border-gray-200 text-sm font-medium text-gray-600 hover:bg-gray-50 transition", children: t('common.cancel', 'Отмена') }), (preview.type === 'downgrade' || preview.canPayFromBalance) && /*#__PURE__*/ _jsx("button", { onClick: handleConfirm, disabled: purchasing, className: "flex-1 py-2.5 rounded-xl text-sm font-semibold text-white transition ".concat(preview.type === 'downgrade' ? 'bg-orange-500 hover:bg-orange-600' : tierBtnColors[confirmPlan.tier].replace('block w-full', '').trim(), " disabled:opacity-50"), children: purchasing ? t('common.loading', 'Загрузка...') : preview.type === 'downgrade' ? t('pricing.confirm.schedule_downgrade', 'Запланировать переход') : t('pricing.confirm.pay', 'Оплатить') }) ] }) ] }) : null ] }) }) ] }); } ar=_’”¿ÁÝß  35ac¸ºìî)× Ú v y ¦ © D G Š˜ÐÙðø_7Fgn›¢×Þ CJu|µ¼îõaiiq¸¿GTqyãë€_×â ¤  ‰ !!! ""Ý#à#[$_$%%â&å&))Ã)Ç)É)Ñ)$*'*¡+¥+<-_@-$.'.).1.M/P/ 11÷2ú244<5@5r6v6x6€6$7(7f:j:ì<ð<Ž?‘?H@K@ô@÷@dB_gBÈCÌCZG^G1H4HØHÛH J#J´J¸J„K‡KàKäKÛLÞLpNsN[O_OP’P”PœPR RCUFU\V_`VW„WLZOZK\N\o\r\*]-]*_-_cbfbîcñc‡d‹d2e5e>fAfggÃgÇgh‚h‘i”ik_kÌkÏkêlîlïnón«o®oËpÏpÒrÖrŽs‘s­t±tØvÜv‡x‹xx•x‚z†z | |||õ}ù}¬~B¯~KN€€€€€€€€€¶(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)ÿÿÿ€¿(0,_lib_auth__WEBPACK_IMPORTED_MODULE_4__/* .useSession */ .wV)Ã(0,_context_locale__WEBPACK_IMPORTED_MODULE_5__/* .useLocale */ .Y)º(0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)Ò(0,_hooks_useEffectiveRole__WEBPACK_IMPORTED_MODULE_8__/* .useEffectiveRole */ .F)¯(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)ÿÿÿÿÿÿÿ°(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)ÿ¼(0,_lib_api__WEBPACK_IMPORTED_MODULE_6__/* .getPlans */ .T9)Á(0,_lib_api__WEBPACK_IMPORTED_MODULE_6__/* .getMyDashboard */ .H)ýýÅ(0,_lib_api__WEBPACK_IMPORTED_MODULE_6__/* .previewPlanChange */ .Cs)À(0,_lib_api__WEBPACK_IMPORTED_MODULE_6__/* .purchasePlan */ .Je)·(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)ÿÿôôôÿôôôÿ·react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.FragmentóþþóÅ_components_PlanBadge__WEBPACK_IMPORTED_MODULE_7__/* .PlanBadge */ .dòòòòýýþýýýòòòòýýòòòýòýòòýòÿòòýòòòòòòòòýòòýýòòýòýýòýýòýýýþýò²(next_link__WEBPACK_IMPORTED_MODULE_2___default())üññ€†buffer†source„size„maps„hash®__webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ PricingPage) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(9664); /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7541); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1592); /* harmony import */ var _context_locale__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(9906); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(2982); /* harmony import */ var _components_PlanBadge__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(2035); /* harmony import */ var _hooks_useEffectiveRole__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(7795); /* __next_internal_client_entry_do_not_use__ default auto */ const FEATURE_ROWS = [ { key: 'maxMessagesPerDay', labelKey: 'pricing.feat.messages', format: (v)=>v === null ? '∞' : String(v) }, { key: 'maxOrdersPerDay', labelKey: 'pricing.feat.orders', format: (v)=>v === null ? '∞' : String(v) }, { key: 'canContactAll', labelKey: 'pricing.feat.contact_all' }, { key: 'canViewPhone', labelKey: 'pricing.feat.view_phone' }, { key: 'canShowContactInfo', labelKey: 'pricing.feat.show_contact' }, { key: 'hasFavorites', labelKey: 'pricing.feat.favorites' }, { key: 'hasVerifiedBadge', labelKey: 'pricing.feat.verified_badge' }, { key: 'hasGoogleCalendar', labelKey: 'pricing.feat.google_calendar' }, { key: 'hasPersonalSite', labelKey: 'pricing.feat.personal_site' }, { key: 'hasAutoResponse', labelKey: 'pricing.feat.auto_response' }, { key: 'hasAutoMatch', labelKey: 'pricing.feat.auto_match' }, { key: 'highlightedReviews', labelKey: 'pricing.feat.highlighted_reviews' }, { key: 'maxPortfolioItems', labelKey: 'pricing.feat.portfolio', format: (v)=>v === null ? '∞' : String(v) }, { key: 'maxCards', labelKey: 'pricing.feat.cards', format: (v)=>v === null ? '∞' : String(v) }, { key: 'notifyNewTasks', labelKey: 'pricing.feat.notify_tasks' }, { key: 'canUploadVideo', labelKey: 'pricing.feat.video' } ]; const SPECIALIST_FEATURES = new Set([ 'hasGoogleCalendar', 'hasAutoResponse', 'highlightedReviews', 'maxPortfolioItems', 'maxCards', 'notifyNewTasks', 'canUploadVideo' ]); const CUSTOMER_FEATURES = new Set([ 'hasAutoMatch' ]); function CheckIcon() { return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("svg", { viewBox: "0 0 20 20", fill: "currentColor", className: "w-5 h-5 text-green-500 mx-auto", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path", { fillRule: "evenodd", d: "M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z", clipRule: "evenodd" }) }); } function XIcon() { return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("svg", { viewBox: "0 0 20 20", fill: "currentColor", className: "w-4 h-4 text-gray-300 mx-auto", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path", { d: "M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z" }) }); } const tierOrder = [ 'free', 'pro', 'ultimate' ]; const tierHeaderColors = { free: 'bg-gray-50 border-gray-200', pro: 'bg-blue-50 border-blue-200', ultimate: 'bg-gradient-to-br from-amber-50 to-yellow-50 border-amber-300' }; const tierPriceColors = { free: 'text-gray-700', pro: 'text-blue-700', ultimate: 'text-amber-600' }; const tierBtnColors = { free: 'bg-gray-100 text-gray-700 hover:bg-gray-200', pro: 'bg-blue-600 text-white hover:bg-blue-700', ultimate: 'bg-gradient-to-r from-amber-500 to-yellow-500 text-white hover:from-amber-600 hover:to-yellow-600' }; function PricingPage() { const { data: session } = (0,_lib_auth__WEBPACK_IMPORTED_MODULE_4__/* .useSession */ .wV)(); const { t } = (0,_context_locale__WEBPACK_IMPORTED_MODULE_5__/* .useLocale */ .Y)(); const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)(); const effectiveRole = (0,_hooks_useEffectiveRole__WEBPACK_IMPORTED_MODULE_8__/* .useEffectiveRole */ .F)(); const [role, setRole] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('customer'); const [plans, setPlans] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]); const [currentPlanId, setCurrentPlanId] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null); const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true); const [confirmPlan, setConfirmPlan] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null); const [preview, setPreview] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null); const [previewLoading, setPreviewLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false); const [purchasing, setPurchasing] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false); // Sync role from effective role — skip 'admin' (transient before preview cookie is read) (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{ if (!effectiveRole || effectiveRole === 'admin') return; setRole(effectiveRole === 'specialist' ? 'specialist' : 'customer'); }, [ effectiveRole ]); // Fetch plans with abort to prevent stale race conditions (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{ let aborted = false; setLoading(true); (0,_lib_api__WEBPACK_IMPORTED_MODULE_6__/* .getPlans */ .T9)(role).then((data)=>{ if (!aborted) setPlans(data.sort((a, b)=>tierOrder.indexOf(a.tier) - tierOrder.indexOf(b.tier))); }).catch(()=>{}).finally(()=>{ if (!aborted) setLoading(false); }); return ()=>{ aborted = true; }; }, [ role ]); const fetchCurrentPlan = ()=>{ if (!session) return; (0,_lib_api__WEBPACK_IMPORTED_MODULE_6__/* .getMyDashboard */ .H)().then((d)=>{ var _d_plan; var _d_plan_id; return setCurrentPlanId((_d_plan_id = (_d_plan = d.plan) === null || _d_plan === void 0 ? void 0 : _d_plan.id) !== null && _d_plan_id !== void 0 ? _d_plan_id : null); }).catch(()=>{}); }; (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(fetchCurrentPlan, [ session ]); // Refresh active plan when admin widget changes it (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{ const handler = ()=>fetchCurrentPlan(); window.addEventListener('canhelp:plan-changed', handler); document.addEventListener('visibilitychange', handler); return ()=>{ window.removeEventListener('canhelp:plan-changed', handler); document.removeEventListener('visibilitychange', handler); }; }, [ session ]); async function handleSelectPlan(plan) { if (!session) { router.push('/sign-in'); return; } setConfirmPlan(plan); setPreview(null); setPreviewLoading(true); try { const p = await (0,_lib_api__WEBPACK_IMPORTED_MODULE_6__/* .previewPlanChange */ .Cs)(plan.id); setPreview(p); } catch (e) { setConfirmPlan(null); } finally{ setPreviewLoading(false); } } async function handleConfirm() { if (!confirmPlan || !preview) return; setPurchasing(true); try { const result = await (0,_lib_api__WEBPACK_IMPORTED_MODULE_6__/* .purchasePlan */ .Je)(confirmPlan.id, preview.canPayFromBalance); if (result.url && result.params) { const form = document.createElement('form'); form.method = 'POST'; form.action = result.url; Object.entries(result.params).forEach((param)=>{ let [k, v] = param; const inp = document.createElement('input'); inp.type = 'hidden'; inp.name = k; inp.value = v; form.appendChild(inp); }); document.body.appendChild(form); form.submit(); return; } setCurrentPlanId(confirmPlan.id); setConfirmPlan(null); setPreview(null); } catch (e) { // ignore } finally{ setPurchasing(false); } } const visibleFeatures = FEATURE_ROWS.filter((param)=>{ let { key } = param; if (role === 'specialist' && CUSTOMER_FEATURES.has(key)) return false; if (role === 'customer' && SPECIALIST_FEATURES.has(key)) return false; return true; }); return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("main", { className: "min-h-screen py-12 px-4", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "max-w-5xl mx-auto", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "text-center mb-10", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h1", { className: "text-4xl font-bold text-white mb-3", children: t('pricing.title', 'Тарифы') }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { className: "text-white/70 text-lg", children: session ? t("pricing.subtitle_".concat(role), role === 'specialist' ? 'Тарифы Ð´Ð»Ñ ÑпециалиÑтов' : 'Тарифы Ð´Ð»Ñ Ð·Ð°ÐºÐ°Ð·Ñ‡Ð¸ÐºÐ¾Ð²') : t('pricing.subtitle', 'Выберите подходÑщий план') }), " " ] }), !session && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "flex justify-center mb-10", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "inline-flex bg-white/10 rounded-xl p-1 gap-1", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { onClick: ()=>setRole('customer'), className: "px-6 py-2 rounded-lg text-sm font-semibold transition ".concat(role === 'customer' ? 'bg-white text-gray-900 shadow-sm' : 'text-white/70 hover:text-white'), children: t('pricing.role.customer', 'Заказчик') }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { onClick: ()=>setRole('specialist'), className: "px-6 py-2 rounded-lg text-sm font-semibold transition ".concat(role === 'specialist' ? 'bg-white text-gray-900 shadow-sm' : 'text-white/70 hover:text-white'), children: t('pricing.role.specialist', 'СпециалиÑÑ‚') }) ] }) }), loading ? /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "text-center text-white/60 py-20", children: t('common.loading', 'Загрузка...') }) : /*#__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: "grid grid-cols-1 md:grid-cols-3 gap-6 mb-12", children: plans.map((plan)=>{ const isCurrentPlan = plan.id === currentPlanId; const isFree = plan.tier === 'free'; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "rounded-2xl border-2 p-6 bg-white flex flex-col transition ".concat(isCurrentPlan ? 'ring-2 ring-blue-500 ring-offset-2' : '', " ").concat(plan.tier === 'ultimate' ? 'border-amber-300 shadow-lg shadow-amber-100' : 'border-gray-200'), children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "flex items-center gap-2 mb-4", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_PlanBadge__WEBPACK_IMPORTED_MODULE_7__/* .PlanBadge */ .d, { tier: plan.tier, size: "md" }), isCurrentPlan && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "text-xs font-medium text-green-600 bg-green-50 border border-green-200 px-2 py-0.5 rounded-full", children: t('pricing.current_plan', 'Ваш план') }), plan.tier === 'pro' && !isCurrentPlan && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "text-xs font-medium text-blue-600 bg-blue-50 border border-blue-100 px-2 py-0.5 rounded-full", children: t('pricing.popular', 'ПопулÑрный') }) ] }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h2", { className: "text-xl font-bold text-gray-900 mb-1", children: plan.name }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { className: "text-gray-500 text-sm mb-4 min-h-[40px]", children: plan.description }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "text-3xl font-extrabold mb-1 ".concat(tierPriceColors[plan.tier]), children: [ isFree ? t('pricing.free', 'БеÑплатно') : /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [ plan.oldPrice && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", { className: "text-lg font-normal text-gray-400 line-through mr-2", children: [ "€", plan.oldPrice ] }), "€", plan.price ] }), !isFree && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", { className: "text-base font-normal text-gray-400", children: [ "/", t('pricing.per_month', 'меÑ') ] }) ] }), plan.durationDays && !isFree && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("p", { className: "text-xs text-gray-400 mb-5", children: [ t('pricing.duration', 'Срок'), ": ", plan.durationDays, " ", t('pricing.days', 'дн.') ] }), isFree && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "mb-5" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "mt-auto", children: isCurrentPlan ? /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "w-full py-2.5 text-center text-sm font-semibold text-green-700 bg-green-50 border border-green-200 rounded-xl", children: t('pricing.your_plan', 'Ðктивный план') }) : isFree ? /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "w-full py-2.5 text-center text-sm font-medium text-gray-400 bg-gray-50 border border-gray-200 rounded-xl", children: t('pricing.free_default', 'По умолчанию') }) : /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("button", { onClick: ()=>handleSelectPlan(plan), className: "block w-full py-2.5 text-center text-sm font-semibold rounded-xl transition ".concat(tierBtnColors[plan.tier]), children: [ t('pricing.choose', 'Выбрать'), " ", plan.name ] }) }) ] }, plan.id); }) }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "bg-white rounded-2xl border border-gray-200 overflow-hidden", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "px-6 py-4 border-b border-gray-100", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h3", { className: "font-semibold text-gray-900", children: t('pricing.compare', 'Сравнение функций') }) }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "overflow-x-auto", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("table", { className: "w-full text-sm", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("thead", { children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("tr", { className: "border-b border-gray-100", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("th", { className: "text-left px-6 py-3 text-gray-500 font-medium w-1/2", children: t('pricing.feature', 'ФункциÑ') }), plans.map((plan)=>/*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("th", { className: "text-center px-4 py-3 font-medium text-gray-700", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "flex flex-col items-center gap-1", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_PlanBadge__WEBPACK_IMPORTED_MODULE_7__/* .PlanBadge */ .d, { tier: plan.tier, size: "sm" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "text-xs text-gray-400", children: plan.tier === 'free' ? t('pricing.free', 'БеÑплатно') : "€".concat(plan.price) }) ] }) }, plan.id)) ] }) }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("tbody", { children: visibleFeatures.map((param)=>{ let { key, labelKey, format } = param; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("tr", { className: "border-b border-gray-50 hover:bg-gray-50/50 transition", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("td", { className: "px-6 py-3 text-gray-600", children: t(labelKey, labelKey) }), plans.map((plan)=>{ const val = plan[key]; let cell; if (format) { cell = /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "text-gray-700 font-medium", children: format(val) }); } else if (typeof val === 'boolean') { cell = val ? /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(CheckIcon, {}) : /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(XIcon, {}); } else { cell = /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "text-gray-700", children: val === null ? '∞' : String(val !== null && val !== void 0 ? val : '—') }); } return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("td", { className: "text-center px-4 py-3", children: cell }, plan.id); }) ] }, key); }) }) ] }) }) ] }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { className: "text-center text-white/50 text-sm mt-8", children: t('pricing.faq_note', 'Оплата ÑпиÑываетÑÑ Ñ Ð±Ð°Ð»Ð°Ð½Ñа CanHelp. Пополнение доÑтупно в разделе Оплата.') }) ] }) ] }), confirmPlan && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50 px-4", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "bg-white rounded-2xl shadow-2xl w-full max-w-md p-6", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h2", { className: "text-lg font-bold text-gray-900 mb-4", children: t('pricing.confirm.title', 'Подтвердите выбор тарифа') }), previewLoading ? /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "py-10 text-center text-gray-400", children: t('common.loading', 'Загрузка...') }) : preview ? /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "space-y-3 text-sm text-gray-700", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "flex justify-between", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "text-gray-500", children: t('pricing.confirm.plan', 'Тариф') }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "font-semibold", children: confirmPlan.name }) ] }), preview.type === 'upgrade' && Number(preview.prorated) > 0 && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "flex justify-between", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "text-gray-500", children: t('pricing.confirm.prorated', 'Зачёт оÑтатка') }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", { className: "text-green-600 font-medium", children: [ "−€", preview.prorated ] }) ] }), preview.type !== 'downgrade' && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "flex justify-between", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "text-gray-500", children: t('pricing.confirm.effective_price', 'К оплате') }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", { className: "font-bold text-gray-900", children: [ "€", preview.effectivePrice ] }) ] }), preview.type !== 'downgrade' && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "flex justify-between", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "text-gray-500", children: t('pricing.confirm.your_balance', 'Ваш баланÑ') }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", { className: preview.canPayFromBalance ? 'text-green-600' : 'text-red-500', children: [ "€", preview.currentBalance ] }) ] }), preview.type === 'downgrade' && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "bg-orange-50 border border-orange-200 rounded-xl p-3 text-orange-800 text-xs", children: [ t('pricing.confirm.downgrade_info', 'Переход на новый тариф произойдёт автоматичеÑки поÑле Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ периода.'), preview.scheduledDate && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [ " ", new Date(preview.scheduledDate).toLocaleDateString('ru-RU') ] }) ] }), preview.type !== 'downgrade' && !preview.canPayFromBalance && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "bg-red-50 border border-red-200 rounded-xl p-3 text-red-700 text-xs", children: [ t('pricing.confirm.insufficient', 'ÐедоÑтаточно ÑредÑтв на баланÑе.'), ' ', /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)((next_link__WEBPACK_IMPORTED_MODULE_2___default()), { href: "/payment", className: "underline font-medium", onClick: ()=>setConfirmPlan(null), children: t('pricing.confirm.top_up', 'Пополнить') }) ] }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "flex gap-3 pt-2", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { onClick: ()=>{ setConfirmPlan(null); setPreview(null); }, className: "flex-1 py-2.5 rounded-xl border border-gray-200 text-sm font-medium text-gray-600 hover:bg-gray-50 transition", children: t('common.cancel', 'Отмена') }), (preview.type === 'downgrade' || preview.canPayFromBalance) && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { onClick: handleConfirm, disabled: purchasing, className: "flex-1 py-2.5 rounded-xl text-sm font-semibold text-white transition ".concat(preview.type === 'downgrade' ? 'bg-orange-500 hover:bg-orange-600' : tierBtnColors[confirmPlan.tier].replace('block w-full', '').trim(), " disabled:opacity-50"), children: purchasing ? t('common.loading', 'Загрузка...') : preview.type === 'downgrade' ? t('pricing.confirm.schedule_downgrade', 'Запланировать переход') : t('pricing.confirm.pay', 'Оплатить') }) ] }) ] }) : null ] }) }) ] }); } €”{"finalSource":true}ƒmap‹bufferedMap ConcatSourceRawSourceÏ__webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ PricingPage) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(9664); /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7541); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1592); /* harmony import */ var _context_locale__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(9906); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(2982); /* harmony import */ var _components_PlanBadge__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(2035); /* harmony import */ var _hooks_useEffectiveRole__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(7795); ReplaceSourceRawSourceâ†/* __next_internal_client_entry_do_not_use__ default auto */ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime"; import { useState, useEffect } from 'react'; import Link from 'next/link'; import { useRouter } from 'next/navigation'; import { useSession } from '@/lib/auth'; import { useLocale } from '@/context/locale'; import { getPlans, getMyDashboard, previewPlanChange, purchasePlan } from '@/lib/api'; import { PlanBadge } from '@/components/PlanBadge'; import { useEffectiveRole } from '@/hooks/useEffectiveRole'; const FEATURE_ROWS = [ { key: 'maxMessagesPerDay', labelKey: 'pricing.feat.messages', format: (v)=>v === null ? '∞' : String(v) }, { key: 'maxOrdersPerDay', labelKey: 'pricing.feat.orders', format: (v)=>v === null ? '∞' : String(v) }, { key: 'canContactAll', labelKey: 'pricing.feat.contact_all' }, { key: 'canViewPhone', labelKey: 'pricing.feat.view_phone' }, { key: 'canShowContactInfo', labelKey: 'pricing.feat.show_contact' }, { key: 'hasFavorites', labelKey: 'pricing.feat.favorites' }, { key: 'hasVerifiedBadge', labelKey: 'pricing.feat.verified_badge' }, { key: 'hasGoogleCalendar', labelKey: 'pricing.feat.google_calendar' }, { key: 'hasPersonalSite', labelKey: 'pricing.feat.personal_site' }, { key: 'hasAutoResponse', labelKey: 'pricing.feat.auto_response' }, { key: 'hasAutoMatch', labelKey: 'pricing.feat.auto_match' }, { key: 'highlightedReviews', labelKey: 'pricing.feat.highlighted_reviews' }, { key: 'maxPortfolioItems', labelKey: 'pricing.feat.portfolio', format: (v)=>v === null ? '∞' : String(v) }, { key: 'maxCards', labelKey: 'pricing.feat.cards', format: (v)=>v === null ? '∞' : String(v) }, { key: 'notifyNewTasks', labelKey: 'pricing.feat.notify_tasks' }, { key: 'canUploadVideo', labelKey: 'pricing.feat.video' } ]; const SPECIALIST_FEATURES = new Set([ 'hasGoogleCalendar', 'hasAutoResponse', 'highlightedReviews', 'maxPortfolioItems', 'maxCards', 'notifyNewTasks', 'canUploadVideo' ]); const CUSTOMER_FEATURES = new Set([ 'hasAutoMatch' ]); function CheckIcon() { return /*#__PURE__*/ _jsx("svg", { viewBox: "0 0 20 20", fill: "currentColor", className: "w-5 h-5 text-green-500 mx-auto", children: /*#__PURE__*/ _jsx("path", { fillRule: "evenodd", d: "M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z", clipRule: "evenodd" }) }); } function XIcon() { return /*#__PURE__*/ _jsx("svg", { viewBox: "0 0 20 20", fill: "currentColor", className: "w-4 h-4 text-gray-300 mx-auto", children: /*#__PURE__*/ _jsx("path", { d: "M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z" }) }); } const tierOrder = [ 'free', 'pro', 'ultimate' ]; const tierHeaderColors = { free: 'bg-gray-50 border-gray-200', pro: 'bg-blue-50 border-blue-200', ultimate: 'bg-gradient-to-br from-amber-50 to-yellow-50 border-amber-300' }; const tierPriceColors = { free: 'text-gray-700', pro: 'text-blue-700', ultimate: 'text-amber-600' }; const tierBtnColors = { free: 'bg-gray-100 text-gray-700 hover:bg-gray-200', pro: 'bg-blue-600 text-white hover:bg-blue-700', ultimate: 'bg-gradient-to-r from-amber-500 to-yellow-500 text-white hover:from-amber-600 hover:to-yellow-600' }; export default function PricingPage() { const { data: session } = useSession(); const { t } = useLocale(); const router = useRouter(); const effectiveRole = useEffectiveRole(); const [role, setRole] = useState('customer'); const [plans, setPlans] = useState([]); const [currentPlanId, setCurrentPlanId] = useState(null); const [loading, setLoading] = useState(true); const [confirmPlan, setConfirmPlan] = useState(null); const [preview, setPreview] = useState(null); const [previewLoading, setPreviewLoading] = useState(false); const [purchasing, setPurchasing] = useState(false); // Sync role from effective role — skip 'admin' (transient before preview cookie is read) useEffect(()=>{ if (!effectiveRole || effectiveRole === 'admin') return; setRole(effectiveRole === 'specialist' ? 'specialist' : 'customer'); }, [ effectiveRole ]); // Fetch plans with abort to prevent stale race conditions useEffect(()=>{ let aborted = false; setLoading(true); getPlans(role).then((data)=>{ if (!aborted) setPlans(data.sort((a, b)=>tierOrder.indexOf(a.tier) - tierOrder.indexOf(b.tier))); }).catch(()=>{}).finally(()=>{ if (!aborted) setLoading(false); }); return ()=>{ aborted = true; }; }, [ role ]); const fetchCurrentPlan = ()=>{ if (!session) return; getMyDashboard().then((d)=>{ var _d_plan; var _d_plan_id; return setCurrentPlanId((_d_plan_id = (_d_plan = d.plan) === null || _d_plan === void 0 ? void 0 : _d_plan.id) !== null && _d_plan_id !== void 0 ? _d_plan_id : null); }).catch(()=>{}); }; useEffect(fetchCurrentPlan, [ session ]); // Refresh active plan when admin widget changes it useEffect(()=>{ const handler = ()=>fetchCurrentPlan(); window.addEventListener('canhelp:plan-changed', handler); document.addEventListener('visibilitychange', handler); return ()=>{ window.removeEventListener('canhelp:plan-changed', handler); document.removeEventListener('visibilitychange', handler); }; }, [ session ]); async function handleSelectPlan(plan) { if (!session) { router.push('/sign-in'); return; } setConfirmPlan(plan); setPreview(null); setPreviewLoading(true); try { const p = await previewPlanChange(plan.id); setPreview(p); } catch (e) { setConfirmPlan(null); } finally{ setPreviewLoading(false); } } async function handleConfirm() { if (!confirmPlan || !preview) return; setPurchasing(true); try { const result = await purchasePlan(confirmPlan.id, preview.canPayFromBalance); if (result.url && result.params) { const form = document.createElement('form'); form.method = 'POST'; form.action = result.url; Object.entries(result.params).forEach((param)=>{ let [k, v] = param; const inp = document.createElement('input'); inp.type = 'hidden'; inp.name = k; inp.value = v; form.appendChild(inp); }); document.body.appendChild(form); form.submit(); return; } setCurrentPlanId(confirmPlan.id); setConfirmPlan(null); setPreview(null); } catch (e) { // ignore } finally{ setPurchasing(false); } } const visibleFeatures = FEATURE_ROWS.filter((param)=>{ let { key } = param; if (role === 'specialist' && CUSTOMER_FEATURES.has(key)) return false; if (role === 'customer' && SPECIALIST_FEATURES.has(key)) return false; return true; }); return /*#__PURE__*/ _jsxs("main", { className: "min-h-screen py-12 px-4", children: [ /*#__PURE__*/ _jsxs("div", { className: "max-w-5xl mx-auto", children: [ /*#__PURE__*/ _jsxs("div", { className: "text-center mb-10", children: [ /*#__PURE__*/ _jsx("h1", { className: "text-4xl font-bold text-white mb-3", children: t('pricing.title', 'Тарифы') }), /*#__PURE__*/ _jsx("p", { className: "text-white/70 text-lg", children: session ? t("pricing.subtitle_".concat(role), role === 'specialist' ? 'Тарифы Ð´Ð»Ñ ÑпециалиÑтов' : 'Тарифы Ð´Ð»Ñ Ð·Ð°ÐºÐ°Ð·Ñ‡Ð¸ÐºÐ¾Ð²') : t('pricing.subtitle', 'Выберите подходÑщий план') }), " " ] }), !session && /*#__PURE__*/ _jsx("div", { className: "flex justify-center mb-10", children: /*#__PURE__*/ _jsxs("div", { className: "inline-flex bg-white/10 rounded-xl p-1 gap-1", children: [ /*#__PURE__*/ _jsx("button", { onClick: ()=>setRole('customer'), className: "px-6 py-2 rounded-lg text-sm font-semibold transition ".concat(role === 'customer' ? 'bg-white text-gray-900 shadow-sm' : 'text-white/70 hover:text-white'), children: t('pricing.role.customer', 'Заказчик') }), /*#__PURE__*/ _jsx("button", { onClick: ()=>setRole('specialist'), className: "px-6 py-2 rounded-lg text-sm font-semibold transition ".concat(role === 'specialist' ? 'bg-white text-gray-900 shadow-sm' : 'text-white/70 hover:text-white'), children: t('pricing.role.specialist', 'СпециалиÑÑ‚') }) ] }) }), loading ? /*#__PURE__*/ _jsx("div", { className: "text-center text-white/60 py-20", children: t('common.loading', 'Загрузка...') }) : /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-6 mb-12", children: plans.map((plan)=>{ const isCurrentPlan = plan.id === currentPlanId; const isFree = plan.tier === 'free'; return /*#__PURE__*/ _jsxs("div", { className: "rounded-2xl border-2 p-6 bg-white flex flex-col transition ".concat(isCurrentPlan ? 'ring-2 ring-blue-500 ring-offset-2' : '', " ").concat(plan.tier === 'ultimate' ? 'border-amber-300 shadow-lg shadow-amber-100' : 'border-gray-200'), children: [ /*#__PURE__*/ _jsxs("div", { className: "flex items-center gap-2 mb-4", children: [ /*#__PURE__*/ _jsx(PlanBadge, { tier: plan.tier, size: "md" }), isCurrentPlan && /*#__PURE__*/ _jsx("span", { className: "text-xs font-medium text-green-600 bg-green-50 border border-green-200 px-2 py-0.5 rounded-full", children: t('pricing.current_plan', 'Ваш план') }), plan.tier === 'pro' && !isCurrentPlan && /*#__PURE__*/ _jsx("span", { className: "text-xs font-medium text-blue-600 bg-blue-50 border border-blue-100 px-2 py-0.5 rounded-full", children: t('pricing.popular', 'ПопулÑрный') }) ] }), /*#__PURE__*/ _jsx("h2", { className: "text-xl font-bold text-gray-900 mb-1", children: plan.name }), /*#__PURE__*/ _jsx("p", { className: "text-gray-500 text-sm mb-4 min-h-[40px]", children: plan.description }), /*#__PURE__*/ _jsxs("div", { className: "text-3xl font-extrabold mb-1 ".concat(tierPriceColors[plan.tier]), children: [ isFree ? t('pricing.free', 'БеÑплатно') : /*#__PURE__*/ _jsxs(_Fragment, { children: [ plan.oldPrice && /*#__PURE__*/ _jsxs("span", { className: "text-lg font-normal text-gray-400 line-through mr-2", children: [ "€", plan.oldPrice ] }), "€", plan.price ] }), !isFree && /*#__PURE__*/ _jsxs("span", { className: "text-base font-normal text-gray-400", children: [ "/", t('pricing.per_month', 'меÑ') ] }) ] }), plan.durationDays && !isFree && /*#__PURE__*/ _jsxs("p", { className: "text-xs text-gray-400 mb-5", children: [ t('pricing.duration', 'Срок'), ": ", plan.durationDays, " ", t('pricing.days', 'дн.') ] }), isFree && /*#__PURE__*/ _jsx("div", { className: "mb-5" }), /*#__PURE__*/ _jsx("div", { className: "mt-auto", children: isCurrentPlan ? /*#__PURE__*/ _jsx("div", { className: "w-full py-2.5 text-center text-sm font-semibold text-green-700 bg-green-50 border border-green-200 rounded-xl", children: t('pricing.your_plan', 'Ðктивный план') }) : isFree ? /*#__PURE__*/ _jsx("div", { className: "w-full py-2.5 text-center text-sm font-medium text-gray-400 bg-gray-50 border border-gray-200 rounded-xl", children: t('pricing.free_default', 'По умолчанию') }) : /*#__PURE__*/ _jsxs("button", { onClick: ()=>handleSelectPlan(plan), className: "block w-full py-2.5 text-center text-sm font-semibold rounded-xl transition ".concat(tierBtnColors[plan.tier]), children: [ t('pricing.choose', 'Выбрать'), " ", plan.name ] }) }) ] }, plan.id); }) }), /*#__PURE__*/ _jsxs("div", { className: "bg-white rounded-2xl border border-gray-200 overflow-hidden", children: [ /*#__PURE__*/ _jsx("div", { className: "px-6 py-4 border-b border-gray-100", children: /*#__PURE__*/ _jsx("h3", { className: "font-semibold text-gray-900", children: t('pricing.compare', 'Сравнение функций') }) }), /*#__PURE__*/ _jsx("div", { className: "overflow-x-auto", children: /*#__PURE__*/ _jsxs("table", { className: "w-full text-sm", children: [ /*#__PURE__*/ _jsx("thead", { children: /*#__PURE__*/ _jsxs("tr", { className: "border-b border-gray-100", children: [ /*#__PURE__*/ _jsx("th", { className: "text-left px-6 py-3 text-gray-500 font-medium w-1/2", children: t('pricing.feature', 'ФункциÑ') }), plans.map((plan)=>/*#__PURE__*/ _jsx("th", { className: "text-center px-4 py-3 font-medium text-gray-700", children: /*#__PURE__*/ _jsxs("div", { className: "flex flex-col items-center gap-1", children: [ /*#__PURE__*/ _jsx(PlanBadge, { tier: plan.tier, size: "sm" }), /*#__PURE__*/ _jsx("span", { className: "text-xs text-gray-400", children: plan.tier === 'free' ? t('pricing.free', 'БеÑплатно') : "€".concat(plan.price) }) ] }) }, plan.id)) ] }) }), /*#__PURE__*/ _jsx("tbody", { children: visibleFeatures.map((param)=>{ let { key, labelKey, format } = param; return /*#__PURE__*/ _jsxs("tr", { className: "border-b border-gray-50 hover:bg-gray-50/50 transition", children: [ /*#__PURE__*/ _jsx("td", { className: "px-6 py-3 text-gray-600", children: t(labelKey, labelKey) }), plans.map((plan)=>{ const val = plan[key]; let cell; if (format) { cell = /*#__PURE__*/ _jsx("span", { className: "text-gray-700 font-medium", children: format(val) }); } else if (typeof val === 'boolean') { cell = val ? /*#__PURE__*/ _jsx(CheckIcon, {}) : /*#__PURE__*/ _jsx(XIcon, {}); } else { cell = /*#__PURE__*/ _jsx("span", { className: "text-gray-700", children: val === null ? '∞' : String(val !== null && val !== void 0 ? val : '—') }); } return /*#__PURE__*/ _jsx("td", { className: "text-center px-4 py-3", children: cell }, plan.id); }) ] }, key); }) }) ] }) }) ] }), /*#__PURE__*/ _jsx("p", { className: "text-center text-white/50 text-sm mt-8", children: t('pricing.faq_note', 'Оплата ÑпиÑываетÑÑ Ñ Ð±Ð°Ð»Ð°Ð½Ñа CanHelp. Пополнение доÑтупно в разделе Оплата.') }) ] }) ] }), confirmPlan && /*#__PURE__*/ _jsx("div", { className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50 px-4", children: /*#__PURE__*/ _jsxs("div", { className: "bg-white rounded-2xl shadow-2xl w-full max-w-md p-6", children: [ /*#__PURE__*/ _jsx("h2", { className: "text-lg font-bold text-gray-900 mb-4", children: t('pricing.confirm.title', 'Подтвердите выбор тарифа') }), previewLoading ? /*#__PURE__*/ _jsx("div", { className: "py-10 text-center text-gray-400", children: t('common.loading', 'Загрузка...') }) : preview ? /*#__PURE__*/ _jsxs("div", { className: "space-y-3 text-sm text-gray-700", children: [ /*#__PURE__*/ _jsxs("div", { className: "flex justify-between", children: [ /*#__PURE__*/ _jsx("span", { className: "text-gray-500", children: t('pricing.confirm.plan', 'Тариф') }), /*#__PURE__*/ _jsx("span", { className: "font-semibold", children: confirmPlan.name }) ] }), preview.type === 'upgrade' && Number(preview.prorated) > 0 && /*#__PURE__*/ _jsxs("div", { className: "flex justify-between", children: [ /*#__PURE__*/ _jsx("span", { className: "text-gray-500", children: t('pricing.confirm.prorated', 'Зачёт оÑтатка') }), /*#__PURE__*/ _jsxs("span", { className: "text-green-600 font-medium", children: [ "−€", preview.prorated ] }) ] }), preview.type !== 'downgrade' && /*#__PURE__*/ _jsxs("div", { className: "flex justify-between", children: [ /*#__PURE__*/ _jsx("span", { className: "text-gray-500", children: t('pricing.confirm.effective_price', 'К оплате') }), /*#__PURE__*/ _jsxs("span", { className: "font-bold text-gray-900", children: [ "€", preview.effectivePrice ] }) ] }), preview.type !== 'downgrade' && /*#__PURE__*/ _jsxs("div", { className: "flex justify-between", children: [ /*#__PURE__*/ _jsx("span", { className: "text-gray-500", children: t('pricing.confirm.your_balance', 'Ваш баланÑ') }), /*#__PURE__*/ _jsxs("span", { className: preview.canPayFromBalance ? 'text-green-600' : 'text-red-500', children: [ "€", preview.currentBalance ] }) ] }), preview.type === 'downgrade' && /*#__PURE__*/ _jsxs("div", { className: "bg-orange-50 border border-orange-200 rounded-xl p-3 text-orange-800 text-xs", children: [ t('pricing.confirm.downgrade_info', 'Переход на новый тариф произойдёт автоматичеÑки поÑле Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ периода.'), preview.scheduledDate && /*#__PURE__*/ _jsxs(_Fragment, { children: [ " ", new Date(preview.scheduledDate).toLocaleDateString('ru-RU') ] }) ] }), preview.type !== 'downgrade' && !preview.canPayFromBalance && /*#__PURE__*/ _jsxs("div", { className: "bg-red-50 border border-red-200 rounded-xl p-3 text-red-700 text-xs", children: [ t('pricing.confirm.insufficient', 'ÐедоÑтаточно ÑредÑтв на баланÑе.'), ' ', /*#__PURE__*/ _jsx(Link, { href: "/payment", className: "underline font-medium", onClick: ()=>setConfirmPlan(null), children: t('pricing.confirm.top_up', 'Пополнить') }) ] }), /*#__PURE__*/ _jsxs("div", { className: "flex gap-3 pt-2", children: [ /*#__PURE__*/ _jsx("button", { onClick: ()=>{ setConfirmPlan(null); setPreview(null); }, className: "flex-1 py-2.5 rounded-xl border border-gray-200 text-sm font-medium text-gray-600 hover:bg-gray-50 transition", children: t('common.cancel', 'Отмена') }), (preview.type === 'downgrade' || preview.canPayFromBalance) && /*#__PURE__*/ _jsx("button", { onClick: handleConfirm, disabled: purchasing, className: "flex-1 py-2.5 rounded-xl text-sm font-semibold text-white transition ".concat(preview.type === 'downgrade' ? 'bg-orange-500 hover:bg-orange-600' : tierBtnColors[confirmPlan.tier].replace('block w-full', '').trim(), " disabled:opacity-50"), children: purchasing ? t('common.loading', 'Загрузка...') : preview.type === 'downgrade' ? t('pricing.confirm.schedule_downgrade', 'Запланировать переход') : t('pricing.confirm.pay', 'Оплатить') }) ] }) ] }) : null ] }) }) ] }); } I61146undefined148191undefined193221undefined223266undefined268307undefined309353undefined355440undefined442492undefined494553undefined25192522(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined26782681(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined29822985(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined31403143(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined39783992undefined40484057(0,_lib_auth__WEBPACK_IMPORTED_MODULE_4__/* .useSession */ .wV)undefined40804088(0,_context_locale__WEBPACK_IMPORTED_MODULE_5__/* .useLocale */ .Y)undefined41124120(0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)undefined41514166(0,_hooks_useEffectiveRole__WEBPACK_IMPORTED_MODULE_8__/* .useEffectiveRole */ .F)undefined41994206(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined42514258(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined43114318(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined43614368(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined44194426(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined44694476(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined45334540(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined45904597(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined47054713(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined49694977(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined50485055(0,_lib_api__WEBPACK_IMPORTED_MODULE_6__/* .getPlans */ .T9)undefined54475460(0,_lib_api__WEBPACK_IMPORTED_MODULE_6__/* .getMyDashboard */ .H)undefined57455753(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined58595867(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined65286544(0,_lib_api__WEBPACK_IMPORTED_MODULE_6__/* .previewPlanChange */ .Cs)undefined68716882(0,_lib_api__WEBPACK_IMPORTED_MODULE_6__/* .purchasePlan */ .Je)undefined80968100(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined82048208(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined83298333(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined84788481(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined87178720(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined91819184(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined93079311(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined94959498(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined99549957(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1049910502(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1069110695(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1069710705react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragmentundefined1078810791(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1116911173(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1158011584(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1181211815(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1181711825_components_PlanBadge__WEBPACK_IMPORTED_MODULE_7__/* .PlanBadge */ .dundefined1210912112(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1255712560(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1304713050(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1333313336(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1362813632(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1393813942(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1394413952react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragmentundefined1411614120(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1495014954(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1559615600(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1627016273(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1645616459(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1662816631(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1699616999(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1735217356(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1826618270(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1848118484(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1864818651(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1897618979(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1912419128(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1933219335(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1942419428(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1967519678(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2008020083(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2031520319(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined2062320626(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2062820636_components_PlanBadge__WEBPACK_IMPORTED_MODULE_7__/* .PlanBadge */ .dundefined2099921002(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2182721830(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2210822112(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined2240122404(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2311623119(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2362723630(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2366323666(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2385023853(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2436224365(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2518725190(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2558225585(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2573525739(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined2590625909(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2617426177(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2638826392(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined2656326567(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined2675126754(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2702527028(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2740827412(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined2759627599(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2788227886(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined2839928403(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined2858728590(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2887528879(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined2939429398(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined2958229585(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2986929873(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined3042430428(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined3085530859(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined3086130869react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragmentundefined3136231366(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined3175331756(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined3175831761(next_link__WEBPACK_IMPORTED_MODULE_2___default())undefined3224532249(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined3242832431(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined3309933102(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 */ PricingPage) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(9664); /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7541); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1592); /* harmony import */ var _context_locale__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(9906); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(2982); /* harmony import */ var _components_PlanBadge__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(2035); /* harmony import */ var _hooks_useEffectiveRole__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(7795); /* __next_internal_client_entry_do_not_use__ default auto */ const FEATURE_ROWS = [ { key: 'maxMessagesPerDay', labelKey: 'pricing.feat.messages', format: (v)=>v === null ? '∞' : String(v) }, { key: 'maxOrdersPerDay', labelKey: 'pricing.feat.orders', format: (v)=>v === null ? '∞' : String(v) }, { key: 'canContactAll', labelKey: 'pricing.feat.contact_all' }, { key: 'canViewPhone', labelKey: 'pricing.feat.view_phone' }, { key: 'canShowContactInfo', labelKey: 'pricing.feat.show_contact' }, { key: 'hasFavorites', labelKey: 'pricing.feat.favorites' }, { key: 'hasVerifiedBadge', labelKey: 'pricing.feat.verified_badge' }, { key: 'hasGoogleCalendar', labelKey: 'pricing.feat.google_calendar' }, { key: 'hasPersonalSite', labelKey: 'pricing.feat.personal_site' }, { key: 'hasAutoResponse', labelKey: 'pricing.feat.auto_response' }, { key: 'hasAutoMatch', labelKey: 'pricing.feat.auto_match' }, { key: 'highlightedReviews', labelKey: 'pricing.feat.highlighted_reviews' }, { key: 'maxPortfolioItems', labelKey: 'pricing.feat.portfolio', format: (v)=>v === null ? '∞' : String(v) }, { key: 'maxCards', labelKey: 'pricing.feat.cards', format: (v)=>v === null ? '∞' : String(v) }, { key: 'notifyNewTasks', labelKey: 'pricing.feat.notify_tasks' }, { key: 'canUploadVideo', labelKey: 'pricing.feat.video' } ]; const SPECIALIST_FEATURES = new Set([ 'hasGoogleCalendar', 'hasAutoResponse', 'highlightedReviews', 'maxPortfolioItems', 'maxCards', 'notifyNewTasks', 'canUploadVideo' ]); const CUSTOMER_FEATURES = new Set([ 'hasAutoMatch' ]); function CheckIcon() { return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("svg", { viewBox: "0 0 20 20", fill: "currentColor", className: "w-5 h-5 text-green-500 mx-auto", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path", { fillRule: "evenodd", d: "M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z", clipRule: "evenodd" }) }); } function XIcon() { return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("svg", { viewBox: "0 0 20 20", fill: "currentColor", className: "w-4 h-4 text-gray-300 mx-auto", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path", { d: "M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z" }) }); } const tierOrder = [ 'free', 'pro', 'ultimate' ]; const tierHeaderColors = { free: 'bg-gray-50 border-gray-200', pro: 'bg-blue-50 border-blue-200', ultimate: 'bg-gradient-to-br from-amber-50 to-yellow-50 border-amber-300' }; const tierPriceColors = { free: 'text-gray-700', pro: 'text-blue-700', ultimate: 'text-amber-600' }; const tierBtnColors = { free: 'bg-gray-100 text-gray-700 hover:bg-gray-200', pro: 'bg-blue-600 text-white hover:bg-blue-700', ultimate: 'bg-gradient-to-r from-amber-500 to-yellow-500 text-white hover:from-amber-600 hover:to-yellow-600' }; function PricingPage() { const { data: session } = (0,_lib_auth__WEBPACK_IMPORTED_MODULE_4__/* .useSession */ .wV)(); const { t } = (0,_context_locale__WEBPACK_IMPORTED_MODULE_5__/* .useLocale */ .Y)(); const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)(); const effectiveRole = (0,_hooks_useEffectiveRole__WEBPACK_IMPORTED_MODULE_8__/* .useEffectiveRole */ .F)(); const [role, setRole] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('customer'); const [plans, setPlans] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]); const [currentPlanId, setCurrentPlanId] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null); const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true); const [confirmPlan, setConfirmPlan] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null); const [preview, setPreview] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null); const [previewLoading, setPreviewLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false); const [purchasing, setPurchasing] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false); // Sync role from effective role — skip 'admin' (transient before preview cookie is read) (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{ if (!effectiveRole || effectiveRole === 'admin') return; setRole(effectiveRole === 'specialist' ? 'specialist' : 'customer'); }, [ effectiveRole ]); // Fetch plans with abort to prevent stale race conditions (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{ let aborted = false; setLoading(true); (0,_lib_api__WEBPACK_IMPORTED_MODULE_6__/* .getPlans */ .T9)(role).then((data)=>{ if (!aborted) setPlans(data.sort((a, b)=>tierOrder.indexOf(a.tier) - tierOrder.indexOf(b.tier))); }).catch(()=>{}).finally(()=>{ if (!aborted) setLoading(false); }); return ()=>{ aborted = true; }; }, [ role ]); const fetchCurrentPlan = ()=>{ if (!session) return; (0,_lib_api__WEBPACK_IMPORTED_MODULE_6__/* .getMyDashboard */ .H)().then((d)=>{ var _d_plan; var _d_plan_id; return setCurrentPlanId((_d_plan_id = (_d_plan = d.plan) === null || _d_plan === void 0 ? void 0 : _d_plan.id) !== null && _d_plan_id !== void 0 ? _d_plan_id : null); }).catch(()=>{}); }; (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(fetchCurrentPlan, [ session ]); // Refresh active plan when admin widget changes it (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{ const handler = ()=>fetchCurrentPlan(); window.addEventListener('canhelp:plan-changed', handler); document.addEventListener('visibilitychange', handler); return ()=>{ window.removeEventListener('canhelp:plan-changed', handler); document.removeEventListener('visibilitychange', handler); }; }, [ session ]); async function handleSelectPlan(plan) { if (!session) { router.push('/sign-in'); return; } setConfirmPlan(plan); setPreview(null); setPreviewLoading(true); try { const p = await (0,_lib_api__WEBPACK_IMPORTED_MODULE_6__/* .previewPlanChange */ .Cs)(plan.id); setPreview(p); } catch (e) { setConfirmPlan(null); } finally{ setPreviewLoading(false); } } async function handleConfirm() { if (!confirmPlan || !preview) return; setPurchasing(true); try { const result = await (0,_lib_api__WEBPACK_IMPORTED_MODULE_6__/* .purchasePlan */ .Je)(confirmPlan.id, preview.canPayFromBalance); if (result.url && result.params) { const form = document.createElement('form'); form.method = 'POST'; form.action = result.url; Object.entries(result.params).forEach((param)=>{ let [k, v] = param; const inp = document.createElement('input'); inp.type = 'hidden'; inp.name = k; inp.value = v; form.appendChild(inp); }); document.body.appendChild(form); form.submit(); return; } setCurrentPlanId(confirmPlan.id); setConfirmPlan(null); setPreview(null); } catch (e) { // ignore } finally{ setPurchasing(false); } } const visibleFeatures = FEATURE_ROWS.filter((param)=>{ let { key } = param; if (role === 'specialist' && CUSTOMER_FEATURES.has(key)) return false; if (role === 'customer' && SPECIALIST_FEATURES.has(key)) return false; return true; }); return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("main", { className: "min-h-screen py-12 px-4", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "max-w-5xl mx-auto", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "text-center mb-10", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h1", { className: "text-4xl font-bold text-white mb-3", children: t('pricing.title', 'Тарифы') }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { className: "text-white/70 text-lg", children: session ? t("pricing.subtitle_".concat(role), role === 'specialist' ? 'Тарифы Ð´Ð»Ñ ÑпециалиÑтов' : 'Тарифы Ð´Ð»Ñ Ð·Ð°ÐºÐ°Ð·Ñ‡Ð¸ÐºÐ¾Ð²') : t('pricing.subtitle', 'Выберите подходÑщий план') }), " " ] }), !session && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "flex justify-center mb-10", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "inline-flex bg-white/10 rounded-xl p-1 gap-1", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { onClick: ()=>setRole('customer'), className: "px-6 py-2 rounded-lg text-sm font-semibold transition ".concat(role === 'customer' ? 'bg-white text-gray-900 shadow-sm' : 'text-white/70 hover:text-white'), children: t('pricing.role.customer', 'Заказчик') }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { onClick: ()=>setRole('specialist'), className: "px-6 py-2 rounded-lg text-sm font-semibold transition ".concat(role === 'specialist' ? 'bg-white text-gray-900 shadow-sm' : 'text-white/70 hover:text-white'), children: t('pricing.role.specialist', 'СпециалиÑÑ‚') }) ] }) }), loading ? /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "text-center text-white/60 py-20", children: t('common.loading', 'Загрузка...') }) : /*#__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: "grid grid-cols-1 md:grid-cols-3 gap-6 mb-12", children: plans.map((plan)=>{ const isCurrentPlan = plan.id === currentPlanId; const isFree = plan.tier === 'free'; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "rounded-2xl border-2 p-6 bg-white flex flex-col transition ".concat(isCurrentPlan ? 'ring-2 ring-blue-500 ring-offset-2' : '', " ").concat(plan.tier === 'ultimate' ? 'border-amber-300 shadow-lg shadow-amber-100' : 'border-gray-200'), children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "flex items-center gap-2 mb-4", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_PlanBadge__WEBPACK_IMPORTED_MODULE_7__/* .PlanBadge */ .d, { tier: plan.tier, size: "md" }), isCurrentPlan && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "text-xs font-medium text-green-600 bg-green-50 border border-green-200 px-2 py-0.5 rounded-full", children: t('pricing.current_plan', 'Ваш план') }), plan.tier === 'pro' && !isCurrentPlan && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "text-xs font-medium text-blue-600 bg-blue-50 border border-blue-100 px-2 py-0.5 rounded-full", children: t('pricing.popular', 'ПопулÑрный') }) ] }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h2", { className: "text-xl font-bold text-gray-900 mb-1", children: plan.name }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { className: "text-gray-500 text-sm mb-4 min-h-[40px]", children: plan.description }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "text-3xl font-extrabold mb-1 ".concat(tierPriceColors[plan.tier]), children: [ isFree ? t('pricing.free', 'БеÑплатно') : /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [ plan.oldPrice && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", { className: "text-lg font-normal text-gray-400 line-through mr-2", children: [ "€", plan.oldPrice ] }), "€", plan.price ] }), !isFree && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", { className: "text-base font-normal text-gray-400", children: [ "/", t('pricing.per_month', 'меÑ') ] }) ] }), plan.durationDays && !isFree && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("p", { className: "text-xs text-gray-400 mb-5", children: [ t('pricing.duration', 'Срок'), ": ", plan.durationDays, " ", t('pricing.days', 'дн.') ] }), isFree && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "mb-5" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "mt-auto", children: isCurrentPlan ? /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "w-full py-2.5 text-center text-sm font-semibold text-green-700 bg-green-50 border border-green-200 rounded-xl", children: t('pricing.your_plan', 'Ðктивный план') }) : isFree ? /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "w-full py-2.5 text-center text-sm font-medium text-gray-400 bg-gray-50 border border-gray-200 rounded-xl", children: t('pricing.free_default', 'По умолчанию') }) : /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("button", { onClick: ()=>handleSelectPlan(plan), className: "block w-full py-2.5 text-center text-sm font-semibold rounded-xl transition ".concat(tierBtnColors[plan.tier]), children: [ t('pricing.choose', 'Выбрать'), " ", plan.name ] }) }) ] }, plan.id); }) }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "bg-white rounded-2xl border border-gray-200 overflow-hidden", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "px-6 py-4 border-b border-gray-100", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h3", { className: "font-semibold text-gray-900", children: t('pricing.compare', 'Сравнение функций') }) }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "overflow-x-auto", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("table", { className: "w-full text-sm", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("thead", { children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("tr", { className: "border-b border-gray-100", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("th", { className: "text-left px-6 py-3 text-gray-500 font-medium w-1/2", children: t('pricing.feature', 'ФункциÑ') }), plans.map((plan)=>/*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("th", { className: "text-center px-4 py-3 font-medium text-gray-700", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "flex flex-col items-center gap-1", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_PlanBadge__WEBPACK_IMPORTED_MODULE_7__/* .PlanBadge */ .d, { tier: plan.tier, size: "sm" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "text-xs text-gray-400", children: plan.tier === 'free' ? t('pricing.free', 'БеÑплатно') : "€".concat(plan.price) }) ] }) }, plan.id)) ] }) }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("tbody", { children: visibleFeatures.map((param)=>{ let { key, labelKey, format } = param; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("tr", { className: "border-b border-gray-50 hover:bg-gray-50/50 transition", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("td", { className: "px-6 py-3 text-gray-600", children: t(labelKey, labelKey) }), plans.map((plan)=>{ const val = plan[key]; let cell; if (format) { cell = /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "text-gray-700 font-medium", children: format(val) }); } else if (typeof val === 'boolean') { cell = val ? /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(CheckIcon, {}) : /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(XIcon, {}); } else { cell = /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "text-gray-700", children: val === null ? '∞' : String(val !== null && val !== void 0 ? val : '—') }); } return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("td", { className: "text-center px-4 py-3", children: cell }, plan.id); }) ] }, key); }) }) ] }) }) ] }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { className: "text-center text-white/50 text-sm mt-8", children: t('pricing.faq_note', 'Оплата ÑпиÑываетÑÑ Ñ Ð±Ð°Ð»Ð°Ð½Ñа CanHelp. Пополнение доÑтупно в разделе Оплата.') }) ] }) ] }), confirmPlan && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50 px-4", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "bg-white rounded-2xl shadow-2xl w-full max-w-md p-6", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h2", { className: "text-lg font-bold text-gray-900 mb-4", children: t('pricing.confirm.title', 'Подтвердите выбор тарифа') }), previewLoading ? /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "py-10 text-center text-gray-400", children: t('common.loading', 'Загрузка...') }) : preview ? /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "space-y-3 text-sm text-gray-700", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "flex justify-between", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "text-gray-500", children: t('pricing.confirm.plan', 'Тариф') }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "font-semibold", children: confirmPlan.name }) ] }), preview.type === 'upgrade' && Number(preview.prorated) > 0 && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "flex justify-between", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "text-gray-500", children: t('pricing.confirm.prorated', 'Зачёт оÑтатка') }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", { className: "text-green-600 font-medium", children: [ "−€", preview.prorated ] }) ] }), preview.type !== 'downgrade' && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "flex justify-between", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "text-gray-500", children: t('pricing.confirm.effective_price', 'К оплате') }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", { className: "font-bold text-gray-900", children: [ "€", preview.effectivePrice ] }) ] }), preview.type !== 'downgrade' && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "flex justify-between", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "text-gray-500", children: t('pricing.confirm.your_balance', 'Ваш баланÑ') }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", { className: preview.canPayFromBalance ? 'text-green-600' : 'text-red-500', children: [ "€", preview.currentBalance ] }) ] }), preview.type === 'downgrade' && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "bg-orange-50 border border-orange-200 rounded-xl p-3 text-orange-800 text-xs", children: [ t('pricing.confirm.downgrade_info', 'Переход на новый тариф произойдёт автоматичеÑки поÑле Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ периода.'), preview.scheduledDate && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [ " ", new Date(preview.scheduledDate).toLocaleDateString('ru-RU') ] }) ] }), preview.type !== 'downgrade' && !preview.canPayFromBalance && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "bg-red-50 border border-red-200 rounded-xl p-3 text-red-700 text-xs", children: [ t('pricing.confirm.insufficient', 'ÐедоÑтаточно ÑредÑтв на баланÑе.'), ' ', /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)((next_link__WEBPACK_IMPORTED_MODULE_2___default()), { href: "/payment", className: "underline font-medium", onClick: ()=>setConfirmPlan(null), children: t('pricing.confirm.top_up', 'Пополнить') }) ] }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "flex gap-3 pt-2", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { onClick: ()=>{ setConfirmPlan(null); setPreview(null); }, className: "flex-1 py-2.5 rounded-xl border border-gray-200 text-sm font-medium text-gray-600 hover:bg-gray-50 transition", children: t('common.cancel', 'Отмена') }), (preview.type === 'downgrade' || preview.canPayFromBalance) && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { onClick: handleConfirm, disabled: purchasing, className: "flex-1 py-2.5 rounded-xl text-sm font-semibold text-white transition ".concat(preview.type === 'downgrade' ? 'bg-orange-500 hover:bg-orange-600' : tierBtnColors[confirmPlan.tier].replace('block w-full', '').trim(), " disabled:opacity-50"), children: purchasing ? t('common.loading', 'Загрузка...') : preview.type === 'downgrade' ? t('pricing.confirm.schedule_downgrade', 'Запланировать переход') : t('pricing.confirm.pay', 'Оплатить') }) ] }) ] }) : null ] }) }) ] }); } /***/ }) ËÎ  ÏÞÏÏ__webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ PricingPage) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(9664); /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7541); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1592); /* harmony import */ var _context_locale__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(9906); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(2982); /* harmony import */ var _components_PlanBadge__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(2035); /* harmony import */ var _hooks_useEffectiveRole__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(7795); Ðâ†/* __next_internal_client_entry_do_not_use__ default auto */ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime"; import { useState, useEffect } from 'react'; import Link from 'next/link'; import { useRouter } from 'next/navigation'; import { useSession } from '@/lib/auth'; import { useLocale } from '@/context/locale'; import { getPlans, getMyDashboard, previewPlanChange, purchasePlan } from '@/lib/api'; import { PlanBadge } from '@/components/PlanBadge'; import { useEffectiveRole } from '@/hooks/useEffectiveRole'; const FEATURE_ROWS = [ { key: 'maxMessagesPerDay', labelKey: 'pricing.feat.messages', format: (v)=>v === null ? '∞' : String(v) }, { key: 'maxOrdersPerDay', labelKey: 'pricing.feat.orders', format: (v)=>v === null ? '∞' : String(v) }, { key: 'canContactAll', labelKey: 'pricing.feat.contact_all' }, { key: 'canViewPhone', labelKey: 'pricing.feat.view_phone' }, { key: 'canShowContactInfo', labelKey: 'pricing.feat.show_contact' }, { key: 'hasFavorites', labelKey: 'pricing.feat.favorites' }, { key: 'hasVerifiedBadge', labelKey: 'pricing.feat.verified_badge' }, { key: 'hasGoogleCalendar', labelKey: 'pricing.feat.google_calendar' }, { key: 'hasPersonalSite', labelKey: 'pricing.feat.personal_site' }, { key: 'hasAutoResponse', labelKey: 'pricing.feat.auto_response' }, { key: 'hasAutoMatch', labelKey: 'pricing.feat.auto_match' }, { key: 'highlightedReviews', labelKey: 'pricing.feat.highlighted_reviews' }, { key: 'maxPortfolioItems', labelKey: 'pricing.feat.portfolio', format: (v)=>v === null ? '∞' : String(v) }, { key: 'maxCards', labelKey: 'pricing.feat.cards', format: (v)=>v === null ? '∞' : String(v) }, { key: 'notifyNewTasks', labelKey: 'pricing.feat.notify_tasks' }, { key: 'canUploadVideo', labelKey: 'pricing.feat.video' } ]; const SPECIALIST_FEATURES = new Set([ 'hasGoogleCalendar', 'hasAutoResponse', 'highlightedReviews', 'maxPortfolioItems', 'maxCards', 'notifyNewTasks', 'canUploadVideo' ]); const CUSTOMER_FEATURES = new Set([ 'hasAutoMatch' ]); function CheckIcon() { return /*#__PURE__*/ _jsx("svg", { viewBox: "0 0 20 20", fill: "currentColor", className: "w-5 h-5 text-green-500 mx-auto", children: /*#__PURE__*/ _jsx("path", { fillRule: "evenodd", d: "M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z", clipRule: "evenodd" }) }); } function XIcon() { return /*#__PURE__*/ _jsx("svg", { viewBox: "0 0 20 20", fill: "currentColor", className: "w-4 h-4 text-gray-300 mx-auto", children: /*#__PURE__*/ _jsx("path", { d: "M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z" }) }); } const tierOrder = [ 'free', 'pro', 'ultimate' ]; const tierHeaderColors = { free: 'bg-gray-50 border-gray-200', pro: 'bg-blue-50 border-blue-200', ultimate: 'bg-gradient-to-br from-amber-50 to-yellow-50 border-amber-300' }; const tierPriceColors = { free: 'text-gray-700', pro: 'text-blue-700', ultimate: 'text-amber-600' }; const tierBtnColors = { free: 'bg-gray-100 text-gray-700 hover:bg-gray-200', pro: 'bg-blue-600 text-white hover:bg-blue-700', ultimate: 'bg-gradient-to-r from-amber-500 to-yellow-500 text-white hover:from-amber-600 hover:to-yellow-600' }; export default function PricingPage() { const { data: session } = useSession(); const { t } = useLocale(); const router = useRouter(); const effectiveRole = useEffectiveRole(); const [role, setRole] = useState('customer'); const [plans, setPlans] = useState([]); const [currentPlanId, setCurrentPlanId] = useState(null); const [loading, setLoading] = useState(true); const [confirmPlan, setConfirmPlan] = useState(null); const [preview, setPreview] = useState(null); const [previewLoading, setPreviewLoading] = useState(false); const [purchasing, setPurchasing] = useState(false); // Sync role from effective role — skip 'admin' (transient before preview cookie is read) useEffect(()=>{ if (!effectiveRole || effectiveRole === 'admin') return; setRole(effectiveRole === 'specialist' ? 'specialist' : 'customer'); }, [ effectiveRole ]); // Fetch plans with abort to prevent stale race conditions useEffect(()=>{ let aborted = false; setLoading(true); getPlans(role).then((data)=>{ if (!aborted) setPlans(data.sort((a, b)=>tierOrder.indexOf(a.tier) - tierOrder.indexOf(b.tier))); }).catch(()=>{}).finally(()=>{ if (!aborted) setLoading(false); }); return ()=>{ aborted = true; }; }, [ role ]); const fetchCurrentPlan = ()=>{ if (!session) return; getMyDashboard().then((d)=>{ var _d_plan; var _d_plan_id; return setCurrentPlanId((_d_plan_id = (_d_plan = d.plan) === null || _d_plan === void 0 ? void 0 : _d_plan.id) !== null && _d_plan_id !== void 0 ? _d_plan_id : null); }).catch(()=>{}); }; useEffect(fetchCurrentPlan, [ session ]); // Refresh active plan when admin widget changes it useEffect(()=>{ const handler = ()=>fetchCurrentPlan(); window.addEventListener('canhelp:plan-changed', handler); document.addEventListener('visibilitychange', handler); return ()=>{ window.removeEventListener('canhelp:plan-changed', handler); document.removeEventListener('visibilitychange', handler); }; }, [ session ]); async function handleSelectPlan(plan) { if (!session) { router.push('/sign-in'); return; } setConfirmPlan(plan); setPreview(null); setPreviewLoading(true); try { const p = await previewPlanChange(plan.id); setPreview(p); } catch (e) { setConfirmPlan(null); } finally{ setPreviewLoading(false); } } async function handleConfirm() { if (!confirmPlan || !preview) return; setPurchasing(true); try { const result = await purchasePlan(confirmPlan.id, preview.canPayFromBalance); if (result.url && result.params) { const form = document.createElement('form'); form.method = 'POST'; form.action = result.url; Object.entries(result.params).forEach((param)=>{ let [k, v] = param; const inp = document.createElement('input'); inp.type = 'hidden'; inp.name = k; inp.value = v; form.appendChild(inp); }); document.body.appendChild(form); form.submit(); return; } setCurrentPlanId(confirmPlan.id); setConfirmPlan(null); setPreview(null); } catch (e) { // ignore } finally{ setPurchasing(false); } } const visibleFeatures = FEATURE_ROWS.filter((param)=>{ let { key } = param; if (role === 'specialist' && CUSTOMER_FEATURES.has(key)) return false; if (role === 'customer' && SPECIALIST_FEATURES.has(key)) return false; return true; }); return /*#__PURE__*/ _jsxs("main", { className: "min-h-screen py-12 px-4", children: [ /*#__PURE__*/ _jsxs("div", { className: "max-w-5xl mx-auto", children: [ /*#__PURE__*/ _jsxs("div", { className: "text-center mb-10", children: [ /*#__PURE__*/ _jsx("h1", { className: "text-4xl font-bold text-white mb-3", children: t('pricing.title', 'Тарифы') }), /*#__PURE__*/ _jsx("p", { className: "text-white/70 text-lg", children: session ? t("pricing.subtitle_".concat(role), role === 'specialist' ? 'Тарифы Ð´Ð»Ñ ÑпециалиÑтов' : 'Тарифы Ð´Ð»Ñ Ð·Ð°ÐºÐ°Ð·Ñ‡Ð¸ÐºÐ¾Ð²') : t('pricing.subtitle', 'Выберите подходÑщий план') }), " " ] }), !session && /*#__PURE__*/ _jsx("div", { className: "flex justify-center mb-10", children: /*#__PURE__*/ _jsxs("div", { className: "inline-flex bg-white/10 rounded-xl p-1 gap-1", children: [ /*#__PURE__*/ _jsx("button", { onClick: ()=>setRole('customer'), className: "px-6 py-2 rounded-lg text-sm font-semibold transition ".concat(role === 'customer' ? 'bg-white text-gray-900 shadow-sm' : 'text-white/70 hover:text-white'), children: t('pricing.role.customer', 'Заказчик') }), /*#__PURE__*/ _jsx("button", { onClick: ()=>setRole('specialist'), className: "px-6 py-2 rounded-lg text-sm font-semibold transition ".concat(role === 'specialist' ? 'bg-white text-gray-900 shadow-sm' : 'text-white/70 hover:text-white'), children: t('pricing.role.specialist', 'СпециалиÑÑ‚') }) ] }) }), loading ? /*#__PURE__*/ _jsx("div", { className: "text-center text-white/60 py-20", children: t('common.loading', 'Загрузка...') }) : /*#__PURE__*/ _jsxs(_Fragment, { children: [ /*#__PURE__*/ _jsx("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-6 mb-12", children: plans.map((plan)=>{ const isCurrentPlan = plan.id === currentPlanId; const isFree = plan.tier === 'free'; return /*#__PURE__*/ _jsxs("div", { className: "rounded-2xl border-2 p-6 bg-white flex flex-col transition ".concat(isCurrentPlan ? 'ring-2 ring-blue-500 ring-offset-2' : '', " ").concat(plan.tier === 'ultimate' ? 'border-amber-300 shadow-lg shadow-amber-100' : 'border-gray-200'), children: [ /*#__PURE__*/ _jsxs("div", { className: "flex items-center gap-2 mb-4", children: [ /*#__PURE__*/ _jsx(PlanBadge, { tier: plan.tier, size: "md" }), isCurrentPlan && /*#__PURE__*/ _jsx("span", { className: "text-xs font-medium text-green-600 bg-green-50 border border-green-200 px-2 py-0.5 rounded-full", children: t('pricing.current_plan', 'Ваш план') }), plan.tier === 'pro' && !isCurrentPlan && /*#__PURE__*/ _jsx("span", { className: "text-xs font-medium text-blue-600 bg-blue-50 border border-blue-100 px-2 py-0.5 rounded-full", children: t('pricing.popular', 'ПопулÑрный') }) ] }), /*#__PURE__*/ _jsx("h2", { className: "text-xl font-bold text-gray-900 mb-1", children: plan.name }), /*#__PURE__*/ _jsx("p", { className: "text-gray-500 text-sm mb-4 min-h-[40px]", children: plan.description }), /*#__PURE__*/ _jsxs("div", { className: "text-3xl font-extrabold mb-1 ".concat(tierPriceColors[plan.tier]), children: [ isFree ? t('pricing.free', 'БеÑплатно') : /*#__PURE__*/ _jsxs(_Fragment, { children: [ plan.oldPrice && /*#__PURE__*/ _jsxs("span", { className: "text-lg font-normal text-gray-400 line-through mr-2", children: [ "€", plan.oldPrice ] }), "€", plan.price ] }), !isFree && /*#__PURE__*/ _jsxs("span", { className: "text-base font-normal text-gray-400", children: [ "/", t('pricing.per_month', 'меÑ') ] }) ] }), plan.durationDays && !isFree && /*#__PURE__*/ _jsxs("p", { className: "text-xs text-gray-400 mb-5", children: [ t('pricing.duration', 'Срок'), ": ", plan.durationDays, " ", t('pricing.days', 'дн.') ] }), isFree && /*#__PURE__*/ _jsx("div", { className: "mb-5" }), /*#__PURE__*/ _jsx("div", { className: "mt-auto", children: isCurrentPlan ? /*#__PURE__*/ _jsx("div", { className: "w-full py-2.5 text-center text-sm font-semibold text-green-700 bg-green-50 border border-green-200 rounded-xl", children: t('pricing.your_plan', 'Ðктивный план') }) : isFree ? /*#__PURE__*/ _jsx("div", { className: "w-full py-2.5 text-center text-sm font-medium text-gray-400 bg-gray-50 border border-gray-200 rounded-xl", children: t('pricing.free_default', 'По умолчанию') }) : /*#__PURE__*/ _jsxs("button", { onClick: ()=>handleSelectPlan(plan), className: "block w-full py-2.5 text-center text-sm font-semibold rounded-xl transition ".concat(tierBtnColors[plan.tier]), children: [ t('pricing.choose', 'Выбрать'), " ", plan.name ] }) }) ] }, plan.id); }) }), /*#__PURE__*/ _jsxs("div", { className: "bg-white rounded-2xl border border-gray-200 overflow-hidden", children: [ /*#__PURE__*/ _jsx("div", { className: "px-6 py-4 border-b border-gray-100", children: /*#__PURE__*/ _jsx("h3", { className: "font-semibold text-gray-900", children: t('pricing.compare', 'Сравнение функций') }) }), /*#__PURE__*/ _jsx("div", { className: "overflow-x-auto", children: /*#__PURE__*/ _jsxs("table", { className: "w-full text-sm", children: [ /*#__PURE__*/ _jsx("thead", { children: /*#__PURE__*/ _jsxs("tr", { className: "border-b border-gray-100", children: [ /*#__PURE__*/ _jsx("th", { className: "text-left px-6 py-3 text-gray-500 font-medium w-1/2", children: t('pricing.feature', 'ФункциÑ') }), plans.map((plan)=>/*#__PURE__*/ _jsx("th", { className: "text-center px-4 py-3 font-medium text-gray-700", children: /*#__PURE__*/ _jsxs("div", { className: "flex flex-col items-center gap-1", children: [ /*#__PURE__*/ _jsx(PlanBadge, { tier: plan.tier, size: "sm" }), /*#__PURE__*/ _jsx("span", { className: "text-xs text-gray-400", children: plan.tier === 'free' ? t('pricing.free', 'БеÑплатно') : "€".concat(plan.price) }) ] }) }, plan.id)) ] }) }), /*#__PURE__*/ _jsx("tbody", { children: visibleFeatures.map((param)=>{ let { key, labelKey, format } = param; return /*#__PURE__*/ _jsxs("tr", { className: "border-b border-gray-50 hover:bg-gray-50/50 transition", children: [ /*#__PURE__*/ _jsx("td", { className: "px-6 py-3 text-gray-600", children: t(labelKey, labelKey) }), plans.map((plan)=>{ const val = plan[key]; let cell; if (format) { cell = /*#__PURE__*/ _jsx("span", { className: "text-gray-700 font-medium", children: format(val) }); } else if (typeof val === 'boolean') { cell = val ? /*#__PURE__*/ _jsx(CheckIcon, {}) : /*#__PURE__*/ _jsx(XIcon, {}); } else { cell = /*#__PURE__*/ _jsx("span", { className: "text-gray-700", children: val === null ? '∞' : String(val !== null && val !== void 0 ? val : '—') }); } return /*#__PURE__*/ _jsx("td", { className: "text-center px-4 py-3", children: cell }, plan.id); }) ] }, key); }) }) ] }) }) ] }), /*#__PURE__*/ _jsx("p", { className: "text-center text-white/50 text-sm mt-8", children: t('pricing.faq_note', 'Оплата ÑпиÑываетÑÑ Ñ Ð±Ð°Ð»Ð°Ð½Ñа CanHelp. Пополнение доÑтупно в разделе Оплата.') }) ] }) ] }), confirmPlan && /*#__PURE__*/ _jsx("div", { className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50 px-4", children: /*#__PURE__*/ _jsxs("div", { className: "bg-white rounded-2xl shadow-2xl w-full max-w-md p-6", children: [ /*#__PURE__*/ _jsx("h2", { className: "text-lg font-bold text-gray-900 mb-4", children: t('pricing.confirm.title', 'Подтвердите выбор тарифа') }), previewLoading ? /*#__PURE__*/ _jsx("div", { className: "py-10 text-center text-gray-400", children: t('common.loading', 'Загрузка...') }) : preview ? /*#__PURE__*/ _jsxs("div", { className: "space-y-3 text-sm text-gray-700", children: [ /*#__PURE__*/ _jsxs("div", { className: "flex justify-between", children: [ /*#__PURE__*/ _jsx("span", { className: "text-gray-500", children: t('pricing.confirm.plan', 'Тариф') }), /*#__PURE__*/ _jsx("span", { className: "font-semibold", children: confirmPlan.name }) ] }), preview.type === 'upgrade' && Number(preview.prorated) > 0 && /*#__PURE__*/ _jsxs("div", { className: "flex justify-between", children: [ /*#__PURE__*/ _jsx("span", { className: "text-gray-500", children: t('pricing.confirm.prorated', 'Зачёт оÑтатка') }), /*#__PURE__*/ _jsxs("span", { className: "text-green-600 font-medium", children: [ "−€", preview.prorated ] }) ] }), preview.type !== 'downgrade' && /*#__PURE__*/ _jsxs("div", { className: "flex justify-between", children: [ /*#__PURE__*/ _jsx("span", { className: "text-gray-500", children: t('pricing.confirm.effective_price', 'К оплате') }), /*#__PURE__*/ _jsxs("span", { className: "font-bold text-gray-900", children: [ "€", preview.effectivePrice ] }) ] }), preview.type !== 'downgrade' && /*#__PURE__*/ _jsxs("div", { className: "flex justify-between", children: [ /*#__PURE__*/ _jsx("span", { className: "text-gray-500", children: t('pricing.confirm.your_balance', 'Ваш баланÑ') }), /*#__PURE__*/ _jsxs("span", { className: preview.canPayFromBalance ? 'text-green-600' : 'text-red-500', children: [ "€", preview.currentBalance ] }) ] }), preview.type === 'downgrade' && /*#__PURE__*/ _jsxs("div", { className: "bg-orange-50 border border-orange-200 rounded-xl p-3 text-orange-800 text-xs", children: [ t('pricing.confirm.downgrade_info', 'Переход на новый тариф произойдёт автоматичеÑки поÑле Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ периода.'), preview.scheduledDate && /*#__PURE__*/ _jsxs(_Fragment, { children: [ " ", new Date(preview.scheduledDate).toLocaleDateString('ru-RU') ] }) ] }), preview.type !== 'downgrade' && !preview.canPayFromBalance && /*#__PURE__*/ _jsxs("div", { className: "bg-red-50 border border-red-200 rounded-xl p-3 text-red-700 text-xs", children: [ t('pricing.confirm.insufficient', 'ÐедоÑтаточно ÑредÑтв на баланÑе.'), ' ', /*#__PURE__*/ _jsx(Link, { href: "/payment", className: "underline font-medium", onClick: ()=>setConfirmPlan(null), children: t('pricing.confirm.top_up', 'Пополнить') }) ] }), /*#__PURE__*/ _jsxs("div", { className: "flex gap-3 pt-2", children: [ /*#__PURE__*/ _jsx("button", { onClick: ()=>{ setConfirmPlan(null); setPreview(null); }, className: "flex-1 py-2.5 rounded-xl border border-gray-200 text-sm font-medium text-gray-600 hover:bg-gray-50 transition", children: t('common.cancel', 'Отмена') }), (preview.type === 'downgrade' || preview.canPayFromBalance) && /*#__PURE__*/ _jsx("button", { onClick: handleConfirm, disabled: purchasing, className: "flex-1 py-2.5 rounded-xl text-sm font-semibold text-white transition ".concat(preview.type === 'downgrade' ? 'bg-orange-500 hover:bg-orange-600' : tierBtnColors[confirmPlan.tier].replace('block w-full', '').trim(), " disabled:opacity-50"), children: purchasing ? t('common.loading', 'Загрузка...') : preview.type === 'downgrade' ? t('pricing.confirm.schedule_downgrade', 'Запланировать переход') : t('pricing.confirm.pay', 'Оплатить') }) ] }) ] }) : null ] }) }) ] }); } I61146undefined148191undefined193221undefined223266undefined268307undefined309353undefined355440undefined442492undefined494553undefined25192522(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined26782681(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined29822985(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined31403143(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined39783992undefined40484057(0,_lib_auth__WEBPACK_IMPORTED_MODULE_4__/* .useSession */ .wV)undefined40804088(0,_context_locale__WEBPACK_IMPORTED_MODULE_5__/* .useLocale */ .Y)undefined41124120(0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)undefined41514166(0,_hooks_useEffectiveRole__WEBPACK_IMPORTED_MODULE_8__/* .useEffectiveRole */ .F)undefined41994206(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined42514258(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined43114318(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined43614368(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined44194426(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined44694476(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined45334540(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined45904597(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined47054713(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined49694977(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined50485055(0,_lib_api__WEBPACK_IMPORTED_MODULE_6__/* .getPlans */ .T9)undefined54475460(0,_lib_api__WEBPACK_IMPORTED_MODULE_6__/* .getMyDashboard */ .H)undefined57455753(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined58595867(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined65286544(0,_lib_api__WEBPACK_IMPORTED_MODULE_6__/* .previewPlanChange */ .Cs)undefined68716882(0,_lib_api__WEBPACK_IMPORTED_MODULE_6__/* .purchasePlan */ .Je)undefined80968100(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined82048208(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined83298333(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined84788481(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined87178720(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined91819184(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined93079311(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined94959498(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined99549957(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1049910502(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1069110695(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1069710705react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragmentundefined1078810791(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1116911173(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1158011584(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1181211815(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1181711825_components_PlanBadge__WEBPACK_IMPORTED_MODULE_7__/* .PlanBadge */ .dundefined1210912112(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1255712560(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1304713050(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1333313336(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1362813632(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1393813942(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1394413952react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragmentundefined1411614120(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1495014954(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1559615600(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1627016273(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1645616459(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1662816631(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1699616999(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1735217356(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1826618270(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1848118484(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1864818651(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1897618979(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1912419128(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1933219335(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined1942419428(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined1967519678(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2008020083(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2031520319(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined2062320626(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2062820636_components_PlanBadge__WEBPACK_IMPORTED_MODULE_7__/* .PlanBadge */ .dundefined2099921002(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2182721830(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2210822112(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined2240122404(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2311623119(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2362723630(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2366323666(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2385023853(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2436224365(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2518725190(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2558225585(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2573525739(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined2590625909(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2617426177(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2638826392(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined2656326567(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined2675126754(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2702527028(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2740827412(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined2759627599(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2788227886(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined2839928403(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined2858728590(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2887528879(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined2939429398(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined2958229585(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined2986929873(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined3042430428(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined3085530859(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined3086130869react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragmentundefined3136231366(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined3175331756(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined3175831761(next_link__WEBPACK_IMPORTED_MODULE_2___default())undefined3224532249(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined3242832431(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined3309933102(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefinedÑÒ }, «webpack/lib/util/registerExternalSerializerœwebpack-sources/PrefixSource‰/******/ 2__webpack_require__ => { // webpackRuntimeModules çvar __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) __webpack_require__.O(0, [516,664,906,982,587,18,358], () => (__webpack_exec__(160))); var __webpack_exports__ = __webpack_require__.O(); _N_E = __webpack_exports__; } ]); ÿÿÿÎÀ(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([[907],{ /***/ 160: /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 8880)); /***/ }), /***/ 1592: /***/ ((__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__(6504); 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; /***/ }), /***/ 2035: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ d: () => (/* binding */ PlanBadge) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); const tierConfig = { free: { label: 'Free', class: 'bg-gray-100 text-gray-500 border border-gray-200', icon: '' }, pro: { label: 'Pro', class: 'bg-blue-100 text-blue-700 border border-blue-200', icon: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("svg", { viewBox: "0 0 16 16", fill: "none", className: "w-3 h-3 inline-block mr-0.5 -mt-px", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path", { d: "M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.5l-3.7 1.9.7-4.1-3-2.9 4.2-.9L8 1z", fill: "currentColor" }) }) }, ultimate: { label: 'Ultimate', class: 'bg-gradient-to-r from-amber-400 via-yellow-400 to-amber-400 text-gray-900 border border-amber-500 shadow-sm shadow-amber-300/50', icon: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("svg", { viewBox: "0 0 16 16", fill: "none", className: "w-3 h-3 inline-block mr-0.5 -mt-px", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path", { d: "M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.5l-3.7 1.9.7-4.1-3-2.9 4.2-.9L8 1z", fill: "currentColor" }) }) } }; function PlanBadge(param) { let { tier, verified, size = 'sm', className = '' } = param; if (tier === 'free' && !verified) return null; const sizeClass = size === 'sm' ? 'text-[10px] px-1.5 py-0.5' : 'text-xs px-2 py-0.5'; if (verified && tier !== 'free') { return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", { className: "inline-flex items-center gap-1 rounded-full font-semibold ".concat(sizeClass, " ").concat(tierConfig[tier].class, " ").concat(className), children: [ tier === 'ultimate' ? /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(StarIcon, { className: "w-3 h-3 fill-gray-900" }) : /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(VerifiedIcon, { className: "w-3 h-3" }), tierConfig[tier].label ] }); } if (verified) { return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "inline-flex items-center gap-0.5 rounded-full font-semibold ".concat(sizeClass, " bg-blue-100 text-blue-700 border border-blue-200 ").concat(className), children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(VerifiedIcon, { className: "w-3 h-3" }) }); } const cfg = tierConfig[tier]; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", { className: "inline-flex items-center rounded-full font-semibold ".concat(sizeClass, " ").concat(cfg.class, " ").concat(className), children: [ tier === 'pro' && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(StarIcon, { className: "w-3 h-3 mr-0.5 -mt-px" }), tier === 'ultimate' && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(StarIcon, { className: "w-3 h-3 mr-0.5 -mt-px fill-gray-900" }), cfg.label ] }); } function StarIcon(param) { let { className = '' } = param; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("svg", { viewBox: "0 0 16 16", fill: "none", className: className, children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path", { d: "M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.5l-3.7 1.9.7-4.1-3-2.9 4.2-.9L8 1z", fill: "currentColor" }) }); } function VerifiedIcon(param) { let { className = '' } = param; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("svg", { viewBox: "0 0 16 16", fill: "none", className: className, children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path", { d: "M8 1l2 1.4 2.4-.4 1 2.2 2 1.2-.4 2.4L16 10l-1.8 1.6.4 2.4-2.2.8L10.8 17 8 16.2 5.2 17l-1.2-2.2-2.2-.8.4-2.4L0 10l1-2.2-.4-2.4 2-1.2 1-2.2 2.4.4L8 1z", fill: "#3B82F6" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path", { d: "M5.5 8.5l1.5 1.5 3-3", stroke: "white", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) ] }); } /***/ }), /***/ 7795: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ F: () => (/* binding */ useEffectiveRole) /* harmony export */ }); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1592); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* __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=([^;]+)/); var _m_; return (_m_ = m === null || m === void 0 ? void 0 : m[1]) !== null && _m_ !== void 0 ? _m_ : 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() { var _session_user; const { data: session } = (0,_lib_auth__WEBPACK_IMPORTED_MODULE_0__/* .useSession */ .wV)(); const userRole = session === null || session === void 0 ? void 0 : (_session_user = session.user) === null || _session_user === void 0 ? void 0 : _session_user.role; const isAdmin = userRole === 'admin'; const [previewRole, setPreviewRole] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null); (0,react__WEBPACK_IMPORTED_MODULE_1__.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; } /***/ }), /***/ 8880: /***/ ((__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 */ PricingPage) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(9664); /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7541); /* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1592); /* harmony import */ var _context_locale__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(9906); /* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(2982); /* harmony import */ var _components_PlanBadge__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(2035); /* harmony import */ var _hooks_useEffectiveRole__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(7795); /* __next_internal_client_entry_do_not_use__ default auto */ const FEATURE_ROWS = [ { key: 'maxMessagesPerDay', labelKey: 'pricing.feat.messages', format: (v)=>v === null ? '∞' : String(v) }, { key: 'maxOrdersPerDay', labelKey: 'pricing.feat.orders', format: (v)=>v === null ? '∞' : String(v) }, { key: 'canContactAll', labelKey: 'pricing.feat.contact_all' }, { key: 'canViewPhone', labelKey: 'pricing.feat.view_phone' }, { key: 'canShowContactInfo', labelKey: 'pricing.feat.show_contact' }, { key: 'hasFavorites', labelKey: 'pricing.feat.favorites' }, { key: 'hasVerifiedBadge', labelKey: 'pricing.feat.verified_badge' }, { key: 'hasGoogleCalendar', labelKey: 'pricing.feat.google_calendar' }, { key: 'hasPersonalSite', labelKey: 'pricing.feat.personal_site' }, { key: 'hasAutoResponse', labelKey: 'pricing.feat.auto_response' }, { key: 'hasAutoMatch', labelKey: 'pricing.feat.auto_match' }, { key: 'highlightedReviews', labelKey: 'pricing.feat.highlighted_reviews' }, { key: 'maxPortfolioItems', labelKey: 'pricing.feat.portfolio', format: (v)=>v === null ? '∞' : String(v) }, { key: 'maxCards', labelKey: 'pricing.feat.cards', format: (v)=>v === null ? '∞' : String(v) }, { key: 'notifyNewTasks', labelKey: 'pricing.feat.notify_tasks' }, { key: 'canUploadVideo', labelKey: 'pricing.feat.video' } ]; const SPECIALIST_FEATURES = new Set([ 'hasGoogleCalendar', 'hasAutoResponse', 'highlightedReviews', 'maxPortfolioItems', 'maxCards', 'notifyNewTasks', 'canUploadVideo' ]); const CUSTOMER_FEATURES = new Set([ 'hasAutoMatch' ]); function CheckIcon() { return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("svg", { viewBox: "0 0 20 20", fill: "currentColor", className: "w-5 h-5 text-green-500 mx-auto", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path", { fillRule: "evenodd", d: "M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z", clipRule: "evenodd" }) }); } function XIcon() { return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("svg", { viewBox: "0 0 20 20", fill: "currentColor", className: "w-4 h-4 text-gray-300 mx-auto", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path", { d: "M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z" }) }); } const tierOrder = [ 'free', 'pro', 'ultimate' ]; const tierHeaderColors = { free: 'bg-gray-50 border-gray-200', pro: 'bg-blue-50 border-blue-200', ultimate: 'bg-gradient-to-br from-amber-50 to-yellow-50 border-amber-300' }; const tierPriceColors = { free: 'text-gray-700', pro: 'text-blue-700', ultimate: 'text-amber-600' }; const tierBtnColors = { free: 'bg-gray-100 text-gray-700 hover:bg-gray-200', pro: 'bg-blue-600 text-white hover:bg-blue-700', ultimate: 'bg-gradient-to-r from-amber-500 to-yellow-500 text-white hover:from-amber-600 hover:to-yellow-600' }; function PricingPage() { const { data: session } = (0,_lib_auth__WEBPACK_IMPORTED_MODULE_4__/* .useSession */ .wV)(); const { t } = (0,_context_locale__WEBPACK_IMPORTED_MODULE_5__/* .useLocale */ .Y)(); const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)(); const effectiveRole = (0,_hooks_useEffectiveRole__WEBPACK_IMPORTED_MODULE_8__/* .useEffectiveRole */ .F)(); const [role, setRole] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('customer'); const [plans, setPlans] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]); const [currentPlanId, setCurrentPlanId] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null); const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true); const [confirmPlan, setConfirmPlan] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null); const [preview, setPreview] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null); const [previewLoading, setPreviewLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false); const [purchasing, setPurchasing] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false); // Sync role from effective role — skip 'admin' (transient before preview cookie is read) (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{ if (!effectiveRole || effectiveRole === 'admin') return; setRole(effectiveRole === 'specialist' ? 'specialist' : 'customer'); }, [ effectiveRole ]); // Fetch plans with abort to prevent stale race conditions (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{ let aborted = false; setLoading(true); (0,_lib_api__WEBPACK_IMPORTED_MODULE_6__/* .getPlans */ .T9)(role).then((data)=>{ if (!aborted) setPlans(data.sort((a, b)=>tierOrder.indexOf(a.tier) - tierOrder.indexOf(b.tier))); }).catch(()=>{}).finally(()=>{ if (!aborted) setLoading(false); }); return ()=>{ aborted = true; }; }, [ role ]); const fetchCurrentPlan = ()=>{ if (!session) return; (0,_lib_api__WEBPACK_IMPORTED_MODULE_6__/* .getMyDashboard */ .H)().then((d)=>{ var _d_plan; var _d_plan_id; return setCurrentPlanId((_d_plan_id = (_d_plan = d.plan) === null || _d_plan === void 0 ? void 0 : _d_plan.id) !== null && _d_plan_id !== void 0 ? _d_plan_id : null); }).catch(()=>{}); }; (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(fetchCurrentPlan, [ session ]); // Refresh active plan when admin widget changes it (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{ const handler = ()=>fetchCurrentPlan(); window.addEventListener('canhelp:plan-changed', handler); document.addEventListener('visibilitychange', handler); return ()=>{ window.removeEventListener('canhelp:plan-changed', handler); document.removeEventListener('visibilitychange', handler); }; }, [ session ]); async function handleSelectPlan(plan) { if (!session) { router.push('/sign-in'); return; } setConfirmPlan(plan); setPreview(null); setPreviewLoading(true); try { const p = await (0,_lib_api__WEBPACK_IMPORTED_MODULE_6__/* .previewPlanChange */ .Cs)(plan.id); setPreview(p); } catch (e) { setConfirmPlan(null); } finally{ setPreviewLoading(false); } } async function handleConfirm() { if (!confirmPlan || !preview) return; setPurchasing(true); try { const result = await (0,_lib_api__WEBPACK_IMPORTED_MODULE_6__/* .purchasePlan */ .Je)(confirmPlan.id, preview.canPayFromBalance); if (result.url && result.params) { const form = document.createElement('form'); form.method = 'POST'; form.action = result.url; Object.entries(result.params).forEach((param)=>{ let [k, v] = param; const inp = document.createElement('input'); inp.type = 'hidden'; inp.name = k; inp.value = v; form.appendChild(inp); }); document.body.appendChild(form); form.submit(); return; } setCurrentPlanId(confirmPlan.id); setConfirmPlan(null); setPreview(null); } catch (e) { // ignore } finally{ setPurchasing(false); } } const visibleFeatures = FEATURE_ROWS.filter((param)=>{ let { key } = param; if (role === 'specialist' && CUSTOMER_FEATURES.has(key)) return false; if (role === 'customer' && SPECIALIST_FEATURES.has(key)) return false; return true; }); return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("main", { className: "min-h-screen py-12 px-4", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "max-w-5xl mx-auto", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "text-center mb-10", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h1", { className: "text-4xl font-bold text-white mb-3", children: t('pricing.title', 'Тарифы') }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { className: "text-white/70 text-lg", children: session ? t("pricing.subtitle_".concat(role), role === 'specialist' ? 'Тарифы Ð´Ð»Ñ ÑпециалиÑтов' : 'Тарифы Ð´Ð»Ñ Ð·Ð°ÐºÐ°Ð·Ñ‡Ð¸ÐºÐ¾Ð²') : t('pricing.subtitle', 'Выберите подходÑщий план') }), " " ] }), !session && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "flex justify-center mb-10", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "inline-flex bg-white/10 rounded-xl p-1 gap-1", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { onClick: ()=>setRole('customer'), className: "px-6 py-2 rounded-lg text-sm font-semibold transition ".concat(role === 'customer' ? 'bg-white text-gray-900 shadow-sm' : 'text-white/70 hover:text-white'), children: t('pricing.role.customer', 'Заказчик') }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { onClick: ()=>setRole('specialist'), className: "px-6 py-2 rounded-lg text-sm font-semibold transition ".concat(role === 'specialist' ? 'bg-white text-gray-900 shadow-sm' : 'text-white/70 hover:text-white'), children: t('pricing.role.specialist', 'СпециалиÑÑ‚') }) ] }) }), loading ? /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "text-center text-white/60 py-20", children: t('common.loading', 'Загрузка...') }) : /*#__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: "grid grid-cols-1 md:grid-cols-3 gap-6 mb-12", children: plans.map((plan)=>{ const isCurrentPlan = plan.id === currentPlanId; const isFree = plan.tier === 'free'; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "rounded-2xl border-2 p-6 bg-white flex flex-col transition ".concat(isCurrentPlan ? 'ring-2 ring-blue-500 ring-offset-2' : '', " ").concat(plan.tier === 'ultimate' ? 'border-amber-300 shadow-lg shadow-amber-100' : 'border-gray-200'), children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "flex items-center gap-2 mb-4", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_PlanBadge__WEBPACK_IMPORTED_MODULE_7__/* .PlanBadge */ .d, { tier: plan.tier, size: "md" }), isCurrentPlan && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "text-xs font-medium text-green-600 bg-green-50 border border-green-200 px-2 py-0.5 rounded-full", children: t('pricing.current_plan', 'Ваш план') }), plan.tier === 'pro' && !isCurrentPlan && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "text-xs font-medium text-blue-600 bg-blue-50 border border-blue-100 px-2 py-0.5 rounded-full", children: t('pricing.popular', 'ПопулÑрный') }) ] }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h2", { className: "text-xl font-bold text-gray-900 mb-1", children: plan.name }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { className: "text-gray-500 text-sm mb-4 min-h-[40px]", children: plan.description }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "text-3xl font-extrabold mb-1 ".concat(tierPriceColors[plan.tier]), children: [ isFree ? t('pricing.free', 'БеÑплатно') : /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [ plan.oldPrice && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", { className: "text-lg font-normal text-gray-400 line-through mr-2", children: [ "€", plan.oldPrice ] }), "€", plan.price ] }), !isFree && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", { className: "text-base font-normal text-gray-400", children: [ "/", t('pricing.per_month', 'меÑ') ] }) ] }), plan.durationDays && !isFree && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("p", { className: "text-xs text-gray-400 mb-5", children: [ t('pricing.duration', 'Срок'), ": ", plan.durationDays, " ", t('pricing.days', 'дн.') ] }), isFree && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "mb-5" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "mt-auto", children: isCurrentPlan ? /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "w-full py-2.5 text-center text-sm font-semibold text-green-700 bg-green-50 border border-green-200 rounded-xl", children: t('pricing.your_plan', 'Ðктивный план') }) : isFree ? /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "w-full py-2.5 text-center text-sm font-medium text-gray-400 bg-gray-50 border border-gray-200 rounded-xl", children: t('pricing.free_default', 'По умолчанию') }) : /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("button", { onClick: ()=>handleSelectPlan(plan), className: "block w-full py-2.5 text-center text-sm font-semibold rounded-xl transition ".concat(tierBtnColors[plan.tier]), children: [ t('pricing.choose', 'Выбрать'), " ", plan.name ] }) }) ] }, plan.id); }) }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "bg-white rounded-2xl border border-gray-200 overflow-hidden", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "px-6 py-4 border-b border-gray-100", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h3", { className: "font-semibold text-gray-900", children: t('pricing.compare', 'Сравнение функций') }) }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "overflow-x-auto", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("table", { className: "w-full text-sm", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("thead", { children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("tr", { className: "border-b border-gray-100", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("th", { className: "text-left px-6 py-3 text-gray-500 font-medium w-1/2", children: t('pricing.feature', 'ФункциÑ') }), plans.map((plan)=>/*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("th", { className: "text-center px-4 py-3 font-medium text-gray-700", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "flex flex-col items-center gap-1", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_PlanBadge__WEBPACK_IMPORTED_MODULE_7__/* .PlanBadge */ .d, { tier: plan.tier, size: "sm" }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "text-xs text-gray-400", children: plan.tier === 'free' ? t('pricing.free', 'БеÑплатно') : "€".concat(plan.price) }) ] }) }, plan.id)) ] }) }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("tbody", { children: visibleFeatures.map((param)=>{ let { key, labelKey, format } = param; return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("tr", { className: "border-b border-gray-50 hover:bg-gray-50/50 transition", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("td", { className: "px-6 py-3 text-gray-600", children: t(labelKey, labelKey) }), plans.map((plan)=>{ const val = plan[key]; let cell; if (format) { cell = /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "text-gray-700 font-medium", children: format(val) }); } else if (typeof val === 'boolean') { cell = val ? /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(CheckIcon, {}) : /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(XIcon, {}); } else { cell = /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "text-gray-700", children: val === null ? '∞' : String(val !== null && val !== void 0 ? val : '—') }); } return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("td", { className: "text-center px-4 py-3", children: cell }, plan.id); }) ] }, key); }) }) ] }) }) ] }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", { className: "text-center text-white/50 text-sm mt-8", children: t('pricing.faq_note', 'Оплата ÑпиÑываетÑÑ Ñ Ð±Ð°Ð»Ð°Ð½Ñа CanHelp. Пополнение доÑтупно в разделе Оплата.') }) ] }) ] }), confirmPlan && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50 px-4", children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "bg-white rounded-2xl shadow-2xl w-full max-w-md p-6", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h2", { className: "text-lg font-bold text-gray-900 mb-4", children: t('pricing.confirm.title', 'Подтвердите выбор тарифа') }), previewLoading ? /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", { className: "py-10 text-center text-gray-400", children: t('common.loading', 'Загрузка...') }) : preview ? /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "space-y-3 text-sm text-gray-700", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "flex justify-between", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "text-gray-500", children: t('pricing.confirm.plan', 'Тариф') }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "font-semibold", children: confirmPlan.name }) ] }), preview.type === 'upgrade' && Number(preview.prorated) > 0 && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "flex justify-between", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "text-gray-500", children: t('pricing.confirm.prorated', 'Зачёт оÑтатка') }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", { className: "text-green-600 font-medium", children: [ "−€", preview.prorated ] }) ] }), preview.type !== 'downgrade' && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "flex justify-between", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "text-gray-500", children: t('pricing.confirm.effective_price', 'К оплате') }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", { className: "font-bold text-gray-900", children: [ "€", preview.effectivePrice ] }) ] }), preview.type !== 'downgrade' && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "flex justify-between", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("span", { className: "text-gray-500", children: t('pricing.confirm.your_balance', 'Ваш баланÑ') }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("span", { className: preview.canPayFromBalance ? 'text-green-600' : 'text-red-500', children: [ "€", preview.currentBalance ] }) ] }), preview.type === 'downgrade' && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "bg-orange-50 border border-orange-200 rounded-xl p-3 text-orange-800 text-xs", children: [ t('pricing.confirm.downgrade_info', 'Переход на новый тариф произойдёт автоматичеÑки поÑле Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ периода.'), preview.scheduledDate && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [ " ", new Date(preview.scheduledDate).toLocaleDateString('ru-RU') ] }) ] }), preview.type !== 'downgrade' && !preview.canPayFromBalance && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "bg-red-50 border border-red-200 rounded-xl p-3 text-red-700 text-xs", children: [ t('pricing.confirm.insufficient', 'ÐедоÑтаточно ÑредÑтв на баланÑе.'), ' ', /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)((next_link__WEBPACK_IMPORTED_MODULE_2___default()), { href: "/payment", className: "underline font-medium", onClick: ()=>setConfirmPlan(null), children: t('pricing.confirm.top_up', 'Пополнить') }) ] }), /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { className: "flex gap-3 pt-2", children: [ /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { onClick: ()=>{ setConfirmPlan(null); setPreview(null); }, className: "flex-1 py-2.5 rounded-xl border border-gray-200 text-sm font-medium text-gray-600 hover:bg-gray-50 transition", children: t('common.cancel', 'Отмена') }), (preview.type === 'downgrade' || preview.canPayFromBalance) && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", { onClick: handleConfirm, disabled: purchasing, className: "flex-1 py-2.5 rounded-xl text-sm font-semibold text-white transition ".concat(preview.type === 'downgrade' ? 'bg-orange-500 hover:bg-orange-600' : tierBtnColors[confirmPlan.tier].replace('block w-full', '').trim(), " disabled:opacity-50"), children: purchasing ? t('common.loading', 'Загрузка...') : preview.type === 'downgrade' ? t('pricing.confirm.schedule_downgrade', 'Запланировать переход') : t('pricing.confirm.pay', 'Оплатить') }) ] }) ] }) : null ] }) }) ] }); } /***/ }) }, /******/ __webpack_require__ => { // webpackRuntimeModules /******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) /******/ __webpack_require__.O(0, [516,664,906,982,587,18,358], () => (__webpack_exec__(160))); /******/ var __webpack_exports__ = __webpack_require__.O(); /******/ _N_E = __webpack_exports__; /******/ } ]); ´<ÿÿÿ `?IÿÿÿV(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([[907],{ /***/ 160: Hÿÿÿë<ÿÿÿUimport(/* webpackMode: "eager" */ "/opt/canhelp/apps/web/src/app/pricing/page.tsx"); k082Promise.resolve(/* import() eager */).then(__webpack_require__.bind(__webpack_require__, 8880))undefined´µ´ºFÿÿÿ³Fÿÿÿ»:ÿÿÿ¼½´µ´, /***/ 2035: Eÿÿÿ²Eÿÿÿú/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ d: () => (/* binding */ PlanBadge) /* harmony export */ }); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4568); 8ÿÿÿimport { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; const tierConfig = { free: { label: 'Free', class: 'bg-gray-100 text-gray-500 border border-gray-200', icon: '' }, pro: { label: 'Pro', class: 'bg-blue-100 text-blue-700 border border-blue-200', icon: /*#__PURE__*/ _jsx("svg", { viewBox: "0 0 16 16", fill: "none", className: "w-3 h-3 inline-block mr-0.5 -mt-px", children: /*#__PURE__*/ _jsx("path", { d: "M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.5l-3.7 1.9.7-4.1-3-2.9 4.2-.9L8 1z", fill: "currentColor" }) }) }, ultimate: { label: 'Ultimate', class: 'bg-gradient-to-r from-amber-400 via-yellow-400 to-amber-400 text-gray-900 border border-amber-500 shadow-sm shadow-amber-300/50', icon: /*#__PURE__*/ _jsx("svg", { viewBox: "0 0 16 16", fill: "none", className: "w-3 h-3 inline-block mr-0.5 -mt-px", children: /*#__PURE__*/ _jsx("path", { d: "M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.5l-3.7 1.9.7-4.1-3-2.9 4.2-.9L8 1z", fill: "currentColor" }) }) } }; export function PlanBadge(param) { let { tier, verified, size = 'sm', className = '' } = param; if (tier === 'free' && !verified) return null; const sizeClass = size === 'sm' ? 'text-[10px] px-1.5 py-0.5' : 'text-xs px-2 py-0.5'; if (verified && tier !== 'free') { return /*#__PURE__*/ _jsxs("span", { className: "inline-flex items-center gap-1 rounded-full font-semibold ".concat(sizeClass, " ").concat(tierConfig[tier].class, " ").concat(className), children: [ tier === 'ultimate' ? /*#__PURE__*/ _jsx(StarIcon, { className: "w-3 h-3 fill-gray-900" }) : /*#__PURE__*/ _jsx(VerifiedIcon, { className: "w-3 h-3" }), tierConfig[tier].label ] }); } if (verified) { return /*#__PURE__*/ _jsx("span", { className: "inline-flex items-center gap-0.5 rounded-full font-semibold ".concat(sizeClass, " bg-blue-100 text-blue-700 border border-blue-200 ").concat(className), children: /*#__PURE__*/ _jsx(VerifiedIcon, { className: "w-3 h-3" }) }); } const cfg = tierConfig[tier]; return /*#__PURE__*/ _jsxs("span", { className: "inline-flex items-center rounded-full font-semibold ".concat(sizeClass, " ").concat(cfg.class, " ").concat(className), children: [ tier === 'pro' && /*#__PURE__*/ _jsx(StarIcon, { className: "w-3 h-3 mr-0.5 -mt-px" }), tier === 'ultimate' && /*#__PURE__*/ _jsx(StarIcon, { className: "w-3 h-3 mr-0.5 -mt-px fill-gray-900" }), cfg.label ] }); } function StarIcon(param) { let { className = '' } = param; return /*#__PURE__*/ _jsx("svg", { viewBox: "0 0 16 16", fill: "none", className: className, children: /*#__PURE__*/ _jsx("path", { d: "M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.5l-3.7 1.9.7-4.1-3-2.9 4.2-.9L8 1z", fill: "currentColor" }) }); } function VerifiedIcon(param) { let { className = '' } = param; return /*#__PURE__*/ _jsxs("svg", { viewBox: "0 0 16 16", fill: "none", className: className, children: [ /*#__PURE__*/ _jsx("path", { d: "M8 1l2 1.4 2.4-.4 1 2.2 2 1.2-.4 2.4L16 10l-1.8 1.6.4 2.4-2.2.8L10.8 17 8 16.2 5.2 17l-1.2-2.2-2.2-.8.4-2.4L0 10l1-2.2-.4-2.4 2-1.2 1-2.2 2.4.4L8 1z", fill: "#3B82F6" }), /*#__PURE__*/ _jsx("path", { d: "M5.5 8.5l1.5 1.5 3-3", stroke: "white", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) ] }); } Ñ062undefined339342(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined510513(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined907910(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined10781081(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined12601266undefined15701574(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined18241827(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined19311934(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined21332136(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined23612364(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined25112515(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined27302733(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined28632866(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined30913094(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined32193222(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined34713475(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)undefined36143617(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined38743877(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined°±°ÅBÿÿÿ¯Bÿÿÿzÿÿÿ6ÿÿÿLþÿÿ{ÿÿÿ°±°, /***/ 8880: Aÿÿÿ®Aÿÿÿcÿÿÿ5ÿÿÿüÿÿdÿÿÿ¯°¯ÑðÓ¯çvar __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) __webpack_require__.O(0, [516,664,906,982,587,18,358], () => (__webpack_exec__(160))); var __webpack_exports__ = __webpack_require__.O(); ®ÔÕÖ F_«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSource^@font-face { font-family: 'Showpop'; src: url('/fonts/showpop.woff2') format('woff2'); font-weight: normal; font-style: normal; font-display: swap; } .logo-text { font-family: 'Showpop', sans-serif; letter-spacing: 0.01em; font-weight: normal; } @font-face { font-family: 'UnifixSP'; src: url('/fonts/UnifixSP.woff2') format('woff2'); font-weight: normal; font-style: normal; font-display: swap; } .logo-text-unifix { font-family: 'UnifixSP', sans-serif; letter-spacing: 0.01em; font-weight: normal; } @font-face { font-family: 'MotivationOfHearts'; src: url('/fonts/MotivationOfHearts.woff2') format('woff2'); font-weight: normal; font-style: normal; font-display: swap; } .logo-text-motivation { font-family: 'MotivationOfHearts', sans-serif; letter-spacing: 0.01em; font-weight: normal; } *, ::before, ::after { --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-shadow: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-shadow-colored: 0 0 #0000; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; --tw-contain-size: ; --tw-contain-layout: ; --tw-contain-paint: ; --tw-contain-style: ; } ::backdrop { --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-shadow: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-shadow-colored: 0 0 #0000; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; --tw-contain-size: ; --tw-contain-layout: ; --tw-contain-paint: ; --tw-contain-style: ; } /* ! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com */ /* 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) 2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) */ *, ::before, ::after { box-sizing: border-box; /* 1 */ border-width: 0; /* 2 */ border-style: solid; /* 2 */ border-color: #e5e7eb; /* 2 */ } ::before, ::after { --tw-content: ''; } /* 1. Use a consistent sensible line-height in all browsers. 2. Prevent adjustments of font size after orientation changes in iOS. 3. Use a more readable tab size. 4. Use the user's configured `sans` font-family by default. 5. Use the user's configured `sans` font-feature-settings by default. 6. Use the user's configured `sans` font-variation-settings by default. 7. Disable tap highlights on iOS */ html, :host { line-height: 1.5; /* 1 */ -webkit-text-size-adjust: 100%; /* 2 */ -moz-tab-size: 4; /* 3 */ -o-tab-size: 4; tab-size: 4; /* 3 */ font-family: Inter, system-ui, sans-serif; /* 4 */ font-feature-settings: normal; /* 5 */ font-variation-settings: normal; /* 6 */ -webkit-tap-highlight-color: transparent; /* 7 */ } /* 1. Remove the margin in all browsers. 2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. */ body { margin: 0; /* 1 */ line-height: inherit; /* 2 */ } /* 1. Add the correct height in Firefox. 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) 3. Ensure horizontal rules are visible by default. */ hr { height: 0; /* 1 */ color: inherit; /* 2 */ border-top-width: 1px; /* 3 */ } /* Add the correct text decoration in Chrome, Edge, and Safari. */ abbr:where([title]) { -webkit-text-decoration: underline dotted; text-decoration: underline dotted; } /* Remove the default font size and weight for headings. */ h1, h2, h3, h4, h5, h6 { font-size: inherit; font-weight: inherit; } /* Reset links to optimize for opt-in styling instead of opt-out. */ a { color: inherit; text-decoration: inherit; } /* Add the correct font weight in Edge and Safari. */ b, strong { font-weight: bolder; } /* 1. Use the user's configured `mono` font-family by default. 2. Use the user's configured `mono` font-feature-settings by default. 3. Use the user's configured `mono` font-variation-settings by default. 4. Correct the odd `em` font sizing in all browsers. */ code, kbd, samp, pre { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; /* 1 */ font-feature-settings: normal; /* 2 */ font-variation-settings: normal; /* 3 */ font-size: 1em; /* 4 */ } /* Add the correct font size in all browsers. */ small { font-size: 80%; } /* Prevent `sub` and `sup` elements from affecting the line height in all browsers. */ sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } sub { bottom: -0.25em; } sup { top: -0.5em; } /* 1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) 2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) 3. Remove gaps between table borders by default. */ table { text-indent: 0; /* 1 */ border-color: inherit; /* 2 */ border-collapse: collapse; /* 3 */ } /* 1. Change the font styles in all browsers. 2. Remove the margin in Firefox and Safari. 3. Remove default padding in all browsers. */ button, input, optgroup, select, textarea { font-family: inherit; /* 1 */ font-feature-settings: inherit; /* 1 */ font-variation-settings: inherit; /* 1 */ font-size: 100%; /* 1 */ font-weight: inherit; /* 1 */ line-height: inherit; /* 1 */ letter-spacing: inherit; /* 1 */ color: inherit; /* 1 */ margin: 0; /* 2 */ padding: 0; /* 3 */ } /* Remove the inheritance of text transform in Edge and Firefox. */ button, select { text-transform: none; } /* 1. Correct the inability to style clickable types in iOS and Safari. 2. Remove default button styles. */ button, input:where([type='button']), input:where([type='reset']), input:where([type='submit']) { -webkit-appearance: button; /* 1 */ background-color: transparent; /* 2 */ background-image: none; /* 2 */ } /* Use the modern Firefox focus style for all focusable elements. */ :-moz-focusring { outline: auto; } /* Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) */ :-moz-ui-invalid { box-shadow: none; } /* Add the correct vertical alignment in Chrome and Firefox. */ progress { vertical-align: baseline; } /* Correct the cursor style of increment and decrement buttons in Safari. */ ::-webkit-inner-spin-button, ::-webkit-outer-spin-button { height: auto; } /* 1. Correct the odd appearance in Chrome and Safari. 2. Correct the outline style in Safari. */ [type='search'] { -webkit-appearance: textfield; /* 1 */ outline-offset: -2px; /* 2 */ } /* Remove the inner padding in Chrome and Safari on macOS. */ ::-webkit-search-decoration { -webkit-appearance: none; } /* 1. Correct the inability to style clickable types in iOS and Safari. 2. Change font properties to `inherit` in Safari. */ ::-webkit-file-upload-button { -webkit-appearance: button; /* 1 */ font: inherit; /* 2 */ } /* Add the correct display in Chrome and Safari. */ summary { display: list-item; } /* Removes the default spacing and border for appropriate elements. */ blockquote, dl, dd, h1, h2, h3, h4, h5, h6, hr, figure, p, pre { margin: 0; } fieldset { margin: 0; padding: 0; } legend { padding: 0; } ol, ul, menu { list-style: none; margin: 0; padding: 0; } /* Reset default styling for dialogs. */ dialog { padding: 0; } /* Prevent resizing textareas horizontally by default. */ textarea { resize: vertical; } /* 1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) 2. Set the default placeholder color to the user's configured gray 400 color. */ input::-moz-placeholder, textarea::-moz-placeholder { opacity: 1; /* 1 */ color: #9ca3af; /* 2 */ } input::placeholder, textarea::placeholder { opacity: 1; /* 1 */ color: #9ca3af; /* 2 */ } /* Set the default cursor for buttons. */ button, [role="button"] { cursor: pointer; } /* Make sure disabled buttons don't get the pointer cursor. */ :disabled { cursor: default; } /* 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) This can trigger a poorly considered lint error in some tools but is included by design. */ img, svg, video, canvas, audio, iframe, embed, object { display: block; /* 1 */ vertical-align: middle; /* 2 */ } /* Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) */ img, video { max-width: 100%; height: auto; } /* Make elements with the HTML hidden attribute stay hidden by default */ [hidden]:where(:not([hidden="until-found"])) { display: none; } .container { width: 100%; } @media (min-width: 640px) { .container { max-width: 640px; } } @media (min-width: 768px) { .container { max-width: 768px; } } @media (min-width: 1024px) { .container { max-width: 1024px; } } @media (min-width: 1280px) { .container { max-width: 1280px; } } @media (min-width: 1536px) { .container { max-width: 1536px; } } .pointer-events-none { pointer-events: none; } .visible { visibility: visible; } .static { position: static; } .fixed { position: fixed; } .absolute { position: absolute; } .relative { position: relative; } .sticky { position: sticky; } .-inset-1 { inset: -0.25rem; } .inset-0 { inset: 0px; } .-right-1\.5 { right: -0.375rem; } .-top-1\.5 { top: -0.375rem; } .-top-10 { top: -2.5rem; } .bottom-1 { bottom: 0.25rem; } .bottom-20 { bottom: 5rem; } .bottom-5 { bottom: 1.25rem; } .bottom-6 { bottom: 1.5rem; } .left-0 { left: 0px; } .left-0\.5 { left: 0.125rem; } .left-1\/2 { left: 50%; } .left-1\/4 { left: 25%; } .left-3 { left: 0.75rem; } .left-4 { left: 1rem; } .right-0 { right: 0px; } .right-0\.5 { right: 0.125rem; } .right-1 { right: 0.25rem; } .right-1\/4 { right: 25%; } .right-2 { right: 0.5rem; } .right-3 { right: 0.75rem; } .right-4 { right: 1rem; } .right-5 { right: 1.25rem; } .right-6 { right: 1.5rem; } .top-0 { top: 0px; } .top-0\.5 { top: 0.125rem; } .top-1 { top: 0.25rem; } .top-1\/2 { top: 50%; } .top-2 { top: 0.5rem; } .top-20 { top: 5rem; } .top-24 { top: 6rem; } .top-3 { top: 0.75rem; } .top-4 { top: 1rem; } .top-6 { top: 1.5rem; } .top-full { top: 100%; } .z-10 { z-index: 10; } .z-40 { z-index: 40; } .z-50 { z-index: 50; } .z-\[200\] { z-index: 200; } .z-\[60\] { z-index: 60; } .col-span-2 { grid-column: span 2 / span 2; } .m-0\.5 { margin: 0.125rem; } .mx-0\.5 { margin-left: 0.125rem; margin-right: 0.125rem; } .mx-4 { margin-left: 1rem; margin-right: 1rem; } .mx-5 { margin-left: 1.25rem; margin-right: 1.25rem; } .mx-auto { margin-left: auto; margin-right: auto; } .my-1 { margin-top: 0.25rem; margin-bottom: 0.25rem; } .-mb-px { margin-bottom: -1px; } .-mt-1 { margin-top: -0.25rem; } .-mt-px { margin-top: -1px; } .mb-0 { margin-bottom: 0px; } .mb-0\.5 { margin-bottom: 0.125rem; } .mb-1 { margin-bottom: 0.25rem; } .mb-1\.5 { margin-bottom: 0.375rem; } .mb-10 { margin-bottom: 2.5rem; } .mb-12 { margin-bottom: 3rem; } .mb-14 { margin-bottom: 3.5rem; } .mb-2 { margin-bottom: 0.5rem; } .mb-3 { margin-bottom: 0.75rem; } .mb-4 { margin-bottom: 1rem; } .mb-5 { margin-bottom: 1.25rem; } .mb-6 { margin-bottom: 1.5rem; } .mb-8 { margin-bottom: 2rem; } .ml-1 { margin-left: 0.25rem; } .ml-1\.5 { margin-left: 0.375rem; } .ml-2 { margin-left: 0.5rem; } .ml-3 { margin-left: 0.75rem; } .ml-4 { margin-left: 1rem; } .ml-6 { margin-left: 1.5rem; } .ml-auto { margin-left: auto; } .mr-0\.5 { margin-right: 0.125rem; } .mr-1 { margin-right: 0.25rem; } .mr-2 { margin-right: 0.5rem; } .mt-0\.5 { margin-top: 0.125rem; } .mt-1 { margin-top: 0.25rem; } .mt-1\.5 { margin-top: 0.375rem; } .mt-10 { margin-top: 2.5rem; } .mt-16 { margin-top: 4rem; } .mt-2 { margin-top: 0.5rem; } .mt-3 { margin-top: 0.75rem; } .mt-4 { margin-top: 1rem; } .mt-5 { margin-top: 1.25rem; } .mt-6 { margin-top: 1.5rem; } .mt-8 { margin-top: 2rem; } .mt-auto { margin-top: auto; } .line-clamp-1 { overflow: hidden; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 1; } .line-clamp-2 { overflow: hidden; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; } .block { display: block; } .inline-block { display: inline-block; } .inline { display: inline; } .flex { display: flex; } .inline-flex { display: inline-flex; } .table { display: table; } .grid { display: grid; } .hidden { display: none; } .aspect-square { aspect-ratio: 1 / 1; } .h-0 { height: 0px; } .h-0\.5 { height: 0.125rem; } .h-1 { height: 0.25rem; } .h-1\.5 { height: 0.375rem; } .h-10 { height: 2.5rem; } .h-12 { height: 3rem; } .h-14 { height: 3.5rem; } .h-16 { height: 4rem; } .h-2 { height: 0.5rem; } .h-2\.5 { height: 0.625rem; } .h-20 { height: 5rem; } .h-24 { height: 6rem; } .h-28 { height: 7rem; } .h-3 { height: 0.75rem; } .h-3\.5 { height: 0.875rem; } .h-4 { height: 1rem; } .h-40 { height: 10rem; } .h-5 { height: 1.25rem; } .h-6 { height: 1.5rem; } .h-7 { height: 1.75rem; } .h-8 { height: 2rem; } .h-9 { height: 2.25rem; } .h-\[400px\] { height: 400px; } .h-\[500px\] { height: 500px; } .h-\[calc\(100vh-80px\)\] { height: calc(100vh - 80px); } .h-full { height: 100%; } .h-px { height: 1px; } .max-h-32 { max-height: 8rem; } .max-h-40 { max-height: 10rem; } .max-h-64 { max-height: 16rem; } .max-h-72 { max-height: 18rem; } .max-h-80 { max-height: 20rem; } .max-h-96 { max-height: 24rem; } .max-h-\[60vh\] { max-height: 60vh; } .max-h-\[80vh\] { max-height: 80vh; } .max-h-\[85vh\] { max-height: 85vh; } .max-h-\[90vh\] { max-height: 90vh; } .min-h-0 { min-height: 0px; } .min-h-\[24px\] { min-height: 24px; } .min-h-\[28px\] { min-height: 28px; } .min-h-\[40px\] { min-height: 40px; } .min-h-screen { min-height: 100vh; } .w-0 { width: 0px; } .w-1 { width: 0.25rem; } .w-1\.5 { width: 0.375rem; } .w-1\/2 { width: 50%; } .w-10 { width: 2.5rem; } .w-11 { width: 2.75rem; } .w-12 { width: 3rem; } .w-14 { width: 3.5rem; } .w-16 { width: 4rem; } .w-2 { width: 0.5rem; } .w-2\.5 { width: 0.625rem; } .w-20 { width: 5rem; } .w-24 { width: 6rem; } .w-28 { width: 7rem; } .w-3 { width: 0.75rem; } .w-3\.5 { width: 0.875rem; } .w-4 { width: 1rem; } .w-40 { width: 10rem; } .w-44 { width: 11rem; } .w-5 { width: 1.25rem; } .w-52 { width: 13rem; } .w-56 { width: 14rem; } .w-6 { width: 1.5rem; } .w-7 { width: 1.75rem; } .w-72 { width: 18rem; } .w-8 { width: 2rem; } .w-9 { width: 2.25rem; } .w-\[400px\] { width: 400px; } .w-\[500px\] { width: 500px; } .w-fit { width: -moz-fit-content; width: fit-content; } .w-full { width: 100%; } .w-px { width: 1px; } .min-w-0 { min-width: 0px; } .min-w-32 { min-width: 8rem; } .min-w-72 { min-width: 18rem; } .min-w-\[140px\] { min-width: 140px; } .min-w-\[16px\] { min-width: 16px; } .min-w-\[180px\] { min-width: 180px; } .min-w-\[200px\] { min-width: 200px; } .min-w-\[220px\] { min-width: 220px; } .min-w-\[240px\] { min-width: 240px; } .min-w-fit { min-width: -moz-fit-content; min-width: fit-content; } .max-w-2xl { max-width: 42rem; } .max-w-3xl { max-width: 48rem; } .max-w-4xl { max-width: 56rem; } .max-w-5xl { max-width: 64rem; } .max-w-6xl { max-width: 72rem; } .max-w-7xl { max-width: 80rem; } .max-w-\[100px\] { max-width: 100px; } .max-w-\[70\%\] { max-width: 70%; } .max-w-\[90px\] { max-width: 90px; } .max-w-full { max-width: 100%; } .max-w-lg { max-width: 32rem; } .max-w-md { max-width: 28rem; } .max-w-sm { max-width: 24rem; } .max-w-xl { max-width: 36rem; } .max-w-xs { max-width: 20rem; } .flex-1 { flex: 1 1 0%; } .flex-\[2\] { flex: 2; } .flex-shrink-0 { flex-shrink: 0; } .shrink-0 { flex-shrink: 0; } .grow { flex-grow: 1; } .-translate-x-1\/2 { --tw-translate-x: -50%; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .-translate-x-12 { --tw-translate-x: -3rem; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .-translate-y-1\/2 { --tw-translate-y: -50%; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .translate-x-0 { --tw-translate-x: 0px; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .translate-x-1 { --tw-translate-x: 0.25rem; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .translate-x-12 { --tw-translate-x: 3rem; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .translate-x-3 { --tw-translate-x: 0.75rem; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .translate-x-5 { --tw-translate-x: 1.25rem; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .translate-x-6 { --tw-translate-x: 1.5rem; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .translate-y-0 { --tw-translate-y: 0px; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .translate-y-4 { --tw-translate-y: 1rem; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .rotate-180 { --tw-rotate: 180deg; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .rotate-45 { --tw-rotate: 45deg; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .rotate-90 { --tw-rotate: 90deg; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .scale-105 { --tw-scale-x: 1.05; --tw-scale-y: 1.05; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .transform { transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } @keyframes pulse { 50% { opacity: .5; } } .animate-pulse { animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; } @keyframes spin { to { transform: rotate(360deg); } } .animate-spin { animation: spin 1s linear infinite; } .cursor-default { cursor: default; } .cursor-not-allowed { cursor: not-allowed; } .cursor-pointer { cursor: pointer; } .select-none { -webkit-user-select: none; -moz-user-select: none; user-select: none; } .select-all { -webkit-user-select: all; -moz-user-select: all; user-select: all; } .resize-none { resize: none; } .resize-y { resize: vertical; } .snap-x { scroll-snap-type: x var(--tw-scroll-snap-strictness); } .snap-mandatory { --tw-scroll-snap-strictness: mandatory; } .snap-start { scroll-snap-align: start; } .grid-cols-1 { grid-template-columns: repeat(1, minmax(0, 1fr)); } .grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } .grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } .grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); } .grid-cols-7 { grid-template-columns: repeat(7, minmax(0, 1fr)); } .flex-row-reverse { flex-direction: row-reverse; } .flex-col { flex-direction: column; } .flex-wrap { flex-wrap: wrap; } .items-start { align-items: flex-start; } .items-end { align-items: flex-end; } .items-center { align-items: center; } .justify-end { justify-content: flex-end; } .justify-center { justify-content: center; } .justify-between { justify-content: space-between; } .gap-0 { gap: 0px; } .gap-0\.5 { gap: 0.125rem; } .gap-1 { gap: 0.25rem; } .gap-1\.5 { gap: 0.375rem; } .gap-10 { gap: 2.5rem; } .gap-2 { gap: 0.5rem; } .gap-2\.5 { gap: 0.625rem; } .gap-3 { gap: 0.75rem; } .gap-4 { gap: 1rem; } .gap-5 { gap: 1.25rem; } .gap-6 { gap: 1.5rem; } .gap-8 { gap: 2rem; } .gap-y-3 { row-gap: 0.75rem; } .space-y-0\.5 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(0.125rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(0.125rem * var(--tw-space-y-reverse)); } .space-y-1 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(0.25rem * var(--tw-space-y-reverse)); } .space-y-1\.5 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(0.375rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(0.375rem * var(--tw-space-y-reverse)); } .space-y-16 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(4rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(4rem * var(--tw-space-y-reverse)); } .space-y-2 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(0.5rem * var(--tw-space-y-reverse)); } .space-y-3 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(0.75rem * var(--tw-space-y-reverse)); } .space-y-4 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(1rem * var(--tw-space-y-reverse)); } .space-y-5 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(1.25rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(1.25rem * var(--tw-space-y-reverse)); } .space-y-6 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(1.5rem * var(--tw-space-y-reverse)); } .space-y-8 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(2rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(2rem * var(--tw-space-y-reverse)); } .divide-y > :not([hidden]) ~ :not([hidden]) { --tw-divide-y-reverse: 0; border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse))); border-bottom-width: calc(1px * var(--tw-divide-y-reverse)); } .divide-gray-100 > :not([hidden]) ~ :not([hidden]) { --tw-divide-opacity: 1; border-color: rgb(243 244 246 / var(--tw-divide-opacity, 1)); } .self-end { align-self: flex-end; } .self-center { align-self: center; } .overflow-hidden { overflow: hidden; } .overflow-x-auto { overflow-x: auto; } .overflow-y-auto { overflow-y: auto; } .truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .whitespace-nowrap { white-space: nowrap; } .whitespace-pre-wrap { white-space: pre-wrap; } .rounded { border-radius: 0.25rem; } .rounded-2xl { border-radius: 1rem; } .rounded-\[2\.5rem\] { border-radius: 2.5rem; } .rounded-full { border-radius: 9999px; } .rounded-lg { border-radius: 0.5rem; } .rounded-md { border-radius: 0.375rem; } .rounded-xl { border-radius: 0.75rem; } .rounded-b-xl { border-bottom-right-radius: 0.75rem; border-bottom-left-radius: 0.75rem; } .rounded-t-lg { border-top-left-radius: 0.5rem; border-top-right-radius: 0.5rem; } .rounded-tl-sm { border-top-left-radius: 0.125rem; } .rounded-tr-sm { border-top-right-radius: 0.125rem; } .border { border-width: 1px; } .border-0 { border-width: 0px; } .border-2 { border-width: 2px; } .border-y { border-top-width: 1px; border-bottom-width: 1px; } .border-b { border-bottom-width: 1px; } .border-b-2 { border-bottom-width: 2px; } .border-l-2 { border-left-width: 2px; } .border-r { border-right-width: 1px; } .border-r-2 { border-right-width: 2px; } .border-t { border-top-width: 1px; } .border-t-0 { border-top-width: 0px; } .border-t-4 { border-top-width: 4px; } .border-dashed { border-style: dashed; } .border-amber-100 { --tw-border-opacity: 1; border-color: rgb(254 243 199 / var(--tw-border-opacity, 1)); } .border-amber-200 { --tw-border-opacity: 1; border-color: rgb(253 230 138 / var(--tw-border-opacity, 1)); } .border-amber-300 { --tw-border-opacity: 1; border-color: rgb(252 211 77 / var(--tw-border-opacity, 1)); } .border-amber-500 { --tw-border-opacity: 1; border-color: rgb(245 158 11 / var(--tw-border-opacity, 1)); } .border-blue-100 { --tw-border-opacity: 1; border-color: rgb(219 234 254 / var(--tw-border-opacity, 1)); } .border-blue-200 { --tw-border-opacity: 1; border-color: rgb(191 219 254 / var(--tw-border-opacity, 1)); } .border-blue-300 { --tw-border-opacity: 1; border-color: rgb(147 197 253 / var(--tw-border-opacity, 1)); } .border-blue-400 { --tw-border-opacity: 1; border-color: rgb(96 165 250 / var(--tw-border-opacity, 1)); } .border-blue-50 { --tw-border-opacity: 1; border-color: rgb(239 246 255 / var(--tw-border-opacity, 1)); } .border-blue-500 { --tw-border-opacity: 1; border-color: rgb(59 130 246 / var(--tw-border-opacity, 1)); } .border-blue-500\/10 { border-color: rgb(59 130 246 / 0.1); } .border-blue-500\/20 { border-color: rgb(59 130 246 / 0.2); } .border-blue-600 { --tw-border-opacity: 1; border-color: rgb(37 99 235 / var(--tw-border-opacity, 1)); } .border-emerald-100 { --tw-border-opacity: 1; border-color: rgb(209 250 229 / var(--tw-border-opacity, 1)); } .border-emerald-300 { --tw-border-opacity: 1; border-color: rgb(110 231 183 / var(--tw-border-opacity, 1)); } .border-emerald-400 { --tw-border-opacity: 1; border-color: rgb(52 211 153 / var(--tw-border-opacity, 1)); } .border-emerald-500 { --tw-border-opacity: 1; border-color: rgb(16 185 129 / var(--tw-border-opacity, 1)); } .border-emerald-500\/20 { border-color: rgb(16 185 129 / 0.2); } .border-gray-100 { --tw-border-opacity: 1; border-color: rgb(243 244 246 / var(--tw-border-opacity, 1)); } .border-gray-200 { --tw-border-opacity: 1; border-color: rgb(229 231 235 / var(--tw-border-opacity, 1)); } .border-gray-300 { --tw-border-opacity: 1; border-color: rgb(209 213 219 / var(--tw-border-opacity, 1)); } .border-gray-50 { --tw-border-opacity: 1; border-color: rgb(249 250 251 / var(--tw-border-opacity, 1)); } .border-green-100 { --tw-border-opacity: 1; border-color: rgb(220 252 231 / var(--tw-border-opacity, 1)); } .border-green-200 { --tw-border-opacity: 1; border-color: rgb(187 247 208 / var(--tw-border-opacity, 1)); } .border-indigo-100 { --tw-border-opacity: 1; border-color: rgb(224 231 255 / var(--tw-border-opacity, 1)); } .border-orange-100 { --tw-border-opacity: 1; border-color: rgb(255 237 213 / var(--tw-border-opacity, 1)); } .border-orange-200 { --tw-border-opacity: 1; border-color: rgb(254 215 170 / var(--tw-border-opacity, 1)); } .border-pink-200 { --tw-border-opacity: 1; border-color: rgb(251 207 232 / var(--tw-border-opacity, 1)); } .border-purple-100 { --tw-border-opacity: 1; border-color: rgb(243 232 255 / var(--tw-border-opacity, 1)); } .border-purple-200 { --tw-border-opacity: 1; border-color: rgb(233 213 255 / var(--tw-border-opacity, 1)); } .border-purple-500\/10 { border-color: rgb(168 85 247 / 0.1); } .border-red-100 { --tw-border-opacity: 1; border-color: rgb(254 226 226 / var(--tw-border-opacity, 1)); } .border-red-200 { --tw-border-opacity: 1; border-color: rgb(254 202 202 / var(--tw-border-opacity, 1)); } .border-red-300 { --tw-border-opacity: 1; border-color: rgb(252 165 165 / var(--tw-border-opacity, 1)); } .border-red-400 { --tw-border-opacity: 1; border-color: rgb(248 113 113 / var(--tw-border-opacity, 1)); } .border-rose-100 { --tw-border-opacity: 1; border-color: rgb(255 228 230 / var(--tw-border-opacity, 1)); } .border-rose-300 { --tw-border-opacity: 1; border-color: rgb(253 164 175 / var(--tw-border-opacity, 1)); } .border-rose-500 { --tw-border-opacity: 1; border-color: rgb(244 63 94 / var(--tw-border-opacity, 1)); } .border-sky-100 { --tw-border-opacity: 1; border-color: rgb(224 242 254 / var(--tw-border-opacity, 1)); } .border-slate-100 { --tw-border-opacity: 1; border-color: rgb(241 245 249 / var(--tw-border-opacity, 1)); } .border-slate-200 { --tw-border-opacity: 1; border-color: rgb(226 232 240 / var(--tw-border-opacity, 1)); } .border-teal-100 { --tw-border-opacity: 1; border-color: rgb(204 251 241 / var(--tw-border-opacity, 1)); } .border-transparent { border-color: transparent; } .border-violet-100 { --tw-border-opacity: 1; border-color: rgb(237 233 254 / var(--tw-border-opacity, 1)); } .border-white { --tw-border-opacity: 1; border-color: rgb(255 255 255 / var(--tw-border-opacity, 1)); } .border-white\/10 { border-color: rgb(255 255 255 / 0.1); } .border-white\/20 { border-color: rgb(255 255 255 / 0.2); } .border-white\/30 { border-color: rgb(255 255 255 / 0.3); } .border-white\/40 { border-color: rgb(255 255 255 / 0.4); } .border-yellow-200 { --tw-border-opacity: 1; border-color: rgb(254 240 138 / var(--tw-border-opacity, 1)); } .border-l-blue-500 { --tw-border-opacity: 1; border-left-color: rgb(59 130 246 / var(--tw-border-opacity, 1)); } .border-t-blue-500 { --tw-border-opacity: 1; border-top-color: rgb(59 130 246 / var(--tw-border-opacity, 1)); } .border-t-transparent { border-top-color: transparent; } .border-t-white { --tw-border-opacity: 1; border-top-color: rgb(255 255 255 / var(--tw-border-opacity, 1)); } .bg-\[\#003087\] { --tw-bg-opacity: 1; background-color: rgb(0 48 135 / var(--tw-bg-opacity, 1)); } .bg-amber-100 { --tw-bg-opacity: 1; background-color: rgb(254 243 199 / var(--tw-bg-opacity, 1)); } .bg-amber-400 { --tw-bg-opacity: 1; background-color: rgb(251 191 36 / var(--tw-bg-opacity, 1)); } .bg-amber-50 { --tw-bg-opacity: 1; background-color: rgb(255 251 235 / var(--tw-bg-opacity, 1)); } .bg-amber-500 { --tw-bg-opacity: 1; background-color: rgb(245 158 11 / var(--tw-bg-opacity, 1)); } .bg-amber-500\/10 { background-color: rgb(245 158 11 / 0.1); } .bg-black\/0 { background-color: rgb(0 0 0 / 0); } .bg-black\/40 { background-color: rgb(0 0 0 / 0.4); } .bg-black\/50 { background-color: rgb(0 0 0 / 0.5); } .bg-black\/60 { background-color: rgb(0 0 0 / 0.6); } .bg-black\/70 { background-color: rgb(0 0 0 / 0.7); } .bg-black\/80 { background-color: rgb(0 0 0 / 0.8); } .bg-black\/85 { background-color: rgb(0 0 0 / 0.85); } .bg-black\/90 { background-color: rgb(0 0 0 / 0.9); } .bg-blue-100 { --tw-bg-opacity: 1; background-color: rgb(219 234 254 / var(--tw-bg-opacity, 1)); } .bg-blue-50 { --tw-bg-opacity: 1; background-color: rgb(239 246 255 / var(--tw-bg-opacity, 1)); } .bg-blue-50\/30 { background-color: rgb(239 246 255 / 0.3); } .bg-blue-50\/60 { background-color: rgb(239 246 255 / 0.6); } .bg-blue-500 { --tw-bg-opacity: 1; background-color: rgb(59 130 246 / var(--tw-bg-opacity, 1)); } .bg-blue-500\/10 { background-color: rgb(59 130 246 / 0.1); } .bg-blue-600 { --tw-bg-opacity: 1; background-color: rgb(37 99 235 / var(--tw-bg-opacity, 1)); } .bg-blue-600\/10 { background-color: rgb(37 99 235 / 0.1); } .bg-emerald-100 { --tw-bg-opacity: 1; background-color: rgb(209 250 229 / var(--tw-bg-opacity, 1)); } .bg-emerald-200 { --tw-bg-opacity: 1; background-color: rgb(167 243 208 / var(--tw-bg-opacity, 1)); } .bg-emerald-400 { --tw-bg-opacity: 1; background-color: rgb(52 211 153 / var(--tw-bg-opacity, 1)); } .bg-emerald-50 { --tw-bg-opacity: 1; background-color: rgb(236 253 245 / var(--tw-bg-opacity, 1)); } .bg-emerald-500 { --tw-bg-opacity: 1; background-color: rgb(16 185 129 / var(--tw-bg-opacity, 1)); } .bg-emerald-500\/10 { background-color: rgb(16 185 129 / 0.1); } .bg-emerald-500\/20 { background-color: rgb(16 185 129 / 0.2); } .bg-emerald-600 { --tw-bg-opacity: 1; background-color: rgb(5 150 105 / var(--tw-bg-opacity, 1)); } .bg-gray-100 { --tw-bg-opacity: 1; background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1)); } .bg-gray-200 { --tw-bg-opacity: 1; background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1)); } .bg-gray-300 { --tw-bg-opacity: 1; background-color: rgb(209 213 219 / var(--tw-bg-opacity, 1)); } .bg-gray-400 { --tw-bg-opacity: 1; background-color: rgb(156 163 175 / var(--tw-bg-opacity, 1)); } .bg-gray-50 { --tw-bg-opacity: 1; background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1)); } .bg-gray-600 { --tw-bg-opacity: 1; background-color: rgb(75 85 99 / var(--tw-bg-opacity, 1)); } .bg-gray-900 { --tw-bg-opacity: 1; background-color: rgb(17 24 39 / var(--tw-bg-opacity, 1)); } .bg-green-100 { --tw-bg-opacity: 1; background-color: rgb(220 252 231 / var(--tw-bg-opacity, 1)); } .bg-green-400 { --tw-bg-opacity: 1; background-color: rgb(74 222 128 / var(--tw-bg-opacity, 1)); } .bg-green-50 { --tw-bg-opacity: 1; background-color: rgb(240 253 244 / var(--tw-bg-opacity, 1)); } .bg-green-500 { --tw-bg-opacity: 1; background-color: rgb(34 197 94 / var(--tw-bg-opacity, 1)); } .bg-green-600 { --tw-bg-opacity: 1; background-color: rgb(22 163 74 / var(--tw-bg-opacity, 1)); } .bg-indigo-100 { --tw-bg-opacity: 1; background-color: rgb(224 231 255 / var(--tw-bg-opacity, 1)); } .bg-indigo-50 { --tw-bg-opacity: 1; background-color: rgb(238 242 255 / var(--tw-bg-opacity, 1)); } .bg-indigo-600 { --tw-bg-opacity: 1; background-color: rgb(79 70 229 / var(--tw-bg-opacity, 1)); } .bg-orange-100 { --tw-bg-opacity: 1; background-color: rgb(255 237 213 / var(--tw-bg-opacity, 1)); } .bg-orange-50 { --tw-bg-opacity: 1; background-color: rgb(255 247 237 / var(--tw-bg-opacity, 1)); } .bg-orange-500 { --tw-bg-opacity: 1; background-color: rgb(249 115 22 / var(--tw-bg-opacity, 1)); } .bg-pink-50 { --tw-bg-opacity: 1; background-color: rgb(253 242 248 / var(--tw-bg-opacity, 1)); } .bg-purple-100 { --tw-bg-opacity: 1; background-color: rgb(243 232 255 / var(--tw-bg-opacity, 1)); } .bg-purple-400 { --tw-bg-opacity: 1; background-color: rgb(192 132 252 / var(--tw-bg-opacity, 1)); } .bg-purple-50 { --tw-bg-opacity: 1; background-color: rgb(250 245 255 / var(--tw-bg-opacity, 1)); } .bg-purple-500\/10 { background-color: rgb(168 85 247 / 0.1); } .bg-purple-600 { --tw-bg-opacity: 1; background-color: rgb(147 51 234 / var(--tw-bg-opacity, 1)); } .bg-red-100 { --tw-bg-opacity: 1; background-color: rgb(254 226 226 / var(--tw-bg-opacity, 1)); } .bg-red-200 { --tw-bg-opacity: 1; background-color: rgb(254 202 202 / var(--tw-bg-opacity, 1)); } .bg-red-400 { --tw-bg-opacity: 1; background-color: rgb(248 113 113 / var(--tw-bg-opacity, 1)); } .bg-red-50 { --tw-bg-opacity: 1; background-color: rgb(254 242 242 / var(--tw-bg-opacity, 1)); } .bg-red-500 { --tw-bg-opacity: 1; background-color: rgb(239 68 68 / var(--tw-bg-opacity, 1)); } .bg-rose-50 { --tw-bg-opacity: 1; background-color: rgb(255 241 242 / var(--tw-bg-opacity, 1)); } .bg-rose-600 { --tw-bg-opacity: 1; background-color: rgb(225 29 72 / var(--tw-bg-opacity, 1)); } .bg-sky-50 { --tw-bg-opacity: 1; background-color: rgb(240 249 255 / var(--tw-bg-opacity, 1)); } .bg-sky-500 { --tw-bg-opacity: 1; background-color: rgb(14 165 233 / var(--tw-bg-opacity, 1)); } .bg-slate-100 { --tw-bg-opacity: 1; background-color: rgb(241 245 249 / var(--tw-bg-opacity, 1)); } .bg-slate-900 { --tw-bg-opacity: 1; background-color: rgb(15 23 42 / var(--tw-bg-opacity, 1)); } .bg-teal-50 { --tw-bg-opacity: 1; background-color: rgb(240 253 250 / var(--tw-bg-opacity, 1)); } .bg-violet-50 { --tw-bg-opacity: 1; background-color: rgb(245 243 255 / var(--tw-bg-opacity, 1)); } .bg-violet-500 { --tw-bg-opacity: 1; background-color: rgb(139 92 246 / var(--tw-bg-opacity, 1)); } .bg-white { --tw-bg-opacity: 1; background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1)); } .bg-white\/10 { background-color: rgb(255 255 255 / 0.1); } .bg-white\/15 { background-color: rgb(255 255 255 / 0.15); } .bg-white\/20 { background-color: rgb(255 255 255 / 0.2); } .bg-white\/60 { background-color: rgb(255 255 255 / 0.6); } .bg-white\/80 { background-color: rgb(255 255 255 / 0.8); } .bg-white\/90 { background-color: rgb(255 255 255 / 0.9); } .bg-yellow-100 { --tw-bg-opacity: 1; background-color: rgb(254 249 195 / var(--tw-bg-opacity, 1)); } .bg-yellow-400 { --tw-bg-opacity: 1; background-color: rgb(250 204 21 / var(--tw-bg-opacity, 1)); } .bg-yellow-50 { --tw-bg-opacity: 1; background-color: rgb(254 252 232 / var(--tw-bg-opacity, 1)); } .bg-yellow-500 { --tw-bg-opacity: 1; background-color: rgb(234 179 8 / var(--tw-bg-opacity, 1)); } .bg-gradient-to-br { background-image: linear-gradient(to bottom right, var(--tw-gradient-stops)); } .bg-gradient-to-r { background-image: linear-gradient(to right, var(--tw-gradient-stops)); } .bg-gradient-to-t { background-image: linear-gradient(to top, var(--tw-gradient-stops)); } .from-amber-400 { --tw-gradient-from: #fbbf24 var(--tw-gradient-from-position); --tw-gradient-to: rgb(251 191 36 / 0) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); } .from-amber-50 { --tw-gradient-from: #fffbeb var(--tw-gradient-from-position); --tw-gradient-to: rgb(255 251 235 / 0) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); } .from-amber-500 { --tw-gradient-from: #f59e0b var(--tw-gradient-from-position); --tw-gradient-to: rgb(245 158 11 / 0) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); } .from-black\/60 { --tw-gradient-from: rgb(0 0 0 / 0.6) var(--tw-gradient-from-position); --tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); } .from-blue-500 { --tw-gradient-from: #3b82f6 var(--tw-gradient-from-position); --tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); } .from-blue-700 { --tw-gradient-from: #1d4ed8 var(--tw-gradient-from-position); --tw-gradient-to: rgb(29 78 216 / 0) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); } .from-indigo-100 { --tw-gradient-from: #e0e7ff var(--tw-gradient-from-position); --tw-gradient-to: rgb(224 231 255 / 0) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); } .from-orange-400 { --tw-gradient-from: #fb923c var(--tw-gradient-from-position); --tw-gradient-to: rgb(251 146 60 / 0) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); } .via-transparent { --tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), transparent var(--tw-gradient-via-position), var(--tw-gradient-to); } .via-yellow-400 { --tw-gradient-to: rgb(250 204 21 / 0) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), #facc15 var(--tw-gradient-via-position), var(--tw-gradient-to); } .to-amber-400 { --tw-gradient-to: #fbbf24 var(--tw-gradient-to-position); } .to-amber-50 { --tw-gradient-to: #fffbeb var(--tw-gradient-to-position); } .to-blue-500 { --tw-gradient-to: #3b82f6 var(--tw-gradient-to-position); } .to-orange-400 { --tw-gradient-to: #fb923c var(--tw-gradient-to-position); } .to-purple-500 { --tw-gradient-to: #a855f7 var(--tw-gradient-to-position); } .to-transparent { --tw-gradient-to: transparent var(--tw-gradient-to-position); } .to-yellow-50 { --tw-gradient-to: #fefce8 var(--tw-gradient-to-position); } .to-yellow-500 { --tw-gradient-to: #eab308 var(--tw-gradient-to-position); } .bg-clip-text { -webkit-background-clip: text; background-clip: text; } .fill-gray-900 { fill: #111827; } .object-contain { -o-object-fit: contain; object-fit: contain; } .object-cover { -o-object-fit: cover; object-fit: cover; } .p-0 { padding: 0px; } .p-1 { padding: 0.25rem; } .p-10 { padding: 2.5rem; } .p-2 { padding: 0.5rem; } .p-2\.5 { padding: 0.625rem; } .p-3 { padding: 0.75rem; } .p-4 { padding: 1rem; } .p-5 { padding: 1.25rem; } .p-6 { padding: 1.5rem; } .p-8 { padding: 2rem; } .px-0\.5 { padding-left: 0.125rem; padding-right: 0.125rem; } .px-1 { padding-left: 0.25rem; padding-right: 0.25rem; } .px-1\.5 { padding-left: 0.375rem; padding-right: 0.375rem; } .px-2 { padding-left: 0.5rem; padding-right: 0.5rem; } .px-2\.5 { padding-left: 0.625rem; padding-right: 0.625rem; } .px-3 { padding-left: 0.75rem; padding-right: 0.75rem; } .px-3\.5 { padding-left: 0.875rem; padding-right: 0.875rem; } .px-4 { padding-left: 1rem; padding-right: 1rem; } .px-5 { padding-left: 1.25rem; padding-right: 1.25rem; } .px-6 { padding-left: 1.5rem; padding-right: 1.5rem; } .px-7 { padding-left: 1.75rem; padding-right: 1.75rem; } .px-8 { padding-left: 2rem; padding-right: 2rem; } .py-0\.5 { padding-top: 0.125rem; padding-bottom: 0.125rem; } .py-1 { padding-top: 0.25rem; padding-bottom: 0.25rem; } .py-1\.5 { padding-top: 0.375rem; padding-bottom: 0.375rem; } .py-10 { padding-top: 2.5rem; padding-bottom: 2.5rem; } .py-12 { padding-top: 3rem; padding-bottom: 3rem; } .py-14 { padding-top: 3.5rem; padding-bottom: 3.5rem; } .py-16 { padding-top: 4rem; padding-bottom: 4rem; } .py-2 { padding-top: 0.5rem; padding-bottom: 0.5rem; } .py-2\.5 { padding-top: 0.625rem; padding-bottom: 0.625rem; } .py-20 { padding-top: 5rem; padding-bottom: 5rem; } .py-24 { padding-top: 6rem; padding-bottom: 6rem; } .py-3 { padding-top: 0.75rem; padding-bottom: 0.75rem; } .py-3\.5 { padding-top: 0.875rem; padding-bottom: 0.875rem; } .py-4 { padding-top: 1rem; padding-bottom: 1rem; } .py-5 { padding-top: 1.25rem; padding-bottom: 1.25rem; } .py-6 { padding-top: 1.5rem; padding-bottom: 1.5rem; } .py-8 { padding-top: 2rem; padding-bottom: 2rem; } .pb-0\.5 { padding-bottom: 0.125rem; } .pb-1 { padding-bottom: 0.25rem; } .pb-2 { padding-bottom: 0.5rem; } .pb-20 { padding-bottom: 5rem; } .pb-4 { padding-bottom: 1rem; } .pb-5 { padding-bottom: 1.25rem; } .pl-10 { padding-left: 2.5rem; } .pl-12 { padding-left: 3rem; } .pl-5 { padding-left: 1.25rem; } .pl-7 { padding-left: 1.75rem; } .pl-8 { padding-left: 2rem; } .pr-14 { padding-right: 3.5rem; } .pr-2 { padding-right: 0.5rem; } .pr-24 { padding-right: 6rem; } .pr-3 { padding-right: 0.75rem; } .pr-4 { padding-right: 1rem; } .pt-1 { padding-top: 0.25rem; } .pt-10 { padding-top: 2.5rem; } .pt-16 { padding-top: 4rem; } .pt-2 { padding-top: 0.5rem; } .pt-3 { padding-top: 0.75rem; } .pt-4 { padding-top: 1rem; } .pt-6 { padding-top: 1.5rem; } .pt-8 { padding-top: 2rem; } .text-left { text-align: left; } .text-center { text-align: center; } .text-right { text-align: right; } .align-top { vertical-align: top; } .font-mono { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; } .text-2xl { font-size: 1.5rem; line-height: 2rem; } .text-3xl { font-size: 1.875rem; line-height: 2.25rem; } .text-4xl { font-size: 2.25rem; line-height: 2.5rem; } .text-5xl { font-size: 3rem; line-height: 1; } .text-8xl { font-size: 6rem; line-height: 1; } .text-\[10px\] { font-size: 10px; } .text-\[11px\] { font-size: 11px; } .text-\[8px\] { font-size: 8px; } .text-\[9px\] { font-size: 9px; } .text-base { font-size: 1rem; line-height: 1.5rem; } .text-lg { font-size: 1.125rem; line-height: 1.75rem; } .text-sm { font-size: 0.875rem; line-height: 1.25rem; } .text-xl { font-size: 1.25rem; line-height: 1.75rem; } .text-xs { font-size: 0.75rem; line-height: 1rem; } .font-bold { font-weight: 700; } .font-extrabold { font-weight: 800; } .font-medium { font-weight: 500; } .font-normal { font-weight: 400; } .font-semibold { font-weight: 600; } .uppercase { text-transform: uppercase; } .italic { font-style: italic; } .leading-none { line-height: 1; } .leading-relaxed { line-height: 1.625; } .leading-snug { line-height: 1.375; } .leading-tight { line-height: 1.25; } .tracking-tight { letter-spacing: -0.025em; } .tracking-wide { letter-spacing: 0.025em; } .tracking-wider { letter-spacing: 0.05em; } .text-amber-400 { --tw-text-opacity: 1; color: rgb(251 191 36 / var(--tw-text-opacity, 1)); } .text-amber-500 { --tw-text-opacity: 1; color: rgb(245 158 11 / var(--tw-text-opacity, 1)); } .text-amber-600 { --tw-text-opacity: 1; color: rgb(217 119 6 / var(--tw-text-opacity, 1)); } .text-amber-700 { --tw-text-opacity: 1; color: rgb(180 83 9 / var(--tw-text-opacity, 1)); } .text-amber-800 { --tw-text-opacity: 1; color: rgb(146 64 14 / var(--tw-text-opacity, 1)); } .text-amber-900 { --tw-text-opacity: 1; color: rgb(120 53 15 / var(--tw-text-opacity, 1)); } .text-blue-100 { --tw-text-opacity: 1; color: rgb(219 234 254 / var(--tw-text-opacity, 1)); } .text-blue-300 { --tw-text-opacity: 1; color: rgb(147 197 253 / var(--tw-text-opacity, 1)); } .text-blue-400 { --tw-text-opacity: 1; color: rgb(96 165 250 / var(--tw-text-opacity, 1)); } .text-blue-500 { --tw-text-opacity: 1; color: rgb(59 130 246 / var(--tw-text-opacity, 1)); } .text-blue-600 { --tw-text-opacity: 1; color: rgb(37 99 235 / var(--tw-text-opacity, 1)); } .text-blue-700 { --tw-text-opacity: 1; color: rgb(29 78 216 / var(--tw-text-opacity, 1)); } .text-blue-800 { --tw-text-opacity: 1; color: rgb(30 64 175 / var(--tw-text-opacity, 1)); } .text-blue-900 { --tw-text-opacity: 1; color: rgb(30 58 138 / var(--tw-text-opacity, 1)); } .text-emerald-400 { --tw-text-opacity: 1; color: rgb(52 211 153 / var(--tw-text-opacity, 1)); } .text-emerald-500 { --tw-text-opacity: 1; color: rgb(16 185 129 / var(--tw-text-opacity, 1)); } .text-emerald-600 { --tw-text-opacity: 1; color: rgb(5 150 105 / var(--tw-text-opacity, 1)); } .text-emerald-700 { --tw-text-opacity: 1; color: rgb(4 120 87 / var(--tw-text-opacity, 1)); } .text-emerald-800 { --tw-text-opacity: 1; color: rgb(6 95 70 / var(--tw-text-opacity, 1)); } .text-emerald-900 { --tw-text-opacity: 1; color: rgb(6 78 59 / var(--tw-text-opacity, 1)); } .text-gray-200 { --tw-text-opacity: 1; color: rgb(229 231 235 / var(--tw-text-opacity, 1)); } .text-gray-300 { --tw-text-opacity: 1; color: rgb(209 213 219 / var(--tw-text-opacity, 1)); } .text-gray-400 { --tw-text-opacity: 1; color: rgb(156 163 175 / var(--tw-text-opacity, 1)); } .text-gray-500 { --tw-text-opacity: 1; color: rgb(107 114 128 / var(--tw-text-opacity, 1)); } .text-gray-600 { --tw-text-opacity: 1; color: rgb(75 85 99 / var(--tw-text-opacity, 1)); } .text-gray-700 { --tw-text-opacity: 1; color: rgb(55 65 81 / var(--tw-text-opacity, 1)); } .text-gray-800 { --tw-text-opacity: 1; color: rgb(31 41 55 / var(--tw-text-opacity, 1)); } .text-gray-900 { --tw-text-opacity: 1; color: rgb(17 24 39 / var(--tw-text-opacity, 1)); } .text-green-400 { --tw-text-opacity: 1; color: rgb(74 222 128 / var(--tw-text-opacity, 1)); } .text-green-500 { --tw-text-opacity: 1; color: rgb(34 197 94 / var(--tw-text-opacity, 1)); } .text-green-600 { --tw-text-opacity: 1; color: rgb(22 163 74 / var(--tw-text-opacity, 1)); } .text-green-700 { --tw-text-opacity: 1; color: rgb(21 128 61 / var(--tw-text-opacity, 1)); } .text-green-800 { --tw-text-opacity: 1; color: rgb(22 101 52 / var(--tw-text-opacity, 1)); } .text-indigo-500 { --tw-text-opacity: 1; color: rgb(99 102 241 / var(--tw-text-opacity, 1)); } .text-indigo-600 { --tw-text-opacity: 1; color: rgb(79 70 229 / var(--tw-text-opacity, 1)); } .text-indigo-700 { --tw-text-opacity: 1; color: rgb(67 56 202 / var(--tw-text-opacity, 1)); } .text-orange-400 { --tw-text-opacity: 1; color: rgb(251 146 60 / var(--tw-text-opacity, 1)); } .text-orange-500 { --tw-text-opacity: 1; color: rgb(249 115 22 / var(--tw-text-opacity, 1)); } .text-orange-600 { --tw-text-opacity: 1; color: rgb(234 88 12 / var(--tw-text-opacity, 1)); } .text-orange-700 { --tw-text-opacity: 1; color: rgb(194 65 12 / var(--tw-text-opacity, 1)); } .text-orange-800 { --tw-text-opacity: 1; color: rgb(154 52 18 / var(--tw-text-opacity, 1)); } .text-pink-400 { --tw-text-opacity: 1; color: rgb(244 114 182 / var(--tw-text-opacity, 1)); } .text-pink-500 { --tw-text-opacity: 1; color: rgb(236 72 153 / var(--tw-text-opacity, 1)); } .text-pink-600 { --tw-text-opacity: 1; color: rgb(219 39 119 / var(--tw-text-opacity, 1)); } .text-purple-400 { --tw-text-opacity: 1; color: rgb(192 132 252 / var(--tw-text-opacity, 1)); } .text-purple-500 { --tw-text-opacity: 1; color: rgb(168 85 247 / var(--tw-text-opacity, 1)); } .text-purple-600 { --tw-text-opacity: 1; color: rgb(147 51 234 / var(--tw-text-opacity, 1)); } .text-purple-700 { --tw-text-opacity: 1; color: rgb(126 34 206 / var(--tw-text-opacity, 1)); } .text-red-400 { --tw-text-opacity: 1; color: rgb(248 113 113 / var(--tw-text-opacity, 1)); } .text-red-500 { --tw-text-opacity: 1; color: rgb(239 68 68 / var(--tw-text-opacity, 1)); } .text-red-600 { --tw-text-opacity: 1; color: rgb(220 38 38 / var(--tw-text-opacity, 1)); } .text-red-700 { --tw-text-opacity: 1; color: rgb(185 28 28 / var(--tw-text-opacity, 1)); } .text-rose-700 { --tw-text-opacity: 1; color: rgb(190 18 60 / var(--tw-text-opacity, 1)); } .text-rose-800 { --tw-text-opacity: 1; color: rgb(159 18 57 / var(--tw-text-opacity, 1)); } .text-rose-900 { --tw-text-opacity: 1; color: rgb(136 19 55 / var(--tw-text-opacity, 1)); } .text-sky-600 { --tw-text-opacity: 1; color: rgb(2 132 199 / var(--tw-text-opacity, 1)); } .text-sky-700 { --tw-text-opacity: 1; color: rgb(3 105 161 / var(--tw-text-opacity, 1)); } .text-slate-300 { --tw-text-opacity: 1; color: rgb(203 213 225 / var(--tw-text-opacity, 1)); } .text-slate-400 { --tw-text-opacity: 1; color: rgb(148 163 184 / var(--tw-text-opacity, 1)); } .text-slate-500 { --tw-text-opacity: 1; color: rgb(100 116 139 / var(--tw-text-opacity, 1)); } .text-slate-600 { --tw-text-opacity: 1; color: rgb(71 85 105 / var(--tw-text-opacity, 1)); } .text-slate-700 { --tw-text-opacity: 1; color: rgb(51 65 85 / var(--tw-text-opacity, 1)); } .text-slate-900 { --tw-text-opacity: 1; color: rgb(15 23 42 / var(--tw-text-opacity, 1)); } .text-teal-700 { --tw-text-opacity: 1; color: rgb(15 118 110 / var(--tw-text-opacity, 1)); } .text-transparent { color: transparent; } .text-violet-600 { --tw-text-opacity: 1; color: rgb(124 58 237 / var(--tw-text-opacity, 1)); } .text-violet-700 { --tw-text-opacity: 1; color: rgb(109 40 217 / var(--tw-text-opacity, 1)); } .text-white { --tw-text-opacity: 1; color: rgb(255 255 255 / var(--tw-text-opacity, 1)); } .text-white\/50 { color: rgb(255 255 255 / 0.5); } .text-white\/60 { color: rgb(255 255 255 / 0.6); } .text-white\/70 { color: rgb(255 255 255 / 0.7); } .text-white\/80 { color: rgb(255 255 255 / 0.8); } .text-white\/90 { color: rgb(255 255 255 / 0.9); } .text-yellow-300 { --tw-text-opacity: 1; color: rgb(253 224 71 / var(--tw-text-opacity, 1)); } .text-yellow-400 { --tw-text-opacity: 1; color: rgb(250 204 21 / var(--tw-text-opacity, 1)); } .text-yellow-500 { --tw-text-opacity: 1; color: rgb(234 179 8 / var(--tw-text-opacity, 1)); } .text-yellow-600 { --tw-text-opacity: 1; color: rgb(202 138 4 / var(--tw-text-opacity, 1)); } .text-yellow-700 { --tw-text-opacity: 1; color: rgb(161 98 7 / var(--tw-text-opacity, 1)); } .text-yellow-800 { --tw-text-opacity: 1; color: rgb(133 77 14 / var(--tw-text-opacity, 1)); } .underline { text-decoration-line: underline; } .line-through { text-decoration-line: line-through; } .opacity-0 { opacity: 0; } .opacity-100 { opacity: 1; } .opacity-25 { opacity: 0.25; } .opacity-40 { opacity: 0.4; } .opacity-50 { opacity: 0.5; } .opacity-60 { opacity: 0.6; } .opacity-70 { opacity: 0.7; } .opacity-75 { opacity: 0.75; } .shadow { --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } .shadow-2xl { --tw-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25); --tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } .shadow-lg { --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } .shadow-md { --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } .shadow-sm { --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05); --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } .shadow-xl { --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } .shadow-amber-100 { --tw-shadow-color: #fef3c7; --tw-shadow: var(--tw-shadow-colored); } .shadow-amber-300\/50 { --tw-shadow-color: rgb(252 211 77 / 0.5); --tw-shadow: var(--tw-shadow-colored); } .shadow-amber-500\/25 { --tw-shadow-color: rgb(245 158 11 / 0.25); --tw-shadow: var(--tw-shadow-colored); } .\!ring-2 { --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important; --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important; box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000) !important; } .ring-2 { --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); } .ring-4 { --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color); box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); } .\!ring-blue-500 { --tw-ring-opacity: 1 !important; --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1)) !important; } .ring-blue-200 { --tw-ring-opacity: 1; --tw-ring-color: rgb(191 219 254 / var(--tw-ring-opacity, 1)); } .ring-blue-400 { --tw-ring-opacity: 1; --tw-ring-color: rgb(96 165 250 / var(--tw-ring-opacity, 1)); } .ring-blue-500 { --tw-ring-opacity: 1; --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1)); } .\!ring-offset-1 { --tw-ring-offset-width: 1px !important; } .ring-offset-1 { --tw-ring-offset-width: 1px; } .ring-offset-2 { --tw-ring-offset-width: 2px; } .blur { --tw-blur: blur(8px); filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); } .blur-\[100px\] { --tw-blur: blur(100px); filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); } .blur-\[120px\] { --tw-blur: blur(120px); filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); } .drop-shadow { --tw-drop-shadow: drop-shadow(0 1px 2px rgb(0 0 0 / 0.1)) drop-shadow(0 1px 1px rgb(0 0 0 / 0.06)); filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); } .drop-shadow-lg { --tw-drop-shadow: drop-shadow(0 10px 8px rgb(0 0 0 / 0.04)) drop-shadow(0 4px 3px rgb(0 0 0 / 0.1)); filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); } .filter { filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); } .backdrop-blur { --tw-backdrop-blur: blur(8px); backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); } .backdrop-blur-md { --tw-backdrop-blur: blur(12px); backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); } .backdrop-blur-sm { --tw-backdrop-blur: blur(4px); backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); } .backdrop-blur-xl { --tw-backdrop-blur: blur(24px); backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); } .transition { transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } .transition-all { transition-property: all; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } .transition-colors { transition-property: color, background-color, border-color, text-decoration-color, fill, stroke; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } .transition-opacity { transition-property: opacity; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } .transition-transform { transition-property: transform; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } .duration-200 { transition-duration: 200ms; } .duration-300 { transition-duration: 300ms; } .duration-500 { transition-duration: 500ms; } .ease-in-out { transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); } :root { --blue-main: #2563eb; --blue-light: #60a5fa; --blue-dark: #1e40af; --orange-main: #f59e0b; --orange-light: #fbbf24; --orange-dark: #b45309; --glass-bg: rgba(255,255,255,0.65); --glass-blur: 18px; } body { background: linear-gradient(135deg, var(--blue-main) 0%, var(--blue-light) 60%, var(--orange-light) 100%); color: #18181b; font-family: 'Inter', 'Segoe UI', Arial, sans-serif; min-height: 100vh; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } /* Section highlight styles */ /* Glassmorphism section style */ .section-contrast { background: var(--glass-bg); border-radius: 2.5rem; box-shadow: 0 8px 40px 0 rgba(37,99,235,0.10), 0 1.5px 8px 0 rgba(245,158,11,0.08); border: 1.5px solid rgba(96,165,250,0.13); margin-bottom: 3.5rem; padding: 3rem 1.5rem; backdrop-filter: blur(var(--glass-blur)); -webkit-backdrop-filter: blur(var(--glass-blur)); transition: box-shadow 0.3s, background 0.3s; } .section-contrast:before { display: none; } @media (min-width: 640px) { .section-contrast { padding: 4rem 2.5rem; margin-left: 1.5rem; margin-right: 1.5rem; } } @media (min-width: 1024px) { .section-contrast { margin-left: 2.5rem; margin-right: 2.5rem; } } /* Accent button */ .btn-accent { display: inline-flex; align-items: center; justify-content: center; background: var(--blue-main); color: #fff; font-weight: 700; border-radius: 1.2em; box-shadow: 0 4px 24px 0 rgba(37,99,235,0.13); padding: 0.9em 2.2em; font-size: 1.25rem; letter-spacing: 0.01em; transition: background 0.2s, box-shadow 0.2s, transform 0.15s; border: none; cursor: pointer; } .btn-accent:hover { background: var(--blue-dark); box-shadow: 0 8px 32px 0 rgba(245,158,11,0.13); transform: translateY(-2px) scale(1.03); } /* Outline button — same shape as btn-accent, white background */ .btn-outline { display: inline-flex; align-items: center; justify-content: center; background: #fff; color: var(--blue-main); font-weight: 700; border-radius: 1.2em; box-shadow: 0 4px 24px 0 rgba(37,99,235,0.10); padding: 0.9em 2.2em; font-size: 1.25rem; letter-spacing: 0.01em; border: 2px solid var(--blue-main); cursor: pointer; transition: background 0.2s, box-shadow 0.2s, transform 0.15s, color 0.2s; } .btn-outline:hover { background: var(--blue-main); color: #fff; box-shadow: 0 8px 32px 0 rgba(37,99,235,0.18); transform: translateY(-2px) scale(1.03); } /* Modern card */ .modern-card { background: #fff; border-radius: 1.5rem; box-shadow: 0 2px 16px 0 rgba(37,99,235,0.07), 0 1.5px 8px 0 rgba(245,158,11,0.06); border: 1.5px solid rgba(96,165,250,0.09); transition: box-shadow 0.2s, border 0.2s; } .modern-card:hover { box-shadow: 0 8px 32px 0 rgba(245,158,11,0.13); border: 1.5px solid var(--orange-main); } /* Floating hero icons */ @keyframes heroIconFloat { 0%, 100% { transform: translateY(0px) rotate(0deg); } 50% { transform: translateY(-14px) rotate(4deg); } } @keyframes heroIconDrift { 0%, 100% { transform: translateY(0px) rotate(0deg); } 33% { transform: translateY(-10px) rotate(-5deg); } 66% { transform: translateY(-6px) rotate(3deg); } } @keyframes heroIconSway { 0%, 100% { transform: translateY(0px) translateX(0px); } 50% { transform: translateY(-8px) translateX(6px); } } /* Animated gradient background for hero */ .hero-bg-animated { background: linear-gradient(120deg, var(--blue-main) 0%, var(--blue-light) 60%, var(--orange-main) 100%); background-size: 200% 200%; animation: heroGradientMove 6s ease-in-out infinite; } @keyframes heroGradientMove { 0% { background-position: 0% 50%; } 50% { background-position: 100% 50%; } 100% { background-position: 0% 50%; } } /* Header shrink effect */ .header-base { transition: all 0.3s cubic-bezier(.4,0,.2,1); } .header-shrink .header-content { height: 48px !important; padding-top: 0 !important; padding-bottom: 0 !important; } .header-shrink .logo-text { font-size: 1.3rem !important; letter-spacing: 0.01em; } .logo-text { font-family: 'Showpop', sans-serif !important; font-size: 1.7rem !important; font-weight: 300 !important; letter-spacing: 0.01em; text-transform: uppercase; } .logo-text-mini { font-family: 'Showpop', sans-serif !important; font-size: 1.3rem !important; font-weight: 300 !important; letter-spacing: 0.01em; text-transform: uppercase; transition: font-size 0.3s ease; } .logo-text-mini.scrolled { font-size: 1.1rem !important; } /* ── Site theme (dark = default) ── */ .site-theme { --site-bg: #0a0a0f; --site-surface: rgba(255,255,255,0.03); --site-surface-hover: rgba(255,255,255,0.06); --site-border: rgba(255,255,255,0.05); --site-border-hover: rgba(255,255,255,0.1); --site-text: #ffffff; --site-text-secondary: rgba(255,255,255,0.5); --site-text-muted: rgba(255,255,255,0.3); --site-text-hint: rgba(255,255,255,0.2); --site-nav-bg: rgba(10,10,15,0.8); --site-modal-bg: #14141f; --site-input-bg: rgba(255,255,255,0.05); --site-input-border: rgba(255,255,255,0.1); --site-input-text: #ffffff; --site-input-placeholder: rgba(255,255,255,0.2); --site-tag-bg: rgba(255,255,255,0.05); --site-tag-border: rgba(255,255,255,0.05); --site-tag-text: rgba(255,255,255,0.6); --site-card-bg: rgba(255,255,255,0.03); --site-card-border: rgba(255,255,255,0.05); --site-name-from: #ffffff; --site-name-to: rgba(255,255,255,0.7); --site-avatar-border: rgba(255,255,255,0.1); --site-avatar-bg: rgba(255,255,255,0.05); --site-status-border-color: #0a0a0f; --site-phone-bg: rgba(255,255,255,0.05); --site-phone-border: rgba(255,255,255,0.1); --site-phone-text: #ffffff; --site-divider: rgba(255,255,255,0.1); --site-lang-dropdown: #1a1a24; --site-footer-text: rgba(255,255,255,0.2); --site-scroll-btn-bg: rgba(255,255,255,0.1); --site-scroll-btn-border: rgba(255,255,255,0.1); --site-scroll-btn-text: rgba(255,255,255,0.6); } .site-theme.site-light { --site-bg: #f8f9fb; --site-surface: rgba(0,0,0,0.02); --site-surface-hover: rgba(0,0,0,0.04); --site-border: rgba(0,0,0,0.08); --site-border-hover: rgba(0,0,0,0.15); --site-text: #1a1a2e; --site-text-secondary: rgba(0,0,0,0.55); --site-text-muted: rgba(0,0,0,0.4); --site-text-hint: rgba(0,0,0,0.25); --site-nav-bg: rgba(255,255,255,0.85); --site-modal-bg: #ffffff; --site-input-bg: rgba(0,0,0,0.03); --site-input-border: rgba(0,0,0,0.12); --site-input-text: #1a1a2e; --site-input-placeholder: rgba(0,0,0,0.3); --site-tag-bg: rgba(0,0,0,0.04); --site-tag-border: rgba(0,0,0,0.08); --site-tag-text: rgba(0,0,0,0.6); --site-card-bg: #ffffff; --site-card-border: rgba(0,0,0,0.08); --site-name-from: #1a1a2e; --site-name-to: rgba(26,26,46,0.7); --site-avatar-border: rgba(0,0,0,0.1); --site-avatar-bg: rgba(0,0,0,0.05); --site-status-border-color: #f8f9fb; --site-phone-bg: rgba(0,0,0,0.04); --site-phone-border: rgba(0,0,0,0.1); --site-phone-text: #1a1a2e; --site-divider: rgba(0,0,0,0.08); --site-lang-dropdown: #ffffff; --site-footer-text: rgba(0,0,0,0.3); --site-scroll-btn-bg: rgba(0,0,0,0.06); --site-scroll-btn-border: rgba(0,0,0,0.1); --site-scroll-btn-text: rgba(0,0,0,0.5); } .logo-text-jaipur { font-family: 'Jaipur', 'Inter', 'Segoe UI', Arial, sans-serif !important; font-size: 1.7rem !important; letter-spacing: 0.01em; text-transform: uppercase; } .logo-text-rennie { font-family: 'Rennie', 'Inter', 'Segoe UI', Arial, sans-serif !important; font-size: 1.7rem !important; letter-spacing: 0.01em; text-transform: uppercase; } /* Scroll to top button */ .scroll-to-top-btn { position: fixed; right: 2rem; bottom: 2.5rem; z-index: 100; background: #6366f1; color: #fff; border-radius: 9999px; box-shadow: 0 2px 12px 0 rgba(80,80,120,0.13); padding: 0.75rem; width: 3rem; height: 3rem; display: flex; align-items: center; justify-content: center; font-size: 1.5rem; border: none; cursor: pointer; opacity: 0; pointer-events: none; transition: opacity 0.3s; } .scroll-to-top-btn.visible { opacity: 1; pointer-events: auto; } @font-face { font-family: 'NorseCyr2'; src: url('/fonts/Norse-Regular.woff2') format('woff2'); font-weight: normal; font-style: normal; font-display: swap; } @font-face { font-family: 'Jaipur'; src: url('/fonts/Jaipur.woff2') format('woff2'); font-weight: normal; font-style: normal; font-display: swap; } @font-face { font-family: 'Rennie'; src: url('/fonts/Rennie.woff2') format('woff2'); font-weight: normal; font-style: normal; font-display: swap; } .selection\:bg-blue-500\/30 *::-moz-selection { background-color: rgb(59 130 246 / 0.3); } .selection\:bg-blue-500\/30 *::selection { background-color: rgb(59 130 246 / 0.3); } .selection\:bg-blue-500\/30::-moz-selection { background-color: rgb(59 130 246 / 0.3); } .selection\:bg-blue-500\/30::selection { background-color: rgb(59 130 246 / 0.3); } .placeholder\:text-blue-300::-moz-placeholder { --tw-text-opacity: 1; color: rgb(147 197 253 / var(--tw-text-opacity, 1)); } .placeholder\:text-blue-300::placeholder { --tw-text-opacity: 1; color: rgb(147 197 253 / var(--tw-text-opacity, 1)); } .last\:border-0:last-child { border-width: 0px; } .last\:pb-0:last-child { padding-bottom: 0px; } .focus-within\:ring-2:focus-within { --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); } .focus-within\:ring-blue-400:focus-within { --tw-ring-opacity: 1; --tw-ring-color: rgb(96 165 250 / var(--tw-ring-opacity, 1)); } .hover\:border-blue-300:hover { --tw-border-opacity: 1; border-color: rgb(147 197 253 / var(--tw-border-opacity, 1)); } .hover\:border-blue-400:hover { --tw-border-opacity: 1; border-color: rgb(96 165 250 / var(--tw-border-opacity, 1)); } .hover\:border-gray-300:hover { --tw-border-opacity: 1; border-color: rgb(209 213 219 / var(--tw-border-opacity, 1)); } .hover\:bg-amber-200:hover { --tw-bg-opacity: 1; background-color: rgb(253 230 138 / var(--tw-bg-opacity, 1)); } .hover\:bg-amber-50:hover { --tw-bg-opacity: 1; background-color: rgb(255 251 235 / var(--tw-bg-opacity, 1)); } .hover\:bg-amber-600:hover { --tw-bg-opacity: 1; background-color: rgb(217 119 6 / var(--tw-bg-opacity, 1)); } .hover\:bg-black\/70:hover { background-color: rgb(0 0 0 / 0.7); } .hover\:bg-blue-100:hover { --tw-bg-opacity: 1; background-color: rgb(219 234 254 / var(--tw-bg-opacity, 1)); } .hover\:bg-blue-50:hover { --tw-bg-opacity: 1; background-color: rgb(239 246 255 / var(--tw-bg-opacity, 1)); } .hover\:bg-blue-50\/60:hover { background-color: rgb(239 246 255 / 0.6); } .hover\:bg-blue-500:hover { --tw-bg-opacity: 1; background-color: rgb(59 130 246 / var(--tw-bg-opacity, 1)); } .hover\:bg-blue-700:hover { --tw-bg-opacity: 1; background-color: rgb(29 78 216 / var(--tw-bg-opacity, 1)); } .hover\:bg-emerald-200:hover { --tw-bg-opacity: 1; background-color: rgb(167 243 208 / var(--tw-bg-opacity, 1)); } .hover\:bg-emerald-700:hover { --tw-bg-opacity: 1; background-color: rgb(4 120 87 / var(--tw-bg-opacity, 1)); } .hover\:bg-gray-100:hover { --tw-bg-opacity: 1; background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1)); } .hover\:bg-gray-200:hover { --tw-bg-opacity: 1; background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1)); } .hover\:bg-gray-50:hover { --tw-bg-opacity: 1; background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1)); } .hover\:bg-gray-50\/50:hover { background-color: rgb(249 250 251 / 0.5); } .hover\:bg-gray-700:hover { --tw-bg-opacity: 1; background-color: rgb(55 65 81 / var(--tw-bg-opacity, 1)); } .hover\:bg-green-100:hover { --tw-bg-opacity: 1; background-color: rgb(220 252 231 / var(--tw-bg-opacity, 1)); } .hover\:bg-green-50:hover { --tw-bg-opacity: 1; background-color: rgb(240 253 244 / var(--tw-bg-opacity, 1)); } .hover\:bg-green-700:hover { --tw-bg-opacity: 1; background-color: rgb(21 128 61 / var(--tw-bg-opacity, 1)); } .hover\:bg-indigo-100:hover { --tw-bg-opacity: 1; background-color: rgb(224 231 255 / var(--tw-bg-opacity, 1)); } .hover\:bg-indigo-200:hover { --tw-bg-opacity: 1; background-color: rgb(199 210 254 / var(--tw-bg-opacity, 1)); } .hover\:bg-indigo-700:hover { --tw-bg-opacity: 1; background-color: rgb(67 56 202 / var(--tw-bg-opacity, 1)); } .hover\:bg-orange-600:hover { --tw-bg-opacity: 1; background-color: rgb(234 88 12 / var(--tw-bg-opacity, 1)); } .hover\:bg-pink-100:hover { --tw-bg-opacity: 1; background-color: rgb(252 231 243 / var(--tw-bg-opacity, 1)); } .hover\:bg-pink-50:hover { --tw-bg-opacity: 1; background-color: rgb(253 242 248 / var(--tw-bg-opacity, 1)); } .hover\:bg-purple-100:hover { --tw-bg-opacity: 1; background-color: rgb(243 232 255 / var(--tw-bg-opacity, 1)); } .hover\:bg-purple-700:hover { --tw-bg-opacity: 1; background-color: rgb(126 34 206 / var(--tw-bg-opacity, 1)); } .hover\:bg-red-100:hover { --tw-bg-opacity: 1; background-color: rgb(254 226 226 / var(--tw-bg-opacity, 1)); } .hover\:bg-red-200:hover { --tw-bg-opacity: 1; background-color: rgb(254 202 202 / var(--tw-bg-opacity, 1)); } .hover\:bg-red-50:hover { --tw-bg-opacity: 1; background-color: rgb(254 242 242 / var(--tw-bg-opacity, 1)); } .hover\:bg-red-600:hover { --tw-bg-opacity: 1; background-color: rgb(220 38 38 / var(--tw-bg-opacity, 1)); } .hover\:bg-rose-700:hover { --tw-bg-opacity: 1; background-color: rgb(190 18 60 / var(--tw-bg-opacity, 1)); } .hover\:bg-slate-100:hover { --tw-bg-opacity: 1; background-color: rgb(241 245 249 / var(--tw-bg-opacity, 1)); } .hover\:bg-slate-800:hover { --tw-bg-opacity: 1; background-color: rgb(30 41 59 / var(--tw-bg-opacity, 1)); } .hover\:bg-white:hover { --tw-bg-opacity: 1; background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1)); } .hover\:bg-white\/10:hover { background-color: rgb(255 255 255 / 0.1); } .hover\:bg-white\/20:hover { background-color: rgb(255 255 255 / 0.2); } .hover\:bg-white\/25:hover { background-color: rgb(255 255 255 / 0.25); } .hover\:bg-yellow-100:hover { --tw-bg-opacity: 1; background-color: rgb(254 249 195 / var(--tw-bg-opacity, 1)); } .hover\:bg-yellow-600:hover { --tw-bg-opacity: 1; background-color: rgb(202 138 4 / var(--tw-bg-opacity, 1)); } .hover\:from-amber-600:hover { --tw-gradient-from: #d97706 var(--tw-gradient-from-position); --tw-gradient-to: rgb(217 119 6 / 0) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); } .hover\:to-yellow-600:hover { --tw-gradient-to: #ca8a04 var(--tw-gradient-to-position); } .hover\:text-black:hover { --tw-text-opacity: 1; color: rgb(0 0 0 / var(--tw-text-opacity, 1)); } .hover\:text-blue-300:hover { --tw-text-opacity: 1; color: rgb(147 197 253 / var(--tw-text-opacity, 1)); } .hover\:text-blue-400:hover { --tw-text-opacity: 1; color: rgb(96 165 250 / var(--tw-text-opacity, 1)); } .hover\:text-blue-600:hover { --tw-text-opacity: 1; color: rgb(37 99 235 / var(--tw-text-opacity, 1)); } .hover\:text-blue-700:hover { --tw-text-opacity: 1; color: rgb(29 78 216 / var(--tw-text-opacity, 1)); } .hover\:text-blue-800:hover { --tw-text-opacity: 1; color: rgb(30 64 175 / var(--tw-text-opacity, 1)); } .hover\:text-gray-600:hover { --tw-text-opacity: 1; color: rgb(75 85 99 / var(--tw-text-opacity, 1)); } .hover\:text-gray-700:hover { --tw-text-opacity: 1; color: rgb(55 65 81 / var(--tw-text-opacity, 1)); } .hover\:text-gray-800:hover { --tw-text-opacity: 1; color: rgb(31 41 55 / var(--tw-text-opacity, 1)); } .hover\:text-gray-900:hover { --tw-text-opacity: 1; color: rgb(17 24 39 / var(--tw-text-opacity, 1)); } .hover\:text-green-500:hover { --tw-text-opacity: 1; color: rgb(34 197 94 / var(--tw-text-opacity, 1)); } .hover\:text-green-700:hover { --tw-text-opacity: 1; color: rgb(21 128 61 / var(--tw-text-opacity, 1)); } .hover\:text-indigo-700:hover { --tw-text-opacity: 1; color: rgb(67 56 202 / var(--tw-text-opacity, 1)); } .hover\:text-pink-400:hover { --tw-text-opacity: 1; color: rgb(244 114 182 / var(--tw-text-opacity, 1)); } .hover\:text-pink-500:hover { --tw-text-opacity: 1; color: rgb(236 72 153 / var(--tw-text-opacity, 1)); } .hover\:text-pink-600:hover { --tw-text-opacity: 1; color: rgb(219 39 119 / var(--tw-text-opacity, 1)); } .hover\:text-purple-600:hover { --tw-text-opacity: 1; color: rgb(147 51 234 / var(--tw-text-opacity, 1)); } .hover\:text-purple-700:hover { --tw-text-opacity: 1; color: rgb(126 34 206 / var(--tw-text-opacity, 1)); } .hover\:text-red-400:hover { --tw-text-opacity: 1; color: rgb(248 113 113 / var(--tw-text-opacity, 1)); } .hover\:text-red-500:hover { --tw-text-opacity: 1; color: rgb(239 68 68 / var(--tw-text-opacity, 1)); } .hover\:text-red-600:hover { --tw-text-opacity: 1; color: rgb(220 38 38 / var(--tw-text-opacity, 1)); } .hover\:text-red-700:hover { --tw-text-opacity: 1; color: rgb(185 28 28 / var(--tw-text-opacity, 1)); } .hover\:text-sky-500:hover { --tw-text-opacity: 1; color: rgb(14 165 233 / var(--tw-text-opacity, 1)); } .hover\:text-slate-700:hover { --tw-text-opacity: 1; color: rgb(51 65 85 / var(--tw-text-opacity, 1)); } .hover\:text-white:hover { --tw-text-opacity: 1; color: rgb(255 255 255 / var(--tw-text-opacity, 1)); } .hover\:text-white\/80:hover { color: rgb(255 255 255 / 0.8); } .hover\:underline:hover { text-decoration-line: underline; } .hover\:opacity-90:hover { opacity: 0.9; } .hover\:shadow-lg:hover { --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } .hover\:shadow-md:hover { --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } .hover\:shadow-sm:hover { --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05); --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } .hover\:shadow-xl:hover { --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } .hover\:shadow-blue-500\/25:hover { --tw-shadow-color: rgb(59 130 246 / 0.25); --tw-shadow: var(--tw-shadow-colored); } .focus\:border-blue-500\/50:focus { border-color: rgb(59 130 246 / 0.5); } .focus\:outline-none:focus { outline: 2px solid transparent; outline-offset: 2px; } .focus\:ring-2:focus { --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); } .focus\:ring-blue-300:focus { --tw-ring-opacity: 1; --tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity, 1)); } .focus\:ring-blue-400:focus { --tw-ring-opacity: 1; --tw-ring-color: rgb(96 165 250 / var(--tw-ring-opacity, 1)); } .focus\:ring-blue-500:focus { --tw-ring-opacity: 1; --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1)); } .focus\:ring-emerald-400:focus { --tw-ring-opacity: 1; --tw-ring-color: rgb(52 211 153 / var(--tw-ring-opacity, 1)); } .focus\:ring-rose-400:focus { --tw-ring-opacity: 1; --tw-ring-color: rgb(251 113 133 / var(--tw-ring-opacity, 1)); } .focus\:ring-offset-2:focus { --tw-ring-offset-width: 2px; } .active\:scale-95:active { --tw-scale-x: .95; --tw-scale-y: .95; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .disabled\:cursor-not-allowed:disabled { cursor: not-allowed; } .disabled\:bg-gray-300:disabled { --tw-bg-opacity: 1; background-color: rgb(209 213 219 / var(--tw-bg-opacity, 1)); } .disabled\:bg-gray-50:disabled { --tw-bg-opacity: 1; background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1)); } .disabled\:text-gray-400:disabled { --tw-text-opacity: 1; color: rgb(156 163 175 / var(--tw-text-opacity, 1)); } .disabled\:no-underline:disabled { text-decoration-line: none; } .disabled\:opacity-40:disabled { opacity: 0.4; } .disabled\:opacity-50:disabled { opacity: 0.5; } .disabled\:opacity-60:disabled { opacity: 0.6; } .group:hover .group-hover\:scale-105 { --tw-scale-x: 1.05; --tw-scale-y: 1.05; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .group:hover .group-hover\:scale-110 { --tw-scale-x: 1.1; --tw-scale-y: 1.1; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .group:hover .group-hover\:border-blue-400 { --tw-border-opacity: 1; border-color: rgb(96 165 250 / var(--tw-border-opacity, 1)); } .group:hover .group-hover\:bg-black\/50 { background-color: rgb(0 0 0 / 0.5); } .group:hover .group-hover\:text-blue-600 { --tw-text-opacity: 1; color: rgb(37 99 235 / var(--tw-text-opacity, 1)); } .group:hover .group-hover\:text-orange-600 { --tw-text-opacity: 1; color: rgb(234 88 12 / var(--tw-text-opacity, 1)); } .group:hover .group-hover\:underline { text-decoration-line: underline; } .group:hover .group-hover\:opacity-100 { opacity: 1; } .group:hover .group-hover\:opacity-80 { opacity: 0.8; } .has-\[\:checked\]\:border-blue-500:has(:checked) { --tw-border-opacity: 1; border-color: rgb(59 130 246 / var(--tw-border-opacity, 1)); } .has-\[\:checked\]\:bg-blue-50:has(:checked) { --tw-bg-opacity: 1; background-color: rgb(239 246 255 / var(--tw-bg-opacity, 1)); } @media (min-width: 640px) { .sm\:mb-6 { margin-bottom: 1.5rem; } .sm\:block { display: block; } .sm\:hidden { display: none; } .sm\:h-32 { height: 8rem; } .sm\:w-32 { width: 8rem; } .sm\:w-auto { width: auto; } .sm\:flex-1 { flex: 1 1 0%; } .sm\:grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } .sm\:grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } .sm\:grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); } .sm\:flex-row { flex-direction: row; } .sm\:items-center { align-items: center; } .sm\:gap-3 { gap: 0.75rem; } .sm\:gap-4 { gap: 1rem; } .sm\:space-y-5 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(1.25rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(1.25rem * var(--tw-space-y-reverse)); } .sm\:p-6 { padding: 1.5rem; } .sm\:px-4 { padding-left: 1rem; padding-right: 1rem; } .sm\:px-6 { padding-left: 1.5rem; padding-right: 1.5rem; } .sm\:py-8 { padding-top: 2rem; padding-bottom: 2rem; } .sm\:pb-28 { padding-bottom: 7rem; } .sm\:pt-24 { padding-top: 6rem; } .sm\:text-2xl { font-size: 1.5rem; line-height: 2rem; } .sm\:text-5xl { font-size: 3rem; line-height: 1; } .sm\:text-lg { font-size: 1.125rem; line-height: 1.75rem; } } @media (min-width: 768px) { .md\:flex { display: flex; } .md\:hidden { display: none; } .md\:w-64 { width: 16rem; } .md\:grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } .md\:grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } .md\:grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); } .md\:grid-cols-5 { grid-template-columns: repeat(5, minmax(0, 1fr)); } .md\:flex-row { flex-direction: row; } .md\:p-14 { padding: 3.5rem; } .md\:px-8 { padding-left: 2rem; padding-right: 2rem; } .md\:text-3xl { font-size: 1.875rem; line-height: 2.25rem; } .md\:text-5xl { font-size: 3rem; line-height: 1; } .md\:text-6xl { font-size: 3.75rem; line-height: 1; } } @media (min-width: 1024px) { .lg\:block { display: block; } .lg\:w-64 { width: 16rem; } .lg\:grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } .lg\:grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); } .lg\:grid-cols-6 { grid-template-columns: repeat(6, minmax(0, 1fr)); } .lg\:flex-row { flex-direction: row; } .lg\:gap-8 { gap: 2rem; } .lg\:px-8 { padding-left: 2rem; padding-right: 2rem; } } @media (min-width: 1280px) { .xl\:grid-cols-7 { grid-template-columns: repeat(7, minmax(0, 1fr)); } }  öþÿÿž^@font-face { font-family: 'Showpop'; src: url('/fonts/showpop.woff2') format('woff2'); font-weight: normal; font-style: normal; font-display: swap; } .logo-text { font-family: 'Showpop', sans-serif; letter-spacing: 0.01em; font-weight: normal; } @font-face { font-family: 'UnifixSP'; src: url('/fonts/UnifixSP.woff2') format('woff2'); font-weight: normal; font-style: normal; font-display: swap; } .logo-text-unifix { font-family: 'UnifixSP', sans-serif; letter-spacing: 0.01em; font-weight: normal; } @font-face { font-family: 'MotivationOfHearts'; src: url('/fonts/MotivationOfHearts.woff2') format('woff2'); font-weight: normal; font-style: normal; font-display: swap; } .logo-text-motivation { font-family: 'MotivationOfHearts', sans-serif; letter-spacing: 0.01em; font-weight: normal; } *, ::before, ::after { --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-shadow: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-shadow-colored: 0 0 #0000; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; --tw-contain-size: ; --tw-contain-layout: ; --tw-contain-paint: ; --tw-contain-style: ; } ::backdrop { --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-shadow: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-shadow-colored: 0 0 #0000; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; --tw-contain-size: ; --tw-contain-layout: ; --tw-contain-paint: ; --tw-contain-style: ; } /* ! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com */ /* 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) 2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) */ *, ::before, ::after { box-sizing: border-box; /* 1 */ border-width: 0; /* 2 */ border-style: solid; /* 2 */ border-color: #e5e7eb; /* 2 */ } ::before, ::after { --tw-content: ''; } /* 1. Use a consistent sensible line-height in all browsers. 2. Prevent adjustments of font size after orientation changes in iOS. 3. Use a more readable tab size. 4. Use the user's configured `sans` font-family by default. 5. Use the user's configured `sans` font-feature-settings by default. 6. Use the user's configured `sans` font-variation-settings by default. 7. Disable tap highlights on iOS */ html, :host { line-height: 1.5; /* 1 */ -webkit-text-size-adjust: 100%; /* 2 */ -moz-tab-size: 4; /* 3 */ -o-tab-size: 4; tab-size: 4; /* 3 */ font-family: Inter, system-ui, sans-serif; /* 4 */ font-feature-settings: normal; /* 5 */ font-variation-settings: normal; /* 6 */ -webkit-tap-highlight-color: transparent; /* 7 */ } /* 1. Remove the margin in all browsers. 2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. */ body { margin: 0; /* 1 */ line-height: inherit; /* 2 */ } /* 1. Add the correct height in Firefox. 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) 3. Ensure horizontal rules are visible by default. */ hr { height: 0; /* 1 */ color: inherit; /* 2 */ border-top-width: 1px; /* 3 */ } /* Add the correct text decoration in Chrome, Edge, and Safari. */ abbr:where([title]) { -webkit-text-decoration: underline dotted; text-decoration: underline dotted; } /* Remove the default font size and weight for headings. */ h1, h2, h3, h4, h5, h6 { font-size: inherit; font-weight: inherit; } /* Reset links to optimize for opt-in styling instead of opt-out. */ a { color: inherit; text-decoration: inherit; } /* Add the correct font weight in Edge and Safari. */ b, strong { font-weight: bolder; } /* 1. Use the user's configured `mono` font-family by default. 2. Use the user's configured `mono` font-feature-settings by default. 3. Use the user's configured `mono` font-variation-settings by default. 4. Correct the odd `em` font sizing in all browsers. */ code, kbd, samp, pre { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; /* 1 */ font-feature-settings: normal; /* 2 */ font-variation-settings: normal; /* 3 */ font-size: 1em; /* 4 */ } /* Add the correct font size in all browsers. */ small { font-size: 80%; } /* Prevent `sub` and `sup` elements from affecting the line height in all browsers. */ sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } sub { bottom: -0.25em; } sup { top: -0.5em; } /* 1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) 2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) 3. Remove gaps between table borders by default. */ table { text-indent: 0; /* 1 */ border-color: inherit; /* 2 */ border-collapse: collapse; /* 3 */ } /* 1. Change the font styles in all browsers. 2. Remove the margin in Firefox and Safari. 3. Remove default padding in all browsers. */ button, input, optgroup, select, textarea { font-family: inherit; /* 1 */ font-feature-settings: inherit; /* 1 */ font-variation-settings: inherit; /* 1 */ font-size: 100%; /* 1 */ font-weight: inherit; /* 1 */ line-height: inherit; /* 1 */ letter-spacing: inherit; /* 1 */ color: inherit; /* 1 */ margin: 0; /* 2 */ padding: 0; /* 3 */ } /* Remove the inheritance of text transform in Edge and Firefox. */ button, select { text-transform: none; } /* 1. Correct the inability to style clickable types in iOS and Safari. 2. Remove default button styles. */ button, input:where([type='button']), input:where([type='reset']), input:where([type='submit']) { -webkit-appearance: button; /* 1 */ background-color: transparent; /* 2 */ background-image: none; /* 2 */ } /* Use the modern Firefox focus style for all focusable elements. */ :-moz-focusring { outline: auto; } /* Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) */ :-moz-ui-invalid { box-shadow: none; } /* Add the correct vertical alignment in Chrome and Firefox. */ progress { vertical-align: baseline; } /* Correct the cursor style of increment and decrement buttons in Safari. */ ::-webkit-inner-spin-button, ::-webkit-outer-spin-button { height: auto; } /* 1. Correct the odd appearance in Chrome and Safari. 2. Correct the outline style in Safari. */ [type='search'] { -webkit-appearance: textfield; /* 1 */ outline-offset: -2px; /* 2 */ } /* Remove the inner padding in Chrome and Safari on macOS. */ ::-webkit-search-decoration { -webkit-appearance: none; } /* 1. Correct the inability to style clickable types in iOS and Safari. 2. Change font properties to `inherit` in Safari. */ ::-webkit-file-upload-button { -webkit-appearance: button; /* 1 */ font: inherit; /* 2 */ } /* Add the correct display in Chrome and Safari. */ summary { display: list-item; } /* Removes the default spacing and border for appropriate elements. */ blockquote, dl, dd, h1, h2, h3, h4, h5, h6, hr, figure, p, pre { margin: 0; } fieldset { margin: 0; padding: 0; } legend { padding: 0; } ol, ul, menu { list-style: none; margin: 0; padding: 0; } /* Reset default styling for dialogs. */ dialog { padding: 0; } /* Prevent resizing textareas horizontally by default. */ textarea { resize: vertical; } /* 1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) 2. Set the default placeholder color to the user's configured gray 400 color. */ input::-moz-placeholder, textarea::-moz-placeholder { opacity: 1; /* 1 */ color: #9ca3af; /* 2 */ } input::placeholder, textarea::placeholder { opacity: 1; /* 1 */ color: #9ca3af; /* 2 */ } /* Set the default cursor for buttons. */ button, [role="button"] { cursor: pointer; } /* Make sure disabled buttons don't get the pointer cursor. */ :disabled { cursor: default; } /* 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) This can trigger a poorly considered lint error in some tools but is included by design. */ img, svg, video, canvas, audio, iframe, embed, object { display: block; /* 1 */ vertical-align: middle; /* 2 */ } /* Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) */ img, video { max-width: 100%; height: auto; } /* Make elements with the HTML hidden attribute stay hidden by default */ [hidden]:where(:not([hidden="until-found"])) { display: none; } .container { width: 100%; } @media (min-width: 640px) { .container { max-width: 640px; } } @media (min-width: 768px) { .container { max-width: 768px; } } @media (min-width: 1024px) { .container { max-width: 1024px; } } @media (min-width: 1280px) { .container { max-width: 1280px; } } @media (min-width: 1536px) { .container { max-width: 1536px; } } .pointer-events-none { pointer-events: none; } .visible { visibility: visible; } .static { position: static; } .fixed { position: fixed; } .absolute { position: absolute; } .relative { position: relative; } .sticky { position: sticky; } .-inset-1 { inset: -0.25rem; } .inset-0 { inset: 0px; } .-right-1\.5 { right: -0.375rem; } .-top-1\.5 { top: -0.375rem; } .-top-10 { top: -2.5rem; } .bottom-1 { bottom: 0.25rem; } .bottom-20 { bottom: 5rem; } .bottom-5 { bottom: 1.25rem; } .bottom-6 { bottom: 1.5rem; } .left-0 { left: 0px; } .left-0\.5 { left: 0.125rem; } .left-1\/2 { left: 50%; } .left-1\/4 { left: 25%; } .left-3 { left: 0.75rem; } .left-4 { left: 1rem; } .right-0 { right: 0px; } .right-0\.5 { right: 0.125rem; } .right-1 { right: 0.25rem; } .right-1\/4 { right: 25%; } .right-2 { right: 0.5rem; } .right-3 { right: 0.75rem; } .right-4 { right: 1rem; } .right-5 { right: 1.25rem; } .right-6 { right: 1.5rem; } .top-0 { top: 0px; } .top-0\.5 { top: 0.125rem; } .top-1 { top: 0.25rem; } .top-1\/2 { top: 50%; } .top-2 { top: 0.5rem; } .top-20 { top: 5rem; } .top-24 { top: 6rem; } .top-3 { top: 0.75rem; } .top-4 { top: 1rem; } .top-6 { top: 1.5rem; } .top-full { top: 100%; } .z-10 { z-index: 10; } .z-40 { z-index: 40; } .z-50 { z-index: 50; } .z-\[200\] { z-index: 200; } .z-\[60\] { z-index: 60; } .col-span-2 { grid-column: span 2 / span 2; } .m-0\.5 { margin: 0.125rem; } .mx-0\.5 { margin-left: 0.125rem; margin-right: 0.125rem; } .mx-4 { margin-left: 1rem; margin-right: 1rem; } .mx-5 { margin-left: 1.25rem; margin-right: 1.25rem; } .mx-auto { margin-left: auto; margin-right: auto; } .my-1 { margin-top: 0.25rem; margin-bottom: 0.25rem; } .-mb-px { margin-bottom: -1px; } .-mt-1 { margin-top: -0.25rem; } .-mt-px { margin-top: -1px; } .mb-0 { margin-bottom: 0px; } .mb-0\.5 { margin-bottom: 0.125rem; } .mb-1 { margin-bottom: 0.25rem; } .mb-1\.5 { margin-bottom: 0.375rem; } .mb-10 { margin-bottom: 2.5rem; } .mb-12 { margin-bottom: 3rem; } .mb-14 { margin-bottom: 3.5rem; } .mb-2 { margin-bottom: 0.5rem; } .mb-3 { margin-bottom: 0.75rem; } .mb-4 { margin-bottom: 1rem; } .mb-5 { margin-bottom: 1.25rem; } .mb-6 { margin-bottom: 1.5rem; } .mb-8 { margin-bottom: 2rem; } .ml-1 { margin-left: 0.25rem; } .ml-1\.5 { margin-left: 0.375rem; } .ml-2 { margin-left: 0.5rem; } .ml-3 { margin-left: 0.75rem; } .ml-4 { margin-left: 1rem; } .ml-6 { margin-left: 1.5rem; } .ml-auto { margin-left: auto; } .mr-0\.5 { margin-right: 0.125rem; } .mr-1 { margin-right: 0.25rem; } .mr-2 { margin-right: 0.5rem; } .mt-0\.5 { margin-top: 0.125rem; } .mt-1 { margin-top: 0.25rem; } .mt-1\.5 { margin-top: 0.375rem; } .mt-10 { margin-top: 2.5rem; } .mt-16 { margin-top: 4rem; } .mt-2 { margin-top: 0.5rem; } .mt-3 { margin-top: 0.75rem; } .mt-4 { margin-top: 1rem; } .mt-5 { margin-top: 1.25rem; } .mt-6 { margin-top: 1.5rem; } .mt-8 { margin-top: 2rem; } .mt-auto { margin-top: auto; } .line-clamp-1 { overflow: hidden; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 1; } .line-clamp-2 { overflow: hidden; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; } .block { display: block; } .inline-block { display: inline-block; } .inline { display: inline; } .flex { display: flex; } .inline-flex { display: inline-flex; } .table { display: table; } .grid { display: grid; } .hidden { display: none; } .aspect-square { aspect-ratio: 1 / 1; } .h-0 { height: 0px; } .h-0\.5 { height: 0.125rem; } .h-1 { height: 0.25rem; } .h-1\.5 { height: 0.375rem; } .h-10 { height: 2.5rem; } .h-12 { height: 3rem; } .h-14 { height: 3.5rem; } .h-16 { height: 4rem; } .h-2 { height: 0.5rem; } .h-2\.5 { height: 0.625rem; } .h-20 { height: 5rem; } .h-24 { height: 6rem; } .h-28 { height: 7rem; } .h-3 { height: 0.75rem; } .h-3\.5 { height: 0.875rem; } .h-4 { height: 1rem; } .h-40 { height: 10rem; } .h-5 { height: 1.25rem; } .h-6 { height: 1.5rem; } .h-7 { height: 1.75rem; } .h-8 { height: 2rem; } .h-9 { height: 2.25rem; } .h-\[400px\] { height: 400px; } .h-\[500px\] { height: 500px; } .h-\[calc\(100vh-80px\)\] { height: calc(100vh - 80px); } .h-full { height: 100%; } .h-px { height: 1px; } .max-h-32 { max-height: 8rem; } .max-h-40 { max-height: 10rem; } .max-h-64 { max-height: 16rem; } .max-h-72 { max-height: 18rem; } .max-h-80 { max-height: 20rem; } .max-h-96 { max-height: 24rem; } .max-h-\[60vh\] { max-height: 60vh; } .max-h-\[80vh\] { max-height: 80vh; } .max-h-\[85vh\] { max-height: 85vh; } .max-h-\[90vh\] { max-height: 90vh; } .min-h-0 { min-height: 0px; } .min-h-\[24px\] { min-height: 24px; } .min-h-\[28px\] { min-height: 28px; } .min-h-\[40px\] { min-height: 40px; } .min-h-screen { min-height: 100vh; } .w-0 { width: 0px; } .w-1 { width: 0.25rem; } .w-1\.5 { width: 0.375rem; } .w-1\/2 { width: 50%; } .w-10 { width: 2.5rem; } .w-11 { width: 2.75rem; } .w-12 { width: 3rem; } .w-14 { width: 3.5rem; } .w-16 { width: 4rem; } .w-2 { width: 0.5rem; } .w-2\.5 { width: 0.625rem; } .w-20 { width: 5rem; } .w-24 { width: 6rem; } .w-28 { width: 7rem; } .w-3 { width: 0.75rem; } .w-3\.5 { width: 0.875rem; } .w-4 { width: 1rem; } .w-40 { width: 10rem; } .w-44 { width: 11rem; } .w-5 { width: 1.25rem; } .w-52 { width: 13rem; } .w-56 { width: 14rem; } .w-6 { width: 1.5rem; } .w-7 { width: 1.75rem; } .w-72 { width: 18rem; } .w-8 { width: 2rem; } .w-9 { width: 2.25rem; } .w-\[400px\] { width: 400px; } .w-\[500px\] { width: 500px; } .w-fit { width: -moz-fit-content; width: fit-content; } .w-full { width: 100%; } .w-px { width: 1px; } .min-w-0 { min-width: 0px; } .min-w-32 { min-width: 8rem; } .min-w-72 { min-width: 18rem; } .min-w-\[140px\] { min-width: 140px; } .min-w-\[16px\] { min-width: 16px; } .min-w-\[180px\] { min-width: 180px; } .min-w-\[200px\] { min-width: 200px; } .min-w-\[220px\] { min-width: 220px; } .min-w-\[240px\] { min-width: 240px; } .min-w-fit { min-width: -moz-fit-content; min-width: fit-content; } .max-w-2xl { max-width: 42rem; } .max-w-3xl { max-width: 48rem; } .max-w-4xl { max-width: 56rem; } .max-w-5xl { max-width: 64rem; } .max-w-6xl { max-width: 72rem; } .max-w-7xl { max-width: 80rem; } .max-w-\[100px\] { max-width: 100px; } .max-w-\[70\%\] { max-width: 70%; } .max-w-\[90px\] { max-width: 90px; } .max-w-full { max-width: 100%; } .max-w-lg { max-width: 32rem; } .max-w-md { max-width: 28rem; } .max-w-sm { max-width: 24rem; } .max-w-xl { max-width: 36rem; } .max-w-xs { max-width: 20rem; } .flex-1 { flex: 1 1 0%; } .flex-\[2\] { flex: 2; } .flex-shrink-0 { flex-shrink: 0; } .shrink-0 { flex-shrink: 0; } .grow { flex-grow: 1; } .-translate-x-1\/2 { --tw-translate-x: -50%; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .-translate-x-12 { --tw-translate-x: -3rem; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .-translate-y-1\/2 { --tw-translate-y: -50%; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .translate-x-0 { --tw-translate-x: 0px; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .translate-x-1 { --tw-translate-x: 0.25rem; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .translate-x-12 { --tw-translate-x: 3rem; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .translate-x-3 { --tw-translate-x: 0.75rem; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .translate-x-5 { --tw-translate-x: 1.25rem; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .translate-x-6 { --tw-translate-x: 1.5rem; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .translate-y-0 { --tw-translate-y: 0px; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .translate-y-4 { --tw-translate-y: 1rem; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .rotate-180 { --tw-rotate: 180deg; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .rotate-45 { --tw-rotate: 45deg; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .rotate-90 { --tw-rotate: 90deg; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .scale-105 { --tw-scale-x: 1.05; --tw-scale-y: 1.05; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .transform { transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } @keyframes pulse { 50% { opacity: .5; } } .animate-pulse { animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; } @keyframes spin { to { transform: rotate(360deg); } } .animate-spin { animation: spin 1s linear infinite; } .cursor-default { cursor: default; } .cursor-not-allowed { cursor: not-allowed; } .cursor-pointer { cursor: pointer; } .select-none { -webkit-user-select: none; -moz-user-select: none; user-select: none; } .select-all { -webkit-user-select: all; -moz-user-select: all; user-select: all; } .resize-none { resize: none; } .resize-y { resize: vertical; } .snap-x { scroll-snap-type: x var(--tw-scroll-snap-strictness); } .snap-mandatory { --tw-scroll-snap-strictness: mandatory; } .snap-start { scroll-snap-align: start; } .grid-cols-1 { grid-template-columns: repeat(1, minmax(0, 1fr)); } .grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } .grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } .grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); } .grid-cols-7 { grid-template-columns: repeat(7, minmax(0, 1fr)); } .flex-row-reverse { flex-direction: row-reverse; } .flex-col { flex-direction: column; } .flex-wrap { flex-wrap: wrap; } .items-start { align-items: flex-start; } .items-end { align-items: flex-end; } .items-center { align-items: center; } .justify-end { justify-content: flex-end; } .justify-center { justify-content: center; } .justify-between { justify-content: space-between; } .gap-0 { gap: 0px; } .gap-0\.5 { gap: 0.125rem; } .gap-1 { gap: 0.25rem; } .gap-1\.5 { gap: 0.375rem; } .gap-10 { gap: 2.5rem; } .gap-2 { gap: 0.5rem; } .gap-2\.5 { gap: 0.625rem; } .gap-3 { gap: 0.75rem; } .gap-4 { gap: 1rem; } .gap-5 { gap: 1.25rem; } .gap-6 { gap: 1.5rem; } .gap-8 { gap: 2rem; } .gap-y-3 { row-gap: 0.75rem; } .space-y-0\.5 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(0.125rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(0.125rem * var(--tw-space-y-reverse)); } .space-y-1 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(0.25rem * var(--tw-space-y-reverse)); } .space-y-1\.5 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(0.375rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(0.375rem * var(--tw-space-y-reverse)); } .space-y-16 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(4rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(4rem * var(--tw-space-y-reverse)); } .space-y-2 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(0.5rem * var(--tw-space-y-reverse)); } .space-y-3 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(0.75rem * var(--tw-space-y-reverse)); } .space-y-4 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(1rem * var(--tw-space-y-reverse)); } .space-y-5 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(1.25rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(1.25rem * var(--tw-space-y-reverse)); } .space-y-6 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(1.5rem * var(--tw-space-y-reverse)); } .space-y-8 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(2rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(2rem * var(--tw-space-y-reverse)); } .divide-y > :not([hidden]) ~ :not([hidden]) { --tw-divide-y-reverse: 0; border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse))); border-bottom-width: calc(1px * var(--tw-divide-y-reverse)); } .divide-gray-100 > :not([hidden]) ~ :not([hidden]) { --tw-divide-opacity: 1; border-color: rgb(243 244 246 / var(--tw-divide-opacity, 1)); } .self-end { align-self: flex-end; } .self-center { align-self: center; } .overflow-hidden { overflow: hidden; } .overflow-x-auto { overflow-x: auto; } .overflow-y-auto { overflow-y: auto; } .truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .whitespace-nowrap { white-space: nowrap; } .whitespace-pre-wrap { white-space: pre-wrap; } .rounded { border-radius: 0.25rem; } .rounded-2xl { border-radius: 1rem; } .rounded-\[2\.5rem\] { border-radius: 2.5rem; } .rounded-full { border-radius: 9999px; } .rounded-lg { border-radius: 0.5rem; } .rounded-md { border-radius: 0.375rem; } .rounded-xl { border-radius: 0.75rem; } .rounded-b-xl { border-bottom-right-radius: 0.75rem; border-bottom-left-radius: 0.75rem; } .rounded-t-lg { border-top-left-radius: 0.5rem; border-top-right-radius: 0.5rem; } .rounded-tl-sm { border-top-left-radius: 0.125rem; } .rounded-tr-sm { border-top-right-radius: 0.125rem; } .border { border-width: 1px; } .border-0 { border-width: 0px; } .border-2 { border-width: 2px; } .border-y { border-top-width: 1px; border-bottom-width: 1px; } .border-b { border-bottom-width: 1px; } .border-b-2 { border-bottom-width: 2px; } .border-l-2 { border-left-width: 2px; } .border-r { border-right-width: 1px; } .border-r-2 { border-right-width: 2px; } .border-t { border-top-width: 1px; } .border-t-0 { border-top-width: 0px; } .border-t-4 { border-top-width: 4px; } .border-dashed { border-style: dashed; } .border-amber-100 { --tw-border-opacity: 1; border-color: rgb(254 243 199 / var(--tw-border-opacity, 1)); } .border-amber-200 { --tw-border-opacity: 1; border-color: rgb(253 230 138 / var(--tw-border-opacity, 1)); } .border-amber-300 { --tw-border-opacity: 1; border-color: rgb(252 211 77 / var(--tw-border-opacity, 1)); } .border-amber-500 { --tw-border-opacity: 1; border-color: rgb(245 158 11 / var(--tw-border-opacity, 1)); } .border-blue-100 { --tw-border-opacity: 1; border-color: rgb(219 234 254 / var(--tw-border-opacity, 1)); } .border-blue-200 { --tw-border-opacity: 1; border-color: rgb(191 219 254 / var(--tw-border-opacity, 1)); } .border-blue-300 { --tw-border-opacity: 1; border-color: rgb(147 197 253 / var(--tw-border-opacity, 1)); } .border-blue-400 { --tw-border-opacity: 1; border-color: rgb(96 165 250 / var(--tw-border-opacity, 1)); } .border-blue-50 { --tw-border-opacity: 1; border-color: rgb(239 246 255 / var(--tw-border-opacity, 1)); } .border-blue-500 { --tw-border-opacity: 1; border-color: rgb(59 130 246 / var(--tw-border-opacity, 1)); } .border-blue-500\/10 { border-color: rgb(59 130 246 / 0.1); } .border-blue-500\/20 { border-color: rgb(59 130 246 / 0.2); } .border-blue-600 { --tw-border-opacity: 1; border-color: rgb(37 99 235 / var(--tw-border-opacity, 1)); } .border-emerald-100 { --tw-border-opacity: 1; border-color: rgb(209 250 229 / var(--tw-border-opacity, 1)); } .border-emerald-300 { --tw-border-opacity: 1; border-color: rgb(110 231 183 / var(--tw-border-opacity, 1)); } .border-emerald-400 { --tw-border-opacity: 1; border-color: rgb(52 211 153 / var(--tw-border-opacity, 1)); } .border-emerald-500 { --tw-border-opacity: 1; border-color: rgb(16 185 129 / var(--tw-border-opacity, 1)); } .border-emerald-500\/20 { border-color: rgb(16 185 129 / 0.2); } .border-gray-100 { --tw-border-opacity: 1; border-color: rgb(243 244 246 / var(--tw-border-opacity, 1)); } .border-gray-200 { --tw-border-opacity: 1; border-color: rgb(229 231 235 / var(--tw-border-opacity, 1)); } .border-gray-300 { --tw-border-opacity: 1; border-color: rgb(209 213 219 / var(--tw-border-opacity, 1)); } .border-gray-50 { --tw-border-opacity: 1; border-color: rgb(249 250 251 / var(--tw-border-opacity, 1)); } .border-green-100 { --tw-border-opacity: 1; border-color: rgb(220 252 231 / var(--tw-border-opacity, 1)); } .border-green-200 { --tw-border-opacity: 1; border-color: rgb(187 247 208 / var(--tw-border-opacity, 1)); } .border-indigo-100 { --tw-border-opacity: 1; border-color: rgb(224 231 255 / var(--tw-border-opacity, 1)); } .border-orange-100 { --tw-border-opacity: 1; border-color: rgb(255 237 213 / var(--tw-border-opacity, 1)); } .border-orange-200 { --tw-border-opacity: 1; border-color: rgb(254 215 170 / var(--tw-border-opacity, 1)); } .border-pink-200 { --tw-border-opacity: 1; border-color: rgb(251 207 232 / var(--tw-border-opacity, 1)); } .border-purple-100 { --tw-border-opacity: 1; border-color: rgb(243 232 255 / var(--tw-border-opacity, 1)); } .border-purple-200 { --tw-border-opacity: 1; border-color: rgb(233 213 255 / var(--tw-border-opacity, 1)); } .border-purple-500\/10 { border-color: rgb(168 85 247 / 0.1); } .border-red-100 { --tw-border-opacity: 1; border-color: rgb(254 226 226 / var(--tw-border-opacity, 1)); } .border-red-200 { --tw-border-opacity: 1; border-color: rgb(254 202 202 / var(--tw-border-opacity, 1)); } .border-red-300 { --tw-border-opacity: 1; border-color: rgb(252 165 165 / var(--tw-border-opacity, 1)); } .border-red-400 { --tw-border-opacity: 1; border-color: rgb(248 113 113 / var(--tw-border-opacity, 1)); } .border-rose-100 { --tw-border-opacity: 1; border-color: rgb(255 228 230 / var(--tw-border-opacity, 1)); } .border-rose-300 { --tw-border-opacity: 1; border-color: rgb(253 164 175 / var(--tw-border-opacity, 1)); } .border-rose-500 { --tw-border-opacity: 1; border-color: rgb(244 63 94 / var(--tw-border-opacity, 1)); } .border-sky-100 { --tw-border-opacity: 1; border-color: rgb(224 242 254 / var(--tw-border-opacity, 1)); } .border-slate-100 { --tw-border-opacity: 1; border-color: rgb(241 245 249 / var(--tw-border-opacity, 1)); } .border-slate-200 { --tw-border-opacity: 1; border-color: rgb(226 232 240 / var(--tw-border-opacity, 1)); } .border-teal-100 { --tw-border-opacity: 1; border-color: rgb(204 251 241 / var(--tw-border-opacity, 1)); } .border-transparent { border-color: transparent; } .border-violet-100 { --tw-border-opacity: 1; border-color: rgb(237 233 254 / var(--tw-border-opacity, 1)); } .border-white { --tw-border-opacity: 1; border-color: rgb(255 255 255 / var(--tw-border-opacity, 1)); } .border-white\/10 { border-color: rgb(255 255 255 / 0.1); } .border-white\/20 { border-color: rgb(255 255 255 / 0.2); } .border-white\/30 { border-color: rgb(255 255 255 / 0.3); } .border-white\/40 { border-color: rgb(255 255 255 / 0.4); } .border-yellow-200 { --tw-border-opacity: 1; border-color: rgb(254 240 138 / var(--tw-border-opacity, 1)); } .border-l-blue-500 { --tw-border-opacity: 1; border-left-color: rgb(59 130 246 / var(--tw-border-opacity, 1)); } .border-t-blue-500 { --tw-border-opacity: 1; border-top-color: rgb(59 130 246 / var(--tw-border-opacity, 1)); } .border-t-transparent { border-top-color: transparent; } .border-t-white { --tw-border-opacity: 1; border-top-color: rgb(255 255 255 / var(--tw-border-opacity, 1)); } .bg-\[\#003087\] { --tw-bg-opacity: 1; background-color: rgb(0 48 135 / var(--tw-bg-opacity, 1)); } .bg-amber-100 { --tw-bg-opacity: 1; background-color: rgb(254 243 199 / var(--tw-bg-opacity, 1)); } .bg-amber-400 { --tw-bg-opacity: 1; background-color: rgb(251 191 36 / var(--tw-bg-opacity, 1)); } .bg-amber-50 { --tw-bg-opacity: 1; background-color: rgb(255 251 235 / var(--tw-bg-opacity, 1)); } .bg-amber-500 { --tw-bg-opacity: 1; background-color: rgb(245 158 11 / var(--tw-bg-opacity, 1)); } .bg-amber-500\/10 { background-color: rgb(245 158 11 / 0.1); } .bg-black\/0 { background-color: rgb(0 0 0 / 0); } .bg-black\/40 { background-color: rgb(0 0 0 / 0.4); } .bg-black\/50 { background-color: rgb(0 0 0 / 0.5); } .bg-black\/60 { background-color: rgb(0 0 0 / 0.6); } .bg-black\/70 { background-color: rgb(0 0 0 / 0.7); } .bg-black\/80 { background-color: rgb(0 0 0 / 0.8); } .bg-black\/85 { background-color: rgb(0 0 0 / 0.85); } .bg-black\/90 { background-color: rgb(0 0 0 / 0.9); } .bg-blue-100 { --tw-bg-opacity: 1; background-color: rgb(219 234 254 / var(--tw-bg-opacity, 1)); } .bg-blue-50 { --tw-bg-opacity: 1; background-color: rgb(239 246 255 / var(--tw-bg-opacity, 1)); } .bg-blue-50\/30 { background-color: rgb(239 246 255 / 0.3); } .bg-blue-50\/60 { background-color: rgb(239 246 255 / 0.6); } .bg-blue-500 { --tw-bg-opacity: 1; background-color: rgb(59 130 246 / var(--tw-bg-opacity, 1)); } .bg-blue-500\/10 { background-color: rgb(59 130 246 / 0.1); } .bg-blue-600 { --tw-bg-opacity: 1; background-color: rgb(37 99 235 / var(--tw-bg-opacity, 1)); } .bg-blue-600\/10 { background-color: rgb(37 99 235 / 0.1); } .bg-emerald-100 { --tw-bg-opacity: 1; background-color: rgb(209 250 229 / var(--tw-bg-opacity, 1)); } .bg-emerald-200 { --tw-bg-opacity: 1; background-color: rgb(167 243 208 / var(--tw-bg-opacity, 1)); } .bg-emerald-400 { --tw-bg-opacity: 1; background-color: rgb(52 211 153 / var(--tw-bg-opacity, 1)); } .bg-emerald-50 { --tw-bg-opacity: 1; background-color: rgb(236 253 245 / var(--tw-bg-opacity, 1)); } .bg-emerald-500 { --tw-bg-opacity: 1; background-color: rgb(16 185 129 / var(--tw-bg-opacity, 1)); } .bg-emerald-500\/10 { background-color: rgb(16 185 129 / 0.1); } .bg-emerald-500\/20 { background-color: rgb(16 185 129 / 0.2); } .bg-emerald-600 { --tw-bg-opacity: 1; background-color: rgb(5 150 105 / var(--tw-bg-opacity, 1)); } .bg-gray-100 { --tw-bg-opacity: 1; background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1)); } .bg-gray-200 { --tw-bg-opacity: 1; background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1)); } .bg-gray-300 { --tw-bg-opacity: 1; background-color: rgb(209 213 219 / var(--tw-bg-opacity, 1)); } .bg-gray-400 { --tw-bg-opacity: 1; background-color: rgb(156 163 175 / var(--tw-bg-opacity, 1)); } .bg-gray-50 { --tw-bg-opacity: 1; background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1)); } .bg-gray-600 { --tw-bg-opacity: 1; background-color: rgb(75 85 99 / var(--tw-bg-opacity, 1)); } .bg-gray-900 { --tw-bg-opacity: 1; background-color: rgb(17 24 39 / var(--tw-bg-opacity, 1)); } .bg-green-100 { --tw-bg-opacity: 1; background-color: rgb(220 252 231 / var(--tw-bg-opacity, 1)); } .bg-green-400 { --tw-bg-opacity: 1; background-color: rgb(74 222 128 / var(--tw-bg-opacity, 1)); } .bg-green-50 { --tw-bg-opacity: 1; background-color: rgb(240 253 244 / var(--tw-bg-opacity, 1)); } .bg-green-500 { --tw-bg-opacity: 1; background-color: rgb(34 197 94 / var(--tw-bg-opacity, 1)); } .bg-green-600 { --tw-bg-opacity: 1; background-color: rgb(22 163 74 / var(--tw-bg-opacity, 1)); } .bg-indigo-100 { --tw-bg-opacity: 1; background-color: rgb(224 231 255 / var(--tw-bg-opacity, 1)); } .bg-indigo-50 { --tw-bg-opacity: 1; background-color: rgb(238 242 255 / var(--tw-bg-opacity, 1)); } .bg-indigo-600 { --tw-bg-opacity: 1; background-color: rgb(79 70 229 / var(--tw-bg-opacity, 1)); } .bg-orange-100 { --tw-bg-opacity: 1; background-color: rgb(255 237 213 / var(--tw-bg-opacity, 1)); } .bg-orange-50 { --tw-bg-opacity: 1; background-color: rgb(255 247 237 / var(--tw-bg-opacity, 1)); } .bg-orange-500 { --tw-bg-opacity: 1; background-color: rgb(249 115 22 / var(--tw-bg-opacity, 1)); } .bg-pink-50 { --tw-bg-opacity: 1; background-color: rgb(253 242 248 / var(--tw-bg-opacity, 1)); } .bg-purple-100 { --tw-bg-opacity: 1; background-color: rgb(243 232 255 / var(--tw-bg-opacity, 1)); } .bg-purple-400 { --tw-bg-opacity: 1; background-color: rgb(192 132 252 / var(--tw-bg-opacity, 1)); } .bg-purple-50 { --tw-bg-opacity: 1; background-color: rgb(250 245 255 / var(--tw-bg-opacity, 1)); } .bg-purple-500\/10 { background-color: rgb(168 85 247 / 0.1); } .bg-purple-600 { --tw-bg-opacity: 1; background-color: rgb(147 51 234 / var(--tw-bg-opacity, 1)); } .bg-red-100 { --tw-bg-opacity: 1; background-color: rgb(254 226 226 / var(--tw-bg-opacity, 1)); } .bg-red-200 { --tw-bg-opacity: 1; background-color: rgb(254 202 202 / var(--tw-bg-opacity, 1)); } .bg-red-400 { --tw-bg-opacity: 1; background-color: rgb(248 113 113 / var(--tw-bg-opacity, 1)); } .bg-red-50 { --tw-bg-opacity: 1; background-color: rgb(254 242 242 / var(--tw-bg-opacity, 1)); } .bg-red-500 { --tw-bg-opacity: 1; background-color: rgb(239 68 68 / var(--tw-bg-opacity, 1)); } .bg-rose-50 { --tw-bg-opacity: 1; background-color: rgb(255 241 242 / var(--tw-bg-opacity, 1)); } .bg-rose-600 { --tw-bg-opacity: 1; background-color: rgb(225 29 72 / var(--tw-bg-opacity, 1)); } .bg-sky-50 { --tw-bg-opacity: 1; background-color: rgb(240 249 255 / var(--tw-bg-opacity, 1)); } .bg-sky-500 { --tw-bg-opacity: 1; background-color: rgb(14 165 233 / var(--tw-bg-opacity, 1)); } .bg-slate-100 { --tw-bg-opacity: 1; background-color: rgb(241 245 249 / var(--tw-bg-opacity, 1)); } .bg-slate-900 { --tw-bg-opacity: 1; background-color: rgb(15 23 42 / var(--tw-bg-opacity, 1)); } .bg-teal-50 { --tw-bg-opacity: 1; background-color: rgb(240 253 250 / var(--tw-bg-opacity, 1)); } .bg-violet-50 { --tw-bg-opacity: 1; background-color: rgb(245 243 255 / var(--tw-bg-opacity, 1)); } .bg-violet-500 { --tw-bg-opacity: 1; background-color: rgb(139 92 246 / var(--tw-bg-opacity, 1)); } .bg-white { --tw-bg-opacity: 1; background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1)); } .bg-white\/10 { background-color: rgb(255 255 255 / 0.1); } .bg-white\/15 { background-color: rgb(255 255 255 / 0.15); } .bg-white\/20 { background-color: rgb(255 255 255 / 0.2); } .bg-white\/60 { background-color: rgb(255 255 255 / 0.6); } .bg-white\/80 { background-color: rgb(255 255 255 / 0.8); } .bg-white\/90 { background-color: rgb(255 255 255 / 0.9); } .bg-yellow-100 { --tw-bg-opacity: 1; background-color: rgb(254 249 195 / var(--tw-bg-opacity, 1)); } .bg-yellow-400 { --tw-bg-opacity: 1; background-color: rgb(250 204 21 / var(--tw-bg-opacity, 1)); } .bg-yellow-50 { --tw-bg-opacity: 1; background-color: rgb(254 252 232 / var(--tw-bg-opacity, 1)); } .bg-yellow-500 { --tw-bg-opacity: 1; background-color: rgb(234 179 8 / var(--tw-bg-opacity, 1)); } .bg-gradient-to-br { background-image: linear-gradient(to bottom right, var(--tw-gradient-stops)); } .bg-gradient-to-r { background-image: linear-gradient(to right, var(--tw-gradient-stops)); } .bg-gradient-to-t { background-image: linear-gradient(to top, var(--tw-gradient-stops)); } .from-amber-400 { --tw-gradient-from: #fbbf24 var(--tw-gradient-from-position); --tw-gradient-to: rgb(251 191 36 / 0) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); } .from-amber-50 { --tw-gradient-from: #fffbeb var(--tw-gradient-from-position); --tw-gradient-to: rgb(255 251 235 / 0) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); } .from-amber-500 { --tw-gradient-from: #f59e0b var(--tw-gradient-from-position); --tw-gradient-to: rgb(245 158 11 / 0) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); } .from-black\/60 { --tw-gradient-from: rgb(0 0 0 / 0.6) var(--tw-gradient-from-position); --tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); } .from-blue-500 { --tw-gradient-from: #3b82f6 var(--tw-gradient-from-position); --tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); } .from-blue-700 { --tw-gradient-from: #1d4ed8 var(--tw-gradient-from-position); --tw-gradient-to: rgb(29 78 216 / 0) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); } .from-indigo-100 { --tw-gradient-from: #e0e7ff var(--tw-gradient-from-position); --tw-gradient-to: rgb(224 231 255 / 0) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); } .from-orange-400 { --tw-gradient-from: #fb923c var(--tw-gradient-from-position); --tw-gradient-to: rgb(251 146 60 / 0) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); } .via-transparent { --tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), transparent var(--tw-gradient-via-position), var(--tw-gradient-to); } .via-yellow-400 { --tw-gradient-to: rgb(250 204 21 / 0) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), #facc15 var(--tw-gradient-via-position), var(--tw-gradient-to); } .to-amber-400 { --tw-gradient-to: #fbbf24 var(--tw-gradient-to-position); } .to-amber-50 { --tw-gradient-to: #fffbeb var(--tw-gradient-to-position); } .to-blue-500 { --tw-gradient-to: #3b82f6 var(--tw-gradient-to-position); } .to-orange-400 { --tw-gradient-to: #fb923c var(--tw-gradient-to-position); } .to-purple-500 { --tw-gradient-to: #a855f7 var(--tw-gradient-to-position); } .to-transparent { --tw-gradient-to: transparent var(--tw-gradient-to-position); } .to-yellow-50 { --tw-gradient-to: #fefce8 var(--tw-gradient-to-position); } .to-yellow-500 { --tw-gradient-to: #eab308 var(--tw-gradient-to-position); } .bg-clip-text { -webkit-background-clip: text; background-clip: text; } .fill-gray-900 { fill: #111827; } .object-contain { -o-object-fit: contain; object-fit: contain; } .object-cover { -o-object-fit: cover; object-fit: cover; } .p-0 { padding: 0px; } .p-1 { padding: 0.25rem; } .p-10 { padding: 2.5rem; } .p-2 { padding: 0.5rem; } .p-2\.5 { padding: 0.625rem; } .p-3 { padding: 0.75rem; } .p-4 { padding: 1rem; } .p-5 { padding: 1.25rem; } .p-6 { padding: 1.5rem; } .p-8 { padding: 2rem; } .px-0\.5 { padding-left: 0.125rem; padding-right: 0.125rem; } .px-1 { padding-left: 0.25rem; padding-right: 0.25rem; } .px-1\.5 { padding-left: 0.375rem; padding-right: 0.375rem; } .px-2 { padding-left: 0.5rem; padding-right: 0.5rem; } .px-2\.5 { padding-left: 0.625rem; padding-right: 0.625rem; } .px-3 { padding-left: 0.75rem; padding-right: 0.75rem; } .px-3\.5 { padding-left: 0.875rem; padding-right: 0.875rem; } .px-4 { padding-left: 1rem; padding-right: 1rem; } .px-5 { padding-left: 1.25rem; padding-right: 1.25rem; } .px-6 { padding-left: 1.5rem; padding-right: 1.5rem; } .px-7 { padding-left: 1.75rem; padding-right: 1.75rem; } .px-8 { padding-left: 2rem; padding-right: 2rem; } .py-0\.5 { padding-top: 0.125rem; padding-bottom: 0.125rem; } .py-1 { padding-top: 0.25rem; padding-bottom: 0.25rem; } .py-1\.5 { padding-top: 0.375rem; padding-bottom: 0.375rem; } .py-10 { padding-top: 2.5rem; padding-bottom: 2.5rem; } .py-12 { padding-top: 3rem; padding-bottom: 3rem; } .py-14 { padding-top: 3.5rem; padding-bottom: 3.5rem; } .py-16 { padding-top: 4rem; padding-bottom: 4rem; } .py-2 { padding-top: 0.5rem; padding-bottom: 0.5rem; } .py-2\.5 { padding-top: 0.625rem; padding-bottom: 0.625rem; } .py-20 { padding-top: 5rem; padding-bottom: 5rem; } .py-24 { padding-top: 6rem; padding-bottom: 6rem; } .py-3 { padding-top: 0.75rem; padding-bottom: 0.75rem; } .py-3\.5 { padding-top: 0.875rem; padding-bottom: 0.875rem; } .py-4 { padding-top: 1rem; padding-bottom: 1rem; } .py-5 { padding-top: 1.25rem; padding-bottom: 1.25rem; } .py-6 { padding-top: 1.5rem; padding-bottom: 1.5rem; } .py-8 { padding-top: 2rem; padding-bottom: 2rem; } .pb-0\.5 { padding-bottom: 0.125rem; } .pb-1 { padding-bottom: 0.25rem; } .pb-2 { padding-bottom: 0.5rem; } .pb-20 { padding-bottom: 5rem; } .pb-4 { padding-bottom: 1rem; } .pb-5 { padding-bottom: 1.25rem; } .pl-10 { padding-left: 2.5rem; } .pl-12 { padding-left: 3rem; } .pl-5 { padding-left: 1.25rem; } .pl-7 { padding-left: 1.75rem; } .pl-8 { padding-left: 2rem; } .pr-14 { padding-right: 3.5rem; } .pr-2 { padding-right: 0.5rem; } .pr-24 { padding-right: 6rem; } .pr-3 { padding-right: 0.75rem; } .pr-4 { padding-right: 1rem; } .pt-1 { padding-top: 0.25rem; } .pt-10 { padding-top: 2.5rem; } .pt-16 { padding-top: 4rem; } .pt-2 { padding-top: 0.5rem; } .pt-3 { padding-top: 0.75rem; } .pt-4 { padding-top: 1rem; } .pt-6 { padding-top: 1.5rem; } .pt-8 { padding-top: 2rem; } .text-left { text-align: left; } .text-center { text-align: center; } .text-right { text-align: right; } .align-top { vertical-align: top; } .font-mono { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; } .text-2xl { font-size: 1.5rem; line-height: 2rem; } .text-3xl { font-size: 1.875rem; line-height: 2.25rem; } .text-4xl { font-size: 2.25rem; line-height: 2.5rem; } .text-5xl { font-size: 3rem; line-height: 1; } .text-8xl { font-size: 6rem; line-height: 1; } .text-\[10px\] { font-size: 10px; } .text-\[11px\] { font-size: 11px; } .text-\[8px\] { font-size: 8px; } .text-\[9px\] { font-size: 9px; } .text-base { font-size: 1rem; line-height: 1.5rem; } .text-lg { font-size: 1.125rem; line-height: 1.75rem; } .text-sm { font-size: 0.875rem; line-height: 1.25rem; } .text-xl { font-size: 1.25rem; line-height: 1.75rem; } .text-xs { font-size: 0.75rem; line-height: 1rem; } .font-bold { font-weight: 700; } .font-extrabold { font-weight: 800; } .font-medium { font-weight: 500; } .font-normal { font-weight: 400; } .font-semibold { font-weight: 600; } .uppercase { text-transform: uppercase; } .italic { font-style: italic; } .leading-none { line-height: 1; } .leading-relaxed { line-height: 1.625; } .leading-snug { line-height: 1.375; } .leading-tight { line-height: 1.25; } .tracking-tight { letter-spacing: -0.025em; } .tracking-wide { letter-spacing: 0.025em; } .tracking-wider { letter-spacing: 0.05em; } .text-amber-400 { --tw-text-opacity: 1; color: rgb(251 191 36 / var(--tw-text-opacity, 1)); } .text-amber-500 { --tw-text-opacity: 1; color: rgb(245 158 11 / var(--tw-text-opacity, 1)); } .text-amber-600 { --tw-text-opacity: 1; color: rgb(217 119 6 / var(--tw-text-opacity, 1)); } .text-amber-700 { --tw-text-opacity: 1; color: rgb(180 83 9 / var(--tw-text-opacity, 1)); } .text-amber-800 { --tw-text-opacity: 1; color: rgb(146 64 14 / var(--tw-text-opacity, 1)); } .text-amber-900 { --tw-text-opacity: 1; color: rgb(120 53 15 / var(--tw-text-opacity, 1)); } .text-blue-100 { --tw-text-opacity: 1; color: rgb(219 234 254 / var(--tw-text-opacity, 1)); } .text-blue-300 { --tw-text-opacity: 1; color: rgb(147 197 253 / var(--tw-text-opacity, 1)); } .text-blue-400 { --tw-text-opacity: 1; color: rgb(96 165 250 / var(--tw-text-opacity, 1)); } .text-blue-500 { --tw-text-opacity: 1; color: rgb(59 130 246 / var(--tw-text-opacity, 1)); } .text-blue-600 { --tw-text-opacity: 1; color: rgb(37 99 235 / var(--tw-text-opacity, 1)); } .text-blue-700 { --tw-text-opacity: 1; color: rgb(29 78 216 / var(--tw-text-opacity, 1)); } .text-blue-800 { --tw-text-opacity: 1; color: rgb(30 64 175 / var(--tw-text-opacity, 1)); } .text-blue-900 { --tw-text-opacity: 1; color: rgb(30 58 138 / var(--tw-text-opacity, 1)); } .text-emerald-400 { --tw-text-opacity: 1; color: rgb(52 211 153 / var(--tw-text-opacity, 1)); } .text-emerald-500 { --tw-text-opacity: 1; color: rgb(16 185 129 / var(--tw-text-opacity, 1)); } .text-emerald-600 { --tw-text-opacity: 1; color: rgb(5 150 105 / var(--tw-text-opacity, 1)); } .text-emerald-700 { --tw-text-opacity: 1; color: rgb(4 120 87 / var(--tw-text-opacity, 1)); } .text-emerald-800 { --tw-text-opacity: 1; color: rgb(6 95 70 / var(--tw-text-opacity, 1)); } .text-emerald-900 { --tw-text-opacity: 1; color: rgb(6 78 59 / var(--tw-text-opacity, 1)); } .text-gray-200 { --tw-text-opacity: 1; color: rgb(229 231 235 / var(--tw-text-opacity, 1)); } .text-gray-300 { --tw-text-opacity: 1; color: rgb(209 213 219 / var(--tw-text-opacity, 1)); } .text-gray-400 { --tw-text-opacity: 1; color: rgb(156 163 175 / var(--tw-text-opacity, 1)); } .text-gray-500 { --tw-text-opacity: 1; color: rgb(107 114 128 / var(--tw-text-opacity, 1)); } .text-gray-600 { --tw-text-opacity: 1; color: rgb(75 85 99 / var(--tw-text-opacity, 1)); } .text-gray-700 { --tw-text-opacity: 1; color: rgb(55 65 81 / var(--tw-text-opacity, 1)); } .text-gray-800 { --tw-text-opacity: 1; color: rgb(31 41 55 / var(--tw-text-opacity, 1)); } .text-gray-900 { --tw-text-opacity: 1; color: rgb(17 24 39 / var(--tw-text-opacity, 1)); } .text-green-400 { --tw-text-opacity: 1; color: rgb(74 222 128 / var(--tw-text-opacity, 1)); } .text-green-500 { --tw-text-opacity: 1; color: rgb(34 197 94 / var(--tw-text-opacity, 1)); } .text-green-600 { --tw-text-opacity: 1; color: rgb(22 163 74 / var(--tw-text-opacity, 1)); } .text-green-700 { --tw-text-opacity: 1; color: rgb(21 128 61 / var(--tw-text-opacity, 1)); } .text-green-800 { --tw-text-opacity: 1; color: rgb(22 101 52 / var(--tw-text-opacity, 1)); } .text-indigo-500 { --tw-text-opacity: 1; color: rgb(99 102 241 / var(--tw-text-opacity, 1)); } .text-indigo-600 { --tw-text-opacity: 1; color: rgb(79 70 229 / var(--tw-text-opacity, 1)); } .text-indigo-700 { --tw-text-opacity: 1; color: rgb(67 56 202 / var(--tw-text-opacity, 1)); } .text-orange-400 { --tw-text-opacity: 1; color: rgb(251 146 60 / var(--tw-text-opacity, 1)); } .text-orange-500 { --tw-text-opacity: 1; color: rgb(249 115 22 / var(--tw-text-opacity, 1)); } .text-orange-600 { --tw-text-opacity: 1; color: rgb(234 88 12 / var(--tw-text-opacity, 1)); } .text-orange-700 { --tw-text-opacity: 1; color: rgb(194 65 12 / var(--tw-text-opacity, 1)); } .text-orange-800 { --tw-text-opacity: 1; color: rgb(154 52 18 / var(--tw-text-opacity, 1)); } .text-pink-400 { --tw-text-opacity: 1; color: rgb(244 114 182 / var(--tw-text-opacity, 1)); } .text-pink-500 { --tw-text-opacity: 1; color: rgb(236 72 153 / var(--tw-text-opacity, 1)); } .text-pink-600 { --tw-text-opacity: 1; color: rgb(219 39 119 / var(--tw-text-opacity, 1)); } .text-purple-400 { --tw-text-opacity: 1; color: rgb(192 132 252 / var(--tw-text-opacity, 1)); } .text-purple-500 { --tw-text-opacity: 1; color: rgb(168 85 247 / var(--tw-text-opacity, 1)); } .text-purple-600 { --tw-text-opacity: 1; color: rgb(147 51 234 / var(--tw-text-opacity, 1)); } .text-purple-700 { --tw-text-opacity: 1; color: rgb(126 34 206 / var(--tw-text-opacity, 1)); } .text-red-400 { --tw-text-opacity: 1; color: rgb(248 113 113 / var(--tw-text-opacity, 1)); } .text-red-500 { --tw-text-opacity: 1; color: rgb(239 68 68 / var(--tw-text-opacity, 1)); } .text-red-600 { --tw-text-opacity: 1; color: rgb(220 38 38 / var(--tw-text-opacity, 1)); } .text-red-700 { --tw-text-opacity: 1; color: rgb(185 28 28 / var(--tw-text-opacity, 1)); } .text-rose-700 { --tw-text-opacity: 1; color: rgb(190 18 60 / var(--tw-text-opacity, 1)); } .text-rose-800 { --tw-text-opacity: 1; color: rgb(159 18 57 / var(--tw-text-opacity, 1)); } .text-rose-900 { --tw-text-opacity: 1; color: rgb(136 19 55 / var(--tw-text-opacity, 1)); } .text-sky-600 { --tw-text-opacity: 1; color: rgb(2 132 199 / var(--tw-text-opacity, 1)); } .text-sky-700 { --tw-text-opacity: 1; color: rgb(3 105 161 / var(--tw-text-opacity, 1)); } .text-slate-300 { --tw-text-opacity: 1; color: rgb(203 213 225 / var(--tw-text-opacity, 1)); } .text-slate-400 { --tw-text-opacity: 1; color: rgb(148 163 184 / var(--tw-text-opacity, 1)); } .text-slate-500 { --tw-text-opacity: 1; color: rgb(100 116 139 / var(--tw-text-opacity, 1)); } .text-slate-600 { --tw-text-opacity: 1; color: rgb(71 85 105 / var(--tw-text-opacity, 1)); } .text-slate-700 { --tw-text-opacity: 1; color: rgb(51 65 85 / var(--tw-text-opacity, 1)); } .text-slate-900 { --tw-text-opacity: 1; color: rgb(15 23 42 / var(--tw-text-opacity, 1)); } .text-teal-700 { --tw-text-opacity: 1; color: rgb(15 118 110 / var(--tw-text-opacity, 1)); } .text-transparent { color: transparent; } .text-violet-600 { --tw-text-opacity: 1; color: rgb(124 58 237 / var(--tw-text-opacity, 1)); } .text-violet-700 { --tw-text-opacity: 1; color: rgb(109 40 217 / var(--tw-text-opacity, 1)); } .text-white { --tw-text-opacity: 1; color: rgb(255 255 255 / var(--tw-text-opacity, 1)); } .text-white\/50 { color: rgb(255 255 255 / 0.5); } .text-white\/60 { color: rgb(255 255 255 / 0.6); } .text-white\/70 { color: rgb(255 255 255 / 0.7); } .text-white\/80 { color: rgb(255 255 255 / 0.8); } .text-white\/90 { color: rgb(255 255 255 / 0.9); } .text-yellow-300 { --tw-text-opacity: 1; color: rgb(253 224 71 / var(--tw-text-opacity, 1)); } .text-yellow-400 { --tw-text-opacity: 1; color: rgb(250 204 21 / var(--tw-text-opacity, 1)); } .text-yellow-500 { --tw-text-opacity: 1; color: rgb(234 179 8 / var(--tw-text-opacity, 1)); } .text-yellow-600 { --tw-text-opacity: 1; color: rgb(202 138 4 / var(--tw-text-opacity, 1)); } .text-yellow-700 { --tw-text-opacity: 1; color: rgb(161 98 7 / var(--tw-text-opacity, 1)); } .text-yellow-800 { --tw-text-opacity: 1; color: rgb(133 77 14 / var(--tw-text-opacity, 1)); } .underline { text-decoration-line: underline; } .line-through { text-decoration-line: line-through; } .opacity-0 { opacity: 0; } .opacity-100 { opacity: 1; } .opacity-25 { opacity: 0.25; } .opacity-40 { opacity: 0.4; } .opacity-50 { opacity: 0.5; } .opacity-60 { opacity: 0.6; } .opacity-70 { opacity: 0.7; } .opacity-75 { opacity: 0.75; } .shadow { --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } .shadow-2xl { --tw-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25); --tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } .shadow-lg { --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } .shadow-md { --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } .shadow-sm { --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05); --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } .shadow-xl { --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } .shadow-amber-100 { --tw-shadow-color: #fef3c7; --tw-shadow: var(--tw-shadow-colored); } .shadow-amber-300\/50 { --tw-shadow-color: rgb(252 211 77 / 0.5); --tw-shadow: var(--tw-shadow-colored); } .shadow-amber-500\/25 { --tw-shadow-color: rgb(245 158 11 / 0.25); --tw-shadow: var(--tw-shadow-colored); } .\!ring-2 { --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important; --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important; box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000) !important; } .ring-2 { --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); } .ring-4 { --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color); box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); } .\!ring-blue-500 { --tw-ring-opacity: 1 !important; --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1)) !important; } .ring-blue-200 { --tw-ring-opacity: 1; --tw-ring-color: rgb(191 219 254 / var(--tw-ring-opacity, 1)); } .ring-blue-400 { --tw-ring-opacity: 1; --tw-ring-color: rgb(96 165 250 / var(--tw-ring-opacity, 1)); } .ring-blue-500 { --tw-ring-opacity: 1; --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1)); } .\!ring-offset-1 { --tw-ring-offset-width: 1px !important; } .ring-offset-1 { --tw-ring-offset-width: 1px; } .ring-offset-2 { --tw-ring-offset-width: 2px; } .blur { --tw-blur: blur(8px); filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); } .blur-\[100px\] { --tw-blur: blur(100px); filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); } .blur-\[120px\] { --tw-blur: blur(120px); filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); } .drop-shadow { --tw-drop-shadow: drop-shadow(0 1px 2px rgb(0 0 0 / 0.1)) drop-shadow(0 1px 1px rgb(0 0 0 / 0.06)); filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); } .drop-shadow-lg { --tw-drop-shadow: drop-shadow(0 10px 8px rgb(0 0 0 / 0.04)) drop-shadow(0 4px 3px rgb(0 0 0 / 0.1)); filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); } .filter { filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); } .backdrop-blur { --tw-backdrop-blur: blur(8px); backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); } .backdrop-blur-md { --tw-backdrop-blur: blur(12px); backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); } .backdrop-blur-sm { --tw-backdrop-blur: blur(4px); backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); } .backdrop-blur-xl { --tw-backdrop-blur: blur(24px); backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); } .transition { transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } .transition-all { transition-property: all; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } .transition-colors { transition-property: color, background-color, border-color, text-decoration-color, fill, stroke; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } .transition-opacity { transition-property: opacity; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } .transition-transform { transition-property: transform; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } .duration-200 { transition-duration: 200ms; } .duration-300 { transition-duration: 300ms; } .duration-500 { transition-duration: 500ms; } .ease-in-out { transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); } :root { --blue-main: #2563eb; --blue-light: #60a5fa; --blue-dark: #1e40af; --orange-main: #f59e0b; --orange-light: #fbbf24; --orange-dark: #b45309; --glass-bg: rgba(255,255,255,0.65); --glass-blur: 18px; } body { background: linear-gradient(135deg, var(--blue-main) 0%, var(--blue-light) 60%, var(--orange-light) 100%); color: #18181b; font-family: 'Inter', 'Segoe UI', Arial, sans-serif; min-height: 100vh; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } /* Section highlight styles */ /* Glassmorphism section style */ .section-contrast { background: var(--glass-bg); border-radius: 2.5rem; box-shadow: 0 8px 40px 0 rgba(37,99,235,0.10), 0 1.5px 8px 0 rgba(245,158,11,0.08); border: 1.5px solid rgba(96,165,250,0.13); margin-bottom: 3.5rem; padding: 3rem 1.5rem; backdrop-filter: blur(var(--glass-blur)); -webkit-backdrop-filter: blur(var(--glass-blur)); transition: box-shadow 0.3s, background 0.3s; } .section-contrast:before { display: none; } @media (min-width: 640px) { .section-contrast { padding: 4rem 2.5rem; margin-left: 1.5rem; margin-right: 1.5rem; } } @media (min-width: 1024px) { .section-contrast { margin-left: 2.5rem; margin-right: 2.5rem; } } /* Accent button */ .btn-accent { display: inline-flex; align-items: center; justify-content: center; background: var(--blue-main); color: #fff; font-weight: 700; border-radius: 1.2em; box-shadow: 0 4px 24px 0 rgba(37,99,235,0.13); padding: 0.9em 2.2em; font-size: 1.25rem; letter-spacing: 0.01em; transition: background 0.2s, box-shadow 0.2s, transform 0.15s; border: none; cursor: pointer; } .btn-accent:hover { background: var(--blue-dark); box-shadow: 0 8px 32px 0 rgba(245,158,11,0.13); transform: translateY(-2px) scale(1.03); } /* Outline button — same shape as btn-accent, white background */ .btn-outline { display: inline-flex; align-items: center; justify-content: center; background: #fff; color: var(--blue-main); font-weight: 700; border-radius: 1.2em; box-shadow: 0 4px 24px 0 rgba(37,99,235,0.10); padding: 0.9em 2.2em; font-size: 1.25rem; letter-spacing: 0.01em; border: 2px solid var(--blue-main); cursor: pointer; transition: background 0.2s, box-shadow 0.2s, transform 0.15s, color 0.2s; } .btn-outline:hover { background: var(--blue-main); color: #fff; box-shadow: 0 8px 32px 0 rgba(37,99,235,0.18); transform: translateY(-2px) scale(1.03); } /* Modern card */ .modern-card { background: #fff; border-radius: 1.5rem; box-shadow: 0 2px 16px 0 rgba(37,99,235,0.07), 0 1.5px 8px 0 rgba(245,158,11,0.06); border: 1.5px solid rgba(96,165,250,0.09); transition: box-shadow 0.2s, border 0.2s; } .modern-card:hover { box-shadow: 0 8px 32px 0 rgba(245,158,11,0.13); border: 1.5px solid var(--orange-main); } /* Floating hero icons */ @keyframes heroIconFloat { 0%, 100% { transform: translateY(0px) rotate(0deg); } 50% { transform: translateY(-14px) rotate(4deg); } } @keyframes heroIconDrift { 0%, 100% { transform: translateY(0px) rotate(0deg); } 33% { transform: translateY(-10px) rotate(-5deg); } 66% { transform: translateY(-6px) rotate(3deg); } } @keyframes heroIconSway { 0%, 100% { transform: translateY(0px) translateX(0px); } 50% { transform: translateY(-8px) translateX(6px); } } /* Animated gradient background for hero */ .hero-bg-animated { background: linear-gradient(120deg, var(--blue-main) 0%, var(--blue-light) 60%, var(--orange-main) 100%); background-size: 200% 200%; animation: heroGradientMove 6s ease-in-out infinite; } @keyframes heroGradientMove { 0% { background-position: 0% 50%; } 50% { background-position: 100% 50%; } 100% { background-position: 0% 50%; } } /* Header shrink effect */ .header-base { transition: all 0.3s cubic-bezier(.4,0,.2,1); } .header-shrink .header-content { height: 48px !important; padding-top: 0 !important; padding-bottom: 0 !important; } .header-shrink .logo-text { font-size: 1.3rem !important; letter-spacing: 0.01em; } .logo-text { font-family: 'Showpop', sans-serif !important; font-size: 1.7rem !important; font-weight: 300 !important; letter-spacing: 0.01em; text-transform: uppercase; } .logo-text-mini { font-family: 'Showpop', sans-serif !important; font-size: 1.3rem !important; font-weight: 300 !important; letter-spacing: 0.01em; text-transform: uppercase; transition: font-size 0.3s ease; } .logo-text-mini.scrolled { font-size: 1.1rem !important; } /* ── Site theme (dark = default) ── */ .site-theme { --site-bg: #0a0a0f; --site-surface: rgba(255,255,255,0.03); --site-surface-hover: rgba(255,255,255,0.06); --site-border: rgba(255,255,255,0.05); --site-border-hover: rgba(255,255,255,0.1); --site-text: #ffffff; --site-text-secondary: rgba(255,255,255,0.5); --site-text-muted: rgba(255,255,255,0.3); --site-text-hint: rgba(255,255,255,0.2); --site-nav-bg: rgba(10,10,15,0.8); --site-modal-bg: #14141f; --site-input-bg: rgba(255,255,255,0.05); --site-input-border: rgba(255,255,255,0.1); --site-input-text: #ffffff; --site-input-placeholder: rgba(255,255,255,0.2); --site-tag-bg: rgba(255,255,255,0.05); --site-tag-border: rgba(255,255,255,0.05); --site-tag-text: rgba(255,255,255,0.6); --site-card-bg: rgba(255,255,255,0.03); --site-card-border: rgba(255,255,255,0.05); --site-name-from: #ffffff; --site-name-to: rgba(255,255,255,0.7); --site-avatar-border: rgba(255,255,255,0.1); --site-avatar-bg: rgba(255,255,255,0.05); --site-status-border-color: #0a0a0f; --site-phone-bg: rgba(255,255,255,0.05); --site-phone-border: rgba(255,255,255,0.1); --site-phone-text: #ffffff; --site-divider: rgba(255,255,255,0.1); --site-lang-dropdown: #1a1a24; --site-footer-text: rgba(255,255,255,0.2); --site-scroll-btn-bg: rgba(255,255,255,0.1); --site-scroll-btn-border: rgba(255,255,255,0.1); --site-scroll-btn-text: rgba(255,255,255,0.6); } .site-theme.site-light { --site-bg: #f8f9fb; --site-surface: rgba(0,0,0,0.02); --site-surface-hover: rgba(0,0,0,0.04); --site-border: rgba(0,0,0,0.08); --site-border-hover: rgba(0,0,0,0.15); --site-text: #1a1a2e; --site-text-secondary: rgba(0,0,0,0.55); --site-text-muted: rgba(0,0,0,0.4); --site-text-hint: rgba(0,0,0,0.25); --site-nav-bg: rgba(255,255,255,0.85); --site-modal-bg: #ffffff; --site-input-bg: rgba(0,0,0,0.03); --site-input-border: rgba(0,0,0,0.12); --site-input-text: #1a1a2e; --site-input-placeholder: rgba(0,0,0,0.3); --site-tag-bg: rgba(0,0,0,0.04); --site-tag-border: rgba(0,0,0,0.08); --site-tag-text: rgba(0,0,0,0.6); --site-card-bg: #ffffff; --site-card-border: rgba(0,0,0,0.08); --site-name-from: #1a1a2e; --site-name-to: rgba(26,26,46,0.7); --site-avatar-border: rgba(0,0,0,0.1); --site-avatar-bg: rgba(0,0,0,0.05); --site-status-border-color: #f8f9fb; --site-phone-bg: rgba(0,0,0,0.04); --site-phone-border: rgba(0,0,0,0.1); --site-phone-text: #1a1a2e; --site-divider: rgba(0,0,0,0.08); --site-lang-dropdown: #ffffff; --site-footer-text: rgba(0,0,0,0.3); --site-scroll-btn-bg: rgba(0,0,0,0.06); --site-scroll-btn-border: rgba(0,0,0,0.1); --site-scroll-btn-text: rgba(0,0,0,0.5); } .logo-text-jaipur { font-family: 'Jaipur', 'Inter', 'Segoe UI', Arial, sans-serif !important; font-size: 1.7rem !important; letter-spacing: 0.01em; text-transform: uppercase; } .logo-text-rennie { font-family: 'Rennie', 'Inter', 'Segoe UI', Arial, sans-serif !important; font-size: 1.7rem !important; letter-spacing: 0.01em; text-transform: uppercase; } /* Scroll to top button */ .scroll-to-top-btn { position: fixed; right: 2rem; bottom: 2.5rem; z-index: 100; background: #6366f1; color: #fff; border-radius: 9999px; box-shadow: 0 2px 12px 0 rgba(80,80,120,0.13); padding: 0.75rem; width: 3rem; height: 3rem; display: flex; align-items: center; justify-content: center; font-size: 1.5rem; border: none; cursor: pointer; opacity: 0; pointer-events: none; transition: opacity 0.3s; } .scroll-to-top-btn.visible { opacity: 1; pointer-events: auto; } @font-face { font-family: 'NorseCyr2'; src: url('/fonts/Norse-Regular.woff2') format('woff2'); font-weight: normal; font-style: normal; font-display: swap; } @font-face { font-family: 'Jaipur'; src: url('/fonts/Jaipur.woff2') format('woff2'); font-weight: normal; font-style: normal; font-display: swap; } @font-face { font-family: 'Rennie'; src: url('/fonts/Rennie.woff2') format('woff2'); font-weight: normal; font-style: normal; font-display: swap; } .selection\:bg-blue-500\/30 *::-moz-selection { background-color: rgb(59 130 246 / 0.3); } .selection\:bg-blue-500\/30 *::selection { background-color: rgb(59 130 246 / 0.3); } .selection\:bg-blue-500\/30::-moz-selection { background-color: rgb(59 130 246 / 0.3); } .selection\:bg-blue-500\/30::selection { background-color: rgb(59 130 246 / 0.3); } .placeholder\:text-blue-300::-moz-placeholder { --tw-text-opacity: 1; color: rgb(147 197 253 / var(--tw-text-opacity, 1)); } .placeholder\:text-blue-300::placeholder { --tw-text-opacity: 1; color: rgb(147 197 253 / var(--tw-text-opacity, 1)); } .last\:border-0:last-child { border-width: 0px; } .last\:pb-0:last-child { padding-bottom: 0px; } .focus-within\:ring-2:focus-within { --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); } .focus-within\:ring-blue-400:focus-within { --tw-ring-opacity: 1; --tw-ring-color: rgb(96 165 250 / var(--tw-ring-opacity, 1)); } .hover\:border-blue-300:hover { --tw-border-opacity: 1; border-color: rgb(147 197 253 / var(--tw-border-opacity, 1)); } .hover\:border-blue-400:hover { --tw-border-opacity: 1; border-color: rgb(96 165 250 / var(--tw-border-opacity, 1)); } .hover\:border-gray-300:hover { --tw-border-opacity: 1; border-color: rgb(209 213 219 / var(--tw-border-opacity, 1)); } .hover\:bg-amber-200:hover { --tw-bg-opacity: 1; background-color: rgb(253 230 138 / var(--tw-bg-opacity, 1)); } .hover\:bg-amber-50:hover { --tw-bg-opacity: 1; background-color: rgb(255 251 235 / var(--tw-bg-opacity, 1)); } .hover\:bg-amber-600:hover { --tw-bg-opacity: 1; background-color: rgb(217 119 6 / var(--tw-bg-opacity, 1)); } .hover\:bg-black\/70:hover { background-color: rgb(0 0 0 / 0.7); } .hover\:bg-blue-100:hover { --tw-bg-opacity: 1; background-color: rgb(219 234 254 / var(--tw-bg-opacity, 1)); } .hover\:bg-blue-50:hover { --tw-bg-opacity: 1; background-color: rgb(239 246 255 / var(--tw-bg-opacity, 1)); } .hover\:bg-blue-50\/60:hover { background-color: rgb(239 246 255 / 0.6); } .hover\:bg-blue-500:hover { --tw-bg-opacity: 1; background-color: rgb(59 130 246 / var(--tw-bg-opacity, 1)); } .hover\:bg-blue-700:hover { --tw-bg-opacity: 1; background-color: rgb(29 78 216 / var(--tw-bg-opacity, 1)); } .hover\:bg-emerald-200:hover { --tw-bg-opacity: 1; background-color: rgb(167 243 208 / var(--tw-bg-opacity, 1)); } .hover\:bg-emerald-700:hover { --tw-bg-opacity: 1; background-color: rgb(4 120 87 / var(--tw-bg-opacity, 1)); } .hover\:bg-gray-100:hover { --tw-bg-opacity: 1; background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1)); } .hover\:bg-gray-200:hover { --tw-bg-opacity: 1; background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1)); } .hover\:bg-gray-50:hover { --tw-bg-opacity: 1; background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1)); } .hover\:bg-gray-50\/50:hover { background-color: rgb(249 250 251 / 0.5); } .hover\:bg-gray-700:hover { --tw-bg-opacity: 1; background-color: rgb(55 65 81 / var(--tw-bg-opacity, 1)); } .hover\:bg-green-100:hover { --tw-bg-opacity: 1; background-color: rgb(220 252 231 / var(--tw-bg-opacity, 1)); } .hover\:bg-green-50:hover { --tw-bg-opacity: 1; background-color: rgb(240 253 244 / var(--tw-bg-opacity, 1)); } .hover\:bg-green-700:hover { --tw-bg-opacity: 1; background-color: rgb(21 128 61 / var(--tw-bg-opacity, 1)); } .hover\:bg-indigo-100:hover { --tw-bg-opacity: 1; background-color: rgb(224 231 255 / var(--tw-bg-opacity, 1)); } .hover\:bg-indigo-200:hover { --tw-bg-opacity: 1; background-color: rgb(199 210 254 / var(--tw-bg-opacity, 1)); } .hover\:bg-indigo-700:hover { --tw-bg-opacity: 1; background-color: rgb(67 56 202 / var(--tw-bg-opacity, 1)); } .hover\:bg-orange-600:hover { --tw-bg-opacity: 1; background-color: rgb(234 88 12 / var(--tw-bg-opacity, 1)); } .hover\:bg-pink-100:hover { --tw-bg-opacity: 1; background-color: rgb(252 231 243 / var(--tw-bg-opacity, 1)); } .hover\:bg-pink-50:hover { --tw-bg-opacity: 1; background-color: rgb(253 242 248 / var(--tw-bg-opacity, 1)); } .hover\:bg-purple-100:hover { --tw-bg-opacity: 1; background-color: rgb(243 232 255 / var(--tw-bg-opacity, 1)); } .hover\:bg-purple-700:hover { --tw-bg-opacity: 1; background-color: rgb(126 34 206 / var(--tw-bg-opacity, 1)); } .hover\:bg-red-100:hover { --tw-bg-opacity: 1; background-color: rgb(254 226 226 / var(--tw-bg-opacity, 1)); } .hover\:bg-red-200:hover { --tw-bg-opacity: 1; background-color: rgb(254 202 202 / var(--tw-bg-opacity, 1)); } .hover\:bg-red-50:hover { --tw-bg-opacity: 1; background-color: rgb(254 242 242 / var(--tw-bg-opacity, 1)); } .hover\:bg-red-600:hover { --tw-bg-opacity: 1; background-color: rgb(220 38 38 / var(--tw-bg-opacity, 1)); } .hover\:bg-rose-700:hover { --tw-bg-opacity: 1; background-color: rgb(190 18 60 / var(--tw-bg-opacity, 1)); } .hover\:bg-slate-100:hover { --tw-bg-opacity: 1; background-color: rgb(241 245 249 / var(--tw-bg-opacity, 1)); } .hover\:bg-slate-800:hover { --tw-bg-opacity: 1; background-color: rgb(30 41 59 / var(--tw-bg-opacity, 1)); } .hover\:bg-white:hover { --tw-bg-opacity: 1; background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1)); } .hover\:bg-white\/10:hover { background-color: rgb(255 255 255 / 0.1); } .hover\:bg-white\/20:hover { background-color: rgb(255 255 255 / 0.2); } .hover\:bg-white\/25:hover { background-color: rgb(255 255 255 / 0.25); } .hover\:bg-yellow-100:hover { --tw-bg-opacity: 1; background-color: rgb(254 249 195 / var(--tw-bg-opacity, 1)); } .hover\:bg-yellow-600:hover { --tw-bg-opacity: 1; background-color: rgb(202 138 4 / var(--tw-bg-opacity, 1)); } .hover\:from-amber-600:hover { --tw-gradient-from: #d97706 var(--tw-gradient-from-position); --tw-gradient-to: rgb(217 119 6 / 0) var(--tw-gradient-to-position); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); } .hover\:to-yellow-600:hover { --tw-gradient-to: #ca8a04 var(--tw-gradient-to-position); } .hover\:text-black:hover { --tw-text-opacity: 1; color: rgb(0 0 0 / var(--tw-text-opacity, 1)); } .hover\:text-blue-300:hover { --tw-text-opacity: 1; color: rgb(147 197 253 / var(--tw-text-opacity, 1)); } .hover\:text-blue-400:hover { --tw-text-opacity: 1; color: rgb(96 165 250 / var(--tw-text-opacity, 1)); } .hover\:text-blue-600:hover { --tw-text-opacity: 1; color: rgb(37 99 235 / var(--tw-text-opacity, 1)); } .hover\:text-blue-700:hover { --tw-text-opacity: 1; color: rgb(29 78 216 / var(--tw-text-opacity, 1)); } .hover\:text-blue-800:hover { --tw-text-opacity: 1; color: rgb(30 64 175 / var(--tw-text-opacity, 1)); } .hover\:text-gray-600:hover { --tw-text-opacity: 1; color: rgb(75 85 99 / var(--tw-text-opacity, 1)); } .hover\:text-gray-700:hover { --tw-text-opacity: 1; color: rgb(55 65 81 / var(--tw-text-opacity, 1)); } .hover\:text-gray-800:hover { --tw-text-opacity: 1; color: rgb(31 41 55 / var(--tw-text-opacity, 1)); } .hover\:text-gray-900:hover { --tw-text-opacity: 1; color: rgb(17 24 39 / var(--tw-text-opacity, 1)); } .hover\:text-green-500:hover { --tw-text-opacity: 1; color: rgb(34 197 94 / var(--tw-text-opacity, 1)); } .hover\:text-green-700:hover { --tw-text-opacity: 1; color: rgb(21 128 61 / var(--tw-text-opacity, 1)); } .hover\:text-indigo-700:hover { --tw-text-opacity: 1; color: rgb(67 56 202 / var(--tw-text-opacity, 1)); } .hover\:text-pink-400:hover { --tw-text-opacity: 1; color: rgb(244 114 182 / var(--tw-text-opacity, 1)); } .hover\:text-pink-500:hover { --tw-text-opacity: 1; color: rgb(236 72 153 / var(--tw-text-opacity, 1)); } .hover\:text-pink-600:hover { --tw-text-opacity: 1; color: rgb(219 39 119 / var(--tw-text-opacity, 1)); } .hover\:text-purple-600:hover { --tw-text-opacity: 1; color: rgb(147 51 234 / var(--tw-text-opacity, 1)); } .hover\:text-purple-700:hover { --tw-text-opacity: 1; color: rgb(126 34 206 / var(--tw-text-opacity, 1)); } .hover\:text-red-400:hover { --tw-text-opacity: 1; color: rgb(248 113 113 / var(--tw-text-opacity, 1)); } .hover\:text-red-500:hover { --tw-text-opacity: 1; color: rgb(239 68 68 / var(--tw-text-opacity, 1)); } .hover\:text-red-600:hover { --tw-text-opacity: 1; color: rgb(220 38 38 / var(--tw-text-opacity, 1)); } .hover\:text-red-700:hover { --tw-text-opacity: 1; color: rgb(185 28 28 / var(--tw-text-opacity, 1)); } .hover\:text-sky-500:hover { --tw-text-opacity: 1; color: rgb(14 165 233 / var(--tw-text-opacity, 1)); } .hover\:text-slate-700:hover { --tw-text-opacity: 1; color: rgb(51 65 85 / var(--tw-text-opacity, 1)); } .hover\:text-white:hover { --tw-text-opacity: 1; color: rgb(255 255 255 / var(--tw-text-opacity, 1)); } .hover\:text-white\/80:hover { color: rgb(255 255 255 / 0.8); } .hover\:underline:hover { text-decoration-line: underline; } .hover\:opacity-90:hover { opacity: 0.9; } .hover\:shadow-lg:hover { --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } .hover\:shadow-md:hover { --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } .hover\:shadow-sm:hover { --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05); --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } .hover\:shadow-xl:hover { --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } .hover\:shadow-blue-500\/25:hover { --tw-shadow-color: rgb(59 130 246 / 0.25); --tw-shadow: var(--tw-shadow-colored); } .focus\:border-blue-500\/50:focus { border-color: rgb(59 130 246 / 0.5); } .focus\:outline-none:focus { outline: 2px solid transparent; outline-offset: 2px; } .focus\:ring-2:focus { --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); } .focus\:ring-blue-300:focus { --tw-ring-opacity: 1; --tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity, 1)); } .focus\:ring-blue-400:focus { --tw-ring-opacity: 1; --tw-ring-color: rgb(96 165 250 / var(--tw-ring-opacity, 1)); } .focus\:ring-blue-500:focus { --tw-ring-opacity: 1; --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1)); } .focus\:ring-emerald-400:focus { --tw-ring-opacity: 1; --tw-ring-color: rgb(52 211 153 / var(--tw-ring-opacity, 1)); } .focus\:ring-rose-400:focus { --tw-ring-opacity: 1; --tw-ring-color: rgb(251 113 133 / var(--tw-ring-opacity, 1)); } .focus\:ring-offset-2:focus { --tw-ring-offset-width: 2px; } .active\:scale-95:active { --tw-scale-x: .95; --tw-scale-y: .95; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .disabled\:cursor-not-allowed:disabled { cursor: not-allowed; } .disabled\:bg-gray-300:disabled { --tw-bg-opacity: 1; background-color: rgb(209 213 219 / var(--tw-bg-opacity, 1)); } .disabled\:bg-gray-50:disabled { --tw-bg-opacity: 1; background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1)); } .disabled\:text-gray-400:disabled { --tw-text-opacity: 1; color: rgb(156 163 175 / var(--tw-text-opacity, 1)); } .disabled\:no-underline:disabled { text-decoration-line: none; } .disabled\:opacity-40:disabled { opacity: 0.4; } .disabled\:opacity-50:disabled { opacity: 0.5; } .disabled\:opacity-60:disabled { opacity: 0.6; } .group:hover .group-hover\:scale-105 { --tw-scale-x: 1.05; --tw-scale-y: 1.05; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .group:hover .group-hover\:scale-110 { --tw-scale-x: 1.1; --tw-scale-y: 1.1; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .group:hover .group-hover\:border-blue-400 { --tw-border-opacity: 1; border-color: rgb(96 165 250 / var(--tw-border-opacity, 1)); } .group:hover .group-hover\:bg-black\/50 { background-color: rgb(0 0 0 / 0.5); } .group:hover .group-hover\:text-blue-600 { --tw-text-opacity: 1; color: rgb(37 99 235 / var(--tw-text-opacity, 1)); } .group:hover .group-hover\:text-orange-600 { --tw-text-opacity: 1; color: rgb(234 88 12 / var(--tw-text-opacity, 1)); } .group:hover .group-hover\:underline { text-decoration-line: underline; } .group:hover .group-hover\:opacity-100 { opacity: 1; } .group:hover .group-hover\:opacity-80 { opacity: 0.8; } .has-\[\:checked\]\:border-blue-500:has(:checked) { --tw-border-opacity: 1; border-color: rgb(59 130 246 / var(--tw-border-opacity, 1)); } .has-\[\:checked\]\:bg-blue-50:has(:checked) { --tw-bg-opacity: 1; background-color: rgb(239 246 255 / var(--tw-bg-opacity, 1)); } @media (min-width: 640px) { .sm\:mb-6 { margin-bottom: 1.5rem; } .sm\:block { display: block; } .sm\:hidden { display: none; } .sm\:h-32 { height: 8rem; } .sm\:w-32 { width: 8rem; } .sm\:w-auto { width: auto; } .sm\:flex-1 { flex: 1 1 0%; } .sm\:grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } .sm\:grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } .sm\:grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); } .sm\:flex-row { flex-direction: row; } .sm\:items-center { align-items: center; } .sm\:gap-3 { gap: 0.75rem; } .sm\:gap-4 { gap: 1rem; } .sm\:space-y-5 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(1.25rem * calc(1 - var(--tw-space-y-reverse))); margin-bottom: calc(1.25rem * var(--tw-space-y-reverse)); } .sm\:p-6 { padding: 1.5rem; } .sm\:px-4 { padding-left: 1rem; padding-right: 1rem; } .sm\:px-6 { padding-left: 1.5rem; padding-right: 1.5rem; } .sm\:py-8 { padding-top: 2rem; padding-bottom: 2rem; } .sm\:pb-28 { padding-bottom: 7rem; } .sm\:pt-24 { padding-top: 6rem; } .sm\:text-2xl { font-size: 1.5rem; line-height: 2rem; } .sm\:text-5xl { font-size: 3rem; line-height: 1; } .sm\:text-lg { font-size: 1.125rem; line-height: 1.75rem; } } @media (min-width: 768px) { .md\:flex { display: flex; } .md\:hidden { display: none; } .md\:w-64 { width: 16rem; } .md\:grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } .md\:grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } .md\:grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); } .md\:grid-cols-5 { grid-template-columns: repeat(5, minmax(0, 1fr)); } .md\:flex-row { flex-direction: row; } .md\:p-14 { padding: 3.5rem; } .md\:px-8 { padding-left: 2rem; padding-right: 2rem; } .md\:text-3xl { font-size: 1.875rem; line-height: 2.25rem; } .md\:text-5xl { font-size: 3rem; line-height: 1; } .md\:text-6xl { font-size: 3.75rem; line-height: 1; } } @media (min-width: 1024px) { .lg\:block { display: block; } .lg\:w-64 { width: 16rem; } .lg\:grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } .lg\:grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); } .lg\:grid-cols-6 { grid-template-columns: repeat(6, minmax(0, 1fr)); } .lg\:flex-row { flex-direction: row; } .lg\:gap-8 { gap: 2rem; } .lg\:px-8 { padding-left: 2rem; padding-right: 2rem; } } @media (min-width: 1280px) { .xl\:grid-cols-7 { grid-template-columns: repeat(7, minmax(0, 1fr)); } } ¥-ÿÿÿ :ÿÿÿ‰öÿÿ¨  ÑÖ«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSourcee"use strict"; (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([[906],{ /***/ 4962: «webpack/lib/util/registerExternalSerializerœwebpack-sources/CachedSource Ñ «webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSourceQ/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { «webpack/lib/util/registerExternalSerializerœwebpack-sources/CachedSource €«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-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/ReplaceSource~export const LOCALES = [ { code: 'el', label: 'Ελληνικά', flag: '🇬🇷' }, { code: 'en', label: 'English', 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.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': 'δωÏεάν εγγÏαφή', // 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.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.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': 'ΕπιστÏοφή στη σÏνδεση', // Dashboard 'dashboard.title': 'Πίνακας ελέγχου', 'dashboard.new_task': '+ Îέα εÏγασία', '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': 'ΠεÏιοχή εÏγασίας', '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.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.body.new_offer': 'Îέα Ï€ÏοσφοÏά για «{title}»', 'notif.body.offer_accepted': 'Η Ï€ÏοσφοÏά σας για «{title}» έγινε δεκτή', 'notif.body.offer_declined': 'Η Ï€ÏοσφοÏά σας για «{title}» αποÏÏίφθηκε', 'notif.body.task_invite': 'Σας Ï€ÏοσκαλοÏν για «{title}»', 'notif.body.new_review': 'Λάβατε αξιολόγηση {rating}★', // 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.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': 'Το βιογÏαφικό και η φωτογÏαφία Ïυθμίζονται στην καÏτέλα «Βασικά».', '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.create_first': 'ΔημιουÏγήστε το Ï€Ïώτο σας χαÏτοφυλάκιο', 'profile.cards.delete_confirm': 'ΔιαγÏαφή χαÏτοφυλακίου;', 'profile.card.tab.main': 'Γενικά', 'profile.card.tab.skills': 'Δεξιότητες', 'profile.card.tab.categories': 'ΚατηγοÏίες', 'profile.card.tab.geography': 'ΓεωγÏαφία', 'profile.card.tab.portfolio': 'ΓκαλεÏί', 'profile.card.active': 'ΕνεÏγή', '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.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.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.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.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.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.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.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.order': 'ΣειÏά', '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': 'Όλα τα δικαιώματα διατηÏοÏνται.', // 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': 'ΤώÏα μποÏείτε να λαμβάνετε παÏαγγελίες από πελάτες. Αναζητήστε εÏγασίες που ταιÏιάζουν με τις δεξιότητές σας.' }, 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': 'Dashboard', 'nav.chat': 'Messages', 'nav.notifications': 'Notifications', 'nav.profile': 'Profile', 'nav.admin': 'Admin Panel', 'nav.specialists': 'Specialists', 'nav.new_task': 'New task', 'nav.login': 'Login', 'nav.register': 'Register', 'nav.logout': 'Logout', 'hero.title': 'Find a specialist for any job', 'hero.subtitle': 'Post a task, receive offers and choose the best professional', 'hero.cta.post': 'Post a task', 'hero.cta.browse': 'Become a specialist', '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': 'specialists', 'stats.tasks': 'tasks', 'stats.categories': 'categories', 'stats.free': 'free sign-up', '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.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.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', 'dashboard.title': 'Dashboard', 'dashboard.new_task': '+ New 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', '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.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.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', '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': '🔧 Specialist', 'profile.role.admin': '👑 Admin', 'profile.role.customer': '👤 User', 'profile.role.change': 'To change your role please contact support.', 'profile.become_specialist': 'Become a Specialist', 'profile.become_specialist.desc': 'Upgrade to Specialist to take on tasks and build your profile.', 'become_specialist.hero.title': 'Earn money doing what you do best', 'become_specialist.hero.subtitle': 'Create a specialist profile and receive orders from clients across Greece', '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.', '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': 'Portfolio', 'profile.cards.count': 'Portfolio', 'profile.cards.add': 'Add portfolio', 'profile.cards.new_title': 'New portfolio title', 'profile.cards.placeholder': 'e.g. Plumbing', 'profile.cards.create': 'Create', 'profile.cards.cancel': 'Cancel', 'profile.cards.empty': 'No portfolio yet', 'profile.cards.create_first': 'Create your first portfolio', 'profile.cards.delete_confirm': 'Delete portfolio?', '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.active': 'Active', '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.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.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.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': 'Specialists', '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 portfolio (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': 'Specialist', '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.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': 'Portfolio', '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': 'Specialists', '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.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 specialists', '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.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': 'Portfolio', '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': 'Portfolio', 'admin.user_edit.no_cards': 'No portfolio found', 'admin.user_edit.card_title': 'Portfolio 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.specialist': 'Specialist', '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.order': 'Order', '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': 'Specialists', '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.', // 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': 'Portfolio items', 'pricing.feat.cards': 'Specialist cards', 'pricing.feat.notify_tasks': 'New task notifications', 'pricing.feat.video': 'Video in portfolio', // 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.' }, 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.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': 'беÑÐ¿Ð»Ð°Ñ‚Ð½Ð°Ñ Ñ€ÐµÐ³Ð¸ÑтрациÑ', '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.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.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': 'ВернутьÑÑ Ðº входу', 'dashboard.title': 'Панель управлениÑ', 'dashboard.new_task': '+ ÐÐ¾Ð²Ð°Ñ Ð·Ð°Ð´Ð°Ñ‡Ð°', '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': 'Район работы', '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.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.body.new_offer': 'Ðовое предложение на «{title}»', 'notif.body.offer_accepted': 'Ваше предложение на «{title}» принÑто', 'notif.body.offer_declined': 'Ваше предложение на «{title}» отклонено', 'notif.body.task_invite': 'Ð’Ð°Ñ Ð¿Ñ€Ð¸Ð³Ð»Ð°ÑˆÐ°ÑŽÑ‚ на «{title}»', 'notif.body.new_review': 'Ð’Ñ‹ получили оценку {rating}★', '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.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': 'Ð‘Ð¸Ð¾Ð³Ñ€Ð°Ñ„Ð¸Ñ Ð¸ фото наÑтраиваютÑÑ Ð²Ð¾ вкладке «ОÑновное».', '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.create_first': 'Создать первое портфолио', 'profile.cards.delete_confirm': 'Удалить портфолио?', 'profile.card.tab.main': 'ОÑновное', 'profile.card.tab.skills': 'Ðавыки', 'profile.card.tab.categories': 'Категории', 'profile.card.tab.geography': 'ГеографиÑ', 'profile.card.tab.portfolio': 'ГалереÑ', 'profile.card.active': 'Ðктивна', '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.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.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.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.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.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.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.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.order': 'ПорÑдок', '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': 'Ð’Ñе права защищены.', // 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': 'Теперь вы можете получать заказы от клиентов. Ðайдите задачи, которые ÑоответÑтвуют вашим навыкам.' } }; export function getTranslations(locale) { var _translations_locale; const t = (_translations_locale = translations[locale]) !== null && _translations_locale !== void 0 ? _translations_locale : translations.el; return (key, fallback)=>{ var _t_key, _ref, _ref1; return (_ref1 = (_ref = (_t_key = t[key]) !== null && _t_key !== void 0 ? _t_key : translations.el[key]) !== null && _ref !== void 0 ? _ref : fallback) !== null && _ref1 !== void 0 ? _ref1 : key; }; } C ÈèÎ耀€€†buffer†source„size„maps„hashy/* 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: '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.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': 'δωÏεάν εγγÏαφή', // 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.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.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': 'ΕπιστÏοφή στη σÏνδεση', // Dashboard 'dashboard.title': 'Πίνακας ελέγχου', 'dashboard.new_task': '+ Îέα εÏγασία', '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': 'ΠεÏιοχή εÏγασίας', '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.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.body.new_offer': 'Îέα Ï€ÏοσφοÏά για «{title}»', 'notif.body.offer_accepted': 'Η Ï€ÏοσφοÏά σας για «{title}» έγινε δεκτή', 'notif.body.offer_declined': 'Η Ï€ÏοσφοÏά σας για «{title}» αποÏÏίφθηκε', 'notif.body.task_invite': 'Σας Ï€ÏοσκαλοÏν για «{title}»', 'notif.body.new_review': 'Λάβατε αξιολόγηση {rating}★', // 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.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': 'Το βιογÏαφικό και η φωτογÏαφία Ïυθμίζονται στην καÏτέλα «Βασικά».', '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.create_first': 'ΔημιουÏγήστε το Ï€Ïώτο σας χαÏτοφυλάκιο', 'profile.cards.delete_confirm': 'ΔιαγÏαφή χαÏτοφυλακίου;', 'profile.card.tab.main': 'Γενικά', 'profile.card.tab.skills': 'Δεξιότητες', 'profile.card.tab.categories': 'ΚατηγοÏίες', 'profile.card.tab.geography': 'ΓεωγÏαφία', 'profile.card.tab.portfolio': 'ΓκαλεÏί', 'profile.card.active': 'ΕνεÏγή', '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.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.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.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.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.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.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.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.order': 'ΣειÏά', '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': 'Όλα τα δικαιώματα διατηÏοÏνται.', // 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': 'ΤώÏα μποÏείτε να λαμβάνετε παÏαγγελίες από πελάτες. Αναζητήστε εÏγασίες που ταιÏιάζουν με τις δεξιότητές σας.' }, 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': 'Dashboard', 'nav.chat': 'Messages', 'nav.notifications': 'Notifications', 'nav.profile': 'Profile', 'nav.admin': 'Admin Panel', 'nav.specialists': 'Specialists', 'nav.new_task': 'New task', 'nav.login': 'Login', 'nav.register': 'Register', 'nav.logout': 'Logout', 'hero.title': 'Find a specialist for any job', 'hero.subtitle': 'Post a task, receive offers and choose the best professional', 'hero.cta.post': 'Post a task', 'hero.cta.browse': 'Become a specialist', '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': 'specialists', 'stats.tasks': 'tasks', 'stats.categories': 'categories', 'stats.free': 'free sign-up', '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.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.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', 'dashboard.title': 'Dashboard', 'dashboard.new_task': '+ New 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', '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.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.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', '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': '🔧 Specialist', 'profile.role.admin': '👑 Admin', 'profile.role.customer': '👤 User', 'profile.role.change': 'To change your role please contact support.', 'profile.become_specialist': 'Become a Specialist', 'profile.become_specialist.desc': 'Upgrade to Specialist to take on tasks and build your profile.', 'become_specialist.hero.title': 'Earn money doing what you do best', 'become_specialist.hero.subtitle': 'Create a specialist profile and receive orders from clients across Greece', '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.', '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': 'Portfolio', 'profile.cards.count': 'Portfolio', 'profile.cards.add': 'Add portfolio', 'profile.cards.new_title': 'New portfolio title', 'profile.cards.placeholder': 'e.g. Plumbing', 'profile.cards.create': 'Create', 'profile.cards.cancel': 'Cancel', 'profile.cards.empty': 'No portfolio yet', 'profile.cards.create_first': 'Create your first portfolio', 'profile.cards.delete_confirm': 'Delete portfolio?', '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.active': 'Active', '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.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.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.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': 'Specialists', '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 portfolio (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': 'Specialist', '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.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': 'Portfolio', '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': 'Specialists', '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.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 specialists', '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.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': 'Portfolio', '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': 'Portfolio', 'admin.user_edit.no_cards': 'No portfolio found', 'admin.user_edit.card_title': 'Portfolio 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.specialist': 'Specialist', '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.order': 'Order', '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': 'Specialists', '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.', // 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': 'Portfolio items', 'pricing.feat.cards': 'Specialist cards', 'pricing.feat.notify_tasks': 'New task notifications', 'pricing.feat.video': 'Video in portfolio', // 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.' }, 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.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': 'беÑÐ¿Ð»Ð°Ñ‚Ð½Ð°Ñ Ñ€ÐµÐ³Ð¸ÑтрациÑ', '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.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.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': 'ВернутьÑÑ Ðº входу', 'dashboard.title': 'Панель управлениÑ', 'dashboard.new_task': '+ ÐÐ¾Ð²Ð°Ñ Ð·Ð°Ð´Ð°Ñ‡Ð°', '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': 'Район работы', '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.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.body.new_offer': 'Ðовое предложение на «{title}»', 'notif.body.offer_accepted': 'Ваше предложение на «{title}» принÑто', 'notif.body.offer_declined': 'Ваше предложение на «{title}» отклонено', 'notif.body.task_invite': 'Ð’Ð°Ñ Ð¿Ñ€Ð¸Ð³Ð»Ð°ÑˆÐ°ÑŽÑ‚ на «{title}»', 'notif.body.new_review': 'Ð’Ñ‹ получили оценку {rating}★', '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.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': 'Ð‘Ð¸Ð¾Ð³Ñ€Ð°Ñ„Ð¸Ñ Ð¸ фото наÑтраиваютÑÑ Ð²Ð¾ вкладке «ОÑновное».', '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.create_first': 'Создать первое портфолио', 'profile.cards.delete_confirm': 'Удалить портфолио?', 'profile.card.tab.main': 'ОÑновное', 'profile.card.tab.skills': 'Ðавыки', 'profile.card.tab.categories': 'Категории', 'profile.card.tab.geography': 'ГеографиÑ', 'profile.card.tab.portfolio': 'ГалереÑ', 'profile.card.active': 'Ðктивна', '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.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.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.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.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.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.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.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.order': 'ПорÑдок', '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': 'Ð’Ñе права защищены.', // 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': 'Теперь вы можете получать заказы от клиентов. Ðайдите задачи, которые ÑоответÑтвуют вашим навыкам.' } }; function getTranslations(locale) { var _translations_locale; const t = (_translations_locale = translations[locale]) !== null && _translations_locale !== void 0 ? _translations_locale : translations.el; return (key, fallback)=>{ var _t_key, _ref, _ref1; return (_ref1 = (_ref = (_t_key = t[key]) !== null && _t_key !== void 0 ? _t_key : translations.el[key]) !== null && _ref !== void 0 ? _ref : fallback) !== null && _ref1 !== void 0 ? _ref1 : key; }; } €”{"finalSource":true}ƒmap‹bufferedMap ConcatSourceRawSourceþ/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ $: () => (/* binding */ getTranslations), /* harmony export */ YZ: () => (/* binding */ LOCALES) /* harmony export */ }); /* unused harmony export translations */ ReplaceSourceRawSource~export const LOCALES = [ { code: 'el', label: 'Ελληνικά', flag: '🇬🇷' }, { code: 'en', label: 'English', 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.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': 'δωÏεάν εγγÏαφή', // 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.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.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': 'ΕπιστÏοφή στη σÏνδεση', // Dashboard 'dashboard.title': 'Πίνακας ελέγχου', 'dashboard.new_task': '+ Îέα εÏγασία', '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': 'ΠεÏιοχή εÏγασίας', '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.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.body.new_offer': 'Îέα Ï€ÏοσφοÏά για «{title}»', 'notif.body.offer_accepted': 'Η Ï€ÏοσφοÏά σας για «{title}» έγινε δεκτή', 'notif.body.offer_declined': 'Η Ï€ÏοσφοÏά σας για «{title}» αποÏÏίφθηκε', 'notif.body.task_invite': 'Σας Ï€ÏοσκαλοÏν για «{title}»', 'notif.body.new_review': 'Λάβατε αξιολόγηση {rating}★', // 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.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': 'Το βιογÏαφικό και η φωτογÏαφία Ïυθμίζονται στην καÏτέλα «Βασικά».', '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.create_first': 'ΔημιουÏγήστε το Ï€Ïώτο σας χαÏτοφυλάκιο', 'profile.cards.delete_confirm': 'ΔιαγÏαφή χαÏτοφυλακίου;', 'profile.card.tab.main': 'Γενικά', 'profile.card.tab.skills': 'Δεξιότητες', 'profile.card.tab.categories': 'ΚατηγοÏίες', 'profile.card.tab.geography': 'ΓεωγÏαφία', 'profile.card.tab.portfolio': 'ΓκαλεÏί', 'profile.card.active': 'ΕνεÏγή', '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.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.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.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.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.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.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.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.order': 'ΣειÏά', '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': 'Όλα τα δικαιώματα διατηÏοÏνται.', // 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': 'ΤώÏα μποÏείτε να λαμβάνετε παÏαγγελίες από πελάτες. Αναζητήστε εÏγασίες που ταιÏιάζουν με τις δεξιότητές σας.' }, 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': 'Dashboard', 'nav.chat': 'Messages', 'nav.notifications': 'Notifications', 'nav.profile': 'Profile', 'nav.admin': 'Admin Panel', 'nav.specialists': 'Specialists', 'nav.new_task': 'New task', 'nav.login': 'Login', 'nav.register': 'Register', 'nav.logout': 'Logout', 'hero.title': 'Find a specialist for any job', 'hero.subtitle': 'Post a task, receive offers and choose the best professional', 'hero.cta.post': 'Post a task', 'hero.cta.browse': 'Become a specialist', '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': 'specialists', 'stats.tasks': 'tasks', 'stats.categories': 'categories', 'stats.free': 'free sign-up', '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.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.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', 'dashboard.title': 'Dashboard', 'dashboard.new_task': '+ New 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', '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.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.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', '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': '🔧 Specialist', 'profile.role.admin': '👑 Admin', 'profile.role.customer': '👤 User', 'profile.role.change': 'To change your role please contact support.', 'profile.become_specialist': 'Become a Specialist', 'profile.become_specialist.desc': 'Upgrade to Specialist to take on tasks and build your profile.', 'become_specialist.hero.title': 'Earn money doing what you do best', 'become_specialist.hero.subtitle': 'Create a specialist profile and receive orders from clients across Greece', '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.', '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': 'Portfolio', 'profile.cards.count': 'Portfolio', 'profile.cards.add': 'Add portfolio', 'profile.cards.new_title': 'New portfolio title', 'profile.cards.placeholder': 'e.g. Plumbing', 'profile.cards.create': 'Create', 'profile.cards.cancel': 'Cancel', 'profile.cards.empty': 'No portfolio yet', 'profile.cards.create_first': 'Create your first portfolio', 'profile.cards.delete_confirm': 'Delete portfolio?', '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.active': 'Active', '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.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.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.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': 'Specialists', '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 portfolio (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': 'Specialist', '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.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': 'Portfolio', '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': 'Specialists', '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.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 specialists', '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.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': 'Portfolio', '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': 'Portfolio', 'admin.user_edit.no_cards': 'No portfolio found', 'admin.user_edit.card_title': 'Portfolio 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.specialist': 'Specialist', '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.order': 'Order', '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': 'Specialists', '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.', // 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': 'Portfolio items', 'pricing.feat.cards': 'Specialist cards', 'pricing.feat.notify_tasks': 'New task notifications', 'pricing.feat.video': 'Video in portfolio', // 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.' }, 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.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': 'беÑÐ¿Ð»Ð°Ñ‚Ð½Ð°Ñ Ñ€ÐµÐ³Ð¸ÑтрациÑ', '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.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.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': 'ВернутьÑÑ Ðº входу', 'dashboard.title': 'Панель управлениÑ', 'dashboard.new_task': '+ ÐÐ¾Ð²Ð°Ñ Ð·Ð°Ð´Ð°Ñ‡Ð°', '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': 'Район работы', '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.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.body.new_offer': 'Ðовое предложение на «{title}»', 'notif.body.offer_accepted': 'Ваше предложение на «{title}» принÑто', 'notif.body.offer_declined': 'Ваше предложение на «{title}» отклонено', 'notif.body.task_invite': 'Ð’Ð°Ñ Ð¿Ñ€Ð¸Ð³Ð»Ð°ÑˆÐ°ÑŽÑ‚ на «{title}»', 'notif.body.new_review': 'Ð’Ñ‹ получили оценку {rating}★', '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.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': 'Ð‘Ð¸Ð¾Ð³Ñ€Ð°Ñ„Ð¸Ñ Ð¸ фото наÑтраиваютÑÑ Ð²Ð¾ вкладке «ОÑновное».', '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.create_first': 'Создать первое портфолио', 'profile.cards.delete_confirm': 'Удалить портфолио?', 'profile.card.tab.main': 'ОÑновное', 'profile.card.tab.skills': 'Ðавыки', 'profile.card.tab.categories': 'Категории', 'profile.card.tab.geography': 'ГеографиÑ', 'profile.card.tab.portfolio': 'ГалереÑ', 'profile.card.active': 'Ðктивна', '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.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.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.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.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.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.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.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.order': 'ПорÑдок', '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': 'Ð’Ñе права защищены.', // 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': 'Теперь вы можете получать заказы от клиентов. Ðайдите задачи, которые ÑоответÑтвуют вашим навыкам.' } }; export function getTranslations(locale) { var _translations_locale; const t = (_translations_locale = translations[locale]) !== null && _translations_locale !== void 0 ? _translations_locale : translations.el; return (key, fallback)=>{ var _t_key, _ref, _ref1; return (_ref1 = (_ref = (_t_key = t[key]) !== null && _t_key !== void 0 ? _t_key : translations.el[key]) !== null && _ref !== void 0 ? _ref : fallback) !== null && _ref1 !== void 0 ? _ref1 : key; }; } /06undefined268274undefined190664190670undefined /***/ }) €†buffer†source„size„maps„hashÔ/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { /* 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: '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.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': 'δωÏεάν εγγÏαφή', // 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.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.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': 'ΕπιστÏοφή στη σÏνδεση', // Dashboard 'dashboard.title': 'Πίνακας ελέγχου', 'dashboard.new_task': '+ Îέα εÏγασία', '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': 'ΠεÏιοχή εÏγασίας', '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.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.body.new_offer': 'Îέα Ï€ÏοσφοÏά για «{title}»', 'notif.body.offer_accepted': 'Η Ï€ÏοσφοÏά σας για «{title}» έγινε δεκτή', 'notif.body.offer_declined': 'Η Ï€ÏοσφοÏά σας για «{title}» αποÏÏίφθηκε', 'notif.body.task_invite': 'Σας Ï€ÏοσκαλοÏν για «{title}»', 'notif.body.new_review': 'Λάβατε αξιολόγηση {rating}★', // 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.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': 'Το βιογÏαφικό και η φωτογÏαφία Ïυθμίζονται στην καÏτέλα «Βασικά».', '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.create_first': 'ΔημιουÏγήστε το Ï€Ïώτο σας χαÏτοφυλάκιο', 'profile.cards.delete_confirm': 'ΔιαγÏαφή χαÏτοφυλακίου;', 'profile.card.tab.main': 'Γενικά', 'profile.card.tab.skills': 'Δεξιότητες', 'profile.card.tab.categories': 'ΚατηγοÏίες', 'profile.card.tab.geography': 'ΓεωγÏαφία', 'profile.card.tab.portfolio': 'ΓκαλεÏί', 'profile.card.active': 'ΕνεÏγή', '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.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.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.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.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.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.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.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.order': 'ΣειÏά', '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': 'Όλα τα δικαιώματα διατηÏοÏνται.', // 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': 'ΤώÏα μποÏείτε να λαμβάνετε παÏαγγελίες από πελάτες. Αναζητήστε εÏγασίες που ταιÏιάζουν με τις δεξιότητές σας.' }, 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': 'Dashboard', 'nav.chat': 'Messages', 'nav.notifications': 'Notifications', 'nav.profile': 'Profile', 'nav.admin': 'Admin Panel', 'nav.specialists': 'Specialists', 'nav.new_task': 'New task', 'nav.login': 'Login', 'nav.register': 'Register', 'nav.logout': 'Logout', 'hero.title': 'Find a specialist for any job', 'hero.subtitle': 'Post a task, receive offers and choose the best professional', 'hero.cta.post': 'Post a task', 'hero.cta.browse': 'Become a specialist', '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': 'specialists', 'stats.tasks': 'tasks', 'stats.categories': 'categories', 'stats.free': 'free sign-up', '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.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.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', 'dashboard.title': 'Dashboard', 'dashboard.new_task': '+ New 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', '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.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.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', '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': '🔧 Specialist', 'profile.role.admin': '👑 Admin', 'profile.role.customer': '👤 User', 'profile.role.change': 'To change your role please contact support.', 'profile.become_specialist': 'Become a Specialist', 'profile.become_specialist.desc': 'Upgrade to Specialist to take on tasks and build your profile.', 'become_specialist.hero.title': 'Earn money doing what you do best', 'become_specialist.hero.subtitle': 'Create a specialist profile and receive orders from clients across Greece', '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.', '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': 'Portfolio', 'profile.cards.count': 'Portfolio', 'profile.cards.add': 'Add portfolio', 'profile.cards.new_title': 'New portfolio title', 'profile.cards.placeholder': 'e.g. Plumbing', 'profile.cards.create': 'Create', 'profile.cards.cancel': 'Cancel', 'profile.cards.empty': 'No portfolio yet', 'profile.cards.create_first': 'Create your first portfolio', 'profile.cards.delete_confirm': 'Delete portfolio?', '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.active': 'Active', '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.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.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.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': 'Specialists', '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 portfolio (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': 'Specialist', '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.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': 'Portfolio', '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': 'Specialists', '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.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 specialists', '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.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': 'Portfolio', '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': 'Portfolio', 'admin.user_edit.no_cards': 'No portfolio found', 'admin.user_edit.card_title': 'Portfolio 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.specialist': 'Specialist', '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.order': 'Order', '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': 'Specialists', '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.', // 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': 'Portfolio items', 'pricing.feat.cards': 'Specialist cards', 'pricing.feat.notify_tasks': 'New task notifications', 'pricing.feat.video': 'Video in portfolio', // 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.' }, 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.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': 'беÑÐ¿Ð»Ð°Ñ‚Ð½Ð°Ñ Ñ€ÐµÐ³Ð¸ÑтрациÑ', '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.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.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': 'ВернутьÑÑ Ðº входу', 'dashboard.title': 'Панель управлениÑ', 'dashboard.new_task': '+ ÐÐ¾Ð²Ð°Ñ Ð·Ð°Ð´Ð°Ñ‡Ð°', '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': 'Район работы', '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.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.body.new_offer': 'Ðовое предложение на «{title}»', 'notif.body.offer_accepted': 'Ваше предложение на «{title}» принÑто', 'notif.body.offer_declined': 'Ваше предложение на «{title}» отклонено', 'notif.body.task_invite': 'Ð’Ð°Ñ Ð¿Ñ€Ð¸Ð³Ð»Ð°ÑˆÐ°ÑŽÑ‚ на «{title}»', 'notif.body.new_review': 'Ð’Ñ‹ получили оценку {rating}★', '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.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': 'Ð‘Ð¸Ð¾Ð³Ñ€Ð°Ñ„Ð¸Ñ Ð¸ фото наÑтраиваютÑÑ Ð²Ð¾ вкладке «ОÑновное».', '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.create_first': 'Создать первое портфолио', 'profile.cards.delete_confirm': 'Удалить портфолио?', 'profile.card.tab.main': 'ОÑновное', 'profile.card.tab.skills': 'Ðавыки', 'profile.card.tab.categories': 'Категории', 'profile.card.tab.geography': 'ГеографиÑ', 'profile.card.tab.portfolio': 'ГалереÑ', 'profile.card.active': 'Ðктивна', '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.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.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.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.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.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.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.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.order': 'ПорÑдок', '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': 'Ð’Ñе права защищены.', // 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': 'Теперь вы можете получать заказы от клиентов. Ðайдите задачи, которые ÑоответÑтвуют вашим навыкам.' } }; function getTranslations(locale) { var _translations_locale; const t = (_translations_locale = translations[locale]) !== null && _translations_locale !== void 0 ? _translations_locale : translations.el; return (key, fallback)=>{ var _t_key, _ref, _ref1; return (_ref1 = (_ref = (_t_key = t[key]) !== null && _t_key !== void 0 ? _t_key : translations.el[key]) !== null && _ref !== void 0 ? _ref : fallback) !== null && _ref1 !== void 0 ? _ref1 : key; }; } /***/ }) €”{"finalSource":true}ƒmap‹bufferedMap  ConcatSourceRawSourceQ/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { þþ/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ $: () => (/* binding */ getTranslations), /* harmony export */ YZ: () => (/* binding */ LOCALES) /* harmony export */ }); /* unused harmony export translations */ ReplaceSourceRawSource~export const LOCALES = [ { code: 'el', label: 'Ελληνικά', flag: '🇬🇷' }, { code: 'en', label: 'English', 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.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': 'δωÏεάν εγγÏαφή', // 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.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.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': 'ΕπιστÏοφή στη σÏνδεση', // Dashboard 'dashboard.title': 'Πίνακας ελέγχου', 'dashboard.new_task': '+ Îέα εÏγασία', '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': 'ΠεÏιοχή εÏγασίας', '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.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.body.new_offer': 'Îέα Ï€ÏοσφοÏά για «{title}»', 'notif.body.offer_accepted': 'Η Ï€ÏοσφοÏά σας για «{title}» έγινε δεκτή', 'notif.body.offer_declined': 'Η Ï€ÏοσφοÏά σας για «{title}» αποÏÏίφθηκε', 'notif.body.task_invite': 'Σας Ï€ÏοσκαλοÏν για «{title}»', 'notif.body.new_review': 'Λάβατε αξιολόγηση {rating}★', // 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.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': 'Το βιογÏαφικό και η φωτογÏαφία Ïυθμίζονται στην καÏτέλα «Βασικά».', '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.create_first': 'ΔημιουÏγήστε το Ï€Ïώτο σας χαÏτοφυλάκιο', 'profile.cards.delete_confirm': 'ΔιαγÏαφή χαÏτοφυλακίου;', 'profile.card.tab.main': 'Γενικά', 'profile.card.tab.skills': 'Δεξιότητες', 'profile.card.tab.categories': 'ΚατηγοÏίες', 'profile.card.tab.geography': 'ΓεωγÏαφία', 'profile.card.tab.portfolio': 'ΓκαλεÏί', 'profile.card.active': 'ΕνεÏγή', '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.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.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.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.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.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.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.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.order': 'ΣειÏά', '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': 'Όλα τα δικαιώματα διατηÏοÏνται.', // 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': 'ΤώÏα μποÏείτε να λαμβάνετε παÏαγγελίες από πελάτες. Αναζητήστε εÏγασίες που ταιÏιάζουν με τις δεξιότητές σας.' }, 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': 'Dashboard', 'nav.chat': 'Messages', 'nav.notifications': 'Notifications', 'nav.profile': 'Profile', 'nav.admin': 'Admin Panel', 'nav.specialists': 'Specialists', 'nav.new_task': 'New task', 'nav.login': 'Login', 'nav.register': 'Register', 'nav.logout': 'Logout', 'hero.title': 'Find a specialist for any job', 'hero.subtitle': 'Post a task, receive offers and choose the best professional', 'hero.cta.post': 'Post a task', 'hero.cta.browse': 'Become a specialist', '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': 'specialists', 'stats.tasks': 'tasks', 'stats.categories': 'categories', 'stats.free': 'free sign-up', '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.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.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', 'dashboard.title': 'Dashboard', 'dashboard.new_task': '+ New 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', '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.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.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', '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': '🔧 Specialist', 'profile.role.admin': '👑 Admin', 'profile.role.customer': '👤 User', 'profile.role.change': 'To change your role please contact support.', 'profile.become_specialist': 'Become a Specialist', 'profile.become_specialist.desc': 'Upgrade to Specialist to take on tasks and build your profile.', 'become_specialist.hero.title': 'Earn money doing what you do best', 'become_specialist.hero.subtitle': 'Create a specialist profile and receive orders from clients across Greece', '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.', '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': 'Portfolio', 'profile.cards.count': 'Portfolio', 'profile.cards.add': 'Add portfolio', 'profile.cards.new_title': 'New portfolio title', 'profile.cards.placeholder': 'e.g. Plumbing', 'profile.cards.create': 'Create', 'profile.cards.cancel': 'Cancel', 'profile.cards.empty': 'No portfolio yet', 'profile.cards.create_first': 'Create your first portfolio', 'profile.cards.delete_confirm': 'Delete portfolio?', '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.active': 'Active', '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.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.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.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': 'Specialists', '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 portfolio (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': 'Specialist', '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.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': 'Portfolio', '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': 'Specialists', '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.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 specialists', '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.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': 'Portfolio', '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': 'Portfolio', 'admin.user_edit.no_cards': 'No portfolio found', 'admin.user_edit.card_title': 'Portfolio 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.specialist': 'Specialist', '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.order': 'Order', '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': 'Specialists', '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.', // 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': 'Portfolio items', 'pricing.feat.cards': 'Specialist cards', 'pricing.feat.notify_tasks': 'New task notifications', 'pricing.feat.video': 'Video in portfolio', // 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.' }, 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.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': 'беÑÐ¿Ð»Ð°Ñ‚Ð½Ð°Ñ Ñ€ÐµÐ³Ð¸ÑтрациÑ', '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.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.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': 'ВернутьÑÑ Ðº входу', 'dashboard.title': 'Панель управлениÑ', 'dashboard.new_task': '+ ÐÐ¾Ð²Ð°Ñ Ð·Ð°Ð´Ð°Ñ‡Ð°', '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': 'Район работы', '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.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.body.new_offer': 'Ðовое предложение на «{title}»', 'notif.body.offer_accepted': 'Ваше предложение на «{title}» принÑто', 'notif.body.offer_declined': 'Ваше предложение на «{title}» отклонено', 'notif.body.task_invite': 'Ð’Ð°Ñ Ð¿Ñ€Ð¸Ð³Ð»Ð°ÑˆÐ°ÑŽÑ‚ на «{title}»', 'notif.body.new_review': 'Ð’Ñ‹ получили оценку {rating}★', '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.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': 'Ð‘Ð¸Ð¾Ð³Ñ€Ð°Ñ„Ð¸Ñ Ð¸ фото наÑтраиваютÑÑ Ð²Ð¾ вкладке «ОÑновное».', '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.create_first': 'Создать первое портфолио', 'profile.cards.delete_confirm': 'Удалить портфолио?', 'profile.card.tab.main': 'ОÑновное', 'profile.card.tab.skills': 'Ðавыки', 'profile.card.tab.categories': 'Категории', 'profile.card.tab.geography': 'ГеографиÑ', 'profile.card.tab.portfolio': 'ГалереÑ', 'profile.card.active': 'Ðктивна', '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.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.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.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.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.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.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.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.order': 'ПорÑдок', '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': 'Ð’Ñе права защищены.', // 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': 'Теперь вы можете получать заказы от клиентов. Ðайдите задачи, которые ÑоответÑтвуют вашим навыкам.' } }; export function getTranslations(locale) { var _translations_locale; const t = (_translations_locale = translations[locale]) !== null && _translations_locale !== void 0 ? _translations_locale : translations.el; return (key, fallback)=>{ var _t_key, _ref, _ref1; return (_ref1 = (_ref = (_t_key = t[key]) !== null && _t_key !== void 0 ? _t_key : translations.el[key]) !== null && _ref !== void 0 ? _ref : fallback) !== null && _ref1 !== void 0 ? _ref1 : key; }; } /06undefined268274undefined190664190670undefined RawSource /***/ }), /***/ 9906:  É2«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSourceQ/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { «webpack/lib/util/registerExternalSerializerœwebpack-sources/CachedSource _«webpack/lib/util/registerExternalSerializerœwebpack-sources/ConcatSource€«webpack/lib/util/registerExternalSerializer™webpack-sources/RawSourceh/* 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__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7541); /* harmony import */ var _lib_translations__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4962); «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 === null || match === void 0 ? void 0 : match[1]; return val && [ 'el', 'en', 'ru' ].includes(val) ? val : DEFAULT_LOCALE; } export function LocaleProvider(param) { let { children, initialLocale } = param; const router = useRouter(); const [locale, setLocaleState] = useState(initialLocale !== null && initialLocale !== void 0 ? initialLocale : DEFAULT_LOCALE); // Sync from cookie on mount (client-side) 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("".concat(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 = "".concat(COOKIE_KEY, "=").concat(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("".concat(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©JP²ºäëv~`~ƒ™þ3QVl& 0 C Q   6 B< _ h €€€€´(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)€†buffer†source„size„maps„hash@/* 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__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7541); /* harmony import */ var _lib_translations__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4962); /* __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 === null || match === void 0 ? void 0 : match[1]; return val && [ 'el', 'en', 'ru' ].includes(val) ? val : DEFAULT_LOCALE; } function LocaleProvider(param) { let { children, initialLocale } = param; const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)(); const [locale, setLocaleState] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(initialLocale !== null && initialLocale !== void 0 ? initialLocale : DEFAULT_LOCALE); // Sync from cookie on mount (client-side) (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("".concat(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 = "".concat(COOKIE_KEY, "=").concat(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("".concat(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}ƒmap‹bufferedMap ConcatSourceRawSourceh/* 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__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7541); /* harmony import */ var _lib_translations__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4962); 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 === null || match === void 0 ? void 0 : match[1]; return val && [ 'el', 'en', 'ru' ].includes(val) ? val : DEFAULT_LOCALE; } export function LocaleProvider(param) { let { children, initialLocale } = param; const router = useRouter(); const [locale, setLocaleState] = useState(initialLocale !== null && initialLocale !== void 0 ? initialLocale : DEFAULT_LOCALE); // Sync from cookie on mount (client-side) 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("".concat(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 = "".concat(COOKIE_KEY, "=").concat(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("".concat(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); } H78125undefined127210undefined212255undefined257309undefined413425(0,react__WEBPACK_IMPORTED_MODULE_1__.createContext)undefined842848undefined946954(0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)undefined9961003(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined11421150(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined13761406"https://api.canhelp.gr"undefined141114330undefined17901800(0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)undefined20992129"https://api.canhelp.gr"undefined213421560undefined25982608(0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)undefined26272641(0,_lib_translations__WEBPACK_IMPORTED_MODULE_3__/* .getTranslations */ .$)undefined27172720(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined28702876undefined29112920(0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)undefined /***/ }) ë›/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { /* 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__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7541); /* harmony import */ var _lib_translations__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4962); /* __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 === null || match === void 0 ? void 0 : match[1]; return val && [ 'el', 'en', 'ru' ].includes(val) ? val : DEFAULT_LOCALE; } function LocaleProvider(param) { let { children, initialLocale } = param; const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)(); const [locale, setLocaleState] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(initialLocale !== null && initialLocale !== void 0 ? initialLocale : DEFAULT_LOCALE); // Sync from cookie on mount (client-side) (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("".concat(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 = "".concat(COOKIE_KEY, "=").concat(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("".concat(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); } /***/ }) ìï  ðñðh/* 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__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7541); /* harmony import */ var _lib_translations__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4962); ò| /* __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 === null || match === void 0 ? void 0 : match[1]; return val && [ 'el', 'en', 'ru' ].includes(val) ? val : DEFAULT_LOCALE; } export function LocaleProvider(param) { let { children, initialLocale } = param; const router = useRouter(); const [locale, setLocaleState] = useState(initialLocale !== null && initialLocale !== void 0 ? initialLocale : DEFAULT_LOCALE); // Sync from cookie on mount (client-side) 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("".concat(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 = "".concat(COOKIE_KEY, "=").concat(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("".concat(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); } H78125undefined127210undefined212255undefined257309undefined413425(0,react__WEBPACK_IMPORTED_MODULE_1__.createContext)undefined842848undefined946954(0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)undefined9961003(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined11421150(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined13761406"https://api.canhelp.gr"undefined141114330undefined17901800(0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)undefined20992129"https://api.canhelp.gr"undefined213421560undefined25982608(0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)undefined26272641(0,_lib_translations__WEBPACK_IMPORTED_MODULE_3__/* .getTranslations */ .$)undefined27172720(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined28702876undefined29112920(0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)undefinedóô }]); ïþÿÿéŽ"use strict"; (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([[906],{ /***/ 4962: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { /* 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: '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.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': 'δωÏεάν εγγÏαφή', // 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.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.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': 'ΕπιστÏοφή στη σÏνδεση', // Dashboard 'dashboard.title': 'Πίνακας ελέγχου', 'dashboard.new_task': '+ Îέα εÏγασία', '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': 'ΠεÏιοχή εÏγασίας', '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.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.body.new_offer': 'Îέα Ï€ÏοσφοÏά για «{title}»', 'notif.body.offer_accepted': 'Η Ï€ÏοσφοÏά σας για «{title}» έγινε δεκτή', 'notif.body.offer_declined': 'Η Ï€ÏοσφοÏά σας για «{title}» αποÏÏίφθηκε', 'notif.body.task_invite': 'Σας Ï€ÏοσκαλοÏν για «{title}»', 'notif.body.new_review': 'Λάβατε αξιολόγηση {rating}★', // 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.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': 'Το βιογÏαφικό και η φωτογÏαφία Ïυθμίζονται στην καÏτέλα «Βασικά».', '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.create_first': 'ΔημιουÏγήστε το Ï€Ïώτο σας χαÏτοφυλάκιο', 'profile.cards.delete_confirm': 'ΔιαγÏαφή χαÏτοφυλακίου;', 'profile.card.tab.main': 'Γενικά', 'profile.card.tab.skills': 'Δεξιότητες', 'profile.card.tab.categories': 'ΚατηγοÏίες', 'profile.card.tab.geography': 'ΓεωγÏαφία', 'profile.card.tab.portfolio': 'ΓκαλεÏί', 'profile.card.active': 'ΕνεÏγή', '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.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.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.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.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.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.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.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.order': 'ΣειÏά', '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': 'Όλα τα δικαιώματα διατηÏοÏνται.', // 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': 'ΤώÏα μποÏείτε να λαμβάνετε παÏαγγελίες από πελάτες. Αναζητήστε εÏγασίες που ταιÏιάζουν με τις δεξιότητές σας.' }, 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': 'Dashboard', 'nav.chat': 'Messages', 'nav.notifications': 'Notifications', 'nav.profile': 'Profile', 'nav.admin': 'Admin Panel', 'nav.specialists': 'Specialists', 'nav.new_task': 'New task', 'nav.login': 'Login', 'nav.register': 'Register', 'nav.logout': 'Logout', 'hero.title': 'Find a specialist for any job', 'hero.subtitle': 'Post a task, receive offers and choose the best professional', 'hero.cta.post': 'Post a task', 'hero.cta.browse': 'Become a specialist', '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': 'specialists', 'stats.tasks': 'tasks', 'stats.categories': 'categories', 'stats.free': 'free sign-up', '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.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.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', 'dashboard.title': 'Dashboard', 'dashboard.new_task': '+ New 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', '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.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.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', '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': '🔧 Specialist', 'profile.role.admin': '👑 Admin', 'profile.role.customer': '👤 User', 'profile.role.change': 'To change your role please contact support.', 'profile.become_specialist': 'Become a Specialist', 'profile.become_specialist.desc': 'Upgrade to Specialist to take on tasks and build your profile.', 'become_specialist.hero.title': 'Earn money doing what you do best', 'become_specialist.hero.subtitle': 'Create a specialist profile and receive orders from clients across Greece', '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.', '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': 'Portfolio', 'profile.cards.count': 'Portfolio', 'profile.cards.add': 'Add portfolio', 'profile.cards.new_title': 'New portfolio title', 'profile.cards.placeholder': 'e.g. Plumbing', 'profile.cards.create': 'Create', 'profile.cards.cancel': 'Cancel', 'profile.cards.empty': 'No portfolio yet', 'profile.cards.create_first': 'Create your first portfolio', 'profile.cards.delete_confirm': 'Delete portfolio?', '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.active': 'Active', '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.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.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.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': 'Specialists', '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 portfolio (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': 'Specialist', '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.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': 'Portfolio', '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': 'Specialists', '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.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 specialists', '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.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': 'Portfolio', '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': 'Portfolio', 'admin.user_edit.no_cards': 'No portfolio found', 'admin.user_edit.card_title': 'Portfolio 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.specialist': 'Specialist', '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.order': 'Order', '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': 'Specialists', '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.', // 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': 'Portfolio items', 'pricing.feat.cards': 'Specialist cards', 'pricing.feat.notify_tasks': 'New task notifications', 'pricing.feat.video': 'Video in portfolio', // 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.' }, 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.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': 'беÑÐ¿Ð»Ð°Ñ‚Ð½Ð°Ñ Ñ€ÐµÐ³Ð¸ÑтрациÑ', '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.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.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': 'ВернутьÑÑ Ðº входу', 'dashboard.title': 'Панель управлениÑ', 'dashboard.new_task': '+ ÐÐ¾Ð²Ð°Ñ Ð·Ð°Ð´Ð°Ñ‡Ð°', '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': 'Район работы', '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.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.body.new_offer': 'Ðовое предложение на «{title}»', 'notif.body.offer_accepted': 'Ваше предложение на «{title}» принÑто', 'notif.body.offer_declined': 'Ваше предложение на «{title}» отклонено', 'notif.body.task_invite': 'Ð’Ð°Ñ Ð¿Ñ€Ð¸Ð³Ð»Ð°ÑˆÐ°ÑŽÑ‚ на «{title}»', 'notif.body.new_review': 'Ð’Ñ‹ получили оценку {rating}★', '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.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': 'Ð‘Ð¸Ð¾Ð³Ñ€Ð°Ñ„Ð¸Ñ Ð¸ фото наÑтраиваютÑÑ Ð²Ð¾ вкладке «ОÑновное».', '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.create_first': 'Создать первое портфолио', 'profile.cards.delete_confirm': 'Удалить портфолио?', 'profile.card.tab.main': 'ОÑновное', 'profile.card.tab.skills': 'Ðавыки', 'profile.card.tab.categories': 'Категории', 'profile.card.tab.geography': 'ГеографиÑ', 'profile.card.tab.portfolio': 'ГалереÑ', 'profile.card.active': 'Ðктивна', '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.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.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.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.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.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.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.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.order': 'ПорÑдок', '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': 'Ð’Ñе права защищены.', // 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': 'Теперь вы можете получать заказы от клиентов. Ðайдите задачи, которые ÑоответÑтвуют вашим навыкам.' } }; function getTranslations(locale) { var _translations_locale; const t = (_translations_locale = translations[locale]) !== null && _translations_locale !== void 0 ? _translations_locale : translations.el; return (key, fallback)=>{ var _t_key, _ref, _ref1; return (_ref1 = (_ref = (_t_key = t[key]) !== null && _t_key !== void 0 ? _t_key : translations.el[key]) !== null && _ref !== void 0 ? _ref : fallback) !== null && _ref1 !== void 0 ? _ref1 : key; }; } /***/ }), /***/ 9906: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { /* 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__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7541); /* harmony import */ var _lib_translations__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4962); /* __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 === null || match === void 0 ? void 0 : match[1]; return val && [ 'el', 'en', 'ru' ].includes(val) ? val : DEFAULT_LOCALE; } function LocaleProvider(param) { let { children, initialLocale } = param; const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)(); const [locale, setLocaleState] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(initialLocale !== null && initialLocale !== void 0 ? initialLocale : DEFAULT_LOCALE); // Sync from cookie on mount (client-side) (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("".concat(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 = "".concat(COOKIE_KEY, "=").concat(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("".concat(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); } /***/ }) }]); ž&ÿÿÿ `3ÿÿÿe"use strict"; (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([[906],{ /***/ 4962: 2ÿÿÿQ/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 1ÿÿÿ^ÿÿÿ%ÿÿÿþÿÿ_ÿÿÿŸ Ÿ, /***/ 9906: 0ÿÿÿþ0ÿÿÿh/* 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__(4568); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7620); /* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7541); /* harmony import */ var _lib_translations__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4962); #ÿÿÿ| /* __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 === null || match === void 0 ? void 0 : match[1]; return val && [ 'el', 'en', 'ru' ].includes(val) ? val : DEFAULT_LOCALE; } export function LocaleProvider(param) { let { children, initialLocale } = param; const router = useRouter(); const [locale, setLocaleState] = useState(initialLocale !== null && initialLocale !== void 0 ? initialLocale : DEFAULT_LOCALE); // Sync from cookie on mount (client-side) 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("".concat(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 = "".concat(COOKIE_KEY, "=").concat(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("".concat(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); } H78125undefined127210undefined212255undefined257309undefined413425(0,react__WEBPACK_IMPORTED_MODULE_1__.createContext)undefined842848undefined946954(0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)undefined9961003(0,react__WEBPACK_IMPORTED_MODULE_1__.useState)undefined11421150(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)undefined13761406"https://api.canhelp.gr"undefined141114330undefined17901800(0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)undefined20992129"https://api.canhelp.gr"undefined213421560undefined25982608(0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)undefined26272641(0,_lib_translations__WEBPACK_IMPORTED_MODULE_3__/* .getTranslations */ .$)undefined27172720(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)undefined28702876undefined29112920(0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)undefined›œ› }]);ßþÿÿ&›(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[177],{300:(e,t,s)=>{"use strict";s.d(t,{AdminRolePreview:()=>h});var n=s(4568),r=s(1592),a=s(7541),l=s(7620),o=s(2982);let i="canhelp_preview_role",c="canhelp_admin_orig_plan",d={free:"bg-slate-100 text-slate-600",pro:"bg-blue-100 text-blue-700",ultimate:"bg-amber-100 text-amber-700"};function h(){var e,t;let{data:s}=(0,r.wV)(),h=(0,a.useRouter)(),x=(null==s||null==(e=s.user)?void 0:e.role)==="admin",u=null==s||null==(t=s.user)?void 0:t.id,[m,p]=(0,l.useState)(null),[v,f]=(0,l.useState)([]),[g,k]=(0,l.useState)(null),[j,b]=(0,l.useState)(!1),[w,N]=(0,l.useState)(!1),y=(0,l.useRef)(null);if((0,l.useEffect)(()=>{p(function(){var e;if("undefined"==typeof document)return null;let t=document.cookie.match(/(?:^|;\s*)canhelp_preview_role=([^;]+)/);return null!=(e=null==t?void 0:t[1])?e:null}()),y.current=localStorage.getItem(c)},[]),(0,l.useEffect)(()=>{x&&(0,o.T9)().then(f).catch(()=>{})},[x]),(0,l.useEffect)(()=>{var e,t;k(null!=(t=null==s||null==(e=s.user)?void 0:e.planId)?t:null)},[s]),!x)return null;let C=e=>{m===e?(document.cookie="".concat(i,"=; path=/; max-age=0"),p(null),window.dispatchEvent(new CustomEvent("canhelp:preview-role",{detail:{role:null}}))):(document.cookie="".concat(i,"=").concat(e,"; path=/; max-age=86400"),p(e),window.dispatchEvent(new CustomEvent("canhelp:preview-role",{detail:{role:e}}))),h.refresh()},L=async e=>{if(u){b(!0);try{!y.current&&g&&(localStorage.setItem(c,g),y.current=g),await (0,o.wl)(u,{planId:e}),k(e),window.dispatchEvent(new CustomEvent("canhelp:plan-changed",{detail:{planId:e}})),h.refresh()}catch(e){}b(!1)}},M=async()=>{let e=y.current;localStorage.removeItem(c),y.current=null,await L(null!=e?e:null)},z=m?v.filter(e=>e.role===m):v,E=!!y.current;return(0,n.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,n.jsxs)("button",{onClick:()=>N(e=>!e),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,n.jsx)("span",{children:"\uD83D\uDC41 Preview"}),(0,n.jsx)("span",{className:"text-slate-300",children:w?"â–²":"â–¼"})]}),w&&(0,n.jsxs)("div",{className:"flex flex-col gap-1 px-2 pb-2 border-t border-slate-100 pt-2",children:[(0,n.jsx)("div",{className:"text-slate-400 px-1 mb-0.5",children:"Role"}),(0,n.jsx)("button",{onClick:()=>C("customer"),className:"px-3 py-1.5 rounded-xl transition text-left ".concat("customer"===m?"bg-blue-600 text-white":"text-slate-600 hover:bg-slate-100"),children:"Customer"}),(0,n.jsx)("button",{onClick:()=>C("specialist"),className:"px-3 py-1.5 rounded-xl transition text-left ".concat("specialist"===m?"bg-orange-500 text-white":"text-slate-600 hover:bg-slate-100"),children:"Specialist"}),m&&(0,n.jsx)("button",{onClick:()=>{document.cookie="".concat(i,"=; path=/; max-age=0"),p(null),h.refresh()},className:"px-3 py-1 rounded-xl text-slate-400 hover:text-red-500 hover:bg-red-50 transition text-left",children:"✕ Reset role"}),z.length>0&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("div",{className:"text-slate-400 px-1 mt-2 mb-0.5",children:"Plan"}),z.map(e=>{var t;return(0,n.jsxs)("button",{disabled:j,onClick:()=>L(e.id===g?null:e.id),className:"flex items-center justify-between gap-2 px-3 py-1.5 rounded-xl transition text-left ".concat(g===e.id?"bg-indigo-600 text-white":"text-slate-600 hover:bg-slate-100"," ").concat(j?"opacity-50":""),children:[(0,n.jsx)("span",{className:"truncate max-w-[90px]",children:e.name}),(0,n.jsx)("span",{className:"px-1.5 py-0.5 rounded-full text-[10px] font-semibold ".concat(g===e.id?"bg-white/20 text-white":null!=(t=d[e.tier])?t:d.free),children:e.tier})]},e.id)}),g&&(0,n.jsx)("button",{disabled:j,onClick:()=>L(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"}),E&&(0,n.jsx)("button",{disabled:j,onClick:M,className:"px-3 py-1 rounded-xl text-green-600 hover:bg-green-50 transition text-left",children:"↩ Restore"})]})]})]})}},1258:(e,t,s)=>{"use strict";function n(e){if(!(null==e?void 0:e.trim()))return"—";let t=e.trim().split(/\s+/);return t.length<2||!t[1]?t[0]:"".concat(t[0]," ").concat(t[1][0].toUpperCase(),".")}function r(e,t,s){if(null==e?void 0:e.trim()){let s=null==t?void 0:t.trim();return s?"".concat(e.trim()," ").concat(s[0].toUpperCase(),"."):e.trim()}return n(s)}s.d(t,{E:()=>n,H:()=>r})},1592:(e,t,s)=>{"use strict";s.d(t,{CI:()=>a,Hh:()=>l,Jv:()=>r,wV:()=>o,yK:()=>n});let n=(0,s(6504).M)({baseURL:"https://api.canhelp.gr"}),{signIn:r,signOut:a,signUp:l,useSession:o}=n},2568:(e,t,s)=>{Promise.resolve().then(s.t.bind(s,8761,23)),Promise.resolve().then(s.bind(s,300)),Promise.resolve().then(s.bind(s,9808)),Promise.resolve().then(s.bind(s,7443)),Promise.resolve().then(s.bind(s,7380)),Promise.resolve().then(s.bind(s,9906)),Promise.resolve().then(s.bind(s,4029))},4029:(e,t,s)=>{"use strict";s.d(t,{LocationProvider:()=>o,z:()=>i});var n=s(4568),r=s(7620),a=s(2982);let l=(0,r.createContext)({locationSlug:"",locationTree:[],locationLoading:!0,setLocation:()=>{},getLabel:()=>""});function o(e){let{children:t,initialSlug:s=""}=e,[o,i]=(0,r.useState)(s),[c,d]=(0,r.useState)([]),[h,x]=(0,r.useState)(!0);(0,r.useEffect)(()=>{i(function(){if("undefined"==typeof document)return"";let e=document.cookie.match(/(?:^|;\s*)canhelp_location=([^;]+)/);return(null==e?void 0:e[1])?decodeURIComponent(e[1]):""}())},[]),(0,r.useEffect)(()=>{(0,a.Vs)().then(e=>d(e)).catch(()=>{}).finally(()=>x(!1))},[]);let u=(0,r.useCallback)(e=>{i(e);let t=encodeURIComponent(e);document.cookie="canhelp_location=".concat(t,"; path=/; max-age=31536000; SameSite=Lax")},[]),m=(0,r.useCallback)(e=>{if(!o)return"";for(let r of c){var t,s,n;if(r.slug===o)return null!=(t=r.names[e])?t:r.names.el;for(let t of null!=(s=r.children)?s:[])if(t.slug===o)return null!=(n=t.names[e])?n:t.names.el}return o},[o,c]);return(0,n.jsx)(l.Provider,{value:{locationSlug:o,locationTree:c,locationLoading:h,setLocation:u,getLabel:m},children:t})}function i(){return(0,r.useContext)(l)}},7380:(e,t,s)=>{"use strict";s.d(t,{ScrollToTopButton:()=>a});var n=s(4568),r=s(7620);function a(){let[e,t]=(0,r.useState)(!1);return(0,r.useEffect)(()=>{let e=()=>{t(window.scrollY>200)};return window.addEventListener("scroll",e),()=>window.removeEventListener("scroll",e)},[]),(0,n.jsx)("button",{className:"scroll-to-top-btn".concat(e?" visible":""),"aria-label":"Ðаверх",onClick:()=>window.scrollTo({top:0,behavior:"smooth"}),children:(0,n.jsx)("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:(0,n.jsx)("path",{d:"M10 16V4M10 4L4 10M10 4L16 10",stroke:"white",strokeWidth:"2.8",strokeLinecap:"round",strokeLinejoin:"round"})})})}},7443:(e,t,s)=>{"use strict";s.d(t,{Header:()=>v});var n=s(4568),r=s(9664),a=s.n(r),l=s(7541),o=s(1592),i=s(9906),c=s(1258),d=s(7620),h=s(4962);function x(){var e;let{locale:t,setLocale:s}=(0,i.Y)(),[r,a]=(0,d.useState)(!1),l=(0,d.useRef)(null),o=null!=(e=h.YZ.find(e=>e.code===t))?e:h.YZ[0];return(0,d.useEffect)(()=>{function e(e){l.current&&!l.current.contains(e.target)&&a(!1)}return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[]),(0,n.jsxs)("div",{ref:l,className:"relative",children:[(0,n.jsxs)("button",{onClick:()=>a(!r),className:"flex items-center gap-1.5 px-2.5 py-1.5 rounded-lg border border-gray-200 hover:border-blue-400 hover:bg-blue-50 transition text-sm font-medium text-gray-700","aria-label":"Change language",children:[(0,n.jsx)("span",{children:o.code.toUpperCase()}),(0,n.jsx)("svg",{className:"w-3.5 h-3.5 text-gray-400 transition-transform ".concat(r?"rotate-180":""),fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:(0,n.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19 9l-7 7-7-7"})})]}),r&&(0,n.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:h.YZ.map(e=>(0,n.jsxs)("button",{onClick:()=>{s(e.code),a(!1)},className:"w-full flex items-center gap-2.5 px-3.5 py-2.5 text-sm hover:bg-blue-50 transition ".concat(t===e.code?"bg-blue-50 text-blue-700 font-medium":"text-gray-700"),children:[(0,n.jsx)("span",{children:e.label}),t===e.code&&(0,n.jsx)("svg",{className:"w-3.5 h-3.5 ml-auto text-blue-600",fill:"currentColor",viewBox:"0 0 20 20",children:(0,n.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"})})]},e.code))})]})}var u=s(2982),m=s(2838),p=s(7795);function v(){var e;(0,l.useRouter)();let t=(0,l.usePathname)(),{data:s}=(0,o.wV)(),{t:r,locale:h}=(0,i.Y)(),[v,f]=(0,d.useState)(!1),[g,k]=(0,d.useState)(!1),[j,b]=(0,d.useState)(0),[w,N]=(0,d.useState)(0),[y,C]=(0,d.useState)(null),[L,M]=(0,d.useState)(null),z=(0,d.useRef)(null),E=(0,d.useRef)(null),B=(0,d.useRef)(null),W=(0,d.useRef)(t);(0,d.useEffect)(()=>{W.current=t},[t]),(0,d.useEffect)(()=>{function e(e){z.current&&!z.current.contains(e.target)&&k(!1)}return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[]);let H=(null==s||null==(e=s.user)?void 0:e.role)==="admin",_="specialist"===(0,p.F)(),S=function(e){let s=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return s?t===e:t===e||t.startsWith(e+"/")},V=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return"font-medium text-sm transition ".concat(S(e,t)?"text-blue-600":"text-gray-600 hover:text-blue-600")},F=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return"flex items-center gap-2 font-medium py-1 ".concat(S(e,t)?"text-blue-600":"text-gray-700")};return(0,d.useEffect)(()=>{"/chat"===t&&N(0)},[t]),(0,d.useEffect)(()=>{if(!s)return;let e=(0,m.io)("https://api.canhelp.gr",{withCredentials:!0,transports:["websocket","polling"]});return e.on("new_message",e=>{"/chat"!==W.current&&(N(e=>e+1),B.current&&clearTimeout(B.current),C(e),B.current=setTimeout(()=>C(null),5e3))}),()=>{e.disconnect(),B.current&&clearTimeout(B.current)}},[s]),(0,d.useEffect)(()=>{if(!s)return void b(0);let e=()=>(0,u.$M)().then(e=>b(e.count)).catch(()=>{});e();let t=setInterval(e,3e4);return()=>clearInterval(t)},[s]),(0,d.useEffect)(()=>{if(!s)return void M(null);(0,u.H)().then(e=>{var t,s;return M(null!=(s=null==(t=e.plan)?void 0:t.tier)?s:null)}).catch(()=>{})},[s]),(0,d.useEffect)(()=>{let e=()=>{E.current&&(window.scrollY>40?E.current.classList.add("header-shrink"):E.current.classList.remove("header-shrink"))};return window.addEventListener("scroll",e),()=>window.removeEventListener("scroll",e)},[]),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("header",{ref:E,className:"header-base bg-white border-b border-gray-200 sticky top-0 z-50 transition-all duration-300",children:(0,n.jsxs)("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:[(0,n.jsxs)("div",{className:"flex items-center justify-between h-16 header-content transition-all duration-300",children:[(0,n.jsx)(a(),{href:"/",className:"flex items-center shrink-0",children:(0,n.jsx)("span",{className:"logo-text text-2xl font-bold text-blue-600 transition-all duration-300",children:"CanHelp"})}),(0,n.jsxs)("nav",{className:"hidden md:flex items-center gap-5 ml-auto",children:[_?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a(),{href:"/tasks",className:V("/tasks"),children:r("nav.find_tasks")}),(0,n.jsx)(a(),{href:"/dashboard",className:V("/dashboard"),children:r("nav.dashboard")})]}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a(),{href:"/tasks/new",className:V("/tasks/new",!0),children:r("dashboard.new_task")}),(0,n.jsx)(a(),{href:"/specialists",className:V("/specialists"),children:r("nav.specialists")})]}),(0,n.jsx)(a(),{href:"/pricing",className:V("/pricing",!0),children:r("nav.pricing","Pricing")}),s?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(a(),{href:"/notifications",className:"relative text-gray-600 hover:text-gray-900 flex items-center",children:[(0,n.jsx)("svg",{className:"w-5 h-5 ".concat(j>0?"text-orange-500":""),fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.5,children:(0,n.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"})}),j>0&&(0,n.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:j>99?"99+":j})]}),(0,n.jsxs)(a(),{href:"/chat",className:"relative text-gray-600 hover:text-gray-900 flex items-center",children:[(0,n.jsx)("svg",{className:"w-5 h-5 ".concat(w>0?"text-green-500":""),fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.5,children:(0,n.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"})}),w>0&&(0,n.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:w>99?"99+":w})]}),(0,n.jsxs)("div",{className:"relative",ref:z,children:[(0,n.jsxs)("button",{onClick:()=>k(!g),className:"flex items-center gap-1.5 text-sm font-medium text-gray-600 hover:text-blue-600",children:[(0,n.jsx)("span",{className:"truncate max-w-[100px]",children:(0,c.H)(s.user.firstName,s.user.lastName,s.user.name)}),"pro"===L&&(0,n.jsx)("span",{className:"inline-flex items-center px-1.5 py-0.5 rounded-full text-[10px] font-bold bg-blue-100 text-blue-700 leading-none",children:"Pro"}),"ultimate"===L&&(0,n.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,n.jsx)("svg",{className:"w-4 h-4 shrink-0",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:(0,n.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19 9l-7 7-7-7"})})]}),g&&(0,n.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:[_?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(a(),{href:"/tasks/new",className:"flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50",onClick:()=>k(!1),children:[(0,n.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,n.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 4v16m8-8H4"})}),r("nav.new_task")]}),(0,n.jsxs)(a(),{href:"/specialists",className:"flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50",onClick:()=>k(!1),children:[(0,n.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,n.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"})}),r("nav.specialists")]})]}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(a(),{href:"/notifications",className:"flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50",onClick:()=>k(!1),children:[(0,n.jsx)("svg",{className:"w-4 h-4 shrink-0 ".concat(j>0?"text-orange-500":"text-gray-400"),fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:(0,n.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,n.jsxs)("span",{className:"flex items-center gap-1.5",children:[r("nav.notifications"),j>0&&(0,n.jsx)("span",{className:"px-1.5 py-0.5 bg-red-500 text-white text-[10px] font-bold rounded-full leading-none",children:j>99?"99+":j})]})]}),(0,n.jsxs)(a(),{href:"/chat",className:"flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50",onClick:()=>k(!1),children:[(0,n.jsx)("svg",{className:"w-4 h-4 shrink-0 ".concat(w>0?"text-green-500":"text-gray-400"),fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:(0,n.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,n.jsxs)("span",{className:"flex items-center gap-1.5",children:[r("nav.chat"),w>0&&(0,n.jsx)("span",{className:"px-1.5 py-0.5 bg-green-500 text-white text-[10px] font-bold rounded-full leading-none",children:w>99?"99+":w})]})]}),(0,n.jsxs)(a(),{href:"/dashboard",className:"flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50",onClick:()=>k(!1),children:[(0,n.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,n.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"})}),r("nav.dashboard")]})]}),H&&(0,n.jsxs)(a(),{href:"/tasks",className:"flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50",onClick:()=>k(!1),children:[(0,n.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,n.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"})}),r("nav.find_tasks")]}),(_||H)&&(0,n.jsxs)(a(),{href:"/schedule",className:"flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50",onClick:()=>k(!1),children:[(0,n.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,n.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"})}),r("nav.schedule")]}),H&&(0,n.jsxs)(a(),{href:"/admin",className:"flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50",onClick:()=>k(!1),children:[(0,n.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,n.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,n.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"})]}),r("nav.admin")]}),(0,n.jsxs)(a(),{href:"/profile",className:"flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50",onClick:()=>k(!1),children:[(0,n.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,n.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"})}),r("nav.profile")]}),(0,n.jsxs)(a(),{href:"/favorites",className:"flex items-center gap-2.5 px-4 py-2 text-sm text-gray-700 hover:bg-gray-50",onClick:()=>k(!1),children:[(0,n.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,n.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"})}),r("nav.favorites")]}),(0,n.jsx)("hr",{className:"my-1 border-gray-100"}),(0,n.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:()=>{k(!1),(0,o.CI)().then(()=>{window.location.href="/"})},children:[(0,n.jsx)("svg",{className:"w-4 h-4 shrink-0",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:(0,n.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"})}),r("nav.logout")]})]})]})]}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a(),{href:"/login",className:"text-gray-600 hover:text-blue-600 font-medium text-sm",children:r("nav.login")}),(0,n.jsx)(a(),{href:"/register",className:"bg-blue-600 text-white px-4 py-2 rounded-lg hover:bg-blue-700 font-medium text-sm",children:r("nav.register")})]}),(0,n.jsx)(x,{})]}),(0,n.jsxs)("div",{className:"md:hidden flex items-center gap-2",children:[(0,n.jsx)(x,{}),(0,n.jsx)("button",{className:"p-2",onClick:()=>f(!v),"aria-label":"Toggle menu",children:(0,n.jsx)("svg",{className:"w-5 h-5 text-gray-600",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:v?(0,n.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 18L18 6M6 6l12 12"}):(0,n.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M4 6h16M4 12h16M4 18h16"})})})]})]}),v&&(0,n.jsxs)("div",{className:"md:hidden py-4 border-t border-gray-100 flex flex-col gap-3",children:[_?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(a(),{href:"/tasks",className:F("/tasks"),onClick:()=>f(!1),children:[(0,n.jsx)("svg",{className:"w-4 h-4 shrink-0",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:(0,n.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"})}),r("nav.find_tasks")]}),(0,n.jsxs)(a(),{href:"/dashboard",className:F("/dashboard"),onClick:()=>f(!1),children:[(0,n.jsx)("svg",{className:"w-4 h-4 shrink-0",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:(0,n.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"})}),r("nav.dashboard")]})]}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(a(),{href:"/tasks/new",className:F("/tasks/new",!0),onClick:()=>f(!1),children:[(0,n.jsx)("svg",{className:"w-4 h-4 shrink-0",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:(0,n.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 4v16m8-8H4"})}),r("nav.new_task")]}),(0,n.jsxs)(a(),{href:"/specialists",className:F("/specialists"),onClick:()=>f(!1),children:[(0,n.jsx)("svg",{className:"w-4 h-4 shrink-0",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:(0,n.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"})}),r("nav.specialists")]})]}),s?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(a(),{href:"/chat",className:F("/chat",!0),onClick:()=>f(!1),children:[(0,n.jsx)("svg",{className:"w-4 h-4 shrink-0 ".concat(w>0?"text-green-500":""),fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:(0,n.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"})}),r("nav.chat"),w>0&&(0,n.jsx)("span",{className:"ml-1 px-1.5 py-0.5 bg-green-500 text-white text-[10px] font-bold rounded-full",children:w})]}),_?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(a(),{href:"/tasks/new",className:F("/tasks/new",!0),onClick:()=>f(!1),children:[(0,n.jsx)("svg",{className:"w-4 h-4 shrink-0",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:(0,n.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 4v16m8-8H4"})}),r("nav.new_task")]}),(0,n.jsxs)(a(),{href:"/specialists",className:F("/specialists"),onClick:()=>f(!1),children:[(0,n.jsx)("svg",{className:"w-4 h-4 shrink-0",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:(0,n.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"})}),r("nav.specialists")]})]}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(a(),{href:"/notifications",className:F("/notifications",!0),onClick:()=>f(!1),children:[(0,n.jsx)("svg",{className:"w-4 h-4 shrink-0 ".concat(j>0?"text-orange-500":""),fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:(0,n.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,n.jsxs)("span",{className:"flex items-center gap-1.5",children:[r("nav.notifications"),j>0&&(0,n.jsx)("span",{className:"px-1.5 py-0.5 bg-red-500 text-white text-[10px] font-bold rounded-full",children:j>99?"99+":j})]})]}),(0,n.jsxs)(a(),{href:"/dashboard",className:F("/dashboard"),onClick:()=>f(!1),children:[(0,n.jsx)("svg",{className:"w-4 h-4 shrink-0",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:(0,n.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"})}),r("nav.dashboard")]})]}),(0,n.jsxs)(a(),{href:"/favorites",className:F("/favorites",!0),onClick:()=>f(!1),children:[(0,n.jsx)("svg",{className:"w-4 h-4 shrink-0",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:(0,n.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"})}),r("nav.favorites")]}),(_||H)&&(0,n.jsxs)(a(),{href:"/schedule",className:F("/schedule",!0),onClick:()=>f(!1),children:[(0,n.jsx)("svg",{className:"w-4 h-4 text-gray-400",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:(0,n.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"})}),r("nav.schedule")]}),H&&(0,n.jsxs)(a(),{href:"/admin",className:F("/admin"),onClick:()=>f(!1),children:[(0,n.jsxs)("svg",{className:"w-4 h-4 text-gray-400",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:[(0,n.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,n.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"})]}),r("nav.admin")]}),(0,n.jsxs)(a(),{href:"/profile",className:F("/profile",!0),onClick:()=>f(!1),children:[(0,n.jsx)("svg",{className:"w-4 h-4 text-gray-400",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:(0,n.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"})}),r("nav.profile")]}),(0,n.jsxs)("button",{onClick:()=>{f(!1),(0,o.CI)().then(()=>{window.location.href="/"})},className:"flex items-center gap-2 text-left text-red-500 py-1 font-medium",children:[(0,n.jsx)("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.8,children:(0,n.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"})}),r("nav.logout")]})]}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a(),{href:"/login",className:"text-gray-700 font-medium py-1",onClick:()=>f(!1),children:r("nav.login")}),(0,n.jsx)(a(),{href:"/register",className:"text-blue-600 font-medium py-1",onClick:()=>f(!1),children:r("nav.register")})]})]})]})}),y&&(0,n.jsx)("div",{className:"fixed bottom-5 right-5 z-[200] max-w-sm w-full",children:(0,n.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,n.jsx)("span",{className:"text-2xl shrink-0",children:"\uD83D\uDCAC"}),(0,n.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,n.jsx)("p",{className:"font-semibold text-gray-900 text-sm",children:r("chat.toast_title")}),(0,n.jsx)("p",{className:"text-xs text-gray-500 truncate mt-0.5",children:y.body})]}),(0,n.jsxs)("div",{className:"flex flex-col items-end gap-2 shrink-0",children:[(0,n.jsx)("button",{onClick:()=>C(null),className:"text-gray-400 hover:text-gray-600 text-lg leading-none","aria-label":"close",children:"\xd7"}),(0,n.jsx)(a(),{href:"/chat?room=".concat(y.roomId),onClick:()=>C(null),className:"text-xs text-blue-600 hover:underline font-medium",children:r("chat.toast_open")})]})]})})]})}},7795:(e,t,s)=>{"use strict";s.d(t,{F:()=>l});var n=s(1592),r=s(7620);function a(){var e;if("undefined"==typeof document)return null;let t=document.cookie.match(/(?:^|;\s*)canhelp_preview_role=([^;]+)/);return null!=(e=null==t?void 0:t[1])?e:null}function l(){var e;let{data:t}=(0,n.wV)(),s=null==t||null==(e=t.user)?void 0:e.role,l="admin"===s,[o,i]=(0,r.useState)(null);return((0,r.useEffect)(()=>{if(!l)return;i(a());let e=()=>i(a());return window.addEventListener("canhelp:preview-role",e),document.addEventListener("visibilitychange",e),()=>{window.removeEventListener("canhelp:preview-role",e),document.removeEventListener("visibilitychange",e)}},[l]),s)?l&&o?o:s:null}},8761:()=>{},9808:(e,t,s)=>{"use strict";s.d(t,{Footer:()=>d});var n=s(4568),r=s(9906),a=s(7620),l=s(9664),o=s.n(l);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-blue-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 c(e){let{className:t="",links:s}=e,r=i.filter(e=>{let{key:t}=e;return null==s?void 0:s[t]});return 0===r.length?null:(0,n.jsx)("div",{className:"flex gap-4 flex-wrap ".concat(t),children:r.map(e=>{let{key:t,label:r,hoverClass:a,svg:l}=e;return(0,n.jsx)("a",{href:s[t],target:"_blank",rel:"noopener noreferrer","aria-label":r,className:"text-gray-500 transition ".concat(a),children:(0,n.jsx)("svg",{width:"22",height:"22",viewBox:"0 0 24 24",fill:"currentColor",dangerouslySetInnerHTML:{__html:l}})},t)})})}function d(){let{t:e}=(0,r.Y)(),t=new Date().getFullYear(),[s,l]=(0,a.useState)({});return(0,a.useEffect)(()=>{fetch("".concat("https://api.canhelp.gr","/api/admin/social-public")).then(e=>e.ok?e.json():{}).then(e=>{let t={};for(let[s,n]of Object.entries(e))n&&(t[s.replace("social.","")]=n);l(t)}).catch(()=>{})},[]),(0,n.jsx)("footer",{className:"bg-white border-t border-gray-200 mt-16",children:(0,n.jsxs)("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12",children:[(0,n.jsxs)("div",{className:"flex flex-col md:flex-row justify-between items-start gap-10",children:[(0,n.jsxs)("div",{className:"flex-1 min-w-[200px] flex flex-col items-start",children:[(0,n.jsx)("span",{className:"logo-text text-3xl text-blue-700 font-bold mb-2",children:"CanHelp"}),(0,n.jsx)("p",{className:"text-base text-gray-600 mb-4",children:e("footer.slogan")})]}),(0,n.jsxs)("div",{className:"flex-1 min-w-[180px]",children:[(0,n.jsx)("h3",{className:"text-lg font-semibold text-blue-900 mb-3",children:e("footer.links")}),(0,n.jsxs)("ul",{className:"space-y-2",children:[(0,n.jsx)("li",{children:(0,n.jsx)(o(),{href:"/",className:"hover:text-blue-600 transition",children:e("nav.home")})}),(0,n.jsx)("li",{children:(0,n.jsx)(o(),{href:"/tasks",className:"hover:text-blue-600 transition",children:e("nav.tasks")})}),(0,n.jsx)("li",{children:(0,n.jsx)(o(),{href:"/become-specialist",className:"hover:text-blue-600 transition",children:e("nav.specialists")})}),(0,n.jsx)("li",{children:(0,n.jsx)(o(),{href:"/pricing",className:"hover:text-blue-600 transition",children:e("nav.pricing")})})]})]}),(0,n.jsxs)("div",{className:"flex-1 min-w-[180px]",children:[(0,n.jsx)("h3",{className:"text-lg font-semibold text-blue-900 mb-3",children:e("footer.socials")}),(0,n.jsx)("p",{className:"text-gray-500 text-sm mb-2",children:"info@canhelp.gr"}),(0,n.jsx)(c,{className:"mt-2",links:s})]})]}),(0,n.jsxs)("div",{className:"mt-10 border-t border-gray-100 pt-6 text-center text-gray-400 text-sm",children:["\xa9 ",t," CanHelp. ",e("footer.rights")]})]})})}}},e=>{e.O(0,[950,516,664,838,906,982,587,18,358],()=>e(e.s=2568)),_N_E=e.O()}]); ÜþÿÿØ(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[974],{912:(e,t,n)=>{"use strict";n.d(t,{ShareButton:()=>r});var s=n(4568),l=n(7620);function r(e){let{label:t,copiedLabel:n}=e,[r,a]=(0,l.useState)(!1),o=async()=>{let e=window.location.origin;if(navigator.share)try{await navigator.share({url:e,title:"CanHelp"});return}catch(e){}await navigator.clipboard.writeText(e),a(!0),setTimeout(()=>a(!1),2500)};return(0,s.jsx)("button",{type:"button",onClick:o,className:"inline-flex items-center gap-2 bg-amber-500 text-white px-8 py-3.5 rounded-2xl font-bold text-base hover:bg-amber-600 transition shadow-md shadow-amber-500/25 active:scale-95",children:r?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("span",{className:"text-lg",children:"✓"}),n]}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("span",{className:"text-lg",children:"\uD83D\uDD17"}),t]})})}},1592:(e,t,n)=>{"use strict";n.d(t,{CI:()=>r,Hh:()=>a,Jv:()=>l,wV:()=>o,yK:()=>s});let s=(0,n(6504).M)({baseURL:"https://api.canhelp.gr"}),{signIn:l,signOut:r,signUp:a,useSession:o}=s},2294:(e,t,n)=>{"use strict";n.d(t,{HomeCityCloud:()=>o});var s=n(4568),l=n(7541),r=n(4029),a=n(9906);function o(e){let{locationTree:t,isSpecialist:n=!1}=e,o=(0,l.useRouter)(),{setLocation:i}=(0,r.z)(),{locale:u}=(0,a.Y)(),c=e=>{n?o.push("/tasks?location=".concat(e)):(i(e),o.push("/tasks/new"))};return t.length?(0,s.jsx)("div",{className:"flex flex-wrap justify-center gap-3",children:t.map(e=>{var t,n;return(0,s.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,s.jsxs)("button",{type:"button",onClick:()=>c(e.slug),className:"inline-flex items-center gap-1 px-4 py-2 rounded-full bg-indigo-100 text-indigo-700 font-semibold text-sm hover:bg-indigo-200 transition cursor-pointer",children:["\uD83D\uDCCD ",null!=(t=e.names[u])?t:e.names.el]}),(null!=(n=e.children)?n:[]).map(e=>{var t;return(0,s.jsx)("button",{type:"button",onClick:()=>c(e.slug),className:"inline-flex items-center px-3 py-1.5 rounded-full bg-slate-100 text-slate-700 text-sm hover:bg-indigo-100 hover:text-indigo-700 transition cursor-pointer",children:null!=(t=e.names[u])?t:e.names.el},e.id)})]},e.id)})}):null}},3875:(e,t,n)=>{Promise.resolve().then(n.bind(n,6811)),Promise.resolve().then(n.bind(n,9869)),Promise.resolve().then(n.bind(n,6787)),Promise.resolve().then(n.bind(n,2294)),Promise.resolve().then(n.bind(n,912)),Promise.resolve().then(n.t.bind(n,9664,23))},4029:(e,t,n)=>{"use strict";n.d(t,{LocationProvider:()=>o,z:()=>i});var s=n(4568),l=n(7620),r=n(2982);let a=(0,l.createContext)({locationSlug:"",locationTree:[],locationLoading:!0,setLocation:()=>{},getLabel:()=>""});function o(e){let{children:t,initialSlug:n=""}=e,[o,i]=(0,l.useState)(n),[u,c]=(0,l.useState)([]),[d,h]=(0,l.useState)(!0);(0,l.useEffect)(()=>{i(function(){if("undefined"==typeof document)return"";let e=document.cookie.match(/(?:^|;\s*)canhelp_location=([^;]+)/);return(null==e?void 0:e[1])?decodeURIComponent(e[1]):""}())},[]),(0,l.useEffect)(()=>{(0,r.Vs)().then(e=>c(e)).catch(()=>{}).finally(()=>h(!1))},[]);let p=(0,l.useCallback)(e=>{i(e);let t=encodeURIComponent(e);document.cookie="canhelp_location=".concat(t,"; path=/; max-age=31536000; SameSite=Lax")},[]),m=(0,l.useCallback)(e=>{if(!o)return"";for(let l of u){var t,n,s;if(l.slug===o)return null!=(t=l.names[e])?t:l.names.el;for(let t of null!=(n=l.children)?n:[])if(t.slug===o)return null!=(s=t.names[e])?s:t.names.el}return o},[o,u]);return(0,s.jsx)(a.Provider,{value:{locationSlug:o,locationTree:u,locationLoading:d,setLocation:p,getLabel:m},children:t})}function i(){return(0,l.useContext)(a)}},6787:(e,t,n)=>{"use strict";n.d(t,{HeroSearch:()=>a});var s=n(4568),l=n(7620),r=n(7541);function a(e){let{placeholder:t,mode:n="customer"}=e,[a,o]=(0,l.useState)(""),i=(0,r.useRouter)();return(0,s.jsxs)("form",{onSubmit:e=>{e.preventDefault();let t=a.trim();"specialist"===n?t?i.push("/tasks?q=".concat(encodeURIComponent(t))):i.push("/tasks"):t?i.push("/specialists?q=".concat(encodeURIComponent(t))):i.push("/specialists")},className:"relative w-full mb-8",children:[(0,s.jsx)("input",{type:"text",value:a,onChange:e=>o(e.target.value),placeholder:t,className:"w-full pl-5 pr-14 py-3.5 rounded-2xl border border-blue-200 bg-white/90 text-blue-900 placeholder:text-blue-300 focus:outline-none focus:ring-2 focus:ring-blue-400 text-base shadow-sm"}),(0,s.jsx)("button",{type:"submit",className:"absolute right-2 top-1/2 -translate-y-1/2 bg-blue-600 hover:bg-blue-700 text-white p-2.5 rounded-xl transition-colors duration-200","aria-label":"Search",children:(0,s.jsx)("svg",{className:"w-5 h-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2.5,children:(0,s.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 5.196a7.5 7.5 0 0010.607 10.607z"})})})]})}},6811:(e,t,n)=>{"use strict";n.d(t,{BecomeSpecialistButton:()=>o});var s=n(4568),l=n(1592),r=n(7541),a=n(9906);function o(e){let{className:t}=e,{data:n,isPending:o}=(0,l.wV)(),i=(0,r.useRouter)(),{t:u}=(0,a.Y)();return(0,s.jsx)("button",{type:"button",onClick:function(){o||(n?i.push("/become-specialist"):i.push("/register?role=specialist"))},className:null!=t?t:"btn-outline w-full sm:w-auto text-center",children:u("hero.cta.browse")})}},9869:(e,t,n)=>{"use strict";n.d(t,{FaqAccordion:()=>r});var s=n(4568),l=n(7620);function r(e){let{items:t}=e,[n,r]=(0,l.useState)(null);return(0,s.jsx)("div",{className:"space-y-3",children:t.map((e,t)=>{let l=n===t;return(0,s.jsxs)("div",{className:"modern-card overflow-hidden transition-all duration-200",children:[(0,s.jsxs)("button",{type:"button",className:"w-full flex items-center justify-between gap-4 px-6 py-5 text-left",onClick:()=>r(l?null:t),children:[(0,s.jsx)("span",{className:"font-semibold text-blue-900 text-base leading-snug",children:e.q}),(0,s.jsx)("span",{className:"shrink-0 w-6 h-6 rounded-full bg-blue-50 flex items-center justify-center transition-transform ".concat(l?"rotate-45":""),children:(0,s.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",children:(0,s.jsx)("path",{d:"M7 2v10M2 7h10",stroke:"#2563EB",strokeWidth:"2",strokeLinecap:"round"})})})]}),l&&(0,s.jsx)("div",{className:"px-6 pb-5 text-blue-700 text-sm leading-relaxed border-t border-blue-50 pt-4",children:e.a})]},t)})})}}},e=>{e.O(0,[516,664,906,982,587,18,358],()=>e(e.s=3875)),_N_E=e.O()}]); Ùþÿÿ*@(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[907],{160:(e,t,r)=>{Promise.resolve().then(r.bind(r,8880))},1592:(e,t,r)=>{"use strict";r.d(t,{CI:()=>n,Hh:()=>s,Jv:()=>l,wV:()=>i,yK:()=>a});let a=(0,r(6504).M)({baseURL:"https://api.canhelp.gr"}),{signIn:l,signOut:n,signUp:s,useSession:i}=a},2035:(e,t,r)=>{"use strict";r.d(t,{d:()=>n});var a=r(4568);let l={free:{label:"Free",class:"bg-gray-100 text-gray-500 border border-gray-200",icon:""},pro:{label:"Pro",class:"bg-blue-100 text-blue-700 border border-blue-200",icon:(0,a.jsx)("svg",{viewBox:"0 0 16 16",fill:"none",className:"w-3 h-3 inline-block mr-0.5 -mt-px",children:(0,a.jsx)("path",{d:"M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.5l-3.7 1.9.7-4.1-3-2.9 4.2-.9L8 1z",fill:"currentColor"})})},ultimate:{label:"Ultimate",class:"bg-gradient-to-r from-amber-400 via-yellow-400 to-amber-400 text-gray-900 border border-amber-500 shadow-sm shadow-amber-300/50",icon:(0,a.jsx)("svg",{viewBox:"0 0 16 16",fill:"none",className:"w-3 h-3 inline-block mr-0.5 -mt-px",children:(0,a.jsx)("path",{d:"M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.5l-3.7 1.9.7-4.1-3-2.9 4.2-.9L8 1z",fill:"currentColor"})})}};function n(e){let{tier:t,verified:r,size:n="sm",className:c=""}=e;if("free"===t&&!r)return null;let o="sm"===n?"text-[10px] px-1.5 py-0.5":"text-xs px-2 py-0.5";if(r&&"free"!==t)return(0,a.jsxs)("span",{className:"inline-flex items-center gap-1 rounded-full font-semibold ".concat(o," ").concat(l[t].class," ").concat(c),children:["ultimate"===t?(0,a.jsx)(s,{className:"w-3 h-3 fill-gray-900"}):(0,a.jsx)(i,{className:"w-3 h-3"}),l[t].label]});if(r)return(0,a.jsx)("span",{className:"inline-flex items-center gap-0.5 rounded-full font-semibold ".concat(o," bg-blue-100 text-blue-700 border border-blue-200 ").concat(c),children:(0,a.jsx)(i,{className:"w-3 h-3"})});let d=l[t];return(0,a.jsxs)("span",{className:"inline-flex items-center rounded-full font-semibold ".concat(o," ").concat(d.class," ").concat(c),children:["pro"===t&&(0,a.jsx)(s,{className:"w-3 h-3 mr-0.5 -mt-px"}),"ultimate"===t&&(0,a.jsx)(s,{className:"w-3 h-3 mr-0.5 -mt-px fill-gray-900"}),d.label]})}function s(e){let{className:t=""}=e;return(0,a.jsx)("svg",{viewBox:"0 0 16 16",fill:"none",className:t,children:(0,a.jsx)("path",{d:"M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.5l-3.7 1.9.7-4.1-3-2.9 4.2-.9L8 1z",fill:"currentColor"})})}function i(e){let{className:t=""}=e;return(0,a.jsxs)("svg",{viewBox:"0 0 16 16",fill:"none",className:t,children:[(0,a.jsx)("path",{d:"M8 1l2 1.4 2.4-.4 1 2.2 2 1.2-.4 2.4L16 10l-1.8 1.6.4 2.4-2.2.8L10.8 17 8 16.2 5.2 17l-1.2-2.2-2.2-.8.4-2.4L0 10l1-2.2-.4-2.4 2-1.2 1-2.2 2.4.4L8 1z",fill:"#3B82F6"}),(0,a.jsx)("path",{d:"M5.5 8.5l1.5 1.5 3-3",stroke:"white",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})]})}},7795:(e,t,r)=>{"use strict";r.d(t,{F:()=>s});var a=r(1592),l=r(7620);function n(){var e;if("undefined"==typeof document)return null;let t=document.cookie.match(/(?:^|;\s*)canhelp_preview_role=([^;]+)/);return null!=(e=null==t?void 0:t[1])?e:null}function s(){var e;let{data:t}=(0,a.wV)(),r=null==t||null==(e=t.user)?void 0:e.role,s="admin"===r,[i,c]=(0,l.useState)(null);return((0,l.useEffect)(()=>{if(!s)return;c(n());let e=()=>c(n());return window.addEventListener("canhelp:preview-role",e),document.addEventListener("visibilitychange",e),()=>{window.removeEventListener("canhelp:preview-role",e),document.removeEventListener("visibilitychange",e)}},[s]),r)?s&&i?i:r:null}},8880:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>w});var a=r(4568),l=r(7620),n=r(9664),s=r.n(n),i=r(7541),c=r(1592),o=r(9906),d=r(2982),m=r(2035),x=r(7795);let u=[{key:"maxMessagesPerDay",labelKey:"pricing.feat.messages",format:e=>null===e?"∞":String(e)},{key:"maxOrdersPerDay",labelKey:"pricing.feat.orders",format:e=>null===e?"∞":String(e)},{key:"canContactAll",labelKey:"pricing.feat.contact_all"},{key:"canViewPhone",labelKey:"pricing.feat.view_phone"},{key:"canShowContactInfo",labelKey:"pricing.feat.show_contact"},{key:"hasFavorites",labelKey:"pricing.feat.favorites"},{key:"hasVerifiedBadge",labelKey:"pricing.feat.verified_badge"},{key:"hasGoogleCalendar",labelKey:"pricing.feat.google_calendar"},{key:"hasPersonalSite",labelKey:"pricing.feat.personal_site"},{key:"hasAutoResponse",labelKey:"pricing.feat.auto_response"},{key:"hasAutoMatch",labelKey:"pricing.feat.auto_match"},{key:"highlightedReviews",labelKey:"pricing.feat.highlighted_reviews"},{key:"maxPortfolioItems",labelKey:"pricing.feat.portfolio",format:e=>null===e?"∞":String(e)},{key:"maxCards",labelKey:"pricing.feat.cards",format:e=>null===e?"∞":String(e)},{key:"notifyNewTasks",labelKey:"pricing.feat.notify_tasks"},{key:"canUploadVideo",labelKey:"pricing.feat.video"}],p=new Set(["hasGoogleCalendar","hasAutoResponse","highlightedReviews","maxPortfolioItems","maxCards","notifyNewTasks","canUploadVideo"]),h=new Set(["hasAutoMatch"]);function g(){return(0,a.jsx)("svg",{viewBox:"0 0 20 20",fill:"currentColor",className:"w-5 h-5 text-green-500 mx-auto",children:(0,a.jsx)("path",{fillRule:"evenodd",d:"M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z",clipRule:"evenodd"})})}function f(){return(0,a.jsx)("svg",{viewBox:"0 0 20 20",fill:"currentColor",className:"w-4 h-4 text-gray-300 mx-auto",children:(0,a.jsx)("path",{d:"M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z"})})}let b=["free","pro","ultimate"],y={free:"text-gray-700",pro:"text-blue-700",ultimate:"text-amber-600"},j={free:"bg-gray-100 text-gray-700 hover:bg-gray-200",pro:"bg-blue-600 text-white hover:bg-blue-700",ultimate:"bg-gradient-to-r from-amber-500 to-yellow-500 text-white hover:from-amber-600 hover:to-yellow-600"};function w(){let{data:e}=(0,c.wV)(),{t}=(0,o.Y)(),r=(0,i.useRouter)(),n=(0,x.F)(),[w,v]=(0,l.useState)("customer"),[N,k]=(0,l.useState)([]),[L,_]=(0,l.useState)(null),[C,S]=(0,l.useState)(!0),[E,K]=(0,l.useState)(null),[P,B]=(0,l.useState)(null),[F,M]=(0,l.useState)(!1),[z,R]=(0,l.useState)(!1);(0,l.useEffect)(()=>{n&&"admin"!==n&&v("specialist"===n?"specialist":"customer")},[n]),(0,l.useEffect)(()=>{let e=!1;return S(!0),(0,d.T9)(w).then(t=>{e||k(t.sort((e,t)=>b.indexOf(e.tier)-b.indexOf(t.tier)))}).catch(()=>{}).finally(()=>{e||S(!1)}),()=>{e=!0}},[w]);let D=()=>{e&&(0,d.H)().then(e=>{var t,r;return _(null!=(r=null==(t=e.plan)?void 0:t.id)?r:null)}).catch(()=>{})};async function O(t){if(!e)return void r.push("/sign-in");K(t),B(null),M(!0);try{let e=await (0,d.Cs)(t.id);B(e)}catch(e){K(null)}finally{M(!1)}}async function V(){if(E&&P){R(!0);try{let e=await (0,d.Je)(E.id,P.canPayFromBalance);if(e.url&&e.params){let t=document.createElement("form");t.method="POST",t.action=e.url,Object.entries(e.params).forEach(e=>{let[r,a]=e,l=document.createElement("input");l.type="hidden",l.name=r,l.value=a,t.appendChild(l)}),document.body.appendChild(t),t.submit();return}_(E.id),K(null),B(null)}catch(e){}finally{R(!1)}}}(0,l.useEffect)(D,[e]),(0,l.useEffect)(()=>{let e=()=>D();return window.addEventListener("canhelp:plan-changed",e),document.addEventListener("visibilitychange",e),()=>{window.removeEventListener("canhelp:plan-changed",e),document.removeEventListener("visibilitychange",e)}},[e]);let A=u.filter(e=>{let{key:t}=e;return!("specialist"===w&&h.has(t)||"customer"===w&&p.has(t))});return(0,a.jsxs)("main",{className:"min-h-screen py-12 px-4",children:[(0,a.jsxs)("div",{className:"max-w-5xl mx-auto",children:[(0,a.jsxs)("div",{className:"text-center mb-10",children:[(0,a.jsx)("h1",{className:"text-4xl font-bold text-white mb-3",children:t("pricing.title","Тарифы")}),(0,a.jsx)("p",{className:"text-white/70 text-lg",children:e?t("pricing.subtitle_".concat(w),"specialist"===w?"Тарифы Ð´Ð»Ñ ÑпециалиÑтов":"Тарифы Ð´Ð»Ñ Ð·Ð°ÐºÐ°Ð·Ñ‡Ð¸ÐºÐ¾Ð²"):t("pricing.subtitle","Выберите подходÑщий план")})," "]}),!e&&(0,a.jsx)("div",{className:"flex justify-center mb-10",children:(0,a.jsxs)("div",{className:"inline-flex bg-white/10 rounded-xl p-1 gap-1",children:[(0,a.jsx)("button",{onClick:()=>v("customer"),className:"px-6 py-2 rounded-lg text-sm font-semibold transition ".concat("customer"===w?"bg-white text-gray-900 shadow-sm":"text-white/70 hover:text-white"),children:t("pricing.role.customer","Заказчик")}),(0,a.jsx)("button",{onClick:()=>v("specialist"),className:"px-6 py-2 rounded-lg text-sm font-semibold transition ".concat("specialist"===w?"bg-white text-gray-900 shadow-sm":"text-white/70 hover:text-white"),children:t("pricing.role.specialist","СпециалиÑÑ‚")})]})}),C?(0,a.jsx)("div",{className:"text-center text-white/60 py-20",children:t("common.loading","Загрузка...")}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6 mb-12",children:N.map(e=>{let r=e.id===L,l="free"===e.tier;return(0,a.jsxs)("div",{className:"rounded-2xl border-2 p-6 bg-white flex flex-col transition ".concat(r?"ring-2 ring-blue-500 ring-offset-2":""," ").concat("ultimate"===e.tier?"border-amber-300 shadow-lg shadow-amber-100":"border-gray-200"),children:[(0,a.jsxs)("div",{className:"flex items-center gap-2 mb-4",children:[(0,a.jsx)(m.d,{tier:e.tier,size:"md"}),r&&(0,a.jsx)("span",{className:"text-xs font-medium text-green-600 bg-green-50 border border-green-200 px-2 py-0.5 rounded-full",children:t("pricing.current_plan","Ваш план")}),"pro"===e.tier&&!r&&(0,a.jsx)("span",{className:"text-xs font-medium text-blue-600 bg-blue-50 border border-blue-100 px-2 py-0.5 rounded-full",children:t("pricing.popular","ПопулÑрный")})]}),(0,a.jsx)("h2",{className:"text-xl font-bold text-gray-900 mb-1",children:e.name}),(0,a.jsx)("p",{className:"text-gray-500 text-sm mb-4 min-h-[40px]",children:e.description}),(0,a.jsxs)("div",{className:"text-3xl font-extrabold mb-1 ".concat(y[e.tier]),children:[l?t("pricing.free","БеÑплатно"):(0,a.jsxs)(a.Fragment,{children:[e.oldPrice&&(0,a.jsxs)("span",{className:"text-lg font-normal text-gray-400 line-through mr-2",children:["€",e.oldPrice]}),"€",e.price]}),!l&&(0,a.jsxs)("span",{className:"text-base font-normal text-gray-400",children:["/",t("pricing.per_month","меÑ")]})]}),e.durationDays&&!l&&(0,a.jsxs)("p",{className:"text-xs text-gray-400 mb-5",children:[t("pricing.duration","Срок"),": ",e.durationDays," ",t("pricing.days","дн.")]}),l&&(0,a.jsx)("div",{className:"mb-5"}),(0,a.jsx)("div",{className:"mt-auto",children:r?(0,a.jsx)("div",{className:"w-full py-2.5 text-center text-sm font-semibold text-green-700 bg-green-50 border border-green-200 rounded-xl",children:t("pricing.your_plan","Ðктивный план")}):l?(0,a.jsx)("div",{className:"w-full py-2.5 text-center text-sm font-medium text-gray-400 bg-gray-50 border border-gray-200 rounded-xl",children:t("pricing.free_default","По умолчанию")}):(0,a.jsxs)("button",{onClick:()=>O(e),className:"block w-full py-2.5 text-center text-sm font-semibold rounded-xl transition ".concat(j[e.tier]),children:[t("pricing.choose","Выбрать")," ",e.name]})})]},e.id)})}),(0,a.jsxs)("div",{className:"bg-white rounded-2xl border border-gray-200 overflow-hidden",children:[(0,a.jsx)("div",{className:"px-6 py-4 border-b border-gray-100",children:(0,a.jsx)("h3",{className:"font-semibold text-gray-900",children:t("pricing.compare","Сравнение функций")})}),(0,a.jsx)("div",{className:"overflow-x-auto",children:(0,a.jsxs)("table",{className:"w-full text-sm",children:[(0,a.jsx)("thead",{children:(0,a.jsxs)("tr",{className:"border-b border-gray-100",children:[(0,a.jsx)("th",{className:"text-left px-6 py-3 text-gray-500 font-medium w-1/2",children:t("pricing.feature","ФункциÑ")}),N.map(e=>(0,a.jsx)("th",{className:"text-center px-4 py-3 font-medium text-gray-700",children:(0,a.jsxs)("div",{className:"flex flex-col items-center gap-1",children:[(0,a.jsx)(m.d,{tier:e.tier,size:"sm"}),(0,a.jsx)("span",{className:"text-xs text-gray-400",children:"free"===e.tier?t("pricing.free","БеÑплатно"):"€".concat(e.price)})]})},e.id))]})}),(0,a.jsx)("tbody",{children:A.map(e=>{let{key:r,labelKey:l,format:n}=e;return(0,a.jsxs)("tr",{className:"border-b border-gray-50 hover:bg-gray-50/50 transition",children:[(0,a.jsx)("td",{className:"px-6 py-3 text-gray-600",children:t(l,l)}),N.map(e=>{let t,l=e[r];return t=n?(0,a.jsx)("span",{className:"text-gray-700 font-medium",children:n(l)}):"boolean"==typeof l?l?(0,a.jsx)(g,{}):(0,a.jsx)(f,{}):(0,a.jsx)("span",{className:"text-gray-700",children:null===l?"∞":String(null!=l?l:"—")}),(0,a.jsx)("td",{className:"text-center px-4 py-3",children:t},e.id)})]},r)})})]})})]}),(0,a.jsx)("p",{className:"text-center text-white/50 text-sm mt-8",children:t("pricing.faq_note","Оплата ÑпиÑываетÑÑ Ñ Ð±Ð°Ð»Ð°Ð½Ñа CanHelp. Пополнение доÑтупно в разделе Оплата.")})]})]}),E&&(0,a.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50 px-4",children:(0,a.jsxs)("div",{className:"bg-white rounded-2xl shadow-2xl w-full max-w-md p-6",children:[(0,a.jsx)("h2",{className:"text-lg font-bold text-gray-900 mb-4",children:t("pricing.confirm.title","Подтвердите выбор тарифа")}),F?(0,a.jsx)("div",{className:"py-10 text-center text-gray-400",children:t("common.loading","Загрузка...")}):P?(0,a.jsxs)("div",{className:"space-y-3 text-sm text-gray-700",children:[(0,a.jsxs)("div",{className:"flex justify-between",children:[(0,a.jsx)("span",{className:"text-gray-500",children:t("pricing.confirm.plan","Тариф")}),(0,a.jsx)("span",{className:"font-semibold",children:E.name})]}),"upgrade"===P.type&&Number(P.prorated)>0&&(0,a.jsxs)("div",{className:"flex justify-between",children:[(0,a.jsx)("span",{className:"text-gray-500",children:t("pricing.confirm.prorated","Зачёт оÑтатка")}),(0,a.jsxs)("span",{className:"text-green-600 font-medium",children:["−€",P.prorated]})]}),"downgrade"!==P.type&&(0,a.jsxs)("div",{className:"flex justify-between",children:[(0,a.jsx)("span",{className:"text-gray-500",children:t("pricing.confirm.effective_price","К оплате")}),(0,a.jsxs)("span",{className:"font-bold text-gray-900",children:["€",P.effectivePrice]})]}),"downgrade"!==P.type&&(0,a.jsxs)("div",{className:"flex justify-between",children:[(0,a.jsx)("span",{className:"text-gray-500",children:t("pricing.confirm.your_balance","Ваш баланÑ")}),(0,a.jsxs)("span",{className:P.canPayFromBalance?"text-green-600":"text-red-500",children:["€",P.currentBalance]})]}),"downgrade"===P.type&&(0,a.jsxs)("div",{className:"bg-orange-50 border border-orange-200 rounded-xl p-3 text-orange-800 text-xs",children:[t("pricing.confirm.downgrade_info","Переход на новый тариф произойдёт автоматичеÑки поÑле Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ периода."),P.scheduledDate&&(0,a.jsxs)(a.Fragment,{children:[" ",new Date(P.scheduledDate).toLocaleDateString("ru-RU")]})]}),"downgrade"!==P.type&&!P.canPayFromBalance&&(0,a.jsxs)("div",{className:"bg-red-50 border border-red-200 rounded-xl p-3 text-red-700 text-xs",children:[t("pricing.confirm.insufficient","ÐедоÑтаточно ÑредÑтв на баланÑе.")," ",(0,a.jsx)(s(),{href:"/payment",className:"underline font-medium",onClick:()=>K(null),children:t("pricing.confirm.top_up","Пополнить")})]}),(0,a.jsxs)("div",{className:"flex gap-3 pt-2",children:[(0,a.jsx)("button",{onClick:()=>{K(null),B(null)},className:"flex-1 py-2.5 rounded-xl border border-gray-200 text-sm font-medium text-gray-600 hover:bg-gray-50 transition",children:t("common.cancel","Отмена")}),("downgrade"===P.type||P.canPayFromBalance)&&(0,a.jsx)("button",{onClick:V,disabled:z,className:"flex-1 py-2.5 rounded-xl text-sm font-semibold text-white transition ".concat("downgrade"===P.type?"bg-orange-500 hover:bg-orange-600":j[E.tier].replace("block w-full","").trim()," disabled:opacity-50"),children:z?t("common.loading","Загрузка..."):"downgrade"===P.type?t("pricing.confirm.schedule_downgrade","Запланировать переход"):t("pricing.confirm.pay","Оплатить")})]})]}):null]})})]})}}},e=>{e.O(0,[516,664,906,982,587,18,358],()=>e(e.s=160)),_N_E=e.O()}]); ÖþÿÿÖù"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[906],{4962:(e,t,i)=>{i.d(t,{$:()=>n,YZ:()=>a});let a=[{code:"el",label:"Ελληνικά",flag:"\uD83C\uDDEC\uD83C\uDDF7"},{code:"en",label:"English",flag:"\uD83C\uDDEC\uD83C\uDDE7"},{code:"ru",label:"РуÑÑкий",flag:"\uD83C\uDDF7\uD83C\uDDFA"}],s={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.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":"δωÏεάν εγγÏαφή","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.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.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":"ΕπιστÏοφή στη σÏνδεση","dashboard.title":"Πίνακας ελέγχου","dashboard.new_task":"+ Îέα εÏγασία","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":"ΠεÏιοχή εÏγασίας","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.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.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}★","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.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.","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.create_first":"ΔημιουÏγήστε το Ï€Ïώτο σας χαÏτοφυλάκιο","profile.cards.delete_confirm":"ΔιαγÏαφή χαÏτοφυλακίου;","profile.card.tab.main":"Γενικά","profile.card.tab.skills":"Δεξιότητες","profile.card.tab.categories":"ΚατηγοÏίες","profile.card.tab.geography":"ΓεωγÏαφία","profile.card.tab.portfolio":"ΓκαλεÏί","profile.card.active":"ΕνεÏγή","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.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.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.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.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.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.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.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.order":"ΣειÏά","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":"Όλα τα δικαιώματα διατηÏοÏνται.","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":"ΤώÏα μποÏείτε να λαμβάνετε παÏαγγελίες από πελάτες. Αναζητήστε εÏγασίες που ταιÏιάζουν με τις δεξιότητές σας."},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":"Dashboard","nav.chat":"Messages","nav.notifications":"Notifications","nav.profile":"Profile","nav.admin":"Admin Panel","nav.specialists":"Specialists","nav.new_task":"New task","nav.login":"Login","nav.register":"Register","nav.logout":"Logout","hero.title":"Find a specialist for any job","hero.subtitle":"Post a task, receive offers and choose the best professional","hero.cta.post":"Post a task","hero.cta.browse":"Become a specialist","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":"specialists","stats.tasks":"tasks","stats.categories":"categories","stats.free":"free sign-up","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.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.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","dashboard.title":"Dashboard","dashboard.new_task":"+ New 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","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.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.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","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 Specialist","profile.role.admin":"\uD83D\uDC51 Admin","profile.role.customer":"\uD83D\uDC64 User","profile.role.change":"To change your role please contact support.","profile.become_specialist":"Become a Specialist","profile.become_specialist.desc":"Upgrade to Specialist to take on tasks and build your profile.","become_specialist.hero.title":"Earn money doing what you do best","become_specialist.hero.subtitle":"Create a specialist profile and receive orders from clients across Greece","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.',"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":"Portfolio","profile.cards.count":"Portfolio","profile.cards.add":"Add portfolio","profile.cards.new_title":"New portfolio title","profile.cards.placeholder":"e.g. Plumbing","profile.cards.create":"Create","profile.cards.cancel":"Cancel","profile.cards.empty":"No portfolio yet","profile.cards.create_first":"Create your first portfolio","profile.cards.delete_confirm":"Delete portfolio?","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.active":"Active","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.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.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.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":"Specialists","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 portfolio (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":"Specialist","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.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":"Portfolio","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":"Specialists","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.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 specialists","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.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":"Portfolio","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":"Portfolio","admin.user_edit.no_cards":"No portfolio found","admin.user_edit.card_title":"Portfolio 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.specialist":"Specialist","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.order":"Order","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":"Specialists","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.","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":"Portfolio items","pricing.feat.cards":"Specialist cards","pricing.feat.notify_tasks":"New task notifications","pricing.feat.video":"Video in portfolio","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."},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.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":"беÑÐ¿Ð»Ð°Ñ‚Ð½Ð°Ñ Ñ€ÐµÐ³Ð¸ÑтрациÑ","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.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.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":"ВернутьÑÑ Ðº входу","dashboard.title":"Панель управлениÑ","dashboard.new_task":"+ ÐÐ¾Ð²Ð°Ñ Ð·Ð°Ð´Ð°Ñ‡Ð°","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":"Район работы","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.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.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}★","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.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.","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.create_first":"Создать первое портфолио","profile.cards.delete_confirm":"Удалить портфолио?","profile.card.tab.main":"ОÑновное","profile.card.tab.skills":"Ðавыки","profile.card.tab.categories":"Категории","profile.card.tab.geography":"ГеографиÑ","profile.card.tab.portfolio":"ГалереÑ","profile.card.active":"Ðктивна","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.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.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.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.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.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.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.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.order":"ПорÑдок","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":"Ð’Ñе права защищены.","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":"Теперь вы можете получать заказы от клиентов. Ðайдите задачи, которые ÑоответÑтвуют вашим навыкам."}};function n(e){var t;let i=null!=(t=s[e])?t:s.el;return(e,t)=>{var a,n,o;return null!=(o=null!=(n=null!=(a=i[e])?a:s.el[e])?n:t)?o:e}}},9906:(e,t,i)=>{i.d(t,{LocaleProvider:()=>l,Y:()=>d});var a=i(4568),s=i(7620),n=i(7541),o=i(4962);let r=(0,s.createContext)({locale:"el",setLocale:()=>{},t:e=>e});function l(e){let{children:t,initialLocale:i}=e,l=(0,n.useRouter)(),[d,c]=(0,s.useState)(null!=i?i:"el");(0,s.useEffect)(()=>{let e=function(){if("undefined"==typeof document)return"el";let e=document.cookie.match(/canhelp_locale=([^;]+)/),t=null==e?void 0:e[1];return t&&["el","en","ru"].includes(t)?t:"el"}();e!==d&&c(e),fetch("".concat("https://api.canhelp.gr","/api/users/me"),{method:"PATCH",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({locale:e})}).catch(()=>{})},[]);let p=(0,s.useCallback)(e=>{c(e),document.cookie="".concat("canhelp_locale","=").concat(e,"; path=/; max-age=31536000; SameSite=Lax"),document.documentElement.lang=e,fetch("".concat("https://api.canhelp.gr","/api/users/me"),{method:"PATCH",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({locale:e})}).catch(()=>{}),l.refresh()},[l]),m=(0,s.useCallback)((e,t)=>(0,o.$)(d)(e,t),[d]);return(0,a.jsx)(r.Provider,{value:{locale:d,setLocale:p,t:m},children:t})}function d(){return(0,s.useContext)(r)}}}]); ÓþÿÿMself.__SSG_MANIFEST=new Set,self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB(); Ðþÿÿåself.__BUILD_MANIFEST=function(e,r,t,_){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},__routerFilterStatic:{numItems:25,errorRate:1e-4,numBits:480,numHashes:14,bitArray:[1,1,0,e,0,r,e,r,e,e,e,r,e,e,r,r,e,e,r,e,r,r,r,r,r,e,r,e,r,r,e,e,e,e,r,e,r,e,r,r,e,e,e,e,r,e,e,e,r,r,e,r,e,r,e,e,e,r,e,e,e,r,e,r,r,r,e,e,e,r,r,e,r,e,r,r,e,e,e,e,r,e,r,e,r,e,r,e,e,r,e,r,e,e,r,r,r,e,e,e,r,r,r,e,e,e,e,e,r,e,r,r,r,e,e,e,e,r,e,e,r,r,r,r,e,e,r,e,e,r,e,e,r,r,r,r,e,e,r,r,e,e,r,e,e,e,r,r,e,e,r,e,e,e,e,e,r,r,e,e,e,r,r,r,e,e,e,e,r,e,e,e,r,e,e,e,r,e,e,r,e,e,r,r,r,r,e,r,r,e,e,r,e,r,e,r,e,e,r,r,e,e,e,r,e,r,e,e,e,r,r,r,r,r,e,r,r,e,r,e,r,r,r,e,r,e,e,r,r,r,e,e,r,r,r,e,r,e,e,e,r,e,e,e,e,r,r,r,e,r,r,r,e,e,r,e,r,r,e,e,r,r,r,e,e,r,e,r,e,e,r,r,e,e,e,e,r,e,e,r,e,r,e,r,e,r,r,e,r,e,r,e,r,e,r,r,e,e,r,e,e,r,r,r,r,e,e,r,r,e,e,e,r,e,e,e,e,r,r,r,r,e,e,r,r,r,e,r,r,e,r,r,e,r,e,r,r,e,r,r,r,r,e,e,e,e,e,r,e,e,e,e,e,e,r,e,r,e,r,e,e,r,e,r,r,e,r,r,e,e,e,e,r,r,e,e,e,r,r,r,e,r,r,r,e,r,r,e,r,r,e,e,e,r,e,r,e,e,e,r,e,r,e,e,e,r,e,e,r,e,r,r,e,e,r,e,r,r,r,e,e,r,e,e,r,r,e,e,r,r,r,e,e,r,e,r,e,e,e,r,r,r,r,e,r,e,e,r,r,e,e,r,r,e,e,r,e,r,r,r,e,r,e,e,e,r,r,r,e,r,e,e,e,e,e,e,r,e,e,e]},__routerFilterDynamic:{numItems:3,errorRate:1e-4,numBits:58,numHashes:14,bitArray:[e,e,e,e,e,e,e,r,e,r,e,r,e,e,r,e,r,e,e,r,e,e,r,e,r,e,r,r,r,e,e,e,e,r,r,r,e,e,r,e,r,e,e,r,r,e,r,r,r,r,r,r,e,e,e,e,e,r]},"/_error":["static/chunks/pages/_error-6ef555c81b7f80fd.js"],sortedPages:["/_app","/_error"]}}(1,0,1e-4,14),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB(); «webpack/lib/util/registerExternalSerializerŸwebpack-sources/SourceMapSourceÖ @font-face{font-family:Showpop;src:url(/fonts/showpop.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}.logo-text{font-family:Showpop,sans-serif;font-weight:400}@font-face{font-family:UnifixSP;src:url(/fonts/UnifixSP.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}.logo-text-unifix{font-family:UnifixSP,sans-serif;letter-spacing:.01em;font-weight:400}@font-face{font-family:MotivationOfHearts;src:url(/fonts/MotivationOfHearts.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}.logo-text-motivation{font-family:MotivationOfHearts,sans-serif;letter-spacing:.01em;font-weight:400}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246/0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246/0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: } /* ! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com */*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Inter,system-ui,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.-inset-1{inset:-.25rem}.inset-0{inset:0}.-right-1\.5{right:-.375rem}.-top-1\.5{top:-.375rem}.-top-10{top:-2.5rem}.bottom-1{bottom:.25rem}.bottom-20{bottom:5rem}.bottom-5{bottom:1.25rem}.bottom-6{bottom:1.5rem}.left-0{left:0}.left-0\.5{left:.125rem}.left-1\/2{left:50%}.left-1\/4{left:25%}.left-3{left:.75rem}.left-4{left:1rem}.right-0{right:0}.right-0\.5{right:.125rem}.right-1{right:.25rem}.right-1\/4{right:25%}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.right-5{right:1.25rem}.right-6{right:1.5rem}.top-0{top:0}.top-0\.5{top:.125rem}.top-1{top:.25rem}.top-1\/2{top:50%}.top-2{top:.5rem}.top-20{top:5rem}.top-24{top:6rem}.top-3{top:.75rem}.top-4{top:1rem}.top-6{top:1.5rem}.top-full{top:100%}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.z-\[200\]{z-index:200}.z-\[60\]{z-index:60}.col-span-2{grid-column:span 2/span 2}.m-0\.5{margin:.125rem}.mx-0\.5{margin-left:.125rem;margin-right:.125rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-5{margin-left:1.25rem;margin-right:1.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.-mb-px{margin-bottom:-1px}.-mt-1{margin-top:-.25rem}.-mt-px{margin-top:-1px}.mb-0{margin-bottom:0}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-10{margin-bottom:2.5rem}.mb-12{margin-bottom:3rem}.mb-14{margin-bottom:3.5rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-1\.5{margin-left:.375rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-4{margin-left:1rem}.ml-6{margin-left:1.5rem}.ml-auto{margin-left:auto}.mr-0\.5{margin-right:.125rem}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-10{margin-top:2.5rem}.mt-16{margin-top:4rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-auto{margin-top:auto}.line-clamp-1{-webkit-line-clamp:1}.line-clamp-1,.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical}.line-clamp-2{-webkit-line-clamp:2}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.aspect-square{aspect-ratio:1/1}.h-0{height:0}.h-0\.5{height:.125rem}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-20{height:5rem}.h-24{height:6rem}.h-28{height:7rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-40{height:10rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[400px\]{height:400px}.h-\[500px\]{height:500px}.h-\[calc\(100vh-80px\)\]{height:calc(100vh - 80px)}.h-full{height:100%}.h-px{height:1px}.max-h-32{max-height:8rem}.max-h-40{max-height:10rem}.max-h-64{max-height:16rem}.max-h-72{max-height:18rem}.max-h-80{max-height:20rem}.max-h-96{max-height:24rem}.max-h-\[60vh\]{max-height:60vh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[90vh\]{max-height:90vh}.min-h-0{min-height:0}.min-h-\[24px\]{min-height:24px}.min-h-\[28px\]{min-height:28px}.min-h-\[40px\]{min-height:40px}.min-h-screen{min-height:100vh}.w-0{width:0}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-1\/2{width:50%}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-12{width:3rem}.w-14{width:3.5rem}.w-16{width:4rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-20{width:5rem}.w-24{width:6rem}.w-28{width:7rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-4{width:1rem}.w-40{width:10rem}.w-44{width:11rem}.w-5{width:1.25rem}.w-52{width:13rem}.w-56{width:14rem}.w-6{width:1.5rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-\[400px\]{width:400px}.w-\[500px\]{width:500px}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-px{width:1px}.min-w-0{min-width:0}.min-w-32{min-width:8rem}.min-w-72{min-width:18rem}.min-w-\[140px\]{min-width:140px}.min-w-\[16px\]{min-width:16px}.min-w-\[180px\]{min-width:180px}.min-w-\[200px\]{min-width:200px}.min-w-\[220px\]{min-width:220px}.min-w-\[240px\]{min-width:240px}.min-w-fit{min-width:-moz-fit-content;min-width:fit-content}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-7xl{max-width:80rem}.max-w-\[100px\]{max-width:100px}.max-w-\[70\%\]{max-width:70%}.max-w-\[90px\]{max-width:90px}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-\[2\]{flex:2}.flex-shrink-0,.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-12,.-translate-x-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-12{--tw-translate-x:-3rem}.-translate-y-1\/2{--tw-translate-y:-50%}.-translate-y-1\/2,.translate-x-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x:0px}.translate-x-1{--tw-translate-x:0.25rem}.translate-x-1,.translate-x-12{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-12{--tw-translate-x:3rem}.translate-x-3{--tw-translate-x:0.75rem}.translate-x-3,.translate-x-5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-5{--tw-translate-x:1.25rem}.translate-x-6{--tw-translate-x:1.5rem}.translate-x-6,.translate-y-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0{--tw-translate-y:0px}.translate-y-4{--tw-translate-y:1rem}.rotate-180,.translate-y-4{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate:180deg}.rotate-45{--tw-rotate:45deg}.rotate-45,.rotate-90{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate:90deg}.scale-105{--tw-scale-x:1.05;--tw-scale-y:1.05}.scale-105,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.resize-none{resize:none}.resize-y{resize:vertical}.snap-x{scroll-snap-type:x var(--tw-scroll-snap-strictness)}.snap-mandatory{--tw-scroll-snap-strictness:mandatory}.snap-start{scroll-snap-align:start}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0{gap:0}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-10{gap:2.5rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-y-3{row-gap:.75rem}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-16>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(4rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(4rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-gray-100>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(243 244 246/var(--tw-divide-opacity,1))}.self-end{align-self:flex-end}.self-center{align-self:center}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis}.truncate,.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-\[2\.5rem\]{border-radius:2.5rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.rounded-b-xl{border-bottom-right-radius:.75rem;border-bottom-left-radius:.75rem}.rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.rounded-tl-sm{border-top-left-radius:.125rem}.rounded-tr-sm{border-top-right-radius:.125rem}.border{border-width:1px}.border-0{border-width:0}.border-2{border-width:2px}.border-y{border-top-width:1px}.border-b,.border-y{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-r-2{border-right-width:2px}.border-t{border-top-width:1px}.border-t-0{border-top-width:0}.border-t-4{border-top-width:4px}.border-dashed{border-style:dashed}.border-amber-100{--tw-border-opacity:1;border-color:rgb(254 243 199/var(--tw-border-opacity,1))}.border-amber-200{--tw-border-opacity:1;border-color:rgb(253 230 138/var(--tw-border-opacity,1))}.border-amber-300{--tw-border-opacity:1;border-color:rgb(252 211 77/var(--tw-border-opacity,1))}.border-amber-500{--tw-border-opacity:1;border-color:rgb(245 158 11/var(--tw-border-opacity,1))}.border-blue-100{--tw-border-opacity:1;border-color:rgb(219 234 254/var(--tw-border-opacity,1))}.border-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity,1))}.border-blue-300{--tw-border-opacity:1;border-color:rgb(147 197 253/var(--tw-border-opacity,1))}.border-blue-400{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity,1))}.border-blue-50{--tw-border-opacity:1;border-color:rgb(239 246 255/var(--tw-border-opacity,1))}.border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity,1))}.border-blue-500\/10{border-color:rgb(59 130 246/.1)}.border-blue-500\/20{border-color:rgb(59 130 246/.2)}.border-blue-600{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity,1))}.border-emerald-100{--tw-border-opacity:1;border-color:rgb(209 250 229/var(--tw-border-opacity,1))}.border-emerald-300{--tw-border-opacity:1;border-color:rgb(110 231 183/var(--tw-border-opacity,1))}.border-emerald-400{--tw-border-opacity:1;border-color:rgb(52 211 153/var(--tw-border-opacity,1))}.border-emerald-500{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity,1))}.border-emerald-500\/20{border-color:rgb(16 185 129/.2)}.border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity,1))}.border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.border-gray-50{--tw-border-opacity:1;border-color:rgb(249 250 251/var(--tw-border-opacity,1))}.border-green-100{--tw-border-opacity:1;border-color:rgb(220 252 231/var(--tw-border-opacity,1))}.border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity,1))}.border-indigo-100{--tw-border-opacity:1;border-color:rgb(224 231 255/var(--tw-border-opacity,1))}.border-orange-100{--tw-border-opacity:1;border-color:rgb(255 237 213/var(--tw-border-opacity,1))}.border-orange-200{--tw-border-opacity:1;border-color:rgb(254 215 170/var(--tw-border-opacity,1))}.border-pink-200{--tw-border-opacity:1;border-color:rgb(251 207 232/var(--tw-border-opacity,1))}.border-purple-100{--tw-border-opacity:1;border-color:rgb(243 232 255/var(--tw-border-opacity,1))}.border-purple-200{--tw-border-opacity:1;border-color:rgb(233 213 255/var(--tw-border-opacity,1))}.border-purple-500\/10{border-color:rgb(168 85 247/.1)}.border-red-100{--tw-border-opacity:1;border-color:rgb(254 226 226/var(--tw-border-opacity,1))}.border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity,1))}.border-red-300{--tw-border-opacity:1;border-color:rgb(252 165 165/var(--tw-border-opacity,1))}.border-red-400{--tw-border-opacity:1;border-color:rgb(248 113 113/var(--tw-border-opacity,1))}.border-rose-100{--tw-border-opacity:1;border-color:rgb(255 228 230/var(--tw-border-opacity,1))}.border-rose-300{--tw-border-opacity:1;border-color:rgb(253 164 175/var(--tw-border-opacity,1))}.border-rose-500{--tw-border-opacity:1;border-color:rgb(244 63 94/var(--tw-border-opacity,1))}.border-sky-100{--tw-border-opacity:1;border-color:rgb(224 242 254/var(--tw-border-opacity,1))}.border-slate-100{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity,1))}.border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity,1))}.border-teal-100{--tw-border-opacity:1;border-color:rgb(204 251 241/var(--tw-border-opacity,1))}.border-transparent{border-color:transparent}.border-violet-100{--tw-border-opacity:1;border-color:rgb(237 233 254/var(--tw-border-opacity,1))}.border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity,1))}.border-white\/10{border-color:rgb(255 255 255/.1)}.border-white\/20{border-color:rgb(255 255 255/.2)}.border-white\/30{border-color:rgb(255 255 255/.3)}.border-white\/40{border-color:rgb(255 255 255/.4)}.border-yellow-200{--tw-border-opacity:1;border-color:rgb(254 240 138/var(--tw-border-opacity,1))}.border-l-blue-500{--tw-border-opacity:1;border-left-color:rgb(59 130 246/var(--tw-border-opacity,1))}.border-t-blue-500{--tw-border-opacity:1;border-top-color:rgb(59 130 246/var(--tw-border-opacity,1))}.border-t-transparent{border-top-color:transparent}.border-t-white{--tw-border-opacity:1;border-top-color:rgb(255 255 255/var(--tw-border-opacity,1))}.bg-\[\#003087\]{--tw-bg-opacity:1;background-color:rgb(0 48 135/var(--tw-bg-opacity,1))}.bg-amber-100{--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity,1))}.bg-amber-400{--tw-bg-opacity:1;background-color:rgb(251 191 36/var(--tw-bg-opacity,1))}.bg-amber-50{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity,1))}.bg-amber-500{--tw-bg-opacity:1;background-color:rgb(245 158 11/var(--tw-bg-opacity,1))}.bg-amber-500\/10{background-color:rgb(245 158 11/.1)}.bg-black\/0{background-color:rgb(0 0 0/0)}.bg-black\/40{background-color:rgb(0 0 0/.4)}.bg-black\/50{background-color:rgb(0 0 0/.5)}.bg-black\/60{background-color:rgb(0 0 0/.6)}.bg-black\/70{background-color:rgb(0 0 0/.7)}.bg-black\/80{background-color:rgb(0 0 0/.8)}.bg-black\/85{background-color:rgb(0 0 0/.85)}.bg-black\/90{background-color:rgb(0 0 0/.9)}.bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.bg-blue-50\/30{background-color:rgb(239 246 255/.3)}.bg-blue-50\/60{background-color:rgb(239 246 255/.6)}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.bg-blue-500\/10{background-color:rgb(59 130 246/.1)}.bg-blue-600{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.bg-blue-600\/10{background-color:rgb(37 99 235/.1)}.bg-emerald-100{--tw-bg-opacity:1;background-color:rgb(209 250 229/var(--tw-bg-opacity,1))}.bg-emerald-200{--tw-bg-opacity:1;background-color:rgb(167 243 208/var(--tw-bg-opacity,1))}.bg-emerald-400{--tw-bg-opacity:1;background-color:rgb(52 211 153/var(--tw-bg-opacity,1))}.bg-emerald-50{--tw-bg-opacity:1;background-color:rgb(236 253 245/var(--tw-bg-opacity,1))}.bg-emerald-500{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity,1))}.bg-emerald-500\/10{background-color:rgb(16 185 129/.1)}.bg-emerald-500\/20{background-color:rgb(16 185 129/.2)}.bg-emerald-600{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity,1))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity,1))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.bg-gray-600{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.bg-green-100{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity,1))}.bg-green-400{--tw-bg-opacity:1;background-color:rgb(74 222 128/var(--tw-bg-opacity,1))}.bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity,1))}.bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.bg-green-600{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity,1))}.bg-indigo-100{--tw-bg-opacity:1;background-color:rgb(224 231 255/var(--tw-bg-opacity,1))}.bg-indigo-50{--tw-bg-opacity:1;background-color:rgb(238 242 255/var(--tw-bg-opacity,1))}.bg-indigo-600{--tw-bg-opacity:1;background-color:rgb(79 70 229/var(--tw-bg-opacity,1))}.bg-orange-100{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity,1))}.bg-orange-50{--tw-bg-opacity:1;background-color:rgb(255 247 237/var(--tw-bg-opacity,1))}.bg-orange-500{--tw-bg-opacity:1;background-color:rgb(249 115 22/var(--tw-bg-opacity,1))}.bg-pink-50{--tw-bg-opacity:1;background-color:rgb(253 242 248/var(--tw-bg-opacity,1))}.bg-purple-100{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity,1))}.bg-purple-400{--tw-bg-opacity:1;background-color:rgb(192 132 252/var(--tw-bg-opacity,1))}.bg-purple-50{--tw-bg-opacity:1;background-color:rgb(250 245 255/var(--tw-bg-opacity,1))}.bg-purple-500\/10{background-color:rgb(168 85 247/.1)}.bg-purple-600{--tw-bg-opacity:1;background-color:rgb(147 51 234/var(--tw-bg-opacity,1))}.bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.bg-red-200{--tw-bg-opacity:1;background-color:rgb(254 202 202/var(--tw-bg-opacity,1))}.bg-red-400{--tw-bg-opacity:1;background-color:rgb(248 113 113/var(--tw-bg-opacity,1))}.bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.bg-rose-50{--tw-bg-opacity:1;background-color:rgb(255 241 242/var(--tw-bg-opacity,1))}.bg-rose-600{--tw-bg-opacity:1;background-color:rgb(225 29 72/var(--tw-bg-opacity,1))}.bg-sky-50{--tw-bg-opacity:1;background-color:rgb(240 249 255/var(--tw-bg-opacity,1))}.bg-sky-500{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity,1))}.bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity,1))}.bg-teal-50{--tw-bg-opacity:1;background-color:rgb(240 253 250/var(--tw-bg-opacity,1))}.bg-violet-50{--tw-bg-opacity:1;background-color:rgb(245 243 255/var(--tw-bg-opacity,1))}.bg-violet-500{--tw-bg-opacity:1;background-color:rgb(139 92 246/var(--tw-bg-opacity,1))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-white\/10{background-color:rgb(255 255 255/.1)}.bg-white\/15{background-color:rgb(255 255 255/.15)}.bg-white\/20{background-color:rgb(255 255 255/.2)}.bg-white\/60{background-color:rgb(255 255 255/.6)}.bg-white\/80{background-color:rgb(255 255 255/.8)}.bg-white\/90{background-color:rgb(255 255 255/.9)}.bg-yellow-100{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity,1))}.bg-yellow-400{--tw-bg-opacity:1;background-color:rgb(250 204 21/var(--tw-bg-opacity,1))}.bg-yellow-50{--tw-bg-opacity:1;background-color:rgb(254 252 232/var(--tw-bg-opacity,1))}.bg-yellow-500{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity,1))}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.bg-gradient-to-t{background-image:linear-gradient(to top,var(--tw-gradient-stops))}.from-amber-400{--tw-gradient-from:#fbbf24 var(--tw-gradient-from-position);--tw-gradient-to:rgb(251 191 36/0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-amber-50{--tw-gradient-from:#fffbeb var(--tw-gradient-from-position);--tw-gradient-to:rgb(255 251 235/0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-amber-500{--tw-gradient-from:#f59e0b var(--tw-gradient-from-position);--tw-gradient-to:rgb(245 158 11/0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-black\/60{--tw-gradient-from:rgb(0 0 0/0.6) var(--tw-gradient-from-position);--tw-gradient-to:rgb(0 0 0/0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-blue-500{--tw-gradient-from:#3b82f6 var(--tw-gradient-from-position);--tw-gradient-to:rgb(59 130 246/0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-blue-700{--tw-gradient-from:#1d4ed8 var(--tw-gradient-from-position);--tw-gradient-to:rgb(29 78 216/0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-indigo-100{--tw-gradient-from:#e0e7ff var(--tw-gradient-from-position);--tw-gradient-to:rgb(224 231 255/0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-orange-400{--tw-gradient-from:#fb923c var(--tw-gradient-from-position);--tw-gradient-to:rgb(251 146 60/0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.via-transparent{--tw-gradient-to:rgb(0 0 0/0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),transparent var(--tw-gradient-via-position),var(--tw-gradient-to)}.via-yellow-400{--tw-gradient-to:rgb(250 204 21/0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),#facc15 var(--tw-gradient-via-position),var(--tw-gradient-to)}.to-amber-400{--tw-gradient-to:#fbbf24 var(--tw-gradient-to-position)}.to-amber-50{--tw-gradient-to:#fffbeb var(--tw-gradient-to-position)}.to-blue-500{--tw-gradient-to:#3b82f6 var(--tw-gradient-to-position)}.to-orange-400{--tw-gradient-to:#fb923c var(--tw-gradient-to-position)}.to-purple-500{--tw-gradient-to:#a855f7 var(--tw-gradient-to-position)}.to-transparent{--tw-gradient-to:transparent var(--tw-gradient-to-position)}.to-yellow-50{--tw-gradient-to:#fefce8 var(--tw-gradient-to-position)}.to-yellow-500{--tw-gradient-to:#eab308 var(--tw-gradient-to-position)}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.fill-gray-900{fill:#111827}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0{padding:0}.p-1{padding:.25rem}.p-10{padding:2.5rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-7{padding-left:1.75rem;padding-right:1.75rem}.px-8{padding-left:2rem;padding-right:2rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-14{padding-top:3.5rem;padding-bottom:3.5rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-20{padding-top:5rem;padding-bottom:5rem}.py-24{padding-top:6rem;padding-bottom:6rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-3\.5{padding-top:.875rem;padding-bottom:.875rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-0\.5{padding-bottom:.125rem}.pb-1{padding-bottom:.25rem}.pb-2{padding-bottom:.5rem}.pb-20{padding-bottom:5rem}.pb-4{padding-bottom:1rem}.pb-5{padding-bottom:1.25rem}.pl-10{padding-left:2.5rem}.pl-12{padding-left:3rem}.pl-5{padding-left:1.25rem}.pl-7{padding-left:1.75rem}.pl-8{padding-left:2rem}.pr-14{padding-right:3.5rem}.pr-2{padding-right:.5rem}.pr-24{padding-right:6rem}.pr-3{padding-right:.75rem}.pr-4{padding-right:1rem}.pt-1{padding-top:.25rem}.pt-10{padding-top:2.5rem}.pt-16{padding-top:4rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-6{padding-top:1.5rem}.pt-8{padding-top:2rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-top{vertical-align:top}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-5xl{font-size:3rem;line-height:1}.text-8xl{font-size:6rem;line-height:1}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.italic{font-style:italic}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.text-amber-400{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity,1))}.text-amber-500{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity,1))}.text-amber-600{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity,1))}.text-amber-700{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity,1))}.text-amber-800{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity,1))}.text-amber-900{--tw-text-opacity:1;color:rgb(120 53 15/var(--tw-text-opacity,1))}.text-blue-100{--tw-text-opacity:1;color:rgb(219 234 254/var(--tw-text-opacity,1))}.text-blue-300{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.text-blue-400{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity,1))}.text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.text-blue-700{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity,1))}.text-blue-800{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity,1))}.text-blue-900{--tw-text-opacity:1;color:rgb(30 58 138/var(--tw-text-opacity,1))}.text-emerald-400{--tw-text-opacity:1;color:rgb(52 211 153/var(--tw-text-opacity,1))}.text-emerald-500{--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity,1))}.text-emerald-600{--tw-text-opacity:1;color:rgb(5 150 105/var(--tw-text-opacity,1))}.text-emerald-700{--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity,1))}.text-emerald-800{--tw-text-opacity:1;color:rgb(6 95 70/var(--tw-text-opacity,1))}.text-emerald-900{--tw-text-opacity:1;color:rgb(6 78 59/var(--tw-text-opacity,1))}.text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.text-green-400{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity,1))}.text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity,1))}.text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.text-green-800{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity,1))}.text-indigo-500{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity,1))}.text-indigo-600{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity,1))}.text-indigo-700{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity,1))}.text-orange-400{--tw-text-opacity:1;color:rgb(251 146 60/var(--tw-text-opacity,1))}.text-orange-500{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity,1))}.text-orange-600{--tw-text-opacity:1;color:rgb(234 88 12/var(--tw-text-opacity,1))}.text-orange-700{--tw-text-opacity:1;color:rgb(194 65 12/var(--tw-text-opacity,1))}.text-orange-800{--tw-text-opacity:1;color:rgb(154 52 18/var(--tw-text-opacity,1))}.text-pink-400{--tw-text-opacity:1;color:rgb(244 114 182/var(--tw-text-opacity,1))}.text-pink-500{--tw-text-opacity:1;color:rgb(236 72 153/var(--tw-text-opacity,1))}.text-pink-600{--tw-text-opacity:1;color:rgb(219 39 119/var(--tw-text-opacity,1))}.text-purple-400{--tw-text-opacity:1;color:rgb(192 132 252/var(--tw-text-opacity,1))}.text-purple-500{--tw-text-opacity:1;color:rgb(168 85 247/var(--tw-text-opacity,1))}.text-purple-600{--tw-text-opacity:1;color:rgb(147 51 234/var(--tw-text-opacity,1))}.text-purple-700{--tw-text-opacity:1;color:rgb(126 34 206/var(--tw-text-opacity,1))}.text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.text-rose-700{--tw-text-opacity:1;color:rgb(190 18 60/var(--tw-text-opacity,1))}.text-rose-800{--tw-text-opacity:1;color:rgb(159 18 57/var(--tw-text-opacity,1))}.text-rose-900{--tw-text-opacity:1;color:rgb(136 19 55/var(--tw-text-opacity,1))}.text-sky-600{--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity,1))}.text-sky-700{--tw-text-opacity:1;color:rgb(3 105 161/var(--tw-text-opacity,1))}.text-slate-300{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity,1))}.text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity,1))}.text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity,1))}.text-slate-700{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity,1))}.text-slate-900{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity,1))}.text-teal-700{--tw-text-opacity:1;color:rgb(15 118 110/var(--tw-text-opacity,1))}.text-transparent{color:transparent}.text-violet-600{--tw-text-opacity:1;color:rgb(124 58 237/var(--tw-text-opacity,1))}.text-violet-700{--tw-text-opacity:1;color:rgb(109 40 217/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.text-white\/50{color:rgb(255 255 255/.5)}.text-white\/60{color:rgb(255 255 255/.6)}.text-white\/70{color:rgb(255 255 255/.7)}.text-white\/80{color:rgb(255 255 255/.8)}.text-white\/90{color:rgb(255 255 255/.9)}.text-yellow-300{--tw-text-opacity:1;color:rgb(253 224 71/var(--tw-text-opacity,1))}.text-yellow-400{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity,1))}.text-yellow-500{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity,1))}.text-yellow-600{--tw-text-opacity:1;color:rgb(202 138 4/var(--tw-text-opacity,1))}.text-yellow-700{--tw-text-opacity:1;color:rgb(161 98 7/var(--tw-text-opacity,1))}.text-yellow-800{--tw-text-opacity:1;color:rgb(133 77 14/var(--tw-text-opacity,1))}.underline{text-decoration-line:underline}.line-through{text-decoration-line:line-through}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-25{opacity:.25}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.shadow{--tw-shadow:0 1px 3px 0 rgb(0 0 0/0.1),0 1px 2px -1px rgb(0 0 0/0.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-2xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px rgb(0 0 0/0.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgb(0 0 0/0.1),0 4px 6px -4px rgb(0 0 0/0.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-lg,.shadow-md{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px rgb(0 0 0/0.1),0 2px 4px -2px rgb(0 0 0/0.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.shadow-sm{--tw-shadow:0 1px 2px 0 rgb(0 0 0/0.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-sm,.shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px rgb(0 0 0/0.1),0 8px 10px -6px rgb(0 0 0/0.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}.shadow-amber-100{--tw-shadow-color:#fef3c7;--tw-shadow:var(--tw-shadow-colored)}.shadow-amber-300\/50{--tw-shadow-color:rgb(252 211 77/0.5);--tw-shadow:var(--tw-shadow-colored)}.shadow-amber-500\/25{--tw-shadow-color:rgb(245 158 11/0.25);--tw-shadow:var(--tw-shadow-colored)}.\!ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)!important;--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)!important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)!important}.ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-2,.ring-4{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-4{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.\!ring-blue-500{--tw-ring-opacity:1!important;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))!important}.ring-blue-200{--tw-ring-opacity:1;--tw-ring-color:rgb(191 219 254/var(--tw-ring-opacity,1))}.ring-blue-400{--tw-ring-opacity:1;--tw-ring-color:rgb(96 165 250/var(--tw-ring-opacity,1))}.ring-blue-500{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.\!ring-offset-1{--tw-ring-offset-width:1px!important}.ring-offset-1{--tw-ring-offset-width:1px}.ring-offset-2{--tw-ring-offset-width:2px}.blur{--tw-blur:blur(8px)}.blur,.blur-\[100px\]{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.blur-\[100px\]{--tw-blur:blur(100px)}.blur-\[120px\]{--tw-blur:blur(120px)}.blur-\[120px\],.drop-shadow{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow{--tw-drop-shadow:drop-shadow(0 1px 2px rgb(0 0 0/0.1)) drop-shadow(0 1px 1px rgb(0 0 0/0.06))}.drop-shadow-lg{--tw-drop-shadow:drop-shadow(0 10px 8px rgb(0 0 0/0.04)) drop-shadow(0 4px 3px rgb(0 0 0/0.1))}.drop-shadow-lg,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur{--tw-backdrop-blur:blur(8px)}.backdrop-blur,.backdrop-blur-md{backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-md{--tw-backdrop-blur:blur(12px)}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px)}.backdrop-blur-sm,.backdrop-blur-xl{backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-xl{--tw-backdrop-blur:blur(24px)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}:root{--blue-main:#2563eb;--blue-light:#60a5fa;--blue-dark:#1e40af;--orange-main:#f59e0b;--orange-light:#fbbf24;--orange-dark:#b45309;--glass-bg:rgba(255,255,255,0.65);--glass-blur:18px}body{background:linear-gradient(135deg,var(--blue-main) 0,var(--blue-light) 60%,var(--orange-light) 100%);color:#18181b;font-family:Inter,Segoe UI,Arial,sans-serif;min-height:100vh;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.section-contrast{background:var(--glass-bg);border-radius:2.5rem;box-shadow:0 8px 40px 0 rgba(37,99,235,.1),0 1.5px 8px 0 rgba(245,158,11,.08);border:1.5px solid rgba(96,165,250,.13);margin-bottom:3.5rem;padding:3rem 1.5rem;backdrop-filter:blur(var(--glass-blur));-webkit-backdrop-filter:blur(var(--glass-blur));transition:box-shadow .3s,background .3s}.section-contrast:before{display:none}@media (min-width:640px){.section-contrast{padding:4rem 2.5rem;margin-left:1.5rem;margin-right:1.5rem}}@media (min-width:1024px){.section-contrast{margin-left:2.5rem;margin-right:2.5rem}}.btn-accent{display:inline-flex;align-items:center;justify-content:center;background:var(--blue-main);color:#fff;font-weight:700;border-radius:1.2em;box-shadow:0 4px 24px 0 rgba(37,99,235,.13);padding:.9em 2.2em;font-size:1.25rem;letter-spacing:.01em;transition:background .2s,box-shadow .2s,transform .15s;border:none;cursor:pointer}.btn-accent:hover{background:var(--blue-dark);box-shadow:0 8px 32px 0 rgba(245,158,11,.13);transform:translateY(-2px) scale(1.03)}.btn-outline{display:inline-flex;align-items:center;justify-content:center;background:#fff;color:var(--blue-main);font-weight:700;border-radius:1.2em;box-shadow:0 4px 24px 0 rgba(37,99,235,.1);padding:.9em 2.2em;font-size:1.25rem;letter-spacing:.01em;border:2px solid var(--blue-main);cursor:pointer;transition:background .2s,box-shadow .2s,transform .15s,color .2s}.btn-outline:hover{background:var(--blue-main);color:#fff;box-shadow:0 8px 32px 0 rgba(37,99,235,.18);transform:translateY(-2px) scale(1.03)}.modern-card{background:#fff;border-radius:1.5rem;box-shadow:0 2px 16px 0 rgba(37,99,235,.07),0 1.5px 8px 0 rgba(245,158,11,.06);border:1.5px solid rgba(96,165,250,.09);transition:box-shadow .2s,border .2s}.modern-card:hover{box-shadow:0 8px 32px 0 rgba(245,158,11,.13);border:1.5px solid var(--orange-main)}@keyframes heroIconFloat{0%,to{transform:translateY(0) rotate(0deg)}50%{transform:translateY(-14px) rotate(4deg)}}@keyframes heroIconDrift{0%,to{transform:translateY(0) rotate(0deg)}33%{transform:translateY(-10px) rotate(-5deg)}66%{transform:translateY(-6px) rotate(3deg)}}@keyframes heroIconSway{0%,to{transform:translateY(0) translateX(0)}50%{transform:translateY(-8px) translateX(6px)}}.hero-bg-animated{background:linear-gradient(120deg,var(--blue-main) 0,var(--blue-light) 60%,var(--orange-main) 100%);background-size:200% 200%;animation:heroGradientMove 6s ease-in-out infinite}@keyframes heroGradientMove{0%{background-position:0 50%}50%{background-position:100% 50%}to{background-position:0 50%}}.header-base{transition:all .3s cubic-bezier(.4,0,.2,1)}.header-shrink .header-content{height:48px!important;padding-top:0!important;padding-bottom:0!important}.header-shrink .logo-text{font-size:1.3rem!important;letter-spacing:.01em}.logo-text{font-size:1.7rem!important}.logo-text,.logo-text-mini{font-family:Showpop,sans-serif!important;font-weight:300!important;letter-spacing:.01em;text-transform:uppercase}.logo-text-mini{font-size:1.3rem!important;transition:font-size .3s ease}.logo-text-mini.scrolled{font-size:1.1rem!important}.site-theme{--site-bg:#0a0a0f;--site-surface:rgba(255,255,255,0.03);--site-surface-hover:rgba(255,255,255,0.06);--site-border:rgba(255,255,255,0.05);--site-border-hover:rgba(255,255,255,0.1);--site-text:#ffffff;--site-text-secondary:rgba(255,255,255,0.5);--site-text-muted:rgba(255,255,255,0.3);--site-text-hint:rgba(255,255,255,0.2);--site-nav-bg:rgba(10,10,15,0.8);--site-modal-bg:#14141f;--site-input-bg:rgba(255,255,255,0.05);--site-input-border:rgba(255,255,255,0.1);--site-input-text:#ffffff;--site-input-placeholder:rgba(255,255,255,0.2);--site-tag-bg:rgba(255,255,255,0.05);--site-tag-border:rgba(255,255,255,0.05);--site-tag-text:rgba(255,255,255,0.6);--site-card-bg:rgba(255,255,255,0.03);--site-card-border:rgba(255,255,255,0.05);--site-name-from:#ffffff;--site-name-to:rgba(255,255,255,0.7);--site-avatar-border:rgba(255,255,255,0.1);--site-avatar-bg:rgba(255,255,255,0.05);--site-status-border-color:#0a0a0f;--site-phone-bg:rgba(255,255,255,0.05);--site-phone-border:rgba(255,255,255,0.1);--site-phone-text:#ffffff;--site-divider:rgba(255,255,255,0.1);--site-lang-dropdown:#1a1a24;--site-footer-text:rgba(255,255,255,0.2);--site-scroll-btn-bg:rgba(255,255,255,0.1);--site-scroll-btn-border:rgba(255,255,255,0.1);--site-scroll-btn-text:rgba(255,255,255,0.6)}.site-theme.site-light{--site-bg:#f8f9fb;--site-surface:rgba(0,0,0,0.02);--site-surface-hover:rgba(0,0,0,0.04);--site-border:rgba(0,0,0,0.08);--site-border-hover:rgba(0,0,0,0.15);--site-text:#1a1a2e;--site-text-secondary:rgba(0,0,0,0.55);--site-text-muted:rgba(0,0,0,0.4);--site-text-hint:rgba(0,0,0,0.25);--site-nav-bg:rgba(255,255,255,0.85);--site-modal-bg:#ffffff;--site-input-bg:rgba(0,0,0,0.03);--site-input-border:rgba(0,0,0,0.12);--site-input-text:#1a1a2e;--site-input-placeholder:rgba(0,0,0,0.3);--site-tag-bg:rgba(0,0,0,0.04);--site-tag-border:rgba(0,0,0,0.08);--site-tag-text:rgba(0,0,0,0.6);--site-card-bg:#ffffff;--site-card-border:rgba(0,0,0,0.08);--site-name-from:#1a1a2e;--site-name-to:rgba(26,26,46,0.7);--site-avatar-border:rgba(0,0,0,0.1);--site-avatar-bg:rgba(0,0,0,0.05);--site-status-border-color:#f8f9fb;--site-phone-bg:rgba(0,0,0,0.04);--site-phone-border:rgba(0,0,0,0.1);--site-phone-text:#1a1a2e;--site-divider:rgba(0,0,0,0.08);--site-lang-dropdown:#ffffff;--site-footer-text:rgba(0,0,0,0.3);--site-scroll-btn-bg:rgba(0,0,0,0.06);--site-scroll-btn-border:rgba(0,0,0,0.1);--site-scroll-btn-text:rgba(0,0,0,0.5)}.logo-text-jaipur{font-family:Jaipur,Inter,Segoe UI,Arial,sans-serif!important}.logo-text-jaipur,.logo-text-rennie{font-size:1.7rem!important;letter-spacing:.01em;text-transform:uppercase}.logo-text-rennie{font-family:Rennie,Inter,Segoe UI,Arial,sans-serif!important}.scroll-to-top-btn{position:fixed;right:2rem;bottom:2.5rem;z-index:100;background:#6366f1;color:#fff;border-radius:9999px;box-shadow:0 2px 12px 0 rgba(80,80,120,.13);padding:.75rem;width:3rem;height:3rem;display:flex;align-items:center;justify-content:center;font-size:1.5rem;border:none;cursor:pointer;opacity:0;pointer-events:none;transition:opacity .3s}.scroll-to-top-btn.visible{opacity:1;pointer-events:auto}@font-face{font-family:NorseCyr2;src:url(/fonts/Norse-Regular.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Jaipur;src:url(/fonts/Jaipur.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Rennie;src:url(/fonts/Rennie.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}.selection\:bg-blue-500\/30 ::-moz-selection{background-color:rgb(59 130 246/.3)}.selection\:bg-blue-500\/30 ::selection{background-color:rgb(59 130 246/.3)}.selection\:bg-blue-500\/30::-moz-selection{background-color:rgb(59 130 246/.3)}.selection\:bg-blue-500\/30::selection{background-color:rgb(59 130 246/.3)}.placeholder\:text-blue-300::-moz-placeholder{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.placeholder\:text-blue-300::placeholder{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.last\:border-0:last-child{border-width:0}.last\:pb-0:last-child{padding-bottom:0}.focus-within\:ring-2:focus-within{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-within\:ring-blue-400:focus-within{--tw-ring-opacity:1;--tw-ring-color:rgb(96 165 250/var(--tw-ring-opacity,1))}.hover\:border-blue-300:hover{--tw-border-opacity:1;border-color:rgb(147 197 253/var(--tw-border-opacity,1))}.hover\:border-blue-400:hover{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity,1))}.hover\:border-gray-300:hover{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.hover\:bg-amber-200:hover{--tw-bg-opacity:1;background-color:rgb(253 230 138/var(--tw-bg-opacity,1))}.hover\:bg-amber-50:hover{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity,1))}.hover\:bg-amber-600:hover{--tw-bg-opacity:1;background-color:rgb(217 119 6/var(--tw-bg-opacity,1))}.hover\:bg-black\/70:hover{background-color:rgb(0 0 0/.7)}.hover\:bg-blue-100:hover{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.hover\:bg-blue-50:hover{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.hover\:bg-blue-50\/60:hover{background-color:rgb(239 246 255/.6)}.hover\:bg-blue-500:hover{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.hover\:bg-blue-700:hover{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity,1))}.hover\:bg-emerald-200:hover{--tw-bg-opacity:1;background-color:rgb(167 243 208/var(--tw-bg-opacity,1))}.hover\:bg-emerald-700:hover{--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity,1))}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.hover\:bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.hover\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.hover\:bg-gray-50\/50:hover{background-color:rgb(249 250 251/.5)}.hover\:bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.hover\:bg-green-100:hover{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity,1))}.hover\:bg-green-50:hover{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity,1))}.hover\:bg-green-700:hover{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity,1))}.hover\:bg-indigo-100:hover{--tw-bg-opacity:1;background-color:rgb(224 231 255/var(--tw-bg-opacity,1))}.hover\:bg-indigo-200:hover{--tw-bg-opacity:1;background-color:rgb(199 210 254/var(--tw-bg-opacity,1))}.hover\:bg-indigo-700:hover{--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity,1))}.hover\:bg-orange-600:hover{--tw-bg-opacity:1;background-color:rgb(234 88 12/var(--tw-bg-opacity,1))}.hover\:bg-pink-100:hover{--tw-bg-opacity:1;background-color:rgb(252 231 243/var(--tw-bg-opacity,1))}.hover\:bg-pink-50:hover{--tw-bg-opacity:1;background-color:rgb(253 242 248/var(--tw-bg-opacity,1))}.hover\:bg-purple-100:hover{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity,1))}.hover\:bg-purple-700:hover{--tw-bg-opacity:1;background-color:rgb(126 34 206/var(--tw-bg-opacity,1))}.hover\:bg-red-100:hover{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.hover\:bg-red-200:hover{--tw-bg-opacity:1;background-color:rgb(254 202 202/var(--tw-bg-opacity,1))}.hover\:bg-red-50:hover{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.hover\:bg-red-600:hover{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.hover\:bg-rose-700:hover{--tw-bg-opacity:1;background-color:rgb(190 18 60/var(--tw-bg-opacity,1))}.hover\:bg-slate-100:hover{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.hover\:bg-slate-800:hover{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.hover\:bg-white:hover{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.hover\:bg-white\/10:hover{background-color:rgb(255 255 255/.1)}.hover\:bg-white\/20:hover{background-color:rgb(255 255 255/.2)}.hover\:bg-white\/25:hover{background-color:rgb(255 255 255/.25)}.hover\:bg-yellow-100:hover{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity,1))}.hover\:bg-yellow-600:hover{--tw-bg-opacity:1;background-color:rgb(202 138 4/var(--tw-bg-opacity,1))}.hover\:from-amber-600:hover{--tw-gradient-from:#d97706 var(--tw-gradient-from-position);--tw-gradient-to:rgb(217 119 6/0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.hover\:to-yellow-600:hover{--tw-gradient-to:#ca8a04 var(--tw-gradient-to-position)}.hover\:text-black:hover{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.hover\:text-blue-300:hover{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.hover\:text-blue-400:hover{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity,1))}.hover\:text-blue-600:hover{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.hover\:text-blue-700:hover{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity,1))}.hover\:text-blue-800:hover{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity,1))}.hover\:text-gray-600:hover{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.hover\:text-gray-700:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.hover\:text-gray-800:hover{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.hover\:text-gray-900:hover{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.hover\:text-green-500:hover{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.hover\:text-green-700:hover{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.hover\:text-indigo-700:hover{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity,1))}.hover\:text-pink-400:hover{--tw-text-opacity:1;color:rgb(244 114 182/var(--tw-text-opacity,1))}.hover\:text-pink-500:hover{--tw-text-opacity:1;color:rgb(236 72 153/var(--tw-text-opacity,1))}.hover\:text-pink-600:hover{--tw-text-opacity:1;color:rgb(219 39 119/var(--tw-text-opacity,1))}.hover\:text-purple-600:hover{--tw-text-opacity:1;color:rgb(147 51 234/var(--tw-text-opacity,1))}.hover\:text-purple-700:hover{--tw-text-opacity:1;color:rgb(126 34 206/var(--tw-text-opacity,1))}.hover\:text-red-400:hover{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.hover\:text-red-500:hover{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.hover\:text-red-600:hover{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.hover\:text-red-700:hover{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.hover\:text-sky-500:hover{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity,1))}.hover\:text-slate-700:hover{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity,1))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.hover\:text-white\/80:hover{color:rgb(255 255 255/.8)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-90:hover{opacity:.9}.hover\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px rgb(0 0 0/0.1),0 4px 6px -4px rgb(0 0 0/0.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.hover\:shadow-lg:hover,.hover\:shadow-md:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px rgb(0 0 0/0.1),0 2px 4px -2px rgb(0 0 0/0.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.hover\:shadow-sm:hover{--tw-shadow:0 1px 2px 0 rgb(0 0 0/0.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.hover\:shadow-sm:hover,.hover\:shadow-xl:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.hover\:shadow-xl:hover{--tw-shadow:0 20px 25px -5px rgb(0 0 0/0.1),0 8px 10px -6px rgb(0 0 0/0.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}.hover\:shadow-blue-500\/25:hover{--tw-shadow-color:rgb(59 130 246/0.25);--tw-shadow:var(--tw-shadow-colored)}.focus\:border-blue-500\/50:focus{border-color:rgb(59 130 246/.5)}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-blue-300:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(147 197 253/var(--tw-ring-opacity,1))}.focus\:ring-blue-400:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(96 165 250/var(--tw-ring-opacity,1))}.focus\:ring-blue-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.focus\:ring-emerald-400:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(52 211 153/var(--tw-ring-opacity,1))}.focus\:ring-rose-400:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(251 113 133/var(--tw-ring-opacity,1))}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px}.active\:scale-95:active{--tw-scale-x:.95;--tw-scale-y:.95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-gray-300:disabled{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.disabled\:bg-gray-50:disabled{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.disabled\:text-gray-400:disabled{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.disabled\:no-underline:disabled{text-decoration-line:none}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}.group:hover .group-hover\:scale-105{--tw-scale-x:1.05;--tw-scale-y:1.05}.group:hover .group-hover\:scale-105,.group:hover .group-hover\:scale-110{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:scale-110{--tw-scale-x:1.1;--tw-scale-y:1.1}.group:hover .group-hover\:border-blue-400{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity,1))}.group:hover .group-hover\:bg-black\/50{background-color:rgb(0 0 0/.5)}.group:hover .group-hover\:text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.group:hover .group-hover\:text-orange-600{--tw-text-opacity:1;color:rgb(234 88 12/var(--tw-text-opacity,1))}.group:hover .group-hover\:underline{text-decoration-line:underline}.group:hover .group-hover\:opacity-100{opacity:1}.group:hover .group-hover\:opacity-80{opacity:.8}.has-\[\:checked\]\:border-blue-500:has(:checked){--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity,1))}.has-\[\:checked\]\:bg-blue-50:has(:checked){--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}@media (min-width:640px){.sm\:mb-6{margin-bottom:1.5rem}.sm\:block{display:block}.sm\:hidden{display:none}.sm\:h-32{height:8rem}.sm\:w-32{width:8rem}.sm\:w-auto{width:auto}.sm\:flex-1{flex:1 1 0%}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:gap-3{gap:.75rem}.sm\:gap-4{gap:1rem}.sm\:space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.sm\:p-6{padding:1.5rem}.sm\:px-4{padding-left:1rem;padding-right:1rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-8{padding-top:2rem;padding-bottom:2rem}.sm\:pb-28{padding-bottom:7rem}.sm\:pt-24{padding-top:6rem}.sm\:text-2xl{font-size:1.5rem;line-height:2rem}.sm\:text-5xl{font-size:3rem;line-height:1}.sm\:text-lg{font-size:1.125rem;line-height:1.75rem}}@media (min-width:768px){.md\:flex{display:flex}.md\:hidden{display:none}.md\:w-64{width:16rem}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:p-14{padding:3.5rem}.md\:px-8{padding-left:2rem;padding-right:2rem}.md\:text-3xl{font-size:1.875rem;line-height:2.25rem}.md\:text-5xl{font-size:3rem;line-height:1}.md\:text-6xl{font-size:3.75rem;line-height:1}}@media (min-width:1024px){.lg\:block{display:block}.lg\:w-64{width:16rem}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:flex-row{flex-direction:row}.lg\:gap-8{gap:2rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}}@media (min-width:1280px){.xl\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}}Ÿstatic/css/9b5ea72bd44375b5.css1Ò{"version":3,"sources":["9b5ea72bd44375b5.css"],"names":[],"mappings":"AAAA,WACE,mBAAsB,CACtB,6CAAgD,CAChD,eAAmB,CACnB,iBAAkB,CAClB,iBACF,CAEA,WACE,8BAAkC,CAElC,eACF,CAEA,WACE,oBAAuB,CACvB,8CAAiD,CACjD,eAAmB,CACnB,iBAAkB,CAClB,iBACF,CAEA,kBACE,+BAAmC,CACnC,oBAAsB,CACtB,eACF,CACA,WACE,8BAAiC,CACjC,wDAA2D,CAC3D,eAAmB,CACnB,iBAAkB,CAClB,iBACF,CAEA,sBACE,yCAA6C,CAC7C,oBAAsB,CACtB,eACF,CACA,iBACE,uBAAwB,CACxB,uBAAwB,CACxB,kBAAmB,CACnB,kBAAmB,CACnB,aAAc,CACd,aAAc,CACd,aAAc,CACd,cAAe,CACf,cAAe,CACf,YAAa,CACb,YAAa,CACb,iBAAkB,CAClB,qCAAsC,CACtC,6BAA8B,CAC9B,4BAA6B,CAC7B,2BAA4B,CAC5B,cAAe,CACf,mBAAoB,CACpB,qBAAsB,CACtB,sBAAuB,CACvB,uBAAwB,CACxB,iBAAkB,CAClB,0BAA2B,CAC3B,2BAA4B,CAC5B,mCAAsC,CACtC,iCAAkC,CAClC,0BAA2B,CAC3B,qBAAsB,CACtB,6BAA8B,CAC9B,WAAY,CACZ,iBAAkB,CAClB,eAAgB,CAChB,gBAAiB,CACjB,iBAAkB,CAClB,aAAc,CACd,eAAgB,CAChB,YAAa,CACb,kBAAmB,CACnB,oBAAqB,CACrB,0BAA2B,CAC3B,wBAAyB,CACzB,yBAA0B,CAC1B,0BAA2B,CAC3B,sBAAuB,CACvB,uBAAwB,CACxB,wBAAyB,CACzB,qBAAsB,CACtB,mBAAoB,CACpB,qBAAsB,CACtB,oBAAqB,CACrB,oBACF,CACA,WACE,uBAAwB,CACxB,uBAAwB,CACxB,kBAAmB,CACnB,kBAAmB,CACnB,aAAc,CACd,aAAc,CACd,aAAc,CACd,cAAe,CACf,cAAe,CACf,YAAa,CACb,YAAa,CACb,iBAAkB,CAClB,qCAAsC,CACtC,6BAA8B,CAC9B,4BAA6B,CAC7B,2BAA4B,CAC5B,cAAe,CACf,mBAAoB,CACpB,qBAAsB,CACtB,sBAAuB,CACvB,uBAAwB,CACxB,iBAAkB,CAClB,0BAA2B,CAC3B,2BAA4B,CAC5B,mCAAsC,CACtC,iCAAkC,CAClC,0BAA2B,CAC3B,qBAAsB,CACtB,6BAA8B,CAC9B,WAAY,CACZ,iBAAkB,CAClB,eAAgB,CAChB,gBAAiB,CACjB,iBAAkB,CAClB,aAAc,CACd,eAAgB,CAChB,YAAa,CACb,kBAAmB,CACnB,oBAAqB,CACrB,0BAA2B,CAC3B,wBAAyB,CACzB,yBAA0B,CAC1B,0BAA2B,CAC3B,sBAAuB,CACvB,uBAAwB,CACxB,wBAAyB,CACzB,qBAAsB,CACtB,mBAAoB,CACpB,qBAAsB,CACtB,oBAAqB,CACrB,oBACF;AACA;;CAEC,CAKD,iBAGE,qBAAsB,CAGtB,sBACF,CACA,eAEE,eACF,CAUA,WAEE,eAAgB,CAChB,6BAA8B,CAC9B,eAAgB,CAChB,aAAc,CACX,UAAW,CACd,sCAAyC,CACzC,4BAA6B,CAC7B,8BAA+B,CAC/B,uCACF,CAKA,KACE,QAAS,CACT,mBACF,CAMA,GACE,QAAS,CACT,aAAc,CACd,oBACF,CAIA,oBACE,wCAAyC,CACjC,gCACV,CAIA,kBAME,iBAAkB,CAClB,mBACF,CAIA,EACE,aAAc,CACd,uBACF,CAIA,SAEE,kBACF,CAOA,kBAIE,mGAA+G,CAC/G,4BAA6B,CAC7B,8BAA+B,CAC/B,aACF,CAIA,MACE,aACF,CAIA,QAEE,aAAc,CACd,aAAc,CACd,iBAAkB,CAClB,uBACF,CACA,IACE,aACF,CACA,IACE,SACF,CAMA,MACE,aAAc,CACd,oBAAqB,CACrB,wBACF,CAMA,sCAKE,mBAAoB,CACpB,6BAA8B,CAC9B,+BAAgC,CAChC,cAAe,CACf,mBAAoB,CACpB,mBAAoB,CACpB,sBAAuB,CACvB,aAAc,CACd,QAAS,CACT,SACF,CAIA,cAEE,mBACF,CAKA,uFAIE,yBAA0B,CAC1B,4BAA6B,CAC7B,qBACF,CAIA,gBACE,YACF,CAIA,iBACE,eACF,CAIA,SACE,uBACF,CAIA,wDAEE,WACF,CAKA,cACE,4BAA6B,CAC7B,mBACF,CAIA,4BACE,uBACF,CAKA,6BACE,yBAA0B,CAC1B,YACF,CAIA,QACE,iBACF,CAIA,mDAaE,QACF,CACA,SACE,QAEF,CACA,gBAFE,SAIF,CACA,WAGE,eAAgB,CAChB,QAAS,CACT,SACF,CAIA,OACE,SACF,CAIA,SACE,eACF,CAKA,mDACE,SAAU,CACV,aACF,CACA,yCAEE,SAAU,CACV,aACF,CAIA,qBAEE,cACF,CAIA,UACE,cACF,CAMA,+CAQE,aAAc,CACd,qBACF,CAIA,UAEE,cAAe,CACf,WACF,CAEA,2CACE,YACF,CACA,WACE,UACF,CACA,yBAEE,WACE,eACF,CACF,CACA,yBAEE,WACE,eACF,CACF,CACA,0BAEE,WACE,gBACF,CACF,CACA,0BAEE,WACE,gBACF,CACF,CACA,0BAEE,WACE,gBACF,CACF,CACA,qBACE,mBACF,CACA,SACE,kBACF,CACA,QACE,eACF,CACA,OACE,cACF,CACA,UACE,iBACF,CACA,UACE,iBACF,CACA,QACE,eACF,CACA,UACE,aACF,CACA,SACE,OACF,CACA,aACE,cACF,CACA,WACE,YACF,CACA,SACE,WACF,CACA,UACE,aACF,CACA,WACE,WACF,CACA,UACE,cACF,CACA,UACE,aACF,CACA,QACE,MACF,CACA,WACE,YACF,CACA,WACE,QACF,CACA,WACE,QACF,CACA,QACE,WACF,CACA,QACE,SACF,CACA,SACE,OACF,CACA,YACE,aACF,CACA,SACE,YACF,CACA,YACE,SACF,CACA,SACE,WACF,CACA,SACE,YACF,CACA,SACE,UACF,CACA,SACE,aACF,CACA,SACE,YACF,CACA,OACE,KACF,CACA,UACE,WACF,CACA,OACE,UACF,CACA,UACE,OACF,CACA,OACE,SACF,CACA,QACE,QACF,CACA,QACE,QACF,CACA,OACE,UACF,CACA,OACE,QACF,CACA,OACE,UACF,CACA,UACE,QACF,CACA,MACE,UACF,CACA,MACE,UACF,CACA,MACE,UACF,CACA,WACE,WACF,CACA,UACE,UACF,CACA,YACE,yBACF,CACA,QACE,cACF,CACA,SACE,mBAAqB,CACrB,oBACF,CACA,MACE,gBAAiB,CACjB,iBACF,CACA,MACE,mBAAoB,CACpB,oBACF,CACA,SACE,gBAAiB,CACjB,iBACF,CACA,MACE,iBAAmB,CACnB,oBACF,CACA,QACE,kBACF,CACA,OACE,kBACF,CACA,QACE,eACF,CACA,MACE,eACF,CACA,SACE,qBACF,CACA,MACE,oBACF,CACA,SACE,qBACF,CACA,OACE,oBACF,CACA,OACE,kBACF,CACA,OACE,oBACF,CACA,MACE,mBACF,CACA,MACE,oBACF,CACA,MACE,kBACF,CACA,MACE,qBACF,CACA,MACE,oBACF,CACA,MACE,kBACF,CACA,MACE,kBACF,CACA,SACE,mBACF,CACA,MACE,iBACF,CACA,MACE,kBACF,CACA,MACE,gBACF,CACA,MACE,kBACF,CACA,SACE,gBACF,CACA,SACE,oBACF,CACA,MACE,mBACF,CACA,MACE,kBACF,CACA,SACE,kBACF,CACA,MACE,iBACF,CACA,SACE,kBACF,CACA,OACE,iBACF,CACA,OACE,eACF,CACA,MACE,gBACF,CACA,MACE,iBACF,CACA,MACE,eACF,CACA,MACE,kBACF,CACA,MACE,iBACF,CACA,MACE,eACF,CACA,SACE,eACF,CACA,cAIE,oBACF,CACA,4BALE,eAAgB,CAChB,mBAAoB,CACpB,2BAQF,CALA,cAIE,oBACF,CACA,OACE,aACF,CACA,cACE,oBACF,CACA,QACE,cACF,CACA,MACE,YACF,CACA,aACE,mBACF,CACA,OACE,aACF,CACA,MACE,YACF,CACA,QACE,YACF,CACA,eACE,gBACF,CACA,KACE,QACF,CACA,QACE,cACF,CACA,KACE,aACF,CACA,QACE,cACF,CACA,MACE,aACF,CACA,MACE,WACF,CACA,MACE,aACF,CACA,MACE,WACF,CACA,KACE,YACF,CACA,QACE,cACF,CACA,MACE,WACF,CACA,MACE,WACF,CACA,MACE,WACF,CACA,KACE,aACF,CACA,QACE,cACF,CACA,KACE,WACF,CACA,MACE,YACF,CACA,KACE,cACF,CACA,KACE,aACF,CACA,KACE,cACF,CACA,KACE,WACF,CACA,KACE,cACF,CACA,aACE,YACF,CACA,aACE,YACF,CACA,0BACE,yBACF,CACA,QACE,WACF,CACA,MACE,UACF,CACA,UACE,eACF,CACA,UACE,gBACF,CACA,UACE,gBACF,CACA,UACE,gBACF,CACA,UACE,gBACF,CACA,UACE,gBACF,CACA,gBACE,eACF,CACA,gBACE,eACF,CACA,gBACE,eACF,CACA,gBACE,eACF,CACA,SACE,YACF,CACA,gBACE,eACF,CACA,gBACE,eACF,CACA,gBACE,eACF,CACA,cACE,gBACF,CACA,KACE,OACF,CACA,KACE,YACF,CACA,QACE,aACF,CACA,QACE,SACF,CACA,MACE,YACF,CACA,MACE,aACF,CACA,MACE,UACF,CACA,MACE,YACF,CACA,MACE,UACF,CACA,KACE,WACF,CACA,QACE,aACF,CACA,MACE,UACF,CACA,MACE,UACF,CACA,MACE,UACF,CACA,KACE,YACF,CACA,QACE,aACF,CACA,KACE,UACF,CACA,MACE,WACF,CACA,MACE,WACF,CACA,KACE,aACF,CACA,MACE,WACF,CACA,MACE,WACF,CACA,KACE,YACF,CACA,KACE,aACF,CACA,MACE,WACF,CACA,KACE,UACF,CACA,KACE,aACF,CACA,aACE,WACF,CACA,aACE,WACF,CACA,OACE,sBAAuB,CACvB,iBACF,CACA,QACE,UACF,CACA,MACE,SACF,CACA,SACE,WACF,CACA,UACE,cACF,CACA,UACE,eACF,CACA,iBACE,eACF,CACA,gBACE,cACF,CACA,iBACE,eACF,CACA,iBACE,eACF,CACA,iBACE,eACF,CACA,iBACE,eACF,CACA,WACE,0BAA2B,CAC3B,qBACF,CACA,WACE,eACF,CACA,WACE,eACF,CACA,WACE,eACF,CACA,WACE,eACF,CACA,WACE,eACF,CACA,WACE,eACF,CACA,iBACE,eACF,CACA,gBACE,aACF,CACA,gBACE,cACF,CACA,YACE,cACF,CACA,UACE,eACF,CACA,UACE,eACF,CACA,UACE,eACF,CACA,UACE,eACF,CACA,UACE,eACF,CACA,QACE,WACF,CACA,YACE,MACF,CAIA,yBACE,aACF,CACA,MACE,WACF,CACA,mBACE,qBAEF,CACA,oCAFE,6LAKF,CAHA,iBACE,sBAEF,CACA,mBACE,qBAEF,CACA,kCAFE,6LAKF,CAHA,eACE,oBAEF,CACA,eACE,wBAEF,CACA,+BAFE,6LAKF,CAHA,gBACE,qBAEF,CACA,eACE,wBAEF,CACA,8BAFE,6LAKF,CAHA,eACE,wBAEF,CACA,eACE,uBAEF,CACA,8BAFE,6LAKF,CAHA,eACE,oBAEF,CACA,eACE,qBAEF,CACA,2BAFE,6LAKF,CAHA,YACE,kBAEF,CACA,WACE,iBAEF,CACA,sBAFE,6LAKF,CAHA,WACE,iBAEF,CACA,WACE,iBAAkB,CAClB,iBAEF,CACA,sBAFE,6LAIF,CACA,iBAEE,IACE,UACF,CACF,CACA,eACE,mDACF,CACA,gBAEE,GACE,uBACF,CACF,CACA,cACE,iCACF,CACA,gBACE,cACF,CACA,oBACE,kBACF,CACA,gBACE,cACF,CACA,aACE,wBAAyB,CACtB,qBAAsB,CACjB,gBACV,CACA,YACE,uBAAwB,CACrB,oBAAqB,CAChB,eACV,CACA,aACE,WACF,CACA,UACE,eACF,CACA,QACE,mDACF,CACA,gBACE,qCACF,CACA,YACE,uBACF,CACA,aACE,6CACF,CACA,aACE,6CACF,CACA,aACE,6CACF,CACA,aACE,6CACF,CACA,aACE,6CACF,CACA,kBACE,0BACF,CACA,UACE,qBACF,CACA,WACE,cACF,CACA,aACE,sBACF,CACA,WACE,oBACF,CACA,cACE,kBACF,CACA,aACE,wBACF,CACA,gBACE,sBACF,CACA,iBACE,6BACF,CACA,OACE,KACF,CACA,UACE,WACF,CACA,OACE,UACF,CACA,UACE,WACF,CACA,QACE,UACF,CACA,OACE,SACF,CACA,UACE,WACF,CACA,OACE,UACF,CACA,OACE,QACF,CACA,OACE,WACF,CACA,OACE,UACF,CACA,OACE,QACF,CACA,SACE,cACF,CACA,4CACE,sBAAuB,CACvB,8DAAgE,CAChE,uDACF,CACA,yCACE,sBAAuB,CACvB,6DAA+D,CAC/D,sDACF,CACA,4CACE,sBAAuB,CACvB,8DAAgE,CAChE,uDACF,CACA,0CACE,sBAAuB,CACvB,2DAA4D,CAC5D,oDACF,CACA,yCACE,sBAAuB,CACvB,4DAA8D,CAC9D,qDACF,CACA,yCACE,sBAAuB,CACvB,6DAA+D,CAC/D,sDACF,CACA,yCACE,sBAAuB,CACvB,2DAA4D,CAC5D,oDACF,CACA,yCACE,sBAAuB,CACvB,8DAA+D,CAC/D,uDACF,CACA,yCACE,sBAAuB,CACvB,6DAA8D,CAC9D,sDACF,CACA,yCACE,sBAAuB,CACvB,2DAA4D,CAC5D,oDACF,CACA,wCACE,uBAAwB,CACxB,iEAAkE,CAClE,0DACF,CACA,+CACE,qBAAsB,CACtB,wDACF,CACA,UACE,mBACF,CACA,aACE,iBACF,CACA,iBACE,eACF,CACA,iBACE,eACF,CACA,iBACE,eACF,CACA,UACE,eAAgB,CAChB,sBAEF,CACA,6BAFE,kBAIF,CACA,qBACE,oBACF,CACA,SACE,oBACF,CACA,aACE,kBACF,CACA,qBACE,oBACF,CACA,cACE,oBACF,CACA,YACE,mBACF,CACA,YACE,qBACF,CACA,YACE,oBACF,CACA,cACE,iCAAmC,CACnC,gCACF,CACA,cACE,4BAA8B,CAC9B,6BACF,CACA,eACE,8BACF,CACA,eACE,+BACF,CACA,QACE,gBACF,CACA,UACE,cACF,CACA,UACE,gBACF,CACA,UACE,oBAEF,CACA,oBAFE,uBAIF,CACA,YACE,uBACF,CACA,YACE,qBACF,CACA,UACE,sBACF,CACA,YACE,sBACF,CACA,UACE,oBACF,CACA,YACE,kBACF,CACA,YACE,oBACF,CACA,eACE,mBACF,CACA,kBACE,qBAAsB,CACtB,wDACF,CACA,kBACE,qBAAsB,CACtB,wDACF,CACA,kBACE,qBAAsB,CACtB,uDACF,CACA,kBACE,qBAAsB,CACtB,uDACF,CACA,iBACE,qBAAsB,CACtB,wDACF,CACA,iBACE,qBAAsB,CACtB,wDACF,CACA,iBACE,qBAAsB,CACtB,wDACF,CACA,iBACE,qBAAsB,CACtB,uDACF,CACA,gBACE,qBAAsB,CACtB,wDACF,CACA,iBACE,qBAAsB,CACtB,uDACF,CACA,qBACE,+BACF,CACA,qBACE,+BACF,CACA,iBACE,qBAAsB,CACtB,sDACF,CACA,oBACE,qBAAsB,CACtB,wDACF,CACA,oBACE,qBAAsB,CACtB,wDACF,CACA,oBACE,qBAAsB,CACtB,uDACF,CACA,oBACE,qBAAsB,CACtB,uDACF,CACA,wBACE,+BACF,CACA,iBACE,qBAAsB,CACtB,wDACF,CACA,iBACE,qBAAsB,CACtB,wDACF,CACA,iBACE,qBAAsB,CACtB,wDACF,CACA,gBACE,qBAAsB,CACtB,wDACF,CACA,kBACE,qBAAsB,CACtB,wDACF,CACA,kBACE,qBAAsB,CACtB,wDACF,CACA,mBACE,qBAAsB,CACtB,wDACF,CACA,mBACE,qBAAsB,CACtB,wDACF,CACA,mBACE,qBAAsB,CACtB,wDACF,CACA,iBACE,qBAAsB,CACtB,wDACF,CACA,mBACE,qBAAsB,CACtB,wDACF,CACA,mBACE,qBAAsB,CACtB,wDACF,CACA,uBACE,+BACF,CACA,gBACE,qBAAsB,CACtB,wDACF,CACA,gBACE,qBAAsB,CACtB,wDACF,CACA,gBACE,qBAAsB,CACtB,wDACF,CACA,gBACE,qBAAsB,CACtB,wDACF,CACA,iBACE,qBAAsB,CACtB,wDACF,CACA,iBACE,qBAAsB,CACtB,wDACF,CACA,iBACE,qBAAsB,CACtB,sDACF,CACA,gBACE,qBAAsB,CACtB,wDACF,CACA,kBACE,qBAAsB,CACtB,wDACF,CACA,kBACE,qBAAsB,CACtB,wDACF,CACA,iBACE,qBAAsB,CACtB,wDACF,CACA,oBACE,wBACF,CACA,mBACE,qBAAsB,CACtB,wDACF,CACA,cACE,qBAAsB,CACtB,wDACF,CACA,kBACE,gCACF,CACA,kBACE,gCACF,CACA,kBACE,gCACF,CACA,kBACE,gCACF,CACA,mBACE,qBAAsB,CACtB,wDACF,CACA,mBACE,qBAAsB,CACtB,4DACF,CACA,mBACE,qBAAsB,CACtB,2DACF,CACA,sBACE,4BACF,CACA,gBACE,qBAAsB,CACtB,4DACF,CACA,iBACE,iBAAkB,CAClB,qDACF,CACA,cACE,iBAAkB,CAClB,wDACF,CACA,cACE,iBAAkB,CAClB,uDACF,CACA,aACE,iBAAkB,CAClB,wDACF,CACA,cACE,iBAAkB,CAClB,uDACF,CACA,kBACE,mCACF,CACA,aACE,6BACF,CACA,cACE,8BACF,CACA,cACE,8BACF,CACA,cACE,8BACF,CACA,cACE,8BACF,CACA,cACE,8BACF,CACA,cACE,+BACF,CACA,cACE,8BACF,CACA,aACE,iBAAkB,CAClB,wDACF,CACA,YACE,iBAAkB,CAClB,wDACF,CACA,gBACE,oCACF,CACA,gBACE,oCACF,CACA,aACE,iBAAkB,CAClB,uDACF,CACA,iBACE,mCACF,CACA,aACE,iBAAkB,CAClB,sDACF,CACA,iBACE,kCACF,CACA,gBACE,iBAAkB,CAClB,wDACF,CACA,gBACE,iBAAkB,CAClB,wDACF,CACA,gBACE,iBAAkB,CAClB,uDACF,CACA,eACE,iBAAkB,CAClB,wDACF,CACA,gBACE,iBAAkB,CAClB,uDACF,CACA,oBACE,mCACF,CACA,oBACE,mCACF,CACA,gBACE,iBAAkB,CAClB,sDACF,CACA,aACE,iBAAkB,CAClB,wDACF,CACA,aACE,iBAAkB,CAClB,wDACF,CACA,aACE,iBAAkB,CAClB,wDACF,CACA,aACE,iBAAkB,CAClB,wDACF,CACA,YACE,iBAAkB,CAClB,wDACF,CACA,aACE,iBAAkB,CAClB,qDACF,CACA,aACE,iBAAkB,CAClB,qDACF,CACA,cACE,iBAAkB,CAClB,wDACF,CACA,cACE,iBAAkB,CAClB,uDACF,CACA,aACE,iBAAkB,CAClB,wDACF,CACA,cACE,iBAAkB,CAClB,sDACF,CACA,cACE,iBAAkB,CAClB,sDACF,CACA,eACE,iBAAkB,CAClB,wDACF,CACA,cACE,iBAAkB,CAClB,wDACF,CACA,eACE,iBAAkB,CAClB,sDACF,CACA,eACE,iBAAkB,CAClB,wDACF,CACA,cACE,iBAAkB,CAClB,wDACF,CACA,eACE,iBAAkB,CAClB,uDACF,CACA,YACE,iBAAkB,CAClB,wDACF,CACA,eACE,iBAAkB,CAClB,wDACF,CACA,eACE,iBAAkB,CAClB,wDACF,CACA,cACE,iBAAkB,CAClB,wDACF,CACA,mBACE,mCACF,CACA,eACE,iBAAkB,CAClB,uDACF,CACA,YACE,iBAAkB,CAClB,wDACF,CACA,YACE,iBAAkB,CAClB,wDACF,CACA,YACE,iBAAkB,CAClB,wDACF,CACA,WACE,iBAAkB,CAClB,wDACF,CACA,YACE,iBAAkB,CAClB,sDACF,CACA,YACE,iBAAkB,CAClB,wDACF,CACA,aACE,iBAAkB,CAClB,sDACF,CACA,WACE,iBAAkB,CAClB,wDACF,CACA,YACE,iBAAkB,CAClB,uDACF,CACA,cACE,iBAAkB,CAClB,wDACF,CACA,cACE,iBAAkB,CAClB,qDACF,CACA,YACE,iBAAkB,CAClB,wDACF,CACA,cACE,iBAAkB,CAClB,wDACF,CACA,eACE,iBAAkB,CAClB,uDACF,CACA,UACE,iBAAkB,CAClB,wDACF,CACA,cACE,oCACF,CACA,cACE,qCACF,CACA,cACE,oCACF,CACA,cACE,oCACF,CACA,cACE,oCACF,CACA,cACE,oCACF,CACA,eACE,iBAAkB,CAClB,wDACF,CACA,eACE,iBAAkB,CAClB,uDACF,CACA,cACE,iBAAkB,CAClB,wDACF,CACA,eACE,iBAAkB,CAClB,sDACF,CACA,mBACE,0EACF,CACA,kBACE,mEACF,CACA,kBACE,iEACF,CACA,gBACE,2DAA4D,CAC5D,iEAAoE,CACpE,iEACF,CACA,eACE,2DAA4D,CAC5D,kEAAqE,CACrE,iEACF,CACA,gBACE,2DAA4D,CAC5D,iEAAoE,CACpE,iEACF,CACA,gBACE,kEAAqE,CACrE,4DAA+D,CAC/D,iEACF,CACA,eACE,2DAA4D,CAC5D,iEAAoE,CACpE,iEACF,CACA,eACE,2DAA4D,CAC5D,gEAAmE,CACnE,iEACF,CACA,iBACE,2DAA4D,CAC5D,kEAAqE,CACrE,iEACF,CACA,iBACE,2DAA4D,CAC5D,iEAAoE,CACpE,iEACF,CACA,iBACE,4DAAgE,CAChE,6GACF,CACA,gBACE,iEAAqE,CACrE,yGACF,CACA,cACE,uDACF,CACA,aACE,uDACF,CACA,aACE,uDACF,CACA,eACE,uDACF,CACA,eACE,uDACF,CACA,gBACE,2DACF,CACA,cACE,uDACF,CACA,eACE,uDACF,CACA,cACE,4BAA6B,CACrB,oBACV,CACA,eACE,YACF,CACA,gBACE,qBAAsB,CACnB,kBACL,CACA,cACE,mBAAoB,CACjB,gBACL,CACA,KACE,SACF,CACA,KACE,cACF,CACA,MACE,cACF,CACA,KACE,aACF,CACA,QACE,eACF,CACA,KACE,cACF,CACA,KACE,YACF,CACA,KACE,eACF,CACA,KACE,cACF,CACA,KACE,YACF,CACA,SACE,oBAAsB,CACtB,qBACF,CACA,MACE,mBAAqB,CACrB,oBACF,CACA,SACE,oBAAsB,CACtB,qBACF,CACA,MACE,kBAAoB,CACpB,mBACF,CACA,SACE,oBAAsB,CACtB,qBACF,CACA,MACE,mBAAqB,CACrB,oBACF,CACA,SACE,oBAAsB,CACtB,qBACF,CACA,MACE,iBAAkB,CAClB,kBACF,CACA,MACE,oBAAqB,CACrB,qBACF,CACA,MACE,mBAAoB,CACpB,oBACF,CACA,MACE,oBAAqB,CACrB,qBACF,CACA,MACE,iBAAkB,CAClB,kBACF,CACA,SACE,mBAAqB,CACrB,sBACF,CACA,MACE,kBAAoB,CACpB,qBACF,CACA,SACE,mBAAqB,CACrB,sBACF,CACA,OACE,kBAAmB,CACnB,qBACF,CACA,OACE,gBAAiB,CACjB,mBACF,CACA,OACE,kBAAmB,CACnB,qBACF,CACA,OACE,gBAAiB,CACjB,mBACF,CACA,MACE,iBAAmB,CACnB,oBACF,CACA,SACE,mBAAqB,CACrB,sBACF,CACA,OACE,gBAAiB,CACjB,mBACF,CACA,OACE,gBAAiB,CACjB,mBACF,CACA,MACE,kBAAoB,CACpB,qBACF,CACA,SACE,mBAAqB,CACrB,sBACF,CACA,MACE,gBAAiB,CACjB,mBACF,CACA,MACE,mBAAoB,CACpB,sBACF,CACA,MACE,kBAAmB,CACnB,qBACF,CACA,MACE,gBAAiB,CACjB,mBACF,CACA,SACE,sBACF,CACA,MACE,qBACF,CACA,MACE,oBACF,CACA,OACE,mBACF,CACA,MACE,mBACF,CACA,MACE,sBACF,CACA,OACE,mBACF,CACA,OACE,iBACF,CACA,MACE,oBACF,CACA,MACE,oBACF,CACA,MACE,iBACF,CACA,OACE,oBACF,CACA,MACE,mBACF,CACA,OACE,kBACF,CACA,MACE,oBACF,CACA,MACE,kBACF,CACA,MACE,kBACF,CACA,OACE,kBACF,CACA,OACE,gBACF,CACA,MACE,iBACF,CACA,MACE,kBACF,CACA,MACE,gBACF,CACA,MACE,kBACF,CACA,MACE,gBACF,CACA,WACE,eACF,CACA,aACE,iBACF,CACA,YACE,gBACF,CACA,WACE,kBACF,CACA,WACE,mGACF,CACA,UACE,gBAAiB,CACjB,gBACF,CACA,UACE,kBAAmB,CACnB,mBACF,CACA,UACE,iBAAkB,CAClB,kBACF,CACA,UACE,cAAe,CACf,aACF,CACA,UACE,cAAe,CACf,aACF,CACA,eACE,cACF,CACA,eACE,cACF,CACA,cACE,aACF,CACA,cACE,aACF,CACA,WACE,cAAe,CACf,kBACF,CACA,SACE,kBAAmB,CACnB,mBACF,CACA,SACE,iBAAmB,CACnB,mBACF,CACA,SACE,iBAAkB,CAClB,mBACF,CACA,SACE,gBAAkB,CAClB,gBACF,CACA,WACE,eACF,CACA,gBACE,eACF,CACA,aACE,eACF,CACA,aACE,eACF,CACA,eACE,eACF,CACA,WACE,wBACF,CACA,QACE,iBACF,CACA,cACE,aACF,CACA,iBACE,iBACF,CACA,cACE,iBACF,CACA,eACE,gBACF,CACA,gBACE,sBACF,CACA,eACE,qBACF,CACA,gBACE,oBACF,CACA,gBACE,mBAAoB,CACpB,8CACF,CACA,gBACE,mBAAoB,CACpB,8CACF,CACA,gBACE,mBAAoB,CACpB,6CACF,CACA,gBACE,mBAAoB,CACpB,4CACF,CACA,gBACE,mBAAoB,CACpB,6CACF,CACA,gBACE,mBAAoB,CACpB,6CACF,CACA,eACE,mBAAoB,CACpB,+CACF,CACA,eACE,mBAAoB,CACpB,+CACF,CACA,eACE,mBAAoB,CACpB,8CACF,CACA,eACE,mBAAoB,CACpB,8CACF,CACA,eACE,mBAAoB,CACpB,6CACF,CACA,eACE,mBAAoB,CACpB,6CACF,CACA,eACE,mBAAoB,CACpB,6CACF,CACA,eACE,mBAAoB,CACpB,6CACF,CACA,kBACE,mBAAoB,CACpB,8CACF,CACA,kBACE,mBAAoB,CACpB,8CACF,CACA,kBACE,mBAAoB,CACpB,6CACF,CACA,kBACE,mBAAoB,CACpB,4CACF,CACA,kBACE,mBAAoB,CACpB,2CACF,CACA,kBACE,mBAAoB,CACpB,2CACF,CACA,eACE,mBAAoB,CACpB,+CACF,CACA,eACE,mBAAoB,CACpB,+CACF,CACA,eACE,mBAAoB,CACpB,+CACF,CACA,eACE,mBAAoB,CACpB,+CACF,CACA,eACE,mBAAoB,CACpB,4CACF,CACA,eACE,mBAAoB,CACpB,4CACF,CACA,eACE,mBAAoB,CACpB,4CACF,CACA,eACE,mBAAoB,CACpB,4CACF,CACA,gBACE,mBAAoB,CACpB,8CACF,CACA,gBACE,mBAAoB,CACpB,6CACF,CACA,gBACE,mBAAoB,CACpB,6CACF,CACA,gBACE,mBAAoB,CACpB,6CACF,CACA,gBACE,mBAAoB,CACpB,6CACF,CACA,iBACE,mBAAoB,CACpB,8CACF,CACA,iBACE,mBAAoB,CACpB,6CACF,CACA,iBACE,mBAAoB,CACpB,6CACF,CACA,iBACE,mBAAoB,CACpB,8CACF,CACA,iBACE,mBAAoB,CACpB,8CACF,CACA,iBACE,mBAAoB,CACpB,6CACF,CACA,iBACE,mBAAoB,CACpB,6CACF,CACA,iBACE,mBAAoB,CACpB,6CACF,CACA,eACE,mBAAoB,CACpB,+CACF,CACA,eACE,mBAAoB,CACpB,8CACF,CACA,eACE,mBAAoB,CACpB,8CACF,CACA,iBACE,mBAAoB,CACpB,+CACF,CACA,iBACE,mBAAoB,CACpB,8CACF,CACA,iBACE,mBAAoB,CACpB,8CACF,CACA,iBACE,mBAAoB,CACpB,8CACF,CACA,cACE,mBAAoB,CACpB,+CACF,CACA,cACE,mBAAoB,CACpB,6CACF,CACA,cACE,mBAAoB,CACpB,6CACF,CACA,cACE,mBAAoB,CACpB,6CACF,CACA,eACE,mBAAoB,CACpB,6CACF,CACA,eACE,mBAAoB,CACpB,6CACF,CACA,eACE,mBAAoB,CACpB,6CACF,CACA,cACE,mBAAoB,CACpB,6CACF,CACA,cACE,mBAAoB,CACpB,6CACF,CACA,gBACE,mBAAoB,CACpB,+CACF,CACA,gBACE,mBAAoB,CACpB,+CACF,CACA,gBACE,mBAAoB,CACpB,+CACF,CACA,gBACE,mBAAoB,CACpB,6CACF,CACA,gBACE,mBAAoB,CACpB,4CACF,CACA,gBACE,mBAAoB,CACpB,4CACF,CACA,eACE,mBAAoB,CACpB,8CACF,CACA,kBACE,iBACF,CACA,iBACE,mBAAoB,CACpB,8CACF,CACA,iBACE,mBAAoB,CACpB,8CACF,CACA,YACE,mBAAoB,CACpB,+CACF,CACA,gBACE,yBACF,CACA,gBACE,yBACF,CACA,gBACE,yBACF,CACA,gBACE,yBACF,CACA,gBACE,yBACF,CACA,iBACE,mBAAoB,CACpB,8CACF,CACA,iBACE,mBAAoB,CACpB,8CACF,CACA,iBACE,mBAAoB,CACpB,6CACF,CACA,iBACE,mBAAoB,CACpB,6CACF,CACA,iBACE,mBAAoB,CACpB,4CACF,CACA,iBACE,mBAAoB,CACpB,6CACF,CACA,WACE,8BACF,CACA,cACE,iCACF,CACA,WACE,SACF,CACA,aACE,SACF,CACA,YACE,WACF,CACA,YACE,UACF,CACA,YACE,UACF,CACA,YACE,UACF,CACA,YACE,UACF,CACA,YACE,WACF,CACA,QACE,oEAA0E,CAC1E,4FAEF,CACA,oBAFE,kGAMF,CAJA,YACE,6CAAgD,CAChD,4DAEF,CACA,WACE,yEAA+E,CAC/E,iGAEF,CACA,sBAFE,kGAMF,CAJA,WACE,uEAA6E,CAC7E,+FAEF,CACA,WACE,uCAA0C,CAC1C,sDAEF,CACA,sBAFE,kGAMF,CAJA,WACE,0EAAgF,CAChF,kGAEF,CACA,kBACE,yBAA0B,CAC1B,oCACF,CACA,sBACE,qCAAwC,CACxC,oCACF,CACA,sBACE,sCAAyC,CACzC,oCACF,CACA,UACE,oHAAsH,CACtH,kHAAoH,CACpH,kGACF,CACA,QACE,0GAA2G,CAC3G,wGAEF,CACA,gBAFE,wFAMF,CAJA,QACE,0GAA2G,CAC3G,wGAEF,CACA,iBACE,6BAA+B,CAC/B,kEACF,CACA,eACE,mBAAoB,CACpB,yDACF,CACA,eACE,mBAAoB,CACpB,wDACF,CACA,eACE,mBAAoB,CACpB,wDACF,CACA,iBACE,oCACF,CACA,eACE,0BACF,CACA,eACE,0BACF,CACA,MACE,mBAEF,CACA,sBAFE,gLAKF,CAHA,gBACE,qBAEF,CACA,gBACE,qBAEF,CACA,6BAFE,gLAKF,CAHA,aACE,6FAEF,CACA,gBACE,8FAEF,CACA,wBAFE,gLAIF,CACA,eACE,4BAEF,CACA,iCAFE,sQAKF,CAHA,kBACE,6BAEF,CACA,kBACE,4BAEF,CACA,oCAFE,sQAKF,CAHA,kBACE,6BAEF,CACA,YACE,6IAAwJ,CACxJ,kDAAwD,CACxD,wBACF,CACA,gBACE,uBAAwB,CACxB,kDAAwD,CACxD,wBACF,CACA,mBACE,yFAA+F,CAC/F,kDAAwD,CACxD,wBACF,CACA,oBACE,2BAA4B,CAC5B,kDAAwD,CACxD,wBACF,CACA,sBACE,6BAA8B,CAC9B,kDAAwD,CACxD,wBACF,CACA,cACE,uBACF,CACA,cACE,uBACF,CACA,cACE,uBACF,CACA,aACE,kDACF,CAGA,MACE,mBAAoB,CACpB,oBAAqB,CACrB,mBAAoB,CACpB,qBAAsB,CACtB,sBAAuB,CACvB,qBAAsB,CACtB,iCAAkC,CAClC,iBACF,CAEA,KACE,oGAAyG,CACzG,aAAc,CACd,2CAAmD,CACnD,gBAAiB,CACjB,kCAAmC,CACnC,iCACF,CAKA,kBACE,0BAA2B,CAC3B,oBAAqB,CACrB,6EAAkF,CAClF,uCAAyC,CACzC,oBAAqB,CACrB,mBAAoB,CACpB,uCAAwC,CACxC,+CAAgD,CAChD,wCACF,CACA,yBACE,YACF,CACA,yBACE,kBACE,mBAAoB,CACpB,kBAAmB,CACnB,mBACF,CACF,CACA,0BACE,kBACE,kBAAmB,CACnB,mBACF,CACF,CAGA,YACE,mBAAoB,CACpB,kBAAmB,CACnB,sBAAuB,CACvB,2BAA4B,CAC5B,UAAW,CACX,eAAgB,CAChB,mBAAoB,CACpB,2CAA6C,CAC7C,kBAAoB,CACpB,iBAAkB,CAClB,oBAAsB,CACtB,uDAA6D,CAC7D,WAAY,CACZ,cACF,CACA,kBACE,2BAA4B,CAC5B,4CAA8C,CAC9C,sCACF,CAGA,aACE,mBAAoB,CACpB,kBAAmB,CACnB,sBAAuB,CACvB,eAAgB,CAChB,sBAAuB,CACvB,eAAgB,CAChB,mBAAoB,CACpB,0CAA6C,CAC7C,kBAAoB,CACpB,iBAAkB,CAClB,oBAAsB,CACtB,iCAAkC,CAClC,cAAe,CACf,iEACF,CACA,mBACE,2BAA4B,CAC5B,UAAW,CACX,2CAA6C,CAC7C,sCACF,CAGA,aACE,eAAgB,CAChB,oBAAqB,CACrB,8EAAkF,CAClF,uCAAyC,CACzC,oCACF,CACA,mBACE,4CAA8C,CAC9C,qCACF,CAGA,yBACE,MAAW,oCAAyC,CACpD,IAAM,wCAA2C,CACnD,CACA,yBACE,MAAW,oCAAyC,CACpD,IAAM,yCAA4C,CAClD,IAAM,uCAA0C,CAClD,CACA,wBACE,MAAW,qCAA4C,CACvD,IAAM,0CAA6C,CACrD,CAGA,kBACE,mGAAwG,CACxG,yBAA0B,CAC1B,kDACF,CACA,4BACE,GAAK,yBAA6B,CAClC,IAAM,4BAA+B,CACrC,GAAO,yBAA6B,CACtC,CAGA,aACE,0CACF,CACA,+BACE,qBAAuB,CACvB,uBAAyB,CACzB,0BACF,CACA,0BACE,0BAA4B,CAC5B,oBACF,CAEA,WAEE,0BAIF,CAEA,2BAPE,wCAA6C,CAE7C,yBAA2B,CAC3B,oBAAsB,CACtB,wBAUF,CAPA,gBAEE,0BAA4B,CAI5B,6BACF,CAEA,yBACE,0BACF,CAGA,YACE,iBAAkB,CAClB,qCAAsC,CACtC,2CAA4C,CAC5C,oCAAqC,CACrC,yCAA0C,CAC1C,mBAAoB,CACpB,2CAA4C,CAC5C,uCAAwC,CACxC,sCAAuC,CACvC,gCAAiC,CACjC,uBAAwB,CACxB,sCAAuC,CACvC,yCAA0C,CAC1C,yBAA0B,CAC1B,8CAA+C,CAC/C,oCAAqC,CACrC,wCAAyC,CACzC,qCAAsC,CACtC,qCAAsC,CACtC,yCAA0C,CAC1C,wBAAyB,CACzB,oCAAqC,CACrC,0CAA2C,CAC3C,uCAAwC,CACxC,kCAAmC,CACnC,sCAAuC,CACvC,yCAA0C,CAC1C,yBAA0B,CAC1B,oCAAqC,CACrC,4BAA6B,CAC7B,wCAAyC,CACzC,0CAA2C,CAC3C,8CAA+C,CAC/C,4CACF,CAEA,uBACE,iBAAkB,CAClB,+BAAgC,CAChC,qCAAsC,CACtC,8BAA+B,CAC/B,oCAAqC,CACrC,mBAAoB,CACpB,sCAAuC,CACvC,iCAAkC,CAClC,iCAAkC,CAClC,oCAAqC,CACrC,uBAAwB,CACxB,gCAAiC,CACjC,oCAAqC,CACrC,yBAA0B,CAC1B,wCAAyC,CACzC,8BAA+B,CAC/B,kCAAmC,CACnC,+BAAgC,CAChC,sBAAuB,CACvB,mCAAoC,CACpC,wBAAyB,CACzB,iCAAkC,CAClC,oCAAqC,CACrC,iCAAkC,CAClC,kCAAmC,CACnC,gCAAiC,CACjC,mCAAoC,CACpC,yBAA0B,CAC1B,+BAAgC,CAChC,4BAA6B,CAC7B,kCAAmC,CACnC,qCAAsC,CACtC,wCAAyC,CACzC,sCACF,CAEA,kBACE,4DAIF,CAEA,oCALE,0BAA4B,CAC5B,oBAAsB,CACtB,wBAQF,CALA,kBACE,4DAIF,CAGA,mBACE,cAAe,CACf,UAAW,CACX,aAAc,CACd,WAAY,CACZ,kBAAmB,CACnB,UAAW,CACX,oBAAqB,CACrB,2CAA6C,CAC7C,cAAgB,CAChB,UAAW,CACX,WAAY,CACZ,YAAa,CACb,kBAAmB,CACnB,sBAAuB,CACvB,gBAAiB,CACjB,WAAY,CACZ,cAAe,CACf,SAAU,CACV,mBAAoB,CACpB,sBACF,CACA,2BACE,SAAU,CACV,mBACF,CAEA,WACE,qBAAwB,CACxB,mDAAsD,CACtD,eAAmB,CACnB,iBAAkB,CAClB,iBACF,CAEA,WACE,kBAAqB,CACrB,4CAA+C,CAC/C,eAAmB,CACnB,iBAAkB,CAClB,iBACF,CAEA,WACE,kBAAqB,CACrB,4CAA+C,CAC/C,eAAmB,CACnB,iBAAkB,CAClB,iBACF,CAEA,6CACE,mCACF,CAEA,wCACE,mCACF,CAEA,4CACE,mCACF,CAEA,uCACE,mCACF,CAEA,8CACE,mBAAoB,CACpB,+CACF,CAEA,yCACE,mBAAoB,CACpB,+CACF,CAEA,2BACE,cACF,CAEA,uBACE,gBACF,CAEA,mCACE,0GAA2G,CAC3G,wGAAyG,CACzG,wFACF,CAEA,0CACE,mBAAoB,CACpB,wDACF,CAEA,8BACE,qBAAsB,CACtB,wDACF,CAEA,8BACE,qBAAsB,CACtB,uDACF,CAEA,8BACE,qBAAsB,CACtB,wDACF,CAEA,2BACE,iBAAkB,CAClB,wDACF,CAEA,0BACE,iBAAkB,CAClB,wDACF,CAEA,2BACE,iBAAkB,CAClB,sDACF,CAEA,2BACE,8BACF,CAEA,0BACE,iBAAkB,CAClB,wDACF,CAEA,yBACE,iBAAkB,CAClB,wDACF,CAEA,6BACE,oCACF,CAEA,0BACE,iBAAkB,CAClB,uDACF,CAEA,0BACE,iBAAkB,CAClB,sDACF,CAEA,6BACE,iBAAkB,CAClB,wDACF,CAEA,6BACE,iBAAkB,CAClB,qDACF,CAEA,0BACE,iBAAkB,CAClB,wDACF,CAEA,0BACE,iBAAkB,CAClB,wDACF,CAEA,yBACE,iBAAkB,CAClB,wDACF,CAEA,6BACE,oCACF,CAEA,0BACE,iBAAkB,CAClB,qDACF,CAEA,2BACE,iBAAkB,CAClB,wDACF,CAEA,0BACE,iBAAkB,CAClB,wDACF,CAEA,2BACE,iBAAkB,CAClB,sDACF,CAEA,4BACE,iBAAkB,CAClB,wDACF,CAEA,4BACE,iBAAkB,CAClB,wDACF,CAEA,4BACE,iBAAkB,CAClB,sDACF,CAEA,4BACE,iBAAkB,CAClB,sDACF,CAEA,0BACE,iBAAkB,CAClB,wDACF,CAEA,yBACE,iBAAkB,CAClB,wDACF,CAEA,4BACE,iBAAkB,CAClB,wDACF,CAEA,4BACE,iBAAkB,CAClB,uDACF,CAEA,yBACE,iBAAkB,CAClB,wDACF,CAEA,yBACE,iBAAkB,CAClB,wDACF,CAEA,wBACE,iBAAkB,CAClB,wDACF,CAEA,yBACE,iBAAkB,CAClB,sDACF,CAEA,0BACE,iBAAkB,CAClB,sDACF,CAEA,2BACE,iBAAkB,CAClB,wDACF,CAEA,2BACE,iBAAkB,CAClB,qDACF,CAEA,uBACE,iBAAkB,CAClB,wDACF,CAEA,2BACE,oCACF,CAEA,2BACE,oCACF,CAEA,2BACE,qCACF,CAEA,4BACE,iBAAkB,CAClB,wDACF,CAEA,4BACE,iBAAkB,CAClB,sDACF,CAEA,6BACE,2DAA4D,CAC5D,gEAAmE,CACnE,iEACF,CAEA,4BACE,uDACF,CAEA,yBACE,mBAAoB,CACpB,yCACF,CAEA,4BACE,mBAAoB,CACpB,+CACF,CAEA,4BACE,mBAAoB,CACpB,8CACF,CAEA,4BACE,mBAAoB,CACpB,6CACF,CAEA,4BACE,mBAAoB,CACpB,6CACF,CAEA,4BACE,mBAAoB,CACpB,6CACF,CAEA,4BACE,mBAAoB,CACpB,4CACF,CAEA,4BACE,mBAAoB,CACpB,4CACF,CAEA,4BACE,mBAAoB,CACpB,4CACF,CAEA,4BACE,mBAAoB,CACpB,4CACF,CAEA,6BACE,mBAAoB,CACpB,6CACF,CAEA,6BACE,mBAAoB,CACpB,6CACF,CAEA,8BACE,mBAAoB,CACpB,6CACF,CAEA,4BACE,mBAAoB,CACpB,+CACF,CAEA,4BACE,mBAAoB,CACpB,8CACF,CAEA,4BACE,mBAAoB,CACpB,8CACF,CAEA,8BACE,mBAAoB,CACpB,8CACF,CAEA,8BACE,mBAAoB,CACpB,8CACF,CAEA,2BACE,mBAAoB,CACpB,+CACF,CAEA,2BACE,mBAAoB,CACpB,6CACF,CAEA,2BACE,mBAAoB,CACpB,6CACF,CAEA,2BACE,mBAAoB,CACpB,6CACF,CAEA,2BACE,mBAAoB,CACpB,8CACF,CAEA,6BACE,mBAAoB,CACpB,4CACF,CAEA,yBACE,mBAAoB,CACpB,+CACF,CAEA,6BACE,yBACF,CAEA,wBACE,8BACF,CAEA,yBACE,UACF,CAEA,wBACE,yEAA+E,CAC/E,iGAEF,CAEA,gDAHE,kGAOF,CAJA,wBACE,uEAA6E,CAC7E,+FAEF,CAEA,wBACE,uCAA0C,CAC1C,sDAEF,CAEA,gDAHE,kGAOF,CAJA,wBACE,0EAAgF,CAChF,kGAEF,CAEA,kCACE,sCAAyC,CACzC,oCACF,CAEA,kCACE,+BACF,CAEA,2BACE,6BAA8B,CAC9B,kBACF,CAEA,qBACE,0GAA2G,CAC3G,wGAAyG,CACzG,wFACF,CAEA,4BACE,mBAAoB,CACpB,yDACF,CAEA,4BACE,mBAAoB,CACpB,wDACF,CAEA,4BACE,mBAAoB,CACpB,wDACF,CAEA,+BACE,mBAAoB,CACpB,wDACF,CAEA,4BACE,mBAAoB,CACpB,yDACF,CAEA,4BACE,0BACF,CAEA,yBACE,gBAAiB,CACjB,gBAAiB,CACjB,6LACF,CAEA,uCACE,kBACF,CAEA,gCACE,iBAAkB,CAClB,wDACF,CAEA,+BACE,iBAAkB,CAClB,wDACF,CAEA,kCACE,mBAAoB,CACpB,+CACF,CAEA,iCACE,yBACF,CAEA,+BACE,UACF,CAEA,+BACE,UACF,CAEA,+BACE,UACF,CAEA,qCACE,iBAAkB,CAClB,iBAEF,CAEA,0EAHE,6LAOF,CAJA,qCACE,gBAAiB,CACjB,gBAEF,CAEA,2CACE,qBAAsB,CACtB,uDACF,CAEA,wCACE,8BACF,CAEA,yCACE,mBAAoB,CACpB,6CACF,CAEA,2CACE,mBAAoB,CACpB,6CACF,CAEA,qCACE,8BACF,CAEA,uCACE,SACF,CAEA,sCACE,UACF,CAEA,kDACE,qBAAsB,CACtB,uDACF,CAEA,6CACE,iBAAkB,CAClB,wDACF,CAEA,yBAEE,UACE,oBACF,CAEA,WACE,aACF,CAEA,YACE,YACF,CAEA,UACE,WACF,CAEA,UACE,UACF,CAEA,YACE,UACF,CAEA,YACE,WACF,CAEA,iBACE,6CACF,CAEA,iBACE,6CACF,CAEA,iBACE,6CACF,CAEA,cACE,kBACF,CAEA,kBACE,kBACF,CAEA,WACE,UACF,CAEA,WACE,QACF,CAEA,6CACE,sBAAuB,CACvB,8DAA+D,CAC/D,uDACF,CAEA,SACE,cACF,CAEA,UACE,iBAAkB,CAClB,kBACF,CAEA,UACE,mBAAoB,CACpB,oBACF,CAEA,UACE,gBAAiB,CACjB,mBACF,CAEA,WACE,mBACF,CAEA,WACE,gBACF,CAEA,cACE,gBAAiB,CACjB,gBACF,CAEA,cACE,cAAe,CACf,aACF,CAEA,aACE,kBAAmB,CACnB,mBACF,CACF,CAEA,yBAEE,UACE,YACF,CAEA,YACE,YACF,CAEA,UACE,WACF,CAEA,iBACE,6CACF,CAEA,iBACE,6CACF,CAEA,iBACE,6CACF,CAEA,iBACE,6CACF,CAEA,cACE,kBACF,CAEA,UACE,cACF,CAEA,UACE,iBAAkB,CAClB,kBACF,CAEA,cACE,kBAAmB,CACnB,mBACF,CAEA,cACE,cAAe,CACf,aACF,CAEA,cACE,iBAAkB,CAClB,aACF,CACF,CAEA,0BAEE,WACE,aACF,CAEA,UACE,WACF,CAEA,iBACE,6CACF,CAEA,iBACE,6CACF,CAEA,iBACE,6CACF,CAEA,cACE,kBACF,CAEA,WACE,QACF,CAEA,UACE,iBAAkB,CAClB,kBACF,CACF,CAEA,0BAEE,iBACE,6CACF,CACF","file":"9b5ea72bd44375b5.css","sourcesContent":["@font-face {\n font-family: 'Showpop';\n src: url('/fonts/showpop.woff2') format('woff2');\n font-weight: normal;\n font-style: normal;\n font-display: swap;\n}\n\n.logo-text {\n font-family: 'Showpop', sans-serif;\n letter-spacing: 0.01em;\n font-weight: normal;\n}\n\n@font-face {\n font-family: 'UnifixSP';\n src: url('/fonts/UnifixSP.woff2') format('woff2');\n font-weight: normal;\n font-style: normal;\n font-display: swap;\n}\n\n.logo-text-unifix {\n font-family: 'UnifixSP', sans-serif;\n letter-spacing: 0.01em;\n font-weight: normal;\n}\n@font-face {\n font-family: 'MotivationOfHearts';\n src: url('/fonts/MotivationOfHearts.woff2') format('woff2');\n font-weight: normal;\n font-style: normal;\n font-display: swap;\n}\n\n.logo-text-motivation {\n font-family: 'MotivationOfHearts', sans-serif;\n letter-spacing: 0.01em;\n font-weight: normal;\n}\n*, ::before, ::after {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n --tw-contain-size: ;\n --tw-contain-layout: ;\n --tw-contain-paint: ;\n --tw-contain-style: ;\n}\n::backdrop {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n --tw-contain-size: ;\n --tw-contain-layout: ;\n --tw-contain-paint: ;\n --tw-contain-style: ;\n}\n/*\n! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com\n*/\n/*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n*,\n::before,\n::after {\n box-sizing: border-box; /* 1 */\n border-width: 0; /* 2 */\n border-style: solid; /* 2 */\n border-color: #e5e7eb; /* 2 */\n}\n::before,\n::after {\n --tw-content: '';\n}\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user's configured `sans` font-family by default.\n5. Use the user's configured `sans` font-feature-settings by default.\n6. Use the user's configured `sans` font-variation-settings by default.\n7. Disable tap highlights on iOS\n*/\nhtml,\n:host {\n line-height: 1.5; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n -moz-tab-size: 4; /* 3 */\n -o-tab-size: 4;\n tab-size: 4; /* 3 */\n font-family: Inter, system-ui, sans-serif; /* 4 */\n font-feature-settings: normal; /* 5 */\n font-variation-settings: normal; /* 6 */\n -webkit-tap-highlight-color: transparent; /* 7 */\n}\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\nbody {\n margin: 0; /* 1 */\n line-height: inherit; /* 2 */\n}\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\nhr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n border-top-width: 1px; /* 3 */\n}\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\nabbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n}\n/*\nRemove the default font size and weight for headings.\n*/\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: inherit;\n font-weight: inherit;\n}\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\na {\n color: inherit;\n text-decoration: inherit;\n}\n/*\nAdd the correct font weight in Edge and Safari.\n*/\nb,\nstrong {\n font-weight: bolder;\n}\n/*\n1. Use the user's configured `mono` font-family by default.\n2. Use the user's configured `mono` font-feature-settings by default.\n3. Use the user's configured `mono` font-variation-settings by default.\n4. Correct the odd `em` font sizing in all browsers.\n*/\ncode,\nkbd,\nsamp,\npre {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace; /* 1 */\n font-feature-settings: normal; /* 2 */\n font-variation-settings: normal; /* 3 */\n font-size: 1em; /* 4 */\n}\n/*\nAdd the correct font size in all browsers.\n*/\nsmall {\n font-size: 80%;\n}\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\nsub {\n bottom: -0.25em;\n}\nsup {\n top: -0.5em;\n}\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\ntable {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n border-collapse: collapse; /* 3 */\n}\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-feature-settings: inherit; /* 1 */\n font-variation-settings: inherit; /* 1 */\n font-size: 100%; /* 1 */\n font-weight: inherit; /* 1 */\n line-height: inherit; /* 1 */\n letter-spacing: inherit; /* 1 */\n color: inherit; /* 1 */\n margin: 0; /* 2 */\n padding: 0; /* 3 */\n}\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\nbutton,\nselect {\n text-transform: none;\n}\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\nbutton,\ninput:where([type='button']),\ninput:where([type='reset']),\ninput:where([type='submit']) {\n -webkit-appearance: button; /* 1 */\n background-color: transparent; /* 2 */\n background-image: none; /* 2 */\n}\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n:-moz-focusring {\n outline: auto;\n}\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n:-moz-ui-invalid {\n box-shadow: none;\n}\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\nprogress {\n vertical-align: baseline;\n}\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n height: auto;\n}\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n[type='search'] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n/*\nAdd the correct display in Chrome and Safari.\n*/\nsummary {\n display: list-item;\n}\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n margin: 0;\n}\nfieldset {\n margin: 0;\n padding: 0;\n}\nlegend {\n padding: 0;\n}\nol,\nul,\nmenu {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n/*\nReset default styling for dialogs.\n*/\ndialog {\n padding: 0;\n}\n/*\nPrevent resizing textareas horizontally by default.\n*/\ntextarea {\n resize: vertical;\n}\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user's configured gray 400 color.\n*/\ninput::-moz-placeholder, textarea::-moz-placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\ninput::placeholder,\ntextarea::placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n/*\nSet the default cursor for buttons.\n*/\nbutton,\n[role=\"button\"] {\n cursor: pointer;\n}\n/*\nMake sure disabled buttons don't get the pointer cursor.\n*/\n:disabled {\n cursor: default;\n}\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n This can trigger a poorly considered lint error in some tools but is included by design.\n*/\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n display: block; /* 1 */\n vertical-align: middle; /* 2 */\n}\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\nimg,\nvideo {\n max-width: 100%;\n height: auto;\n}\n/* Make elements with the HTML hidden attribute stay hidden by default */\n[hidden]:where(:not([hidden=\"until-found\"])) {\n display: none;\n}\n.container {\n width: 100%;\n}\n@media (min-width: 640px) {\n\n .container {\n max-width: 640px;\n }\n}\n@media (min-width: 768px) {\n\n .container {\n max-width: 768px;\n }\n}\n@media (min-width: 1024px) {\n\n .container {\n max-width: 1024px;\n }\n}\n@media (min-width: 1280px) {\n\n .container {\n max-width: 1280px;\n }\n}\n@media (min-width: 1536px) {\n\n .container {\n max-width: 1536px;\n }\n}\n.pointer-events-none {\n pointer-events: none;\n}\n.visible {\n visibility: visible;\n}\n.static {\n position: static;\n}\n.fixed {\n position: fixed;\n}\n.absolute {\n position: absolute;\n}\n.relative {\n position: relative;\n}\n.sticky {\n position: sticky;\n}\n.-inset-1 {\n inset: -0.25rem;\n}\n.inset-0 {\n inset: 0px;\n}\n.-right-1\\.5 {\n right: -0.375rem;\n}\n.-top-1\\.5 {\n top: -0.375rem;\n}\n.-top-10 {\n top: -2.5rem;\n}\n.bottom-1 {\n bottom: 0.25rem;\n}\n.bottom-20 {\n bottom: 5rem;\n}\n.bottom-5 {\n bottom: 1.25rem;\n}\n.bottom-6 {\n bottom: 1.5rem;\n}\n.left-0 {\n left: 0px;\n}\n.left-0\\.5 {\n left: 0.125rem;\n}\n.left-1\\/2 {\n left: 50%;\n}\n.left-1\\/4 {\n left: 25%;\n}\n.left-3 {\n left: 0.75rem;\n}\n.left-4 {\n left: 1rem;\n}\n.right-0 {\n right: 0px;\n}\n.right-0\\.5 {\n right: 0.125rem;\n}\n.right-1 {\n right: 0.25rem;\n}\n.right-1\\/4 {\n right: 25%;\n}\n.right-2 {\n right: 0.5rem;\n}\n.right-3 {\n right: 0.75rem;\n}\n.right-4 {\n right: 1rem;\n}\n.right-5 {\n right: 1.25rem;\n}\n.right-6 {\n right: 1.5rem;\n}\n.top-0 {\n top: 0px;\n}\n.top-0\\.5 {\n top: 0.125rem;\n}\n.top-1 {\n top: 0.25rem;\n}\n.top-1\\/2 {\n top: 50%;\n}\n.top-2 {\n top: 0.5rem;\n}\n.top-20 {\n top: 5rem;\n}\n.top-24 {\n top: 6rem;\n}\n.top-3 {\n top: 0.75rem;\n}\n.top-4 {\n top: 1rem;\n}\n.top-6 {\n top: 1.5rem;\n}\n.top-full {\n top: 100%;\n}\n.z-10 {\n z-index: 10;\n}\n.z-40 {\n z-index: 40;\n}\n.z-50 {\n z-index: 50;\n}\n.z-\\[200\\] {\n z-index: 200;\n}\n.z-\\[60\\] {\n z-index: 60;\n}\n.col-span-2 {\n grid-column: span 2 / span 2;\n}\n.m-0\\.5 {\n margin: 0.125rem;\n}\n.mx-0\\.5 {\n margin-left: 0.125rem;\n margin-right: 0.125rem;\n}\n.mx-4 {\n margin-left: 1rem;\n margin-right: 1rem;\n}\n.mx-5 {\n margin-left: 1.25rem;\n margin-right: 1.25rem;\n}\n.mx-auto {\n margin-left: auto;\n margin-right: auto;\n}\n.my-1 {\n margin-top: 0.25rem;\n margin-bottom: 0.25rem;\n}\n.-mb-px {\n margin-bottom: -1px;\n}\n.-mt-1 {\n margin-top: -0.25rem;\n}\n.-mt-px {\n margin-top: -1px;\n}\n.mb-0 {\n margin-bottom: 0px;\n}\n.mb-0\\.5 {\n margin-bottom: 0.125rem;\n}\n.mb-1 {\n margin-bottom: 0.25rem;\n}\n.mb-1\\.5 {\n margin-bottom: 0.375rem;\n}\n.mb-10 {\n margin-bottom: 2.5rem;\n}\n.mb-12 {\n margin-bottom: 3rem;\n}\n.mb-14 {\n margin-bottom: 3.5rem;\n}\n.mb-2 {\n margin-bottom: 0.5rem;\n}\n.mb-3 {\n margin-bottom: 0.75rem;\n}\n.mb-4 {\n margin-bottom: 1rem;\n}\n.mb-5 {\n margin-bottom: 1.25rem;\n}\n.mb-6 {\n margin-bottom: 1.5rem;\n}\n.mb-8 {\n margin-bottom: 2rem;\n}\n.ml-1 {\n margin-left: 0.25rem;\n}\n.ml-1\\.5 {\n margin-left: 0.375rem;\n}\n.ml-2 {\n margin-left: 0.5rem;\n}\n.ml-3 {\n margin-left: 0.75rem;\n}\n.ml-4 {\n margin-left: 1rem;\n}\n.ml-6 {\n margin-left: 1.5rem;\n}\n.ml-auto {\n margin-left: auto;\n}\n.mr-0\\.5 {\n margin-right: 0.125rem;\n}\n.mr-1 {\n margin-right: 0.25rem;\n}\n.mr-2 {\n margin-right: 0.5rem;\n}\n.mt-0\\.5 {\n margin-top: 0.125rem;\n}\n.mt-1 {\n margin-top: 0.25rem;\n}\n.mt-1\\.5 {\n margin-top: 0.375rem;\n}\n.mt-10 {\n margin-top: 2.5rem;\n}\n.mt-16 {\n margin-top: 4rem;\n}\n.mt-2 {\n margin-top: 0.5rem;\n}\n.mt-3 {\n margin-top: 0.75rem;\n}\n.mt-4 {\n margin-top: 1rem;\n}\n.mt-5 {\n margin-top: 1.25rem;\n}\n.mt-6 {\n margin-top: 1.5rem;\n}\n.mt-8 {\n margin-top: 2rem;\n}\n.mt-auto {\n margin-top: auto;\n}\n.line-clamp-1 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 1;\n}\n.line-clamp-2 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n}\n.block {\n display: block;\n}\n.inline-block {\n display: inline-block;\n}\n.inline {\n display: inline;\n}\n.flex {\n display: flex;\n}\n.inline-flex {\n display: inline-flex;\n}\n.table {\n display: table;\n}\n.grid {\n display: grid;\n}\n.hidden {\n display: none;\n}\n.aspect-square {\n aspect-ratio: 1 / 1;\n}\n.h-0 {\n height: 0px;\n}\n.h-0\\.5 {\n height: 0.125rem;\n}\n.h-1 {\n height: 0.25rem;\n}\n.h-1\\.5 {\n height: 0.375rem;\n}\n.h-10 {\n height: 2.5rem;\n}\n.h-12 {\n height: 3rem;\n}\n.h-14 {\n height: 3.5rem;\n}\n.h-16 {\n height: 4rem;\n}\n.h-2 {\n height: 0.5rem;\n}\n.h-2\\.5 {\n height: 0.625rem;\n}\n.h-20 {\n height: 5rem;\n}\n.h-24 {\n height: 6rem;\n}\n.h-28 {\n height: 7rem;\n}\n.h-3 {\n height: 0.75rem;\n}\n.h-3\\.5 {\n height: 0.875rem;\n}\n.h-4 {\n height: 1rem;\n}\n.h-40 {\n height: 10rem;\n}\n.h-5 {\n height: 1.25rem;\n}\n.h-6 {\n height: 1.5rem;\n}\n.h-7 {\n height: 1.75rem;\n}\n.h-8 {\n height: 2rem;\n}\n.h-9 {\n height: 2.25rem;\n}\n.h-\\[400px\\] {\n height: 400px;\n}\n.h-\\[500px\\] {\n height: 500px;\n}\n.h-\\[calc\\(100vh-80px\\)\\] {\n height: calc(100vh - 80px);\n}\n.h-full {\n height: 100%;\n}\n.h-px {\n height: 1px;\n}\n.max-h-32 {\n max-height: 8rem;\n}\n.max-h-40 {\n max-height: 10rem;\n}\n.max-h-64 {\n max-height: 16rem;\n}\n.max-h-72 {\n max-height: 18rem;\n}\n.max-h-80 {\n max-height: 20rem;\n}\n.max-h-96 {\n max-height: 24rem;\n}\n.max-h-\\[60vh\\] {\n max-height: 60vh;\n}\n.max-h-\\[80vh\\] {\n max-height: 80vh;\n}\n.max-h-\\[85vh\\] {\n max-height: 85vh;\n}\n.max-h-\\[90vh\\] {\n max-height: 90vh;\n}\n.min-h-0 {\n min-height: 0px;\n}\n.min-h-\\[24px\\] {\n min-height: 24px;\n}\n.min-h-\\[28px\\] {\n min-height: 28px;\n}\n.min-h-\\[40px\\] {\n min-height: 40px;\n}\n.min-h-screen {\n min-height: 100vh;\n}\n.w-0 {\n width: 0px;\n}\n.w-1 {\n width: 0.25rem;\n}\n.w-1\\.5 {\n width: 0.375rem;\n}\n.w-1\\/2 {\n width: 50%;\n}\n.w-10 {\n width: 2.5rem;\n}\n.w-11 {\n width: 2.75rem;\n}\n.w-12 {\n width: 3rem;\n}\n.w-14 {\n width: 3.5rem;\n}\n.w-16 {\n width: 4rem;\n}\n.w-2 {\n width: 0.5rem;\n}\n.w-2\\.5 {\n width: 0.625rem;\n}\n.w-20 {\n width: 5rem;\n}\n.w-24 {\n width: 6rem;\n}\n.w-28 {\n width: 7rem;\n}\n.w-3 {\n width: 0.75rem;\n}\n.w-3\\.5 {\n width: 0.875rem;\n}\n.w-4 {\n width: 1rem;\n}\n.w-40 {\n width: 10rem;\n}\n.w-44 {\n width: 11rem;\n}\n.w-5 {\n width: 1.25rem;\n}\n.w-52 {\n width: 13rem;\n}\n.w-56 {\n width: 14rem;\n}\n.w-6 {\n width: 1.5rem;\n}\n.w-7 {\n width: 1.75rem;\n}\n.w-72 {\n width: 18rem;\n}\n.w-8 {\n width: 2rem;\n}\n.w-9 {\n width: 2.25rem;\n}\n.w-\\[400px\\] {\n width: 400px;\n}\n.w-\\[500px\\] {\n width: 500px;\n}\n.w-fit {\n width: -moz-fit-content;\n width: fit-content;\n}\n.w-full {\n width: 100%;\n}\n.w-px {\n width: 1px;\n}\n.min-w-0 {\n min-width: 0px;\n}\n.min-w-32 {\n min-width: 8rem;\n}\n.min-w-72 {\n min-width: 18rem;\n}\n.min-w-\\[140px\\] {\n min-width: 140px;\n}\n.min-w-\\[16px\\] {\n min-width: 16px;\n}\n.min-w-\\[180px\\] {\n min-width: 180px;\n}\n.min-w-\\[200px\\] {\n min-width: 200px;\n}\n.min-w-\\[220px\\] {\n min-width: 220px;\n}\n.min-w-\\[240px\\] {\n min-width: 240px;\n}\n.min-w-fit {\n min-width: -moz-fit-content;\n min-width: fit-content;\n}\n.max-w-2xl {\n max-width: 42rem;\n}\n.max-w-3xl {\n max-width: 48rem;\n}\n.max-w-4xl {\n max-width: 56rem;\n}\n.max-w-5xl {\n max-width: 64rem;\n}\n.max-w-6xl {\n max-width: 72rem;\n}\n.max-w-7xl {\n max-width: 80rem;\n}\n.max-w-\\[100px\\] {\n max-width: 100px;\n}\n.max-w-\\[70\\%\\] {\n max-width: 70%;\n}\n.max-w-\\[90px\\] {\n max-width: 90px;\n}\n.max-w-full {\n max-width: 100%;\n}\n.max-w-lg {\n max-width: 32rem;\n}\n.max-w-md {\n max-width: 28rem;\n}\n.max-w-sm {\n max-width: 24rem;\n}\n.max-w-xl {\n max-width: 36rem;\n}\n.max-w-xs {\n max-width: 20rem;\n}\n.flex-1 {\n flex: 1 1 0%;\n}\n.flex-\\[2\\] {\n flex: 2;\n}\n.flex-shrink-0 {\n flex-shrink: 0;\n}\n.shrink-0 {\n flex-shrink: 0;\n}\n.grow {\n flex-grow: 1;\n}\n.-translate-x-1\\/2 {\n --tw-translate-x: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.-translate-x-12 {\n --tw-translate-x: -3rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.-translate-y-1\\/2 {\n --tw-translate-y: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-x-0 {\n --tw-translate-x: 0px;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-x-1 {\n --tw-translate-x: 0.25rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-x-12 {\n --tw-translate-x: 3rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-x-3 {\n --tw-translate-x: 0.75rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-x-5 {\n --tw-translate-x: 1.25rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-x-6 {\n --tw-translate-x: 1.5rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-y-0 {\n --tw-translate-y: 0px;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-y-4 {\n --tw-translate-y: 1rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-180 {\n --tw-rotate: 180deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-45 {\n --tw-rotate: 45deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-90 {\n --tw-rotate: 90deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.scale-105 {\n --tw-scale-x: 1.05;\n --tw-scale-y: 1.05;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.transform {\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n@keyframes pulse {\n\n 50% {\n opacity: .5;\n }\n}\n.animate-pulse {\n animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n}\n@keyframes spin {\n\n to {\n transform: rotate(360deg);\n }\n}\n.animate-spin {\n animation: spin 1s linear infinite;\n}\n.cursor-default {\n cursor: default;\n}\n.cursor-not-allowed {\n cursor: not-allowed;\n}\n.cursor-pointer {\n cursor: pointer;\n}\n.select-none {\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n.select-all {\n -webkit-user-select: all;\n -moz-user-select: all;\n user-select: all;\n}\n.resize-none {\n resize: none;\n}\n.resize-y {\n resize: vertical;\n}\n.snap-x {\n scroll-snap-type: x var(--tw-scroll-snap-strictness);\n}\n.snap-mandatory {\n --tw-scroll-snap-strictness: mandatory;\n}\n.snap-start {\n scroll-snap-align: start;\n}\n.grid-cols-1 {\n grid-template-columns: repeat(1, minmax(0, 1fr));\n}\n.grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n.grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n}\n.grid-cols-4 {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n}\n.grid-cols-7 {\n grid-template-columns: repeat(7, minmax(0, 1fr));\n}\n.flex-row-reverse {\n flex-direction: row-reverse;\n}\n.flex-col {\n flex-direction: column;\n}\n.flex-wrap {\n flex-wrap: wrap;\n}\n.items-start {\n align-items: flex-start;\n}\n.items-end {\n align-items: flex-end;\n}\n.items-center {\n align-items: center;\n}\n.justify-end {\n justify-content: flex-end;\n}\n.justify-center {\n justify-content: center;\n}\n.justify-between {\n justify-content: space-between;\n}\n.gap-0 {\n gap: 0px;\n}\n.gap-0\\.5 {\n gap: 0.125rem;\n}\n.gap-1 {\n gap: 0.25rem;\n}\n.gap-1\\.5 {\n gap: 0.375rem;\n}\n.gap-10 {\n gap: 2.5rem;\n}\n.gap-2 {\n gap: 0.5rem;\n}\n.gap-2\\.5 {\n gap: 0.625rem;\n}\n.gap-3 {\n gap: 0.75rem;\n}\n.gap-4 {\n gap: 1rem;\n}\n.gap-5 {\n gap: 1.25rem;\n}\n.gap-6 {\n gap: 1.5rem;\n}\n.gap-8 {\n gap: 2rem;\n}\n.gap-y-3 {\n row-gap: 0.75rem;\n}\n.space-y-0\\.5 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.125rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.125rem * var(--tw-space-y-reverse));\n}\n.space-y-1 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.25rem * var(--tw-space-y-reverse));\n}\n.space-y-1\\.5 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.375rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.375rem * var(--tw-space-y-reverse));\n}\n.space-y-16 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(4rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(4rem * var(--tw-space-y-reverse));\n}\n.space-y-2 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.5rem * var(--tw-space-y-reverse));\n}\n.space-y-3 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.75rem * var(--tw-space-y-reverse));\n}\n.space-y-4 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1rem * var(--tw-space-y-reverse));\n}\n.space-y-5 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1.25rem * var(--tw-space-y-reverse));\n}\n.space-y-6 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1.5rem * var(--tw-space-y-reverse));\n}\n.space-y-8 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(2rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(2rem * var(--tw-space-y-reverse));\n}\n.divide-y > :not([hidden]) ~ :not([hidden]) {\n --tw-divide-y-reverse: 0;\n border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));\n border-bottom-width: calc(1px * var(--tw-divide-y-reverse));\n}\n.divide-gray-100 > :not([hidden]) ~ :not([hidden]) {\n --tw-divide-opacity: 1;\n border-color: rgb(243 244 246 / var(--tw-divide-opacity, 1));\n}\n.self-end {\n align-self: flex-end;\n}\n.self-center {\n align-self: center;\n}\n.overflow-hidden {\n overflow: hidden;\n}\n.overflow-x-auto {\n overflow-x: auto;\n}\n.overflow-y-auto {\n overflow-y: auto;\n}\n.truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.whitespace-nowrap {\n white-space: nowrap;\n}\n.whitespace-pre-wrap {\n white-space: pre-wrap;\n}\n.rounded {\n border-radius: 0.25rem;\n}\n.rounded-2xl {\n border-radius: 1rem;\n}\n.rounded-\\[2\\.5rem\\] {\n border-radius: 2.5rem;\n}\n.rounded-full {\n border-radius: 9999px;\n}\n.rounded-lg {\n border-radius: 0.5rem;\n}\n.rounded-md {\n border-radius: 0.375rem;\n}\n.rounded-xl {\n border-radius: 0.75rem;\n}\n.rounded-b-xl {\n border-bottom-right-radius: 0.75rem;\n border-bottom-left-radius: 0.75rem;\n}\n.rounded-t-lg {\n border-top-left-radius: 0.5rem;\n border-top-right-radius: 0.5rem;\n}\n.rounded-tl-sm {\n border-top-left-radius: 0.125rem;\n}\n.rounded-tr-sm {\n border-top-right-radius: 0.125rem;\n}\n.border {\n border-width: 1px;\n}\n.border-0 {\n border-width: 0px;\n}\n.border-2 {\n border-width: 2px;\n}\n.border-y {\n border-top-width: 1px;\n border-bottom-width: 1px;\n}\n.border-b {\n border-bottom-width: 1px;\n}\n.border-b-2 {\n border-bottom-width: 2px;\n}\n.border-l-2 {\n border-left-width: 2px;\n}\n.border-r {\n border-right-width: 1px;\n}\n.border-r-2 {\n border-right-width: 2px;\n}\n.border-t {\n border-top-width: 1px;\n}\n.border-t-0 {\n border-top-width: 0px;\n}\n.border-t-4 {\n border-top-width: 4px;\n}\n.border-dashed {\n border-style: dashed;\n}\n.border-amber-100 {\n --tw-border-opacity: 1;\n border-color: rgb(254 243 199 / var(--tw-border-opacity, 1));\n}\n.border-amber-200 {\n --tw-border-opacity: 1;\n border-color: rgb(253 230 138 / var(--tw-border-opacity, 1));\n}\n.border-amber-300 {\n --tw-border-opacity: 1;\n border-color: rgb(252 211 77 / var(--tw-border-opacity, 1));\n}\n.border-amber-500 {\n --tw-border-opacity: 1;\n border-color: rgb(245 158 11 / var(--tw-border-opacity, 1));\n}\n.border-blue-100 {\n --tw-border-opacity: 1;\n border-color: rgb(219 234 254 / var(--tw-border-opacity, 1));\n}\n.border-blue-200 {\n --tw-border-opacity: 1;\n border-color: rgb(191 219 254 / var(--tw-border-opacity, 1));\n}\n.border-blue-300 {\n --tw-border-opacity: 1;\n border-color: rgb(147 197 253 / var(--tw-border-opacity, 1));\n}\n.border-blue-400 {\n --tw-border-opacity: 1;\n border-color: rgb(96 165 250 / var(--tw-border-opacity, 1));\n}\n.border-blue-50 {\n --tw-border-opacity: 1;\n border-color: rgb(239 246 255 / var(--tw-border-opacity, 1));\n}\n.border-blue-500 {\n --tw-border-opacity: 1;\n border-color: rgb(59 130 246 / var(--tw-border-opacity, 1));\n}\n.border-blue-500\\/10 {\n border-color: rgb(59 130 246 / 0.1);\n}\n.border-blue-500\\/20 {\n border-color: rgb(59 130 246 / 0.2);\n}\n.border-blue-600 {\n --tw-border-opacity: 1;\n border-color: rgb(37 99 235 / var(--tw-border-opacity, 1));\n}\n.border-emerald-100 {\n --tw-border-opacity: 1;\n border-color: rgb(209 250 229 / var(--tw-border-opacity, 1));\n}\n.border-emerald-300 {\n --tw-border-opacity: 1;\n border-color: rgb(110 231 183 / var(--tw-border-opacity, 1));\n}\n.border-emerald-400 {\n --tw-border-opacity: 1;\n border-color: rgb(52 211 153 / var(--tw-border-opacity, 1));\n}\n.border-emerald-500 {\n --tw-border-opacity: 1;\n border-color: rgb(16 185 129 / var(--tw-border-opacity, 1));\n}\n.border-emerald-500\\/20 {\n border-color: rgb(16 185 129 / 0.2);\n}\n.border-gray-100 {\n --tw-border-opacity: 1;\n border-color: rgb(243 244 246 / var(--tw-border-opacity, 1));\n}\n.border-gray-200 {\n --tw-border-opacity: 1;\n border-color: rgb(229 231 235 / var(--tw-border-opacity, 1));\n}\n.border-gray-300 {\n --tw-border-opacity: 1;\n border-color: rgb(209 213 219 / var(--tw-border-opacity, 1));\n}\n.border-gray-50 {\n --tw-border-opacity: 1;\n border-color: rgb(249 250 251 / var(--tw-border-opacity, 1));\n}\n.border-green-100 {\n --tw-border-opacity: 1;\n border-color: rgb(220 252 231 / var(--tw-border-opacity, 1));\n}\n.border-green-200 {\n --tw-border-opacity: 1;\n border-color: rgb(187 247 208 / var(--tw-border-opacity, 1));\n}\n.border-indigo-100 {\n --tw-border-opacity: 1;\n border-color: rgb(224 231 255 / var(--tw-border-opacity, 1));\n}\n.border-orange-100 {\n --tw-border-opacity: 1;\n border-color: rgb(255 237 213 / var(--tw-border-opacity, 1));\n}\n.border-orange-200 {\n --tw-border-opacity: 1;\n border-color: rgb(254 215 170 / var(--tw-border-opacity, 1));\n}\n.border-pink-200 {\n --tw-border-opacity: 1;\n border-color: rgb(251 207 232 / var(--tw-border-opacity, 1));\n}\n.border-purple-100 {\n --tw-border-opacity: 1;\n border-color: rgb(243 232 255 / var(--tw-border-opacity, 1));\n}\n.border-purple-200 {\n --tw-border-opacity: 1;\n border-color: rgb(233 213 255 / var(--tw-border-opacity, 1));\n}\n.border-purple-500\\/10 {\n border-color: rgb(168 85 247 / 0.1);\n}\n.border-red-100 {\n --tw-border-opacity: 1;\n border-color: rgb(254 226 226 / var(--tw-border-opacity, 1));\n}\n.border-red-200 {\n --tw-border-opacity: 1;\n border-color: rgb(254 202 202 / var(--tw-border-opacity, 1));\n}\n.border-red-300 {\n --tw-border-opacity: 1;\n border-color: rgb(252 165 165 / var(--tw-border-opacity, 1));\n}\n.border-red-400 {\n --tw-border-opacity: 1;\n border-color: rgb(248 113 113 / var(--tw-border-opacity, 1));\n}\n.border-rose-100 {\n --tw-border-opacity: 1;\n border-color: rgb(255 228 230 / var(--tw-border-opacity, 1));\n}\n.border-rose-300 {\n --tw-border-opacity: 1;\n border-color: rgb(253 164 175 / var(--tw-border-opacity, 1));\n}\n.border-rose-500 {\n --tw-border-opacity: 1;\n border-color: rgb(244 63 94 / var(--tw-border-opacity, 1));\n}\n.border-sky-100 {\n --tw-border-opacity: 1;\n border-color: rgb(224 242 254 / var(--tw-border-opacity, 1));\n}\n.border-slate-100 {\n --tw-border-opacity: 1;\n border-color: rgb(241 245 249 / var(--tw-border-opacity, 1));\n}\n.border-slate-200 {\n --tw-border-opacity: 1;\n border-color: rgb(226 232 240 / var(--tw-border-opacity, 1));\n}\n.border-teal-100 {\n --tw-border-opacity: 1;\n border-color: rgb(204 251 241 / var(--tw-border-opacity, 1));\n}\n.border-transparent {\n border-color: transparent;\n}\n.border-violet-100 {\n --tw-border-opacity: 1;\n border-color: rgb(237 233 254 / var(--tw-border-opacity, 1));\n}\n.border-white {\n --tw-border-opacity: 1;\n border-color: rgb(255 255 255 / var(--tw-border-opacity, 1));\n}\n.border-white\\/10 {\n border-color: rgb(255 255 255 / 0.1);\n}\n.border-white\\/20 {\n border-color: rgb(255 255 255 / 0.2);\n}\n.border-white\\/30 {\n border-color: rgb(255 255 255 / 0.3);\n}\n.border-white\\/40 {\n border-color: rgb(255 255 255 / 0.4);\n}\n.border-yellow-200 {\n --tw-border-opacity: 1;\n border-color: rgb(254 240 138 / var(--tw-border-opacity, 1));\n}\n.border-l-blue-500 {\n --tw-border-opacity: 1;\n border-left-color: rgb(59 130 246 / var(--tw-border-opacity, 1));\n}\n.border-t-blue-500 {\n --tw-border-opacity: 1;\n border-top-color: rgb(59 130 246 / var(--tw-border-opacity, 1));\n}\n.border-t-transparent {\n border-top-color: transparent;\n}\n.border-t-white {\n --tw-border-opacity: 1;\n border-top-color: rgb(255 255 255 / var(--tw-border-opacity, 1));\n}\n.bg-\\[\\#003087\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(0 48 135 / var(--tw-bg-opacity, 1));\n}\n.bg-amber-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 243 199 / var(--tw-bg-opacity, 1));\n}\n.bg-amber-400 {\n --tw-bg-opacity: 1;\n background-color: rgb(251 191 36 / var(--tw-bg-opacity, 1));\n}\n.bg-amber-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(255 251 235 / var(--tw-bg-opacity, 1));\n}\n.bg-amber-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(245 158 11 / var(--tw-bg-opacity, 1));\n}\n.bg-amber-500\\/10 {\n background-color: rgb(245 158 11 / 0.1);\n}\n.bg-black\\/0 {\n background-color: rgb(0 0 0 / 0);\n}\n.bg-black\\/40 {\n background-color: rgb(0 0 0 / 0.4);\n}\n.bg-black\\/50 {\n background-color: rgb(0 0 0 / 0.5);\n}\n.bg-black\\/60 {\n background-color: rgb(0 0 0 / 0.6);\n}\n.bg-black\\/70 {\n background-color: rgb(0 0 0 / 0.7);\n}\n.bg-black\\/80 {\n background-color: rgb(0 0 0 / 0.8);\n}\n.bg-black\\/85 {\n background-color: rgb(0 0 0 / 0.85);\n}\n.bg-black\\/90 {\n background-color: rgb(0 0 0 / 0.9);\n}\n.bg-blue-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(219 234 254 / var(--tw-bg-opacity, 1));\n}\n.bg-blue-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(239 246 255 / var(--tw-bg-opacity, 1));\n}\n.bg-blue-50\\/30 {\n background-color: rgb(239 246 255 / 0.3);\n}\n.bg-blue-50\\/60 {\n background-color: rgb(239 246 255 / 0.6);\n}\n.bg-blue-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(59 130 246 / var(--tw-bg-opacity, 1));\n}\n.bg-blue-500\\/10 {\n background-color: rgb(59 130 246 / 0.1);\n}\n.bg-blue-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(37 99 235 / var(--tw-bg-opacity, 1));\n}\n.bg-blue-600\\/10 {\n background-color: rgb(37 99 235 / 0.1);\n}\n.bg-emerald-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(209 250 229 / var(--tw-bg-opacity, 1));\n}\n.bg-emerald-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(167 243 208 / var(--tw-bg-opacity, 1));\n}\n.bg-emerald-400 {\n --tw-bg-opacity: 1;\n background-color: rgb(52 211 153 / var(--tw-bg-opacity, 1));\n}\n.bg-emerald-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(236 253 245 / var(--tw-bg-opacity, 1));\n}\n.bg-emerald-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(16 185 129 / var(--tw-bg-opacity, 1));\n}\n.bg-emerald-500\\/10 {\n background-color: rgb(16 185 129 / 0.1);\n}\n.bg-emerald-500\\/20 {\n background-color: rgb(16 185 129 / 0.2);\n}\n.bg-emerald-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(5 150 105 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(209 213 219 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-400 {\n --tw-bg-opacity: 1;\n background-color: rgb(156 163 175 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(75 85 99 / var(--tw-bg-opacity, 1));\n}\n.bg-gray-900 {\n --tw-bg-opacity: 1;\n background-color: rgb(17 24 39 / var(--tw-bg-opacity, 1));\n}\n.bg-green-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(220 252 231 / var(--tw-bg-opacity, 1));\n}\n.bg-green-400 {\n --tw-bg-opacity: 1;\n background-color: rgb(74 222 128 / var(--tw-bg-opacity, 1));\n}\n.bg-green-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(240 253 244 / var(--tw-bg-opacity, 1));\n}\n.bg-green-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(34 197 94 / var(--tw-bg-opacity, 1));\n}\n.bg-green-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(22 163 74 / var(--tw-bg-opacity, 1));\n}\n.bg-indigo-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(224 231 255 / var(--tw-bg-opacity, 1));\n}\n.bg-indigo-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(238 242 255 / var(--tw-bg-opacity, 1));\n}\n.bg-indigo-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(79 70 229 / var(--tw-bg-opacity, 1));\n}\n.bg-orange-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(255 237 213 / var(--tw-bg-opacity, 1));\n}\n.bg-orange-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(255 247 237 / var(--tw-bg-opacity, 1));\n}\n.bg-orange-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(249 115 22 / var(--tw-bg-opacity, 1));\n}\n.bg-pink-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(253 242 248 / var(--tw-bg-opacity, 1));\n}\n.bg-purple-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(243 232 255 / var(--tw-bg-opacity, 1));\n}\n.bg-purple-400 {\n --tw-bg-opacity: 1;\n background-color: rgb(192 132 252 / var(--tw-bg-opacity, 1));\n}\n.bg-purple-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(250 245 255 / var(--tw-bg-opacity, 1));\n}\n.bg-purple-500\\/10 {\n background-color: rgb(168 85 247 / 0.1);\n}\n.bg-purple-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(147 51 234 / var(--tw-bg-opacity, 1));\n}\n.bg-red-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 226 226 / var(--tw-bg-opacity, 1));\n}\n.bg-red-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 202 202 / var(--tw-bg-opacity, 1));\n}\n.bg-red-400 {\n --tw-bg-opacity: 1;\n background-color: rgb(248 113 113 / var(--tw-bg-opacity, 1));\n}\n.bg-red-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 242 242 / var(--tw-bg-opacity, 1));\n}\n.bg-red-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(239 68 68 / var(--tw-bg-opacity, 1));\n}\n.bg-rose-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(255 241 242 / var(--tw-bg-opacity, 1));\n}\n.bg-rose-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(225 29 72 / var(--tw-bg-opacity, 1));\n}\n.bg-sky-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(240 249 255 / var(--tw-bg-opacity, 1));\n}\n.bg-sky-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(14 165 233 / var(--tw-bg-opacity, 1));\n}\n.bg-slate-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(241 245 249 / var(--tw-bg-opacity, 1));\n}\n.bg-slate-900 {\n --tw-bg-opacity: 1;\n background-color: rgb(15 23 42 / var(--tw-bg-opacity, 1));\n}\n.bg-teal-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(240 253 250 / var(--tw-bg-opacity, 1));\n}\n.bg-violet-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(245 243 255 / var(--tw-bg-opacity, 1));\n}\n.bg-violet-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(139 92 246 / var(--tw-bg-opacity, 1));\n}\n.bg-white {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));\n}\n.bg-white\\/10 {\n background-color: rgb(255 255 255 / 0.1);\n}\n.bg-white\\/15 {\n background-color: rgb(255 255 255 / 0.15);\n}\n.bg-white\\/20 {\n background-color: rgb(255 255 255 / 0.2);\n}\n.bg-white\\/60 {\n background-color: rgb(255 255 255 / 0.6);\n}\n.bg-white\\/80 {\n background-color: rgb(255 255 255 / 0.8);\n}\n.bg-white\\/90 {\n background-color: rgb(255 255 255 / 0.9);\n}\n.bg-yellow-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 249 195 / var(--tw-bg-opacity, 1));\n}\n.bg-yellow-400 {\n --tw-bg-opacity: 1;\n background-color: rgb(250 204 21 / var(--tw-bg-opacity, 1));\n}\n.bg-yellow-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(254 252 232 / var(--tw-bg-opacity, 1));\n}\n.bg-yellow-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(234 179 8 / var(--tw-bg-opacity, 1));\n}\n.bg-gradient-to-br {\n background-image: linear-gradient(to bottom right, var(--tw-gradient-stops));\n}\n.bg-gradient-to-r {\n background-image: linear-gradient(to right, var(--tw-gradient-stops));\n}\n.bg-gradient-to-t {\n background-image: linear-gradient(to top, var(--tw-gradient-stops));\n}\n.from-amber-400 {\n --tw-gradient-from: #fbbf24 var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(251 191 36 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.from-amber-50 {\n --tw-gradient-from: #fffbeb var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(255 251 235 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.from-amber-500 {\n --tw-gradient-from: #f59e0b var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(245 158 11 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.from-black\\/60 {\n --tw-gradient-from: rgb(0 0 0 / 0.6) var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.from-blue-500 {\n --tw-gradient-from: #3b82f6 var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.from-blue-700 {\n --tw-gradient-from: #1d4ed8 var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(29 78 216 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.from-indigo-100 {\n --tw-gradient-from: #e0e7ff var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(224 231 255 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.from-orange-400 {\n --tw-gradient-from: #fb923c var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(251 146 60 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.via-transparent {\n --tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), transparent var(--tw-gradient-via-position), var(--tw-gradient-to);\n}\n.via-yellow-400 {\n --tw-gradient-to: rgb(250 204 21 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), #facc15 var(--tw-gradient-via-position), var(--tw-gradient-to);\n}\n.to-amber-400 {\n --tw-gradient-to: #fbbf24 var(--tw-gradient-to-position);\n}\n.to-amber-50 {\n --tw-gradient-to: #fffbeb var(--tw-gradient-to-position);\n}\n.to-blue-500 {\n --tw-gradient-to: #3b82f6 var(--tw-gradient-to-position);\n}\n.to-orange-400 {\n --tw-gradient-to: #fb923c var(--tw-gradient-to-position);\n}\n.to-purple-500 {\n --tw-gradient-to: #a855f7 var(--tw-gradient-to-position);\n}\n.to-transparent {\n --tw-gradient-to: transparent var(--tw-gradient-to-position);\n}\n.to-yellow-50 {\n --tw-gradient-to: #fefce8 var(--tw-gradient-to-position);\n}\n.to-yellow-500 {\n --tw-gradient-to: #eab308 var(--tw-gradient-to-position);\n}\n.bg-clip-text {\n -webkit-background-clip: text;\n background-clip: text;\n}\n.fill-gray-900 {\n fill: #111827;\n}\n.object-contain {\n -o-object-fit: contain;\n object-fit: contain;\n}\n.object-cover {\n -o-object-fit: cover;\n object-fit: cover;\n}\n.p-0 {\n padding: 0px;\n}\n.p-1 {\n padding: 0.25rem;\n}\n.p-10 {\n padding: 2.5rem;\n}\n.p-2 {\n padding: 0.5rem;\n}\n.p-2\\.5 {\n padding: 0.625rem;\n}\n.p-3 {\n padding: 0.75rem;\n}\n.p-4 {\n padding: 1rem;\n}\n.p-5 {\n padding: 1.25rem;\n}\n.p-6 {\n padding: 1.5rem;\n}\n.p-8 {\n padding: 2rem;\n}\n.px-0\\.5 {\n padding-left: 0.125rem;\n padding-right: 0.125rem;\n}\n.px-1 {\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n}\n.px-1\\.5 {\n padding-left: 0.375rem;\n padding-right: 0.375rem;\n}\n.px-2 {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n.px-2\\.5 {\n padding-left: 0.625rem;\n padding-right: 0.625rem;\n}\n.px-3 {\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n}\n.px-3\\.5 {\n padding-left: 0.875rem;\n padding-right: 0.875rem;\n}\n.px-4 {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n.px-5 {\n padding-left: 1.25rem;\n padding-right: 1.25rem;\n}\n.px-6 {\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n}\n.px-7 {\n padding-left: 1.75rem;\n padding-right: 1.75rem;\n}\n.px-8 {\n padding-left: 2rem;\n padding-right: 2rem;\n}\n.py-0\\.5 {\n padding-top: 0.125rem;\n padding-bottom: 0.125rem;\n}\n.py-1 {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n}\n.py-1\\.5 {\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n}\n.py-10 {\n padding-top: 2.5rem;\n padding-bottom: 2.5rem;\n}\n.py-12 {\n padding-top: 3rem;\n padding-bottom: 3rem;\n}\n.py-14 {\n padding-top: 3.5rem;\n padding-bottom: 3.5rem;\n}\n.py-16 {\n padding-top: 4rem;\n padding-bottom: 4rem;\n}\n.py-2 {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n.py-2\\.5 {\n padding-top: 0.625rem;\n padding-bottom: 0.625rem;\n}\n.py-20 {\n padding-top: 5rem;\n padding-bottom: 5rem;\n}\n.py-24 {\n padding-top: 6rem;\n padding-bottom: 6rem;\n}\n.py-3 {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n}\n.py-3\\.5 {\n padding-top: 0.875rem;\n padding-bottom: 0.875rem;\n}\n.py-4 {\n padding-top: 1rem;\n padding-bottom: 1rem;\n}\n.py-5 {\n padding-top: 1.25rem;\n padding-bottom: 1.25rem;\n}\n.py-6 {\n padding-top: 1.5rem;\n padding-bottom: 1.5rem;\n}\n.py-8 {\n padding-top: 2rem;\n padding-bottom: 2rem;\n}\n.pb-0\\.5 {\n padding-bottom: 0.125rem;\n}\n.pb-1 {\n padding-bottom: 0.25rem;\n}\n.pb-2 {\n padding-bottom: 0.5rem;\n}\n.pb-20 {\n padding-bottom: 5rem;\n}\n.pb-4 {\n padding-bottom: 1rem;\n}\n.pb-5 {\n padding-bottom: 1.25rem;\n}\n.pl-10 {\n padding-left: 2.5rem;\n}\n.pl-12 {\n padding-left: 3rem;\n}\n.pl-5 {\n padding-left: 1.25rem;\n}\n.pl-7 {\n padding-left: 1.75rem;\n}\n.pl-8 {\n padding-left: 2rem;\n}\n.pr-14 {\n padding-right: 3.5rem;\n}\n.pr-2 {\n padding-right: 0.5rem;\n}\n.pr-24 {\n padding-right: 6rem;\n}\n.pr-3 {\n padding-right: 0.75rem;\n}\n.pr-4 {\n padding-right: 1rem;\n}\n.pt-1 {\n padding-top: 0.25rem;\n}\n.pt-10 {\n padding-top: 2.5rem;\n}\n.pt-16 {\n padding-top: 4rem;\n}\n.pt-2 {\n padding-top: 0.5rem;\n}\n.pt-3 {\n padding-top: 0.75rem;\n}\n.pt-4 {\n padding-top: 1rem;\n}\n.pt-6 {\n padding-top: 1.5rem;\n}\n.pt-8 {\n padding-top: 2rem;\n}\n.text-left {\n text-align: left;\n}\n.text-center {\n text-align: center;\n}\n.text-right {\n text-align: right;\n}\n.align-top {\n vertical-align: top;\n}\n.font-mono {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n.text-2xl {\n font-size: 1.5rem;\n line-height: 2rem;\n}\n.text-3xl {\n font-size: 1.875rem;\n line-height: 2.25rem;\n}\n.text-4xl {\n font-size: 2.25rem;\n line-height: 2.5rem;\n}\n.text-5xl {\n font-size: 3rem;\n line-height: 1;\n}\n.text-8xl {\n font-size: 6rem;\n line-height: 1;\n}\n.text-\\[10px\\] {\n font-size: 10px;\n}\n.text-\\[11px\\] {\n font-size: 11px;\n}\n.text-\\[8px\\] {\n font-size: 8px;\n}\n.text-\\[9px\\] {\n font-size: 9px;\n}\n.text-base {\n font-size: 1rem;\n line-height: 1.5rem;\n}\n.text-lg {\n font-size: 1.125rem;\n line-height: 1.75rem;\n}\n.text-sm {\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n.text-xl {\n font-size: 1.25rem;\n line-height: 1.75rem;\n}\n.text-xs {\n font-size: 0.75rem;\n line-height: 1rem;\n}\n.font-bold {\n font-weight: 700;\n}\n.font-extrabold {\n font-weight: 800;\n}\n.font-medium {\n font-weight: 500;\n}\n.font-normal {\n font-weight: 400;\n}\n.font-semibold {\n font-weight: 600;\n}\n.uppercase {\n text-transform: uppercase;\n}\n.italic {\n font-style: italic;\n}\n.leading-none {\n line-height: 1;\n}\n.leading-relaxed {\n line-height: 1.625;\n}\n.leading-snug {\n line-height: 1.375;\n}\n.leading-tight {\n line-height: 1.25;\n}\n.tracking-tight {\n letter-spacing: -0.025em;\n}\n.tracking-wide {\n letter-spacing: 0.025em;\n}\n.tracking-wider {\n letter-spacing: 0.05em;\n}\n.text-amber-400 {\n --tw-text-opacity: 1;\n color: rgb(251 191 36 / var(--tw-text-opacity, 1));\n}\n.text-amber-500 {\n --tw-text-opacity: 1;\n color: rgb(245 158 11 / var(--tw-text-opacity, 1));\n}\n.text-amber-600 {\n --tw-text-opacity: 1;\n color: rgb(217 119 6 / var(--tw-text-opacity, 1));\n}\n.text-amber-700 {\n --tw-text-opacity: 1;\n color: rgb(180 83 9 / var(--tw-text-opacity, 1));\n}\n.text-amber-800 {\n --tw-text-opacity: 1;\n color: rgb(146 64 14 / var(--tw-text-opacity, 1));\n}\n.text-amber-900 {\n --tw-text-opacity: 1;\n color: rgb(120 53 15 / var(--tw-text-opacity, 1));\n}\n.text-blue-100 {\n --tw-text-opacity: 1;\n color: rgb(219 234 254 / var(--tw-text-opacity, 1));\n}\n.text-blue-300 {\n --tw-text-opacity: 1;\n color: rgb(147 197 253 / var(--tw-text-opacity, 1));\n}\n.text-blue-400 {\n --tw-text-opacity: 1;\n color: rgb(96 165 250 / var(--tw-text-opacity, 1));\n}\n.text-blue-500 {\n --tw-text-opacity: 1;\n color: rgb(59 130 246 / var(--tw-text-opacity, 1));\n}\n.text-blue-600 {\n --tw-text-opacity: 1;\n color: rgb(37 99 235 / var(--tw-text-opacity, 1));\n}\n.text-blue-700 {\n --tw-text-opacity: 1;\n color: rgb(29 78 216 / var(--tw-text-opacity, 1));\n}\n.text-blue-800 {\n --tw-text-opacity: 1;\n color: rgb(30 64 175 / var(--tw-text-opacity, 1));\n}\n.text-blue-900 {\n --tw-text-opacity: 1;\n color: rgb(30 58 138 / var(--tw-text-opacity, 1));\n}\n.text-emerald-400 {\n --tw-text-opacity: 1;\n color: rgb(52 211 153 / var(--tw-text-opacity, 1));\n}\n.text-emerald-500 {\n --tw-text-opacity: 1;\n color: rgb(16 185 129 / var(--tw-text-opacity, 1));\n}\n.text-emerald-600 {\n --tw-text-opacity: 1;\n color: rgb(5 150 105 / var(--tw-text-opacity, 1));\n}\n.text-emerald-700 {\n --tw-text-opacity: 1;\n color: rgb(4 120 87 / var(--tw-text-opacity, 1));\n}\n.text-emerald-800 {\n --tw-text-opacity: 1;\n color: rgb(6 95 70 / var(--tw-text-opacity, 1));\n}\n.text-emerald-900 {\n --tw-text-opacity: 1;\n color: rgb(6 78 59 / var(--tw-text-opacity, 1));\n}\n.text-gray-200 {\n --tw-text-opacity: 1;\n color: rgb(229 231 235 / var(--tw-text-opacity, 1));\n}\n.text-gray-300 {\n --tw-text-opacity: 1;\n color: rgb(209 213 219 / var(--tw-text-opacity, 1));\n}\n.text-gray-400 {\n --tw-text-opacity: 1;\n color: rgb(156 163 175 / var(--tw-text-opacity, 1));\n}\n.text-gray-500 {\n --tw-text-opacity: 1;\n color: rgb(107 114 128 / var(--tw-text-opacity, 1));\n}\n.text-gray-600 {\n --tw-text-opacity: 1;\n color: rgb(75 85 99 / var(--tw-text-opacity, 1));\n}\n.text-gray-700 {\n --tw-text-opacity: 1;\n color: rgb(55 65 81 / var(--tw-text-opacity, 1));\n}\n.text-gray-800 {\n --tw-text-opacity: 1;\n color: rgb(31 41 55 / var(--tw-text-opacity, 1));\n}\n.text-gray-900 {\n --tw-text-opacity: 1;\n color: rgb(17 24 39 / var(--tw-text-opacity, 1));\n}\n.text-green-400 {\n --tw-text-opacity: 1;\n color: rgb(74 222 128 / var(--tw-text-opacity, 1));\n}\n.text-green-500 {\n --tw-text-opacity: 1;\n color: rgb(34 197 94 / var(--tw-text-opacity, 1));\n}\n.text-green-600 {\n --tw-text-opacity: 1;\n color: rgb(22 163 74 / var(--tw-text-opacity, 1));\n}\n.text-green-700 {\n --tw-text-opacity: 1;\n color: rgb(21 128 61 / var(--tw-text-opacity, 1));\n}\n.text-green-800 {\n --tw-text-opacity: 1;\n color: rgb(22 101 52 / var(--tw-text-opacity, 1));\n}\n.text-indigo-500 {\n --tw-text-opacity: 1;\n color: rgb(99 102 241 / var(--tw-text-opacity, 1));\n}\n.text-indigo-600 {\n --tw-text-opacity: 1;\n color: rgb(79 70 229 / var(--tw-text-opacity, 1));\n}\n.text-indigo-700 {\n --tw-text-opacity: 1;\n color: rgb(67 56 202 / var(--tw-text-opacity, 1));\n}\n.text-orange-400 {\n --tw-text-opacity: 1;\n color: rgb(251 146 60 / var(--tw-text-opacity, 1));\n}\n.text-orange-500 {\n --tw-text-opacity: 1;\n color: rgb(249 115 22 / var(--tw-text-opacity, 1));\n}\n.text-orange-600 {\n --tw-text-opacity: 1;\n color: rgb(234 88 12 / var(--tw-text-opacity, 1));\n}\n.text-orange-700 {\n --tw-text-opacity: 1;\n color: rgb(194 65 12 / var(--tw-text-opacity, 1));\n}\n.text-orange-800 {\n --tw-text-opacity: 1;\n color: rgb(154 52 18 / var(--tw-text-opacity, 1));\n}\n.text-pink-400 {\n --tw-text-opacity: 1;\n color: rgb(244 114 182 / var(--tw-text-opacity, 1));\n}\n.text-pink-500 {\n --tw-text-opacity: 1;\n color: rgb(236 72 153 / var(--tw-text-opacity, 1));\n}\n.text-pink-600 {\n --tw-text-opacity: 1;\n color: rgb(219 39 119 / var(--tw-text-opacity, 1));\n}\n.text-purple-400 {\n --tw-text-opacity: 1;\n color: rgb(192 132 252 / var(--tw-text-opacity, 1));\n}\n.text-purple-500 {\n --tw-text-opacity: 1;\n color: rgb(168 85 247 / var(--tw-text-opacity, 1));\n}\n.text-purple-600 {\n --tw-text-opacity: 1;\n color: rgb(147 51 234 / var(--tw-text-opacity, 1));\n}\n.text-purple-700 {\n --tw-text-opacity: 1;\n color: rgb(126 34 206 / var(--tw-text-opacity, 1));\n}\n.text-red-400 {\n --tw-text-opacity: 1;\n color: rgb(248 113 113 / var(--tw-text-opacity, 1));\n}\n.text-red-500 {\n --tw-text-opacity: 1;\n color: rgb(239 68 68 / var(--tw-text-opacity, 1));\n}\n.text-red-600 {\n --tw-text-opacity: 1;\n color: rgb(220 38 38 / var(--tw-text-opacity, 1));\n}\n.text-red-700 {\n --tw-text-opacity: 1;\n color: rgb(185 28 28 / var(--tw-text-opacity, 1));\n}\n.text-rose-700 {\n --tw-text-opacity: 1;\n color: rgb(190 18 60 / var(--tw-text-opacity, 1));\n}\n.text-rose-800 {\n --tw-text-opacity: 1;\n color: rgb(159 18 57 / var(--tw-text-opacity, 1));\n}\n.text-rose-900 {\n --tw-text-opacity: 1;\n color: rgb(136 19 55 / var(--tw-text-opacity, 1));\n}\n.text-sky-600 {\n --tw-text-opacity: 1;\n color: rgb(2 132 199 / var(--tw-text-opacity, 1));\n}\n.text-sky-700 {\n --tw-text-opacity: 1;\n color: rgb(3 105 161 / var(--tw-text-opacity, 1));\n}\n.text-slate-300 {\n --tw-text-opacity: 1;\n color: rgb(203 213 225 / var(--tw-text-opacity, 1));\n}\n.text-slate-400 {\n --tw-text-opacity: 1;\n color: rgb(148 163 184 / var(--tw-text-opacity, 1));\n}\n.text-slate-500 {\n --tw-text-opacity: 1;\n color: rgb(100 116 139 / var(--tw-text-opacity, 1));\n}\n.text-slate-600 {\n --tw-text-opacity: 1;\n color: rgb(71 85 105 / var(--tw-text-opacity, 1));\n}\n.text-slate-700 {\n --tw-text-opacity: 1;\n color: rgb(51 65 85 / var(--tw-text-opacity, 1));\n}\n.text-slate-900 {\n --tw-text-opacity: 1;\n color: rgb(15 23 42 / var(--tw-text-opacity, 1));\n}\n.text-teal-700 {\n --tw-text-opacity: 1;\n color: rgb(15 118 110 / var(--tw-text-opacity, 1));\n}\n.text-transparent {\n color: transparent;\n}\n.text-violet-600 {\n --tw-text-opacity: 1;\n color: rgb(124 58 237 / var(--tw-text-opacity, 1));\n}\n.text-violet-700 {\n --tw-text-opacity: 1;\n color: rgb(109 40 217 / var(--tw-text-opacity, 1));\n}\n.text-white {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity, 1));\n}\n.text-white\\/50 {\n color: rgb(255 255 255 / 0.5);\n}\n.text-white\\/60 {\n color: rgb(255 255 255 / 0.6);\n}\n.text-white\\/70 {\n color: rgb(255 255 255 / 0.7);\n}\n.text-white\\/80 {\n color: rgb(255 255 255 / 0.8);\n}\n.text-white\\/90 {\n color: rgb(255 255 255 / 0.9);\n}\n.text-yellow-300 {\n --tw-text-opacity: 1;\n color: rgb(253 224 71 / var(--tw-text-opacity, 1));\n}\n.text-yellow-400 {\n --tw-text-opacity: 1;\n color: rgb(250 204 21 / var(--tw-text-opacity, 1));\n}\n.text-yellow-500 {\n --tw-text-opacity: 1;\n color: rgb(234 179 8 / var(--tw-text-opacity, 1));\n}\n.text-yellow-600 {\n --tw-text-opacity: 1;\n color: rgb(202 138 4 / var(--tw-text-opacity, 1));\n}\n.text-yellow-700 {\n --tw-text-opacity: 1;\n color: rgb(161 98 7 / var(--tw-text-opacity, 1));\n}\n.text-yellow-800 {\n --tw-text-opacity: 1;\n color: rgb(133 77 14 / var(--tw-text-opacity, 1));\n}\n.underline {\n text-decoration-line: underline;\n}\n.line-through {\n text-decoration-line: line-through;\n}\n.opacity-0 {\n opacity: 0;\n}\n.opacity-100 {\n opacity: 1;\n}\n.opacity-25 {\n opacity: 0.25;\n}\n.opacity-40 {\n opacity: 0.4;\n}\n.opacity-50 {\n opacity: 0.5;\n}\n.opacity-60 {\n opacity: 0.6;\n}\n.opacity-70 {\n opacity: 0.7;\n}\n.opacity-75 {\n opacity: 0.75;\n}\n.shadow {\n --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-2xl {\n --tw-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25);\n --tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-lg {\n --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-md {\n --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-sm {\n --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-xl {\n --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-amber-100 {\n --tw-shadow-color: #fef3c7;\n --tw-shadow: var(--tw-shadow-colored);\n}\n.shadow-amber-300\\/50 {\n --tw-shadow-color: rgb(252 211 77 / 0.5);\n --tw-shadow: var(--tw-shadow-colored);\n}\n.shadow-amber-500\\/25 {\n --tw-shadow-color: rgb(245 158 11 / 0.25);\n --tw-shadow: var(--tw-shadow-colored);\n}\n.\\!ring-2 {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000) !important;\n}\n.ring-2 {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.ring-4 {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.\\!ring-blue-500 {\n --tw-ring-opacity: 1 !important;\n --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1)) !important;\n}\n.ring-blue-200 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(191 219 254 / var(--tw-ring-opacity, 1));\n}\n.ring-blue-400 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(96 165 250 / var(--tw-ring-opacity, 1));\n}\n.ring-blue-500 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1));\n}\n.\\!ring-offset-1 {\n --tw-ring-offset-width: 1px !important;\n}\n.ring-offset-1 {\n --tw-ring-offset-width: 1px;\n}\n.ring-offset-2 {\n --tw-ring-offset-width: 2px;\n}\n.blur {\n --tw-blur: blur(8px);\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.blur-\\[100px\\] {\n --tw-blur: blur(100px);\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.blur-\\[120px\\] {\n --tw-blur: blur(120px);\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.drop-shadow {\n --tw-drop-shadow: drop-shadow(0 1px 2px rgb(0 0 0 / 0.1)) drop-shadow(0 1px 1px rgb(0 0 0 / 0.06));\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.drop-shadow-lg {\n --tw-drop-shadow: drop-shadow(0 10px 8px rgb(0 0 0 / 0.04)) drop-shadow(0 4px 3px rgb(0 0 0 / 0.1));\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.filter {\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.backdrop-blur {\n --tw-backdrop-blur: blur(8px);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n.backdrop-blur-md {\n --tw-backdrop-blur: blur(12px);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n.backdrop-blur-sm {\n --tw-backdrop-blur: blur(4px);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n.backdrop-blur-xl {\n --tw-backdrop-blur: blur(24px);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n.transition {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-all {\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-colors {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-opacity {\n transition-property: opacity;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-transform {\n transition-property: transform;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.duration-200 {\n transition-duration: 200ms;\n}\n.duration-300 {\n transition-duration: 300ms;\n}\n.duration-500 {\n transition-duration: 500ms;\n}\n.ease-in-out {\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n\n:root {\n --blue-main: #2563eb;\n --blue-light: #60a5fa;\n --blue-dark: #1e40af;\n --orange-main: #f59e0b;\n --orange-light: #fbbf24;\n --orange-dark: #b45309;\n --glass-bg: rgba(255,255,255,0.65);\n --glass-blur: 18px;\n}\n\nbody {\n background: linear-gradient(135deg, var(--blue-main) 0%, var(--blue-light) 60%, var(--orange-light) 100%);\n color: #18181b;\n font-family: 'Inter', 'Segoe UI', Arial, sans-serif;\n min-height: 100vh;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n\n/* Section highlight styles */\n/* Glassmorphism section style */\n.section-contrast {\n background: var(--glass-bg);\n border-radius: 2.5rem;\n box-shadow: 0 8px 40px 0 rgba(37,99,235,0.10), 0 1.5px 8px 0 rgba(245,158,11,0.08);\n border: 1.5px solid rgba(96,165,250,0.13);\n margin-bottom: 3.5rem;\n padding: 3rem 1.5rem;\n backdrop-filter: blur(var(--glass-blur));\n -webkit-backdrop-filter: blur(var(--glass-blur));\n transition: box-shadow 0.3s, background 0.3s;\n}\n.section-contrast:before {\n display: none;\n}\n@media (min-width: 640px) {\n .section-contrast {\n padding: 4rem 2.5rem;\n margin-left: 1.5rem;\n margin-right: 1.5rem;\n }\n}\n@media (min-width: 1024px) {\n .section-contrast {\n margin-left: 2.5rem;\n margin-right: 2.5rem;\n }\n}\n\n/* Accent button */\n.btn-accent {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n background: var(--blue-main);\n color: #fff;\n font-weight: 700;\n border-radius: 1.2em;\n box-shadow: 0 4px 24px 0 rgba(37,99,235,0.13);\n padding: 0.9em 2.2em;\n font-size: 1.25rem;\n letter-spacing: 0.01em;\n transition: background 0.2s, box-shadow 0.2s, transform 0.15s;\n border: none;\n cursor: pointer;\n}\n.btn-accent:hover {\n background: var(--blue-dark);\n box-shadow: 0 8px 32px 0 rgba(245,158,11,0.13);\n transform: translateY(-2px) scale(1.03);\n}\n\n/* Outline button — same shape as btn-accent, white background */\n.btn-outline {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n background: #fff;\n color: var(--blue-main);\n font-weight: 700;\n border-radius: 1.2em;\n box-shadow: 0 4px 24px 0 rgba(37,99,235,0.10);\n padding: 0.9em 2.2em;\n font-size: 1.25rem;\n letter-spacing: 0.01em;\n border: 2px solid var(--blue-main);\n cursor: pointer;\n transition: background 0.2s, box-shadow 0.2s, transform 0.15s, color 0.2s;\n}\n.btn-outline:hover {\n background: var(--blue-main);\n color: #fff;\n box-shadow: 0 8px 32px 0 rgba(37,99,235,0.18);\n transform: translateY(-2px) scale(1.03);\n}\n\n/* Modern card */\n.modern-card {\n background: #fff;\n border-radius: 1.5rem;\n box-shadow: 0 2px 16px 0 rgba(37,99,235,0.07), 0 1.5px 8px 0 rgba(245,158,11,0.06);\n border: 1.5px solid rgba(96,165,250,0.09);\n transition: box-shadow 0.2s, border 0.2s;\n}\n.modern-card:hover {\n box-shadow: 0 8px 32px 0 rgba(245,158,11,0.13);\n border: 1.5px solid var(--orange-main);\n}\n\n/* Floating hero icons */\n@keyframes heroIconFloat {\n 0%, 100% { transform: translateY(0px) rotate(0deg); }\n 50% { transform: translateY(-14px) rotate(4deg); }\n}\n@keyframes heroIconDrift {\n 0%, 100% { transform: translateY(0px) rotate(0deg); }\n 33% { transform: translateY(-10px) rotate(-5deg); }\n 66% { transform: translateY(-6px) rotate(3deg); }\n}\n@keyframes heroIconSway {\n 0%, 100% { transform: translateY(0px) translateX(0px); }\n 50% { transform: translateY(-8px) translateX(6px); }\n}\n\n/* Animated gradient background for hero */\n.hero-bg-animated {\n background: linear-gradient(120deg, var(--blue-main) 0%, var(--blue-light) 60%, var(--orange-main) 100%);\n background-size: 200% 200%;\n animation: heroGradientMove 6s ease-in-out infinite;\n}\n@keyframes heroGradientMove {\n 0% { background-position: 0% 50%; }\n 50% { background-position: 100% 50%; }\n 100% { background-position: 0% 50%; }\n}\n\n/* Header shrink effect */\n.header-base {\n transition: all 0.3s cubic-bezier(.4,0,.2,1);\n}\n.header-shrink .header-content {\n height: 48px !important;\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n.header-shrink .logo-text {\n font-size: 1.3rem !important;\n letter-spacing: 0.01em;\n}\n\n.logo-text {\n font-family: 'Showpop', sans-serif !important;\n font-size: 1.7rem !important;\n font-weight: 300 !important;\n letter-spacing: 0.01em;\n text-transform: uppercase;\n}\n\n.logo-text-mini {\n font-family: 'Showpop', sans-serif !important;\n font-size: 1.3rem !important;\n font-weight: 300 !important;\n letter-spacing: 0.01em;\n text-transform: uppercase;\n transition: font-size 0.3s ease;\n}\n\n.logo-text-mini.scrolled {\n font-size: 1.1rem !important;\n}\n\n/* ── Site theme (dark = default) ── */\n.site-theme {\n --site-bg: #0a0a0f;\n --site-surface: rgba(255,255,255,0.03);\n --site-surface-hover: rgba(255,255,255,0.06);\n --site-border: rgba(255,255,255,0.05);\n --site-border-hover: rgba(255,255,255,0.1);\n --site-text: #ffffff;\n --site-text-secondary: rgba(255,255,255,0.5);\n --site-text-muted: rgba(255,255,255,0.3);\n --site-text-hint: rgba(255,255,255,0.2);\n --site-nav-bg: rgba(10,10,15,0.8);\n --site-modal-bg: #14141f;\n --site-input-bg: rgba(255,255,255,0.05);\n --site-input-border: rgba(255,255,255,0.1);\n --site-input-text: #ffffff;\n --site-input-placeholder: rgba(255,255,255,0.2);\n --site-tag-bg: rgba(255,255,255,0.05);\n --site-tag-border: rgba(255,255,255,0.05);\n --site-tag-text: rgba(255,255,255,0.6);\n --site-card-bg: rgba(255,255,255,0.03);\n --site-card-border: rgba(255,255,255,0.05);\n --site-name-from: #ffffff;\n --site-name-to: rgba(255,255,255,0.7);\n --site-avatar-border: rgba(255,255,255,0.1);\n --site-avatar-bg: rgba(255,255,255,0.05);\n --site-status-border-color: #0a0a0f;\n --site-phone-bg: rgba(255,255,255,0.05);\n --site-phone-border: rgba(255,255,255,0.1);\n --site-phone-text: #ffffff;\n --site-divider: rgba(255,255,255,0.1);\n --site-lang-dropdown: #1a1a24;\n --site-footer-text: rgba(255,255,255,0.2);\n --site-scroll-btn-bg: rgba(255,255,255,0.1);\n --site-scroll-btn-border: rgba(255,255,255,0.1);\n --site-scroll-btn-text: rgba(255,255,255,0.6);\n}\n\n.site-theme.site-light {\n --site-bg: #f8f9fb;\n --site-surface: rgba(0,0,0,0.02);\n --site-surface-hover: rgba(0,0,0,0.04);\n --site-border: rgba(0,0,0,0.08);\n --site-border-hover: rgba(0,0,0,0.15);\n --site-text: #1a1a2e;\n --site-text-secondary: rgba(0,0,0,0.55);\n --site-text-muted: rgba(0,0,0,0.4);\n --site-text-hint: rgba(0,0,0,0.25);\n --site-nav-bg: rgba(255,255,255,0.85);\n --site-modal-bg: #ffffff;\n --site-input-bg: rgba(0,0,0,0.03);\n --site-input-border: rgba(0,0,0,0.12);\n --site-input-text: #1a1a2e;\n --site-input-placeholder: rgba(0,0,0,0.3);\n --site-tag-bg: rgba(0,0,0,0.04);\n --site-tag-border: rgba(0,0,0,0.08);\n --site-tag-text: rgba(0,0,0,0.6);\n --site-card-bg: #ffffff;\n --site-card-border: rgba(0,0,0,0.08);\n --site-name-from: #1a1a2e;\n --site-name-to: rgba(26,26,46,0.7);\n --site-avatar-border: rgba(0,0,0,0.1);\n --site-avatar-bg: rgba(0,0,0,0.05);\n --site-status-border-color: #f8f9fb;\n --site-phone-bg: rgba(0,0,0,0.04);\n --site-phone-border: rgba(0,0,0,0.1);\n --site-phone-text: #1a1a2e;\n --site-divider: rgba(0,0,0,0.08);\n --site-lang-dropdown: #ffffff;\n --site-footer-text: rgba(0,0,0,0.3);\n --site-scroll-btn-bg: rgba(0,0,0,0.06);\n --site-scroll-btn-border: rgba(0,0,0,0.1);\n --site-scroll-btn-text: rgba(0,0,0,0.5);\n}\n\n.logo-text-jaipur {\n font-family: 'Jaipur', 'Inter', 'Segoe UI', Arial, sans-serif !important;\n font-size: 1.7rem !important;\n letter-spacing: 0.01em;\n text-transform: uppercase;\n}\n\n.logo-text-rennie {\n font-family: 'Rennie', 'Inter', 'Segoe UI', Arial, sans-serif !important;\n font-size: 1.7rem !important;\n letter-spacing: 0.01em;\n text-transform: uppercase;\n}\n\n/* Scroll to top button */\n.scroll-to-top-btn {\n position: fixed;\n right: 2rem;\n bottom: 2.5rem;\n z-index: 100;\n background: #6366f1;\n color: #fff;\n border-radius: 9999px;\n box-shadow: 0 2px 12px 0 rgba(80,80,120,0.13);\n padding: 0.75rem;\n width: 3rem;\n height: 3rem;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 1.5rem;\n border: none;\n cursor: pointer;\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.3s;\n}\n.scroll-to-top-btn.visible {\n opacity: 1;\n pointer-events: auto;\n}\n\n@font-face {\n font-family: 'NorseCyr2';\n src: url('/fonts/Norse-Regular.woff2') format('woff2');\n font-weight: normal;\n font-style: normal;\n font-display: swap;\n}\n\n@font-face {\n font-family: 'Jaipur';\n src: url('/fonts/Jaipur.woff2') format('woff2');\n font-weight: normal;\n font-style: normal;\n font-display: swap;\n}\n\n@font-face {\n font-family: 'Rennie';\n src: url('/fonts/Rennie.woff2') format('woff2');\n font-weight: normal;\n font-style: normal;\n font-display: swap;\n}\n\n.selection\\:bg-blue-500\\/30 *::-moz-selection {\n background-color: rgb(59 130 246 / 0.3);\n}\n\n.selection\\:bg-blue-500\\/30 *::selection {\n background-color: rgb(59 130 246 / 0.3);\n}\n\n.selection\\:bg-blue-500\\/30::-moz-selection {\n background-color: rgb(59 130 246 / 0.3);\n}\n\n.selection\\:bg-blue-500\\/30::selection {\n background-color: rgb(59 130 246 / 0.3);\n}\n\n.placeholder\\:text-blue-300::-moz-placeholder {\n --tw-text-opacity: 1;\n color: rgb(147 197 253 / var(--tw-text-opacity, 1));\n}\n\n.placeholder\\:text-blue-300::placeholder {\n --tw-text-opacity: 1;\n color: rgb(147 197 253 / var(--tw-text-opacity, 1));\n}\n\n.last\\:border-0:last-child {\n border-width: 0px;\n}\n\n.last\\:pb-0:last-child {\n padding-bottom: 0px;\n}\n\n.focus-within\\:ring-2:focus-within {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n\n.focus-within\\:ring-blue-400:focus-within {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(96 165 250 / var(--tw-ring-opacity, 1));\n}\n\n.hover\\:border-blue-300:hover {\n --tw-border-opacity: 1;\n border-color: rgb(147 197 253 / var(--tw-border-opacity, 1));\n}\n\n.hover\\:border-blue-400:hover {\n --tw-border-opacity: 1;\n border-color: rgb(96 165 250 / var(--tw-border-opacity, 1));\n}\n\n.hover\\:border-gray-300:hover {\n --tw-border-opacity: 1;\n border-color: rgb(209 213 219 / var(--tw-border-opacity, 1));\n}\n\n.hover\\:bg-amber-200:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(253 230 138 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-amber-50:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(255 251 235 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-amber-600:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(217 119 6 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-black\\/70:hover {\n background-color: rgb(0 0 0 / 0.7);\n}\n\n.hover\\:bg-blue-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(219 234 254 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-blue-50:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(239 246 255 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-blue-50\\/60:hover {\n background-color: rgb(239 246 255 / 0.6);\n}\n\n.hover\\:bg-blue-500:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(59 130 246 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-blue-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(29 78 216 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-emerald-200:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(167 243 208 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-emerald-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(4 120 87 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-gray-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-gray-200:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-gray-50:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-gray-50\\/50:hover {\n background-color: rgb(249 250 251 / 0.5);\n}\n\n.hover\\:bg-gray-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(55 65 81 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-green-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(220 252 231 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-green-50:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(240 253 244 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-green-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(21 128 61 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-indigo-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(224 231 255 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-indigo-200:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(199 210 254 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-indigo-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(67 56 202 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-orange-600:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(234 88 12 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-pink-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(252 231 243 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-pink-50:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(253 242 248 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-purple-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(243 232 255 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-purple-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(126 34 206 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-red-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(254 226 226 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-red-200:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(254 202 202 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-red-50:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(254 242 242 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-red-600:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(220 38 38 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-rose-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(190 18 60 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-slate-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(241 245 249 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-slate-800:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(30 41 59 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-white:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-white\\/10:hover {\n background-color: rgb(255 255 255 / 0.1);\n}\n\n.hover\\:bg-white\\/20:hover {\n background-color: rgb(255 255 255 / 0.2);\n}\n\n.hover\\:bg-white\\/25:hover {\n background-color: rgb(255 255 255 / 0.25);\n}\n\n.hover\\:bg-yellow-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(254 249 195 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:bg-yellow-600:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(202 138 4 / var(--tw-bg-opacity, 1));\n}\n\n.hover\\:from-amber-600:hover {\n --tw-gradient-from: #d97706 var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(217 119 6 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n\n.hover\\:to-yellow-600:hover {\n --tw-gradient-to: #ca8a04 var(--tw-gradient-to-position);\n}\n\n.hover\\:text-black:hover {\n --tw-text-opacity: 1;\n color: rgb(0 0 0 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-blue-300:hover {\n --tw-text-opacity: 1;\n color: rgb(147 197 253 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-blue-400:hover {\n --tw-text-opacity: 1;\n color: rgb(96 165 250 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-blue-600:hover {\n --tw-text-opacity: 1;\n color: rgb(37 99 235 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-blue-700:hover {\n --tw-text-opacity: 1;\n color: rgb(29 78 216 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-blue-800:hover {\n --tw-text-opacity: 1;\n color: rgb(30 64 175 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-gray-600:hover {\n --tw-text-opacity: 1;\n color: rgb(75 85 99 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-gray-700:hover {\n --tw-text-opacity: 1;\n color: rgb(55 65 81 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-gray-800:hover {\n --tw-text-opacity: 1;\n color: rgb(31 41 55 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-gray-900:hover {\n --tw-text-opacity: 1;\n color: rgb(17 24 39 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-green-500:hover {\n --tw-text-opacity: 1;\n color: rgb(34 197 94 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-green-700:hover {\n --tw-text-opacity: 1;\n color: rgb(21 128 61 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-indigo-700:hover {\n --tw-text-opacity: 1;\n color: rgb(67 56 202 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-pink-400:hover {\n --tw-text-opacity: 1;\n color: rgb(244 114 182 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-pink-500:hover {\n --tw-text-opacity: 1;\n color: rgb(236 72 153 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-pink-600:hover {\n --tw-text-opacity: 1;\n color: rgb(219 39 119 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-purple-600:hover {\n --tw-text-opacity: 1;\n color: rgb(147 51 234 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-purple-700:hover {\n --tw-text-opacity: 1;\n color: rgb(126 34 206 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-red-400:hover {\n --tw-text-opacity: 1;\n color: rgb(248 113 113 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-red-500:hover {\n --tw-text-opacity: 1;\n color: rgb(239 68 68 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-red-600:hover {\n --tw-text-opacity: 1;\n color: rgb(220 38 38 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-red-700:hover {\n --tw-text-opacity: 1;\n color: rgb(185 28 28 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-sky-500:hover {\n --tw-text-opacity: 1;\n color: rgb(14 165 233 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-slate-700:hover {\n --tw-text-opacity: 1;\n color: rgb(51 65 85 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-white:hover {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity, 1));\n}\n\n.hover\\:text-white\\/80:hover {\n color: rgb(255 255 255 / 0.8);\n}\n\n.hover\\:underline:hover {\n text-decoration-line: underline;\n}\n\n.hover\\:opacity-90:hover {\n opacity: 0.9;\n}\n\n.hover\\:shadow-lg:hover {\n --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.hover\\:shadow-md:hover {\n --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.hover\\:shadow-sm:hover {\n --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.hover\\:shadow-xl:hover {\n --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.hover\\:shadow-blue-500\\/25:hover {\n --tw-shadow-color: rgb(59 130 246 / 0.25);\n --tw-shadow: var(--tw-shadow-colored);\n}\n\n.focus\\:border-blue-500\\/50:focus {\n border-color: rgb(59 130 246 / 0.5);\n}\n\n.focus\\:outline-none:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n\n.focus\\:ring-2:focus {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n\n.focus\\:ring-blue-300:focus {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity, 1));\n}\n\n.focus\\:ring-blue-400:focus {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(96 165 250 / var(--tw-ring-opacity, 1));\n}\n\n.focus\\:ring-blue-500:focus {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1));\n}\n\n.focus\\:ring-emerald-400:focus {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(52 211 153 / var(--tw-ring-opacity, 1));\n}\n\n.focus\\:ring-rose-400:focus {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(251 113 133 / var(--tw-ring-opacity, 1));\n}\n\n.focus\\:ring-offset-2:focus {\n --tw-ring-offset-width: 2px;\n}\n\n.active\\:scale-95:active {\n --tw-scale-x: .95;\n --tw-scale-y: .95;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.disabled\\:cursor-not-allowed:disabled {\n cursor: not-allowed;\n}\n\n.disabled\\:bg-gray-300:disabled {\n --tw-bg-opacity: 1;\n background-color: rgb(209 213 219 / var(--tw-bg-opacity, 1));\n}\n\n.disabled\\:bg-gray-50:disabled {\n --tw-bg-opacity: 1;\n background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1));\n}\n\n.disabled\\:text-gray-400:disabled {\n --tw-text-opacity: 1;\n color: rgb(156 163 175 / var(--tw-text-opacity, 1));\n}\n\n.disabled\\:no-underline:disabled {\n text-decoration-line: none;\n}\n\n.disabled\\:opacity-40:disabled {\n opacity: 0.4;\n}\n\n.disabled\\:opacity-50:disabled {\n opacity: 0.5;\n}\n\n.disabled\\:opacity-60:disabled {\n opacity: 0.6;\n}\n\n.group:hover .group-hover\\:scale-105 {\n --tw-scale-x: 1.05;\n --tw-scale-y: 1.05;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.group:hover .group-hover\\:scale-110 {\n --tw-scale-x: 1.1;\n --tw-scale-y: 1.1;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.group:hover .group-hover\\:border-blue-400 {\n --tw-border-opacity: 1;\n border-color: rgb(96 165 250 / var(--tw-border-opacity, 1));\n}\n\n.group:hover .group-hover\\:bg-black\\/50 {\n background-color: rgb(0 0 0 / 0.5);\n}\n\n.group:hover .group-hover\\:text-blue-600 {\n --tw-text-opacity: 1;\n color: rgb(37 99 235 / var(--tw-text-opacity, 1));\n}\n\n.group:hover .group-hover\\:text-orange-600 {\n --tw-text-opacity: 1;\n color: rgb(234 88 12 / var(--tw-text-opacity, 1));\n}\n\n.group:hover .group-hover\\:underline {\n text-decoration-line: underline;\n}\n\n.group:hover .group-hover\\:opacity-100 {\n opacity: 1;\n}\n\n.group:hover .group-hover\\:opacity-80 {\n opacity: 0.8;\n}\n\n.has-\\[\\:checked\\]\\:border-blue-500:has(:checked) {\n --tw-border-opacity: 1;\n border-color: rgb(59 130 246 / var(--tw-border-opacity, 1));\n}\n\n.has-\\[\\:checked\\]\\:bg-blue-50:has(:checked) {\n --tw-bg-opacity: 1;\n background-color: rgb(239 246 255 / var(--tw-bg-opacity, 1));\n}\n\n@media (min-width: 640px) {\n\n .sm\\:mb-6 {\n margin-bottom: 1.5rem;\n }\n\n .sm\\:block {\n display: block;\n }\n\n .sm\\:hidden {\n display: none;\n }\n\n .sm\\:h-32 {\n height: 8rem;\n }\n\n .sm\\:w-32 {\n width: 8rem;\n }\n\n .sm\\:w-auto {\n width: auto;\n }\n\n .sm\\:flex-1 {\n flex: 1 1 0%;\n }\n\n .sm\\:grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n\n .sm\\:grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n\n .sm\\:grid-cols-4 {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n }\n\n .sm\\:flex-row {\n flex-direction: row;\n }\n\n .sm\\:items-center {\n align-items: center;\n }\n\n .sm\\:gap-3 {\n gap: 0.75rem;\n }\n\n .sm\\:gap-4 {\n gap: 1rem;\n }\n\n .sm\\:space-y-5 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1.25rem * var(--tw-space-y-reverse));\n }\n\n .sm\\:p-6 {\n padding: 1.5rem;\n }\n\n .sm\\:px-4 {\n padding-left: 1rem;\n padding-right: 1rem;\n }\n\n .sm\\:px-6 {\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n }\n\n .sm\\:py-8 {\n padding-top: 2rem;\n padding-bottom: 2rem;\n }\n\n .sm\\:pb-28 {\n padding-bottom: 7rem;\n }\n\n .sm\\:pt-24 {\n padding-top: 6rem;\n }\n\n .sm\\:text-2xl {\n font-size: 1.5rem;\n line-height: 2rem;\n }\n\n .sm\\:text-5xl {\n font-size: 3rem;\n line-height: 1;\n }\n\n .sm\\:text-lg {\n font-size: 1.125rem;\n line-height: 1.75rem;\n }\n}\n\n@media (min-width: 768px) {\n\n .md\\:flex {\n display: flex;\n }\n\n .md\\:hidden {\n display: none;\n }\n\n .md\\:w-64 {\n width: 16rem;\n }\n\n .md\\:grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n\n .md\\:grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n\n .md\\:grid-cols-4 {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n }\n\n .md\\:grid-cols-5 {\n grid-template-columns: repeat(5, minmax(0, 1fr));\n }\n\n .md\\:flex-row {\n flex-direction: row;\n }\n\n .md\\:p-14 {\n padding: 3.5rem;\n }\n\n .md\\:px-8 {\n padding-left: 2rem;\n padding-right: 2rem;\n }\n\n .md\\:text-3xl {\n font-size: 1.875rem;\n line-height: 2.25rem;\n }\n\n .md\\:text-5xl {\n font-size: 3rem;\n line-height: 1;\n }\n\n .md\\:text-6xl {\n font-size: 3.75rem;\n line-height: 1;\n }\n}\n\n@media (min-width: 1024px) {\n\n .lg\\:block {\n display: block;\n }\n\n .lg\\:w-64 {\n width: 16rem;\n }\n\n .lg\\:grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n\n .lg\\:grid-cols-4 {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n }\n\n .lg\\:grid-cols-6 {\n grid-template-columns: repeat(6, minmax(0, 1fr));\n }\n\n .lg\\:flex-row {\n flex-direction: row;\n }\n\n .lg\\:gap-8 {\n gap: 2rem;\n }\n\n .lg\\:px-8 {\n padding-left: 2rem;\n padding-right: 2rem;\n }\n}\n\n@media (min-width: 1280px) {\n\n .xl\\:grid-cols-7 {\n grid-template-columns: repeat(7, minmax(0, 1fr));\n }\n}\n\n"]}47919e121c41cd77cef51194b888ae6deb893d7dd9145409c00df0436d16be3a027c7f0da53fb56a0a97207e14a80040d3df7ad34a1841db6ef555c81b7f80fdü`)òóôõ639b2700c06a7207eebacff083d370b2f58f7273718036b59b5ea72bd44375b560a52a661a386ba4a10536c8872a39303c2294a4e6ecf9a281853bcb5774f1eaf0e5ac958be5626f661f62c299f65f4287a5c83c7c1162e9e3e2ccbee5051fc2a7d5034902af8b5fe5d8739f9a06b72850cb66b75e37011d464dffa28ecedea6ae651bb01d3e0e96f3c9106979f70d28da10e2034a18fe4afded5d4839dbf99c01244f35fa871bb15acf09553a1c022a3078af9bc49011e43008a68e1c2c5e7bc9e46644f1db7300ce8222b263d1ee8b7e666d1ea5e8615582b74a64e0a79c6cf7fb22e48f0ffeab8773b6abb6048b62d665b448fdbcb8089724708a42999462753e00c4c10e86700363963b594cdef5d1a21cce6b93705052fe17a6b1bc52fff2e71877b3cfb7a5â{ "polyfillFiles": [ "static/chunks/polyfills-42372ed130431b0a.js" ], "devFiles": [], "ampDevFiles": [], "lowPriorityFiles": [ "static/BgBeW78QIlTD_SN4AcbM3/_buildManifest.js", "static/BgBeW78QIlTD_SN4AcbM3/_ssgManifest.js" ], "rootMainFiles": [ "static/chunks/webpack-0cfe6f51555ca84e.js", "static/chunks/87c73c54-24122e7b92478d00.js", "static/chunks/18-90b700ea37b686a2.js", "static/chunks/main-app-d91fee91eeff669a.js" ], "rootMainFilesTree": {}, "pages": { "/_app": [ "static/chunks/webpack-0cfe6f51555ca84e.js", "static/chunks/framework-7b665f4436b88fde.js", "static/chunks/main-0c4264289e62b053.js", "static/chunks/pages/_app-b2d46845f85c75b7.js" ], "/_error": [ "static/chunks/webpack-0cfe6f51555ca84e.js", "static/chunks/framework-7b665f4436b88fde.js", "static/chunks/main-0c4264289e62b053.js", "static/chunks/pages/_error-2a8ad540ffed0e9c.js" ] }, "ampFirstPages": [] } åself.__BUILD_MANIFEST=function(e,r,t,_){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},__routerFilterStatic:{numItems:25,errorRate:1e-4,numBits:480,numHashes:14,bitArray:[1,1,0,e,0,r,e,r,e,e,e,r,e,e,r,r,e,e,r,e,r,r,r,r,r,e,r,e,r,r,e,e,e,e,r,e,r,e,r,r,e,e,e,e,r,e,e,e,r,r,e,r,e,r,e,e,e,r,e,e,e,r,e,r,r,r,e,e,e,r,r,e,r,e,r,r,e,e,e,e,r,e,r,e,r,e,r,e,e,r,e,r,e,e,r,r,r,e,e,e,r,r,r,e,e,e,e,e,r,e,r,r,r,e,e,e,e,r,e,e,r,r,r,r,e,e,r,e,e,r,e,e,r,r,r,r,e,e,r,r,e,e,r,e,e,e,r,r,e,e,r,e,e,e,e,e,r,r,e,e,e,r,r,r,e,e,e,e,r,e,e,e,r,e,e,e,r,e,e,r,e,e,r,r,r,r,e,r,r,e,e,r,e,r,e,r,e,e,r,r,e,e,e,r,e,r,e,e,e,r,r,r,r,r,e,r,r,e,r,e,r,r,r,e,r,e,e,r,r,r,e,e,r,r,r,e,r,e,e,e,r,e,e,e,e,r,r,r,e,r,r,r,e,e,r,e,r,r,e,e,r,r,r,e,e,r,e,r,e,e,r,r,e,e,e,e,r,e,e,r,e,r,e,r,e,r,r,e,r,e,r,e,r,e,r,r,e,e,r,e,e,r,r,r,r,e,e,r,r,e,e,e,r,e,e,e,e,r,r,r,r,e,e,r,r,r,e,r,r,e,r,r,e,r,e,r,r,e,r,r,r,r,e,e,e,e,e,r,e,e,e,e,e,e,r,e,r,e,r,e,e,r,e,r,r,e,r,r,e,e,e,e,r,r,e,e,e,r,r,r,e,r,r,r,e,r,r,e,r,r,e,e,e,r,e,r,e,e,e,r,e,r,e,e,e,r,e,e,r,e,r,r,e,e,r,e,r,r,r,e,e,r,e,e,r,r,e,e,r,r,r,e,e,r,e,r,e,e,e,r,r,r,r,e,r,e,e,r,r,e,e,r,r,e,e,r,e,r,r,r,e,r,e,e,e,r,r,r,e,r,e,e,e,e,e,e,r,e,e,e]},__routerFilterDynamic:{numItems:3,errorRate:1e-4,numBits:58,numHashes:14,bitArray:[e,e,e,e,e,e,e,r,e,r,e,r,e,e,r,e,r,e,e,r,e,e,r,e,r,e,r,r,r,e,e,e,e,r,r,r,e,e,r,e,r,e,e,r,r,e,r,r,r,r,r,r,e,e,e,e,e,r]},"/_error":["static/chunks/pages/_error-2a8ad540ffed0e9c.js"],sortedPages:["/_app","/_error"]}}(1,0,1e-4,14),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB(); ‚3{ "pages": { "/_not-found/page": [ "static/chunks/webpack-0cfe6f51555ca84e.js", "static/chunks/87c73c54-24122e7b92478d00.js", "static/chunks/18-90b700ea37b686a2.js", "static/chunks/main-app-d91fee91eeff669a.js", "static/chunks/app/_not-found/page-83964d82d44a31b8.js" ], "/not-found": [ "static/chunks/webpack-0cfe6f51555ca84e.js", "static/chunks/87c73c54-24122e7b92478d00.js", "static/chunks/18-90b700ea37b686a2.js", "static/chunks/main-app-d91fee91eeff669a.js", "static/chunks/664-6d821dc1aacb6b48.js", "static/chunks/app/not-found-cb255e4d079cb5aa.js" ], "/layout": [ "static/chunks/webpack-0cfe6f51555ca84e.js", "static/chunks/87c73c54-24122e7b92478d00.js", "static/chunks/18-90b700ea37b686a2.js", "static/chunks/main-app-d91fee91eeff669a.js", "static/css/725fe9a8c5269d55.css", "static/chunks/516-c4dec425be7496f2.js", "static/chunks/664-6d821dc1aacb6b48.js", "static/chunks/838-b5547f43f70a581a.js", "static/chunks/906-29b71d311aa8bb8b.js", "static/chunks/982-076eceab97b77f19.js", "static/chunks/app/layout-9e65e97b0065f398.js" ], "/robots.txt/route": [ "static/chunks/webpack-0cfe6f51555ca84e.js", "static/chunks/87c73c54-24122e7b92478d00.js", "static/chunks/18-90b700ea37b686a2.js", "static/chunks/main-app-d91fee91eeff669a.js", "static/chunks/app/robots.txt/route-83964d82d44a31b8.js" ], "/sitemap.xml/route": [ "static/chunks/webpack-0cfe6f51555ca84e.js", "static/chunks/87c73c54-24122e7b92478d00.js", "static/chunks/18-90b700ea37b686a2.js", "static/chunks/main-app-d91fee91eeff669a.js", "static/chunks/app/sitemap.xml/route-83964d82d44a31b8.js" ], "/(auth)/forgot-password/page": [ "static/chunks/webpack-0cfe6f51555ca84e.js", "static/chunks/87c73c54-24122e7b92478d00.js", "static/chunks/18-90b700ea37b686a2.js", "static/chunks/main-app-d91fee91eeff669a.js", "static/chunks/516-c4dec425be7496f2.js", "static/chunks/664-6d821dc1aacb6b48.js", "static/chunks/906-29b71d311aa8bb8b.js", "static/chunks/app/(auth)/forgot-password/page-fb872b20b3d0a86a.js" ], "/(auth)/login/page": [ "static/chunks/webpack-0cfe6f51555ca84e.js", "static/chunks/87c73c54-24122e7b92478d00.js", "static/chunks/18-90b700ea37b686a2.js", "static/chunks/main-app-d91fee91eeff669a.js", "static/chunks/516-c4dec425be7496f2.js", "static/chunks/664-6d821dc1aacb6b48.js", "static/chunks/906-29b71d311aa8bb8b.js", "static/chunks/app/(auth)/login/page-34f2446fcdd55f5f.js" ], "/(auth)/reset-password/page": [ "static/chunks/webpack-0cfe6f51555ca84e.js", "static/chunks/87c73c54-24122e7b92478d00.js", "static/chunks/18-90b700ea37b686a2.js", "static/chunks/main-app-d91fee91eeff669a.js", "static/chunks/516-c4dec425be7496f2.js", "static/chunks/664-6d821dc1aacb6b48.js", "static/chunks/906-29b71d311aa8bb8b.js", "static/chunks/app/(auth)/reset-password/page-bb6348c5eb9cecee.js" ], "/(auth)/register/page": [ "static/chunks/webpack-0cfe6f51555ca84e.js", "static/chunks/87c73c54-24122e7b92478d00.js", "static/chunks/18-90b700ea37b686a2.js", "static/chunks/main-app-d91fee91eeff669a.js", "static/chunks/516-c4dec425be7496f2.js", "static/chunks/664-6d821dc1aacb6b48.js", "static/chunks/906-29b71d311aa8bb8b.js", "static/chunks/app/(auth)/register/page-dd60e3a19a3edbec.js" ], "/admin/page": [ "static/chunks/webpack-0cfe6f51555ca84e.js", "static/chunks/87c73c54-24122e7b92478d00.js", "static/chunks/18-90b700ea37b686a2.js", "static/chunks/main-app-d91fee91eeff669a.js", "static/chunks/516-c4dec425be7496f2.js", "static/chunks/664-6d821dc1aacb6b48.js", "static/chunks/906-29b71d311aa8bb8b.js", "static/chunks/982-076eceab97b77f19.js", "static/chunks/app/admin/page-ac01a1b958f9e2e9.js" ], "/become-specialist/page": [ "static/chunks/webpack-0cfe6f51555ca84e.js", "static/chunks/87c73c54-24122e7b92478d00.js", "static/chunks/18-90b700ea37b686a2.js", "static/chunks/main-app-d91fee91eeff669a.js", "static/chunks/516-c4dec425be7496f2.js", "static/chunks/906-29b71d311aa8bb8b.js", "static/chunks/982-076eceab97b77f19.js", "static/chunks/app/become-specialist/page-1eafd357ccad5879.js" ], "/chat/page": [ "static/chunks/webpack-0cfe6f51555ca84e.js", "static/chunks/87c73c54-24122e7b92478d00.js", "static/chunks/18-90b700ea37b686a2.js", "static/chunks/main-app-d91fee91eeff669a.js", "static/chunks/516-c4dec425be7496f2.js", "static/chunks/664-6d821dc1aacb6b48.js", "static/chunks/838-b5547f43f70a581a.js", "static/chunks/906-29b71d311aa8bb8b.js", "static/chunks/982-076eceab97b77f19.js", "static/chunks/app/chat/page-f103e0f285591167.js" ], "/dashboard/page": [ "static/chunks/webpack-0cfe6f51555ca84e.js", "static/chunks/87c73c54-24122e7b92478d00.js", "static/chunks/18-90b700ea37b686a2.js", "static/chunks/main-app-d91fee91eeff669a.js", "static/chunks/516-c4dec425be7496f2.js", "static/chunks/664-6d821dc1aacb6b48.js", "static/chunks/906-29b71d311aa8bb8b.js", "static/chunks/982-076eceab97b77f19.js", "static/chunks/app/dashboard/page-e9ff2fcce43aca72.js" ], "/page": [ "static/chunks/webpack-0cfe6f51555ca84e.js", "static/chunks/87c73c54-24122e7b92478d00.js", "static/chunks/18-90b700ea37b686a2.js", "static/chunks/main-app-d91fee91eeff669a.js", "static/chunks/516-c4dec425be7496f2.js", "static/chunks/664-6d821dc1aacb6b48.js", "static/chunks/906-29b71d311aa8bb8b.js", "static/chunks/982-076eceab97b77f19.js", "static/chunks/app/page-5f95e9cab3a5857d.js" ], "/pricing/page": [ "static/chunks/webpack-0cfe6f51555ca84e.js", "static/chunks/87c73c54-24122e7b92478d00.js", "static/chunks/18-90b700ea37b686a2.js", "static/chunks/main-app-d91fee91eeff669a.js", "static/chunks/516-c4dec425be7496f2.js", "static/chunks/664-6d821dc1aacb6b48.js", "static/chunks/906-29b71d311aa8bb8b.js", "static/chunks/982-076eceab97b77f19.js", "static/chunks/app/pricing/page-e52c795f346a1801.js" ], "/notifications/page": [ "static/chunks/webpack-0cfe6f51555ca84e.js", "static/chunks/87c73c54-24122e7b92478d00.js", "static/chunks/18-90b700ea37b686a2.js", "static/chunks/main-app-d91fee91eeff669a.js", "static/chunks/516-c4dec425be7496f2.js", "static/chunks/906-29b71d311aa8bb8b.js", "static/chunks/982-076eceab97b77f19.js", "static/chunks/app/notifications/page-79bd21b68d4886b5.js" ], "/favorites/page": [ "static/chunks/webpack-0cfe6f51555ca84e.js", "static/chunks/87c73c54-24122e7b92478d00.js", "static/chunks/18-90b700ea37b686a2.js", "static/chunks/main-app-d91fee91eeff669a.js", "static/chunks/516-c4dec425be7496f2.js", "static/chunks/664-6d821dc1aacb6b48.js", "static/chunks/906-29b71d311aa8bb8b.js", "static/chunks/982-076eceab97b77f19.js", "static/chunks/app/favorites/page-6526a6d863a4aede.js" ], "/payment/page": [ "static/chunks/webpack-0cfe6f51555ca84e.js", "static/chunks/87c73c54-24122e7b92478d00.js", "static/chunks/18-90b700ea37b686a2.js", "static/chunks/main-app-d91fee91eeff669a.js", "static/chunks/664-6d821dc1aacb6b48.js", "static/chunks/906-29b71d311aa8bb8b.js", "static/chunks/982-076eceab97b77f19.js", "static/chunks/app/payment/page-efaefdcb983ed215.js" ], "/schedule/page": [ "static/chunks/webpack-0cfe6f51555ca84e.js", "static/chunks/87c73c54-24122e7b92478d00.js", "static/chunks/18-90b700ea37b686a2.js", "static/chunks/main-app-d91fee91eeff669a.js", "static/chunks/516-c4dec425be7496f2.js", "static/chunks/906-29b71d311aa8bb8b.js", "static/chunks/982-076eceab97b77f19.js", "static/chunks/app/schedule/page-b891105707515a8a.js" ], "/specialist-setup/page": [ "static/chunks/webpack-0cfe6f51555ca84e.js", "static/chunks/87c73c54-24122e7b92478d00.js", "static/chunks/18-90b700ea37b686a2.js", "static/chunks/main-app-d91fee91eeff669a.js", "static/chunks/516-c4dec425be7496f2.js", "static/chunks/906-29b71d311aa8bb8b.js", "static/chunks/982-076eceab97b77f19.js", "static/chunks/app/specialist-setup/page-1a08757c2b96b184.js" ], "/site/[slug]/page": [ "static/chunks/webpack-0cfe6f51555ca84e.js", "static/chunks/87c73c54-24122e7b92478d00.js", "static/chunks/18-90b700ea37b686a2.js", "static/chunks/main-app-d91fee91eeff669a.js", "static/chunks/516-c4dec425be7496f2.js", "static/chunks/906-29b71d311aa8bb8b.js", "static/chunks/982-076eceab97b77f19.js", "static/chunks/app/site/[slug]/page-2015110d43db7dcb.js" ], "/specialist-tasks/page": [ "static/chunks/webpack-0cfe6f51555ca84e.js", "static/chunks/87c73c54-24122e7b92478d00.js", "static/chunks/18-90b700ea37b686a2.js", "static/chunks/main-app-d91fee91eeff669a.js", "static/chunks/app/specialist-tasks/page-83964d82d44a31b8.js" ], "/specialists/page": [ "static/chunks/webpack-0cfe6f51555ca84e.js", "static/chunks/87c73c54-24122e7b92478d00.js", "static/chunks/18-90b700ea37b686a2.js", "static/chunks/main-app-d91fee91eeff669a.js", "static/chunks/516-c4dec425be7496f2.js", "static/chunks/664-6d821dc1aacb6b48.js", "static/chunks/906-29b71d311aa8bb8b.js", "static/chunks/982-076eceab97b77f19.js", "static/chunks/669-1a488992770e0da7.js", "static/chunks/app/specialists/page-c501dde8ba6d0062.js" ], "/tasks/[id]/page": [ "static/chunks/webpack-0cfe6f51555ca84e.js", "static/chunks/87c73c54-24122e7b92478d00.js", "static/chunks/18-90b700ea37b686a2.js", "static/chunks/main-app-d91fee91eeff669a.js", "static/chunks/516-c4dec425be7496f2.js", "static/chunks/664-6d821dc1aacb6b48.js", "static/chunks/906-29b71d311aa8bb8b.js", "static/chunks/982-076eceab97b77f19.js", "static/chunks/app/tasks/[id]/page-9f19f54c70109d69.js" ], "/tasks/[id]/offer/page": [ "static/chunks/webpack-0cfe6f51555ca84e.js", "static/chunks/87c73c54-24122e7b92478d00.js", "static/chunks/18-90b700ea37b686a2.js", "static/chunks/main-app-d91fee91eeff669a.js", "static/chunks/516-c4dec425be7496f2.js", "static/chunks/664-6d821dc1aacb6b48.js", "static/chunks/906-29b71d311aa8bb8b.js", "static/chunks/982-076eceab97b77f19.js", "static/chunks/app/tasks/[id]/offer/page-54d31f347b2a5435.js" ], "/profile/page": [ "static/chunks/webpack-0cfe6f51555ca84e.js", "static/chunks/87c73c54-24122e7b92478d00.js", "static/chunks/18-90b700ea37b686a2.js", "static/chunks/main-app-d91fee91eeff669a.js", "static/chunks/516-c4dec425be7496f2.js", "static/chunks/906-29b71d311aa8bb8b.js", "static/chunks/982-076eceab97b77f19.js", "static/chunks/app/profile/page-51854309b47d685a.js" ], "/tasks/page": [ "static/chunks/webpack-0cfe6f51555ca84e.js", "static/chunks/87c73c54-24122e7b92478d00.js", "static/chunks/18-90b700ea37b686a2.js", "static/chunks/main-app-d91fee91eeff669a.js", "static/chunks/516-c4dec425be7496f2.js", "static/chunks/664-6d821dc1aacb6b48.js", "static/chunks/906-29b71d311aa8bb8b.js", "static/chunks/669-1a488992770e0da7.js", "static/chunks/app/tasks/page-f32888ca89b4e606.js" ], "/tasks/new/page": [ "static/chunks/webpack-0cfe6f51555ca84e.js", "static/chunks/87c73c54-24122e7b92478d00.js", "static/chunks/18-90b700ea37b686a2.js", "static/chunks/main-app-d91fee91eeff669a.js", "static/chunks/516-c4dec425be7496f2.js", "static/chunks/664-6d821dc1aacb6b48.js", "static/chunks/906-29b71d311aa8bb8b.js", "static/chunks/982-076eceab97b77f19.js", "static/chunks/669-1a488992770e0da7.js", "static/chunks/app/tasks/new/page-fa308afbf6c6b7c8.js" ], "/users/[id]/page": [ "static/chunks/webpack-0cfe6f51555ca84e.js", "static/chunks/87c73c54-24122e7b92478d00.js", "static/chunks/18-90b700ea37b686a2.js", "static/chunks/main-app-d91fee91eeff669a.js", "static/chunks/516-c4dec425be7496f2.js", "static/chunks/664-6d821dc1aacb6b48.js", "static/chunks/906-29b71d311aa8bb8b.js", "static/chunks/982-076eceab97b77f19.js", "static/chunks/app/users/[id]/page-8f073295a27b44eb.js" ], "/maintenance/page": [ "static/chunks/webpack-0cfe6f51555ca84e.js", "static/chunks/87c73c54-24122e7b92478d00.js", "static/chunks/18-90b700ea37b686a2.js", "static/chunks/main-app-d91fee91eeff669a.js", "static/chunks/app/maintenance/page-83964d82d44a31b8.js" ] } }