From 43fc4db00e4cc39aca5ae87e182808b94a11219e Mon Sep 17 00:00:00 2001 From: Maurice Date: Wed, 1 Apr 2026 19:40:19 +0200 Subject: [PATCH] fix: convert stored HTTP photo URLs to base64 for map markers, add exchangerate-api to CSP --- client/src/components/Map/MapView.tsx | 15 +- client/src/services/photoService.ts | 2 +- .../{index-BqXsA94s.js => index-CnUdq-Rp.js} | 364 +++++++++--------- server/public/index.html | 2 +- server/public/sw.js | 2 +- server/src/index.ts | 2 +- 6 files changed, 198 insertions(+), 189 deletions(-) rename server/public/assets/{index-BqXsA94s.js => index-CnUdq-Rp.js} (91%) diff --git a/client/src/components/Map/MapView.tsx b/client/src/components/Map/MapView.tsx index 26b1117..166aa94 100644 --- a/client/src/components/Map/MapView.tsx +++ b/client/src/components/Map/MapView.tsx @@ -264,7 +264,7 @@ function RouteLabel({ midpoint, walkingText, drivingText }: RouteLabelProps) { } // Module-level photo cache shared with PlaceAvatar -import { getCached, isLoading, fetchPhoto, onPhotoLoaded, onThumbReady, getAllThumbs } from '../../services/photoService' +import { getCached, isLoading, fetchPhoto, onPhotoLoaded, onThumbReady, getAllThumbs, urlToBase64 } from '../../services/photoService' // Live location tracker — blue dot with pulse animation (like Apple/Google Maps) function LocationTracker() { @@ -400,7 +400,8 @@ export const MapView = memo(function MapView({ } for (const place of places) { - if (place.image_url) continue + // Already have a base64 data URL — nothing to do + if (place.image_url && place.image_url.startsWith('data:')) continue const cacheKey = place.google_place_id || place.osm_id || `${place.lat},${place.lng}` if (!cacheKey) continue @@ -413,7 +414,15 @@ export const MapView = memo(function MapView({ // Subscribe for when thumb becomes available cleanups.push(onThumbReady(cacheKey, thumb => setThumb(cacheKey, thumb))) - // Start fetch if not yet started + // Place has an HTTP image URL stored in DB — convert to base64 directly + if (place.image_url && !isLoading(cacheKey)) { + urlToBase64(place.image_url).then(thumb => { + if (thumb) setThumb(cacheKey, thumb) + }) + continue + } + + // No image URL — fetch from API if (!cached && !isLoading(cacheKey)) { const photoId = place.google_place_id || place.osm_id if (photoId || (place.lat && place.lng)) { diff --git a/client/src/services/photoService.ts b/client/src/services/photoService.ts index 62fbb8e..d5fc368 100644 --- a/client/src/services/photoService.ts +++ b/client/src/services/photoService.ts @@ -44,7 +44,7 @@ export function isLoading(key: string): boolean { } // Convert image URL to base64 via canvas (CORS required — Wikimedia supports it) -function urlToBase64(url: string, size: number = 48): Promise { +export function urlToBase64(url: string, size: number = 48): Promise { return new Promise(resolve => { const img = new Image() img.crossOrigin = 'anonymous' diff --git a/server/public/assets/index-BqXsA94s.js b/server/public/assets/index-CnUdq-Rp.js similarity index 91% rename from server/public/assets/index-BqXsA94s.js rename to server/public/assets/index-CnUdq-Rp.js index b65b4f2..9946a30 100644 --- a/server/public/assets/index-BqXsA94s.js +++ b/server/public/assets/index-CnUdq-Rp.js @@ -1,4 +1,4 @@ -function j_(e,t){for(var a=0;an[r]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))n(r);new MutationObserver(r=>{for(const o of r)if(o.type==="childList")for(const s of o.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&n(s)}).observe(document,{childList:!0,subtree:!0});function a(r){const o={};return r.integrity&&(o.integrity=r.integrity),r.referrerPolicy&&(o.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?o.credentials="include":r.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function n(r){if(r.ep)return;r.ep=!0;const o=a(r);fetch(r.href,o)}})();var Ci=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function zs(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function gm(e){if(e.__esModule)return e;var t=e.default;if(typeof t=="function"){var a=function n(){return this instanceof n?Reflect.construct(t,arguments,this.constructor):t.apply(this,arguments)};a.prototype=t.prototype}else a={};return Object.defineProperty(a,"__esModule",{value:!0}),Object.keys(e).forEach(function(n){var r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(a,n,r.get?r:{enumerable:!0,get:function(){return e[n]}})}),a}var C_={exports:{}},hm={},z_={exports:{}},It={};/** +function C_(e,t){for(var a=0;an[r]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))n(r);new MutationObserver(r=>{for(const o of r)if(o.type==="childList")for(const s of o.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&n(s)}).observe(document,{childList:!0,subtree:!0});function a(r){const o={};return r.integrity&&(o.integrity=r.integrity),r.referrerPolicy&&(o.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?o.credentials="include":r.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function n(r){if(r.ep)return;r.ep=!0;const o=a(r);fetch(r.href,o)}})();var Ci=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function zs(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function gm(e){if(e.__esModule)return e;var t=e.default;if(typeof t=="function"){var a=function n(){return this instanceof n?Reflect.construct(t,arguments,this.constructor):t.apply(this,arguments)};a.prototype=t.prototype}else a={};return Object.defineProperty(a,"__esModule",{value:!0}),Object.keys(e).forEach(function(n){var r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(a,n,r.get?r:{enumerable:!0,get:function(){return e[n]}})}),a}var z_={exports:{}},hm={},T_={exports:{}},It={};/** * @license React * react.production.min.js * @@ -6,7 +6,7 @@ function j_(e,t){for(var a=0;a>>1,K=$[ce];if(0>>1;cer(ee,T))per(H,ee)?($[ce]=H,$[pe]=T,ce=pe):($[ce]=ee,$[I]=T,ce=I);else if(per(H,T))$[ce]=H,$[pe]=T,ce=pe;else break e}}return U}function r($,U){var T=$.sortIndex-U.sortIndex;return T!==0?T:$.id-U.id}if(typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var s=Date,d=s.now();e.unstable_now=function(){return s.now()-d}}var c=[],p=[],m=1,g=null,f=3,v=!1,k=!1,x=!1,S=typeof setTimeout=="function"?setTimeout:null,b=typeof clearTimeout=="function"?clearTimeout:null,w=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function j($){for(var U=a(p);U!==null;){if(U.callback===null)n(p);else if(U.startTime<=$)n(p),U.sortIndex=U.expirationTime,t(c,U);else break;U=a(p)}}function P($){if(x=!1,j($),!k)if(a(c)!==null)k=!0,me(M);else{var U=a(p);U!==null&&O(P,U.startTime-$)}}function M($,U){k=!1,x&&(x=!1,b(F),F=-1),v=!0;var T=f;try{for(j(U),g=a(c);g!==null&&(!(g.expirationTime>U)||$&&!ae());){var ce=g.callback;if(typeof ce=="function"){g.callback=null,f=g.priorityLevel;var K=ce(g.expirationTime<=U);U=e.unstable_now(),typeof K=="function"?g.callback=K:g===a(c)&&n(c),j(U)}else n(c);g=a(c)}if(g!==null)var E=!0;else{var I=a(p);I!==null&&O(P,I.startTime-U),E=!1}return E}finally{g=null,f=T,v=!1}}var N=!1,D=null,F=-1,R=5,A=-1;function ae(){return!(e.unstable_now()-A$||125<$?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):R=0<$?Math.floor(1e3/$):5},e.unstable_getCurrentPriorityLevel=function(){return f},e.unstable_getFirstCallbackNode=function(){return a(c)},e.unstable_next=function($){switch(f){case 1:case 2:case 3:var U=3;break;default:U=f}var T=f;f=U;try{return $()}finally{f=T}},e.unstable_pauseExecution=function(){},e.unstable_requestPaint=function(){},e.unstable_runWithPriority=function($,U){switch($){case 1:case 2:case 3:case 4:case 5:break;default:$=3}var T=f;f=$;try{return U()}finally{f=T}},e.unstable_scheduleCallback=function($,U,T){var ce=e.unstable_now();switch(typeof T=="object"&&T!==null?(T=T.delay,T=typeof T=="number"&&0ce?($.sortIndex=T,t(p,$),a(c)===null&&$===a(p)&&(x?(b(F),F=-1):x=!0,O(P,T-ce))):($.sortIndex=K,t(c,$),k||v||(k=!0,me(M))),$},e.unstable_shouldYield=ae,e.unstable_wrapCallback=function($){var U=f;return function(){var T=f;f=U;try{return $.apply(this,arguments)}finally{f=T}}}})(O_);F_.exports=O_;var YP=F_.exports;/** + */(function(e){function t($,U){var T=$.length;$.push(U);e:for(;0>>1,q=$[ce];if(0>>1;cer(ee,T))per(H,ee)?($[ce]=H,$[pe]=T,ce=pe):($[ce]=ee,$[I]=T,ce=I);else if(per(H,T))$[ce]=H,$[pe]=T,ce=pe;else break e}}return U}function r($,U){var T=$.sortIndex-U.sortIndex;return T!==0?T:$.id-U.id}if(typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var s=Date,d=s.now();e.unstable_now=function(){return s.now()-d}}var c=[],p=[],m=1,g=null,f=3,v=!1,k=!1,x=!1,S=typeof setTimeout=="function"?setTimeout:null,b=typeof clearTimeout=="function"?clearTimeout:null,w=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function j($){for(var U=a(p);U!==null;){if(U.callback===null)n(p);else if(U.startTime<=$)n(p),U.sortIndex=U.expirationTime,t(c,U);else break;U=a(p)}}function P($){if(x=!1,j($),!k)if(a(c)!==null)k=!0,me(M);else{var U=a(p);U!==null&&O(P,U.startTime-$)}}function M($,U){k=!1,x&&(x=!1,b(F),F=-1),v=!0;var T=f;try{for(j(U),g=a(c);g!==null&&(!(g.expirationTime>U)||$&&!ae());){var ce=g.callback;if(typeof ce=="function"){g.callback=null,f=g.priorityLevel;var q=ce(g.expirationTime<=U);U=e.unstable_now(),typeof q=="function"?g.callback=q:g===a(c)&&n(c),j(U)}else n(c);g=a(c)}if(g!==null)var A=!0;else{var I=a(p);I!==null&&O(P,I.startTime-U),A=!1}return A}finally{g=null,f=T,v=!1}}var N=!1,D=null,F=-1,R=5,E=-1;function ae(){return!(e.unstable_now()-E$||125<$?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):R=0<$?Math.floor(1e3/$):5},e.unstable_getCurrentPriorityLevel=function(){return f},e.unstable_getFirstCallbackNode=function(){return a(c)},e.unstable_next=function($){switch(f){case 1:case 2:case 3:var U=3;break;default:U=f}var T=f;f=U;try{return $()}finally{f=T}},e.unstable_pauseExecution=function(){},e.unstable_requestPaint=function(){},e.unstable_runWithPriority=function($,U){switch($){case 1:case 2:case 3:case 4:case 5:break;default:$=3}var T=f;f=$;try{return U()}finally{f=T}},e.unstable_scheduleCallback=function($,U,T){var ce=e.unstable_now();switch(typeof T=="object"&&T!==null?(T=T.delay,T=typeof T=="number"&&0ce?($.sortIndex=T,t(p,$),a(c)===null&&$===a(p)&&(x?(b(F),F=-1):x=!0,O(P,T-ce))):($.sortIndex=q,t(c,$),k||v||(k=!0,me(M))),$},e.unstable_shouldYield=ae,e.unstable_wrapCallback=function($){var U=f;return function(){var T=f;f=U;try{return $.apply(this,arguments)}finally{f=T}}}})(B_);O_.exports=B_;var XP=O_.exports;/** * @license React * react-dom.production.min.js * @@ -30,14 +30,14 @@ function j_(e,t){for(var a=0;a"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Vh=Object.prototype.hasOwnProperty,JP=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Wx={},Ux={};function QP(e){return Vh.call(Ux,e)?!0:Vh.call(Wx,e)?!1:JP.test(e)?Ux[e]=!0:(Wx[e]=!0,!1)}function eE(e,t,a,n){if(a!==null&&a.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return n?!1:a!==null?!a.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function tE(e,t,a,n){if(t===null||typeof t>"u"||eE(e,t,a,n))return!0;if(n)return!1;if(a!==null)switch(a.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function Fn(e,t,a,n,r,o,s){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=n,this.attributeNamespace=r,this.mustUseProperty=a,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=s}var pn={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){pn[e]=new Fn(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];pn[t]=new Fn(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){pn[e]=new Fn(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){pn[e]=new Fn(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){pn[e]=new Fn(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){pn[e]=new Fn(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){pn[e]=new Fn(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){pn[e]=new Fn(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){pn[e]=new Fn(e,5,!1,e.toLowerCase(),null,!1,!1)});var $v=/[\-:]([a-z])/g;function Vv(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace($v,Vv);pn[t]=new Fn(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace($v,Vv);pn[t]=new Fn(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace($v,Vv);pn[t]=new Fn(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){pn[e]=new Fn(e,1,!1,e.toLowerCase(),null,!1,!1)});pn.xlinkHref=new Fn("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){pn[e]=new Fn(e,1,!1,e.toLowerCase(),null,!0,!0)});function Kv(e,t,a,n){var r=pn.hasOwnProperty(t)?pn[t]:null;(r!==null?r.type!==0:n||!(2"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Vh=Object.prototype.hasOwnProperty,QP=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Ux={},$x={};function eE(e){return Vh.call($x,e)?!0:Vh.call(Ux,e)?!1:QP.test(e)?$x[e]=!0:(Ux[e]=!0,!1)}function tE(e,t,a,n){if(a!==null&&a.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return n?!1:a!==null?!a.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function aE(e,t,a,n){if(t===null||typeof t>"u"||tE(e,t,a,n))return!0;if(n)return!1;if(a!==null)switch(a.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function Fn(e,t,a,n,r,o,s){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=n,this.attributeNamespace=r,this.mustUseProperty=a,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=s}var pn={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){pn[e]=new Fn(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];pn[t]=new Fn(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){pn[e]=new Fn(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){pn[e]=new Fn(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){pn[e]=new Fn(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){pn[e]=new Fn(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){pn[e]=new Fn(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){pn[e]=new Fn(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){pn[e]=new Fn(e,5,!1,e.toLowerCase(),null,!1,!1)});var Vv=/[\-:]([a-z])/g;function Kv(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(Vv,Kv);pn[t]=new Fn(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(Vv,Kv);pn[t]=new Fn(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(Vv,Kv);pn[t]=new Fn(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){pn[e]=new Fn(e,1,!1,e.toLowerCase(),null,!1,!1)});pn.xlinkHref=new Fn("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){pn[e]=new Fn(e,1,!1,e.toLowerCase(),null,!0,!0)});function qv(e,t,a,n){var r=pn.hasOwnProperty(t)?pn[t]:null;(r!==null?r.type!==0:n||!(2d||r[s]!==o[d]){var c=` -`+r[s].replace(" at new "," at ");return e.displayName&&c.includes("")&&(c=c.replace("",e.displayName)),c}while(1<=s&&0<=d);break}}}finally{Ag=!1,Error.prepareStackTrace=a}return(e=e?e.displayName||e.name:"")?wd(e):""}function aE(e){switch(e.tag){case 5:return wd(e.type);case 16:return wd("Lazy");case 13:return wd("Suspense");case 19:return wd("SuspenseList");case 0:case 2:case 15:return e=Ng(e.type,!1),e;case 11:return e=Ng(e.type.render,!1),e;case 1:return e=Ng(e.type,!0),e;default:return""}}function Zh(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Ys:return"Fragment";case Zs:return"Portal";case Kh:return"Profiler";case qv:return"StrictMode";case qh:return"Suspense";case Gh:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case W_:return(e.displayName||"Context")+".Consumer";case H_:return(e._context.displayName||"Context")+".Provider";case Gv:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Zv:return t=e.displayName||null,t!==null?t:Zh(e.type)||"Memo";case io:t=e._payload,e=e._init;try{return Zh(e(t))}catch{}}return null}function nE(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Zh(t);case 8:return t===qv?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function To(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function $_(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function iE(e){var t=$_(e)?"checked":"value",a=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),n=""+e[t];if(!e.hasOwnProperty(t)&&typeof a<"u"&&typeof a.get=="function"&&typeof a.set=="function"){var r=a.get,o=a.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return r.call(this)},set:function(s){n=""+s,o.call(this,s)}}),Object.defineProperty(e,t,{enumerable:a.enumerable}),{getValue:function(){return n},setValue:function(s){n=""+s},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function iu(e){e._valueTracker||(e._valueTracker=iE(e))}function V_(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var a=t.getValue(),n="";return e&&(n=$_(e)?e.checked?"true":"false":e.value),e=n,e!==a?(t.setValue(e),!0):!1}function vp(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function Yh(e,t){var a=t.checked;return Ca({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:a??e._wrapperState.initialChecked})}function Vx(e,t){var a=t.defaultValue==null?"":t.defaultValue,n=t.checked!=null?t.checked:t.defaultChecked;a=To(t.value!=null?t.value:a),e._wrapperState={initialChecked:n,initialValue:a,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function K_(e,t){t=t.checked,t!=null&&Kv(e,"checked",t,!1)}function Xh(e,t){K_(e,t);var a=To(t.value),n=t.type;if(a!=null)n==="number"?(a===0&&e.value===""||e.value!=a)&&(e.value=""+a):e.value!==""+a&&(e.value=""+a);else if(n==="submit"||n==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?Jh(e,t.type,a):t.hasOwnProperty("defaultValue")&&Jh(e,t.type,To(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function Kx(e,t,a){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var n=t.type;if(!(n!=="submit"&&n!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,a||t===e.value||(e.value=t),e.defaultValue=t}a=e.name,a!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,a!==""&&(e.name=a)}function Jh(e,t,a){(t!=="number"||vp(e.ownerDocument)!==e)&&(a==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+a&&(e.defaultValue=""+a))}var _d=Array.isArray;function ml(e,t,a,n){if(e=e.options,t){t={};for(var r=0;r"+t.valueOf().toString()+"",t=ru.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function qd(e,t){if(t){var a=e.firstChild;if(a&&a===e.lastChild&&a.nodeType===3){a.nodeValue=t;return}}e.textContent=t}var Ed={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},rE=["Webkit","ms","Moz","O"];Object.keys(Ed).forEach(function(e){rE.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Ed[t]=Ed[e]})});function Y_(e,t,a){return t==null||typeof t=="boolean"||t===""?"":a||typeof t!="number"||t===0||Ed.hasOwnProperty(e)&&Ed[e]?(""+t).trim():t+"px"}function X_(e,t){e=e.style;for(var a in t)if(t.hasOwnProperty(a)){var n=a.indexOf("--")===0,r=Y_(a,t[a],n);a==="float"&&(a="cssFloat"),n?e.setProperty(a,r):e[a]=r}}var oE=Ca({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function tf(e,t){if(t){if(oE[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(We(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(We(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(We(61))}if(t.style!=null&&typeof t.style!="object")throw Error(We(62))}}function af(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var nf=null;function Yv(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var rf=null,gl=null,hl=null;function Zx(e){if(e=jc(e)){if(typeof rf!="function")throw Error(We(280));var t=e.stateNode;t&&(t=xm(t),rf(e.stateNode,e.type,t))}}function J_(e){gl?hl?hl.push(e):hl=[e]:gl=e}function Q_(){if(gl){var e=gl,t=hl;if(hl=gl=null,Zx(e),t)for(e=0;e>>=0,e===0?32:31-(vE(e)/yE|0)|0}var ou=64,su=4194304;function Sd(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function kp(e,t){var a=e.pendingLanes;if(a===0)return 0;var n=0,r=e.suspendedLanes,o=e.pingedLanes,s=a&268435455;if(s!==0){var d=s&~r;d!==0?n=Sd(d):(o&=s,o!==0&&(n=Sd(o)))}else s=a&~r,s!==0?n=Sd(s):o!==0&&(n=Sd(o));if(n===0)return 0;if(t!==0&&t!==n&&!(t&r)&&(r=n&-n,o=t&-t,r>=o||r===16&&(o&4194240)!==0))return t;if(n&4&&(n|=a&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=n;0a;a++)t.push(e);return t}function _c(e,t,a){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-Oi(t),e[t]=a}function wE(e,t){var a=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var n=e.eventTimes;for(e=e.expirationTimes;0=Nd),ik=" ",rk=!1;function b2(e,t){switch(e){case"keyup":return YE.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function x2(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Xs=!1;function JE(e,t){switch(e){case"compositionend":return x2(t);case"keypress":return t.which!==32?null:(rk=!0,ik);case"textInput":return e=t.data,e===ik&&rk?null:e;default:return null}}function QE(e,t){if(Xs)return e==="compositionend"||!iy&&b2(e,t)?(e=v2(),Wu=ty=uo=null,Xs=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:a,offset:t-e};e=n}e:{for(;a;){if(a.nextSibling){a=a.nextSibling;break e}a=a.parentNode}a=void 0}a=dk(a)}}function S2(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?S2(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function j2(){for(var e=window,t=vp();t instanceof e.HTMLIFrameElement;){try{var a=typeof t.contentWindow.location.href=="string"}catch{a=!1}if(a)e=t.contentWindow;else break;t=vp(e.document)}return t}function ry(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function lA(e){var t=j2(),a=e.focusedElem,n=e.selectionRange;if(t!==a&&a&&a.ownerDocument&&S2(a.ownerDocument.documentElement,a)){if(n!==null&&ry(a)){if(t=n.start,e=n.end,e===void 0&&(e=t),"selectionStart"in a)a.selectionStart=t,a.selectionEnd=Math.min(e,a.value.length);else if(e=(t=a.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var r=a.textContent.length,o=Math.min(n.start,r);n=n.end===void 0?o:Math.min(n.end,r),!e.extend&&o>n&&(r=n,n=o,o=r),r=ck(a,o);var s=ck(a,n);r&&s&&(e.rangeCount!==1||e.anchorNode!==r.node||e.anchorOffset!==r.offset||e.focusNode!==s.node||e.focusOffset!==s.offset)&&(t=t.createRange(),t.setStart(r.node,r.offset),e.removeAllRanges(),o>n?(e.addRange(t),e.extend(s.node,s.offset)):(t.setEnd(s.node,s.offset),e.addRange(t)))}}for(t=[],e=a;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof a.focus=="function"&&a.focus(),a=0;a=document.documentMode,Js=null,uf=null,Md=null,pf=!1;function uk(e,t,a){var n=a.window===a?a.document:a.nodeType===9?a:a.ownerDocument;pf||Js==null||Js!==vp(n)||(n=Js,"selectionStart"in n&&ry(n)?n={start:n.selectionStart,end:n.selectionEnd}:(n=(n.ownerDocument&&n.ownerDocument.defaultView||window).getSelection(),n={anchorNode:n.anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset}),Md&&Qd(Md,n)||(Md=n,n=Sp(uf,"onSelect"),0tl||(e.current=yf[tl],yf[tl]=null,tl--)}function ga(e,t){tl++,yf[tl]=e.current,e.current=t}var Po={},Cn=Ro(Po),Yn=Ro(!1),fs=Po;function _l(e,t){var a=e.type.contextTypes;if(!a)return Po;var n=e.stateNode;if(n&&n.__reactInternalMemoizedUnmaskedChildContext===t)return n.__reactInternalMemoizedMaskedChildContext;var r={},o;for(o in a)r[o]=t[o];return n&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=r),r}function Xn(e){return e=e.childContextTypes,e!=null}function Cp(){ya(Yn),ya(Cn)}function yk(e,t,a){if(Cn.current!==Po)throw Error(We(168));ga(Cn,t),ga(Yn,a)}function M2(e,t,a){var n=e.stateNode;if(t=t.childContextTypes,typeof n.getChildContext!="function")return a;n=n.getChildContext();for(var r in n)if(!(r in t))throw Error(We(108,nE(e)||"Unknown",r));return Ca({},a,n)}function zp(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Po,fs=Cn.current,ga(Cn,e),ga(Yn,Yn.current),!0}function bk(e,t,a){var n=e.stateNode;if(!n)throw Error(We(169));a?(e=M2(e,t,fs),n.__reactInternalMemoizedMergedChildContext=e,ya(Yn),ya(Cn),ga(Cn,e)):ya(Yn),ga(Yn,a)}var jr=null,km=!1,Kg=!1;function R2(e){jr===null?jr=[e]:jr.push(e)}function xA(e){km=!0,R2(e)}function Io(){if(!Kg&&jr!==null){Kg=!0;var e=0,t=Zt;try{var a=jr;for(Zt=1;e>=s,r-=s,zr=1<<32-Oi(t)+r|a<F?(R=D,D=null):R=D.sibling;var A=f(b,D,j[F],P);if(A===null){D===null&&(D=R);break}e&&D&&A.alternate===null&&t(b,D),w=o(A,w,F),N===null?M=A:N.sibling=A,N=A,D=R}if(F===j.length)return a(b,D),xa&&Go(b,F),M;if(D===null){for(;FF?(R=D,D=null):R=D.sibling;var ae=f(b,D,A.value,P);if(ae===null){D===null&&(D=R);break}e&&D&&ae.alternate===null&&t(b,D),w=o(ae,w,F),N===null?M=ae:N.sibling=ae,N=ae,D=R}if(A.done)return a(b,D),xa&&Go(b,F),M;if(D===null){for(;!A.done;F++,A=j.next())A=g(b,A.value,P),A!==null&&(w=o(A,w,F),N===null?M=A:N.sibling=A,N=A);return xa&&Go(b,F),M}for(D=n(b,D);!A.done;F++,A=j.next())A=v(D,b,F,A.value,P),A!==null&&(e&&A.alternate!==null&&D.delete(A.key===null?F:A.key),w=o(A,w,F),N===null?M=A:N.sibling=A,N=A);return e&&D.forEach(function(B){return t(b,B)}),xa&&Go(b,F),M}function S(b,w,j,P){if(typeof j=="object"&&j!==null&&j.type===Ys&&j.key===null&&(j=j.props.children),typeof j=="object"&&j!==null){switch(j.$$typeof){case nu:e:{for(var M=j.key,N=w;N!==null;){if(N.key===M){if(M=j.type,M===Ys){if(N.tag===7){a(b,N.sibling),w=r(N,j.props.children),w.return=b,b=w;break e}}else if(N.elementType===M||typeof M=="object"&&M!==null&&M.$$typeof===io&&wk(M)===N.type){a(b,N.sibling),w=r(N,j.props),w.ref=cd(b,N,j),w.return=b,b=w;break e}a(b,N);break}else t(b,N);N=N.sibling}j.type===Ys?(w=us(j.props.children,b.mode,P,j.key),w.return=b,b=w):(P=Yu(j.type,j.key,j.props,null,b.mode,P),P.ref=cd(b,w,j),P.return=b,b=P)}return s(b);case Zs:e:{for(N=j.key;w!==null;){if(w.key===N)if(w.tag===4&&w.stateNode.containerInfo===j.containerInfo&&w.stateNode.implementation===j.implementation){a(b,w.sibling),w=r(w,j.children||[]),w.return=b,b=w;break e}else{a(b,w);break}else t(b,w);w=w.sibling}w=eh(j,b.mode,P),w.return=b,b=w}return s(b);case io:return N=j._init,S(b,w,N(j._payload),P)}if(_d(j))return k(b,w,j,P);if(rd(j))return x(b,w,j,P);gu(b,j)}return typeof j=="string"&&j!==""||typeof j=="number"?(j=""+j,w!==null&&w.tag===6?(a(b,w.sibling),w=r(w,j),w.return=b,b=w):(a(b,w),w=Qg(j,b.mode,P),w.return=b,b=w),s(b)):a(b,w)}return S}var jl=O2(!0),B2=O2(!1),Ep=Ro(null),Ap=null,il=null,dy=null;function cy(){dy=il=Ap=null}function uy(e){var t=Ep.current;ya(Ep),e._currentValue=t}function kf(e,t,a){for(;e!==null;){var n=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,n!==null&&(n.childLanes|=t)):n!==null&&(n.childLanes&t)!==t&&(n.childLanes|=t),e===a)break;e=e.return}}function vl(e,t){Ap=e,dy=il=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(Zn=!0),e.firstContext=null)}function zi(e){var t=e._currentValue;if(dy!==e)if(e={context:e,memoizedValue:t,next:null},il===null){if(Ap===null)throw Error(We(308));il=e,Ap.dependencies={lanes:0,firstContext:e}}else il=il.next=e;return t}var is=null;function py(e){is===null?is=[e]:is.push(e)}function H2(e,t,a,n){var r=t.interleaved;return r===null?(a.next=a,py(t)):(a.next=r.next,r.next=a),t.interleaved=a,Lr(e,n)}function Lr(e,t){e.lanes|=t;var a=e.alternate;for(a!==null&&(a.lanes|=t),a=e,e=e.return;e!==null;)e.childLanes|=t,a=e.alternate,a!==null&&(a.childLanes|=t),a=e,e=e.return;return a.tag===3?a.stateNode:null}var ro=!1;function my(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function W2(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Ar(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function wo(e,t,a){var n=e.updateQueue;if(n===null)return null;if(n=n.shared,Kt&2){var r=n.pending;return r===null?t.next=t:(t.next=r.next,r.next=t),n.pending=t,Lr(e,a)}return r=n.interleaved,r===null?(t.next=t,py(n)):(t.next=r.next,r.next=t),n.interleaved=t,Lr(e,a)}function $u(e,t,a){if(t=t.updateQueue,t!==null&&(t=t.shared,(a&4194240)!==0)){var n=t.lanes;n&=e.pendingLanes,a|=n,t.lanes=a,Jv(e,a)}}function _k(e,t){var a=e.updateQueue,n=e.alternate;if(n!==null&&(n=n.updateQueue,a===n)){var r=null,o=null;if(a=a.firstBaseUpdate,a!==null){do{var s={eventTime:a.eventTime,lane:a.lane,tag:a.tag,payload:a.payload,callback:a.callback,next:null};o===null?r=o=s:o=o.next=s,a=a.next}while(a!==null);o===null?r=o=t:o=o.next=t}else r=o=t;a={baseState:n.baseState,firstBaseUpdate:r,lastBaseUpdate:o,shared:n.shared,effects:n.effects},e.updateQueue=a;return}e=a.lastBaseUpdate,e===null?a.firstBaseUpdate=t:e.next=t,a.lastBaseUpdate=t}function Np(e,t,a,n){var r=e.updateQueue;ro=!1;var o=r.firstBaseUpdate,s=r.lastBaseUpdate,d=r.shared.pending;if(d!==null){r.shared.pending=null;var c=d,p=c.next;c.next=null,s===null?o=p:s.next=p,s=c;var m=e.alternate;m!==null&&(m=m.updateQueue,d=m.lastBaseUpdate,d!==s&&(d===null?m.firstBaseUpdate=p:d.next=p,m.lastBaseUpdate=c))}if(o!==null){var g=r.baseState;s=0,m=p=c=null,d=o;do{var f=d.lane,v=d.eventTime;if((n&f)===f){m!==null&&(m=m.next={eventTime:v,lane:0,tag:d.tag,payload:d.payload,callback:d.callback,next:null});e:{var k=e,x=d;switch(f=t,v=a,x.tag){case 1:if(k=x.payload,typeof k=="function"){g=k.call(v,g,f);break e}g=k;break e;case 3:k.flags=k.flags&-65537|128;case 0:if(k=x.payload,f=typeof k=="function"?k.call(v,g,f):k,f==null)break e;g=Ca({},g,f);break e;case 2:ro=!0}}d.callback!==null&&d.lane!==0&&(e.flags|=64,f=r.effects,f===null?r.effects=[d]:f.push(d))}else v={eventTime:v,lane:f,tag:d.tag,payload:d.payload,callback:d.callback,next:null},m===null?(p=m=v,c=g):m=m.next=v,s|=f;if(d=d.next,d===null){if(d=r.shared.pending,d===null)break;f=d,d=f.next,f.next=null,r.lastBaseUpdate=f,r.shared.pending=null}}while(!0);if(m===null&&(c=g),r.baseState=c,r.firstBaseUpdate=p,r.lastBaseUpdate=m,t=r.shared.interleaved,t!==null){r=t;do s|=r.lane,r=r.next;while(r!==t)}else o===null&&(r.shared.lanes=0);bs|=s,e.lanes=s,e.memoizedState=g}}function Sk(e,t,a){if(e=t.effects,t.effects=null,e!==null)for(t=0;ta?a:4,e(!0);var n=Gg.transition;Gg.transition={};try{e(!1),t()}finally{Zt=a,Gg.transition=n}}function rS(){return Ti().memoizedState}function SA(e,t,a){var n=So(e);if(a={lane:n,action:a,hasEagerState:!1,eagerState:null,next:null},oS(e))sS(t,a);else if(a=H2(e,t,a,n),a!==null){var r=Rn();Bi(a,e,n,r),lS(a,t,n)}}function jA(e,t,a){var n=So(e),r={lane:n,action:a,hasEagerState:!1,eagerState:null,next:null};if(oS(e))sS(t,r);else{var o=e.alternate;if(e.lanes===0&&(o===null||o.lanes===0)&&(o=t.lastRenderedReducer,o!==null))try{var s=t.lastRenderedState,d=o(s,a);if(r.hasEagerState=!0,r.eagerState=d,Ui(d,s)){var c=t.interleaved;c===null?(r.next=r,py(t)):(r.next=c.next,c.next=r),t.interleaved=r;return}}catch{}finally{}a=H2(e,t,r,n),a!==null&&(r=Rn(),Bi(a,e,n,r),lS(a,t,n))}}function oS(e){var t=e.alternate;return e===ja||t!==null&&t===ja}function sS(e,t){Rd=Mp=!0;var a=e.pending;a===null?t.next=t:(t.next=a.next,a.next=t),e.pending=t}function lS(e,t,a){if(a&4194240){var n=t.lanes;n&=e.pendingLanes,a|=n,t.lanes=a,Jv(e,a)}}var Rp={readContext:zi,useCallback:bn,useContext:bn,useEffect:bn,useImperativeHandle:bn,useInsertionEffect:bn,useLayoutEffect:bn,useMemo:bn,useReducer:bn,useRef:bn,useState:bn,useDebugValue:bn,useDeferredValue:bn,useTransition:bn,useMutableSource:bn,useSyncExternalStore:bn,useId:bn,unstable_isNewReconciler:!1},CA={readContext:zi,useCallback:function(e,t){return ar().memoizedState=[e,t===void 0?null:t],e},useContext:zi,useEffect:Ck,useImperativeHandle:function(e,t,a){return a=a!=null?a.concat([e]):null,Ku(4194308,4,eS.bind(null,t,e),a)},useLayoutEffect:function(e,t){return Ku(4194308,4,e,t)},useInsertionEffect:function(e,t){return Ku(4,2,e,t)},useMemo:function(e,t){var a=ar();return t=t===void 0?null:t,e=e(),a.memoizedState=[e,t],e},useReducer:function(e,t,a){var n=ar();return t=a!==void 0?a(t):t,n.memoizedState=n.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},n.queue=e,e=e.dispatch=SA.bind(null,ja,e),[n.memoizedState,e]},useRef:function(e){var t=ar();return e={current:e},t.memoizedState=e},useState:jk,useDebugValue:ky,useDeferredValue:function(e){return ar().memoizedState=e},useTransition:function(){var e=jk(!1),t=e[0];return e=_A.bind(null,e[1]),ar().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,a){var n=ja,r=ar();if(xa){if(a===void 0)throw Error(We(407));a=a()}else{if(a=t(),nn===null)throw Error(We(349));ys&30||K2(n,t,a)}r.memoizedState=a;var o={value:a,getSnapshot:t};return r.queue=o,Ck(G2.bind(null,n,o,e),[e]),n.flags|=2048,sc(9,q2.bind(null,n,o,a,t),void 0,null),a},useId:function(){var e=ar(),t=nn.identifierPrefix;if(xa){var a=Tr,n=zr;a=(n&~(1<<32-Oi(n)-1)).toString(32)+a,t=":"+t+"R"+a,a=rc++,0")&&(c=c.replace("",e.displayName)),c}while(1<=s&&0<=d);break}}}finally{Ag=!1,Error.prepareStackTrace=a}return(e=e?e.displayName||e.name:"")?wd(e):""}function nE(e){switch(e.tag){case 5:return wd(e.type);case 16:return wd("Lazy");case 13:return wd("Suspense");case 19:return wd("SuspenseList");case 0:case 2:case 15:return e=Ng(e.type,!1),e;case 11:return e=Ng(e.type.render,!1),e;case 1:return e=Ng(e.type,!0),e;default:return""}}function Zh(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Ys:return"Fragment";case Zs:return"Portal";case Kh:return"Profiler";case Gv:return"StrictMode";case qh:return"Suspense";case Gh:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case U_:return(e.displayName||"Context")+".Consumer";case W_:return(e._context.displayName||"Context")+".Provider";case Zv:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Yv:return t=e.displayName||null,t!==null?t:Zh(e.type)||"Memo";case io:t=e._payload,e=e._init;try{return Zh(e(t))}catch{}}return null}function iE(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Zh(t);case 8:return t===Gv?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function To(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function V_(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function rE(e){var t=V_(e)?"checked":"value",a=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),n=""+e[t];if(!e.hasOwnProperty(t)&&typeof a<"u"&&typeof a.get=="function"&&typeof a.set=="function"){var r=a.get,o=a.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return r.call(this)},set:function(s){n=""+s,o.call(this,s)}}),Object.defineProperty(e,t,{enumerable:a.enumerable}),{getValue:function(){return n},setValue:function(s){n=""+s},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function iu(e){e._valueTracker||(e._valueTracker=rE(e))}function K_(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var a=t.getValue(),n="";return e&&(n=V_(e)?e.checked?"true":"false":e.value),e=n,e!==a?(t.setValue(e),!0):!1}function vp(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function Yh(e,t){var a=t.checked;return Ca({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:a??e._wrapperState.initialChecked})}function Kx(e,t){var a=t.defaultValue==null?"":t.defaultValue,n=t.checked!=null?t.checked:t.defaultChecked;a=To(t.value!=null?t.value:a),e._wrapperState={initialChecked:n,initialValue:a,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function q_(e,t){t=t.checked,t!=null&&qv(e,"checked",t,!1)}function Xh(e,t){q_(e,t);var a=To(t.value),n=t.type;if(a!=null)n==="number"?(a===0&&e.value===""||e.value!=a)&&(e.value=""+a):e.value!==""+a&&(e.value=""+a);else if(n==="submit"||n==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?Jh(e,t.type,a):t.hasOwnProperty("defaultValue")&&Jh(e,t.type,To(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function qx(e,t,a){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var n=t.type;if(!(n!=="submit"&&n!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,a||t===e.value||(e.value=t),e.defaultValue=t}a=e.name,a!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,a!==""&&(e.name=a)}function Jh(e,t,a){(t!=="number"||vp(e.ownerDocument)!==e)&&(a==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+a&&(e.defaultValue=""+a))}var _d=Array.isArray;function ml(e,t,a,n){if(e=e.options,t){t={};for(var r=0;r"+t.valueOf().toString()+"",t=ru.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function qd(e,t){if(t){var a=e.firstChild;if(a&&a===e.lastChild&&a.nodeType===3){a.nodeValue=t;return}}e.textContent=t}var Ed={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},oE=["Webkit","ms","Moz","O"];Object.keys(Ed).forEach(function(e){oE.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Ed[t]=Ed[e]})});function X_(e,t,a){return t==null||typeof t=="boolean"||t===""?"":a||typeof t!="number"||t===0||Ed.hasOwnProperty(e)&&Ed[e]?(""+t).trim():t+"px"}function J_(e,t){e=e.style;for(var a in t)if(t.hasOwnProperty(a)){var n=a.indexOf("--")===0,r=X_(a,t[a],n);a==="float"&&(a="cssFloat"),n?e.setProperty(a,r):e[a]=r}}var sE=Ca({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function tf(e,t){if(t){if(sE[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(We(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(We(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(We(61))}if(t.style!=null&&typeof t.style!="object")throw Error(We(62))}}function af(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var nf=null;function Xv(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var rf=null,gl=null,hl=null;function Yx(e){if(e=jc(e)){if(typeof rf!="function")throw Error(We(280));var t=e.stateNode;t&&(t=xm(t),rf(e.stateNode,e.type,t))}}function Q_(e){gl?hl?hl.push(e):hl=[e]:gl=e}function e2(){if(gl){var e=gl,t=hl;if(hl=gl=null,Yx(e),t)for(e=0;e>>=0,e===0?32:31-(yE(e)/bE|0)|0}var ou=64,su=4194304;function Sd(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function kp(e,t){var a=e.pendingLanes;if(a===0)return 0;var n=0,r=e.suspendedLanes,o=e.pingedLanes,s=a&268435455;if(s!==0){var d=s&~r;d!==0?n=Sd(d):(o&=s,o!==0&&(n=Sd(o)))}else s=a&~r,s!==0?n=Sd(s):o!==0&&(n=Sd(o));if(n===0)return 0;if(t!==0&&t!==n&&!(t&r)&&(r=n&-n,o=t&-t,r>=o||r===16&&(o&4194240)!==0))return t;if(n&4&&(n|=a&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=n;0a;a++)t.push(e);return t}function _c(e,t,a){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-Oi(t),e[t]=a}function _E(e,t){var a=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var n=e.eventTimes;for(e=e.expirationTimes;0=Nd),rk=" ",ok=!1;function x2(e,t){switch(e){case"keyup":return XE.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function k2(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Xs=!1;function QE(e,t){switch(e){case"compositionend":return k2(t);case"keypress":return t.which!==32?null:(ok=!0,rk);case"textInput":return e=t.data,e===rk&&ok?null:e;default:return null}}function eA(e,t){if(Xs)return e==="compositionend"||!ry&&x2(e,t)?(e=y2(),Wu=ay=uo=null,Xs=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:a,offset:t-e};e=n}e:{for(;a;){if(a.nextSibling){a=a.nextSibling;break e}a=a.parentNode}a=void 0}a=ck(a)}}function j2(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?j2(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function C2(){for(var e=window,t=vp();t instanceof e.HTMLIFrameElement;){try{var a=typeof t.contentWindow.location.href=="string"}catch{a=!1}if(a)e=t.contentWindow;else break;t=vp(e.document)}return t}function oy(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function dA(e){var t=C2(),a=e.focusedElem,n=e.selectionRange;if(t!==a&&a&&a.ownerDocument&&j2(a.ownerDocument.documentElement,a)){if(n!==null&&oy(a)){if(t=n.start,e=n.end,e===void 0&&(e=t),"selectionStart"in a)a.selectionStart=t,a.selectionEnd=Math.min(e,a.value.length);else if(e=(t=a.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var r=a.textContent.length,o=Math.min(n.start,r);n=n.end===void 0?o:Math.min(n.end,r),!e.extend&&o>n&&(r=n,n=o,o=r),r=uk(a,o);var s=uk(a,n);r&&s&&(e.rangeCount!==1||e.anchorNode!==r.node||e.anchorOffset!==r.offset||e.focusNode!==s.node||e.focusOffset!==s.offset)&&(t=t.createRange(),t.setStart(r.node,r.offset),e.removeAllRanges(),o>n?(e.addRange(t),e.extend(s.node,s.offset)):(t.setEnd(s.node,s.offset),e.addRange(t)))}}for(t=[],e=a;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof a.focus=="function"&&a.focus(),a=0;a=document.documentMode,Js=null,uf=null,Md=null,pf=!1;function pk(e,t,a){var n=a.window===a?a.document:a.nodeType===9?a:a.ownerDocument;pf||Js==null||Js!==vp(n)||(n=Js,"selectionStart"in n&&oy(n)?n={start:n.selectionStart,end:n.selectionEnd}:(n=(n.ownerDocument&&n.ownerDocument.defaultView||window).getSelection(),n={anchorNode:n.anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset}),Md&&Qd(Md,n)||(Md=n,n=Sp(uf,"onSelect"),0tl||(e.current=yf[tl],yf[tl]=null,tl--)}function ga(e,t){tl++,yf[tl]=e.current,e.current=t}var Po={},Cn=Ro(Po),Yn=Ro(!1),fs=Po;function _l(e,t){var a=e.type.contextTypes;if(!a)return Po;var n=e.stateNode;if(n&&n.__reactInternalMemoizedUnmaskedChildContext===t)return n.__reactInternalMemoizedMaskedChildContext;var r={},o;for(o in a)r[o]=t[o];return n&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=r),r}function Xn(e){return e=e.childContextTypes,e!=null}function Cp(){ya(Yn),ya(Cn)}function bk(e,t,a){if(Cn.current!==Po)throw Error(We(168));ga(Cn,t),ga(Yn,a)}function R2(e,t,a){var n=e.stateNode;if(t=t.childContextTypes,typeof n.getChildContext!="function")return a;n=n.getChildContext();for(var r in n)if(!(r in t))throw Error(We(108,iE(e)||"Unknown",r));return Ca({},a,n)}function zp(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Po,fs=Cn.current,ga(Cn,e),ga(Yn,Yn.current),!0}function xk(e,t,a){var n=e.stateNode;if(!n)throw Error(We(169));a?(e=R2(e,t,fs),n.__reactInternalMemoizedMergedChildContext=e,ya(Yn),ya(Cn),ga(Cn,e)):ya(Yn),ga(Yn,a)}var jr=null,km=!1,Kg=!1;function I2(e){jr===null?jr=[e]:jr.push(e)}function kA(e){km=!0,I2(e)}function Io(){if(!Kg&&jr!==null){Kg=!0;var e=0,t=Zt;try{var a=jr;for(Zt=1;e>=s,r-=s,zr=1<<32-Oi(t)+r|a<F?(R=D,D=null):R=D.sibling;var E=f(b,D,j[F],P);if(E===null){D===null&&(D=R);break}e&&D&&E.alternate===null&&t(b,D),w=o(E,w,F),N===null?M=E:N.sibling=E,N=E,D=R}if(F===j.length)return a(b,D),xa&&Go(b,F),M;if(D===null){for(;FF?(R=D,D=null):R=D.sibling;var ae=f(b,D,E.value,P);if(ae===null){D===null&&(D=R);break}e&&D&&ae.alternate===null&&t(b,D),w=o(ae,w,F),N===null?M=ae:N.sibling=ae,N=ae,D=R}if(E.done)return a(b,D),xa&&Go(b,F),M;if(D===null){for(;!E.done;F++,E=j.next())E=g(b,E.value,P),E!==null&&(w=o(E,w,F),N===null?M=E:N.sibling=E,N=E);return xa&&Go(b,F),M}for(D=n(b,D);!E.done;F++,E=j.next())E=v(D,b,F,E.value,P),E!==null&&(e&&E.alternate!==null&&D.delete(E.key===null?F:E.key),w=o(E,w,F),N===null?M=E:N.sibling=E,N=E);return e&&D.forEach(function(B){return t(b,B)}),xa&&Go(b,F),M}function S(b,w,j,P){if(typeof j=="object"&&j!==null&&j.type===Ys&&j.key===null&&(j=j.props.children),typeof j=="object"&&j!==null){switch(j.$$typeof){case nu:e:{for(var M=j.key,N=w;N!==null;){if(N.key===M){if(M=j.type,M===Ys){if(N.tag===7){a(b,N.sibling),w=r(N,j.props.children),w.return=b,b=w;break e}}else if(N.elementType===M||typeof M=="object"&&M!==null&&M.$$typeof===io&&_k(M)===N.type){a(b,N.sibling),w=r(N,j.props),w.ref=cd(b,N,j),w.return=b,b=w;break e}a(b,N);break}else t(b,N);N=N.sibling}j.type===Ys?(w=us(j.props.children,b.mode,P,j.key),w.return=b,b=w):(P=Yu(j.type,j.key,j.props,null,b.mode,P),P.ref=cd(b,w,j),P.return=b,b=P)}return s(b);case Zs:e:{for(N=j.key;w!==null;){if(w.key===N)if(w.tag===4&&w.stateNode.containerInfo===j.containerInfo&&w.stateNode.implementation===j.implementation){a(b,w.sibling),w=r(w,j.children||[]),w.return=b,b=w;break e}else{a(b,w);break}else t(b,w);w=w.sibling}w=eh(j,b.mode,P),w.return=b,b=w}return s(b);case io:return N=j._init,S(b,w,N(j._payload),P)}if(_d(j))return k(b,w,j,P);if(rd(j))return x(b,w,j,P);gu(b,j)}return typeof j=="string"&&j!==""||typeof j=="number"?(j=""+j,w!==null&&w.tag===6?(a(b,w.sibling),w=r(w,j),w.return=b,b=w):(a(b,w),w=Qg(j,b.mode,P),w.return=b,b=w),s(b)):a(b,w)}return S}var jl=B2(!0),H2=B2(!1),Ep=Ro(null),Ap=null,il=null,cy=null;function uy(){cy=il=Ap=null}function py(e){var t=Ep.current;ya(Ep),e._currentValue=t}function kf(e,t,a){for(;e!==null;){var n=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,n!==null&&(n.childLanes|=t)):n!==null&&(n.childLanes&t)!==t&&(n.childLanes|=t),e===a)break;e=e.return}}function vl(e,t){Ap=e,cy=il=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(Zn=!0),e.firstContext=null)}function zi(e){var t=e._currentValue;if(cy!==e)if(e={context:e,memoizedValue:t,next:null},il===null){if(Ap===null)throw Error(We(308));il=e,Ap.dependencies={lanes:0,firstContext:e}}else il=il.next=e;return t}var is=null;function my(e){is===null?is=[e]:is.push(e)}function W2(e,t,a,n){var r=t.interleaved;return r===null?(a.next=a,my(t)):(a.next=r.next,r.next=a),t.interleaved=a,Lr(e,n)}function Lr(e,t){e.lanes|=t;var a=e.alternate;for(a!==null&&(a.lanes|=t),a=e,e=e.return;e!==null;)e.childLanes|=t,a=e.alternate,a!==null&&(a.childLanes|=t),a=e,e=e.return;return a.tag===3?a.stateNode:null}var ro=!1;function gy(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function U2(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Ar(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function wo(e,t,a){var n=e.updateQueue;if(n===null)return null;if(n=n.shared,Kt&2){var r=n.pending;return r===null?t.next=t:(t.next=r.next,r.next=t),n.pending=t,Lr(e,a)}return r=n.interleaved,r===null?(t.next=t,my(n)):(t.next=r.next,r.next=t),n.interleaved=t,Lr(e,a)}function $u(e,t,a){if(t=t.updateQueue,t!==null&&(t=t.shared,(a&4194240)!==0)){var n=t.lanes;n&=e.pendingLanes,a|=n,t.lanes=a,Qv(e,a)}}function Sk(e,t){var a=e.updateQueue,n=e.alternate;if(n!==null&&(n=n.updateQueue,a===n)){var r=null,o=null;if(a=a.firstBaseUpdate,a!==null){do{var s={eventTime:a.eventTime,lane:a.lane,tag:a.tag,payload:a.payload,callback:a.callback,next:null};o===null?r=o=s:o=o.next=s,a=a.next}while(a!==null);o===null?r=o=t:o=o.next=t}else r=o=t;a={baseState:n.baseState,firstBaseUpdate:r,lastBaseUpdate:o,shared:n.shared,effects:n.effects},e.updateQueue=a;return}e=a.lastBaseUpdate,e===null?a.firstBaseUpdate=t:e.next=t,a.lastBaseUpdate=t}function Np(e,t,a,n){var r=e.updateQueue;ro=!1;var o=r.firstBaseUpdate,s=r.lastBaseUpdate,d=r.shared.pending;if(d!==null){r.shared.pending=null;var c=d,p=c.next;c.next=null,s===null?o=p:s.next=p,s=c;var m=e.alternate;m!==null&&(m=m.updateQueue,d=m.lastBaseUpdate,d!==s&&(d===null?m.firstBaseUpdate=p:d.next=p,m.lastBaseUpdate=c))}if(o!==null){var g=r.baseState;s=0,m=p=c=null,d=o;do{var f=d.lane,v=d.eventTime;if((n&f)===f){m!==null&&(m=m.next={eventTime:v,lane:0,tag:d.tag,payload:d.payload,callback:d.callback,next:null});e:{var k=e,x=d;switch(f=t,v=a,x.tag){case 1:if(k=x.payload,typeof k=="function"){g=k.call(v,g,f);break e}g=k;break e;case 3:k.flags=k.flags&-65537|128;case 0:if(k=x.payload,f=typeof k=="function"?k.call(v,g,f):k,f==null)break e;g=Ca({},g,f);break e;case 2:ro=!0}}d.callback!==null&&d.lane!==0&&(e.flags|=64,f=r.effects,f===null?r.effects=[d]:f.push(d))}else v={eventTime:v,lane:f,tag:d.tag,payload:d.payload,callback:d.callback,next:null},m===null?(p=m=v,c=g):m=m.next=v,s|=f;if(d=d.next,d===null){if(d=r.shared.pending,d===null)break;f=d,d=f.next,f.next=null,r.lastBaseUpdate=f,r.shared.pending=null}}while(!0);if(m===null&&(c=g),r.baseState=c,r.firstBaseUpdate=p,r.lastBaseUpdate=m,t=r.shared.interleaved,t!==null){r=t;do s|=r.lane,r=r.next;while(r!==t)}else o===null&&(r.shared.lanes=0);bs|=s,e.lanes=s,e.memoizedState=g}}function jk(e,t,a){if(e=t.effects,t.effects=null,e!==null)for(t=0;ta?a:4,e(!0);var n=Gg.transition;Gg.transition={};try{e(!1),t()}finally{Zt=a,Gg.transition=n}}function oS(){return Ti().memoizedState}function jA(e,t,a){var n=So(e);if(a={lane:n,action:a,hasEagerState:!1,eagerState:null,next:null},sS(e))lS(t,a);else if(a=W2(e,t,a,n),a!==null){var r=Rn();Bi(a,e,n,r),dS(a,t,n)}}function CA(e,t,a){var n=So(e),r={lane:n,action:a,hasEagerState:!1,eagerState:null,next:null};if(sS(e))lS(t,r);else{var o=e.alternate;if(e.lanes===0&&(o===null||o.lanes===0)&&(o=t.lastRenderedReducer,o!==null))try{var s=t.lastRenderedState,d=o(s,a);if(r.hasEagerState=!0,r.eagerState=d,Ui(d,s)){var c=t.interleaved;c===null?(r.next=r,my(t)):(r.next=c.next,c.next=r),t.interleaved=r;return}}catch{}finally{}a=W2(e,t,r,n),a!==null&&(r=Rn(),Bi(a,e,n,r),dS(a,t,n))}}function sS(e){var t=e.alternate;return e===ja||t!==null&&t===ja}function lS(e,t){Rd=Mp=!0;var a=e.pending;a===null?t.next=t:(t.next=a.next,a.next=t),e.pending=t}function dS(e,t,a){if(a&4194240){var n=t.lanes;n&=e.pendingLanes,a|=n,t.lanes=a,Qv(e,a)}}var Rp={readContext:zi,useCallback:bn,useContext:bn,useEffect:bn,useImperativeHandle:bn,useInsertionEffect:bn,useLayoutEffect:bn,useMemo:bn,useReducer:bn,useRef:bn,useState:bn,useDebugValue:bn,useDeferredValue:bn,useTransition:bn,useMutableSource:bn,useSyncExternalStore:bn,useId:bn,unstable_isNewReconciler:!1},zA={readContext:zi,useCallback:function(e,t){return ar().memoizedState=[e,t===void 0?null:t],e},useContext:zi,useEffect:zk,useImperativeHandle:function(e,t,a){return a=a!=null?a.concat([e]):null,Ku(4194308,4,tS.bind(null,t,e),a)},useLayoutEffect:function(e,t){return Ku(4194308,4,e,t)},useInsertionEffect:function(e,t){return Ku(4,2,e,t)},useMemo:function(e,t){var a=ar();return t=t===void 0?null:t,e=e(),a.memoizedState=[e,t],e},useReducer:function(e,t,a){var n=ar();return t=a!==void 0?a(t):t,n.memoizedState=n.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},n.queue=e,e=e.dispatch=jA.bind(null,ja,e),[n.memoizedState,e]},useRef:function(e){var t=ar();return e={current:e},t.memoizedState=e},useState:Ck,useDebugValue:wy,useDeferredValue:function(e){return ar().memoizedState=e},useTransition:function(){var e=Ck(!1),t=e[0];return e=SA.bind(null,e[1]),ar().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,a){var n=ja,r=ar();if(xa){if(a===void 0)throw Error(We(407));a=a()}else{if(a=t(),nn===null)throw Error(We(349));ys&30||q2(n,t,a)}r.memoizedState=a;var o={value:a,getSnapshot:t};return r.queue=o,zk(Z2.bind(null,n,o,e),[e]),n.flags|=2048,sc(9,G2.bind(null,n,o,a,t),void 0,null),a},useId:function(){var e=ar(),t=nn.identifierPrefix;if(xa){var a=Tr,n=zr;a=(n&~(1<<32-Oi(n)-1)).toString(32)+a,t=":"+t+"R"+a,a=rc++,0<\/script>",e=e.removeChild(e.firstChild)):typeof n.is=="string"?e=s.createElement(a,{is:n.is}):(e=s.createElement(a),a==="select"&&(s=e,n.multiple?s.multiple=!0:n.size&&(s.size=n.size))):e=s.createElementNS(e,a),e[ir]=t,e[ac]=n,yS(e,t,!1,!1),t.stateNode=e;e:{switch(s=af(a,n),a){case"dialog":ha("cancel",e),ha("close",e),r=n;break;case"iframe":case"object":case"embed":ha("load",e),r=n;break;case"video":case"audio":for(r=0;rTl&&(t.flags|=128,n=!0,ud(o,!1),t.lanes=4194304)}else{if(!n)if(e=Dp(s),e!==null){if(t.flags|=128,n=!0,a=e.updateQueue,a!==null&&(t.updateQueue=a,t.flags|=4),ud(o,!0),o.tail===null&&o.tailMode==="hidden"&&!s.alternate&&!xa)return xn(t),null}else 2*La()-o.renderingStartTime>Tl&&a!==1073741824&&(t.flags|=128,n=!0,ud(o,!1),t.lanes=4194304);o.isBackwards?(s.sibling=t.child,t.child=s):(a=o.last,a!==null?a.sibling=s:t.child=s,o.last=s)}return o.tail!==null?(t=o.tail,o.rendering=t,o.tail=t.sibling,o.renderingStartTime=La(),t.sibling=null,a=Sa.current,ga(Sa,n?a&1|2:a&1),t):(xn(t),null);case 22:case 23:return zy(),n=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==n&&(t.flags|=8192),n&&t.mode&1?oi&1073741824&&(xn(t),t.subtreeFlags&6&&(t.flags|=8192)):xn(t),null;case 24:return null;case 25:return null}throw Error(We(156,t.tag))}function MA(e,t){switch(sy(t),t.tag){case 1:return Xn(t.type)&&Cp(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Cl(),ya(Yn),ya(Cn),fy(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return hy(t),null;case 13:if(ya(Sa),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(We(340));Sl()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return ya(Sa),null;case 4:return Cl(),null;case 10:return uy(t.type._context),null;case 22:case 23:return zy(),null;case 24:return null;default:return null}}var fu=!1,wn=!1,RA=typeof WeakSet=="function"?WeakSet:Set,Je=null;function rl(e,t){var a=e.ref;if(a!==null)if(typeof a=="function")try{a(null)}catch(n){Ea(e,t,n)}else a.current=null}function Ef(e,t,a){try{a()}catch(n){Ea(e,t,n)}}var Lk=!1;function IA(e,t){if(mf=wp,e=j2(),ry(e)){if("selectionStart"in e)var a={start:e.selectionStart,end:e.selectionEnd};else e:{a=(a=e.ownerDocument)&&a.defaultView||window;var n=a.getSelection&&a.getSelection();if(n&&n.rangeCount!==0){a=n.anchorNode;var r=n.anchorOffset,o=n.focusNode;n=n.focusOffset;try{a.nodeType,o.nodeType}catch{a=null;break e}var s=0,d=-1,c=-1,p=0,m=0,g=e,f=null;t:for(;;){for(var v;g!==a||r!==0&&g.nodeType!==3||(d=s+r),g!==o||n!==0&&g.nodeType!==3||(c=s+n),g.nodeType===3&&(s+=g.nodeValue.length),(v=g.firstChild)!==null;)f=g,g=v;for(;;){if(g===e)break t;if(f===a&&++p===r&&(d=s),f===o&&++m===n&&(c=s),(v=g.nextSibling)!==null)break;g=f,f=g.parentNode}g=v}a=d===-1||c===-1?null:{start:d,end:c}}else a=null}a=a||{start:0,end:0}}else a=null;for(gf={focusedElem:e,selectionRange:a},wp=!1,Je=t;Je!==null;)if(t=Je,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,Je=e;else for(;Je!==null;){t=Je;try{var k=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(k!==null){var x=k.memoizedProps,S=k.memoizedState,b=t.stateNode,w=b.getSnapshotBeforeUpdate(t.elementType===t.type?x:Mi(t.type,x),S);b.__reactInternalSnapshotBeforeUpdate=w}break;case 3:var j=t.stateNode.containerInfo;j.nodeType===1?j.textContent="":j.nodeType===9&&j.documentElement&&j.removeChild(j.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(We(163))}}catch(P){Ea(t,t.return,P)}if(e=t.sibling,e!==null){e.return=t.return,Je=e;break}Je=t.return}return k=Lk,Lk=!1,k}function Id(e,t,a){var n=t.updateQueue;if(n=n!==null?n.lastEffect:null,n!==null){var r=n=n.next;do{if((r.tag&e)===e){var o=r.destroy;r.destroy=void 0,o!==void 0&&Ef(t,a,o)}r=r.next}while(r!==n)}}function Sm(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var a=t=t.next;do{if((a.tag&e)===e){var n=a.create;a.destroy=n()}a=a.next}while(a!==t)}}function Af(e){var t=e.ref;if(t!==null){var a=e.stateNode;switch(e.tag){case 5:e=a;break;default:e=a}typeof t=="function"?t(e):t.current=e}}function kS(e){var t=e.alternate;t!==null&&(e.alternate=null,kS(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[ir],delete t[ac],delete t[vf],delete t[yA],delete t[bA])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function wS(e){return e.tag===5||e.tag===3||e.tag===4}function Fk(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||wS(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Nf(e,t,a){var n=e.tag;if(n===5||n===6)e=e.stateNode,t?a.nodeType===8?a.parentNode.insertBefore(e,t):a.insertBefore(e,t):(a.nodeType===8?(t=a.parentNode,t.insertBefore(e,a)):(t=a,t.appendChild(e)),a=a._reactRootContainer,a!=null||t.onclick!==null||(t.onclick=jp));else if(n!==4&&(e=e.child,e!==null))for(Nf(e,t,a),e=e.sibling;e!==null;)Nf(e,t,a),e=e.sibling}function Df(e,t,a){var n=e.tag;if(n===5||n===6)e=e.stateNode,t?a.insertBefore(e,t):a.appendChild(e);else if(n!==4&&(e=e.child,e!==null))for(Df(e,t,a),e=e.sibling;e!==null;)Df(e,t,a),e=e.sibling}var ln=null,Ri=!1;function eo(e,t,a){for(a=a.child;a!==null;)_S(e,t,a),a=a.sibling}function _S(e,t,a){if(sr&&typeof sr.onCommitFiberUnmount=="function")try{sr.onCommitFiberUnmount(fm,a)}catch{}switch(a.tag){case 5:wn||rl(a,t);case 6:var n=ln,r=Ri;ln=null,eo(e,t,a),ln=n,Ri=r,ln!==null&&(Ri?(e=ln,a=a.stateNode,e.nodeType===8?e.parentNode.removeChild(a):e.removeChild(a)):ln.removeChild(a.stateNode));break;case 18:ln!==null&&(Ri?(e=ln,a=a.stateNode,e.nodeType===8?Vg(e.parentNode,a):e.nodeType===1&&Vg(e,a),Xd(e)):Vg(ln,a.stateNode));break;case 4:n=ln,r=Ri,ln=a.stateNode.containerInfo,Ri=!0,eo(e,t,a),ln=n,Ri=r;break;case 0:case 11:case 14:case 15:if(!wn&&(n=a.updateQueue,n!==null&&(n=n.lastEffect,n!==null))){r=n=n.next;do{var o=r,s=o.destroy;o=o.tag,s!==void 0&&(o&2||o&4)&&Ef(a,t,s),r=r.next}while(r!==n)}eo(e,t,a);break;case 1:if(!wn&&(rl(a,t),n=a.stateNode,typeof n.componentWillUnmount=="function"))try{n.props=a.memoizedProps,n.state=a.memoizedState,n.componentWillUnmount()}catch(d){Ea(a,t,d)}eo(e,t,a);break;case 21:eo(e,t,a);break;case 22:a.mode&1?(wn=(n=wn)||a.memoizedState!==null,eo(e,t,a),wn=n):eo(e,t,a);break;default:eo(e,t,a)}}function Ok(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var a=e.stateNode;a===null&&(a=e.stateNode=new RA),t.forEach(function(n){var r=VA.bind(null,e,n);a.has(n)||(a.add(n),n.then(r,r))})}}function Di(e,t){var a=t.deletions;if(a!==null)for(var n=0;nr&&(r=s),n&=~o}if(n=r,n=La()-n,n=(120>n?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*FA(n/1960))-n,10e?16:e,po===null)var n=!1;else{if(e=po,po=null,Fp=0,Kt&6)throw Error(We(331));var r=Kt;for(Kt|=4,Je=e.current;Je!==null;){var o=Je,s=o.child;if(Je.flags&16){var d=o.deletions;if(d!==null){for(var c=0;cLa()-jy?cs(e,0):Sy|=a),Jn(e,t)}function AS(e,t){t===0&&(e.mode&1?(t=su,su<<=1,!(su&130023424)&&(su=4194304)):t=1);var a=Rn();e=Lr(e,t),e!==null&&(_c(e,t,a),Jn(e,a))}function $A(e){var t=e.memoizedState,a=0;t!==null&&(a=t.retryLane),AS(e,a)}function VA(e,t){var a=0;switch(e.tag){case 13:var n=e.stateNode,r=e.memoizedState;r!==null&&(a=r.retryLane);break;case 19:n=e.stateNode;break;default:throw Error(We(314))}n!==null&&n.delete(t),AS(e,a)}var NS;NS=function(e,t,a){if(e!==null)if(e.memoizedProps!==t.pendingProps||Yn.current)Zn=!0;else{if(!(e.lanes&a)&&!(t.flags&128))return Zn=!1,NA(e,t,a);Zn=!!(e.flags&131072)}else Zn=!1,xa&&t.flags&1048576&&I2(t,Pp,t.index);switch(t.lanes=0,t.tag){case 2:var n=t.type;qu(e,t),e=t.pendingProps;var r=_l(t,Cn.current);vl(t,a),r=yy(null,t,n,e,r,a);var o=by();return t.flags|=1,typeof r=="object"&&r!==null&&typeof r.render=="function"&&r.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,Xn(n)?(o=!0,zp(t)):o=!1,t.memoizedState=r.state!==null&&r.state!==void 0?r.state:null,my(t),r.updater=_m,t.stateNode=r,r._reactInternals=t,_f(t,n,e,a),t=Cf(null,t,n,!0,o,a)):(t.tag=0,xa&&o&&oy(t),Nn(null,t,r,a),t=t.child),t;case 16:n=t.elementType;e:{switch(qu(e,t),e=t.pendingProps,r=n._init,n=r(n._payload),t.type=n,r=t.tag=qA(n),e=Mi(n,e),r){case 0:t=jf(null,t,n,e,a);break e;case 1:t=Mk(null,t,n,e,a);break e;case 11:t=Nk(null,t,n,e,a);break e;case 14:t=Dk(null,t,n,Mi(n.type,e),a);break e}throw Error(We(306,n,""))}return t;case 0:return n=t.type,r=t.pendingProps,r=t.elementType===n?r:Mi(n,r),jf(e,t,n,r,a);case 1:return n=t.type,r=t.pendingProps,r=t.elementType===n?r:Mi(n,r),Mk(e,t,n,r,a);case 3:e:{if(hS(t),e===null)throw Error(We(387));n=t.pendingProps,o=t.memoizedState,r=o.element,W2(e,t),Np(t,n,null,a);var s=t.memoizedState;if(n=s.element,o.isDehydrated)if(o={element:n,isDehydrated:!1,cache:s.cache,pendingSuspenseBoundaries:s.pendingSuspenseBoundaries,transitions:s.transitions},t.updateQueue.baseState=o,t.memoizedState=o,t.flags&256){r=zl(Error(We(423)),t),t=Rk(e,t,n,a,r);break e}else if(n!==r){r=zl(Error(We(424)),t),t=Rk(e,t,n,a,r);break e}else for(ui=ko(t.stateNode.containerInfo.firstChild),pi=t,xa=!0,Ii=null,a=B2(t,null,n,a),t.child=a;a;)a.flags=a.flags&-3|4096,a=a.sibling;else{if(Sl(),n===r){t=Fr(e,t,a);break e}Nn(e,t,n,a)}t=t.child}return t;case 5:return U2(t),e===null&&xf(t),n=t.type,r=t.pendingProps,o=e!==null?e.memoizedProps:null,s=r.children,hf(n,r)?s=null:o!==null&&hf(n,o)&&(t.flags|=32),gS(e,t),Nn(e,t,s,a),t.child;case 6:return e===null&&xf(t),null;case 13:return fS(e,t,a);case 4:return gy(t,t.stateNode.containerInfo),n=t.pendingProps,e===null?t.child=jl(t,null,n,a):Nn(e,t,n,a),t.child;case 11:return n=t.type,r=t.pendingProps,r=t.elementType===n?r:Mi(n,r),Nk(e,t,n,r,a);case 7:return Nn(e,t,t.pendingProps,a),t.child;case 8:return Nn(e,t,t.pendingProps.children,a),t.child;case 12:return Nn(e,t,t.pendingProps.children,a),t.child;case 10:e:{if(n=t.type._context,r=t.pendingProps,o=t.memoizedProps,s=r.value,ga(Ep,n._currentValue),n._currentValue=s,o!==null)if(Ui(o.value,s)){if(o.children===r.children&&!Yn.current){t=Fr(e,t,a);break e}}else for(o=t.child,o!==null&&(o.return=t);o!==null;){var d=o.dependencies;if(d!==null){s=o.child;for(var c=d.firstContext;c!==null;){if(c.context===n){if(o.tag===1){c=Ar(-1,a&-a),c.tag=2;var p=o.updateQueue;if(p!==null){p=p.shared;var m=p.pending;m===null?c.next=c:(c.next=m.next,m.next=c),p.pending=c}}o.lanes|=a,c=o.alternate,c!==null&&(c.lanes|=a),kf(o.return,a,t),d.lanes|=a;break}c=c.next}}else if(o.tag===10)s=o.type===t.type?null:o.child;else if(o.tag===18){if(s=o.return,s===null)throw Error(We(341));s.lanes|=a,d=s.alternate,d!==null&&(d.lanes|=a),kf(s,a,t),s=o.sibling}else s=o.child;if(s!==null)s.return=o;else for(s=o;s!==null;){if(s===t){s=null;break}if(o=s.sibling,o!==null){o.return=s.return,s=o;break}s=s.return}o=s}Nn(e,t,r.children,a),t=t.child}return t;case 9:return r=t.type,n=t.pendingProps.children,vl(t,a),r=zi(r),n=n(r),t.flags|=1,Nn(e,t,n,a),t.child;case 14:return n=t.type,r=Mi(n,t.pendingProps),r=Mi(n.type,r),Dk(e,t,n,r,a);case 15:return pS(e,t,t.type,t.pendingProps,a);case 17:return n=t.type,r=t.pendingProps,r=t.elementType===n?r:Mi(n,r),qu(e,t),t.tag=1,Xn(n)?(e=!0,zp(t)):e=!1,vl(t,a),dS(t,n,r),_f(t,n,r,a),Cf(null,t,n,!0,e,a);case 19:return vS(e,t,a);case 22:return mS(e,t,a)}throw Error(We(156,t.tag))};function DS(e,t){return o2(e,t)}function KA(e,t,a,n){this.tag=e,this.key=a,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=n,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Si(e,t,a,n){return new KA(e,t,a,n)}function Py(e){return e=e.prototype,!(!e||!e.isReactComponent)}function qA(e){if(typeof e=="function")return Py(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Gv)return 11;if(e===Zv)return 14}return 2}function jo(e,t){var a=e.alternate;return a===null?(a=Si(e.tag,t,e.key,e.mode),a.elementType=e.elementType,a.type=e.type,a.stateNode=e.stateNode,a.alternate=e,e.alternate=a):(a.pendingProps=t,a.type=e.type,a.flags=0,a.subtreeFlags=0,a.deletions=null),a.flags=e.flags&14680064,a.childLanes=e.childLanes,a.lanes=e.lanes,a.child=e.child,a.memoizedProps=e.memoizedProps,a.memoizedState=e.memoizedState,a.updateQueue=e.updateQueue,t=e.dependencies,a.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},a.sibling=e.sibling,a.index=e.index,a.ref=e.ref,a}function Yu(e,t,a,n,r,o){var s=2;if(n=e,typeof e=="function")Py(e)&&(s=1);else if(typeof e=="string")s=5;else e:switch(e){case Ys:return us(a.children,r,o,t);case qv:s=8,r|=8;break;case Kh:return e=Si(12,a,t,r|2),e.elementType=Kh,e.lanes=o,e;case qh:return e=Si(13,a,t,r),e.elementType=qh,e.lanes=o,e;case Gh:return e=Si(19,a,t,r),e.elementType=Gh,e.lanes=o,e;case U_:return Cm(a,r,o,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case H_:s=10;break e;case W_:s=9;break e;case Gv:s=11;break e;case Zv:s=14;break e;case io:s=16,n=null;break e}throw Error(We(130,e==null?e:typeof e,""))}return t=Si(s,a,t,r),t.elementType=e,t.type=n,t.lanes=o,t}function us(e,t,a,n){return e=Si(7,e,n,t),e.lanes=a,e}function Cm(e,t,a,n){return e=Si(22,e,n,t),e.elementType=U_,e.lanes=a,e.stateNode={isHidden:!1},e}function Qg(e,t,a){return e=Si(6,e,null,t),e.lanes=a,e}function eh(e,t,a){return t=Si(4,e.children!==null?e.children:[],e.key,t),t.lanes=a,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function GA(e,t,a,n,r){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Mg(0),this.expirationTimes=Mg(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Mg(0),this.identifierPrefix=n,this.onRecoverableError=r,this.mutableSourceEagerHydrationData=null}function Ey(e,t,a,n,r,o,s,d,c){return e=new GA(e,t,a,d,c),t===1?(t=1,o===!0&&(t|=8)):t=0,o=Si(3,null,null,t),e.current=o,o.stateNode=e,o.memoizedState={element:n,isDehydrated:a,cache:null,transitions:null,pendingSuspenseBoundaries:null},my(o),e}function ZA(e,t,a){var n=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(LS)}catch(e){console.error(e)}}LS(),L_.exports=hi;var My=L_.exports;const Ut=zs(My);var qk=My;$h.createRoot=qk.createRoot,$h.hydrateRoot=qk.hydrateRoot;/** +`+o.stack}return{value:e,source:t,stack:r,digest:null}}function Xg(e,t,a){return{value:e,source:null,stack:a??null,digest:t??null}}function Sf(e,t){try{console.error(t.value)}catch(a){setTimeout(function(){throw a})}}var EA=typeof WeakMap=="function"?WeakMap:Map;function uS(e,t,a){a=Ar(-1,a),a.tag=3,a.payload={element:null};var n=t.value;return a.callback=function(){Lp||(Lp=!0,Mf=n),Sf(e,t)},a}function pS(e,t,a){a=Ar(-1,a),a.tag=3;var n=e.type.getDerivedStateFromError;if(typeof n=="function"){var r=t.value;a.payload=function(){return n(r)},a.callback=function(){Sf(e,t)}}var o=e.stateNode;return o!==null&&typeof o.componentDidCatch=="function"&&(a.callback=function(){Sf(e,t),typeof n!="function"&&(_o===null?_o=new Set([this]):_o.add(this));var s=t.stack;this.componentDidCatch(t.value,{componentStack:s!==null?s:""})}),a}function Ek(e,t,a){var n=e.pingCache;if(n===null){n=e.pingCache=new EA;var r=new Set;n.set(t,r)}else r=n.get(t),r===void 0&&(r=new Set,n.set(t,r));r.has(a)||(r.add(a),e=$A.bind(null,e,t,a),t.then(e,e))}function Ak(e){do{var t;if((t=e.tag===13)&&(t=e.memoizedState,t=t!==null?t.dehydrated!==null:!0),t)return e;e=e.return}while(e!==null);return null}function Nk(e,t,a,n,r){return e.mode&1?(e.flags|=65536,e.lanes=r,e):(e===t?e.flags|=65536:(e.flags|=128,a.flags|=131072,a.flags&=-52805,a.tag===1&&(a.alternate===null?a.tag=17:(t=Ar(-1,1),t.tag=2,wo(a,t,1))),a.lanes|=1),e)}var AA=$r.ReactCurrentOwner,Zn=!1;function Nn(e,t,a,n){t.child=e===null?H2(t,null,a,n):jl(t,e.child,a,n)}function Dk(e,t,a,n,r){a=a.render;var o=t.ref;return vl(t,r),n=by(e,t,a,n,o,r),a=xy(),e!==null&&!Zn?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~r,Fr(e,t,r)):(xa&&a&&sy(t),t.flags|=1,Nn(e,t,n,r),t.child)}function Mk(e,t,a,n,r){if(e===null){var o=a.type;return typeof o=="function"&&!Ey(o)&&o.defaultProps===void 0&&a.compare===null&&a.defaultProps===void 0?(t.tag=15,t.type=o,mS(e,t,o,n,r)):(e=Yu(a.type,null,n,t,t.mode,r),e.ref=t.ref,e.return=t,t.child=e)}if(o=e.child,!(e.lanes&r)){var s=o.memoizedProps;if(a=a.compare,a=a!==null?a:Qd,a(s,n)&&e.ref===t.ref)return Fr(e,t,r)}return t.flags|=1,e=jo(o,n),e.ref=t.ref,e.return=t,t.child=e}function mS(e,t,a,n,r){if(e!==null){var o=e.memoizedProps;if(Qd(o,n)&&e.ref===t.ref)if(Zn=!1,t.pendingProps=n=o,(e.lanes&r)!==0)e.flags&131072&&(Zn=!0);else return t.lanes=e.lanes,Fr(e,t,r)}return jf(e,t,a,n,r)}function gS(e,t,a){var n=t.pendingProps,r=n.children,o=e!==null?e.memoizedState:null;if(n.mode==="hidden")if(!(t.mode&1))t.memoizedState={baseLanes:0,cachePool:null,transitions:null},ga(ol,oi),oi|=a;else{if(!(a&1073741824))return e=o!==null?o.baseLanes|a:a,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,ga(ol,oi),oi|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},n=o!==null?o.baseLanes:a,ga(ol,oi),oi|=n}else o!==null?(n=o.baseLanes|a,t.memoizedState=null):n=a,ga(ol,oi),oi|=n;return Nn(e,t,r,a),t.child}function hS(e,t){var a=t.ref;(e===null&&a!==null||e!==null&&e.ref!==a)&&(t.flags|=512,t.flags|=2097152)}function jf(e,t,a,n,r){var o=Xn(a)?fs:Cn.current;return o=_l(t,o),vl(t,r),a=by(e,t,a,n,o,r),n=xy(),e!==null&&!Zn?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~r,Fr(e,t,r)):(xa&&n&&sy(t),t.flags|=1,Nn(e,t,a,r),t.child)}function Rk(e,t,a,n,r){if(Xn(a)){var o=!0;zp(t)}else o=!1;if(vl(t,r),t.stateNode===null)qu(e,t),cS(t,a,n),_f(t,a,n,r),n=!0;else if(e===null){var s=t.stateNode,d=t.memoizedProps;s.props=d;var c=s.context,p=a.contextType;typeof p=="object"&&p!==null?p=zi(p):(p=Xn(a)?fs:Cn.current,p=_l(t,p));var m=a.getDerivedStateFromProps,g=typeof m=="function"||typeof s.getSnapshotBeforeUpdate=="function";g||typeof s.UNSAFE_componentWillReceiveProps!="function"&&typeof s.componentWillReceiveProps!="function"||(d!==n||c!==p)&&Pk(t,s,n,p),ro=!1;var f=t.memoizedState;s.state=f,Np(t,n,s,r),c=t.memoizedState,d!==n||f!==c||Yn.current||ro?(typeof m=="function"&&(wf(t,a,m,n),c=t.memoizedState),(d=ro||Tk(t,a,d,n,f,c,p))?(g||typeof s.UNSAFE_componentWillMount!="function"&&typeof s.componentWillMount!="function"||(typeof s.componentWillMount=="function"&&s.componentWillMount(),typeof s.UNSAFE_componentWillMount=="function"&&s.UNSAFE_componentWillMount()),typeof s.componentDidMount=="function"&&(t.flags|=4194308)):(typeof s.componentDidMount=="function"&&(t.flags|=4194308),t.memoizedProps=n,t.memoizedState=c),s.props=n,s.state=c,s.context=p,n=d):(typeof s.componentDidMount=="function"&&(t.flags|=4194308),n=!1)}else{s=t.stateNode,U2(e,t),d=t.memoizedProps,p=t.type===t.elementType?d:Mi(t.type,d),s.props=p,g=t.pendingProps,f=s.context,c=a.contextType,typeof c=="object"&&c!==null?c=zi(c):(c=Xn(a)?fs:Cn.current,c=_l(t,c));var v=a.getDerivedStateFromProps;(m=typeof v=="function"||typeof s.getSnapshotBeforeUpdate=="function")||typeof s.UNSAFE_componentWillReceiveProps!="function"&&typeof s.componentWillReceiveProps!="function"||(d!==g||f!==c)&&Pk(t,s,n,c),ro=!1,f=t.memoizedState,s.state=f,Np(t,n,s,r);var k=t.memoizedState;d!==g||f!==k||Yn.current||ro?(typeof v=="function"&&(wf(t,a,v,n),k=t.memoizedState),(p=ro||Tk(t,a,p,n,f,k,c)||!1)?(m||typeof s.UNSAFE_componentWillUpdate!="function"&&typeof s.componentWillUpdate!="function"||(typeof s.componentWillUpdate=="function"&&s.componentWillUpdate(n,k,c),typeof s.UNSAFE_componentWillUpdate=="function"&&s.UNSAFE_componentWillUpdate(n,k,c)),typeof s.componentDidUpdate=="function"&&(t.flags|=4),typeof s.getSnapshotBeforeUpdate=="function"&&(t.flags|=1024)):(typeof s.componentDidUpdate!="function"||d===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),typeof s.getSnapshotBeforeUpdate!="function"||d===e.memoizedProps&&f===e.memoizedState||(t.flags|=1024),t.memoizedProps=n,t.memoizedState=k),s.props=n,s.state=k,s.context=c,n=p):(typeof s.componentDidUpdate!="function"||d===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),typeof s.getSnapshotBeforeUpdate!="function"||d===e.memoizedProps&&f===e.memoizedState||(t.flags|=1024),n=!1)}return Cf(e,t,a,n,o,r)}function Cf(e,t,a,n,r,o){hS(e,t);var s=(t.flags&128)!==0;if(!n&&!s)return r&&xk(t,a,!1),Fr(e,t,o);n=t.stateNode,AA.current=t;var d=s&&typeof a.getDerivedStateFromError!="function"?null:n.render();return t.flags|=1,e!==null&&s?(t.child=jl(t,e.child,null,o),t.child=jl(t,null,d,o)):Nn(e,t,d,o),t.memoizedState=n.state,r&&xk(t,a,!0),t.child}function fS(e){var t=e.stateNode;t.pendingContext?bk(e,t.pendingContext,t.pendingContext!==t.context):t.context&&bk(e,t.context,!1),hy(e,t.containerInfo)}function Ik(e,t,a,n,r){return Sl(),dy(r),t.flags|=256,Nn(e,t,a,n),t.child}var zf={dehydrated:null,treeContext:null,retryLane:0};function Tf(e){return{baseLanes:e,cachePool:null,transitions:null}}function vS(e,t,a){var n=t.pendingProps,r=Sa.current,o=!1,s=(t.flags&128)!==0,d;if((d=s)||(d=e!==null&&e.memoizedState===null?!1:(r&2)!==0),d?(o=!0,t.flags&=-129):(e===null||e.memoizedState!==null)&&(r|=1),ga(Sa,r&1),e===null)return xf(t),e=t.memoizedState,e!==null&&(e=e.dehydrated,e!==null)?(t.mode&1?e.data==="$!"?t.lanes=8:t.lanes=1073741824:t.lanes=1,null):(s=n.children,e=n.fallback,o?(n=t.mode,o=t.child,s={mode:"hidden",children:s},!(n&1)&&o!==null?(o.childLanes=0,o.pendingProps=s):o=Cm(s,n,0,null),e=us(e,n,a,null),o.return=t,e.return=t,o.sibling=e,t.child=o,t.child.memoizedState=Tf(a),t.memoizedState=zf,e):_y(t,s));if(r=e.memoizedState,r!==null&&(d=r.dehydrated,d!==null))return NA(e,t,s,n,d,r,a);if(o){o=n.fallback,s=t.mode,r=e.child,d=r.sibling;var c={mode:"hidden",children:n.children};return!(s&1)&&t.child!==r?(n=t.child,n.childLanes=0,n.pendingProps=c,t.deletions=null):(n=jo(r,c),n.subtreeFlags=r.subtreeFlags&14680064),d!==null?o=jo(d,o):(o=us(o,s,a,null),o.flags|=2),o.return=t,n.return=t,n.sibling=o,t.child=n,n=o,o=t.child,s=e.child.memoizedState,s=s===null?Tf(a):{baseLanes:s.baseLanes|a,cachePool:null,transitions:s.transitions},o.memoizedState=s,o.childLanes=e.childLanes&~a,t.memoizedState=zf,n}return o=e.child,e=o.sibling,n=jo(o,{mode:"visible",children:n.children}),!(t.mode&1)&&(n.lanes=a),n.return=t,n.sibling=null,e!==null&&(a=t.deletions,a===null?(t.deletions=[e],t.flags|=16):a.push(e)),t.child=n,t.memoizedState=null,n}function _y(e,t){return t=Cm({mode:"visible",children:t},e.mode,0,null),t.return=e,e.child=t}function hu(e,t,a,n){return n!==null&&dy(n),jl(t,e.child,null,a),e=_y(t,t.pendingProps.children),e.flags|=2,t.memoizedState=null,e}function NA(e,t,a,n,r,o,s){if(a)return t.flags&256?(t.flags&=-257,n=Xg(Error(We(422))),hu(e,t,s,n)):t.memoizedState!==null?(t.child=e.child,t.flags|=128,null):(o=n.fallback,r=t.mode,n=Cm({mode:"visible",children:n.children},r,0,null),o=us(o,r,s,null),o.flags|=2,n.return=t,o.return=t,n.sibling=o,t.child=n,t.mode&1&&jl(t,e.child,null,s),t.child.memoizedState=Tf(s),t.memoizedState=zf,o);if(!(t.mode&1))return hu(e,t,s,null);if(r.data==="$!"){if(n=r.nextSibling&&r.nextSibling.dataset,n)var d=n.dgst;return n=d,o=Error(We(419)),n=Xg(o,n,void 0),hu(e,t,s,n)}if(d=(s&e.childLanes)!==0,Zn||d){if(n=nn,n!==null){switch(s&-s){case 4:r=2;break;case 16:r=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:r=32;break;case 536870912:r=268435456;break;default:r=0}r=r&(n.suspendedLanes|s)?0:r,r!==0&&r!==o.retryLane&&(o.retryLane=r,Lr(e,r),Bi(n,e,r,-1))}return Py(),n=Xg(Error(We(421))),hu(e,t,s,n)}return r.data==="$?"?(t.flags|=128,t.child=e.child,t=VA.bind(null,e),r._reactRetry=t,null):(e=o.treeContext,ui=ko(r.nextSibling),pi=t,xa=!0,Ii=null,e!==null&&(ki[wi++]=zr,ki[wi++]=Tr,ki[wi++]=vs,zr=e.id,Tr=e.overflow,vs=t),t=_y(t,n.children),t.flags|=4096,t)}function Lk(e,t,a){e.lanes|=t;var n=e.alternate;n!==null&&(n.lanes|=t),kf(e.return,t,a)}function Jg(e,t,a,n,r){var o=e.memoizedState;o===null?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:n,tail:a,tailMode:r}:(o.isBackwards=t,o.rendering=null,o.renderingStartTime=0,o.last=n,o.tail=a,o.tailMode=r)}function yS(e,t,a){var n=t.pendingProps,r=n.revealOrder,o=n.tail;if(Nn(e,t,n.children,a),n=Sa.current,n&2)n=n&1|2,t.flags|=128;else{if(e!==null&&e.flags&128)e:for(e=t.child;e!==null;){if(e.tag===13)e.memoizedState!==null&&Lk(e,a,t);else if(e.tag===19)Lk(e,a,t);else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;e.sibling===null;){if(e.return===null||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}n&=1}if(ga(Sa,n),!(t.mode&1))t.memoizedState=null;else switch(r){case"forwards":for(a=t.child,r=null;a!==null;)e=a.alternate,e!==null&&Dp(e)===null&&(r=a),a=a.sibling;a=r,a===null?(r=t.child,t.child=null):(r=a.sibling,a.sibling=null),Jg(t,!1,r,a,o);break;case"backwards":for(a=null,r=t.child,t.child=null;r!==null;){if(e=r.alternate,e!==null&&Dp(e)===null){t.child=r;break}e=r.sibling,r.sibling=a,a=r,r=e}Jg(t,!0,a,null,o);break;case"together":Jg(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function qu(e,t){!(t.mode&1)&&e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2)}function Fr(e,t,a){if(e!==null&&(t.dependencies=e.dependencies),bs|=t.lanes,!(a&t.childLanes))return null;if(e!==null&&t.child!==e.child)throw Error(We(153));if(t.child!==null){for(e=t.child,a=jo(e,e.pendingProps),t.child=a,a.return=t;e.sibling!==null;)e=e.sibling,a=a.sibling=jo(e,e.pendingProps),a.return=t;a.sibling=null}return t.child}function DA(e,t,a){switch(t.tag){case 3:fS(t),Sl();break;case 5:$2(t);break;case 1:Xn(t.type)&&zp(t);break;case 4:hy(t,t.stateNode.containerInfo);break;case 10:var n=t.type._context,r=t.memoizedProps.value;ga(Ep,n._currentValue),n._currentValue=r;break;case 13:if(n=t.memoizedState,n!==null)return n.dehydrated!==null?(ga(Sa,Sa.current&1),t.flags|=128,null):a&t.child.childLanes?vS(e,t,a):(ga(Sa,Sa.current&1),e=Fr(e,t,a),e!==null?e.sibling:null);ga(Sa,Sa.current&1);break;case 19:if(n=(a&t.childLanes)!==0,e.flags&128){if(n)return yS(e,t,a);t.flags|=128}if(r=t.memoizedState,r!==null&&(r.rendering=null,r.tail=null,r.lastEffect=null),ga(Sa,Sa.current),n)break;return null;case 22:case 23:return t.lanes=0,gS(e,t,a)}return Fr(e,t,a)}var bS,Pf,xS,kS;bS=function(e,t){for(var a=t.child;a!==null;){if(a.tag===5||a.tag===6)e.appendChild(a.stateNode);else if(a.tag!==4&&a.child!==null){a.child.return=a,a=a.child;continue}if(a===t)break;for(;a.sibling===null;){if(a.return===null||a.return===t)return;a=a.return}a.sibling.return=a.return,a=a.sibling}};Pf=function(){};xS=function(e,t,a,n){var r=e.memoizedProps;if(r!==n){e=t.stateNode,rs(lr.current);var o=null;switch(a){case"input":r=Yh(e,r),n=Yh(e,n),o=[];break;case"select":r=Ca({},r,{value:void 0}),n=Ca({},n,{value:void 0}),o=[];break;case"textarea":r=Qh(e,r),n=Qh(e,n),o=[];break;default:typeof r.onClick!="function"&&typeof n.onClick=="function"&&(e.onclick=jp)}tf(a,n);var s;a=null;for(p in r)if(!n.hasOwnProperty(p)&&r.hasOwnProperty(p)&&r[p]!=null)if(p==="style"){var d=r[p];for(s in d)d.hasOwnProperty(s)&&(a||(a={}),a[s]="")}else p!=="dangerouslySetInnerHTML"&&p!=="children"&&p!=="suppressContentEditableWarning"&&p!=="suppressHydrationWarning"&&p!=="autoFocus"&&(Kd.hasOwnProperty(p)?o||(o=[]):(o=o||[]).push(p,null));for(p in n){var c=n[p];if(d=r!=null?r[p]:void 0,n.hasOwnProperty(p)&&c!==d&&(c!=null||d!=null))if(p==="style")if(d){for(s in d)!d.hasOwnProperty(s)||c&&c.hasOwnProperty(s)||(a||(a={}),a[s]="");for(s in c)c.hasOwnProperty(s)&&d[s]!==c[s]&&(a||(a={}),a[s]=c[s])}else a||(o||(o=[]),o.push(p,a)),a=c;else p==="dangerouslySetInnerHTML"?(c=c?c.__html:void 0,d=d?d.__html:void 0,c!=null&&d!==c&&(o=o||[]).push(p,c)):p==="children"?typeof c!="string"&&typeof c!="number"||(o=o||[]).push(p,""+c):p!=="suppressContentEditableWarning"&&p!=="suppressHydrationWarning"&&(Kd.hasOwnProperty(p)?(c!=null&&p==="onScroll"&&ha("scroll",e),o||d===c||(o=[])):(o=o||[]).push(p,c))}a&&(o=o||[]).push("style",a);var p=o;(t.updateQueue=p)&&(t.flags|=4)}};kS=function(e,t,a,n){a!==n&&(t.flags|=4)};function ud(e,t){if(!xa)switch(e.tailMode){case"hidden":t=e.tail;for(var a=null;t!==null;)t.alternate!==null&&(a=t),t=t.sibling;a===null?e.tail=null:a.sibling=null;break;case"collapsed":a=e.tail;for(var n=null;a!==null;)a.alternate!==null&&(n=a),a=a.sibling;n===null?t||e.tail===null?e.tail=null:e.tail.sibling=null:n.sibling=null}}function xn(e){var t=e.alternate!==null&&e.alternate.child===e.child,a=0,n=0;if(t)for(var r=e.child;r!==null;)a|=r.lanes|r.childLanes,n|=r.subtreeFlags&14680064,n|=r.flags&14680064,r.return=e,r=r.sibling;else for(r=e.child;r!==null;)a|=r.lanes|r.childLanes,n|=r.subtreeFlags,n|=r.flags,r.return=e,r=r.sibling;return e.subtreeFlags|=n,e.childLanes=a,t}function MA(e,t,a){var n=t.pendingProps;switch(ly(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return xn(t),null;case 1:return Xn(t.type)&&Cp(),xn(t),null;case 3:return n=t.stateNode,Cl(),ya(Yn),ya(Cn),vy(),n.pendingContext&&(n.context=n.pendingContext,n.pendingContext=null),(e===null||e.child===null)&&(mu(t)?t.flags|=4:e===null||e.memoizedState.isDehydrated&&!(t.flags&256)||(t.flags|=1024,Ii!==null&&(Lf(Ii),Ii=null))),Pf(e,t),xn(t),null;case 5:fy(t);var r=rs(ic.current);if(a=t.type,e!==null&&t.stateNode!=null)xS(e,t,a,n,r),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!n){if(t.stateNode===null)throw Error(We(166));return xn(t),null}if(e=rs(lr.current),mu(t)){n=t.stateNode,a=t.type;var o=t.memoizedProps;switch(n[ir]=t,n[ac]=o,e=(t.mode&1)!==0,a){case"dialog":ha("cancel",n),ha("close",n);break;case"iframe":case"object":case"embed":ha("load",n);break;case"video":case"audio":for(r=0;r<\/script>",e=e.removeChild(e.firstChild)):typeof n.is=="string"?e=s.createElement(a,{is:n.is}):(e=s.createElement(a),a==="select"&&(s=e,n.multiple?s.multiple=!0:n.size&&(s.size=n.size))):e=s.createElementNS(e,a),e[ir]=t,e[ac]=n,bS(e,t,!1,!1),t.stateNode=e;e:{switch(s=af(a,n),a){case"dialog":ha("cancel",e),ha("close",e),r=n;break;case"iframe":case"object":case"embed":ha("load",e),r=n;break;case"video":case"audio":for(r=0;rTl&&(t.flags|=128,n=!0,ud(o,!1),t.lanes=4194304)}else{if(!n)if(e=Dp(s),e!==null){if(t.flags|=128,n=!0,a=e.updateQueue,a!==null&&(t.updateQueue=a,t.flags|=4),ud(o,!0),o.tail===null&&o.tailMode==="hidden"&&!s.alternate&&!xa)return xn(t),null}else 2*La()-o.renderingStartTime>Tl&&a!==1073741824&&(t.flags|=128,n=!0,ud(o,!1),t.lanes=4194304);o.isBackwards?(s.sibling=t.child,t.child=s):(a=o.last,a!==null?a.sibling=s:t.child=s,o.last=s)}return o.tail!==null?(t=o.tail,o.rendering=t,o.tail=t.sibling,o.renderingStartTime=La(),t.sibling=null,a=Sa.current,ga(Sa,n?a&1|2:a&1),t):(xn(t),null);case 22:case 23:return Ty(),n=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==n&&(t.flags|=8192),n&&t.mode&1?oi&1073741824&&(xn(t),t.subtreeFlags&6&&(t.flags|=8192)):xn(t),null;case 24:return null;case 25:return null}throw Error(We(156,t.tag))}function RA(e,t){switch(ly(t),t.tag){case 1:return Xn(t.type)&&Cp(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Cl(),ya(Yn),ya(Cn),vy(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return fy(t),null;case 13:if(ya(Sa),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(We(340));Sl()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return ya(Sa),null;case 4:return Cl(),null;case 10:return py(t.type._context),null;case 22:case 23:return Ty(),null;case 24:return null;default:return null}}var fu=!1,wn=!1,IA=typeof WeakSet=="function"?WeakSet:Set,Je=null;function rl(e,t){var a=e.ref;if(a!==null)if(typeof a=="function")try{a(null)}catch(n){Ea(e,t,n)}else a.current=null}function Ef(e,t,a){try{a()}catch(n){Ea(e,t,n)}}var Fk=!1;function LA(e,t){if(mf=wp,e=C2(),oy(e)){if("selectionStart"in e)var a={start:e.selectionStart,end:e.selectionEnd};else e:{a=(a=e.ownerDocument)&&a.defaultView||window;var n=a.getSelection&&a.getSelection();if(n&&n.rangeCount!==0){a=n.anchorNode;var r=n.anchorOffset,o=n.focusNode;n=n.focusOffset;try{a.nodeType,o.nodeType}catch{a=null;break e}var s=0,d=-1,c=-1,p=0,m=0,g=e,f=null;t:for(;;){for(var v;g!==a||r!==0&&g.nodeType!==3||(d=s+r),g!==o||n!==0&&g.nodeType!==3||(c=s+n),g.nodeType===3&&(s+=g.nodeValue.length),(v=g.firstChild)!==null;)f=g,g=v;for(;;){if(g===e)break t;if(f===a&&++p===r&&(d=s),f===o&&++m===n&&(c=s),(v=g.nextSibling)!==null)break;g=f,f=g.parentNode}g=v}a=d===-1||c===-1?null:{start:d,end:c}}else a=null}a=a||{start:0,end:0}}else a=null;for(gf={focusedElem:e,selectionRange:a},wp=!1,Je=t;Je!==null;)if(t=Je,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,Je=e;else for(;Je!==null;){t=Je;try{var k=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(k!==null){var x=k.memoizedProps,S=k.memoizedState,b=t.stateNode,w=b.getSnapshotBeforeUpdate(t.elementType===t.type?x:Mi(t.type,x),S);b.__reactInternalSnapshotBeforeUpdate=w}break;case 3:var j=t.stateNode.containerInfo;j.nodeType===1?j.textContent="":j.nodeType===9&&j.documentElement&&j.removeChild(j.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(We(163))}}catch(P){Ea(t,t.return,P)}if(e=t.sibling,e!==null){e.return=t.return,Je=e;break}Je=t.return}return k=Fk,Fk=!1,k}function Id(e,t,a){var n=t.updateQueue;if(n=n!==null?n.lastEffect:null,n!==null){var r=n=n.next;do{if((r.tag&e)===e){var o=r.destroy;r.destroy=void 0,o!==void 0&&Ef(t,a,o)}r=r.next}while(r!==n)}}function Sm(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var a=t=t.next;do{if((a.tag&e)===e){var n=a.create;a.destroy=n()}a=a.next}while(a!==t)}}function Af(e){var t=e.ref;if(t!==null){var a=e.stateNode;switch(e.tag){case 5:e=a;break;default:e=a}typeof t=="function"?t(e):t.current=e}}function wS(e){var t=e.alternate;t!==null&&(e.alternate=null,wS(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[ir],delete t[ac],delete t[vf],delete t[bA],delete t[xA])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function _S(e){return e.tag===5||e.tag===3||e.tag===4}function Ok(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||_S(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Nf(e,t,a){var n=e.tag;if(n===5||n===6)e=e.stateNode,t?a.nodeType===8?a.parentNode.insertBefore(e,t):a.insertBefore(e,t):(a.nodeType===8?(t=a.parentNode,t.insertBefore(e,a)):(t=a,t.appendChild(e)),a=a._reactRootContainer,a!=null||t.onclick!==null||(t.onclick=jp));else if(n!==4&&(e=e.child,e!==null))for(Nf(e,t,a),e=e.sibling;e!==null;)Nf(e,t,a),e=e.sibling}function Df(e,t,a){var n=e.tag;if(n===5||n===6)e=e.stateNode,t?a.insertBefore(e,t):a.appendChild(e);else if(n!==4&&(e=e.child,e!==null))for(Df(e,t,a),e=e.sibling;e!==null;)Df(e,t,a),e=e.sibling}var ln=null,Ri=!1;function eo(e,t,a){for(a=a.child;a!==null;)SS(e,t,a),a=a.sibling}function SS(e,t,a){if(sr&&typeof sr.onCommitFiberUnmount=="function")try{sr.onCommitFiberUnmount(fm,a)}catch{}switch(a.tag){case 5:wn||rl(a,t);case 6:var n=ln,r=Ri;ln=null,eo(e,t,a),ln=n,Ri=r,ln!==null&&(Ri?(e=ln,a=a.stateNode,e.nodeType===8?e.parentNode.removeChild(a):e.removeChild(a)):ln.removeChild(a.stateNode));break;case 18:ln!==null&&(Ri?(e=ln,a=a.stateNode,e.nodeType===8?Vg(e.parentNode,a):e.nodeType===1&&Vg(e,a),Xd(e)):Vg(ln,a.stateNode));break;case 4:n=ln,r=Ri,ln=a.stateNode.containerInfo,Ri=!0,eo(e,t,a),ln=n,Ri=r;break;case 0:case 11:case 14:case 15:if(!wn&&(n=a.updateQueue,n!==null&&(n=n.lastEffect,n!==null))){r=n=n.next;do{var o=r,s=o.destroy;o=o.tag,s!==void 0&&(o&2||o&4)&&Ef(a,t,s),r=r.next}while(r!==n)}eo(e,t,a);break;case 1:if(!wn&&(rl(a,t),n=a.stateNode,typeof n.componentWillUnmount=="function"))try{n.props=a.memoizedProps,n.state=a.memoizedState,n.componentWillUnmount()}catch(d){Ea(a,t,d)}eo(e,t,a);break;case 21:eo(e,t,a);break;case 22:a.mode&1?(wn=(n=wn)||a.memoizedState!==null,eo(e,t,a),wn=n):eo(e,t,a);break;default:eo(e,t,a)}}function Bk(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var a=e.stateNode;a===null&&(a=e.stateNode=new IA),t.forEach(function(n){var r=KA.bind(null,e,n);a.has(n)||(a.add(n),n.then(r,r))})}}function Di(e,t){var a=t.deletions;if(a!==null)for(var n=0;nr&&(r=s),n&=~o}if(n=r,n=La()-n,n=(120>n?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*OA(n/1960))-n,10e?16:e,po===null)var n=!1;else{if(e=po,po=null,Fp=0,Kt&6)throw Error(We(331));var r=Kt;for(Kt|=4,Je=e.current;Je!==null;){var o=Je,s=o.child;if(Je.flags&16){var d=o.deletions;if(d!==null){for(var c=0;cLa()-Cy?cs(e,0):jy|=a),Jn(e,t)}function NS(e,t){t===0&&(e.mode&1?(t=su,su<<=1,!(su&130023424)&&(su=4194304)):t=1);var a=Rn();e=Lr(e,t),e!==null&&(_c(e,t,a),Jn(e,a))}function VA(e){var t=e.memoizedState,a=0;t!==null&&(a=t.retryLane),NS(e,a)}function KA(e,t){var a=0;switch(e.tag){case 13:var n=e.stateNode,r=e.memoizedState;r!==null&&(a=r.retryLane);break;case 19:n=e.stateNode;break;default:throw Error(We(314))}n!==null&&n.delete(t),NS(e,a)}var DS;DS=function(e,t,a){if(e!==null)if(e.memoizedProps!==t.pendingProps||Yn.current)Zn=!0;else{if(!(e.lanes&a)&&!(t.flags&128))return Zn=!1,DA(e,t,a);Zn=!!(e.flags&131072)}else Zn=!1,xa&&t.flags&1048576&&L2(t,Pp,t.index);switch(t.lanes=0,t.tag){case 2:var n=t.type;qu(e,t),e=t.pendingProps;var r=_l(t,Cn.current);vl(t,a),r=by(null,t,n,e,r,a);var o=xy();return t.flags|=1,typeof r=="object"&&r!==null&&typeof r.render=="function"&&r.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,Xn(n)?(o=!0,zp(t)):o=!1,t.memoizedState=r.state!==null&&r.state!==void 0?r.state:null,gy(t),r.updater=_m,t.stateNode=r,r._reactInternals=t,_f(t,n,e,a),t=Cf(null,t,n,!0,o,a)):(t.tag=0,xa&&o&&sy(t),Nn(null,t,r,a),t=t.child),t;case 16:n=t.elementType;e:{switch(qu(e,t),e=t.pendingProps,r=n._init,n=r(n._payload),t.type=n,r=t.tag=GA(n),e=Mi(n,e),r){case 0:t=jf(null,t,n,e,a);break e;case 1:t=Rk(null,t,n,e,a);break e;case 11:t=Dk(null,t,n,e,a);break e;case 14:t=Mk(null,t,n,Mi(n.type,e),a);break e}throw Error(We(306,n,""))}return t;case 0:return n=t.type,r=t.pendingProps,r=t.elementType===n?r:Mi(n,r),jf(e,t,n,r,a);case 1:return n=t.type,r=t.pendingProps,r=t.elementType===n?r:Mi(n,r),Rk(e,t,n,r,a);case 3:e:{if(fS(t),e===null)throw Error(We(387));n=t.pendingProps,o=t.memoizedState,r=o.element,U2(e,t),Np(t,n,null,a);var s=t.memoizedState;if(n=s.element,o.isDehydrated)if(o={element:n,isDehydrated:!1,cache:s.cache,pendingSuspenseBoundaries:s.pendingSuspenseBoundaries,transitions:s.transitions},t.updateQueue.baseState=o,t.memoizedState=o,t.flags&256){r=zl(Error(We(423)),t),t=Ik(e,t,n,a,r);break e}else if(n!==r){r=zl(Error(We(424)),t),t=Ik(e,t,n,a,r);break e}else for(ui=ko(t.stateNode.containerInfo.firstChild),pi=t,xa=!0,Ii=null,a=H2(t,null,n,a),t.child=a;a;)a.flags=a.flags&-3|4096,a=a.sibling;else{if(Sl(),n===r){t=Fr(e,t,a);break e}Nn(e,t,n,a)}t=t.child}return t;case 5:return $2(t),e===null&&xf(t),n=t.type,r=t.pendingProps,o=e!==null?e.memoizedProps:null,s=r.children,hf(n,r)?s=null:o!==null&&hf(n,o)&&(t.flags|=32),hS(e,t),Nn(e,t,s,a),t.child;case 6:return e===null&&xf(t),null;case 13:return vS(e,t,a);case 4:return hy(t,t.stateNode.containerInfo),n=t.pendingProps,e===null?t.child=jl(t,null,n,a):Nn(e,t,n,a),t.child;case 11:return n=t.type,r=t.pendingProps,r=t.elementType===n?r:Mi(n,r),Dk(e,t,n,r,a);case 7:return Nn(e,t,t.pendingProps,a),t.child;case 8:return Nn(e,t,t.pendingProps.children,a),t.child;case 12:return Nn(e,t,t.pendingProps.children,a),t.child;case 10:e:{if(n=t.type._context,r=t.pendingProps,o=t.memoizedProps,s=r.value,ga(Ep,n._currentValue),n._currentValue=s,o!==null)if(Ui(o.value,s)){if(o.children===r.children&&!Yn.current){t=Fr(e,t,a);break e}}else for(o=t.child,o!==null&&(o.return=t);o!==null;){var d=o.dependencies;if(d!==null){s=o.child;for(var c=d.firstContext;c!==null;){if(c.context===n){if(o.tag===1){c=Ar(-1,a&-a),c.tag=2;var p=o.updateQueue;if(p!==null){p=p.shared;var m=p.pending;m===null?c.next=c:(c.next=m.next,m.next=c),p.pending=c}}o.lanes|=a,c=o.alternate,c!==null&&(c.lanes|=a),kf(o.return,a,t),d.lanes|=a;break}c=c.next}}else if(o.tag===10)s=o.type===t.type?null:o.child;else if(o.tag===18){if(s=o.return,s===null)throw Error(We(341));s.lanes|=a,d=s.alternate,d!==null&&(d.lanes|=a),kf(s,a,t),s=o.sibling}else s=o.child;if(s!==null)s.return=o;else for(s=o;s!==null;){if(s===t){s=null;break}if(o=s.sibling,o!==null){o.return=s.return,s=o;break}s=s.return}o=s}Nn(e,t,r.children,a),t=t.child}return t;case 9:return r=t.type,n=t.pendingProps.children,vl(t,a),r=zi(r),n=n(r),t.flags|=1,Nn(e,t,n,a),t.child;case 14:return n=t.type,r=Mi(n,t.pendingProps),r=Mi(n.type,r),Mk(e,t,n,r,a);case 15:return mS(e,t,t.type,t.pendingProps,a);case 17:return n=t.type,r=t.pendingProps,r=t.elementType===n?r:Mi(n,r),qu(e,t),t.tag=1,Xn(n)?(e=!0,zp(t)):e=!1,vl(t,a),cS(t,n,r),_f(t,n,r,a),Cf(null,t,n,!0,e,a);case 19:return yS(e,t,a);case 22:return gS(e,t,a)}throw Error(We(156,t.tag))};function MS(e,t){return s2(e,t)}function qA(e,t,a,n){this.tag=e,this.key=a,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=n,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Si(e,t,a,n){return new qA(e,t,a,n)}function Ey(e){return e=e.prototype,!(!e||!e.isReactComponent)}function GA(e){if(typeof e=="function")return Ey(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Zv)return 11;if(e===Yv)return 14}return 2}function jo(e,t){var a=e.alternate;return a===null?(a=Si(e.tag,t,e.key,e.mode),a.elementType=e.elementType,a.type=e.type,a.stateNode=e.stateNode,a.alternate=e,e.alternate=a):(a.pendingProps=t,a.type=e.type,a.flags=0,a.subtreeFlags=0,a.deletions=null),a.flags=e.flags&14680064,a.childLanes=e.childLanes,a.lanes=e.lanes,a.child=e.child,a.memoizedProps=e.memoizedProps,a.memoizedState=e.memoizedState,a.updateQueue=e.updateQueue,t=e.dependencies,a.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},a.sibling=e.sibling,a.index=e.index,a.ref=e.ref,a}function Yu(e,t,a,n,r,o){var s=2;if(n=e,typeof e=="function")Ey(e)&&(s=1);else if(typeof e=="string")s=5;else e:switch(e){case Ys:return us(a.children,r,o,t);case Gv:s=8,r|=8;break;case Kh:return e=Si(12,a,t,r|2),e.elementType=Kh,e.lanes=o,e;case qh:return e=Si(13,a,t,r),e.elementType=qh,e.lanes=o,e;case Gh:return e=Si(19,a,t,r),e.elementType=Gh,e.lanes=o,e;case $_:return Cm(a,r,o,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case W_:s=10;break e;case U_:s=9;break e;case Zv:s=11;break e;case Yv:s=14;break e;case io:s=16,n=null;break e}throw Error(We(130,e==null?e:typeof e,""))}return t=Si(s,a,t,r),t.elementType=e,t.type=n,t.lanes=o,t}function us(e,t,a,n){return e=Si(7,e,n,t),e.lanes=a,e}function Cm(e,t,a,n){return e=Si(22,e,n,t),e.elementType=$_,e.lanes=a,e.stateNode={isHidden:!1},e}function Qg(e,t,a){return e=Si(6,e,null,t),e.lanes=a,e}function eh(e,t,a){return t=Si(4,e.children!==null?e.children:[],e.key,t),t.lanes=a,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function ZA(e,t,a,n,r){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Mg(0),this.expirationTimes=Mg(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Mg(0),this.identifierPrefix=n,this.onRecoverableError=r,this.mutableSourceEagerHydrationData=null}function Ay(e,t,a,n,r,o,s,d,c){return e=new ZA(e,t,a,d,c),t===1?(t=1,o===!0&&(t|=8)):t=0,o=Si(3,null,null,t),e.current=o,o.stateNode=e,o.memoizedState={element:n,isDehydrated:a,cache:null,transitions:null,pendingSuspenseBoundaries:null},gy(o),e}function YA(e,t,a){var n=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(FS)}catch(e){console.error(e)}}FS(),F_.exports=hi;var Ry=F_.exports;const Ut=zs(Ry);var Gk=Ry;$h.createRoot=Gk.createRoot,$h.hydrateRoot=Gk.hydrateRoot;/** * @remix-run/router v1.23.2 * * Copyright (c) Remix Software Inc. @@ -46,7 +46,7 @@ Error generating stack: `+o.message+` * LICENSE.md file in the root directory of this source tree. * * @license MIT - */function dc(){return dc=Object.assign?Object.assign.bind():function(e){for(var t=1;t"u")throw new Error(t)}function Ry(e,t){if(!e){typeof console<"u"&&console.warn(t);try{throw new Error(t)}catch{}}}function tN(){return Math.random().toString(36).substr(2,8)}function Zk(e,t){return{usr:e.state,key:e.key,idx:t}}function Ff(e,t,a,n){return a===void 0&&(a=null),dc({pathname:typeof e=="string"?e:e.pathname,search:"",hash:""},typeof t=="string"?Bl(t):t,{state:a,key:t&&t.key||n||tN()})}function Hp(e){let{pathname:t="/",search:a="",hash:n=""}=e;return a&&a!=="?"&&(t+=a.charAt(0)==="?"?a:"?"+a),n&&n!=="#"&&(t+=n.charAt(0)==="#"?n:"#"+n),t}function Bl(e){let t={};if(e){let a=e.indexOf("#");a>=0&&(t.hash=e.substr(a),e=e.substr(0,a));let n=e.indexOf("?");n>=0&&(t.search=e.substr(n),e=e.substr(0,n)),e&&(t.pathname=e)}return t}function aN(e,t,a,n){n===void 0&&(n={});let{window:r=document.defaultView,v5Compat:o=!1}=n,s=r.history,d=mo.Pop,c=null,p=m();p==null&&(p=0,s.replaceState(dc({},s.state,{idx:p}),""));function m(){return(s.state||{idx:null}).idx}function g(){d=mo.Pop;let S=m(),b=S==null?null:S-p;p=S,c&&c({action:d,location:x.location,delta:b})}function f(S,b){d=mo.Push;let w=Ff(x.location,S,b);p=m()+1;let j=Zk(w,p),P=x.createHref(w);try{s.pushState(j,"",P)}catch(M){if(M instanceof DOMException&&M.name==="DataCloneError")throw M;r.location.assign(P)}o&&c&&c({action:d,location:x.location,delta:1})}function v(S,b){d=mo.Replace;let w=Ff(x.location,S,b);p=m();let j=Zk(w,p),P=x.createHref(w);s.replaceState(j,"",P),o&&c&&c({action:d,location:x.location,delta:0})}function k(S){let b=r.location.origin!=="null"?r.location.origin:r.location.href,w=typeof S=="string"?S:Hp(S);return w=w.replace(/ $/,"%20"),Oa(b,"No window.location.(origin|href) available to create URL for href: "+w),new URL(w,b)}let x={get action(){return d},get location(){return e(r,s)},listen(S){if(c)throw new Error("A history only accepts one active listener");return r.addEventListener(Gk,g),c=S,()=>{r.removeEventListener(Gk,g),c=null}},createHref(S){return t(r,S)},createURL:k,encodeLocation(S){let b=k(S);return{pathname:b.pathname,search:b.search,hash:b.hash}},push:f,replace:v,go(S){return s.go(S)}};return x}var Yk;(function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"})(Yk||(Yk={}));function nN(e,t,a){return a===void 0&&(a="/"),iN(e,t,a)}function iN(e,t,a,n){let r=typeof t=="string"?Bl(t):t,o=Iy(r.pathname||"/",a);if(o==null)return null;let s=FS(e);rN(s);let d=null;for(let c=0;d==null&&c{let c={relativePath:d===void 0?o.path||"":d,caseSensitive:o.caseSensitive===!0,childrenIndex:s,route:o};c.relativePath.startsWith("/")&&(Oa(c.relativePath.startsWith(n),'Absolute route path "'+c.relativePath+'" nested under path '+('"'+n+'" is not valid. An absolute child route path ')+"must start with the combined path of all its parent routes."),c.relativePath=c.relativePath.slice(n.length));let p=Co([n,c.relativePath]),m=a.concat(c);o.children&&o.children.length>0&&(Oa(o.index!==!0,"Index routes must not have child routes. Please remove "+('all child routes from route path "'+p+'".')),FS(o.children,t,m,p)),!(o.path==null&&!o.index)&&t.push({path:p,score:pN(p,o.index),routesMeta:m})};return e.forEach((o,s)=>{var d;if(o.path===""||!((d=o.path)!=null&&d.includes("?")))r(o,s);else for(let c of OS(o.path))r(o,s,c)}),t}function OS(e){let t=e.split("/");if(t.length===0)return[];let[a,...n]=t,r=a.endsWith("?"),o=a.replace(/\?$/,"");if(n.length===0)return r?[o,""]:[o];let s=OS(n.join("/")),d=[];return d.push(...s.map(c=>c===""?o:[o,c].join("/"))),r&&d.push(...s),d.map(c=>e.startsWith("/")&&c===""?"/":c)}function rN(e){e.sort((t,a)=>t.score!==a.score?a.score-t.score:mN(t.routesMeta.map(n=>n.childrenIndex),a.routesMeta.map(n=>n.childrenIndex)))}const oN=/^:[\w-]+$/,sN=3,lN=2,dN=1,cN=10,uN=-2,Xk=e=>e==="*";function pN(e,t){let a=e.split("/"),n=a.length;return a.some(Xk)&&(n+=uN),t&&(n+=lN),a.filter(r=>!Xk(r)).reduce((r,o)=>r+(oN.test(o)?sN:o===""?dN:cN),n)}function mN(e,t){return e.length===t.length&&e.slice(0,-1).every((n,r)=>n===t[r])?e[e.length-1]-t[t.length-1]:0}function gN(e,t,a){let{routesMeta:n}=e,r={},o="/",s=[];for(let d=0;d{let{paramName:f,isOptional:v}=m;if(f==="*"){let x=d[g]||"";s=o.slice(0,o.length-x.length).replace(/(.)\/+$/,"$1")}const k=d[g];return v&&!k?p[f]=void 0:p[f]=(k||"").replace(/%2F/g,"/"),p},{}),pathname:o,pathnameBase:s,pattern:e}}function fN(e,t,a){t===void 0&&(t=!1),a===void 0&&(a=!0),Ry(e==="*"||!e.endsWith("*")||e.endsWith("/*"),'Route path "'+e+'" will be treated as if it were '+('"'+e.replace(/\*$/,"/*")+'" because the `*` character must ')+"always follow a `/` in the pattern. To get rid of this warning, "+('please change the route path to "'+e.replace(/\*$/,"/*")+'".'));let n=[],r="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(s,d,c)=>(n.push({paramName:d,isOptional:c!=null}),c?"/?([^\\/]+)?":"/([^\\/]+)"));return e.endsWith("*")?(n.push({paramName:"*"}),r+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):a?r+="\\/*$":e!==""&&e!=="/"&&(r+="(?:(?=\\/|$))"),[new RegExp(r,t?void 0:"i"),n]}function vN(e){try{return e.split("/").map(t=>decodeURIComponent(t).replace(/\//g,"%2F")).join("/")}catch(t){return Ry(!1,'The URL path "'+e+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent '+("encoding ("+t+").")),e}}function Iy(e,t){if(t==="/")return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let a=t.endsWith("/")?t.length-1:t.length,n=e.charAt(a);return n&&n!=="/"?null:e.slice(a)||"/"}const yN=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,bN=e=>yN.test(e);function xN(e,t){t===void 0&&(t="/");let{pathname:a,search:n="",hash:r=""}=typeof e=="string"?Bl(e):e,o;if(a)if(bN(a))o=a;else{if(a.includes("//")){let s=a;a=a.replace(/\/\/+/g,"/"),Ry(!1,"Pathnames cannot have embedded double slashes - normalizing "+(s+" -> "+a))}a.startsWith("/")?o=Jk(a.substring(1),"/"):o=Jk(a,t)}else o=t;return{pathname:o,search:_N(n),hash:SN(r)}}function Jk(e,t){let a=t.replace(/\/+$/,"").split("/");return e.split("/").forEach(r=>{r===".."?a.length>1&&a.pop():r!=="."&&a.push(r)}),a.length>1?a.join("/"):"/"}function th(e,t,a,n){return"Cannot include a '"+e+"' character in a manually specified "+("`to."+t+"` field ["+JSON.stringify(n)+"]. Please separate it out to the ")+("`to."+a+"` field. Alternatively you may provide the full path as ")+'a string in and the router will parse it for you.'}function kN(e){return e.filter((t,a)=>a===0||t.route.path&&t.route.path.length>0)}function Ly(e,t){let a=kN(e);return t?a.map((n,r)=>r===a.length-1?n.pathname:n.pathnameBase):a.map(n=>n.pathnameBase)}function Fy(e,t,a,n){n===void 0&&(n=!1);let r;typeof e=="string"?r=Bl(e):(r=dc({},e),Oa(!r.pathname||!r.pathname.includes("?"),th("?","pathname","search",r)),Oa(!r.pathname||!r.pathname.includes("#"),th("#","pathname","hash",r)),Oa(!r.search||!r.search.includes("#"),th("#","search","hash",r)));let o=e===""||r.pathname==="",s=o?"/":r.pathname,d;if(s==null)d=a;else{let g=t.length-1;if(!n&&s.startsWith("..")){let f=s.split("/");for(;f[0]==="..";)f.shift(),g-=1;r.pathname=f.join("/")}d=g>=0?t[g]:"/"}let c=xN(r,d),p=s&&s!=="/"&&s.endsWith("/"),m=(o||s===".")&&a.endsWith("/");return!c.pathname.endsWith("/")&&(p||m)&&(c.pathname+="/"),c}const Co=e=>e.join("/").replace(/\/\/+/g,"/"),wN=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),_N=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,SN=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e;function jN(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.internal=="boolean"&&"data"in e}const BS=["post","put","patch","delete"];new Set(BS);const CN=["get",...BS];new Set(CN);/** + */function dc(){return dc=Object.assign?Object.assign.bind():function(e){for(var t=1;t"u")throw new Error(t)}function Iy(e,t){if(!e){typeof console<"u"&&console.warn(t);try{throw new Error(t)}catch{}}}function aN(){return Math.random().toString(36).substr(2,8)}function Yk(e,t){return{usr:e.state,key:e.key,idx:t}}function Ff(e,t,a,n){return a===void 0&&(a=null),dc({pathname:typeof e=="string"?e:e.pathname,search:"",hash:""},typeof t=="string"?Bl(t):t,{state:a,key:t&&t.key||n||aN()})}function Hp(e){let{pathname:t="/",search:a="",hash:n=""}=e;return a&&a!=="?"&&(t+=a.charAt(0)==="?"?a:"?"+a),n&&n!=="#"&&(t+=n.charAt(0)==="#"?n:"#"+n),t}function Bl(e){let t={};if(e){let a=e.indexOf("#");a>=0&&(t.hash=e.substr(a),e=e.substr(0,a));let n=e.indexOf("?");n>=0&&(t.search=e.substr(n),e=e.substr(0,n)),e&&(t.pathname=e)}return t}function nN(e,t,a,n){n===void 0&&(n={});let{window:r=document.defaultView,v5Compat:o=!1}=n,s=r.history,d=mo.Pop,c=null,p=m();p==null&&(p=0,s.replaceState(dc({},s.state,{idx:p}),""));function m(){return(s.state||{idx:null}).idx}function g(){d=mo.Pop;let S=m(),b=S==null?null:S-p;p=S,c&&c({action:d,location:x.location,delta:b})}function f(S,b){d=mo.Push;let w=Ff(x.location,S,b);p=m()+1;let j=Yk(w,p),P=x.createHref(w);try{s.pushState(j,"",P)}catch(M){if(M instanceof DOMException&&M.name==="DataCloneError")throw M;r.location.assign(P)}o&&c&&c({action:d,location:x.location,delta:1})}function v(S,b){d=mo.Replace;let w=Ff(x.location,S,b);p=m();let j=Yk(w,p),P=x.createHref(w);s.replaceState(j,"",P),o&&c&&c({action:d,location:x.location,delta:0})}function k(S){let b=r.location.origin!=="null"?r.location.origin:r.location.href,w=typeof S=="string"?S:Hp(S);return w=w.replace(/ $/,"%20"),Oa(b,"No window.location.(origin|href) available to create URL for href: "+w),new URL(w,b)}let x={get action(){return d},get location(){return e(r,s)},listen(S){if(c)throw new Error("A history only accepts one active listener");return r.addEventListener(Zk,g),c=S,()=>{r.removeEventListener(Zk,g),c=null}},createHref(S){return t(r,S)},createURL:k,encodeLocation(S){let b=k(S);return{pathname:b.pathname,search:b.search,hash:b.hash}},push:f,replace:v,go(S){return s.go(S)}};return x}var Xk;(function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"})(Xk||(Xk={}));function iN(e,t,a){return a===void 0&&(a="/"),rN(e,t,a)}function rN(e,t,a,n){let r=typeof t=="string"?Bl(t):t,o=Ly(r.pathname||"/",a);if(o==null)return null;let s=OS(e);oN(s);let d=null;for(let c=0;d==null&&c{let c={relativePath:d===void 0?o.path||"":d,caseSensitive:o.caseSensitive===!0,childrenIndex:s,route:o};c.relativePath.startsWith("/")&&(Oa(c.relativePath.startsWith(n),'Absolute route path "'+c.relativePath+'" nested under path '+('"'+n+'" is not valid. An absolute child route path ')+"must start with the combined path of all its parent routes."),c.relativePath=c.relativePath.slice(n.length));let p=Co([n,c.relativePath]),m=a.concat(c);o.children&&o.children.length>0&&(Oa(o.index!==!0,"Index routes must not have child routes. Please remove "+('all child routes from route path "'+p+'".')),OS(o.children,t,m,p)),!(o.path==null&&!o.index)&&t.push({path:p,score:mN(p,o.index),routesMeta:m})};return e.forEach((o,s)=>{var d;if(o.path===""||!((d=o.path)!=null&&d.includes("?")))r(o,s);else for(let c of BS(o.path))r(o,s,c)}),t}function BS(e){let t=e.split("/");if(t.length===0)return[];let[a,...n]=t,r=a.endsWith("?"),o=a.replace(/\?$/,"");if(n.length===0)return r?[o,""]:[o];let s=BS(n.join("/")),d=[];return d.push(...s.map(c=>c===""?o:[o,c].join("/"))),r&&d.push(...s),d.map(c=>e.startsWith("/")&&c===""?"/":c)}function oN(e){e.sort((t,a)=>t.score!==a.score?a.score-t.score:gN(t.routesMeta.map(n=>n.childrenIndex),a.routesMeta.map(n=>n.childrenIndex)))}const sN=/^:[\w-]+$/,lN=3,dN=2,cN=1,uN=10,pN=-2,Jk=e=>e==="*";function mN(e,t){let a=e.split("/"),n=a.length;return a.some(Jk)&&(n+=pN),t&&(n+=dN),a.filter(r=>!Jk(r)).reduce((r,o)=>r+(sN.test(o)?lN:o===""?cN:uN),n)}function gN(e,t){return e.length===t.length&&e.slice(0,-1).every((n,r)=>n===t[r])?e[e.length-1]-t[t.length-1]:0}function hN(e,t,a){let{routesMeta:n}=e,r={},o="/",s=[];for(let d=0;d{let{paramName:f,isOptional:v}=m;if(f==="*"){let x=d[g]||"";s=o.slice(0,o.length-x.length).replace(/(.)\/+$/,"$1")}const k=d[g];return v&&!k?p[f]=void 0:p[f]=(k||"").replace(/%2F/g,"/"),p},{}),pathname:o,pathnameBase:s,pattern:e}}function vN(e,t,a){t===void 0&&(t=!1),a===void 0&&(a=!0),Iy(e==="*"||!e.endsWith("*")||e.endsWith("/*"),'Route path "'+e+'" will be treated as if it were '+('"'+e.replace(/\*$/,"/*")+'" because the `*` character must ')+"always follow a `/` in the pattern. To get rid of this warning, "+('please change the route path to "'+e.replace(/\*$/,"/*")+'".'));let n=[],r="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(s,d,c)=>(n.push({paramName:d,isOptional:c!=null}),c?"/?([^\\/]+)?":"/([^\\/]+)"));return e.endsWith("*")?(n.push({paramName:"*"}),r+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):a?r+="\\/*$":e!==""&&e!=="/"&&(r+="(?:(?=\\/|$))"),[new RegExp(r,t?void 0:"i"),n]}function yN(e){try{return e.split("/").map(t=>decodeURIComponent(t).replace(/\//g,"%2F")).join("/")}catch(t){return Iy(!1,'The URL path "'+e+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent '+("encoding ("+t+").")),e}}function Ly(e,t){if(t==="/")return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let a=t.endsWith("/")?t.length-1:t.length,n=e.charAt(a);return n&&n!=="/"?null:e.slice(a)||"/"}const bN=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,xN=e=>bN.test(e);function kN(e,t){t===void 0&&(t="/");let{pathname:a,search:n="",hash:r=""}=typeof e=="string"?Bl(e):e,o;if(a)if(xN(a))o=a;else{if(a.includes("//")){let s=a;a=a.replace(/\/\/+/g,"/"),Iy(!1,"Pathnames cannot have embedded double slashes - normalizing "+(s+" -> "+a))}a.startsWith("/")?o=Qk(a.substring(1),"/"):o=Qk(a,t)}else o=t;return{pathname:o,search:SN(n),hash:jN(r)}}function Qk(e,t){let a=t.replace(/\/+$/,"").split("/");return e.split("/").forEach(r=>{r===".."?a.length>1&&a.pop():r!=="."&&a.push(r)}),a.length>1?a.join("/"):"/"}function th(e,t,a,n){return"Cannot include a '"+e+"' character in a manually specified "+("`to."+t+"` field ["+JSON.stringify(n)+"]. Please separate it out to the ")+("`to."+a+"` field. Alternatively you may provide the full path as ")+'a string in and the router will parse it for you.'}function wN(e){return e.filter((t,a)=>a===0||t.route.path&&t.route.path.length>0)}function Fy(e,t){let a=wN(e);return t?a.map((n,r)=>r===a.length-1?n.pathname:n.pathnameBase):a.map(n=>n.pathnameBase)}function Oy(e,t,a,n){n===void 0&&(n=!1);let r;typeof e=="string"?r=Bl(e):(r=dc({},e),Oa(!r.pathname||!r.pathname.includes("?"),th("?","pathname","search",r)),Oa(!r.pathname||!r.pathname.includes("#"),th("#","pathname","hash",r)),Oa(!r.search||!r.search.includes("#"),th("#","search","hash",r)));let o=e===""||r.pathname==="",s=o?"/":r.pathname,d;if(s==null)d=a;else{let g=t.length-1;if(!n&&s.startsWith("..")){let f=s.split("/");for(;f[0]==="..";)f.shift(),g-=1;r.pathname=f.join("/")}d=g>=0?t[g]:"/"}let c=kN(r,d),p=s&&s!=="/"&&s.endsWith("/"),m=(o||s===".")&&a.endsWith("/");return!c.pathname.endsWith("/")&&(p||m)&&(c.pathname+="/"),c}const Co=e=>e.join("/").replace(/\/\/+/g,"/"),_N=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),SN=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,jN=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e;function CN(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.internal=="boolean"&&"data"in e}const HS=["post","put","patch","delete"];new Set(HS);const zN=["get",...HS];new Set(zN);/** * React Router v6.30.3 * * Copyright (c) Remix Software Inc. @@ -55,7 +55,7 @@ Error generating stack: `+o.message+` * LICENSE.md file in the root directory of this source tree. * * @license MIT - */function cc(){return cc=Object.assign?Object.assign.bind():function(e){for(var t=1;t{d.current=!0}),y.useCallback(function(p,m){if(m===void 0&&(m={}),!d.current)return;if(typeof p=="number"){n.go(p);return}let g=Fy(p,JSON.parse(s),o,m.relative==="path");e==null&&t!=="/"&&(g.pathname=g.pathname==="/"?t:Co([t,g.pathname])),(m.replace?n.replace:n.push)(g,m.state,m)},[t,n,s,o,e])}function Nm(){let{matches:e}=y.useContext(Vr),t=e[e.length-1];return t?t.params:{}}function US(e,t){let{relative:a}=t===void 0?{}:t,{future:n}=y.useContext(Lo),{matches:r}=y.useContext(Vr),{pathname:o}=Kr(),s=JSON.stringify(Ly(r,n.v7_relativeSplatPath));return y.useMemo(()=>Fy(e,JSON.parse(s),o,a==="path"),[e,s,o,a])}function EN(e,t){return AN(e,t)}function AN(e,t,a,n){Hl()||Oa(!1);let{navigator:r}=y.useContext(Lo),{matches:o}=y.useContext(Vr),s=o[o.length-1],d=s?s.params:{};s&&s.pathname;let c=s?s.pathnameBase:"/";s&&s.route;let p=Kr(),m;if(t){var g;let S=typeof t=="string"?Bl(t):t;c==="/"||(g=S.pathname)!=null&&g.startsWith(c)||Oa(!1),m=S}else m=p;let f=m.pathname||"/",v=f;if(c!=="/"){let S=c.replace(/^\//,"").split("/");v="/"+f.replace(/^\//,"").split("/").slice(S.length).join("/")}let k=nN(e,{pathname:v}),x=IN(k&&k.map(S=>Object.assign({},S,{params:Object.assign({},d,S.params),pathname:Co([c,r.encodeLocation?r.encodeLocation(S.pathname).pathname:S.pathname]),pathnameBase:S.pathnameBase==="/"?c:Co([c,r.encodeLocation?r.encodeLocation(S.pathnameBase).pathname:S.pathnameBase])})),o,a,n);return t&&x?y.createElement(Am.Provider,{value:{location:cc({pathname:"/",search:"",hash:"",state:null,key:"default"},m),navigationType:mo.Pop}},x):x}function NN(){let e=BN(),t=jN(e)?e.status+" "+e.statusText:e instanceof Error?e.message:JSON.stringify(e),a=e instanceof Error?e.stack:null,r={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"};return y.createElement(y.Fragment,null,y.createElement("h2",null,"Unexpected Application Error!"),y.createElement("h3",{style:{fontStyle:"italic"}},t),a?y.createElement("pre",{style:r},a):null,null)}const DN=y.createElement(NN,null);class MN extends y.Component{constructor(t){super(t),this.state={location:t.location,revalidation:t.revalidation,error:t.error}}static getDerivedStateFromError(t){return{error:t}}static getDerivedStateFromProps(t,a){return a.location!==t.location||a.revalidation!=="idle"&&t.revalidation==="idle"?{error:t.error,location:t.location,revalidation:t.revalidation}:{error:t.error!==void 0?t.error:a.error,location:a.location,revalidation:t.revalidation||a.revalidation}}componentDidCatch(t,a){console.error("React Router caught the following error during render",t,a)}render(){return this.state.error!==void 0?y.createElement(Vr.Provider,{value:this.props.routeContext},y.createElement(HS.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function RN(e){let{routeContext:t,match:a,children:n}=e,r=y.useContext(Oy);return r&&r.static&&r.staticContext&&(a.route.errorElement||a.route.ErrorBoundary)&&(r.staticContext._deepestRenderedBoundaryId=a.route.id),y.createElement(Vr.Provider,{value:t},n)}function IN(e,t,a,n){var r;if(t===void 0&&(t=[]),a===void 0&&(a=null),n===void 0&&(n=null),e==null){var o;if(!a)return null;if(a.errors)e=a.matches;else if((o=n)!=null&&o.v7_partialHydration&&t.length===0&&!a.initialized&&a.matches.length>0)e=a.matches;else return null}let s=e,d=(r=a)==null?void 0:r.errors;if(d!=null){let m=s.findIndex(g=>g.route.id&&(d==null?void 0:d[g.route.id])!==void 0);m>=0||Oa(!1),s=s.slice(0,Math.min(s.length,m+1))}let c=!1,p=-1;if(a&&n&&n.v7_partialHydration)for(let m=0;m=0?s=s.slice(0,p+1):s=[s[0]];break}}}return s.reduceRight((m,g,f)=>{let v,k=!1,x=null,S=null;a&&(v=d&&g.route.id?d[g.route.id]:void 0,x=g.route.errorElement||DN,c&&(p<0&&f===0?(WN("route-fallback"),k=!0,S=null):p===f&&(k=!0,S=g.route.hydrateFallbackElement||null)));let b=t.concat(s.slice(0,f+1)),w=()=>{let j;return v?j=x:k?j=S:g.route.Component?j=y.createElement(g.route.Component,null):g.route.element?j=g.route.element:j=m,y.createElement(RN,{match:g,routeContext:{outlet:m,matches:b,isDataRoute:a!=null},children:j})};return a&&(g.route.ErrorBoundary||g.route.errorElement||f===0)?y.createElement(MN,{location:a.location,revalidation:a.revalidation,component:x,error:v,children:w(),routeContext:{outlet:null,matches:b,isDataRoute:!0}}):w()},null)}var $S=function(e){return e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e}($S||{}),VS=function(e){return e.UseBlocker="useBlocker",e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e.UseRouteId="useRouteId",e}(VS||{});function LN(e){let t=y.useContext(Oy);return t||Oa(!1),t}function FN(e){let t=y.useContext(zN);return t||Oa(!1),t}function ON(e){let t=y.useContext(Vr);return t||Oa(!1),t}function KS(e){let t=ON(),a=t.matches[t.matches.length-1];return a.route.id||Oa(!1),a.route.id}function BN(){var e;let t=y.useContext(HS),a=FN(),n=KS();return t!==void 0?t:(e=a.errors)==null?void 0:e[n]}function HN(){let{router:e}=LN($S.UseNavigateStable),t=KS(VS.UseNavigateStable),a=y.useRef(!1);return WS(()=>{a.current=!0}),y.useCallback(function(r,o){o===void 0&&(o={}),a.current&&(typeof r=="number"?e.navigate(r):e.navigate(r,cc({fromRouteId:t},o)))},[e,t])}const Qk={};function WN(e,t,a){Qk[e]||(Qk[e]=!0)}function UN(e,t){e==null||e.v7_startTransition,e==null||e.v7_relativeSplatPath}function Od(e){let{to:t,replace:a,state:n,relative:r}=e;Hl()||Oa(!1);let{future:o,static:s}=y.useContext(Lo),{matches:d}=y.useContext(Vr),{pathname:c}=Kr(),p=Vi(),m=Fy(t,Ly(d,o.v7_relativeSplatPath),c,r==="path"),g=JSON.stringify(m);return y.useEffect(()=>p(JSON.parse(g),{replace:a,state:n,relative:r}),[p,g,r,a,n]),null}function ai(e){Oa(!1)}function $N(e){let{basename:t="/",children:a=null,location:n,navigationType:r=mo.Pop,navigator:o,static:s=!1,future:d}=e;Hl()&&Oa(!1);let c=t.replace(/^\/*/,"/"),p=y.useMemo(()=>({basename:c,navigator:o,static:s,future:cc({v7_relativeSplatPath:!1},d)}),[c,d,o,s]);typeof n=="string"&&(n=Bl(n));let{pathname:m="/",search:g="",hash:f="",state:v=null,key:k="default"}=n,x=y.useMemo(()=>{let S=Iy(m,c);return S==null?null:{location:{pathname:S,search:g,hash:f,state:v,key:k},navigationType:r}},[c,m,g,f,v,k,r]);return x==null?null:y.createElement(Lo.Provider,{value:p},y.createElement(Am.Provider,{children:a,value:x}))}function VN(e){let{children:t,location:a}=e;return EN(Of(t),a)}new Promise(()=>{});function Of(e,t){t===void 0&&(t=[]);let a=[];return y.Children.forEach(e,(n,r)=>{if(!y.isValidElement(n))return;let o=[...t,r];if(n.type===y.Fragment){a.push.apply(a,Of(n.props.children,o));return}n.type!==ai&&Oa(!1),!n.props.index||!n.props.children||Oa(!1);let s={id:n.props.id||o.join("-"),caseSensitive:n.props.caseSensitive,element:n.props.element,Component:n.props.Component,index:n.props.index,path:n.props.path,loader:n.props.loader,action:n.props.action,errorElement:n.props.errorElement,ErrorBoundary:n.props.ErrorBoundary,hasErrorBoundary:n.props.ErrorBoundary!=null||n.props.errorElement!=null,shouldRevalidate:n.props.shouldRevalidate,handle:n.props.handle,lazy:n.props.lazy};n.props.children&&(s.children=Of(n.props.children,o)),a.push(s)}),a}/** + */function cc(){return cc=Object.assign?Object.assign.bind():function(e){for(var t=1;t{d.current=!0}),y.useCallback(function(p,m){if(m===void 0&&(m={}),!d.current)return;if(typeof p=="number"){n.go(p);return}let g=Oy(p,JSON.parse(s),o,m.relative==="path");e==null&&t!=="/"&&(g.pathname=g.pathname==="/"?t:Co([t,g.pathname])),(m.replace?n.replace:n.push)(g,m.state,m)},[t,n,s,o,e])}function Nm(){let{matches:e}=y.useContext(Vr),t=e[e.length-1];return t?t.params:{}}function $S(e,t){let{relative:a}=t===void 0?{}:t,{future:n}=y.useContext(Lo),{matches:r}=y.useContext(Vr),{pathname:o}=Kr(),s=JSON.stringify(Fy(r,n.v7_relativeSplatPath));return y.useMemo(()=>Oy(e,JSON.parse(s),o,a==="path"),[e,s,o,a])}function AN(e,t){return NN(e,t)}function NN(e,t,a,n){Hl()||Oa(!1);let{navigator:r}=y.useContext(Lo),{matches:o}=y.useContext(Vr),s=o[o.length-1],d=s?s.params:{};s&&s.pathname;let c=s?s.pathnameBase:"/";s&&s.route;let p=Kr(),m;if(t){var g;let S=typeof t=="string"?Bl(t):t;c==="/"||(g=S.pathname)!=null&&g.startsWith(c)||Oa(!1),m=S}else m=p;let f=m.pathname||"/",v=f;if(c!=="/"){let S=c.replace(/^\//,"").split("/");v="/"+f.replace(/^\//,"").split("/").slice(S.length).join("/")}let k=iN(e,{pathname:v}),x=LN(k&&k.map(S=>Object.assign({},S,{params:Object.assign({},d,S.params),pathname:Co([c,r.encodeLocation?r.encodeLocation(S.pathname).pathname:S.pathname]),pathnameBase:S.pathnameBase==="/"?c:Co([c,r.encodeLocation?r.encodeLocation(S.pathnameBase).pathname:S.pathnameBase])})),o,a,n);return t&&x?y.createElement(Am.Provider,{value:{location:cc({pathname:"/",search:"",hash:"",state:null,key:"default"},m),navigationType:mo.Pop}},x):x}function DN(){let e=HN(),t=CN(e)?e.status+" "+e.statusText:e instanceof Error?e.message:JSON.stringify(e),a=e instanceof Error?e.stack:null,r={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"};return y.createElement(y.Fragment,null,y.createElement("h2",null,"Unexpected Application Error!"),y.createElement("h3",{style:{fontStyle:"italic"}},t),a?y.createElement("pre",{style:r},a):null,null)}const MN=y.createElement(DN,null);class RN extends y.Component{constructor(t){super(t),this.state={location:t.location,revalidation:t.revalidation,error:t.error}}static getDerivedStateFromError(t){return{error:t}}static getDerivedStateFromProps(t,a){return a.location!==t.location||a.revalidation!=="idle"&&t.revalidation==="idle"?{error:t.error,location:t.location,revalidation:t.revalidation}:{error:t.error!==void 0?t.error:a.error,location:a.location,revalidation:t.revalidation||a.revalidation}}componentDidCatch(t,a){console.error("React Router caught the following error during render",t,a)}render(){return this.state.error!==void 0?y.createElement(Vr.Provider,{value:this.props.routeContext},y.createElement(WS.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function IN(e){let{routeContext:t,match:a,children:n}=e,r=y.useContext(By);return r&&r.static&&r.staticContext&&(a.route.errorElement||a.route.ErrorBoundary)&&(r.staticContext._deepestRenderedBoundaryId=a.route.id),y.createElement(Vr.Provider,{value:t},n)}function LN(e,t,a,n){var r;if(t===void 0&&(t=[]),a===void 0&&(a=null),n===void 0&&(n=null),e==null){var o;if(!a)return null;if(a.errors)e=a.matches;else if((o=n)!=null&&o.v7_partialHydration&&t.length===0&&!a.initialized&&a.matches.length>0)e=a.matches;else return null}let s=e,d=(r=a)==null?void 0:r.errors;if(d!=null){let m=s.findIndex(g=>g.route.id&&(d==null?void 0:d[g.route.id])!==void 0);m>=0||Oa(!1),s=s.slice(0,Math.min(s.length,m+1))}let c=!1,p=-1;if(a&&n&&n.v7_partialHydration)for(let m=0;m=0?s=s.slice(0,p+1):s=[s[0]];break}}}return s.reduceRight((m,g,f)=>{let v,k=!1,x=null,S=null;a&&(v=d&&g.route.id?d[g.route.id]:void 0,x=g.route.errorElement||MN,c&&(p<0&&f===0?(UN("route-fallback"),k=!0,S=null):p===f&&(k=!0,S=g.route.hydrateFallbackElement||null)));let b=t.concat(s.slice(0,f+1)),w=()=>{let j;return v?j=x:k?j=S:g.route.Component?j=y.createElement(g.route.Component,null):g.route.element?j=g.route.element:j=m,y.createElement(IN,{match:g,routeContext:{outlet:m,matches:b,isDataRoute:a!=null},children:j})};return a&&(g.route.ErrorBoundary||g.route.errorElement||f===0)?y.createElement(RN,{location:a.location,revalidation:a.revalidation,component:x,error:v,children:w(),routeContext:{outlet:null,matches:b,isDataRoute:!0}}):w()},null)}var VS=function(e){return e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e}(VS||{}),KS=function(e){return e.UseBlocker="useBlocker",e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e.UseRouteId="useRouteId",e}(KS||{});function FN(e){let t=y.useContext(By);return t||Oa(!1),t}function ON(e){let t=y.useContext(TN);return t||Oa(!1),t}function BN(e){let t=y.useContext(Vr);return t||Oa(!1),t}function qS(e){let t=BN(),a=t.matches[t.matches.length-1];return a.route.id||Oa(!1),a.route.id}function HN(){var e;let t=y.useContext(WS),a=ON(),n=qS();return t!==void 0?t:(e=a.errors)==null?void 0:e[n]}function WN(){let{router:e}=FN(VS.UseNavigateStable),t=qS(KS.UseNavigateStable),a=y.useRef(!1);return US(()=>{a.current=!0}),y.useCallback(function(r,o){o===void 0&&(o={}),a.current&&(typeof r=="number"?e.navigate(r):e.navigate(r,cc({fromRouteId:t},o)))},[e,t])}const e0={};function UN(e,t,a){e0[e]||(e0[e]=!0)}function $N(e,t){e==null||e.v7_startTransition,e==null||e.v7_relativeSplatPath}function Od(e){let{to:t,replace:a,state:n,relative:r}=e;Hl()||Oa(!1);let{future:o,static:s}=y.useContext(Lo),{matches:d}=y.useContext(Vr),{pathname:c}=Kr(),p=Vi(),m=Oy(t,Fy(d,o.v7_relativeSplatPath),c,r==="path"),g=JSON.stringify(m);return y.useEffect(()=>p(JSON.parse(g),{replace:a,state:n,relative:r}),[p,g,r,a,n]),null}function ai(e){Oa(!1)}function VN(e){let{basename:t="/",children:a=null,location:n,navigationType:r=mo.Pop,navigator:o,static:s=!1,future:d}=e;Hl()&&Oa(!1);let c=t.replace(/^\/*/,"/"),p=y.useMemo(()=>({basename:c,navigator:o,static:s,future:cc({v7_relativeSplatPath:!1},d)}),[c,d,o,s]);typeof n=="string"&&(n=Bl(n));let{pathname:m="/",search:g="",hash:f="",state:v=null,key:k="default"}=n,x=y.useMemo(()=>{let S=Ly(m,c);return S==null?null:{location:{pathname:S,search:g,hash:f,state:v,key:k},navigationType:r}},[c,m,g,f,v,k,r]);return x==null?null:y.createElement(Lo.Provider,{value:p},y.createElement(Am.Provider,{children:a,value:x}))}function KN(e){let{children:t,location:a}=e;return AN(Of(t),a)}new Promise(()=>{});function Of(e,t){t===void 0&&(t=[]);let a=[];return y.Children.forEach(e,(n,r)=>{if(!y.isValidElement(n))return;let o=[...t,r];if(n.type===y.Fragment){a.push.apply(a,Of(n.props.children,o));return}n.type!==ai&&Oa(!1),!n.props.index||!n.props.children||Oa(!1);let s={id:n.props.id||o.join("-"),caseSensitive:n.props.caseSensitive,element:n.props.element,Component:n.props.Component,index:n.props.index,path:n.props.path,loader:n.props.loader,action:n.props.action,errorElement:n.props.errorElement,ErrorBoundary:n.props.ErrorBoundary,hasErrorBoundary:n.props.ErrorBoundary!=null||n.props.errorElement!=null,shouldRevalidate:n.props.shouldRevalidate,handle:n.props.handle,lazy:n.props.lazy};n.props.children&&(s.children=Of(n.props.children,o)),a.push(s)}),a}/** * React Router DOM v6.30.3 * * Copyright (c) Remix Software Inc. @@ -64,7 +64,7 @@ Error generating stack: `+o.message+` * LICENSE.md file in the root directory of this source tree. * * @license MIT - */function Bf(){return Bf=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0)&&(a[r]=e[r]);return a}function qN(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function GN(e,t){return e.button===0&&(!t||t==="_self")&&!qN(e)}function Hf(e){return e===void 0&&(e=""),new URLSearchParams(typeof e=="string"||Array.isArray(e)||e instanceof URLSearchParams?e:Object.keys(e).reduce((t,a)=>{let n=e[a];return t.concat(Array.isArray(n)?n.map(r=>[a,r]):[[a,n]])},[]))}function ZN(e,t){let a=Hf(e);return t&&t.forEach((n,r)=>{a.has(r)||t.getAll(r).forEach(o=>{a.append(r,o)})}),a}const YN=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset","viewTransition"],XN="6";try{window.__reactRouterVersion=XN}catch{}const JN="startTransition",e0=UP[JN];function QN(e){let{basename:t,children:a,future:n,window:r}=e,o=y.useRef();o.current==null&&(o.current=eN({window:r,v5Compat:!0}));let s=o.current,[d,c]=y.useState({action:s.action,location:s.location}),{v7_startTransition:p}=n||{},m=y.useCallback(g=>{p&&e0?e0(()=>c(g)):c(g)},[c,p]);return y.useLayoutEffect(()=>s.listen(m),[s,m]),y.useEffect(()=>UN(n),[n]),y.createElement($N,{basename:t,children:a,location:d.location,navigationType:d.action,navigator:s,future:n})}const e5=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",t5=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,Vs=y.forwardRef(function(t,a){let{onClick:n,relative:r,reloadDocument:o,replace:s,state:d,target:c,to:p,preventScrollReset:m,viewTransition:g}=t,f=KN(t,YN),{basename:v}=y.useContext(Lo),k,x=!1;if(typeof p=="string"&&t5.test(p)&&(k=p,e5))try{let j=new URL(window.location.href),P=p.startsWith("//")?new URL(j.protocol+p):new URL(p),M=Iy(P.pathname,v);P.origin===j.origin&&M!=null?p=M+P.search+P.hash:x=!0}catch{}let S=TN(p,{relative:r}),b=a5(p,{replace:s,state:d,target:c,preventScrollReset:m,relative:r,viewTransition:g});function w(j){n&&n(j),j.defaultPrevented||b(j)}return y.createElement("a",Bf({},f,{href:k||S,onClick:x||o?n:w,ref:a,target:c}))});var t0;(function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmit="useSubmit",e.UseSubmitFetcher="useSubmitFetcher",e.UseFetcher="useFetcher",e.useViewTransitionState="useViewTransitionState"})(t0||(t0={}));var a0;(function(e){e.UseFetcher="useFetcher",e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"})(a0||(a0={}));function a5(e,t){let{target:a,replace:n,state:r,preventScrollReset:o,relative:s,viewTransition:d}=t===void 0?{}:t,c=Vi(),p=Kr(),m=US(e,{relative:s});return y.useCallback(g=>{if(GN(g,a)){g.preventDefault();let f=n!==void 0?n:Hp(p)===Hp(m);c(e,{replace:f,state:r,preventScrollReset:o,relative:s,viewTransition:d})}},[p,c,m,n,r,a,e,o,s,d])}function n5(e){let t=y.useRef(Hf(e)),a=y.useRef(!1),n=Kr(),r=y.useMemo(()=>ZN(n.search,a.current?null:t.current),[n.search]),o=Vi(),s=y.useCallback((d,c)=>{const p=Hf(typeof d=="function"?d(r):d);a.current=!0,o("?"+p,c)},[o,r]);return[r,s]}const i5={},n0=e=>{let t;const a=new Set,n=(m,g)=>{const f=typeof m=="function"?m(t):m;if(!Object.is(f,t)){const v=t;t=g??(typeof f!="object"||f===null)?f:Object.assign({},t,f),a.forEach(k=>k(t,v))}},r=()=>t,c={setState:n,getState:r,getInitialState:()=>p,subscribe:m=>(a.add(m),()=>a.delete(m)),destroy:()=>{(i5?"production":void 0)!=="production"&&console.warn("[DEPRECATED] The `destroy` method will be unsupported in a future version. Instead use unsubscribe function returned by subscribe. Everything will be garbage-collected if store is garbage-collected."),a.clear()}},p=t=e(n,r,c);return c},r5=e=>e?n0(e):n0;var qS={exports:{}},GS={},ZS={exports:{}},YS={};/** + */function Bf(){return Bf=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0)&&(a[r]=e[r]);return a}function GN(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function ZN(e,t){return e.button===0&&(!t||t==="_self")&&!GN(e)}function Hf(e){return e===void 0&&(e=""),new URLSearchParams(typeof e=="string"||Array.isArray(e)||e instanceof URLSearchParams?e:Object.keys(e).reduce((t,a)=>{let n=e[a];return t.concat(Array.isArray(n)?n.map(r=>[a,r]):[[a,n]])},[]))}function YN(e,t){let a=Hf(e);return t&&t.forEach((n,r)=>{a.has(r)||t.getAll(r).forEach(o=>{a.append(r,o)})}),a}const XN=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset","viewTransition"],JN="6";try{window.__reactRouterVersion=JN}catch{}const QN="startTransition",t0=$P[QN];function e5(e){let{basename:t,children:a,future:n,window:r}=e,o=y.useRef();o.current==null&&(o.current=tN({window:r,v5Compat:!0}));let s=o.current,[d,c]=y.useState({action:s.action,location:s.location}),{v7_startTransition:p}=n||{},m=y.useCallback(g=>{p&&t0?t0(()=>c(g)):c(g)},[c,p]);return y.useLayoutEffect(()=>s.listen(m),[s,m]),y.useEffect(()=>$N(n),[n]),y.createElement(VN,{basename:t,children:a,location:d.location,navigationType:d.action,navigator:s,future:n})}const t5=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",a5=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,Vs=y.forwardRef(function(t,a){let{onClick:n,relative:r,reloadDocument:o,replace:s,state:d,target:c,to:p,preventScrollReset:m,viewTransition:g}=t,f=qN(t,XN),{basename:v}=y.useContext(Lo),k,x=!1;if(typeof p=="string"&&a5.test(p)&&(k=p,t5))try{let j=new URL(window.location.href),P=p.startsWith("//")?new URL(j.protocol+p):new URL(p),M=Ly(P.pathname,v);P.origin===j.origin&&M!=null?p=M+P.search+P.hash:x=!0}catch{}let S=PN(p,{relative:r}),b=n5(p,{replace:s,state:d,target:c,preventScrollReset:m,relative:r,viewTransition:g});function w(j){n&&n(j),j.defaultPrevented||b(j)}return y.createElement("a",Bf({},f,{href:k||S,onClick:x||o?n:w,ref:a,target:c}))});var a0;(function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmit="useSubmit",e.UseSubmitFetcher="useSubmitFetcher",e.UseFetcher="useFetcher",e.useViewTransitionState="useViewTransitionState"})(a0||(a0={}));var n0;(function(e){e.UseFetcher="useFetcher",e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"})(n0||(n0={}));function n5(e,t){let{target:a,replace:n,state:r,preventScrollReset:o,relative:s,viewTransition:d}=t===void 0?{}:t,c=Vi(),p=Kr(),m=$S(e,{relative:s});return y.useCallback(g=>{if(ZN(g,a)){g.preventDefault();let f=n!==void 0?n:Hp(p)===Hp(m);c(e,{replace:f,state:r,preventScrollReset:o,relative:s,viewTransition:d})}},[p,c,m,n,r,a,e,o,s,d])}function i5(e){let t=y.useRef(Hf(e)),a=y.useRef(!1),n=Kr(),r=y.useMemo(()=>YN(n.search,a.current?null:t.current),[n.search]),o=Vi(),s=y.useCallback((d,c)=>{const p=Hf(typeof d=="function"?d(r):d);a.current=!0,o("?"+p,c)},[o,r]);return[r,s]}const r5={},i0=e=>{let t;const a=new Set,n=(m,g)=>{const f=typeof m=="function"?m(t):m;if(!Object.is(f,t)){const v=t;t=g??(typeof f!="object"||f===null)?f:Object.assign({},t,f),a.forEach(k=>k(t,v))}},r=()=>t,c={setState:n,getState:r,getInitialState:()=>p,subscribe:m=>(a.add(m),()=>a.delete(m)),destroy:()=>{(r5?"production":void 0)!=="production"&&console.warn("[DEPRECATED] The `destroy` method will be unsupported in a future version. Instead use unsubscribe function returned by subscribe. Everything will be garbage-collected if store is garbage-collected."),a.clear()}},p=t=e(n,r,c);return c},o5=e=>e?i0(e):i0;var GS={exports:{}},ZS={},YS={exports:{}},XS={};/** * @license React * use-sync-external-store-shim.production.js * @@ -72,7 +72,7 @@ Error generating stack: `+o.message+` * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var Pl=y;function o5(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var s5=typeof Object.is=="function"?Object.is:o5,l5=Pl.useState,d5=Pl.useEffect,c5=Pl.useLayoutEffect,u5=Pl.useDebugValue;function p5(e,t){var a=t(),n=l5({inst:{value:a,getSnapshot:t}}),r=n[0].inst,o=n[1];return c5(function(){r.value=a,r.getSnapshot=t,ah(r)&&o({inst:r})},[e,a,t]),d5(function(){return ah(r)&&o({inst:r}),e(function(){ah(r)&&o({inst:r})})},[e]),u5(a),a}function ah(e){var t=e.getSnapshot;e=e.value;try{var a=t();return!s5(e,a)}catch{return!0}}function m5(e,t){return t()}var g5=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?m5:p5;YS.useSyncExternalStore=Pl.useSyncExternalStore!==void 0?Pl.useSyncExternalStore:g5;ZS.exports=YS;var h5=ZS.exports;/** + */var Pl=y;function s5(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var l5=typeof Object.is=="function"?Object.is:s5,d5=Pl.useState,c5=Pl.useEffect,u5=Pl.useLayoutEffect,p5=Pl.useDebugValue;function m5(e,t){var a=t(),n=d5({inst:{value:a,getSnapshot:t}}),r=n[0].inst,o=n[1];return u5(function(){r.value=a,r.getSnapshot=t,ah(r)&&o({inst:r})},[e,a,t]),c5(function(){return ah(r)&&o({inst:r}),e(function(){ah(r)&&o({inst:r})})},[e]),p5(a),a}function ah(e){var t=e.getSnapshot;e=e.value;try{var a=t();return!l5(e,a)}catch{return!0}}function g5(e,t){return t()}var h5=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?g5:m5;XS.useSyncExternalStore=Pl.useSyncExternalStore!==void 0?Pl.useSyncExternalStore:h5;YS.exports=XS;var f5=YS.exports;/** * @license React * use-sync-external-store-shim/with-selector.production.js * @@ -80,12 +80,12 @@ Error generating stack: `+o.message+` * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var Dm=y,f5=h5;function v5(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var y5=typeof Object.is=="function"?Object.is:v5,b5=f5.useSyncExternalStore,x5=Dm.useRef,k5=Dm.useEffect,w5=Dm.useMemo,_5=Dm.useDebugValue;GS.useSyncExternalStoreWithSelector=function(e,t,a,n,r){var o=x5(null);if(o.current===null){var s={hasValue:!1,value:null};o.current=s}else s=o.current;o=w5(function(){function c(v){if(!p){if(p=!0,m=v,v=n(v),r!==void 0&&s.hasValue){var k=s.value;if(r(k,v))return g=k}return g=v}if(k=g,y5(m,v))return k;var x=n(v);return r!==void 0&&r(k,x)?(m=v,k):(m=v,g=x)}var p=!1,m,g,f=a===void 0?null:a;return[function(){return c(t())},f===null?void 0:function(){return c(f())}]},[t,a,n,r]);var d=b5(e,o[0],o[1]);return k5(function(){s.hasValue=!0,s.value=d},[d]),_5(d),d};qS.exports=GS;var S5=qS.exports;const j5=zs(S5),XS={},{useDebugValue:C5}=Fa,{useSyncExternalStoreWithSelector:z5}=j5;let i0=!1;const T5=e=>e;function P5(e,t=T5,a){(XS?"production":void 0)!=="production"&&a&&!i0&&(console.warn("[DEPRECATED] Use `createWithEqualityFn` instead of `create` or use `useStoreWithEqualityFn` instead of `useStore`. They can be imported from 'zustand/traditional'. https://github.com/pmndrs/zustand/discussions/1937"),i0=!0);const n=z5(e.subscribe,e.getState,e.getServerState||e.getInitialState,t,a);return C5(n),n}const r0=e=>{(XS?"production":void 0)!=="production"&&typeof e!="function"&&console.warn("[DEPRECATED] Passing a vanilla store will be unsupported in a future version. Instead use `import { useStore } from 'zustand'`.");const t=typeof e=="function"?r5(e):e,a=(n,r)=>P5(t,n,r);return Object.assign(a,t),a},Wl=e=>e?r0(e):r0;function JS(e,t){return function(){return e.apply(t,arguments)}}const{toString:E5}=Object.prototype,{getPrototypeOf:By}=Object,{iterator:Mm,toStringTag:QS}=Symbol,Rm=(e=>t=>{const a=E5.call(t);return e[a]||(e[a]=a.slice(8,-1).toLowerCase())})(Object.create(null)),Ki=e=>(e=e.toLowerCase(),t=>Rm(t)===e),Im=e=>t=>typeof t===e,{isArray:Ul}=Array,El=Im("undefined");function zc(e){return e!==null&&!El(e)&&e.constructor!==null&&!El(e.constructor)&&Qn(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const ej=Ki("ArrayBuffer");function A5(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&ej(e.buffer),t}const N5=Im("string"),Qn=Im("function"),tj=Im("number"),Tc=e=>e!==null&&typeof e=="object",D5=e=>e===!0||e===!1,Xu=e=>{if(Rm(e)!=="object")return!1;const t=By(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(QS in e)&&!(Mm in e)},M5=e=>{if(!Tc(e)||zc(e))return!1;try{return Object.keys(e).length===0&&Object.getPrototypeOf(e)===Object.prototype}catch{return!1}},R5=Ki("Date"),I5=Ki("File"),L5=e=>!!(e&&typeof e.uri<"u"),F5=e=>e&&typeof e.getParts<"u",O5=Ki("Blob"),B5=Ki("FileList"),H5=e=>Tc(e)&&Qn(e.pipe);function W5(){return typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{}}const o0=W5(),s0=typeof o0.FormData<"u"?o0.FormData:void 0,U5=e=>{let t;return e&&(s0&&e instanceof s0||Qn(e.append)&&((t=Rm(e))==="formdata"||t==="object"&&Qn(e.toString)&&e.toString()==="[object FormData]"))},$5=Ki("URLSearchParams"),[V5,K5,q5,G5]=["ReadableStream","Request","Response","Headers"].map(Ki),Z5=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function Pc(e,t,{allOwnKeys:a=!1}={}){if(e===null||typeof e>"u")return;let n,r;if(typeof e!="object"&&(e=[e]),Ul(e))for(n=0,r=e.length;n0;)if(r=a[n],t===r.toLowerCase())return r;return null}const os=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,nj=e=>!El(e)&&e!==os;function Wf(){const{caseless:e,skipUndefined:t}=nj(this)&&this||{},a={},n=(r,o)=>{if(o==="__proto__"||o==="constructor"||o==="prototype")return;const s=e&&aj(a,o)||o;Xu(a[s])&&Xu(r)?a[s]=Wf(a[s],r):Xu(r)?a[s]=Wf({},r):Ul(r)?a[s]=r.slice():(!t||!El(r))&&(a[s]=r)};for(let r=0,o=arguments.length;r(Pc(t,(r,o)=>{a&&Qn(r)?Object.defineProperty(e,o,{value:JS(r,a),writable:!0,enumerable:!0,configurable:!0}):Object.defineProperty(e,o,{value:r,writable:!0,enumerable:!0,configurable:!0})},{allOwnKeys:n}),e),X5=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),J5=(e,t,a,n)=>{e.prototype=Object.create(t.prototype,n),Object.defineProperty(e.prototype,"constructor",{value:e,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(e,"super",{value:t.prototype}),a&&Object.assign(e.prototype,a)},Q5=(e,t,a,n)=>{let r,o,s;const d={};if(t=t||{},e==null)return t;do{for(r=Object.getOwnPropertyNames(e),o=r.length;o-- >0;)s=r[o],(!n||n(s,e,t))&&!d[s]&&(t[s]=e[s],d[s]=!0);e=a!==!1&&By(e)}while(e&&(!a||a(e,t))&&e!==Object.prototype);return t},eD=(e,t,a)=>{e=String(e),(a===void 0||a>e.length)&&(a=e.length),a-=t.length;const n=e.indexOf(t,a);return n!==-1&&n===a},tD=e=>{if(!e)return null;if(Ul(e))return e;let t=e.length;if(!tj(t))return null;const a=new Array(t);for(;t-- >0;)a[t]=e[t];return a},aD=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&By(Uint8Array)),nD=(e,t)=>{const n=(e&&e[Mm]).call(e);let r;for(;(r=n.next())&&!r.done;){const o=r.value;t.call(e,o[0],o[1])}},iD=(e,t)=>{let a;const n=[];for(;(a=e.exec(t))!==null;)n.push(a);return n},rD=Ki("HTMLFormElement"),oD=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(a,n,r){return n.toUpperCase()+r}),l0=(({hasOwnProperty:e})=>(t,a)=>e.call(t,a))(Object.prototype),sD=Ki("RegExp"),ij=(e,t)=>{const a=Object.getOwnPropertyDescriptors(e),n={};Pc(a,(r,o)=>{let s;(s=t(r,o,e))!==!1&&(n[o]=s||r)}),Object.defineProperties(e,n)},lD=e=>{ij(e,(t,a)=>{if(Qn(e)&&["arguments","caller","callee"].indexOf(a)!==-1)return!1;const n=e[a];if(Qn(n)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+a+"'")})}})},dD=(e,t)=>{const a={},n=r=>{r.forEach(o=>{a[o]=!0})};return Ul(e)?n(e):n(String(e).split(t)),a},cD=()=>{},uD=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t;function pD(e){return!!(e&&Qn(e.append)&&e[QS]==="FormData"&&e[Mm])}const mD=e=>{const t=new Array(10),a=(n,r)=>{if(Tc(n)){if(t.indexOf(n)>=0)return;if(zc(n))return n;if(!("toJSON"in n)){t[r]=n;const o=Ul(n)?[]:{};return Pc(n,(s,d)=>{const c=a(s,r+1);!El(c)&&(o[d]=c)}),t[r]=void 0,o}}return n};return a(e,0)},gD=Ki("AsyncFunction"),hD=e=>e&&(Tc(e)||Qn(e))&&Qn(e.then)&&Qn(e.catch),rj=((e,t)=>e?setImmediate:t?((a,n)=>(os.addEventListener("message",({source:r,data:o})=>{r===os&&o===a&&n.length&&n.shift()()},!1),r=>{n.push(r),os.postMessage(a,"*")}))(`axios@${Math.random()}`,[]):a=>setTimeout(a))(typeof setImmediate=="function",Qn(os.postMessage)),fD=typeof queueMicrotask<"u"?queueMicrotask.bind(os):typeof process<"u"&&process.nextTick||rj,vD=e=>e!=null&&Qn(e[Mm]),_e={isArray:Ul,isArrayBuffer:ej,isBuffer:zc,isFormData:U5,isArrayBufferView:A5,isString:N5,isNumber:tj,isBoolean:D5,isObject:Tc,isPlainObject:Xu,isEmptyObject:M5,isReadableStream:V5,isRequest:K5,isResponse:q5,isHeaders:G5,isUndefined:El,isDate:R5,isFile:I5,isReactNativeBlob:L5,isReactNative:F5,isBlob:O5,isRegExp:sD,isFunction:Qn,isStream:H5,isURLSearchParams:$5,isTypedArray:aD,isFileList:B5,forEach:Pc,merge:Wf,extend:Y5,trim:Z5,stripBOM:X5,inherits:J5,toFlatObject:Q5,kindOf:Rm,kindOfTest:Ki,endsWith:eD,toArray:tD,forEachEntry:nD,matchAll:iD,isHTMLForm:rD,hasOwnProperty:l0,hasOwnProp:l0,reduceDescriptors:ij,freezeMethods:lD,toObjectSet:dD,toCamelCase:oD,noop:cD,toFiniteNumber:uD,findKey:aj,global:os,isContextDefined:nj,isSpecCompliantForm:pD,toJSONObject:mD,isAsyncFn:gD,isThenable:hD,setImmediate:rj,asap:fD,isIterable:vD};let vt=class oj extends Error{static from(t,a,n,r,o,s){const d=new oj(t.message,a||t.code,n,r,o);return d.cause=t,d.name=t.name,t.status!=null&&d.status==null&&(d.status=t.status),s&&Object.assign(d,s),d}constructor(t,a,n,r,o){super(t),Object.defineProperty(this,"message",{value:t,enumerable:!0,writable:!0,configurable:!0}),this.name="AxiosError",this.isAxiosError=!0,a&&(this.code=a),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o,this.status=o.status)}toJSON(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:_e.toJSONObject(this.config),code:this.code,status:this.status}}};vt.ERR_BAD_OPTION_VALUE="ERR_BAD_OPTION_VALUE";vt.ERR_BAD_OPTION="ERR_BAD_OPTION";vt.ECONNABORTED="ECONNABORTED";vt.ETIMEDOUT="ETIMEDOUT";vt.ERR_NETWORK="ERR_NETWORK";vt.ERR_FR_TOO_MANY_REDIRECTS="ERR_FR_TOO_MANY_REDIRECTS";vt.ERR_DEPRECATED="ERR_DEPRECATED";vt.ERR_BAD_RESPONSE="ERR_BAD_RESPONSE";vt.ERR_BAD_REQUEST="ERR_BAD_REQUEST";vt.ERR_CANCELED="ERR_CANCELED";vt.ERR_NOT_SUPPORT="ERR_NOT_SUPPORT";vt.ERR_INVALID_URL="ERR_INVALID_URL";const yD=null;function Uf(e){return _e.isPlainObject(e)||_e.isArray(e)}function sj(e){return _e.endsWith(e,"[]")?e.slice(0,-2):e}function nh(e,t,a){return e?e.concat(t).map(function(r,o){return r=sj(r),!a&&o?"["+r+"]":r}).join(a?".":""):t}function bD(e){return _e.isArray(e)&&!e.some(Uf)}const xD=_e.toFlatObject(_e,{},null,function(t){return/^is[A-Z]/.test(t)});function Lm(e,t,a){if(!_e.isObject(e))throw new TypeError("target must be an object");t=t||new FormData,a=_e.toFlatObject(a,{metaTokens:!0,dots:!1,indexes:!1},!1,function(x,S){return!_e.isUndefined(S[x])});const n=a.metaTokens,r=a.visitor||m,o=a.dots,s=a.indexes,c=(a.Blob||typeof Blob<"u"&&Blob)&&_e.isSpecCompliantForm(t);if(!_e.isFunction(r))throw new TypeError("visitor must be a function");function p(k){if(k===null)return"";if(_e.isDate(k))return k.toISOString();if(_e.isBoolean(k))return k.toString();if(!c&&_e.isBlob(k))throw new vt("Blob is not supported. Use a Buffer instead.");return _e.isArrayBuffer(k)||_e.isTypedArray(k)?c&&typeof Blob=="function"?new Blob([k]):Buffer.from(k):k}function m(k,x,S){let b=k;if(_e.isReactNative(t)&&_e.isReactNativeBlob(k))return t.append(nh(S,x,o),p(k)),!1;if(k&&!S&&typeof k=="object"){if(_e.endsWith(x,"{}"))x=n?x:x.slice(0,-2),k=JSON.stringify(k);else if(_e.isArray(k)&&bD(k)||(_e.isFileList(k)||_e.endsWith(x,"[]"))&&(b=_e.toArray(k)))return x=sj(x),b.forEach(function(j,P){!(_e.isUndefined(j)||j===null)&&t.append(s===!0?nh([x],P,o):s===null?x:x+"[]",p(j))}),!1}return Uf(k)?!0:(t.append(nh(S,x,o),p(k)),!1)}const g=[],f=Object.assign(xD,{defaultVisitor:m,convertValue:p,isVisitable:Uf});function v(k,x){if(!_e.isUndefined(k)){if(g.indexOf(k)!==-1)throw Error("Circular reference detected in "+x.join("."));g.push(k),_e.forEach(k,function(b,w){(!(_e.isUndefined(b)||b===null)&&r.call(t,b,_e.isString(w)?w.trim():w,x,f))===!0&&v(b,x?x.concat(w):[w])}),g.pop()}}if(!_e.isObject(e))throw new TypeError("data must be an object");return v(e),t}function d0(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(n){return t[n]})}function Hy(e,t){this._pairs=[],e&&Lm(e,this,t)}const lj=Hy.prototype;lj.append=function(t,a){this._pairs.push([t,a])};lj.toString=function(t){const a=t?function(n){return t.call(this,n,d0)}:d0;return this._pairs.map(function(r){return a(r[0])+"="+a(r[1])},"").join("&")};function kD(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function dj(e,t,a){if(!t)return e;const n=a&&a.encode||kD,r=_e.isFunction(a)?{serialize:a}:a,o=r&&r.serialize;let s;if(o?s=o(t,r):s=_e.isURLSearchParams(t)?t.toString():new Hy(t,r).toString(n),s){const d=e.indexOf("#");d!==-1&&(e=e.slice(0,d)),e+=(e.indexOf("?")===-1?"?":"&")+s}return e}class c0{constructor(){this.handlers=[]}use(t,a,n){return this.handlers.push({fulfilled:t,rejected:a,synchronous:n?n.synchronous:!1,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){_e.forEach(this.handlers,function(n){n!==null&&t(n)})}}const Wy={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1,legacyInterceptorReqResOrdering:!0},wD=typeof URLSearchParams<"u"?URLSearchParams:Hy,_D=typeof FormData<"u"?FormData:null,SD=typeof Blob<"u"?Blob:null,jD={isBrowser:!0,classes:{URLSearchParams:wD,FormData:_D,Blob:SD},protocols:["http","https","file","blob","url","data"]},Uy=typeof window<"u"&&typeof document<"u",$f=typeof navigator=="object"&&navigator||void 0,CD=Uy&&(!$f||["ReactNative","NativeScript","NS"].indexOf($f.product)<0),zD=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",TD=Uy&&window.location.href||"http://localhost",PD=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:Uy,hasStandardBrowserEnv:CD,hasStandardBrowserWebWorkerEnv:zD,navigator:$f,origin:TD},Symbol.toStringTag,{value:"Module"})),_n={...PD,...jD};function ED(e,t){return Lm(e,new _n.classes.URLSearchParams,{visitor:function(a,n,r,o){return _n.isNode&&_e.isBuffer(a)?(this.append(n,a.toString("base64")),!1):o.defaultVisitor.apply(this,arguments)},...t})}function AD(e){return _e.matchAll(/\w+|\[(\w*)]/g,e).map(t=>t[0]==="[]"?"":t[1]||t[0])}function ND(e){const t={},a=Object.keys(e);let n;const r=a.length;let o;for(n=0;n=a.length;return s=!s&&_e.isArray(r)?r.length:s,c?(_e.hasOwnProp(r,s)?r[s]=[r[s],n]:r[s]=n,!d):((!r[s]||!_e.isObject(r[s]))&&(r[s]=[]),t(a,n,r[s],o)&&_e.isArray(r[s])&&(r[s]=ND(r[s])),!d)}if(_e.isFormData(e)&&_e.isFunction(e.entries)){const a={};return _e.forEachEntry(e,(n,r)=>{t(AD(n),r,a,0)}),a}return null}function DD(e,t,a){if(_e.isString(e))try{return(t||JSON.parse)(e),_e.trim(e)}catch(n){if(n.name!=="SyntaxError")throw n}return(a||JSON.stringify)(e)}const Ec={transitional:Wy,adapter:["xhr","http","fetch"],transformRequest:[function(t,a){const n=a.getContentType()||"",r=n.indexOf("application/json")>-1,o=_e.isObject(t);if(o&&_e.isHTMLForm(t)&&(t=new FormData(t)),_e.isFormData(t))return r?JSON.stringify(cj(t)):t;if(_e.isArrayBuffer(t)||_e.isBuffer(t)||_e.isStream(t)||_e.isFile(t)||_e.isBlob(t)||_e.isReadableStream(t))return t;if(_e.isArrayBufferView(t))return t.buffer;if(_e.isURLSearchParams(t))return a.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let d;if(o){if(n.indexOf("application/x-www-form-urlencoded")>-1)return ED(t,this.formSerializer).toString();if((d=_e.isFileList(t))||n.indexOf("multipart/form-data")>-1){const c=this.env&&this.env.FormData;return Lm(d?{"files[]":t}:t,c&&new c,this.formSerializer)}}return o||r?(a.setContentType("application/json",!1),DD(t)):t}],transformResponse:[function(t){const a=this.transitional||Ec.transitional,n=a&&a.forcedJSONParsing,r=this.responseType==="json";if(_e.isResponse(t)||_e.isReadableStream(t))return t;if(t&&_e.isString(t)&&(n&&!this.responseType||r)){const s=!(a&&a.silentJSONParsing)&&r;try{return JSON.parse(t,this.parseReviver)}catch(d){if(s)throw d.name==="SyntaxError"?vt.from(d,vt.ERR_BAD_RESPONSE,this,null,this.response):d}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:_n.classes.FormData,Blob:_n.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};_e.forEach(["delete","get","head","post","put","patch"],e=>{Ec.headers[e]={}});const MD=_e.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),RD=e=>{const t={};let a,n,r;return e&&e.split(` -`).forEach(function(s){r=s.indexOf(":"),a=s.substring(0,r).trim().toLowerCase(),n=s.substring(r+1).trim(),!(!a||t[a]&&MD[a])&&(a==="set-cookie"?t[a]?t[a].push(n):t[a]=[n]:t[a]=t[a]?t[a]+", "+n:n)}),t},u0=Symbol("internals");function md(e){return e&&String(e).trim().toLowerCase()}function Ju(e){return e===!1||e==null?e:_e.isArray(e)?e.map(Ju):String(e)}function ID(e){const t=Object.create(null),a=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let n;for(;n=a.exec(e);)t[n[1]]=n[2];return t}const LD=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function ih(e,t,a,n,r){if(_e.isFunction(n))return n.call(this,t,a);if(r&&(t=a),!!_e.isString(t)){if(_e.isString(n))return t.indexOf(n)!==-1;if(_e.isRegExp(n))return n.test(t)}}function FD(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,a,n)=>a.toUpperCase()+n)}function OD(e,t){const a=_e.toCamelCase(" "+t);["get","set","has"].forEach(n=>{Object.defineProperty(e,n+a,{value:function(r,o,s){return this[n].call(this,t,r,o,s)},configurable:!0})})}let ei=class{constructor(t){t&&this.set(t)}set(t,a,n){const r=this;function o(d,c,p){const m=md(c);if(!m)throw new Error("header name must be a non-empty string");const g=_e.findKey(r,m);(!g||r[g]===void 0||p===!0||p===void 0&&r[g]!==!1)&&(r[g||c]=Ju(d))}const s=(d,c)=>_e.forEach(d,(p,m)=>o(p,m,c));if(_e.isPlainObject(t)||t instanceof this.constructor)s(t,a);else if(_e.isString(t)&&(t=t.trim())&&!LD(t))s(RD(t),a);else if(_e.isObject(t)&&_e.isIterable(t)){let d={},c,p;for(const m of t){if(!_e.isArray(m))throw TypeError("Object iterator must return a key-value pair");d[p=m[0]]=(c=d[p])?_e.isArray(c)?[...c,m[1]]:[c,m[1]]:m[1]}s(d,a)}else t!=null&&o(a,t,n);return this}get(t,a){if(t=md(t),t){const n=_e.findKey(this,t);if(n){const r=this[n];if(!a)return r;if(a===!0)return ID(r);if(_e.isFunction(a))return a.call(this,r,n);if(_e.isRegExp(a))return a.exec(r);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,a){if(t=md(t),t){const n=_e.findKey(this,t);return!!(n&&this[n]!==void 0&&(!a||ih(this,this[n],n,a)))}return!1}delete(t,a){const n=this;let r=!1;function o(s){if(s=md(s),s){const d=_e.findKey(n,s);d&&(!a||ih(n,n[d],d,a))&&(delete n[d],r=!0)}}return _e.isArray(t)?t.forEach(o):o(t),r}clear(t){const a=Object.keys(this);let n=a.length,r=!1;for(;n--;){const o=a[n];(!t||ih(this,this[o],o,t,!0))&&(delete this[o],r=!0)}return r}normalize(t){const a=this,n={};return _e.forEach(this,(r,o)=>{const s=_e.findKey(n,o);if(s){a[s]=Ju(r),delete a[o];return}const d=t?FD(o):String(o).trim();d!==o&&delete a[o],a[d]=Ju(r),n[d]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const a=Object.create(null);return _e.forEach(this,(n,r)=>{n!=null&&n!==!1&&(a[r]=t&&_e.isArray(n)?n.join(", "):n)}),a}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,a])=>t+": "+a).join(` -`)}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...a){const n=new this(t);return a.forEach(r=>n.set(r)),n}static accessor(t){const n=(this[u0]=this[u0]={accessors:{}}).accessors,r=this.prototype;function o(s){const d=md(s);n[d]||(OD(r,s),n[d]=!0)}return _e.isArray(t)?t.forEach(o):o(t),this}};ei.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);_e.reduceDescriptors(ei.prototype,({value:e},t)=>{let a=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(n){this[a]=n}}});_e.freezeMethods(ei);function rh(e,t){const a=this||Ec,n=t||a,r=ei.from(n.headers);let o=n.data;return _e.forEach(e,function(d){o=d.call(a,o,r.normalize(),t?t.status:void 0)}),r.normalize(),o}function uj(e){return!!(e&&e.__CANCEL__)}let Ac=class extends vt{constructor(t,a,n){super(t??"canceled",vt.ERR_CANCELED,a,n),this.name="CanceledError",this.__CANCEL__=!0}};function pj(e,t,a){const n=a.config.validateStatus;!a.status||!n||n(a.status)?e(a):t(new vt("Request failed with status code "+a.status,[vt.ERR_BAD_REQUEST,vt.ERR_BAD_RESPONSE][Math.floor(a.status/100)-4],a.config,a.request,a))}function BD(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}function HD(e,t){e=e||10;const a=new Array(e),n=new Array(e);let r=0,o=0,s;return t=t!==void 0?t:1e3,function(c){const p=Date.now(),m=n[o];s||(s=p),a[r]=c,n[r]=p;let g=o,f=0;for(;g!==r;)f+=a[g++],g=g%e;if(r=(r+1)%e,r===o&&(o=(o+1)%e),p-s{a=m,r=null,o&&(clearTimeout(o),o=null),e(...p)};return[(...p)=>{const m=Date.now(),g=m-a;g>=n?s(p,m):(r=p,o||(o=setTimeout(()=>{o=null,s(r)},n-g)))},()=>r&&s(r)]}const Wp=(e,t,a=3)=>{let n=0;const r=HD(50,250);return WD(o=>{const s=o.loaded,d=o.lengthComputable?o.total:void 0,c=s-n,p=r(c),m=s<=d;n=s;const g={loaded:s,total:d,progress:d?s/d:void 0,bytes:c,rate:p||void 0,estimated:p&&d&&m?(d-s)/p:void 0,event:o,lengthComputable:d!=null,[t?"download":"upload"]:!0};e(g)},a)},p0=(e,t)=>{const a=e!=null;return[n=>t[0]({lengthComputable:a,total:e,loaded:n}),t[1]]},m0=e=>(...t)=>_e.asap(()=>e(...t)),UD=_n.hasStandardBrowserEnv?((e,t)=>a=>(a=new URL(a,_n.origin),e.protocol===a.protocol&&e.host===a.host&&(t||e.port===a.port)))(new URL(_n.origin),_n.navigator&&/(msie|trident)/i.test(_n.navigator.userAgent)):()=>!0,$D=_n.hasStandardBrowserEnv?{write(e,t,a,n,r,o,s){if(typeof document>"u")return;const d=[`${e}=${encodeURIComponent(t)}`];_e.isNumber(a)&&d.push(`expires=${new Date(a).toUTCString()}`),_e.isString(n)&&d.push(`path=${n}`),_e.isString(r)&&d.push(`domain=${r}`),o===!0&&d.push("secure"),_e.isString(s)&&d.push(`SameSite=${s}`),document.cookie=d.join("; ")},read(e){if(typeof document>"u")return null;const t=document.cookie.match(new RegExp("(?:^|; )"+e+"=([^;]*)"));return t?decodeURIComponent(t[1]):null},remove(e){this.write(e,"",Date.now()-864e5,"/")}}:{write(){},read(){return null},remove(){}};function VD(e){return typeof e!="string"?!1:/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function KD(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}function mj(e,t,a){let n=!VD(t);return e&&(n||a==!1)?KD(e,t):t}const g0=e=>e instanceof ei?{...e}:e;function ks(e,t){t=t||{};const a={};function n(p,m,g,f){return _e.isPlainObject(p)&&_e.isPlainObject(m)?_e.merge.call({caseless:f},p,m):_e.isPlainObject(m)?_e.merge({},m):_e.isArray(m)?m.slice():m}function r(p,m,g,f){if(_e.isUndefined(m)){if(!_e.isUndefined(p))return n(void 0,p,g,f)}else return n(p,m,g,f)}function o(p,m){if(!_e.isUndefined(m))return n(void 0,m)}function s(p,m){if(_e.isUndefined(m)){if(!_e.isUndefined(p))return n(void 0,p)}else return n(void 0,m)}function d(p,m,g){if(g in t)return n(p,m);if(g in e)return n(void 0,p)}const c={url:o,method:o,data:o,baseURL:s,transformRequest:s,transformResponse:s,paramsSerializer:s,timeout:s,timeoutMessage:s,withCredentials:s,withXSRFToken:s,adapter:s,responseType:s,xsrfCookieName:s,xsrfHeaderName:s,onUploadProgress:s,onDownloadProgress:s,decompress:s,maxContentLength:s,maxBodyLength:s,beforeRedirect:s,transport:s,httpAgent:s,httpsAgent:s,cancelToken:s,socketPath:s,responseEncoding:s,validateStatus:d,headers:(p,m,g)=>r(g0(p),g0(m),g,!0)};return _e.forEach(Object.keys({...e,...t}),function(m){if(m==="__proto__"||m==="constructor"||m==="prototype")return;const g=_e.hasOwnProp(c,m)?c[m]:r,f=g(e[m],t[m],m);_e.isUndefined(f)&&g!==d||(a[m]=f)}),a}const gj=e=>{const t=ks({},e);let{data:a,withXSRFToken:n,xsrfHeaderName:r,xsrfCookieName:o,headers:s,auth:d}=t;if(t.headers=s=ei.from(s),t.url=dj(mj(t.baseURL,t.url,t.allowAbsoluteUrls),e.params,e.paramsSerializer),d&&s.set("Authorization","Basic "+btoa((d.username||"")+":"+(d.password?unescape(encodeURIComponent(d.password)):""))),_e.isFormData(a)){if(_n.hasStandardBrowserEnv||_n.hasStandardBrowserWebWorkerEnv)s.setContentType(void 0);else if(_e.isFunction(a.getHeaders)){const c=a.getHeaders(),p=["content-type","content-length"];Object.entries(c).forEach(([m,g])=>{p.includes(m.toLowerCase())&&s.set(m,g)})}}if(_n.hasStandardBrowserEnv&&(n&&_e.isFunction(n)&&(n=n(t)),n||n!==!1&&UD(t.url))){const c=r&&o&&$D.read(o);c&&s.set(r,c)}return t},qD=typeof XMLHttpRequest<"u",GD=qD&&function(e){return new Promise(function(a,n){const r=gj(e);let o=r.data;const s=ei.from(r.headers).normalize();let{responseType:d,onUploadProgress:c,onDownloadProgress:p}=r,m,g,f,v,k;function x(){v&&v(),k&&k(),r.cancelToken&&r.cancelToken.unsubscribe(m),r.signal&&r.signal.removeEventListener("abort",m)}let S=new XMLHttpRequest;S.open(r.method.toUpperCase(),r.url,!0),S.timeout=r.timeout;function b(){if(!S)return;const j=ei.from("getAllResponseHeaders"in S&&S.getAllResponseHeaders()),M={data:!d||d==="text"||d==="json"?S.responseText:S.response,status:S.status,statusText:S.statusText,headers:j,config:e,request:S};pj(function(D){a(D),x()},function(D){n(D),x()},M),S=null}"onloadend"in S?S.onloadend=b:S.onreadystatechange=function(){!S||S.readyState!==4||S.status===0&&!(S.responseURL&&S.responseURL.indexOf("file:")===0)||setTimeout(b)},S.onabort=function(){S&&(n(new vt("Request aborted",vt.ECONNABORTED,e,S)),S=null)},S.onerror=function(P){const M=P&&P.message?P.message:"Network Error",N=new vt(M,vt.ERR_NETWORK,e,S);N.event=P||null,n(N),S=null},S.ontimeout=function(){let P=r.timeout?"timeout of "+r.timeout+"ms exceeded":"timeout exceeded";const M=r.transitional||Wy;r.timeoutErrorMessage&&(P=r.timeoutErrorMessage),n(new vt(P,M.clarifyTimeoutError?vt.ETIMEDOUT:vt.ECONNABORTED,e,S)),S=null},o===void 0&&s.setContentType(null),"setRequestHeader"in S&&_e.forEach(s.toJSON(),function(P,M){S.setRequestHeader(M,P)}),_e.isUndefined(r.withCredentials)||(S.withCredentials=!!r.withCredentials),d&&d!=="json"&&(S.responseType=r.responseType),p&&([f,k]=Wp(p,!0),S.addEventListener("progress",f)),c&&S.upload&&([g,v]=Wp(c),S.upload.addEventListener("progress",g),S.upload.addEventListener("loadend",v)),(r.cancelToken||r.signal)&&(m=j=>{S&&(n(!j||j.type?new Ac(null,e,S):j),S.abort(),S=null)},r.cancelToken&&r.cancelToken.subscribe(m),r.signal&&(r.signal.aborted?m():r.signal.addEventListener("abort",m)));const w=BD(r.url);if(w&&_n.protocols.indexOf(w)===-1){n(new vt("Unsupported protocol "+w+":",vt.ERR_BAD_REQUEST,e));return}S.send(o||null)})},ZD=(e,t)=>{const{length:a}=e=e?e.filter(Boolean):[];if(t||a){let n=new AbortController,r;const o=function(p){if(!r){r=!0,d();const m=p instanceof Error?p:this.reason;n.abort(m instanceof vt?m:new Ac(m instanceof Error?m.message:m))}};let s=t&&setTimeout(()=>{s=null,o(new vt(`timeout of ${t}ms exceeded`,vt.ETIMEDOUT))},t);const d=()=>{e&&(s&&clearTimeout(s),s=null,e.forEach(p=>{p.unsubscribe?p.unsubscribe(o):p.removeEventListener("abort",o)}),e=null)};e.forEach(p=>p.addEventListener("abort",o));const{signal:c}=n;return c.unsubscribe=()=>_e.asap(d),c}},YD=function*(e,t){let a=e.byteLength;if(a{const r=XD(e,t);let o=0,s,d=c=>{s||(s=!0,n&&n(c))};return new ReadableStream({async pull(c){try{const{done:p,value:m}=await r.next();if(p){d(),c.close();return}let g=m.byteLength;if(a){let f=o+=g;a(f)}c.enqueue(new Uint8Array(m))}catch(p){throw d(p),p}},cancel(c){return d(c),r.return()}},{highWaterMark:2})},f0=64*1024,{isFunction:bu}=_e,QD=(({Request:e,Response:t})=>({Request:e,Response:t}))(_e.global),{ReadableStream:v0,TextEncoder:y0}=_e.global,b0=(e,...t)=>{try{return!!e(...t)}catch{return!1}},eM=e=>{e=_e.merge.call({skipUndefined:!0},QD,e);const{fetch:t,Request:a,Response:n}=e,r=t?bu(t):typeof fetch=="function",o=bu(a),s=bu(n);if(!r)return!1;const d=r&&bu(v0),c=r&&(typeof y0=="function"?(k=>x=>k.encode(x))(new y0):async k=>new Uint8Array(await new a(k).arrayBuffer())),p=o&&d&&b0(()=>{let k=!1;const x=new a(_n.origin,{body:new v0,method:"POST",get duplex(){return k=!0,"half"}}).headers.has("Content-Type");return k&&!x}),m=s&&d&&b0(()=>_e.isReadableStream(new n("").body)),g={stream:m&&(k=>k.body)};r&&["text","arrayBuffer","blob","formData","stream"].forEach(k=>{!g[k]&&(g[k]=(x,S)=>{let b=x&&x[k];if(b)return b.call(x);throw new vt(`Response type '${k}' is not supported`,vt.ERR_NOT_SUPPORT,S)})});const f=async k=>{if(k==null)return 0;if(_e.isBlob(k))return k.size;if(_e.isSpecCompliantForm(k))return(await new a(_n.origin,{method:"POST",body:k}).arrayBuffer()).byteLength;if(_e.isArrayBufferView(k)||_e.isArrayBuffer(k))return k.byteLength;if(_e.isURLSearchParams(k)&&(k=k+""),_e.isString(k))return(await c(k)).byteLength},v=async(k,x)=>{const S=_e.toFiniteNumber(k.getContentLength());return S??f(x)};return async k=>{let{url:x,method:S,data:b,signal:w,cancelToken:j,timeout:P,onDownloadProgress:M,onUploadProgress:N,responseType:D,headers:F,withCredentials:R="same-origin",fetchOptions:A}=gj(k),ae=t||fetch;D=D?(D+"").toLowerCase():"text";let B=ZD([w,j&&j.toAbortSignal()],P),q=null;const le=B&&B.unsubscribe&&(()=>{B.unsubscribe()});let de;try{if(N&&p&&S!=="get"&&S!=="head"&&(de=await v(F,b))!==0){let ce=new a(x,{method:"POST",body:b,duplex:"half"}),K;if(_e.isFormData(b)&&(K=ce.headers.get("content-type"))&&F.setContentType(K),ce.body){const[E,I]=p0(de,Wp(m0(N)));b=h0(ce.body,f0,E,I)}}_e.isString(R)||(R=R?"include":"omit");const me=o&&"credentials"in a.prototype,O={...A,signal:B,method:S.toUpperCase(),headers:F.normalize().toJSON(),body:b,duplex:"half",credentials:me?R:void 0};q=o&&new a(x,O);let $=await(o?ae(q,A):ae(x,O));const U=m&&(D==="stream"||D==="response");if(m&&(M||U&&le)){const ce={};["status","statusText","headers"].forEach(ee=>{ce[ee]=$[ee]});const K=_e.toFiniteNumber($.headers.get("content-length")),[E,I]=M&&p0(K,Wp(m0(M),!0))||[];$=new n(h0($.body,f0,E,()=>{I&&I(),le&&le()}),ce)}D=D||"text";let T=await g[_e.findKey(g,D)||"text"]($,k);return!U&&le&&le(),await new Promise((ce,K)=>{pj(ce,K,{data:T,headers:ei.from($.headers),status:$.status,statusText:$.statusText,config:k,request:q})})}catch(me){throw le&&le(),me&&me.name==="TypeError"&&/Load failed|fetch/i.test(me.message)?Object.assign(new vt("Network Error",vt.ERR_NETWORK,k,q,me&&me.response),{cause:me.cause||me}):vt.from(me,me&&me.code,k,q,me&&me.response)}}},tM=new Map,hj=e=>{let t=e&&e.env||{};const{fetch:a,Request:n,Response:r}=t,o=[n,r,a];let s=o.length,d=s,c,p,m=tM;for(;d--;)c=o[d],p=m.get(c),p===void 0&&m.set(c,p=d?new Map:eM(t)),m=p;return p};hj();const $y={http:yD,xhr:GD,fetch:{get:hj}};_e.forEach($y,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});const x0=e=>`- ${e}`,aM=e=>_e.isFunction(e)||e===null||e===!1;function nM(e,t){e=_e.isArray(e)?e:[e];const{length:a}=e;let n,r;const o={};for(let s=0;s`adapter ${c} `+(p===!1?"is not supported by the environment":"is not available in the build"));let d=a?s.length>1?`since : -`+s.map(x0).join(` -`):" "+x0(s[0]):"as no adapter specified";throw new vt("There is no suitable adapter to dispatch the request "+d,"ERR_NOT_SUPPORT")}return r}const fj={getAdapter:nM,adapters:$y};function oh(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new Ac(null,e)}function k0(e){return oh(e),e.headers=ei.from(e.headers),e.data=rh.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),fj.getAdapter(e.adapter||Ec.adapter,e)(e).then(function(n){return oh(e),n.data=rh.call(e,e.transformResponse,n),n.headers=ei.from(n.headers),n},function(n){return uj(n)||(oh(e),n&&n.response&&(n.response.data=rh.call(e,e.transformResponse,n.response),n.response.headers=ei.from(n.response.headers))),Promise.reject(n)})}const vj="1.13.6",Fm={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{Fm[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}});const w0={};Fm.transitional=function(t,a,n){function r(o,s){return"[Axios v"+vj+"] Transitional option '"+o+"'"+s+(n?". "+n:"")}return(o,s,d)=>{if(t===!1)throw new vt(r(s," has been removed"+(a?" in "+a:"")),vt.ERR_DEPRECATED);return a&&!w0[s]&&(w0[s]=!0,console.warn(r(s," has been deprecated since v"+a+" and will be removed in the near future"))),t?t(o,s,d):!0}};Fm.spelling=function(t){return(a,n)=>(console.warn(`${n} is likely a misspelling of ${t}`),!0)};function iM(e,t,a){if(typeof e!="object")throw new vt("options must be an object",vt.ERR_BAD_OPTION_VALUE);const n=Object.keys(e);let r=n.length;for(;r-- >0;){const o=n[r],s=t[o];if(s){const d=e[o],c=d===void 0||s(d,o,e);if(c!==!0)throw new vt("option "+o+" must be "+c,vt.ERR_BAD_OPTION_VALUE);continue}if(a!==!0)throw new vt("Unknown option "+o,vt.ERR_BAD_OPTION)}}const Qu={assertOptions:iM,validators:Fm},xi=Qu.validators;let ps=class{constructor(t){this.defaults=t||{},this.interceptors={request:new c0,response:new c0}}async request(t,a){try{return await this._request(t,a)}catch(n){if(n instanceof Error){let r={};Error.captureStackTrace?Error.captureStackTrace(r):r=new Error;const o=r.stack?r.stack.replace(/^.+\n/,""):"";try{n.stack?o&&!String(n.stack).endsWith(o.replace(/^.+\n.+\n/,""))&&(n.stack+=` -`+o):n.stack=o}catch{}}throw n}}_request(t,a){typeof t=="string"?(a=a||{},a.url=t):a=t||{},a=ks(this.defaults,a);const{transitional:n,paramsSerializer:r,headers:o}=a;n!==void 0&&Qu.assertOptions(n,{silentJSONParsing:xi.transitional(xi.boolean),forcedJSONParsing:xi.transitional(xi.boolean),clarifyTimeoutError:xi.transitional(xi.boolean),legacyInterceptorReqResOrdering:xi.transitional(xi.boolean)},!1),r!=null&&(_e.isFunction(r)?a.paramsSerializer={serialize:r}:Qu.assertOptions(r,{encode:xi.function,serialize:xi.function},!0)),a.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?a.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:a.allowAbsoluteUrls=!0),Qu.assertOptions(a,{baseUrl:xi.spelling("baseURL"),withXsrfToken:xi.spelling("withXSRFToken")},!0),a.method=(a.method||this.defaults.method||"get").toLowerCase();let s=o&&_e.merge(o.common,o[a.method]);o&&_e.forEach(["delete","get","head","post","put","patch","common"],k=>{delete o[k]}),a.headers=ei.concat(s,o);const d=[];let c=!0;this.interceptors.request.forEach(function(x){if(typeof x.runWhen=="function"&&x.runWhen(a)===!1)return;c=c&&x.synchronous;const S=a.transitional||Wy;S&&S.legacyInterceptorReqResOrdering?d.unshift(x.fulfilled,x.rejected):d.push(x.fulfilled,x.rejected)});const p=[];this.interceptors.response.forEach(function(x){p.push(x.fulfilled,x.rejected)});let m,g=0,f;if(!c){const k=[k0.bind(this),void 0];for(k.unshift(...d),k.push(...p),f=k.length,m=Promise.resolve(a);g{if(!n._listeners)return;let o=n._listeners.length;for(;o-- >0;)n._listeners[o](r);n._listeners=null}),this.promise.then=r=>{let o;const s=new Promise(d=>{n.subscribe(d),o=d}).then(r);return s.cancel=function(){n.unsubscribe(o)},s},t(function(o,s,d){n.reason||(n.reason=new Ac(o,s,d),a(n.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const a=this._listeners.indexOf(t);a!==-1&&this._listeners.splice(a,1)}toAbortSignal(){const t=new AbortController,a=n=>{t.abort(n)};return this.subscribe(a),t.signal.unsubscribe=()=>this.unsubscribe(a),t.signal}static source(){let t;return{token:new yj(function(r){t=r}),cancel:t}}};function oM(e){return function(a){return e.apply(null,a)}}function sM(e){return _e.isObject(e)&&e.isAxiosError===!0}const Vf={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(Vf).forEach(([e,t])=>{Vf[t]=e});function bj(e){const t=new ps(e),a=JS(ps.prototype.request,t);return _e.extend(a,ps.prototype,t,{allOwnKeys:!0}),_e.extend(a,t,null,{allOwnKeys:!0}),a.create=function(r){return bj(ks(e,r))},a}const Ha=bj(Ec);Ha.Axios=ps;Ha.CanceledError=Ac;Ha.CancelToken=rM;Ha.isCancel=uj;Ha.VERSION=vj;Ha.toFormData=Lm;Ha.AxiosError=vt;Ha.Cancel=Ha.CanceledError;Ha.all=function(t){return Promise.all(t)};Ha.spread=oM;Ha.isAxiosError=sM;Ha.mergeConfig=ks;Ha.AxiosHeaders=ei;Ha.formToJSON=e=>cj(_e.isHTMLForm(e)?new FormData(e):e);Ha.getAdapter=fj.getAdapter;Ha.HttpStatusCode=Vf;Ha.default=Ha;const{Axios:LU,AxiosError:FU,CanceledError:OU,isCancel:BU,CancelToken:HU,VERSION:WU,all:UU,Cancel:$U,isAxiosError:VU,spread:KU,toFormData:qU,AxiosHeaders:GU,HttpStatusCode:ZU,formToJSON:YU,getAdapter:XU,mergeConfig:JU}=Ha;let Pa=null,Nr=null,Bd=1e3;const lM=3e4,Vy=new Set,uc=new Set;let Al=!1,xj=null,sh=!1;function dM(){return xj}function cM(e){return`${location.protocol==="https:"?"wss":"ws"}://${location.host}/ws?token=${e}`}async function uM(){try{const e=await fetch("/api/auth/ws-token",{method:"POST",credentials:"include"});if(e.status===401)return Al=!1,null;if(!e.ok)return null;const{token:t}=await e.json();return t}catch{return null}}function pM(e){try{const t=JSON.parse(e.data);if(t.type==="welcome"){xj=t.socketId;return}Vy.forEach(a=>{try{a(t)}catch(n){console.error("WebSocket listener error:",n)}})}catch(t){console.error("WebSocket message parse error:",t)}}function _0(){Nr||(Nr=setTimeout(()=>{Nr=null,Al&&kj(!0)},Bd),Bd=Math.min(Bd*2,lM))}async function kj(e=!1){if(sh||Pa&&(Pa.readyState===WebSocket.OPEN||Pa.readyState===WebSocket.CONNECTING))return;sh=!0;const t=await uM();if(sh=!1,!t){Al&&_0();return}const a=cM(t);Pa=new WebSocket(a),Pa.onopen=()=>{Bd=1e3,uc.size>0&&uc.forEach(n=>{Pa&&Pa.readyState===WebSocket.OPEN&&Pa.send(JSON.stringify({type:"join",tripId:n}))})},Pa.onmessage=pM,Pa.onclose=()=>{Pa=null,Al&&_0()},Pa.onerror=()=>{}}function gd(){Al=!0,Bd=1e3,Nr&&(clearTimeout(Nr),Nr=null),kj(!1)}function mM(){Al=!1,Nr&&(clearTimeout(Nr),Nr=null),uc.clear(),Pa&&(Pa.onclose=null,Pa.close(),Pa=null)}function gM(e){uc.add(String(e)),Pa&&Pa.readyState===WebSocket.OPEN&&Pa.send(JSON.stringify({type:"join",tripId:String(e)}))}function hM(e){uc.delete(String(e)),Pa&&Pa.readyState===WebSocket.OPEN&&Pa.send(JSON.stringify({type:"leave",tripId:String(e)}))}function Nl(e){Vy.add(e)}function Dl(e){Vy.delete(e)}const re=Ha.create({baseURL:"/api",withCredentials:!0,headers:{"Content-Type":"application/json"}});re.interceptors.request.use(e=>{const t=dM();return t&&(e.headers["X-Socket-Id"]=t),e},e=>Promise.reject(e));re.interceptors.response.use(e=>e,e=>{var t,a,n,r;return((t=e.response)==null?void 0:t.status)===401&&!window.location.pathname.includes("/login")&&!window.location.pathname.includes("/register")&&(window.location.href="/login"),((a=e.response)==null?void 0:a.status)===403&&((r=(n=e.response)==null?void 0:n.data)==null?void 0:r.code)==="MFA_REQUIRED"&&!window.location.pathname.startsWith("/settings")&&(window.location.href="/settings?mfa=required"),Promise.reject(e)});const kt={register:e=>re.post("/auth/register",e).then(t=>t.data),validateInvite:e=>re.get(`/auth/invite/${e}`).then(t=>t.data),login:e=>re.post("/auth/login",e).then(t=>t.data),verifyMfaLogin:e=>re.post("/auth/mfa/verify-login",e).then(t=>t.data),mfaSetup:()=>re.post("/auth/mfa/setup",{}).then(e=>e.data),mfaEnable:e=>re.post("/auth/mfa/enable",e).then(t=>t.data),mfaDisable:e=>re.post("/auth/mfa/disable",e).then(t=>t.data),me:()=>re.get("/auth/me").then(e=>e.data),updateMapsKey:e=>re.put("/auth/me/maps-key",{maps_api_key:e}).then(t=>t.data),updateApiKeys:e=>re.put("/auth/me/api-keys",e).then(t=>t.data),updateSettings:e=>re.put("/auth/me/settings",e).then(t=>t.data),getSettings:()=>re.get("/auth/me/settings").then(e=>e.data),listUsers:()=>re.get("/auth/users").then(e=>e.data),uploadAvatar:e=>re.post("/auth/avatar",e,{headers:{"Content-Type":"multipart/form-data"}}).then(t=>t.data),deleteAvatar:()=>re.delete("/auth/avatar").then(e=>e.data),getAppConfig:()=>re.get("/auth/app-config").then(e=>e.data),updateAppSettings:e=>re.put("/auth/app-settings",e).then(t=>t.data),validateKeys:()=>re.get("/auth/validate-keys").then(e=>e.data),travelStats:()=>re.get("/auth/travel-stats").then(e=>e.data),changePassword:e=>re.put("/auth/me/password",e).then(t=>t.data),deleteOwnAccount:()=>re.delete("/auth/me").then(e=>e.data),demoLogin:()=>re.post("/auth/demo-login").then(e=>e.data),mcpTokens:{list:()=>re.get("/auth/mcp-tokens").then(e=>e.data),create:e=>re.post("/auth/mcp-tokens",{name:e}).then(t=>t.data),delete:e=>re.delete(`/auth/mcp-tokens/${e}`).then(t=>t.data)}},Va={list:e=>re.get("/trips",{params:e}).then(t=>t.data),create:e=>re.post("/trips",e).then(t=>t.data),get:e=>re.get(`/trips/${e}`).then(t=>t.data),update:(e,t)=>re.put(`/trips/${e}`,t).then(a=>a.data),delete:e=>re.delete(`/trips/${e}`).then(t=>t.data),uploadCover:(e,t)=>re.post(`/trips/${e}/cover`,t,{headers:{"Content-Type":"multipart/form-data"}}).then(a=>a.data),archive:e=>re.put(`/trips/${e}`,{is_archived:!0}).then(t=>t.data),unarchive:e=>re.put(`/trips/${e}`,{is_archived:!1}).then(t=>t.data),getMembers:e=>re.get(`/trips/${e}/members`).then(t=>t.data),addMember:(e,t)=>re.post(`/trips/${e}/members`,{identifier:t}).then(a=>a.data),removeMember:(e,t)=>re.delete(`/trips/${e}/members/${t}`).then(a=>a.data)},bl={list:e=>re.get(`/trips/${e}/days`).then(t=>t.data),create:(e,t)=>re.post(`/trips/${e}/days`,t).then(a=>a.data),update:(e,t,a)=>re.put(`/trips/${e}/days/${t}`,a).then(n=>n.data),delete:(e,t)=>re.delete(`/trips/${e}/days/${t}`).then(a=>a.data)},Pr={list:(e,t)=>re.get(`/trips/${e}/places`,{params:t}).then(a=>a.data),create:(e,t)=>re.post(`/trips/${e}/places`,t).then(a=>a.data),get:(e,t)=>re.get(`/trips/${e}/places/${t}`).then(a=>a.data),update:(e,t,a)=>re.put(`/trips/${e}/places/${t}`,a).then(n=>n.data),delete:(e,t)=>re.delete(`/trips/${e}/places/${t}`).then(a=>a.data),searchImage:(e,t)=>re.get(`/trips/${e}/places/${t}/image`).then(a=>a.data),importGpx:(e,t)=>{const a=new FormData;return a.append("file",t),re.post(`/trips/${e}/places/import/gpx`,a,{headers:{"Content-Type":"multipart/form-data"}}).then(n=>n.data)},importGoogleList:(e,t)=>re.post(`/trips/${e}/places/import/google-list`,{url:t}).then(a=>a.data)},Li={list:(e,t)=>re.get(`/trips/${e}/days/${t}/assignments`).then(a=>a.data),create:(e,t,a)=>re.post(`/trips/${e}/days/${t}/assignments`,a).then(n=>n.data),delete:(e,t,a)=>re.delete(`/trips/${e}/days/${t}/assignments/${a}`).then(n=>n.data),reorder:(e,t,a)=>re.put(`/trips/${e}/days/${t}/assignments/reorder`,{orderedIds:a}).then(n=>n.data),move:(e,t,a,n)=>re.put(`/trips/${e}/assignments/${t}/move`,{new_day_id:a,order_index:n}).then(r=>r.data),update:(e,t,a,n)=>re.put(`/trips/${e}/days/${t}/assignments/${a}`,n).then(r=>r.data),getParticipants:(e,t)=>re.get(`/trips/${e}/assignments/${t}/participants`).then(a=>a.data),setParticipants:(e,t,a)=>re.put(`/trips/${e}/assignments/${t}/participants`,{user_ids:a}).then(n=>n.data),updateTime:(e,t,a)=>re.put(`/trips/${e}/assignments/${t}/time`,a).then(n=>n.data)},qn={list:e=>re.get(`/trips/${e}/packing`).then(t=>t.data),create:(e,t)=>re.post(`/trips/${e}/packing`,t).then(a=>a.data),bulkImport:(e,t)=>re.post(`/trips/${e}/packing/import`,{items:t}).then(a=>a.data),update:(e,t,a)=>re.put(`/trips/${e}/packing/${t}`,a).then(n=>n.data),delete:(e,t)=>re.delete(`/trips/${e}/packing/${t}`).then(a=>a.data),reorder:(e,t)=>re.put(`/trips/${e}/packing/reorder`,{orderedIds:t}).then(a=>a.data),getCategoryAssignees:e=>re.get(`/trips/${e}/packing/category-assignees`).then(t=>t.data),setCategoryAssignees:(e,t,a)=>re.put(`/trips/${e}/packing/category-assignees/${encodeURIComponent(t)}`,{user_ids:a}).then(n=>n.data),applyTemplate:(e,t)=>re.post(`/trips/${e}/packing/apply-template/${t}`).then(a=>a.data),listBags:e=>re.get(`/trips/${e}/packing/bags`).then(t=>t.data),createBag:(e,t)=>re.post(`/trips/${e}/packing/bags`,t).then(a=>a.data),updateBag:(e,t,a)=>re.put(`/trips/${e}/packing/bags/${t}`,a).then(n=>n.data),deleteBag:(e,t)=>re.delete(`/trips/${e}/packing/bags/${t}`).then(a=>a.data)},Kf={list:()=>re.get("/tags").then(e=>e.data),create:e=>re.post("/tags",e).then(t=>t.data),update:(e,t)=>re.put(`/tags/${e}`,t).then(a=>a.data),delete:e=>re.delete(`/tags/${e}`).then(t=>t.data)},ss={list:()=>re.get("/categories").then(e=>e.data),create:e=>re.post("/categories",e).then(t=>t.data),update:(e,t)=>re.put(`/categories/${e}`,t).then(a=>a.data),delete:e=>re.delete(`/categories/${e}`).then(t=>t.data)},Et={users:()=>re.get("/admin/users").then(e=>e.data),createUser:e=>re.post("/admin/users",e).then(t=>t.data),updateUser:(e,t)=>re.put(`/admin/users/${e}`,t).then(a=>a.data),deleteUser:e=>re.delete(`/admin/users/${e}`).then(t=>t.data),stats:()=>re.get("/admin/stats").then(e=>e.data),saveDemoBaseline:()=>re.post("/admin/save-demo-baseline").then(e=>e.data),getOidc:()=>re.get("/admin/oidc").then(e=>e.data),updateOidc:e=>re.put("/admin/oidc",e).then(t=>t.data),addons:()=>re.get("/admin/addons").then(e=>e.data),updateAddon:(e,t)=>re.put(`/admin/addons/${e}`,t).then(a=>a.data),checkVersion:()=>re.get("/admin/version-check").then(e=>e.data),getBagTracking:()=>re.get("/admin/bag-tracking").then(e=>e.data),updateBagTracking:e=>re.put("/admin/bag-tracking",{enabled:e}).then(t=>t.data),packingTemplates:()=>re.get("/admin/packing-templates").then(e=>e.data),getPackingTemplate:e=>re.get(`/admin/packing-templates/${e}`).then(t=>t.data),createPackingTemplate:e=>re.post("/admin/packing-templates",e).then(t=>t.data),updatePackingTemplate:(e,t)=>re.put(`/admin/packing-templates/${e}`,t).then(a=>a.data),deletePackingTemplate:e=>re.delete(`/admin/packing-templates/${e}`).then(t=>t.data),addTemplateCategory:(e,t)=>re.post(`/admin/packing-templates/${e}/categories`,t).then(a=>a.data),updateTemplateCategory:(e,t,a)=>re.put(`/admin/packing-templates/${e}/categories/${t}`,a).then(n=>n.data),deleteTemplateCategory:(e,t)=>re.delete(`/admin/packing-templates/${e}/categories/${t}`).then(a=>a.data),addTemplateItem:(e,t,a)=>re.post(`/admin/packing-templates/${e}/categories/${t}/items`,a).then(n=>n.data),updateTemplateItem:(e,t,a)=>re.put(`/admin/packing-templates/${e}/items/${t}`,a).then(n=>n.data),deleteTemplateItem:(e,t)=>re.delete(`/admin/packing-templates/${e}/items/${t}`).then(a=>a.data),listInvites:()=>re.get("/admin/invites").then(e=>e.data),createInvite:e=>re.post("/admin/invites",e).then(t=>t.data),deleteInvite:e=>re.delete(`/admin/invites/${e}`).then(t=>t.data),auditLog:e=>re.get("/admin/audit-log",{params:e}).then(t=>t.data),mcpTokens:()=>re.get("/admin/mcp-tokens").then(e=>e.data),deleteMcpToken:e=>re.delete(`/admin/mcp-tokens/${e}`).then(t=>t.data),getPermissions:()=>re.get("/admin/permissions").then(e=>e.data),updatePermissions:e=>re.put("/admin/permissions",{permissions:e}).then(t=>t.data),rotateJwtSecret:()=>re.post("/admin/rotate-jwt-secret").then(e=>e.data)},Ky={enabled:()=>re.get("/addons").then(e=>e.data)},ws={search:(e,t)=>re.post(`/maps/search?lang=${t||"en"}`,{query:e}).then(a=>a.data),details:(e,t)=>re.get(`/maps/details/${encodeURIComponent(e)}`,{params:{lang:t}}).then(a=>a.data),placePhoto:(e,t,a,n)=>re.get(`/maps/place-photo/${encodeURIComponent(e)}`,{params:{lat:t,lng:a,name:n}}).then(r=>r.data),reverse:(e,t,a)=>re.get("/maps/reverse",{params:{lat:e,lng:t,lang:a}}).then(n=>n.data),resolveUrl:e=>re.post("/maps/resolve-url",{url:e}).then(t=>t.data)},Cr={list:e=>re.get(`/trips/${e}/budget`).then(t=>t.data),create:(e,t)=>re.post(`/trips/${e}/budget`,t).then(a=>a.data),update:(e,t,a)=>re.put(`/trips/${e}/budget/${t}`,a).then(n=>n.data),delete:(e,t)=>re.delete(`/trips/${e}/budget/${t}`).then(a=>a.data),setMembers:(e,t,a)=>re.put(`/trips/${e}/budget/${t}/members`,{user_ids:a}).then(n=>n.data),togglePaid:(e,t,a,n)=>re.put(`/trips/${e}/budget/${t}/members/${a}/paid`,{paid:n}).then(r=>r.data),perPersonSummary:e=>re.get(`/trips/${e}/budget/summary/per-person`).then(t=>t.data),settlement:e=>re.get(`/trips/${e}/budget/settlement`).then(t=>t.data)},kn={list:(e,t)=>re.get(`/trips/${e}/files`,{params:t?{trash:"true"}:{}}).then(a=>a.data),upload:(e,t)=>re.post(`/trips/${e}/files`,t,{headers:{"Content-Type":"multipart/form-data"}}).then(a=>a.data),update:(e,t,a)=>re.put(`/trips/${e}/files/${t}`,a).then(n=>n.data),delete:(e,t)=>re.delete(`/trips/${e}/files/${t}`).then(a=>a.data),toggleStar:(e,t)=>re.patch(`/trips/${e}/files/${t}/star`).then(a=>a.data),restore:(e,t)=>re.post(`/trips/${e}/files/${t}/restore`).then(a=>a.data),permanentDelete:(e,t)=>re.delete(`/trips/${e}/files/${t}/permanent`).then(a=>a.data),emptyTrash:e=>re.delete(`/trips/${e}/files/trash/empty`).then(t=>t.data),addLink:(e,t,a)=>re.post(`/trips/${e}/files/${t}/link`,a).then(n=>n.data),removeLink:(e,t,a)=>re.delete(`/trips/${e}/files/${t}/link/${a}`).then(n=>n.data),getLinks:(e,t)=>re.get(`/trips/${e}/files/${t}/links`).then(a=>a.data)},lo={list:e=>re.get(`/trips/${e}/reservations`).then(t=>t.data),create:(e,t)=>re.post(`/trips/${e}/reservations`,t).then(a=>a.data),update:(e,t,a)=>re.put(`/trips/${e}/reservations/${t}`,a).then(n=>n.data),delete:(e,t)=>re.delete(`/trips/${e}/reservations/${t}`).then(a=>a.data),updatePositions:(e,t)=>re.put(`/trips/${e}/reservations/positions`,{positions:t}).then(a=>a.data)},Up={get:(e,t,a)=>re.get("/weather",{params:{lat:e,lng:t,date:a}}).then(n=>n.data),getDetailed:(e,t,a,n)=>re.get("/weather/detailed",{params:{lat:e,lng:t,date:a,lang:n}}).then(r=>r.data)},ep={get:()=>re.get("/settings").then(e=>e.data),set:(e,t)=>re.put("/settings",{key:e,value:t}).then(a=>a.data),setBulk:e=>re.post("/settings/bulk",{settings:e}).then(t=>t.data)},rr={list:e=>re.get(`/trips/${e}/accommodations`).then(t=>t.data),create:(e,t)=>re.post(`/trips/${e}/accommodations`,t).then(a=>a.data),update:(e,t,a)=>re.put(`/trips/${e}/accommodations/${t}`,a).then(n=>n.data),delete:(e,t)=>re.delete(`/trips/${e}/accommodations/${t}`).then(a=>a.data)},Ks={list:(e,t)=>re.get(`/trips/${e}/days/${t}/notes`).then(a=>a.data),create:(e,t,a)=>re.post(`/trips/${e}/days/${t}/notes`,a).then(n=>n.data),update:(e,t,a,n)=>re.put(`/trips/${e}/days/${t}/notes/${a}`,n).then(r=>r.data),delete:(e,t,a)=>re.delete(`/trips/${e}/days/${t}/notes/${a}`).then(n=>n.data)},Aa={getNotes:e=>re.get(`/trips/${e}/collab/notes`).then(t=>t.data),createNote:(e,t)=>re.post(`/trips/${e}/collab/notes`,t).then(a=>a.data),updateNote:(e,t,a)=>re.put(`/trips/${e}/collab/notes/${t}`,a).then(n=>n.data),deleteNote:(e,t)=>re.delete(`/trips/${e}/collab/notes/${t}`).then(a=>a.data),uploadNoteFile:(e,t,a)=>re.post(`/trips/${e}/collab/notes/${t}/files`,a,{headers:{"Content-Type":"multipart/form-data"}}).then(n=>n.data),deleteNoteFile:(e,t,a)=>re.delete(`/trips/${e}/collab/notes/${t}/files/${a}`).then(n=>n.data),getPolls:e=>re.get(`/trips/${e}/collab/polls`).then(t=>t.data),createPoll:(e,t)=>re.post(`/trips/${e}/collab/polls`,t).then(a=>a.data),votePoll:(e,t,a)=>re.post(`/trips/${e}/collab/polls/${t}/vote`,{option_index:a}).then(n=>n.data),closePoll:(e,t)=>re.put(`/trips/${e}/collab/polls/${t}/close`).then(a=>a.data),deletePoll:(e,t)=>re.delete(`/trips/${e}/collab/polls/${t}`).then(a=>a.data),getMessages:(e,t)=>re.get(`/trips/${e}/collab/messages${t?`?before=${t}`:""}`).then(a=>a.data),sendMessage:(e,t)=>re.post(`/trips/${e}/collab/messages`,t).then(a=>a.data),deleteMessage:(e,t)=>re.delete(`/trips/${e}/collab/messages/${t}`).then(a=>a.data),reactMessage:(e,t,a)=>re.post(`/trips/${e}/collab/messages/${t}/react`,{emoji:a}).then(n=>n.data),linkPreview:(e,t)=>re.get(`/trips/${e}/collab/link-preview?url=${encodeURIComponent(t)}`).then(a=>a.data)},_r={list:()=>re.get("/backup/list").then(e=>e.data),create:()=>re.post("/backup/create").then(e=>e.data),download:async e=>{const t=await fetch(`/api/backup/download/${e}`,{credentials:"include"});if(!t.ok)throw new Error("Download failed");const a=await t.blob(),n=URL.createObjectURL(a),r=document.createElement("a");r.href=n,r.download=e,r.click(),URL.revokeObjectURL(n)},delete:e=>re.delete(`/backup/${e}`).then(t=>t.data),restore:e=>re.post(`/backup/restore/${e}`).then(t=>t.data),uploadRestore:e=>{const t=new FormData;return t.append("backup",e),re.post("/backup/upload-restore",t,{headers:{"Content-Type":"multipart/form-data"}}).then(a=>a.data)},getAutoSettings:()=>re.get("/backup/auto-settings").then(e=>e.data),setAutoSettings:e=>re.put("/backup/auto-settings",e).then(t=>t.data)},sl={getLink:e=>re.get(`/trips/${e}/share-link`).then(t=>t.data),createLink:(e,t)=>re.post(`/trips/${e}/share-link`,t||{}).then(a=>a.data),deleteLink:e=>re.delete(`/trips/${e}/share-link`).then(t=>t.data),getSharedTrip:e=>re.get(`/shared/${e}`).then(t=>t.data)},qf={getPreferences:()=>re.get("/notifications/preferences").then(e=>e.data),updatePreferences:e=>re.put("/notifications/preferences",e).then(t=>t.data),testSmtp:e=>re.post("/notifications/test-smtp",{email:e}).then(t=>t.data),testWebhook:()=>re.post("/notifications/test-webhook").then(e=>e.data)},wj=Object.freeze(Object.defineProperty({__proto__:null,accommodationsApi:rr,addonsApi:Ky,adminApi:Et,assignmentsApi:Li,authApi:kt,backupApi:_r,budgetApi:Cr,categoriesApi:ss,collabApi:Aa,dayNotesApi:Ks,daysApi:bl,default:re,filesApi:kn,mapsApi:ws,notificationsApi:qf,packingApi:qn,placesApi:Pr,reservationsApi:lo,settingsApi:ep,shareApi:sl,tagsApi:Kf,tripsApi:Va,weatherApi:Up},Symbol.toStringTag,{value:"Module"}));function st(e,t){var a,n;if(typeof e=="object"&&e!==null&&"response"in e){const r=e;if((n=(a=r.response)==null?void 0:a.data)!=null&&n.error)return r.response.data.error}return e instanceof Error?e.message:t}const Na=Wl((e,t)=>({user:null,isAuthenticated:!1,isLoading:!0,error:null,demoMode:localStorage.getItem("demo_mode")==="true",hasMapsKey:!1,serverTimezone:Intl.DateTimeFormat().resolvedOptions().timeZone,appRequireMfa:!1,tripRemindersEnabled:!1,login:async(a,n)=>{e({isLoading:!0,error:null});try{const r=await kt.login({email:a,password:n});return r.mfa_required&&r.mfa_token?(e({isLoading:!1,error:null}),{mfa_required:!0,mfa_token:r.mfa_token}):(e({user:r.user,isAuthenticated:!0,isLoading:!1,error:null}),gd(),r)}catch(r){const o=st(r,"Login failed");throw e({isLoading:!1,error:o}),new Error(o)}},completeMfaLogin:async(a,n)=>{e({isLoading:!0,error:null});try{const r=await kt.verifyMfaLogin({mfa_token:a,code:n.replace(/\s/g,"")});return e({user:r.user,isAuthenticated:!0,isLoading:!1,error:null}),gd(),r}catch(r){const o=st(r,"Verification failed");throw e({isLoading:!1,error:o}),new Error(o)}},register:async(a,n,r,o)=>{e({isLoading:!0,error:null});try{const s=await kt.register({username:a,email:n,password:r,invite_token:o});return e({user:s.user,isAuthenticated:!0,isLoading:!1,error:null}),gd(),s}catch(s){const d=st(s,"Registration failed");throw e({isLoading:!1,error:d}),new Error(d)}},logout:()=>{mM(),fetch("/api/auth/logout",{method:"POST",credentials:"include"}).catch(()=>{}),"caches"in window&&(caches.delete("api-data").catch(()=>{}),caches.delete("user-uploads").catch(()=>{})),e({user:null,isAuthenticated:!1,error:null})},loadUser:async a=>{var r;!!(a!=null&&a.silent)||e({isLoading:!0});try{const o=await kt.me();e({user:o.user,isAuthenticated:!0,isLoading:!1}),gd()}catch(o){const s=o&&typeof o=="object"&&"response"in o&&((r=o.response)==null?void 0:r.status)===401;e(s?{user:null,isAuthenticated:!1,isLoading:!1}:{isLoading:!1})}},updateMapsKey:async a=>{try{await kt.updateMapsKey(a),e(n=>({user:n.user?{...n.user,maps_api_key:a||null}:null}))}catch(n){throw new Error(st(n,"Error saving API key"))}},updateApiKeys:async a=>{try{const n=await kt.updateApiKeys(a);e({user:n.user})}catch(n){throw new Error(st(n,"Error saving API keys"))}},updateProfile:async a=>{try{const n=await kt.updateSettings(a);e({user:n.user})}catch(n){throw new Error(st(n,"Error updating profile"))}},uploadAvatar:async a=>{const n=new FormData;n.append("avatar",a);const r=await kt.uploadAvatar(n);return e(o=>({user:o.user?{...o.user,avatar_url:r.avatar_url}:null})),r},deleteAvatar:async()=>{await kt.deleteAvatar(),e(a=>({user:a.user?{...a.user,avatar_url:null}:null}))},setDemoMode:a=>{a?localStorage.setItem("demo_mode","true"):localStorage.removeItem("demo_mode"),e({demoMode:a})},setHasMapsKey:a=>e({hasMapsKey:a}),setServerTimezone:a=>e({serverTimezone:a}),setAppRequireMfa:a=>e({appRequireMfa:a}),setTripRemindersEnabled:a=>e({tripRemindersEnabled:a}),demoLogin:async()=>{e({isLoading:!0,error:null});try{const a=await kt.demoLogin();return e({user:a.user,isAuthenticated:!0,isLoading:!1,demoMode:!0,error:null}),gd(),a}catch(a){const n=st(a,"Demo login failed");throw e({isLoading:!1,error:n}),new Error(n)}}})),na=Wl((e,t)=>({settings:{map_tile_url:"",default_lat:48.8566,default_lng:2.3522,default_zoom:10,dark_mode:!1,default_currency:"USD",language:localStorage.getItem("app_language")||"en",temperature_unit:"fahrenheit",time_format:"12h",show_place_description:!1},isLoaded:!1,loadSettings:async()=>{try{const a=await ep.get();e(n=>({settings:{...n.settings,...a.settings},isLoaded:!0}))}catch(a){e({isLoaded:!0}),console.error("Failed to load settings:",a)}},updateSetting:async(a,n)=>{e(r=>({settings:{...r.settings,[a]:n}})),a==="language"&&localStorage.setItem("app_language",n);try{await ep.set(a,n)}catch(r){throw console.error("Failed to save setting:",r),new Error(st(r,"Error saving setting"))}},setLanguageLocal:a=>{localStorage.setItem("app_language",a),e(n=>({settings:{...n.settings,language:a}}))},updateSettings:async a=>{e(n=>({settings:{...n.settings,...a}}));try{await ep.setBulk(a)}catch(n){throw console.error("Failed to save settings:",n),new Error(st(n,"Error saving settings"))}}})),fM={"common.save":"Speichern","common.cancel":"Abbrechen","common.delete":"Löschen","common.edit":"Bearbeiten","common.add":"Hinzufügen","common.loading":"Laden...","common.import":"Importieren","common.error":"Fehler","common.back":"Zurück","common.all":"Alle","common.close":"Schließen","common.open":"Öffnen","common.upload":"Hochladen","common.search":"Suchen","common.confirm":"Bestätigen","common.ok":"OK","common.yes":"Ja","common.no":"Nein","common.or":"oder","common.none":"Keine","common.date":"Datum","common.rename":"Umbenennen","common.name":"Name","common.email":"E-Mail","common.password":"Passwort","common.saving":"Speichern...","common.saved":"Gespeichert","trips.reminder":"Erinnerung","trips.reminderNone":"Keine","trips.reminderDay":"Tag","trips.reminderDays":"Tage","trips.reminderCustom":"Benutzerdefiniert","trips.reminderDaysBefore":"Tage vor Abreise","trips.reminderDisabledHint":"Reiseerinnerungen sind deaktiviert. Aktivieren Sie sie unter Admin > Einstellungen > Benachrichtigungen.","common.update":"Aktualisieren","common.change":"Ändern","common.uploading":"Hochladen…","common.backToPlanning":"Zurück zur Planung","common.reset":"Zurücksetzen","nav.trip":"Reise","nav.share":"Teilen","nav.settings":"Einstellungen","nav.admin":"Admin","nav.logout":"Abmelden","nav.lightMode":"Heller Modus","nav.darkMode":"Dunkler Modus","nav.autoMode":"Automatischer Modus","nav.administrator":"Administrator","dashboard.title":"Meine Reisen","dashboard.subtitle.loading":"Reisen werden geladen...","dashboard.subtitle.trips":"{count} Reisen ({archived} archiviert)","dashboard.subtitle.empty":"Starte deine erste Reise","dashboard.subtitle.activeOne":"{count} aktive Reise","dashboard.subtitle.activeMany":"{count} aktive Reisen","dashboard.subtitle.archivedSuffix":" · {count} archiviert","dashboard.newTrip":"Neue Reise","dashboard.gridView":"Kachelansicht","dashboard.listView":"Listenansicht","dashboard.currency":"Währung","dashboard.timezone":"Zeitzonen","dashboard.localTime":"Lokal","dashboard.timezoneCustomTitle":"Eigene Zeitzone","dashboard.timezoneCustomLabelPlaceholder":"Bezeichnung (optional)","dashboard.timezoneCustomTzPlaceholder":"z.B. America/New_York","dashboard.timezoneCustomAdd":"Hinzufügen","dashboard.timezoneCustomErrorEmpty":"Zeitzone eingeben","dashboard.timezoneCustomErrorInvalid":"Ungültige Zeitzone. Format: Europe/Berlin","dashboard.timezoneCustomErrorDuplicate":"Bereits hinzugefügt","dashboard.emptyTitle":"Noch keine Reisen","dashboard.emptyText":"Erstelle deine erste Reise und beginne mit der Planung von Orten, Tagesabläufen und Packlisten.","dashboard.emptyButton":"Erste Reise erstellen","dashboard.nextTrip":"Nächste Reise","dashboard.shared":"Geteilt","dashboard.sharedBy":"Geteilt von {name}","dashboard.days":"Tage","dashboard.places":"Orte","dashboard.archive":"Archivieren","dashboard.restore":"Wiederherstellen","dashboard.archived":"Archiviert","dashboard.status.ongoing":"Laufend","dashboard.status.today":"Heute","dashboard.status.tomorrow":"Morgen","dashboard.status.past":"Vergangen","dashboard.status.daysLeft":"Noch {count} Tage","dashboard.toast.loadError":"Fehler beim Laden der Reisen","dashboard.toast.created":"Reise erfolgreich erstellt!","dashboard.toast.createError":"Fehler beim Erstellen","dashboard.toast.updated":"Reise aktualisiert!","dashboard.toast.updateError":"Fehler beim Aktualisieren","dashboard.toast.deleted":"Reise gelöscht","dashboard.toast.deleteError":"Fehler beim Löschen","dashboard.toast.archived":"Reise archiviert","dashboard.toast.archiveError":"Fehler beim Archivieren","dashboard.toast.restored":"Reise wiederhergestellt","dashboard.toast.restoreError":"Fehler beim Wiederherstellen","dashboard.confirm.delete":'Reise "{title}" löschen? Alle Orte und Pläne werden unwiderruflich gelöscht.',"dashboard.editTrip":"Reise bearbeiten","dashboard.createTrip":"Neue Reise erstellen","dashboard.tripTitle":"Titel","dashboard.tripTitlePlaceholder":"z.B. Sommer in Japan","dashboard.tripDescription":"Beschreibung","dashboard.tripDescriptionPlaceholder":"Worum geht es bei dieser Reise?","dashboard.startDate":"Startdatum","dashboard.endDate":"Enddatum","dashboard.noDateHint":"Kein Datum gesetzt — es werden 7 Standardtage erstellt. Du kannst das jederzeit ändern.","dashboard.coverImage":"Titelbild","dashboard.addCoverImage":"Titelbild hinzufügen (oder per Drag & Drop)","dashboard.addMembers":"Reisebegleiter","dashboard.addMember":"Mitglied hinzufügen","dashboard.coverSaved":"Titelbild gespeichert","dashboard.coverUploadError":"Fehler beim Hochladen","dashboard.coverRemoveError":"Fehler beim Entfernen","dashboard.titleRequired":"Titel ist erforderlich","dashboard.endDateError":"Enddatum muss nach dem Startdatum liegen","settings.title":"Einstellungen","settings.subtitle":"Konfigurieren Sie Ihre persönlichen Einstellungen","settings.map":"Karte","settings.mapTemplate":"Karten-Vorlage","settings.mapTemplatePlaceholder.select":"Vorlage auswählen...","settings.mapDefaultHint":"Leer lassen für OpenStreetMap (Standard)","settings.mapTemplatePlaceholder":"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png","settings.mapHint":"URL-Template für die Kartenkacheln","settings.latitude":"Breitengrad","settings.longitude":"Längengrad","settings.saveMap":"Karte speichern","settings.apiKeys":"API-Schlüssel","settings.mapsKey":"Google Maps API-Schlüssel","settings.mapsKeyHint":"Für Ortsuche. Benötigt Places API (New). Erhalten unter console.cloud.google.com","settings.weatherKey":"OpenWeatherMap API-Schlüssel","settings.weatherKeyHint":"Für Wetterdaten. Kostenlos unter openweathermap.org/api","settings.keyPlaceholder":"Schlüssel eingeben...","settings.configured":"Konfiguriert","settings.saveKeys":"Schlüssel speichern","settings.display":"Darstellung","settings.colorMode":"Farbmodus","settings.light":"Hell","settings.dark":"Dunkel","settings.auto":"Automatisch","settings.language":"Sprache","settings.temperature":"Temperatureinheit","settings.timeFormat":"Zeitformat","settings.routeCalculation":"Routenberechnung","settings.blurBookingCodes":"Buchungscodes verbergen","settings.notifications":"Benachrichtigungen","settings.notifyTripInvite":"Trip-Einladungen","settings.notifyBookingChange":"Buchungsänderungen","settings.notifyTripReminder":"Trip-Erinnerungen","settings.notifyVacayInvite":"Vacay Fusion-Einladungen","settings.notifyPhotosShared":"Geteilte Fotos (Immich)","settings.notifyCollabMessage":"Chat-Nachrichten (Collab)","settings.notifyPackingTagged":"Packliste: Zuweisungen","settings.notifyWebhook":"Webhook-Benachrichtigungen","settings.notificationsDisabled":"Benachrichtigungen sind nicht konfiguriert. Bitten Sie einen Administrator, E-Mail- oder Webhook-Benachrichtungen zu aktivieren.","settings.notificationsActive":"Aktiver Kanal","settings.notificationsManagedByAdmin":"Benachrichtigungsereignisse werden vom Administrator konfiguriert.","admin.notifications.title":"Benachrichtigungen","admin.notifications.hint":"Wählen Sie einen Benachrichtigungskanal. Es kann nur einer gleichzeitig aktiv sein.","admin.notifications.none":"Deaktiviert","admin.notifications.email":"E-Mail (SMTP)","admin.notifications.webhook":"Webhook","admin.notifications.events":"Benachrichtigungsereignisse","admin.notifications.eventsHint":"Wähle, welche Ereignisse Benachrichtigungen für alle Benutzer auslösen.","admin.notifications.configureFirst":"Konfiguriere zuerst die SMTP- oder Webhook-Einstellungen unten, dann aktiviere die Events.","admin.notifications.save":"Benachrichtigungseinstellungen speichern","admin.notifications.saved":"Benachrichtigungseinstellungen gespeichert","admin.notifications.testWebhook":"Test-Webhook senden","admin.notifications.testWebhookSuccess":"Test-Webhook erfolgreich gesendet","admin.notifications.testWebhookFailed":"Test-Webhook fehlgeschlagen","admin.smtp.title":"E-Mail & Benachrichtigungen","admin.smtp.hint":"SMTP-Konfiguration zum Versenden von E-Mail-Benachrichtigungen.","admin.smtp.testButton":"Test-E-Mail senden","admin.webhook.hint":"Benachrichtigungen an einen externen Webhook senden (Discord, Slack usw.).","admin.smtp.testSuccess":"Test-E-Mail erfolgreich gesendet","admin.smtp.testFailed":"Test-E-Mail fehlgeschlagen","dayplan.icsTooltip":"Kalender exportieren (ICS)","share.linkTitle":"Öffentlicher Link","share.linkHint":"Erstelle einen Link den jeder ohne Login nutzen kann, um diese Reise anzuschauen. Nur lesen — keine Bearbeitung möglich.","share.createLink":"Link erstellen","share.deleteLink":"Link löschen","share.createError":"Link konnte nicht erstellt werden","common.copy":"Kopieren","common.copied":"Kopiert","share.permMap":"Karte & Plan","share.permBookings":"Buchungen","share.permPacking":"Packliste","shared.expired":"Link abgelaufen oder ungültig","shared.expiredHint":"Dieser geteilte Reise-Link ist nicht mehr aktiv.","shared.readOnly":"Nur-Lesen Ansicht","shared.tabPlan":"Plan","shared.tabBookings":"Buchungen","shared.tabPacking":"Packliste","shared.tabBudget":"Budget","shared.tabChat":"Chat","shared.days":"Tage","shared.places":"Orte","shared.other":"Sonstige","shared.totalBudget":"Gesamtbudget","shared.messages":"Nachrichten","shared.sharedVia":"Geteilt über","shared.confirmed":"Bestätigt","shared.pending":"Ausstehend","share.permBudget":"Budget","share.permCollab":"Chat","settings.on":"An","settings.off":"Aus","settings.mcp.title":"MCP-Konfiguration","settings.mcp.endpoint":"MCP-Endpunkt","settings.mcp.clientConfig":"Client-Konfiguration","settings.mcp.clientConfigHint":"Ersetze durch ein API-Token aus der Liste unten. Der Pfad zu npx muss ggf. für dein System angepasst werden (z. B. C:\\PROGRA~1\\nodejs\\npx.cmd unter Windows).","settings.mcp.copy":"Kopieren","settings.mcp.copied":"Kopiert!","settings.mcp.apiTokens":"API-Tokens","settings.mcp.createToken":"Neuen Token erstellen","settings.mcp.noTokens":"Noch keine Tokens. Erstelle einen, um MCP-Clients zu verbinden.","settings.mcp.tokenCreatedAt":"Erstellt","settings.mcp.tokenUsedAt":"Verwendet","settings.mcp.deleteTokenTitle":"Token löschen","settings.mcp.deleteTokenMessage":"Dieser Token wird sofort ungültig. Jeder MCP-Client, der ihn verwendet, verliert den Zugang.","settings.mcp.modal.createTitle":"API-Token erstellen","settings.mcp.modal.tokenName":"Token-Name","settings.mcp.modal.tokenNamePlaceholder":"z. B. Claude Desktop, Arbeits-Laptop","settings.mcp.modal.creating":"Wird erstellt…","settings.mcp.modal.create":"Token erstellen","settings.mcp.modal.createdTitle":"Token erstellt","settings.mcp.modal.createdWarning":"Dieser Token wird nur einmal angezeigt. Kopiere und speichere ihn jetzt — er kann nicht wiederhergestellt werden.","settings.mcp.modal.done":"Fertig","settings.mcp.toast.created":"Token erstellt","settings.mcp.toast.createError":"Token konnte nicht erstellt werden","settings.mcp.toast.deleted":"Token gelöscht","settings.mcp.toast.deleteError":"Token konnte nicht gelöscht werden","settings.account":"Konto","settings.username":"Benutzername","settings.email":"E-Mail","settings.role":"Rolle","settings.roleAdmin":"Administrator","settings.oidcLinked":"Verknüpft mit","settings.changePassword":"Passwort ändern","settings.mustChangePassword":"Sie müssen Ihr Passwort ändern, bevor Sie fortfahren können. Bitte legen Sie unten ein neues Passwort fest.","settings.currentPassword":"Aktuelles Passwort","settings.currentPasswordRequired":"Aktuelles Passwort wird benötigt","settings.newPassword":"Neues Passwort","settings.confirmPassword":"Neues Passwort bestätigen","settings.updatePassword":"Passwort aktualisieren","settings.passwordRequired":"Bitte aktuelles und neues Passwort eingeben","settings.passwordTooShort":"Passwort muss mindestens 8 Zeichen lang sein","settings.passwordMismatch":"Passwörter stimmen nicht überein","settings.passwordWeak":"Passwort muss Groß-, Kleinbuchstaben, eine Zahl und ein Sonderzeichen enthalten","settings.passwordChanged":"Passwort erfolgreich geändert","settings.deleteAccount":"Löschen","settings.deleteAccountTitle":"Account wirklich löschen?","settings.deleteAccountWarning":"Dein Account und alle deine Reisen, Orte und Dateien werden unwiderruflich gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.","settings.deleteAccountConfirm":"Endgültig löschen","settings.deleteBlockedTitle":"Löschung nicht möglich","settings.deleteBlockedMessage":"Du bist der einzige Administrator. Ernenne zuerst einen anderen Benutzer zum Admin, bevor du deinen Account löschen kannst.","settings.roleUser":"Benutzer","settings.saveProfile":"Speichern","settings.toast.mapSaved":"Karteneinstellungen gespeichert","settings.toast.keysSaved":"API-Schlüssel gespeichert","settings.toast.displaySaved":"Anzeigeeinstellungen gespeichert","settings.toast.profileSaved":"Profil aktualisiert","settings.uploadAvatar":"Profilbild hochladen","settings.removeAvatar":"Profilbild entfernen","settings.avatarUploaded":"Profilbild aktualisiert","settings.avatarRemoved":"Profilbild entfernt","settings.avatarError":"Fehler beim Hochladen","settings.mfa.title":"Zwei-Faktor-Authentifizierung (2FA)","settings.mfa.description":"Zusätzlicher Schritt bei der Anmeldung mit E-Mail und Passwort. Nutze eine Authenticator-App (Google Authenticator, Authy, …).","settings.mfa.requiredByPolicy":"Dein Administrator verlangt Zwei-Faktor-Authentifizierung. Richte unten eine Authenticator-App ein, bevor du fortfährst.","settings.mfa.backupTitle":"Backup-Codes","settings.mfa.backupDescription":"Verwende diese Einmal-Codes, wenn du keinen Zugriff mehr auf deine Authenticator-App hast.","settings.mfa.backupWarning":"Jetzt speichern. Jeder Code kann nur einmal verwendet werden.","settings.mfa.backupCopy":"Codes kopieren","settings.mfa.backupDownload":"TXT herunterladen","settings.mfa.backupPrint":"Drucken / PDF","settings.mfa.backupCopied":"Backup-Codes kopiert","settings.mfa.enabled":"2FA ist für dein Konto aktiv.","settings.mfa.disabled":"2FA ist nicht aktiviert.","settings.mfa.setup":"Authenticator einrichten","settings.mfa.scanQr":"QR-Code mit der App scannen oder den Schlüssel manuell eingeben.","settings.mfa.secretLabel":"Geheimer Schlüssel (manuell)","settings.mfa.codePlaceholder":"6-stelliger Code","settings.mfa.enable":"2FA aktivieren","settings.mfa.cancelSetup":"Abbrechen","settings.mfa.disableTitle":"2FA deaktivieren","settings.mfa.disableHint":"Passwort und einen aktuellen Code aus der Authenticator-App eingeben.","settings.mfa.disable":"2FA deaktivieren","settings.mfa.toastEnabled":"Zwei-Faktor-Authentifizierung aktiviert","settings.mfa.toastDisabled":"Zwei-Faktor-Authentifizierung deaktiviert","settings.mfa.demoBlocked":"In der Demo nicht verfügbar","login.error":"Anmeldung fehlgeschlagen. Bitte Zugangsdaten prüfen.","login.tagline":`Deine Reisen. + */var Dm=y,v5=f5;function y5(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var b5=typeof Object.is=="function"?Object.is:y5,x5=v5.useSyncExternalStore,k5=Dm.useRef,w5=Dm.useEffect,_5=Dm.useMemo,S5=Dm.useDebugValue;ZS.useSyncExternalStoreWithSelector=function(e,t,a,n,r){var o=k5(null);if(o.current===null){var s={hasValue:!1,value:null};o.current=s}else s=o.current;o=_5(function(){function c(v){if(!p){if(p=!0,m=v,v=n(v),r!==void 0&&s.hasValue){var k=s.value;if(r(k,v))return g=k}return g=v}if(k=g,b5(m,v))return k;var x=n(v);return r!==void 0&&r(k,x)?(m=v,k):(m=v,g=x)}var p=!1,m,g,f=a===void 0?null:a;return[function(){return c(t())},f===null?void 0:function(){return c(f())}]},[t,a,n,r]);var d=x5(e,o[0],o[1]);return w5(function(){s.hasValue=!0,s.value=d},[d]),S5(d),d};GS.exports=ZS;var j5=GS.exports;const C5=zs(j5),JS={},{useDebugValue:z5}=Fa,{useSyncExternalStoreWithSelector:T5}=C5;let r0=!1;const P5=e=>e;function E5(e,t=P5,a){(JS?"production":void 0)!=="production"&&a&&!r0&&(console.warn("[DEPRECATED] Use `createWithEqualityFn` instead of `create` or use `useStoreWithEqualityFn` instead of `useStore`. They can be imported from 'zustand/traditional'. https://github.com/pmndrs/zustand/discussions/1937"),r0=!0);const n=T5(e.subscribe,e.getState,e.getServerState||e.getInitialState,t,a);return z5(n),n}const o0=e=>{(JS?"production":void 0)!=="production"&&typeof e!="function"&&console.warn("[DEPRECATED] Passing a vanilla store will be unsupported in a future version. Instead use `import { useStore } from 'zustand'`.");const t=typeof e=="function"?o5(e):e,a=(n,r)=>E5(t,n,r);return Object.assign(a,t),a},Wl=e=>e?o0(e):o0;function QS(e,t){return function(){return e.apply(t,arguments)}}const{toString:A5}=Object.prototype,{getPrototypeOf:Hy}=Object,{iterator:Mm,toStringTag:ej}=Symbol,Rm=(e=>t=>{const a=A5.call(t);return e[a]||(e[a]=a.slice(8,-1).toLowerCase())})(Object.create(null)),Ki=e=>(e=e.toLowerCase(),t=>Rm(t)===e),Im=e=>t=>typeof t===e,{isArray:Ul}=Array,El=Im("undefined");function zc(e){return e!==null&&!El(e)&&e.constructor!==null&&!El(e.constructor)&&Qn(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const tj=Ki("ArrayBuffer");function N5(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&tj(e.buffer),t}const D5=Im("string"),Qn=Im("function"),aj=Im("number"),Tc=e=>e!==null&&typeof e=="object",M5=e=>e===!0||e===!1,Xu=e=>{if(Rm(e)!=="object")return!1;const t=Hy(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(ej in e)&&!(Mm in e)},R5=e=>{if(!Tc(e)||zc(e))return!1;try{return Object.keys(e).length===0&&Object.getPrototypeOf(e)===Object.prototype}catch{return!1}},I5=Ki("Date"),L5=Ki("File"),F5=e=>!!(e&&typeof e.uri<"u"),O5=e=>e&&typeof e.getParts<"u",B5=Ki("Blob"),H5=Ki("FileList"),W5=e=>Tc(e)&&Qn(e.pipe);function U5(){return typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{}}const s0=U5(),l0=typeof s0.FormData<"u"?s0.FormData:void 0,$5=e=>{let t;return e&&(l0&&e instanceof l0||Qn(e.append)&&((t=Rm(e))==="formdata"||t==="object"&&Qn(e.toString)&&e.toString()==="[object FormData]"))},V5=Ki("URLSearchParams"),[K5,q5,G5,Z5]=["ReadableStream","Request","Response","Headers"].map(Ki),Y5=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function Pc(e,t,{allOwnKeys:a=!1}={}){if(e===null||typeof e>"u")return;let n,r;if(typeof e!="object"&&(e=[e]),Ul(e))for(n=0,r=e.length;n0;)if(r=a[n],t===r.toLowerCase())return r;return null}const os=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,ij=e=>!El(e)&&e!==os;function Wf(){const{caseless:e,skipUndefined:t}=ij(this)&&this||{},a={},n=(r,o)=>{if(o==="__proto__"||o==="constructor"||o==="prototype")return;const s=e&&nj(a,o)||o;Xu(a[s])&&Xu(r)?a[s]=Wf(a[s],r):Xu(r)?a[s]=Wf({},r):Ul(r)?a[s]=r.slice():(!t||!El(r))&&(a[s]=r)};for(let r=0,o=arguments.length;r(Pc(t,(r,o)=>{a&&Qn(r)?Object.defineProperty(e,o,{value:QS(r,a),writable:!0,enumerable:!0,configurable:!0}):Object.defineProperty(e,o,{value:r,writable:!0,enumerable:!0,configurable:!0})},{allOwnKeys:n}),e),J5=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),Q5=(e,t,a,n)=>{e.prototype=Object.create(t.prototype,n),Object.defineProperty(e.prototype,"constructor",{value:e,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(e,"super",{value:t.prototype}),a&&Object.assign(e.prototype,a)},eD=(e,t,a,n)=>{let r,o,s;const d={};if(t=t||{},e==null)return t;do{for(r=Object.getOwnPropertyNames(e),o=r.length;o-- >0;)s=r[o],(!n||n(s,e,t))&&!d[s]&&(t[s]=e[s],d[s]=!0);e=a!==!1&&Hy(e)}while(e&&(!a||a(e,t))&&e!==Object.prototype);return t},tD=(e,t,a)=>{e=String(e),(a===void 0||a>e.length)&&(a=e.length),a-=t.length;const n=e.indexOf(t,a);return n!==-1&&n===a},aD=e=>{if(!e)return null;if(Ul(e))return e;let t=e.length;if(!aj(t))return null;const a=new Array(t);for(;t-- >0;)a[t]=e[t];return a},nD=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&Hy(Uint8Array)),iD=(e,t)=>{const n=(e&&e[Mm]).call(e);let r;for(;(r=n.next())&&!r.done;){const o=r.value;t.call(e,o[0],o[1])}},rD=(e,t)=>{let a;const n=[];for(;(a=e.exec(t))!==null;)n.push(a);return n},oD=Ki("HTMLFormElement"),sD=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(a,n,r){return n.toUpperCase()+r}),d0=(({hasOwnProperty:e})=>(t,a)=>e.call(t,a))(Object.prototype),lD=Ki("RegExp"),rj=(e,t)=>{const a=Object.getOwnPropertyDescriptors(e),n={};Pc(a,(r,o)=>{let s;(s=t(r,o,e))!==!1&&(n[o]=s||r)}),Object.defineProperties(e,n)},dD=e=>{rj(e,(t,a)=>{if(Qn(e)&&["arguments","caller","callee"].indexOf(a)!==-1)return!1;const n=e[a];if(Qn(n)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+a+"'")})}})},cD=(e,t)=>{const a={},n=r=>{r.forEach(o=>{a[o]=!0})};return Ul(e)?n(e):n(String(e).split(t)),a},uD=()=>{},pD=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t;function mD(e){return!!(e&&Qn(e.append)&&e[ej]==="FormData"&&e[Mm])}const gD=e=>{const t=new Array(10),a=(n,r)=>{if(Tc(n)){if(t.indexOf(n)>=0)return;if(zc(n))return n;if(!("toJSON"in n)){t[r]=n;const o=Ul(n)?[]:{};return Pc(n,(s,d)=>{const c=a(s,r+1);!El(c)&&(o[d]=c)}),t[r]=void 0,o}}return n};return a(e,0)},hD=Ki("AsyncFunction"),fD=e=>e&&(Tc(e)||Qn(e))&&Qn(e.then)&&Qn(e.catch),oj=((e,t)=>e?setImmediate:t?((a,n)=>(os.addEventListener("message",({source:r,data:o})=>{r===os&&o===a&&n.length&&n.shift()()},!1),r=>{n.push(r),os.postMessage(a,"*")}))(`axios@${Math.random()}`,[]):a=>setTimeout(a))(typeof setImmediate=="function",Qn(os.postMessage)),vD=typeof queueMicrotask<"u"?queueMicrotask.bind(os):typeof process<"u"&&process.nextTick||oj,yD=e=>e!=null&&Qn(e[Mm]),_e={isArray:Ul,isArrayBuffer:tj,isBuffer:zc,isFormData:$5,isArrayBufferView:N5,isString:D5,isNumber:aj,isBoolean:M5,isObject:Tc,isPlainObject:Xu,isEmptyObject:R5,isReadableStream:K5,isRequest:q5,isResponse:G5,isHeaders:Z5,isUndefined:El,isDate:I5,isFile:L5,isReactNativeBlob:F5,isReactNative:O5,isBlob:B5,isRegExp:lD,isFunction:Qn,isStream:W5,isURLSearchParams:V5,isTypedArray:nD,isFileList:H5,forEach:Pc,merge:Wf,extend:X5,trim:Y5,stripBOM:J5,inherits:Q5,toFlatObject:eD,kindOf:Rm,kindOfTest:Ki,endsWith:tD,toArray:aD,forEachEntry:iD,matchAll:rD,isHTMLForm:oD,hasOwnProperty:d0,hasOwnProp:d0,reduceDescriptors:rj,freezeMethods:dD,toObjectSet:cD,toCamelCase:sD,noop:uD,toFiniteNumber:pD,findKey:nj,global:os,isContextDefined:ij,isSpecCompliantForm:mD,toJSONObject:gD,isAsyncFn:hD,isThenable:fD,setImmediate:oj,asap:vD,isIterable:yD};let vt=class sj extends Error{static from(t,a,n,r,o,s){const d=new sj(t.message,a||t.code,n,r,o);return d.cause=t,d.name=t.name,t.status!=null&&d.status==null&&(d.status=t.status),s&&Object.assign(d,s),d}constructor(t,a,n,r,o){super(t),Object.defineProperty(this,"message",{value:t,enumerable:!0,writable:!0,configurable:!0}),this.name="AxiosError",this.isAxiosError=!0,a&&(this.code=a),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o,this.status=o.status)}toJSON(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:_e.toJSONObject(this.config),code:this.code,status:this.status}}};vt.ERR_BAD_OPTION_VALUE="ERR_BAD_OPTION_VALUE";vt.ERR_BAD_OPTION="ERR_BAD_OPTION";vt.ECONNABORTED="ECONNABORTED";vt.ETIMEDOUT="ETIMEDOUT";vt.ERR_NETWORK="ERR_NETWORK";vt.ERR_FR_TOO_MANY_REDIRECTS="ERR_FR_TOO_MANY_REDIRECTS";vt.ERR_DEPRECATED="ERR_DEPRECATED";vt.ERR_BAD_RESPONSE="ERR_BAD_RESPONSE";vt.ERR_BAD_REQUEST="ERR_BAD_REQUEST";vt.ERR_CANCELED="ERR_CANCELED";vt.ERR_NOT_SUPPORT="ERR_NOT_SUPPORT";vt.ERR_INVALID_URL="ERR_INVALID_URL";const bD=null;function Uf(e){return _e.isPlainObject(e)||_e.isArray(e)}function lj(e){return _e.endsWith(e,"[]")?e.slice(0,-2):e}function nh(e,t,a){return e?e.concat(t).map(function(r,o){return r=lj(r),!a&&o?"["+r+"]":r}).join(a?".":""):t}function xD(e){return _e.isArray(e)&&!e.some(Uf)}const kD=_e.toFlatObject(_e,{},null,function(t){return/^is[A-Z]/.test(t)});function Lm(e,t,a){if(!_e.isObject(e))throw new TypeError("target must be an object");t=t||new FormData,a=_e.toFlatObject(a,{metaTokens:!0,dots:!1,indexes:!1},!1,function(x,S){return!_e.isUndefined(S[x])});const n=a.metaTokens,r=a.visitor||m,o=a.dots,s=a.indexes,c=(a.Blob||typeof Blob<"u"&&Blob)&&_e.isSpecCompliantForm(t);if(!_e.isFunction(r))throw new TypeError("visitor must be a function");function p(k){if(k===null)return"";if(_e.isDate(k))return k.toISOString();if(_e.isBoolean(k))return k.toString();if(!c&&_e.isBlob(k))throw new vt("Blob is not supported. Use a Buffer instead.");return _e.isArrayBuffer(k)||_e.isTypedArray(k)?c&&typeof Blob=="function"?new Blob([k]):Buffer.from(k):k}function m(k,x,S){let b=k;if(_e.isReactNative(t)&&_e.isReactNativeBlob(k))return t.append(nh(S,x,o),p(k)),!1;if(k&&!S&&typeof k=="object"){if(_e.endsWith(x,"{}"))x=n?x:x.slice(0,-2),k=JSON.stringify(k);else if(_e.isArray(k)&&xD(k)||(_e.isFileList(k)||_e.endsWith(x,"[]"))&&(b=_e.toArray(k)))return x=lj(x),b.forEach(function(j,P){!(_e.isUndefined(j)||j===null)&&t.append(s===!0?nh([x],P,o):s===null?x:x+"[]",p(j))}),!1}return Uf(k)?!0:(t.append(nh(S,x,o),p(k)),!1)}const g=[],f=Object.assign(kD,{defaultVisitor:m,convertValue:p,isVisitable:Uf});function v(k,x){if(!_e.isUndefined(k)){if(g.indexOf(k)!==-1)throw Error("Circular reference detected in "+x.join("."));g.push(k),_e.forEach(k,function(b,w){(!(_e.isUndefined(b)||b===null)&&r.call(t,b,_e.isString(w)?w.trim():w,x,f))===!0&&v(b,x?x.concat(w):[w])}),g.pop()}}if(!_e.isObject(e))throw new TypeError("data must be an object");return v(e),t}function c0(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(n){return t[n]})}function Wy(e,t){this._pairs=[],e&&Lm(e,this,t)}const dj=Wy.prototype;dj.append=function(t,a){this._pairs.push([t,a])};dj.toString=function(t){const a=t?function(n){return t.call(this,n,c0)}:c0;return this._pairs.map(function(r){return a(r[0])+"="+a(r[1])},"").join("&")};function wD(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function cj(e,t,a){if(!t)return e;const n=a&&a.encode||wD,r=_e.isFunction(a)?{serialize:a}:a,o=r&&r.serialize;let s;if(o?s=o(t,r):s=_e.isURLSearchParams(t)?t.toString():new Wy(t,r).toString(n),s){const d=e.indexOf("#");d!==-1&&(e=e.slice(0,d)),e+=(e.indexOf("?")===-1?"?":"&")+s}return e}class u0{constructor(){this.handlers=[]}use(t,a,n){return this.handlers.push({fulfilled:t,rejected:a,synchronous:n?n.synchronous:!1,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){_e.forEach(this.handlers,function(n){n!==null&&t(n)})}}const Uy={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1,legacyInterceptorReqResOrdering:!0},_D=typeof URLSearchParams<"u"?URLSearchParams:Wy,SD=typeof FormData<"u"?FormData:null,jD=typeof Blob<"u"?Blob:null,CD={isBrowser:!0,classes:{URLSearchParams:_D,FormData:SD,Blob:jD},protocols:["http","https","file","blob","url","data"]},$y=typeof window<"u"&&typeof document<"u",$f=typeof navigator=="object"&&navigator||void 0,zD=$y&&(!$f||["ReactNative","NativeScript","NS"].indexOf($f.product)<0),TD=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",PD=$y&&window.location.href||"http://localhost",ED=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:$y,hasStandardBrowserEnv:zD,hasStandardBrowserWebWorkerEnv:TD,navigator:$f,origin:PD},Symbol.toStringTag,{value:"Module"})),_n={...ED,...CD};function AD(e,t){return Lm(e,new _n.classes.URLSearchParams,{visitor:function(a,n,r,o){return _n.isNode&&_e.isBuffer(a)?(this.append(n,a.toString("base64")),!1):o.defaultVisitor.apply(this,arguments)},...t})}function ND(e){return _e.matchAll(/\w+|\[(\w*)]/g,e).map(t=>t[0]==="[]"?"":t[1]||t[0])}function DD(e){const t={},a=Object.keys(e);let n;const r=a.length;let o;for(n=0;n=a.length;return s=!s&&_e.isArray(r)?r.length:s,c?(_e.hasOwnProp(r,s)?r[s]=[r[s],n]:r[s]=n,!d):((!r[s]||!_e.isObject(r[s]))&&(r[s]=[]),t(a,n,r[s],o)&&_e.isArray(r[s])&&(r[s]=DD(r[s])),!d)}if(_e.isFormData(e)&&_e.isFunction(e.entries)){const a={};return _e.forEachEntry(e,(n,r)=>{t(ND(n),r,a,0)}),a}return null}function MD(e,t,a){if(_e.isString(e))try{return(t||JSON.parse)(e),_e.trim(e)}catch(n){if(n.name!=="SyntaxError")throw n}return(a||JSON.stringify)(e)}const Ec={transitional:Uy,adapter:["xhr","http","fetch"],transformRequest:[function(t,a){const n=a.getContentType()||"",r=n.indexOf("application/json")>-1,o=_e.isObject(t);if(o&&_e.isHTMLForm(t)&&(t=new FormData(t)),_e.isFormData(t))return r?JSON.stringify(uj(t)):t;if(_e.isArrayBuffer(t)||_e.isBuffer(t)||_e.isStream(t)||_e.isFile(t)||_e.isBlob(t)||_e.isReadableStream(t))return t;if(_e.isArrayBufferView(t))return t.buffer;if(_e.isURLSearchParams(t))return a.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let d;if(o){if(n.indexOf("application/x-www-form-urlencoded")>-1)return AD(t,this.formSerializer).toString();if((d=_e.isFileList(t))||n.indexOf("multipart/form-data")>-1){const c=this.env&&this.env.FormData;return Lm(d?{"files[]":t}:t,c&&new c,this.formSerializer)}}return o||r?(a.setContentType("application/json",!1),MD(t)):t}],transformResponse:[function(t){const a=this.transitional||Ec.transitional,n=a&&a.forcedJSONParsing,r=this.responseType==="json";if(_e.isResponse(t)||_e.isReadableStream(t))return t;if(t&&_e.isString(t)&&(n&&!this.responseType||r)){const s=!(a&&a.silentJSONParsing)&&r;try{return JSON.parse(t,this.parseReviver)}catch(d){if(s)throw d.name==="SyntaxError"?vt.from(d,vt.ERR_BAD_RESPONSE,this,null,this.response):d}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:_n.classes.FormData,Blob:_n.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};_e.forEach(["delete","get","head","post","put","patch"],e=>{Ec.headers[e]={}});const RD=_e.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),ID=e=>{const t={};let a,n,r;return e&&e.split(` +`).forEach(function(s){r=s.indexOf(":"),a=s.substring(0,r).trim().toLowerCase(),n=s.substring(r+1).trim(),!(!a||t[a]&&RD[a])&&(a==="set-cookie"?t[a]?t[a].push(n):t[a]=[n]:t[a]=t[a]?t[a]+", "+n:n)}),t},p0=Symbol("internals");function md(e){return e&&String(e).trim().toLowerCase()}function Ju(e){return e===!1||e==null?e:_e.isArray(e)?e.map(Ju):String(e)}function LD(e){const t=Object.create(null),a=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let n;for(;n=a.exec(e);)t[n[1]]=n[2];return t}const FD=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function ih(e,t,a,n,r){if(_e.isFunction(n))return n.call(this,t,a);if(r&&(t=a),!!_e.isString(t)){if(_e.isString(n))return t.indexOf(n)!==-1;if(_e.isRegExp(n))return n.test(t)}}function OD(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,a,n)=>a.toUpperCase()+n)}function BD(e,t){const a=_e.toCamelCase(" "+t);["get","set","has"].forEach(n=>{Object.defineProperty(e,n+a,{value:function(r,o,s){return this[n].call(this,t,r,o,s)},configurable:!0})})}let ei=class{constructor(t){t&&this.set(t)}set(t,a,n){const r=this;function o(d,c,p){const m=md(c);if(!m)throw new Error("header name must be a non-empty string");const g=_e.findKey(r,m);(!g||r[g]===void 0||p===!0||p===void 0&&r[g]!==!1)&&(r[g||c]=Ju(d))}const s=(d,c)=>_e.forEach(d,(p,m)=>o(p,m,c));if(_e.isPlainObject(t)||t instanceof this.constructor)s(t,a);else if(_e.isString(t)&&(t=t.trim())&&!FD(t))s(ID(t),a);else if(_e.isObject(t)&&_e.isIterable(t)){let d={},c,p;for(const m of t){if(!_e.isArray(m))throw TypeError("Object iterator must return a key-value pair");d[p=m[0]]=(c=d[p])?_e.isArray(c)?[...c,m[1]]:[c,m[1]]:m[1]}s(d,a)}else t!=null&&o(a,t,n);return this}get(t,a){if(t=md(t),t){const n=_e.findKey(this,t);if(n){const r=this[n];if(!a)return r;if(a===!0)return LD(r);if(_e.isFunction(a))return a.call(this,r,n);if(_e.isRegExp(a))return a.exec(r);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,a){if(t=md(t),t){const n=_e.findKey(this,t);return!!(n&&this[n]!==void 0&&(!a||ih(this,this[n],n,a)))}return!1}delete(t,a){const n=this;let r=!1;function o(s){if(s=md(s),s){const d=_e.findKey(n,s);d&&(!a||ih(n,n[d],d,a))&&(delete n[d],r=!0)}}return _e.isArray(t)?t.forEach(o):o(t),r}clear(t){const a=Object.keys(this);let n=a.length,r=!1;for(;n--;){const o=a[n];(!t||ih(this,this[o],o,t,!0))&&(delete this[o],r=!0)}return r}normalize(t){const a=this,n={};return _e.forEach(this,(r,o)=>{const s=_e.findKey(n,o);if(s){a[s]=Ju(r),delete a[o];return}const d=t?OD(o):String(o).trim();d!==o&&delete a[o],a[d]=Ju(r),n[d]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const a=Object.create(null);return _e.forEach(this,(n,r)=>{n!=null&&n!==!1&&(a[r]=t&&_e.isArray(n)?n.join(", "):n)}),a}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,a])=>t+": "+a).join(` +`)}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...a){const n=new this(t);return a.forEach(r=>n.set(r)),n}static accessor(t){const n=(this[p0]=this[p0]={accessors:{}}).accessors,r=this.prototype;function o(s){const d=md(s);n[d]||(BD(r,s),n[d]=!0)}return _e.isArray(t)?t.forEach(o):o(t),this}};ei.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);_e.reduceDescriptors(ei.prototype,({value:e},t)=>{let a=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(n){this[a]=n}}});_e.freezeMethods(ei);function rh(e,t){const a=this||Ec,n=t||a,r=ei.from(n.headers);let o=n.data;return _e.forEach(e,function(d){o=d.call(a,o,r.normalize(),t?t.status:void 0)}),r.normalize(),o}function pj(e){return!!(e&&e.__CANCEL__)}let Ac=class extends vt{constructor(t,a,n){super(t??"canceled",vt.ERR_CANCELED,a,n),this.name="CanceledError",this.__CANCEL__=!0}};function mj(e,t,a){const n=a.config.validateStatus;!a.status||!n||n(a.status)?e(a):t(new vt("Request failed with status code "+a.status,[vt.ERR_BAD_REQUEST,vt.ERR_BAD_RESPONSE][Math.floor(a.status/100)-4],a.config,a.request,a))}function HD(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}function WD(e,t){e=e||10;const a=new Array(e),n=new Array(e);let r=0,o=0,s;return t=t!==void 0?t:1e3,function(c){const p=Date.now(),m=n[o];s||(s=p),a[r]=c,n[r]=p;let g=o,f=0;for(;g!==r;)f+=a[g++],g=g%e;if(r=(r+1)%e,r===o&&(o=(o+1)%e),p-s{a=m,r=null,o&&(clearTimeout(o),o=null),e(...p)};return[(...p)=>{const m=Date.now(),g=m-a;g>=n?s(p,m):(r=p,o||(o=setTimeout(()=>{o=null,s(r)},n-g)))},()=>r&&s(r)]}const Wp=(e,t,a=3)=>{let n=0;const r=WD(50,250);return UD(o=>{const s=o.loaded,d=o.lengthComputable?o.total:void 0,c=s-n,p=r(c),m=s<=d;n=s;const g={loaded:s,total:d,progress:d?s/d:void 0,bytes:c,rate:p||void 0,estimated:p&&d&&m?(d-s)/p:void 0,event:o,lengthComputable:d!=null,[t?"download":"upload"]:!0};e(g)},a)},m0=(e,t)=>{const a=e!=null;return[n=>t[0]({lengthComputable:a,total:e,loaded:n}),t[1]]},g0=e=>(...t)=>_e.asap(()=>e(...t)),$D=_n.hasStandardBrowserEnv?((e,t)=>a=>(a=new URL(a,_n.origin),e.protocol===a.protocol&&e.host===a.host&&(t||e.port===a.port)))(new URL(_n.origin),_n.navigator&&/(msie|trident)/i.test(_n.navigator.userAgent)):()=>!0,VD=_n.hasStandardBrowserEnv?{write(e,t,a,n,r,o,s){if(typeof document>"u")return;const d=[`${e}=${encodeURIComponent(t)}`];_e.isNumber(a)&&d.push(`expires=${new Date(a).toUTCString()}`),_e.isString(n)&&d.push(`path=${n}`),_e.isString(r)&&d.push(`domain=${r}`),o===!0&&d.push("secure"),_e.isString(s)&&d.push(`SameSite=${s}`),document.cookie=d.join("; ")},read(e){if(typeof document>"u")return null;const t=document.cookie.match(new RegExp("(?:^|; )"+e+"=([^;]*)"));return t?decodeURIComponent(t[1]):null},remove(e){this.write(e,"",Date.now()-864e5,"/")}}:{write(){},read(){return null},remove(){}};function KD(e){return typeof e!="string"?!1:/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function qD(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}function gj(e,t,a){let n=!KD(t);return e&&(n||a==!1)?qD(e,t):t}const h0=e=>e instanceof ei?{...e}:e;function ks(e,t){t=t||{};const a={};function n(p,m,g,f){return _e.isPlainObject(p)&&_e.isPlainObject(m)?_e.merge.call({caseless:f},p,m):_e.isPlainObject(m)?_e.merge({},m):_e.isArray(m)?m.slice():m}function r(p,m,g,f){if(_e.isUndefined(m)){if(!_e.isUndefined(p))return n(void 0,p,g,f)}else return n(p,m,g,f)}function o(p,m){if(!_e.isUndefined(m))return n(void 0,m)}function s(p,m){if(_e.isUndefined(m)){if(!_e.isUndefined(p))return n(void 0,p)}else return n(void 0,m)}function d(p,m,g){if(g in t)return n(p,m);if(g in e)return n(void 0,p)}const c={url:o,method:o,data:o,baseURL:s,transformRequest:s,transformResponse:s,paramsSerializer:s,timeout:s,timeoutMessage:s,withCredentials:s,withXSRFToken:s,adapter:s,responseType:s,xsrfCookieName:s,xsrfHeaderName:s,onUploadProgress:s,onDownloadProgress:s,decompress:s,maxContentLength:s,maxBodyLength:s,beforeRedirect:s,transport:s,httpAgent:s,httpsAgent:s,cancelToken:s,socketPath:s,responseEncoding:s,validateStatus:d,headers:(p,m,g)=>r(h0(p),h0(m),g,!0)};return _e.forEach(Object.keys({...e,...t}),function(m){if(m==="__proto__"||m==="constructor"||m==="prototype")return;const g=_e.hasOwnProp(c,m)?c[m]:r,f=g(e[m],t[m],m);_e.isUndefined(f)&&g!==d||(a[m]=f)}),a}const hj=e=>{const t=ks({},e);let{data:a,withXSRFToken:n,xsrfHeaderName:r,xsrfCookieName:o,headers:s,auth:d}=t;if(t.headers=s=ei.from(s),t.url=cj(gj(t.baseURL,t.url,t.allowAbsoluteUrls),e.params,e.paramsSerializer),d&&s.set("Authorization","Basic "+btoa((d.username||"")+":"+(d.password?unescape(encodeURIComponent(d.password)):""))),_e.isFormData(a)){if(_n.hasStandardBrowserEnv||_n.hasStandardBrowserWebWorkerEnv)s.setContentType(void 0);else if(_e.isFunction(a.getHeaders)){const c=a.getHeaders(),p=["content-type","content-length"];Object.entries(c).forEach(([m,g])=>{p.includes(m.toLowerCase())&&s.set(m,g)})}}if(_n.hasStandardBrowserEnv&&(n&&_e.isFunction(n)&&(n=n(t)),n||n!==!1&&$D(t.url))){const c=r&&o&&VD.read(o);c&&s.set(r,c)}return t},GD=typeof XMLHttpRequest<"u",ZD=GD&&function(e){return new Promise(function(a,n){const r=hj(e);let o=r.data;const s=ei.from(r.headers).normalize();let{responseType:d,onUploadProgress:c,onDownloadProgress:p}=r,m,g,f,v,k;function x(){v&&v(),k&&k(),r.cancelToken&&r.cancelToken.unsubscribe(m),r.signal&&r.signal.removeEventListener("abort",m)}let S=new XMLHttpRequest;S.open(r.method.toUpperCase(),r.url,!0),S.timeout=r.timeout;function b(){if(!S)return;const j=ei.from("getAllResponseHeaders"in S&&S.getAllResponseHeaders()),M={data:!d||d==="text"||d==="json"?S.responseText:S.response,status:S.status,statusText:S.statusText,headers:j,config:e,request:S};mj(function(D){a(D),x()},function(D){n(D),x()},M),S=null}"onloadend"in S?S.onloadend=b:S.onreadystatechange=function(){!S||S.readyState!==4||S.status===0&&!(S.responseURL&&S.responseURL.indexOf("file:")===0)||setTimeout(b)},S.onabort=function(){S&&(n(new vt("Request aborted",vt.ECONNABORTED,e,S)),S=null)},S.onerror=function(P){const M=P&&P.message?P.message:"Network Error",N=new vt(M,vt.ERR_NETWORK,e,S);N.event=P||null,n(N),S=null},S.ontimeout=function(){let P=r.timeout?"timeout of "+r.timeout+"ms exceeded":"timeout exceeded";const M=r.transitional||Uy;r.timeoutErrorMessage&&(P=r.timeoutErrorMessage),n(new vt(P,M.clarifyTimeoutError?vt.ETIMEDOUT:vt.ECONNABORTED,e,S)),S=null},o===void 0&&s.setContentType(null),"setRequestHeader"in S&&_e.forEach(s.toJSON(),function(P,M){S.setRequestHeader(M,P)}),_e.isUndefined(r.withCredentials)||(S.withCredentials=!!r.withCredentials),d&&d!=="json"&&(S.responseType=r.responseType),p&&([f,k]=Wp(p,!0),S.addEventListener("progress",f)),c&&S.upload&&([g,v]=Wp(c),S.upload.addEventListener("progress",g),S.upload.addEventListener("loadend",v)),(r.cancelToken||r.signal)&&(m=j=>{S&&(n(!j||j.type?new Ac(null,e,S):j),S.abort(),S=null)},r.cancelToken&&r.cancelToken.subscribe(m),r.signal&&(r.signal.aborted?m():r.signal.addEventListener("abort",m)));const w=HD(r.url);if(w&&_n.protocols.indexOf(w)===-1){n(new vt("Unsupported protocol "+w+":",vt.ERR_BAD_REQUEST,e));return}S.send(o||null)})},YD=(e,t)=>{const{length:a}=e=e?e.filter(Boolean):[];if(t||a){let n=new AbortController,r;const o=function(p){if(!r){r=!0,d();const m=p instanceof Error?p:this.reason;n.abort(m instanceof vt?m:new Ac(m instanceof Error?m.message:m))}};let s=t&&setTimeout(()=>{s=null,o(new vt(`timeout of ${t}ms exceeded`,vt.ETIMEDOUT))},t);const d=()=>{e&&(s&&clearTimeout(s),s=null,e.forEach(p=>{p.unsubscribe?p.unsubscribe(o):p.removeEventListener("abort",o)}),e=null)};e.forEach(p=>p.addEventListener("abort",o));const{signal:c}=n;return c.unsubscribe=()=>_e.asap(d),c}},XD=function*(e,t){let a=e.byteLength;if(a{const r=JD(e,t);let o=0,s,d=c=>{s||(s=!0,n&&n(c))};return new ReadableStream({async pull(c){try{const{done:p,value:m}=await r.next();if(p){d(),c.close();return}let g=m.byteLength;if(a){let f=o+=g;a(f)}c.enqueue(new Uint8Array(m))}catch(p){throw d(p),p}},cancel(c){return d(c),r.return()}},{highWaterMark:2})},v0=64*1024,{isFunction:bu}=_e,eM=(({Request:e,Response:t})=>({Request:e,Response:t}))(_e.global),{ReadableStream:y0,TextEncoder:b0}=_e.global,x0=(e,...t)=>{try{return!!e(...t)}catch{return!1}},tM=e=>{e=_e.merge.call({skipUndefined:!0},eM,e);const{fetch:t,Request:a,Response:n}=e,r=t?bu(t):typeof fetch=="function",o=bu(a),s=bu(n);if(!r)return!1;const d=r&&bu(y0),c=r&&(typeof b0=="function"?(k=>x=>k.encode(x))(new b0):async k=>new Uint8Array(await new a(k).arrayBuffer())),p=o&&d&&x0(()=>{let k=!1;const x=new a(_n.origin,{body:new y0,method:"POST",get duplex(){return k=!0,"half"}}).headers.has("Content-Type");return k&&!x}),m=s&&d&&x0(()=>_e.isReadableStream(new n("").body)),g={stream:m&&(k=>k.body)};r&&["text","arrayBuffer","blob","formData","stream"].forEach(k=>{!g[k]&&(g[k]=(x,S)=>{let b=x&&x[k];if(b)return b.call(x);throw new vt(`Response type '${k}' is not supported`,vt.ERR_NOT_SUPPORT,S)})});const f=async k=>{if(k==null)return 0;if(_e.isBlob(k))return k.size;if(_e.isSpecCompliantForm(k))return(await new a(_n.origin,{method:"POST",body:k}).arrayBuffer()).byteLength;if(_e.isArrayBufferView(k)||_e.isArrayBuffer(k))return k.byteLength;if(_e.isURLSearchParams(k)&&(k=k+""),_e.isString(k))return(await c(k)).byteLength},v=async(k,x)=>{const S=_e.toFiniteNumber(k.getContentLength());return S??f(x)};return async k=>{let{url:x,method:S,data:b,signal:w,cancelToken:j,timeout:P,onDownloadProgress:M,onUploadProgress:N,responseType:D,headers:F,withCredentials:R="same-origin",fetchOptions:E}=hj(k),ae=t||fetch;D=D?(D+"").toLowerCase():"text";let B=YD([w,j&&j.toAbortSignal()],P),K=null;const le=B&&B.unsubscribe&&(()=>{B.unsubscribe()});let de;try{if(N&&p&&S!=="get"&&S!=="head"&&(de=await v(F,b))!==0){let ce=new a(x,{method:"POST",body:b,duplex:"half"}),q;if(_e.isFormData(b)&&(q=ce.headers.get("content-type"))&&F.setContentType(q),ce.body){const[A,I]=m0(de,Wp(g0(N)));b=f0(ce.body,v0,A,I)}}_e.isString(R)||(R=R?"include":"omit");const me=o&&"credentials"in a.prototype,O={...E,signal:B,method:S.toUpperCase(),headers:F.normalize().toJSON(),body:b,duplex:"half",credentials:me?R:void 0};K=o&&new a(x,O);let $=await(o?ae(K,E):ae(x,O));const U=m&&(D==="stream"||D==="response");if(m&&(M||U&&le)){const ce={};["status","statusText","headers"].forEach(ee=>{ce[ee]=$[ee]});const q=_e.toFiniteNumber($.headers.get("content-length")),[A,I]=M&&m0(q,Wp(g0(M),!0))||[];$=new n(f0($.body,v0,A,()=>{I&&I(),le&&le()}),ce)}D=D||"text";let T=await g[_e.findKey(g,D)||"text"]($,k);return!U&&le&&le(),await new Promise((ce,q)=>{mj(ce,q,{data:T,headers:ei.from($.headers),status:$.status,statusText:$.statusText,config:k,request:K})})}catch(me){throw le&&le(),me&&me.name==="TypeError"&&/Load failed|fetch/i.test(me.message)?Object.assign(new vt("Network Error",vt.ERR_NETWORK,k,K,me&&me.response),{cause:me.cause||me}):vt.from(me,me&&me.code,k,K,me&&me.response)}}},aM=new Map,fj=e=>{let t=e&&e.env||{};const{fetch:a,Request:n,Response:r}=t,o=[n,r,a];let s=o.length,d=s,c,p,m=aM;for(;d--;)c=o[d],p=m.get(c),p===void 0&&m.set(c,p=d?new Map:tM(t)),m=p;return p};fj();const Vy={http:bD,xhr:ZD,fetch:{get:fj}};_e.forEach(Vy,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});const k0=e=>`- ${e}`,nM=e=>_e.isFunction(e)||e===null||e===!1;function iM(e,t){e=_e.isArray(e)?e:[e];const{length:a}=e;let n,r;const o={};for(let s=0;s`adapter ${c} `+(p===!1?"is not supported by the environment":"is not available in the build"));let d=a?s.length>1?`since : +`+s.map(k0).join(` +`):" "+k0(s[0]):"as no adapter specified";throw new vt("There is no suitable adapter to dispatch the request "+d,"ERR_NOT_SUPPORT")}return r}const vj={getAdapter:iM,adapters:Vy};function oh(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new Ac(null,e)}function w0(e){return oh(e),e.headers=ei.from(e.headers),e.data=rh.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),vj.getAdapter(e.adapter||Ec.adapter,e)(e).then(function(n){return oh(e),n.data=rh.call(e,e.transformResponse,n),n.headers=ei.from(n.headers),n},function(n){return pj(n)||(oh(e),n&&n.response&&(n.response.data=rh.call(e,e.transformResponse,n.response),n.response.headers=ei.from(n.response.headers))),Promise.reject(n)})}const yj="1.13.6",Fm={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{Fm[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}});const _0={};Fm.transitional=function(t,a,n){function r(o,s){return"[Axios v"+yj+"] Transitional option '"+o+"'"+s+(n?". "+n:"")}return(o,s,d)=>{if(t===!1)throw new vt(r(s," has been removed"+(a?" in "+a:"")),vt.ERR_DEPRECATED);return a&&!_0[s]&&(_0[s]=!0,console.warn(r(s," has been deprecated since v"+a+" and will be removed in the near future"))),t?t(o,s,d):!0}};Fm.spelling=function(t){return(a,n)=>(console.warn(`${n} is likely a misspelling of ${t}`),!0)};function rM(e,t,a){if(typeof e!="object")throw new vt("options must be an object",vt.ERR_BAD_OPTION_VALUE);const n=Object.keys(e);let r=n.length;for(;r-- >0;){const o=n[r],s=t[o];if(s){const d=e[o],c=d===void 0||s(d,o,e);if(c!==!0)throw new vt("option "+o+" must be "+c,vt.ERR_BAD_OPTION_VALUE);continue}if(a!==!0)throw new vt("Unknown option "+o,vt.ERR_BAD_OPTION)}}const Qu={assertOptions:rM,validators:Fm},xi=Qu.validators;let ps=class{constructor(t){this.defaults=t||{},this.interceptors={request:new u0,response:new u0}}async request(t,a){try{return await this._request(t,a)}catch(n){if(n instanceof Error){let r={};Error.captureStackTrace?Error.captureStackTrace(r):r=new Error;const o=r.stack?r.stack.replace(/^.+\n/,""):"";try{n.stack?o&&!String(n.stack).endsWith(o.replace(/^.+\n.+\n/,""))&&(n.stack+=` +`+o):n.stack=o}catch{}}throw n}}_request(t,a){typeof t=="string"?(a=a||{},a.url=t):a=t||{},a=ks(this.defaults,a);const{transitional:n,paramsSerializer:r,headers:o}=a;n!==void 0&&Qu.assertOptions(n,{silentJSONParsing:xi.transitional(xi.boolean),forcedJSONParsing:xi.transitional(xi.boolean),clarifyTimeoutError:xi.transitional(xi.boolean),legacyInterceptorReqResOrdering:xi.transitional(xi.boolean)},!1),r!=null&&(_e.isFunction(r)?a.paramsSerializer={serialize:r}:Qu.assertOptions(r,{encode:xi.function,serialize:xi.function},!0)),a.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?a.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:a.allowAbsoluteUrls=!0),Qu.assertOptions(a,{baseUrl:xi.spelling("baseURL"),withXsrfToken:xi.spelling("withXSRFToken")},!0),a.method=(a.method||this.defaults.method||"get").toLowerCase();let s=o&&_e.merge(o.common,o[a.method]);o&&_e.forEach(["delete","get","head","post","put","patch","common"],k=>{delete o[k]}),a.headers=ei.concat(s,o);const d=[];let c=!0;this.interceptors.request.forEach(function(x){if(typeof x.runWhen=="function"&&x.runWhen(a)===!1)return;c=c&&x.synchronous;const S=a.transitional||Uy;S&&S.legacyInterceptorReqResOrdering?d.unshift(x.fulfilled,x.rejected):d.push(x.fulfilled,x.rejected)});const p=[];this.interceptors.response.forEach(function(x){p.push(x.fulfilled,x.rejected)});let m,g=0,f;if(!c){const k=[w0.bind(this),void 0];for(k.unshift(...d),k.push(...p),f=k.length,m=Promise.resolve(a);g{if(!n._listeners)return;let o=n._listeners.length;for(;o-- >0;)n._listeners[o](r);n._listeners=null}),this.promise.then=r=>{let o;const s=new Promise(d=>{n.subscribe(d),o=d}).then(r);return s.cancel=function(){n.unsubscribe(o)},s},t(function(o,s,d){n.reason||(n.reason=new Ac(o,s,d),a(n.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const a=this._listeners.indexOf(t);a!==-1&&this._listeners.splice(a,1)}toAbortSignal(){const t=new AbortController,a=n=>{t.abort(n)};return this.subscribe(a),t.signal.unsubscribe=()=>this.unsubscribe(a),t.signal}static source(){let t;return{token:new bj(function(r){t=r}),cancel:t}}};function sM(e){return function(a){return e.apply(null,a)}}function lM(e){return _e.isObject(e)&&e.isAxiosError===!0}const Vf={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(Vf).forEach(([e,t])=>{Vf[t]=e});function xj(e){const t=new ps(e),a=QS(ps.prototype.request,t);return _e.extend(a,ps.prototype,t,{allOwnKeys:!0}),_e.extend(a,t,null,{allOwnKeys:!0}),a.create=function(r){return xj(ks(e,r))},a}const Ha=xj(Ec);Ha.Axios=ps;Ha.CanceledError=Ac;Ha.CancelToken=oM;Ha.isCancel=pj;Ha.VERSION=yj;Ha.toFormData=Lm;Ha.AxiosError=vt;Ha.Cancel=Ha.CanceledError;Ha.all=function(t){return Promise.all(t)};Ha.spread=sM;Ha.isAxiosError=lM;Ha.mergeConfig=ks;Ha.AxiosHeaders=ei;Ha.formToJSON=e=>uj(_e.isHTMLForm(e)?new FormData(e):e);Ha.getAdapter=vj.getAdapter;Ha.HttpStatusCode=Vf;Ha.default=Ha;const{Axios:LU,AxiosError:FU,CanceledError:OU,isCancel:BU,CancelToken:HU,VERSION:WU,all:UU,Cancel:$U,isAxiosError:VU,spread:KU,toFormData:qU,AxiosHeaders:GU,HttpStatusCode:ZU,formToJSON:YU,getAdapter:XU,mergeConfig:JU}=Ha;let Pa=null,Nr=null,Bd=1e3;const dM=3e4,Ky=new Set,uc=new Set;let Al=!1,kj=null,sh=!1;function cM(){return kj}function uM(e){return`${location.protocol==="https:"?"wss":"ws"}://${location.host}/ws?token=${e}`}async function pM(){try{const e=await fetch("/api/auth/ws-token",{method:"POST",credentials:"include"});if(e.status===401)return Al=!1,null;if(!e.ok)return null;const{token:t}=await e.json();return t}catch{return null}}function mM(e){try{const t=JSON.parse(e.data);if(t.type==="welcome"){kj=t.socketId;return}Ky.forEach(a=>{try{a(t)}catch(n){console.error("WebSocket listener error:",n)}})}catch(t){console.error("WebSocket message parse error:",t)}}function S0(){Nr||(Nr=setTimeout(()=>{Nr=null,Al&&wj(!0)},Bd),Bd=Math.min(Bd*2,dM))}async function wj(e=!1){if(sh||Pa&&(Pa.readyState===WebSocket.OPEN||Pa.readyState===WebSocket.CONNECTING))return;sh=!0;const t=await pM();if(sh=!1,!t){Al&&S0();return}const a=uM(t);Pa=new WebSocket(a),Pa.onopen=()=>{Bd=1e3,uc.size>0&&uc.forEach(n=>{Pa&&Pa.readyState===WebSocket.OPEN&&Pa.send(JSON.stringify({type:"join",tripId:n}))})},Pa.onmessage=mM,Pa.onclose=()=>{Pa=null,Al&&S0()},Pa.onerror=()=>{}}function gd(){Al=!0,Bd=1e3,Nr&&(clearTimeout(Nr),Nr=null),wj(!1)}function gM(){Al=!1,Nr&&(clearTimeout(Nr),Nr=null),uc.clear(),Pa&&(Pa.onclose=null,Pa.close(),Pa=null)}function hM(e){uc.add(String(e)),Pa&&Pa.readyState===WebSocket.OPEN&&Pa.send(JSON.stringify({type:"join",tripId:String(e)}))}function fM(e){uc.delete(String(e)),Pa&&Pa.readyState===WebSocket.OPEN&&Pa.send(JSON.stringify({type:"leave",tripId:String(e)}))}function Nl(e){Ky.add(e)}function Dl(e){Ky.delete(e)}const re=Ha.create({baseURL:"/api",withCredentials:!0,headers:{"Content-Type":"application/json"}});re.interceptors.request.use(e=>{const t=cM();return t&&(e.headers["X-Socket-Id"]=t),e},e=>Promise.reject(e));re.interceptors.response.use(e=>e,e=>{var t,a,n,r;return((t=e.response)==null?void 0:t.status)===401&&!window.location.pathname.includes("/login")&&!window.location.pathname.includes("/register")&&(window.location.href="/login"),((a=e.response)==null?void 0:a.status)===403&&((r=(n=e.response)==null?void 0:n.data)==null?void 0:r.code)==="MFA_REQUIRED"&&!window.location.pathname.startsWith("/settings")&&(window.location.href="/settings?mfa=required"),Promise.reject(e)});const kt={register:e=>re.post("/auth/register",e).then(t=>t.data),validateInvite:e=>re.get(`/auth/invite/${e}`).then(t=>t.data),login:e=>re.post("/auth/login",e).then(t=>t.data),verifyMfaLogin:e=>re.post("/auth/mfa/verify-login",e).then(t=>t.data),mfaSetup:()=>re.post("/auth/mfa/setup",{}).then(e=>e.data),mfaEnable:e=>re.post("/auth/mfa/enable",e).then(t=>t.data),mfaDisable:e=>re.post("/auth/mfa/disable",e).then(t=>t.data),me:()=>re.get("/auth/me").then(e=>e.data),updateMapsKey:e=>re.put("/auth/me/maps-key",{maps_api_key:e}).then(t=>t.data),updateApiKeys:e=>re.put("/auth/me/api-keys",e).then(t=>t.data),updateSettings:e=>re.put("/auth/me/settings",e).then(t=>t.data),getSettings:()=>re.get("/auth/me/settings").then(e=>e.data),listUsers:()=>re.get("/auth/users").then(e=>e.data),uploadAvatar:e=>re.post("/auth/avatar",e,{headers:{"Content-Type":"multipart/form-data"}}).then(t=>t.data),deleteAvatar:()=>re.delete("/auth/avatar").then(e=>e.data),getAppConfig:()=>re.get("/auth/app-config").then(e=>e.data),updateAppSettings:e=>re.put("/auth/app-settings",e).then(t=>t.data),validateKeys:()=>re.get("/auth/validate-keys").then(e=>e.data),travelStats:()=>re.get("/auth/travel-stats").then(e=>e.data),changePassword:e=>re.put("/auth/me/password",e).then(t=>t.data),deleteOwnAccount:()=>re.delete("/auth/me").then(e=>e.data),demoLogin:()=>re.post("/auth/demo-login").then(e=>e.data),mcpTokens:{list:()=>re.get("/auth/mcp-tokens").then(e=>e.data),create:e=>re.post("/auth/mcp-tokens",{name:e}).then(t=>t.data),delete:e=>re.delete(`/auth/mcp-tokens/${e}`).then(t=>t.data)}},Va={list:e=>re.get("/trips",{params:e}).then(t=>t.data),create:e=>re.post("/trips",e).then(t=>t.data),get:e=>re.get(`/trips/${e}`).then(t=>t.data),update:(e,t)=>re.put(`/trips/${e}`,t).then(a=>a.data),delete:e=>re.delete(`/trips/${e}`).then(t=>t.data),uploadCover:(e,t)=>re.post(`/trips/${e}/cover`,t,{headers:{"Content-Type":"multipart/form-data"}}).then(a=>a.data),archive:e=>re.put(`/trips/${e}`,{is_archived:!0}).then(t=>t.data),unarchive:e=>re.put(`/trips/${e}`,{is_archived:!1}).then(t=>t.data),getMembers:e=>re.get(`/trips/${e}/members`).then(t=>t.data),addMember:(e,t)=>re.post(`/trips/${e}/members`,{identifier:t}).then(a=>a.data),removeMember:(e,t)=>re.delete(`/trips/${e}/members/${t}`).then(a=>a.data)},bl={list:e=>re.get(`/trips/${e}/days`).then(t=>t.data),create:(e,t)=>re.post(`/trips/${e}/days`,t).then(a=>a.data),update:(e,t,a)=>re.put(`/trips/${e}/days/${t}`,a).then(n=>n.data),delete:(e,t)=>re.delete(`/trips/${e}/days/${t}`).then(a=>a.data)},Pr={list:(e,t)=>re.get(`/trips/${e}/places`,{params:t}).then(a=>a.data),create:(e,t)=>re.post(`/trips/${e}/places`,t).then(a=>a.data),get:(e,t)=>re.get(`/trips/${e}/places/${t}`).then(a=>a.data),update:(e,t,a)=>re.put(`/trips/${e}/places/${t}`,a).then(n=>n.data),delete:(e,t)=>re.delete(`/trips/${e}/places/${t}`).then(a=>a.data),searchImage:(e,t)=>re.get(`/trips/${e}/places/${t}/image`).then(a=>a.data),importGpx:(e,t)=>{const a=new FormData;return a.append("file",t),re.post(`/trips/${e}/places/import/gpx`,a,{headers:{"Content-Type":"multipart/form-data"}}).then(n=>n.data)},importGoogleList:(e,t)=>re.post(`/trips/${e}/places/import/google-list`,{url:t}).then(a=>a.data)},Li={list:(e,t)=>re.get(`/trips/${e}/days/${t}/assignments`).then(a=>a.data),create:(e,t,a)=>re.post(`/trips/${e}/days/${t}/assignments`,a).then(n=>n.data),delete:(e,t,a)=>re.delete(`/trips/${e}/days/${t}/assignments/${a}`).then(n=>n.data),reorder:(e,t,a)=>re.put(`/trips/${e}/days/${t}/assignments/reorder`,{orderedIds:a}).then(n=>n.data),move:(e,t,a,n)=>re.put(`/trips/${e}/assignments/${t}/move`,{new_day_id:a,order_index:n}).then(r=>r.data),update:(e,t,a,n)=>re.put(`/trips/${e}/days/${t}/assignments/${a}`,n).then(r=>r.data),getParticipants:(e,t)=>re.get(`/trips/${e}/assignments/${t}/participants`).then(a=>a.data),setParticipants:(e,t,a)=>re.put(`/trips/${e}/assignments/${t}/participants`,{user_ids:a}).then(n=>n.data),updateTime:(e,t,a)=>re.put(`/trips/${e}/assignments/${t}/time`,a).then(n=>n.data)},qn={list:e=>re.get(`/trips/${e}/packing`).then(t=>t.data),create:(e,t)=>re.post(`/trips/${e}/packing`,t).then(a=>a.data),bulkImport:(e,t)=>re.post(`/trips/${e}/packing/import`,{items:t}).then(a=>a.data),update:(e,t,a)=>re.put(`/trips/${e}/packing/${t}`,a).then(n=>n.data),delete:(e,t)=>re.delete(`/trips/${e}/packing/${t}`).then(a=>a.data),reorder:(e,t)=>re.put(`/trips/${e}/packing/reorder`,{orderedIds:t}).then(a=>a.data),getCategoryAssignees:e=>re.get(`/trips/${e}/packing/category-assignees`).then(t=>t.data),setCategoryAssignees:(e,t,a)=>re.put(`/trips/${e}/packing/category-assignees/${encodeURIComponent(t)}`,{user_ids:a}).then(n=>n.data),applyTemplate:(e,t)=>re.post(`/trips/${e}/packing/apply-template/${t}`).then(a=>a.data),listBags:e=>re.get(`/trips/${e}/packing/bags`).then(t=>t.data),createBag:(e,t)=>re.post(`/trips/${e}/packing/bags`,t).then(a=>a.data),updateBag:(e,t,a)=>re.put(`/trips/${e}/packing/bags/${t}`,a).then(n=>n.data),deleteBag:(e,t)=>re.delete(`/trips/${e}/packing/bags/${t}`).then(a=>a.data)},Kf={list:()=>re.get("/tags").then(e=>e.data),create:e=>re.post("/tags",e).then(t=>t.data),update:(e,t)=>re.put(`/tags/${e}`,t).then(a=>a.data),delete:e=>re.delete(`/tags/${e}`).then(t=>t.data)},ss={list:()=>re.get("/categories").then(e=>e.data),create:e=>re.post("/categories",e).then(t=>t.data),update:(e,t)=>re.put(`/categories/${e}`,t).then(a=>a.data),delete:e=>re.delete(`/categories/${e}`).then(t=>t.data)},Et={users:()=>re.get("/admin/users").then(e=>e.data),createUser:e=>re.post("/admin/users",e).then(t=>t.data),updateUser:(e,t)=>re.put(`/admin/users/${e}`,t).then(a=>a.data),deleteUser:e=>re.delete(`/admin/users/${e}`).then(t=>t.data),stats:()=>re.get("/admin/stats").then(e=>e.data),saveDemoBaseline:()=>re.post("/admin/save-demo-baseline").then(e=>e.data),getOidc:()=>re.get("/admin/oidc").then(e=>e.data),updateOidc:e=>re.put("/admin/oidc",e).then(t=>t.data),addons:()=>re.get("/admin/addons").then(e=>e.data),updateAddon:(e,t)=>re.put(`/admin/addons/${e}`,t).then(a=>a.data),checkVersion:()=>re.get("/admin/version-check").then(e=>e.data),getBagTracking:()=>re.get("/admin/bag-tracking").then(e=>e.data),updateBagTracking:e=>re.put("/admin/bag-tracking",{enabled:e}).then(t=>t.data),packingTemplates:()=>re.get("/admin/packing-templates").then(e=>e.data),getPackingTemplate:e=>re.get(`/admin/packing-templates/${e}`).then(t=>t.data),createPackingTemplate:e=>re.post("/admin/packing-templates",e).then(t=>t.data),updatePackingTemplate:(e,t)=>re.put(`/admin/packing-templates/${e}`,t).then(a=>a.data),deletePackingTemplate:e=>re.delete(`/admin/packing-templates/${e}`).then(t=>t.data),addTemplateCategory:(e,t)=>re.post(`/admin/packing-templates/${e}/categories`,t).then(a=>a.data),updateTemplateCategory:(e,t,a)=>re.put(`/admin/packing-templates/${e}/categories/${t}`,a).then(n=>n.data),deleteTemplateCategory:(e,t)=>re.delete(`/admin/packing-templates/${e}/categories/${t}`).then(a=>a.data),addTemplateItem:(e,t,a)=>re.post(`/admin/packing-templates/${e}/categories/${t}/items`,a).then(n=>n.data),updateTemplateItem:(e,t,a)=>re.put(`/admin/packing-templates/${e}/items/${t}`,a).then(n=>n.data),deleteTemplateItem:(e,t)=>re.delete(`/admin/packing-templates/${e}/items/${t}`).then(a=>a.data),listInvites:()=>re.get("/admin/invites").then(e=>e.data),createInvite:e=>re.post("/admin/invites",e).then(t=>t.data),deleteInvite:e=>re.delete(`/admin/invites/${e}`).then(t=>t.data),auditLog:e=>re.get("/admin/audit-log",{params:e}).then(t=>t.data),mcpTokens:()=>re.get("/admin/mcp-tokens").then(e=>e.data),deleteMcpToken:e=>re.delete(`/admin/mcp-tokens/${e}`).then(t=>t.data),getPermissions:()=>re.get("/admin/permissions").then(e=>e.data),updatePermissions:e=>re.put("/admin/permissions",{permissions:e}).then(t=>t.data),rotateJwtSecret:()=>re.post("/admin/rotate-jwt-secret").then(e=>e.data)},qy={enabled:()=>re.get("/addons").then(e=>e.data)},ws={search:(e,t)=>re.post(`/maps/search?lang=${t||"en"}`,{query:e}).then(a=>a.data),details:(e,t)=>re.get(`/maps/details/${encodeURIComponent(e)}`,{params:{lang:t}}).then(a=>a.data),placePhoto:(e,t,a,n)=>re.get(`/maps/place-photo/${encodeURIComponent(e)}`,{params:{lat:t,lng:a,name:n}}).then(r=>r.data),reverse:(e,t,a)=>re.get("/maps/reverse",{params:{lat:e,lng:t,lang:a}}).then(n=>n.data),resolveUrl:e=>re.post("/maps/resolve-url",{url:e}).then(t=>t.data)},Cr={list:e=>re.get(`/trips/${e}/budget`).then(t=>t.data),create:(e,t)=>re.post(`/trips/${e}/budget`,t).then(a=>a.data),update:(e,t,a)=>re.put(`/trips/${e}/budget/${t}`,a).then(n=>n.data),delete:(e,t)=>re.delete(`/trips/${e}/budget/${t}`).then(a=>a.data),setMembers:(e,t,a)=>re.put(`/trips/${e}/budget/${t}/members`,{user_ids:a}).then(n=>n.data),togglePaid:(e,t,a,n)=>re.put(`/trips/${e}/budget/${t}/members/${a}/paid`,{paid:n}).then(r=>r.data),perPersonSummary:e=>re.get(`/trips/${e}/budget/summary/per-person`).then(t=>t.data),settlement:e=>re.get(`/trips/${e}/budget/settlement`).then(t=>t.data)},kn={list:(e,t)=>re.get(`/trips/${e}/files`,{params:t?{trash:"true"}:{}}).then(a=>a.data),upload:(e,t)=>re.post(`/trips/${e}/files`,t,{headers:{"Content-Type":"multipart/form-data"}}).then(a=>a.data),update:(e,t,a)=>re.put(`/trips/${e}/files/${t}`,a).then(n=>n.data),delete:(e,t)=>re.delete(`/trips/${e}/files/${t}`).then(a=>a.data),toggleStar:(e,t)=>re.patch(`/trips/${e}/files/${t}/star`).then(a=>a.data),restore:(e,t)=>re.post(`/trips/${e}/files/${t}/restore`).then(a=>a.data),permanentDelete:(e,t)=>re.delete(`/trips/${e}/files/${t}/permanent`).then(a=>a.data),emptyTrash:e=>re.delete(`/trips/${e}/files/trash/empty`).then(t=>t.data),addLink:(e,t,a)=>re.post(`/trips/${e}/files/${t}/link`,a).then(n=>n.data),removeLink:(e,t,a)=>re.delete(`/trips/${e}/files/${t}/link/${a}`).then(n=>n.data),getLinks:(e,t)=>re.get(`/trips/${e}/files/${t}/links`).then(a=>a.data)},lo={list:e=>re.get(`/trips/${e}/reservations`).then(t=>t.data),create:(e,t)=>re.post(`/trips/${e}/reservations`,t).then(a=>a.data),update:(e,t,a)=>re.put(`/trips/${e}/reservations/${t}`,a).then(n=>n.data),delete:(e,t)=>re.delete(`/trips/${e}/reservations/${t}`).then(a=>a.data),updatePositions:(e,t)=>re.put(`/trips/${e}/reservations/positions`,{positions:t}).then(a=>a.data)},Up={get:(e,t,a)=>re.get("/weather",{params:{lat:e,lng:t,date:a}}).then(n=>n.data),getDetailed:(e,t,a,n)=>re.get("/weather/detailed",{params:{lat:e,lng:t,date:a,lang:n}}).then(r=>r.data)},ep={get:()=>re.get("/settings").then(e=>e.data),set:(e,t)=>re.put("/settings",{key:e,value:t}).then(a=>a.data),setBulk:e=>re.post("/settings/bulk",{settings:e}).then(t=>t.data)},rr={list:e=>re.get(`/trips/${e}/accommodations`).then(t=>t.data),create:(e,t)=>re.post(`/trips/${e}/accommodations`,t).then(a=>a.data),update:(e,t,a)=>re.put(`/trips/${e}/accommodations/${t}`,a).then(n=>n.data),delete:(e,t)=>re.delete(`/trips/${e}/accommodations/${t}`).then(a=>a.data)},Ks={list:(e,t)=>re.get(`/trips/${e}/days/${t}/notes`).then(a=>a.data),create:(e,t,a)=>re.post(`/trips/${e}/days/${t}/notes`,a).then(n=>n.data),update:(e,t,a,n)=>re.put(`/trips/${e}/days/${t}/notes/${a}`,n).then(r=>r.data),delete:(e,t,a)=>re.delete(`/trips/${e}/days/${t}/notes/${a}`).then(n=>n.data)},Aa={getNotes:e=>re.get(`/trips/${e}/collab/notes`).then(t=>t.data),createNote:(e,t)=>re.post(`/trips/${e}/collab/notes`,t).then(a=>a.data),updateNote:(e,t,a)=>re.put(`/trips/${e}/collab/notes/${t}`,a).then(n=>n.data),deleteNote:(e,t)=>re.delete(`/trips/${e}/collab/notes/${t}`).then(a=>a.data),uploadNoteFile:(e,t,a)=>re.post(`/trips/${e}/collab/notes/${t}/files`,a,{headers:{"Content-Type":"multipart/form-data"}}).then(n=>n.data),deleteNoteFile:(e,t,a)=>re.delete(`/trips/${e}/collab/notes/${t}/files/${a}`).then(n=>n.data),getPolls:e=>re.get(`/trips/${e}/collab/polls`).then(t=>t.data),createPoll:(e,t)=>re.post(`/trips/${e}/collab/polls`,t).then(a=>a.data),votePoll:(e,t,a)=>re.post(`/trips/${e}/collab/polls/${t}/vote`,{option_index:a}).then(n=>n.data),closePoll:(e,t)=>re.put(`/trips/${e}/collab/polls/${t}/close`).then(a=>a.data),deletePoll:(e,t)=>re.delete(`/trips/${e}/collab/polls/${t}`).then(a=>a.data),getMessages:(e,t)=>re.get(`/trips/${e}/collab/messages${t?`?before=${t}`:""}`).then(a=>a.data),sendMessage:(e,t)=>re.post(`/trips/${e}/collab/messages`,t).then(a=>a.data),deleteMessage:(e,t)=>re.delete(`/trips/${e}/collab/messages/${t}`).then(a=>a.data),reactMessage:(e,t,a)=>re.post(`/trips/${e}/collab/messages/${t}/react`,{emoji:a}).then(n=>n.data),linkPreview:(e,t)=>re.get(`/trips/${e}/collab/link-preview?url=${encodeURIComponent(t)}`).then(a=>a.data)},_r={list:()=>re.get("/backup/list").then(e=>e.data),create:()=>re.post("/backup/create").then(e=>e.data),download:async e=>{const t=await fetch(`/api/backup/download/${e}`,{credentials:"include"});if(!t.ok)throw new Error("Download failed");const a=await t.blob(),n=URL.createObjectURL(a),r=document.createElement("a");r.href=n,r.download=e,r.click(),URL.revokeObjectURL(n)},delete:e=>re.delete(`/backup/${e}`).then(t=>t.data),restore:e=>re.post(`/backup/restore/${e}`).then(t=>t.data),uploadRestore:e=>{const t=new FormData;return t.append("backup",e),re.post("/backup/upload-restore",t,{headers:{"Content-Type":"multipart/form-data"}}).then(a=>a.data)},getAutoSettings:()=>re.get("/backup/auto-settings").then(e=>e.data),setAutoSettings:e=>re.put("/backup/auto-settings",e).then(t=>t.data)},sl={getLink:e=>re.get(`/trips/${e}/share-link`).then(t=>t.data),createLink:(e,t)=>re.post(`/trips/${e}/share-link`,t||{}).then(a=>a.data),deleteLink:e=>re.delete(`/trips/${e}/share-link`).then(t=>t.data),getSharedTrip:e=>re.get(`/shared/${e}`).then(t=>t.data)},qf={getPreferences:()=>re.get("/notifications/preferences").then(e=>e.data),updatePreferences:e=>re.put("/notifications/preferences",e).then(t=>t.data),testSmtp:e=>re.post("/notifications/test-smtp",{email:e}).then(t=>t.data),testWebhook:()=>re.post("/notifications/test-webhook").then(e=>e.data)},_j=Object.freeze(Object.defineProperty({__proto__:null,accommodationsApi:rr,addonsApi:qy,adminApi:Et,assignmentsApi:Li,authApi:kt,backupApi:_r,budgetApi:Cr,categoriesApi:ss,collabApi:Aa,dayNotesApi:Ks,daysApi:bl,default:re,filesApi:kn,mapsApi:ws,notificationsApi:qf,packingApi:qn,placesApi:Pr,reservationsApi:lo,settingsApi:ep,shareApi:sl,tagsApi:Kf,tripsApi:Va,weatherApi:Up},Symbol.toStringTag,{value:"Module"}));function st(e,t){var a,n;if(typeof e=="object"&&e!==null&&"response"in e){const r=e;if((n=(a=r.response)==null?void 0:a.data)!=null&&n.error)return r.response.data.error}return e instanceof Error?e.message:t}const Na=Wl((e,t)=>({user:null,isAuthenticated:!1,isLoading:!0,error:null,demoMode:localStorage.getItem("demo_mode")==="true",hasMapsKey:!1,serverTimezone:Intl.DateTimeFormat().resolvedOptions().timeZone,appRequireMfa:!1,tripRemindersEnabled:!1,login:async(a,n)=>{e({isLoading:!0,error:null});try{const r=await kt.login({email:a,password:n});return r.mfa_required&&r.mfa_token?(e({isLoading:!1,error:null}),{mfa_required:!0,mfa_token:r.mfa_token}):(e({user:r.user,isAuthenticated:!0,isLoading:!1,error:null}),gd(),r)}catch(r){const o=st(r,"Login failed");throw e({isLoading:!1,error:o}),new Error(o)}},completeMfaLogin:async(a,n)=>{e({isLoading:!0,error:null});try{const r=await kt.verifyMfaLogin({mfa_token:a,code:n.replace(/\s/g,"")});return e({user:r.user,isAuthenticated:!0,isLoading:!1,error:null}),gd(),r}catch(r){const o=st(r,"Verification failed");throw e({isLoading:!1,error:o}),new Error(o)}},register:async(a,n,r,o)=>{e({isLoading:!0,error:null});try{const s=await kt.register({username:a,email:n,password:r,invite_token:o});return e({user:s.user,isAuthenticated:!0,isLoading:!1,error:null}),gd(),s}catch(s){const d=st(s,"Registration failed");throw e({isLoading:!1,error:d}),new Error(d)}},logout:()=>{gM(),fetch("/api/auth/logout",{method:"POST",credentials:"include"}).catch(()=>{}),"caches"in window&&(caches.delete("api-data").catch(()=>{}),caches.delete("user-uploads").catch(()=>{})),e({user:null,isAuthenticated:!1,error:null})},loadUser:async a=>{var r;!!(a!=null&&a.silent)||e({isLoading:!0});try{const o=await kt.me();e({user:o.user,isAuthenticated:!0,isLoading:!1}),gd()}catch(o){const s=o&&typeof o=="object"&&"response"in o&&((r=o.response)==null?void 0:r.status)===401;e(s?{user:null,isAuthenticated:!1,isLoading:!1}:{isLoading:!1})}},updateMapsKey:async a=>{try{await kt.updateMapsKey(a),e(n=>({user:n.user?{...n.user,maps_api_key:a||null}:null}))}catch(n){throw new Error(st(n,"Error saving API key"))}},updateApiKeys:async a=>{try{const n=await kt.updateApiKeys(a);e({user:n.user})}catch(n){throw new Error(st(n,"Error saving API keys"))}},updateProfile:async a=>{try{const n=await kt.updateSettings(a);e({user:n.user})}catch(n){throw new Error(st(n,"Error updating profile"))}},uploadAvatar:async a=>{const n=new FormData;n.append("avatar",a);const r=await kt.uploadAvatar(n);return e(o=>({user:o.user?{...o.user,avatar_url:r.avatar_url}:null})),r},deleteAvatar:async()=>{await kt.deleteAvatar(),e(a=>({user:a.user?{...a.user,avatar_url:null}:null}))},setDemoMode:a=>{a?localStorage.setItem("demo_mode","true"):localStorage.removeItem("demo_mode"),e({demoMode:a})},setHasMapsKey:a=>e({hasMapsKey:a}),setServerTimezone:a=>e({serverTimezone:a}),setAppRequireMfa:a=>e({appRequireMfa:a}),setTripRemindersEnabled:a=>e({tripRemindersEnabled:a}),demoLogin:async()=>{e({isLoading:!0,error:null});try{const a=await kt.demoLogin();return e({user:a.user,isAuthenticated:!0,isLoading:!1,demoMode:!0,error:null}),gd(),a}catch(a){const n=st(a,"Demo login failed");throw e({isLoading:!1,error:n}),new Error(n)}}})),na=Wl((e,t)=>({settings:{map_tile_url:"",default_lat:48.8566,default_lng:2.3522,default_zoom:10,dark_mode:!1,default_currency:"USD",language:localStorage.getItem("app_language")||"en",temperature_unit:"fahrenheit",time_format:"12h",show_place_description:!1},isLoaded:!1,loadSettings:async()=>{try{const a=await ep.get();e(n=>({settings:{...n.settings,...a.settings},isLoaded:!0}))}catch(a){e({isLoaded:!0}),console.error("Failed to load settings:",a)}},updateSetting:async(a,n)=>{e(r=>({settings:{...r.settings,[a]:n}})),a==="language"&&localStorage.setItem("app_language",n);try{await ep.set(a,n)}catch(r){throw console.error("Failed to save setting:",r),new Error(st(r,"Error saving setting"))}},setLanguageLocal:a=>{localStorage.setItem("app_language",a),e(n=>({settings:{...n.settings,language:a}}))},updateSettings:async a=>{e(n=>({settings:{...n.settings,...a}}));try{await ep.setBulk(a)}catch(n){throw console.error("Failed to save settings:",n),new Error(st(n,"Error saving settings"))}}})),vM={"common.save":"Speichern","common.cancel":"Abbrechen","common.delete":"Löschen","common.edit":"Bearbeiten","common.add":"Hinzufügen","common.loading":"Laden...","common.import":"Importieren","common.error":"Fehler","common.back":"Zurück","common.all":"Alle","common.close":"Schließen","common.open":"Öffnen","common.upload":"Hochladen","common.search":"Suchen","common.confirm":"Bestätigen","common.ok":"OK","common.yes":"Ja","common.no":"Nein","common.or":"oder","common.none":"Keine","common.date":"Datum","common.rename":"Umbenennen","common.name":"Name","common.email":"E-Mail","common.password":"Passwort","common.saving":"Speichern...","common.saved":"Gespeichert","trips.reminder":"Erinnerung","trips.reminderNone":"Keine","trips.reminderDay":"Tag","trips.reminderDays":"Tage","trips.reminderCustom":"Benutzerdefiniert","trips.reminderDaysBefore":"Tage vor Abreise","trips.reminderDisabledHint":"Reiseerinnerungen sind deaktiviert. Aktivieren Sie sie unter Admin > Einstellungen > Benachrichtigungen.","common.update":"Aktualisieren","common.change":"Ändern","common.uploading":"Hochladen…","common.backToPlanning":"Zurück zur Planung","common.reset":"Zurücksetzen","nav.trip":"Reise","nav.share":"Teilen","nav.settings":"Einstellungen","nav.admin":"Admin","nav.logout":"Abmelden","nav.lightMode":"Heller Modus","nav.darkMode":"Dunkler Modus","nav.autoMode":"Automatischer Modus","nav.administrator":"Administrator","dashboard.title":"Meine Reisen","dashboard.subtitle.loading":"Reisen werden geladen...","dashboard.subtitle.trips":"{count} Reisen ({archived} archiviert)","dashboard.subtitle.empty":"Starte deine erste Reise","dashboard.subtitle.activeOne":"{count} aktive Reise","dashboard.subtitle.activeMany":"{count} aktive Reisen","dashboard.subtitle.archivedSuffix":" · {count} archiviert","dashboard.newTrip":"Neue Reise","dashboard.gridView":"Kachelansicht","dashboard.listView":"Listenansicht","dashboard.currency":"Währung","dashboard.timezone":"Zeitzonen","dashboard.localTime":"Lokal","dashboard.timezoneCustomTitle":"Eigene Zeitzone","dashboard.timezoneCustomLabelPlaceholder":"Bezeichnung (optional)","dashboard.timezoneCustomTzPlaceholder":"z.B. America/New_York","dashboard.timezoneCustomAdd":"Hinzufügen","dashboard.timezoneCustomErrorEmpty":"Zeitzone eingeben","dashboard.timezoneCustomErrorInvalid":"Ungültige Zeitzone. Format: Europe/Berlin","dashboard.timezoneCustomErrorDuplicate":"Bereits hinzugefügt","dashboard.emptyTitle":"Noch keine Reisen","dashboard.emptyText":"Erstelle deine erste Reise und beginne mit der Planung von Orten, Tagesabläufen und Packlisten.","dashboard.emptyButton":"Erste Reise erstellen","dashboard.nextTrip":"Nächste Reise","dashboard.shared":"Geteilt","dashboard.sharedBy":"Geteilt von {name}","dashboard.days":"Tage","dashboard.places":"Orte","dashboard.archive":"Archivieren","dashboard.restore":"Wiederherstellen","dashboard.archived":"Archiviert","dashboard.status.ongoing":"Laufend","dashboard.status.today":"Heute","dashboard.status.tomorrow":"Morgen","dashboard.status.past":"Vergangen","dashboard.status.daysLeft":"Noch {count} Tage","dashboard.toast.loadError":"Fehler beim Laden der Reisen","dashboard.toast.created":"Reise erfolgreich erstellt!","dashboard.toast.createError":"Fehler beim Erstellen","dashboard.toast.updated":"Reise aktualisiert!","dashboard.toast.updateError":"Fehler beim Aktualisieren","dashboard.toast.deleted":"Reise gelöscht","dashboard.toast.deleteError":"Fehler beim Löschen","dashboard.toast.archived":"Reise archiviert","dashboard.toast.archiveError":"Fehler beim Archivieren","dashboard.toast.restored":"Reise wiederhergestellt","dashboard.toast.restoreError":"Fehler beim Wiederherstellen","dashboard.confirm.delete":'Reise "{title}" löschen? Alle Orte und Pläne werden unwiderruflich gelöscht.',"dashboard.editTrip":"Reise bearbeiten","dashboard.createTrip":"Neue Reise erstellen","dashboard.tripTitle":"Titel","dashboard.tripTitlePlaceholder":"z.B. Sommer in Japan","dashboard.tripDescription":"Beschreibung","dashboard.tripDescriptionPlaceholder":"Worum geht es bei dieser Reise?","dashboard.startDate":"Startdatum","dashboard.endDate":"Enddatum","dashboard.noDateHint":"Kein Datum gesetzt — es werden 7 Standardtage erstellt. Du kannst das jederzeit ändern.","dashboard.coverImage":"Titelbild","dashboard.addCoverImage":"Titelbild hinzufügen (oder per Drag & Drop)","dashboard.addMembers":"Reisebegleiter","dashboard.addMember":"Mitglied hinzufügen","dashboard.coverSaved":"Titelbild gespeichert","dashboard.coverUploadError":"Fehler beim Hochladen","dashboard.coverRemoveError":"Fehler beim Entfernen","dashboard.titleRequired":"Titel ist erforderlich","dashboard.endDateError":"Enddatum muss nach dem Startdatum liegen","settings.title":"Einstellungen","settings.subtitle":"Konfigurieren Sie Ihre persönlichen Einstellungen","settings.map":"Karte","settings.mapTemplate":"Karten-Vorlage","settings.mapTemplatePlaceholder.select":"Vorlage auswählen...","settings.mapDefaultHint":"Leer lassen für OpenStreetMap (Standard)","settings.mapTemplatePlaceholder":"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png","settings.mapHint":"URL-Template für die Kartenkacheln","settings.latitude":"Breitengrad","settings.longitude":"Längengrad","settings.saveMap":"Karte speichern","settings.apiKeys":"API-Schlüssel","settings.mapsKey":"Google Maps API-Schlüssel","settings.mapsKeyHint":"Für Ortsuche. Benötigt Places API (New). Erhalten unter console.cloud.google.com","settings.weatherKey":"OpenWeatherMap API-Schlüssel","settings.weatherKeyHint":"Für Wetterdaten. Kostenlos unter openweathermap.org/api","settings.keyPlaceholder":"Schlüssel eingeben...","settings.configured":"Konfiguriert","settings.saveKeys":"Schlüssel speichern","settings.display":"Darstellung","settings.colorMode":"Farbmodus","settings.light":"Hell","settings.dark":"Dunkel","settings.auto":"Automatisch","settings.language":"Sprache","settings.temperature":"Temperatureinheit","settings.timeFormat":"Zeitformat","settings.routeCalculation":"Routenberechnung","settings.blurBookingCodes":"Buchungscodes verbergen","settings.notifications":"Benachrichtigungen","settings.notifyTripInvite":"Trip-Einladungen","settings.notifyBookingChange":"Buchungsänderungen","settings.notifyTripReminder":"Trip-Erinnerungen","settings.notifyVacayInvite":"Vacay Fusion-Einladungen","settings.notifyPhotosShared":"Geteilte Fotos (Immich)","settings.notifyCollabMessage":"Chat-Nachrichten (Collab)","settings.notifyPackingTagged":"Packliste: Zuweisungen","settings.notifyWebhook":"Webhook-Benachrichtigungen","settings.notificationsDisabled":"Benachrichtigungen sind nicht konfiguriert. Bitten Sie einen Administrator, E-Mail- oder Webhook-Benachrichtungen zu aktivieren.","settings.notificationsActive":"Aktiver Kanal","settings.notificationsManagedByAdmin":"Benachrichtigungsereignisse werden vom Administrator konfiguriert.","admin.notifications.title":"Benachrichtigungen","admin.notifications.hint":"Wählen Sie einen Benachrichtigungskanal. Es kann nur einer gleichzeitig aktiv sein.","admin.notifications.none":"Deaktiviert","admin.notifications.email":"E-Mail (SMTP)","admin.notifications.webhook":"Webhook","admin.notifications.events":"Benachrichtigungsereignisse","admin.notifications.eventsHint":"Wähle, welche Ereignisse Benachrichtigungen für alle Benutzer auslösen.","admin.notifications.configureFirst":"Konfiguriere zuerst die SMTP- oder Webhook-Einstellungen unten, dann aktiviere die Events.","admin.notifications.save":"Benachrichtigungseinstellungen speichern","admin.notifications.saved":"Benachrichtigungseinstellungen gespeichert","admin.notifications.testWebhook":"Test-Webhook senden","admin.notifications.testWebhookSuccess":"Test-Webhook erfolgreich gesendet","admin.notifications.testWebhookFailed":"Test-Webhook fehlgeschlagen","admin.smtp.title":"E-Mail & Benachrichtigungen","admin.smtp.hint":"SMTP-Konfiguration zum Versenden von E-Mail-Benachrichtigungen.","admin.smtp.testButton":"Test-E-Mail senden","admin.webhook.hint":"Benachrichtigungen an einen externen Webhook senden (Discord, Slack usw.).","admin.smtp.testSuccess":"Test-E-Mail erfolgreich gesendet","admin.smtp.testFailed":"Test-E-Mail fehlgeschlagen","dayplan.icsTooltip":"Kalender exportieren (ICS)","share.linkTitle":"Öffentlicher Link","share.linkHint":"Erstelle einen Link den jeder ohne Login nutzen kann, um diese Reise anzuschauen. Nur lesen — keine Bearbeitung möglich.","share.createLink":"Link erstellen","share.deleteLink":"Link löschen","share.createError":"Link konnte nicht erstellt werden","common.copy":"Kopieren","common.copied":"Kopiert","share.permMap":"Karte & Plan","share.permBookings":"Buchungen","share.permPacking":"Packliste","shared.expired":"Link abgelaufen oder ungültig","shared.expiredHint":"Dieser geteilte Reise-Link ist nicht mehr aktiv.","shared.readOnly":"Nur-Lesen Ansicht","shared.tabPlan":"Plan","shared.tabBookings":"Buchungen","shared.tabPacking":"Packliste","shared.tabBudget":"Budget","shared.tabChat":"Chat","shared.days":"Tage","shared.places":"Orte","shared.other":"Sonstige","shared.totalBudget":"Gesamtbudget","shared.messages":"Nachrichten","shared.sharedVia":"Geteilt über","shared.confirmed":"Bestätigt","shared.pending":"Ausstehend","share.permBudget":"Budget","share.permCollab":"Chat","settings.on":"An","settings.off":"Aus","settings.mcp.title":"MCP-Konfiguration","settings.mcp.endpoint":"MCP-Endpunkt","settings.mcp.clientConfig":"Client-Konfiguration","settings.mcp.clientConfigHint":"Ersetze durch ein API-Token aus der Liste unten. Der Pfad zu npx muss ggf. für dein System angepasst werden (z. B. C:\\PROGRA~1\\nodejs\\npx.cmd unter Windows).","settings.mcp.copy":"Kopieren","settings.mcp.copied":"Kopiert!","settings.mcp.apiTokens":"API-Tokens","settings.mcp.createToken":"Neuen Token erstellen","settings.mcp.noTokens":"Noch keine Tokens. Erstelle einen, um MCP-Clients zu verbinden.","settings.mcp.tokenCreatedAt":"Erstellt","settings.mcp.tokenUsedAt":"Verwendet","settings.mcp.deleteTokenTitle":"Token löschen","settings.mcp.deleteTokenMessage":"Dieser Token wird sofort ungültig. Jeder MCP-Client, der ihn verwendet, verliert den Zugang.","settings.mcp.modal.createTitle":"API-Token erstellen","settings.mcp.modal.tokenName":"Token-Name","settings.mcp.modal.tokenNamePlaceholder":"z. B. Claude Desktop, Arbeits-Laptop","settings.mcp.modal.creating":"Wird erstellt…","settings.mcp.modal.create":"Token erstellen","settings.mcp.modal.createdTitle":"Token erstellt","settings.mcp.modal.createdWarning":"Dieser Token wird nur einmal angezeigt. Kopiere und speichere ihn jetzt — er kann nicht wiederhergestellt werden.","settings.mcp.modal.done":"Fertig","settings.mcp.toast.created":"Token erstellt","settings.mcp.toast.createError":"Token konnte nicht erstellt werden","settings.mcp.toast.deleted":"Token gelöscht","settings.mcp.toast.deleteError":"Token konnte nicht gelöscht werden","settings.account":"Konto","settings.username":"Benutzername","settings.email":"E-Mail","settings.role":"Rolle","settings.roleAdmin":"Administrator","settings.oidcLinked":"Verknüpft mit","settings.changePassword":"Passwort ändern","settings.mustChangePassword":"Sie müssen Ihr Passwort ändern, bevor Sie fortfahren können. Bitte legen Sie unten ein neues Passwort fest.","settings.currentPassword":"Aktuelles Passwort","settings.currentPasswordRequired":"Aktuelles Passwort wird benötigt","settings.newPassword":"Neues Passwort","settings.confirmPassword":"Neues Passwort bestätigen","settings.updatePassword":"Passwort aktualisieren","settings.passwordRequired":"Bitte aktuelles und neues Passwort eingeben","settings.passwordTooShort":"Passwort muss mindestens 8 Zeichen lang sein","settings.passwordMismatch":"Passwörter stimmen nicht überein","settings.passwordWeak":"Passwort muss Groß-, Kleinbuchstaben, eine Zahl und ein Sonderzeichen enthalten","settings.passwordChanged":"Passwort erfolgreich geändert","settings.deleteAccount":"Löschen","settings.deleteAccountTitle":"Account wirklich löschen?","settings.deleteAccountWarning":"Dein Account und alle deine Reisen, Orte und Dateien werden unwiderruflich gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.","settings.deleteAccountConfirm":"Endgültig löschen","settings.deleteBlockedTitle":"Löschung nicht möglich","settings.deleteBlockedMessage":"Du bist der einzige Administrator. Ernenne zuerst einen anderen Benutzer zum Admin, bevor du deinen Account löschen kannst.","settings.roleUser":"Benutzer","settings.saveProfile":"Speichern","settings.toast.mapSaved":"Karteneinstellungen gespeichert","settings.toast.keysSaved":"API-Schlüssel gespeichert","settings.toast.displaySaved":"Anzeigeeinstellungen gespeichert","settings.toast.profileSaved":"Profil aktualisiert","settings.uploadAvatar":"Profilbild hochladen","settings.removeAvatar":"Profilbild entfernen","settings.avatarUploaded":"Profilbild aktualisiert","settings.avatarRemoved":"Profilbild entfernt","settings.avatarError":"Fehler beim Hochladen","settings.mfa.title":"Zwei-Faktor-Authentifizierung (2FA)","settings.mfa.description":"Zusätzlicher Schritt bei der Anmeldung mit E-Mail und Passwort. Nutze eine Authenticator-App (Google Authenticator, Authy, …).","settings.mfa.requiredByPolicy":"Dein Administrator verlangt Zwei-Faktor-Authentifizierung. Richte unten eine Authenticator-App ein, bevor du fortfährst.","settings.mfa.backupTitle":"Backup-Codes","settings.mfa.backupDescription":"Verwende diese Einmal-Codes, wenn du keinen Zugriff mehr auf deine Authenticator-App hast.","settings.mfa.backupWarning":"Jetzt speichern. Jeder Code kann nur einmal verwendet werden.","settings.mfa.backupCopy":"Codes kopieren","settings.mfa.backupDownload":"TXT herunterladen","settings.mfa.backupPrint":"Drucken / PDF","settings.mfa.backupCopied":"Backup-Codes kopiert","settings.mfa.enabled":"2FA ist für dein Konto aktiv.","settings.mfa.disabled":"2FA ist nicht aktiviert.","settings.mfa.setup":"Authenticator einrichten","settings.mfa.scanQr":"QR-Code mit der App scannen oder den Schlüssel manuell eingeben.","settings.mfa.secretLabel":"Geheimer Schlüssel (manuell)","settings.mfa.codePlaceholder":"6-stelliger Code","settings.mfa.enable":"2FA aktivieren","settings.mfa.cancelSetup":"Abbrechen","settings.mfa.disableTitle":"2FA deaktivieren","settings.mfa.disableHint":"Passwort und einen aktuellen Code aus der Authenticator-App eingeben.","settings.mfa.disable":"2FA deaktivieren","settings.mfa.toastEnabled":"Zwei-Faktor-Authentifizierung aktiviert","settings.mfa.toastDisabled":"Zwei-Faktor-Authentifizierung deaktiviert","settings.mfa.demoBlocked":"In der Demo nicht verfügbar","login.error":"Anmeldung fehlgeschlagen. Bitte Zugangsdaten prüfen.","login.tagline":`Deine Reisen. Dein Plan.`,"login.description":"Plane Reisen gemeinsam mit interaktiven Karten, Budgets und Echtzeit-Sync.","login.features.maps":"Interaktive Karten","login.features.mapsDesc":"Google Places, Routen & Clustering","login.features.realtime":"Echtzeit-Sync","login.features.realtimeDesc":"Gemeinsam planen via WebSocket","login.features.budget":"Budget-Tracking","login.features.budgetDesc":"Kategorien, Diagramme & Pro-Kopf","login.features.collab":"Zusammenarbeit","login.features.collabDesc":"Multi-User mit geteilten Reisen","login.features.packing":"Packlisten","login.features.packingDesc":"Kategorien & Fortschritt","login.features.bookings":"Buchungen","login.features.bookingsDesc":"Flüge, Hotels, Restaurants & mehr","login.features.files":"Dokumente","login.features.filesDesc":"Dateien hochladen & verwalten","login.features.routes":"Routenoptimierung","login.features.routesDesc":"Auto-Optimierung & Google Maps Export","login.selfHosted":"Self-hosted · Open Source · Deine Daten bleiben bei dir","login.title":"Anmelden","login.subtitle":"Willkommen zurück","login.signingIn":"Anmelden…","login.signIn":"Anmelden","login.createAdmin":"Admin-Konto erstellen","login.createAdminHint":"Erstelle das erste Admin-Konto für TREK.","login.setNewPassword":"Neues Passwort festlegen","login.setNewPasswordHint":"Sie müssen Ihr Passwort ändern, bevor Sie fortfahren können.","login.createAccount":"Konto erstellen","login.createAccountHint":"Neues Konto registrieren.","login.creating":"Erstelle…","login.noAccount":"Noch kein Konto?","login.hasAccount":"Bereits ein Konto?","login.register":"Registrieren","login.emailPlaceholder":"deine@email.de","login.username":"Benutzername","login.oidc.registrationDisabled":"Registrierung ist deaktiviert. Kontaktiere den Administrator.","login.oidc.noEmail":"Keine E-Mail vom Provider erhalten.","login.oidc.tokenFailed":"Authentifizierung fehlgeschlagen.","login.oidc.invalidState":"Ungültige Sitzung. Bitte erneut versuchen.","login.demoFailed":"Demo-Login fehlgeschlagen","login.oidcSignIn":"Anmelden mit {name}","login.oidcOnly":"Passwort-Authentifizierung ist deaktiviert. Bitte melde dich über deinen SSO-Anbieter an.","login.demoHint":"Demo ausprobieren — ohne Registrierung","login.mfaTitle":"Zwei-Faktor-Authentifizierung","login.mfaSubtitle":"Gib den 6-stelligen Code aus deiner Authenticator-App ein.","login.mfaCodeLabel":"Bestätigungscode","login.mfaCodeRequired":"Bitte den Code aus der Authenticator-App eingeben.","login.mfaHint":"Google Authenticator, Authy oder eine andere TOTP-App öffnen.","login.mfaBack":"← Zurück zur Anmeldung","login.mfaVerify":"Bestätigen","register.passwordMismatch":"Passwörter stimmen nicht überein","register.passwordTooShort":"Passwort muss mindestens 8 Zeichen lang sein","register.failed":"Registrierung fehlgeschlagen","register.getStarted":"Jetzt starten","register.subtitle":"Erstellen Sie ein Konto und beginnen Sie, Ihre Traumreisen zu planen.","register.feature1":"Unbegrenzte Reisepläne","register.feature2":"Interaktive Kartenansicht","register.feature3":"Orte und Kategorien verwalten","register.feature4":"Reservierungen tracken","register.feature5":"Packlisten erstellen","register.feature6":"Fotos und Dateien speichern","register.createAccount":"Konto erstellen","register.startPlanning":"Beginnen Sie Ihre Reiseplanung","register.minChars":"Mind. 6 Zeichen","register.confirmPassword":"Passwort bestätigen","register.repeatPassword":"Passwort wiederholen","register.registering":"Registrieren...","register.register":"Registrieren","register.hasAccount":"Bereits ein Konto?","register.signIn":"Anmelden","admin.title":"Administration","admin.subtitle":"Benutzerverwaltung und Systemeinstellungen","admin.tabs.users":"Benutzer","admin.tabs.categories":"Kategorien","admin.tabs.backup":"Backup","admin.tabs.audit":"Audit-Protokoll","admin.stats.users":"Benutzer","admin.stats.trips":"Reisen","admin.stats.places":"Orte","admin.stats.photos":"Fotos","admin.stats.files":"Dateien","admin.table.user":"Benutzer","admin.table.email":"E-Mail","admin.table.role":"Rolle","admin.table.created":"Erstellt","admin.table.lastLogin":"Letzter Login","admin.table.actions":"Aktionen","admin.you":"(Du)","admin.editUser":"Benutzer bearbeiten","admin.newPassword":"Neues Passwort","admin.newPasswordHint":"Leer lassen, um das Passwort nicht zu ändern","admin.deleteUser":'Benutzer "{name}" löschen? Alle Reisen werden unwiderruflich gelöscht.',"admin.deleteUserTitle":"Benutzer löschen","admin.newPasswordPlaceholder":"Neues Passwort eingeben…","admin.toast.loadError":"Fehler beim Laden der Admin-Daten","admin.toast.userUpdated":"Benutzer aktualisiert","admin.toast.updateError":"Fehler beim Aktualisieren","admin.toast.userDeleted":"Benutzer gelöscht","admin.toast.deleteError":"Fehler beim Löschen","admin.toast.cannotDeleteSelf":"Eigenes Konto kann nicht gelöscht werden","admin.toast.userCreated":"Benutzer erstellt","admin.toast.createError":"Fehler beim Erstellen des Benutzers","admin.toast.fieldsRequired":"Benutzername, E-Mail und Passwort sind erforderlich","admin.createUser":"Benutzer anlegen","admin.invite.title":"Einladungslinks","admin.invite.subtitle":"Einmal-Links für die Registrierung erstellen","admin.invite.create":"Link erstellen","admin.invite.createAndCopy":"Erstellen & kopieren","admin.invite.empty":"Noch keine Einladungslinks erstellt","admin.invite.maxUses":"Max. Nutzungen","admin.invite.expiry":"Gültig für","admin.invite.uses":"genutzt","admin.invite.expiresAt":"läuft ab am","admin.invite.createdBy":"von","admin.invite.active":"Aktiv","admin.invite.expired":"Abgelaufen","admin.invite.usedUp":"Aufgebraucht","admin.invite.copied":"Einladungslink in Zwischenablage kopiert","admin.invite.copyLink":"Link kopieren","admin.invite.deleted":"Einladungslink gelöscht","admin.invite.createError":"Fehler beim Erstellen des Einladungslinks","admin.invite.deleteError":"Fehler beim Löschen des Einladungslinks","admin.tabs.settings":"Einstellungen","admin.allowRegistration":"Registrierung erlauben","admin.allowRegistrationHint":"Neue Benutzer können sich selbst registrieren","admin.requireMfa":"Zwei-Faktor-Authentifizierung (2FA) für alle verlangen","admin.requireMfaHint":"Benutzer ohne 2FA müssen die Einrichtung unter Einstellungen abschließen, bevor sie die App nutzen können.","admin.apiKeys":"API-Schlüssel","admin.apiKeysHint":"Optional. Aktiviert erweiterte Ortsdaten wie Fotos und Wetter.","admin.mapsKey":"Google Maps API Key","admin.mapsKeyHint":"Für Ortsuche benötigt. Erstellen unter console.cloud.google.com","admin.mapsKeyHintLong":"Ohne API Key wird OpenStreetMap für die Ortssuche genutzt. Mit Google API Key können zusätzlich Bilder, Bewertungen und Öffnungszeiten geladen werden. Erstellen unter console.cloud.google.com.","admin.recommended":"Empfohlen","admin.weatherKey":"OpenWeatherMap API Key","admin.weatherKeyHint":"Für Wetterdaten. Kostenlos unter openweathermap.org","admin.validateKey":"Test","admin.keyValid":"Verbunden","admin.keyInvalid":"Ungültig","admin.keySaved":"API-Schlüssel gespeichert","admin.oidcTitle":"Single Sign-On (OIDC)","admin.oidcSubtitle":"Anmeldung über externe Anbieter wie Google, Apple, Authentik oder Keycloak.","admin.oidcDisplayName":"Anzeigename","admin.oidcIssuer":"Issuer URL","admin.oidcIssuerHint":"Die OpenID Connect Issuer URL des Anbieters. z.B. https://accounts.google.com","admin.oidcSaved":"OIDC-Konfiguration gespeichert","admin.oidcOnlyMode":"Passwort-Authentifizierung deaktivieren","admin.oidcOnlyModeHint":"Wenn aktiviert, ist nur SSO-Login erlaubt. Passwort-Login und Registrierung werden blockiert.","admin.fileTypes":"Erlaubte Dateitypen","admin.fileTypesHint":"Konfiguriere welche Dateitypen hochgeladen werden dürfen.","admin.fileTypesFormat":"Kommagetrennte Endungen (z.B. jpg,png,pdf,doc). Verwende * um alle Typen zu erlauben.","admin.fileTypesSaved":"Dateityp-Einstellungen gespeichert","admin.bagTracking.title":"Gepäck-Tracking","admin.bagTracking.subtitle":"Gewicht und Gepäckstück-Zuordnung für Packlisteneinträge aktivieren","admin.tabs.config":"Konfiguration","admin.tabs.templates":"Packvorlagen","admin.packingTemplates.title":"Packvorlagen","admin.packingTemplates.subtitle":"Wiederverwendbare Packlisten für deine Reisen erstellen","admin.packingTemplates.create":"Neue Vorlage","admin.packingTemplates.namePlaceholder":"Vorlagenname (z.B. Strandurlaub)","admin.packingTemplates.empty":"Noch keine Vorlagen erstellt","admin.packingTemplates.items":"Einträge","admin.packingTemplates.categories":"Kategorien","admin.packingTemplates.itemName":"Artikelname","admin.packingTemplates.itemCategory":"Kategorie","admin.packingTemplates.categoryName":"Kategoriename (z.B. Kleidung)","admin.packingTemplates.addCategory":"Kategorie hinzufügen","admin.packingTemplates.created":"Vorlage erstellt","admin.packingTemplates.deleted":"Vorlage gelöscht","admin.packingTemplates.loadError":"Vorlagen konnten nicht geladen werden","admin.packingTemplates.createError":"Vorlage konnte nicht erstellt werden","admin.packingTemplates.deleteError":"Vorlage konnte nicht gelöscht werden","admin.packingTemplates.saveError":"Fehler beim Speichern","admin.tabs.addons":"Addons","admin.addons.title":"Addons","admin.addons.subtitle":"Aktiviere oder deaktiviere Funktionen, um TREK nach deinen Wünschen anzupassen.","admin.addons.catalog.packing.name":"Packliste","admin.addons.catalog.packing.description":"Checklisten zum Kofferpacken für jede Reise","admin.addons.catalog.budget.name":"Budget","admin.addons.catalog.budget.description":"Ausgaben verfolgen und Reisebudget planen","admin.addons.catalog.documents.name":"Dokumente","admin.addons.catalog.documents.description":"Reisedokumente speichern und verwalten","admin.addons.catalog.vacay.name":"Vacay","admin.addons.catalog.vacay.description":"Persönlicher Urlaubsplaner mit Kalenderansicht","admin.addons.catalog.atlas.name":"Atlas","admin.addons.catalog.atlas.description":"Weltkarte mit besuchten Ländern und Reisestatistiken","admin.addons.catalog.collab.name":"Collab","admin.addons.catalog.collab.description":"Echtzeit-Notizen, Umfragen und Chat für die Reiseplanung","admin.addons.catalog.memories.name":"Fotos (Immich)","admin.addons.catalog.memories.description":"Reisefotos über deine Immich-Instanz teilen","admin.addons.catalog.mcp.name":"MCP","admin.addons.catalog.mcp.description":"Model Context Protocol für die KI-Assistenten-Integration","admin.addons.subtitleBefore":"Aktiviere oder deaktiviere Funktionen, um ","admin.addons.subtitleAfter":" nach deinen Wünschen anzupassen.","admin.addons.enabled":"Aktiviert","admin.addons.disabled":"Deaktiviert","admin.addons.type.trip":"Trip","admin.addons.type.global":"Global","admin.addons.type.integration":"Integration","admin.addons.tripHint":"Verfügbar als Tab innerhalb jedes Trips","admin.addons.globalHint":"Verfügbar als eigenständiger Bereich in der Navigation","admin.addons.integrationHint":"Backend-Dienste und API-Integrationen ohne eigene Seite","admin.addons.toast.updated":"Addon aktualisiert","admin.addons.toast.error":"Addon konnte nicht aktualisiert werden","admin.addons.noAddons":"Keine Addons verfügbar","admin.weather.title":"Wetterdaten","admin.weather.badge":"Seit 24. März 2026","admin.weather.description":"TREK nutzt Open-Meteo als Wetterdatenquelle. Open-Meteo ist ein kostenloser, quelloffener Wetterdienst — es wird kein API-Schlüssel benötigt.","admin.weather.forecast":"16-Tage-Vorhersage","admin.weather.forecastDesc":"Statt bisher 5 Tage (OpenWeatherMap)","admin.weather.climate":"Historische Klimadaten","admin.weather.climateDesc":"Durchschnittswerte der letzten 85 Jahre für Tage jenseits der 16-Tage-Vorhersage","admin.weather.requests":"10.000 Anfragen / Tag","admin.weather.requestsDesc":"Kostenlos, kein API-Schlüssel erforderlich","admin.weather.locationHint":"Das Wetter wird anhand des ersten Ortes mit Koordinaten im jeweiligen Tag berechnet. Ist kein Ort am Tag eingeplant, wird ein beliebiger Ort aus der Ortsliste als Referenz verwendet.","admin.tabs.mcpTokens":"MCP-Tokens","admin.mcpTokens.title":"MCP-Tokens","admin.mcpTokens.subtitle":"API-Tokens aller Benutzer verwalten","admin.mcpTokens.owner":"Besitzer","admin.mcpTokens.tokenName":"Token-Name","admin.mcpTokens.created":"Erstellt","admin.mcpTokens.lastUsed":"Zuletzt verwendet","admin.mcpTokens.never":"Nie","admin.mcpTokens.empty":"Es wurden noch keine MCP-Tokens erstellt","admin.mcpTokens.deleteTitle":"Token löschen","admin.mcpTokens.deleteMessage":"Dieser Token wird sofort widerrufen. Der Benutzer verliert den MCP-Zugang über diesen Token.","admin.mcpTokens.deleteSuccess":"Token gelöscht","admin.mcpTokens.deleteError":"Token konnte nicht gelöscht werden","admin.mcpTokens.loadError":"Tokens konnten nicht geladen werden","admin.tabs.github":"GitHub","admin.audit.subtitle":"Sicherheitsrelevante und administrative Ereignisse (Backups, Benutzer, MFA, Einstellungen).","admin.audit.empty":"Noch keine Audit-Einträge.","admin.audit.refresh":"Aktualisieren","admin.audit.loadMore":"Mehr laden","admin.audit.showing":"{count} geladen · {total} gesamt","admin.audit.col.time":"Zeit","admin.audit.col.user":"Benutzer","admin.audit.col.action":"Aktion","admin.audit.col.resource":"Ressource","admin.audit.col.ip":"IP","admin.audit.col.details":"Details","admin.github.title":"Update-Verlauf","admin.github.subtitle":"Neueste Updates von {repo}","admin.github.latest":"Aktuell","admin.github.prerelease":"Vorabversion","admin.github.showDetails":"Details anzeigen","admin.github.hideDetails":"Details ausblenden","admin.github.loadMore":"Mehr laden","admin.github.loading":"Wird geladen...","admin.github.error":"Releases konnten nicht geladen werden","admin.github.by":"von","admin.github.support":"Hilft mir, TREK weiterzuentwickeln","admin.update.available":"Update verfügbar","admin.update.text":"TREK {version} ist verfügbar. Du verwendest {current}.","admin.update.button":"Auf GitHub ansehen","admin.update.install":"Update installieren","admin.update.confirmTitle":"Update installieren?","admin.update.confirmText":"TREK wird von {current} auf {version} aktualisiert. Der Server startet danach automatisch neu.","admin.update.dataInfo":"Alle Daten (Reisen, Benutzer, API-Schlüssel, Uploads, Vacay, Atlas, Budgets) bleiben erhalten.","admin.update.warning":"Die App ist während des Neustarts kurz nicht erreichbar.","admin.update.confirm":"Jetzt aktualisieren","admin.update.installing":"Wird aktualisiert…","admin.update.success":"Update installiert! Server startet neu…","admin.update.failed":"Update fehlgeschlagen","admin.update.backupHint":"Wir empfehlen, vor dem Update ein Backup zu erstellen und herunterzuladen.","admin.update.backupLink":"Zum Backup","admin.update.howTo":"Update-Anleitung","admin.update.dockerText":"Deine TREK-Instanz läuft in Docker. Um auf {version} zu aktualisieren, führe folgende Befehle auf deinem Server aus:","admin.update.reloadHint":"Bitte lade die Seite in wenigen Sekunden neu.","vacay.subtitle":"Urlaubstage planen und verwalten","vacay.settings":"Einstellungen","vacay.year":"Jahr","vacay.addYear":"Jahr hinzufügen","vacay.removeYear":"Jahr entfernen","vacay.removeYearConfirm":"{year} entfernen?","vacay.removeYearHint":"Alle Urlaubseinträge und Betriebsferien für dieses Jahr werden unwiderruflich gelöscht.","vacay.remove":"Entfernen","vacay.persons":"Personen","vacay.noPersons":"Keine Personen angelegt","vacay.addPerson":"Person hinzufügen","vacay.editPerson":"Person bearbeiten","vacay.removePerson":"Person entfernen","vacay.removePersonConfirm":"{name} wirklich entfernen?","vacay.removePersonHint":"Alle Urlaubseinträge dieser Person werden unwiderruflich gelöscht.","vacay.personName":"Name","vacay.personNamePlaceholder":"Name eingeben","vacay.color":"Farbe","vacay.add":"Hinzufügen","vacay.legend":"Legende","vacay.publicHoliday":"Feiertag","vacay.companyHoliday":"Betriebsferien","vacay.weekend":"Wochenende","vacay.modeVacation":"Urlaub","vacay.modeCompany":"Betriebsferien","vacay.entitlement":"Urlaubsanspruch","vacay.entitlementDays":"Tage","vacay.used":"Weg","vacay.remaining":"Rest","vacay.carriedOver":"aus {year}","vacay.blockWeekends":"Wochenenden sperren","vacay.blockWeekendsHint":"Verhindert Urlaubseinträge an Wochenendtagen","vacay.weekendDays":"Wochenendtage","vacay.mon":"Mo","vacay.tue":"Di","vacay.wed":"Mi","vacay.thu":"Do","vacay.fri":"Fr","vacay.sat":"Sa","vacay.sun":"So","vacay.publicHolidays":"Feiertage","vacay.publicHolidaysHint":"Feiertage im Kalender markieren","vacay.selectCountry":"Land wählen","vacay.selectRegion":"Region wählen (optional)","vacay.addCalendar":"Kalender hinzufügen","vacay.calendarLabel":"Bezeichnung (optional)","vacay.calendarColor":"Farbe","vacay.noCalendars":"Noch keine Feiertagskalender angelegt","vacay.companyHolidays":"Betriebsferien","vacay.companyHolidaysHint":"Erlaubt das Markieren von unternehmensweiten Feiertagen","vacay.companyHolidaysNoDeduct":"Betriebsferien werden nicht vom Urlaubskontingent abgezogen.","vacay.carryOver":"Urlaubsmitnahme","vacay.carryOverHint":"Resturlaub automatisch ins Folgejahr übertragen","vacay.sharing":"Teilen","vacay.sharingHint":"Teile deinen Urlaubsplan mit anderen TREK-Benutzern","vacay.owner":"Besitzer","vacay.shareEmailPlaceholder":"E-Mail des TREK-Benutzers","vacay.shareSuccess":"Plan erfolgreich geteilt","vacay.shareError":"Plan konnte nicht geteilt werden","vacay.dissolve":"Fusion auflösen","vacay.dissolveHint":"Kalender wieder trennen. Deine Einträge bleiben erhalten.","vacay.dissolveAction":"Auflösen","vacay.dissolved":"Kalender getrennt","vacay.fusedWith":"Fusioniert mit","vacay.you":"du","vacay.noData":"Keine Daten","vacay.changeColor":"Farbe ändern","vacay.inviteUser":"Benutzer einladen","vacay.inviteHint":"Lade einen anderen TREK-Benutzer ein, um einen gemeinsamen Urlaubskalender zu teilen.","vacay.selectUser":"Benutzer wählen","vacay.sendInvite":"Einladung senden","vacay.inviteSent":"Einladung gesendet","vacay.inviteError":"Einladung konnte nicht gesendet werden","vacay.pending":"ausstehend","vacay.noUsersAvailable":"Keine Benutzer verfügbar","vacay.accept":"Annehmen","vacay.decline":"Ablehnen","vacay.acceptFusion":"Annehmen & Fusionieren","vacay.inviteTitle":"Fusionsanfrage","vacay.inviteWantsToFuse":"möchte einen Urlaubskalender mit dir teilen.","vacay.fuseInfo1":"Beide sehen alle Urlaubseinträge in einem gemeinsamen Kalender.","vacay.fuseInfo2":"Beide können Einträge für den jeweils anderen erstellen und bearbeiten.","vacay.fuseInfo3":"Beide können Einträge löschen und den Urlaubsanspruch ändern.","vacay.fuseInfo4":"Einstellungen wie Feiertage und Betriebsferien werden geteilt.","vacay.fuseInfo5":"Die Fusion kann jederzeit von beiden Seiten aufgelöst werden. Einträge bleiben erhalten.","nav.myTrips":"Meine Trips","atlas.subtitle":"Dein Reise-Fußabdruck auf der Welt","atlas.countries":"Länder","atlas.trips":"Reisen","atlas.places":"Orte","atlas.unmark":"Entfernen","atlas.confirmMark":"Dieses Land als besucht markieren?","atlas.confirmUnmark":"Dieses Land von der Liste entfernen?","atlas.markVisited":"Als besucht markieren","atlas.markVisitedHint":"Dieses Land zur besuchten Liste hinzufügen","atlas.addToBucket":"Zur Bucket List","atlas.addPoi":"Ort hinzufügen","atlas.searchCountry":"Land suchen...","atlas.bucketNamePlaceholder":"Name (Land, Stadt, Ort...)","atlas.month":"Monat","atlas.year":"Jahr","atlas.addToBucketHint":"Als Wunschziel speichern","atlas.bucketWhen":"Wann möchtest du dorthin reisen?","atlas.statsTab":"Statistik","atlas.bucketTab":"Bucket List","atlas.addBucket":"Zur Bucket List hinzufügen","atlas.bucketNotesPlaceholder":"Notizen (optional)","atlas.bucketEmpty":"Deine Bucket List ist leer","atlas.bucketEmptyHint":"Füge Orte hinzu, die du besuchen möchtest","atlas.days":"Tage","atlas.visitedCountries":"Besuchte Länder","atlas.cities":"Städte","atlas.noData":"Noch keine Reisedaten","atlas.noDataHint":"Erstelle einen Trip und füge Orte hinzu","atlas.lastTrip":"Letzter Trip","atlas.nextTrip":"Nächster Trip","atlas.daysLeft":"Tage","atlas.streak":"Streak","atlas.years":"Jahre","atlas.yearInRow":"Jahr in Folge","atlas.yearsInRow":"Jahre in Folge","atlas.tripIn":"Reise in","atlas.tripsIn":"Reisen in","atlas.since":"seit","atlas.europe":"Europa","atlas.asia":"Asien","atlas.northAmerica":"N-Amerika","atlas.southAmerica":"S-Amerika","atlas.africa":"Afrika","atlas.oceania":"Ozeanien","atlas.other":"Andere","atlas.firstVisit":"Erste Reise","atlas.lastVisitLabel":"Letzte Reise","atlas.tripSingular":"Reise","atlas.tripPlural":"Reisen","atlas.placeVisited":"Ort besucht","atlas.placesVisited":"Orte besucht","trip.tabs.plan":"Karte","trip.tabs.reservations":"Buchungen","trip.tabs.reservationsShort":"Buchung","trip.tabs.packing":"Liste","trip.tabs.packingShort":"Liste","trip.tabs.budget":"Budget","trip.tabs.files":"Dateien","trip.loading":"Reise wird geladen...","trip.loadingPhotos":"Fotos der Orte werden geladen...","trip.mobilePlan":"Planung","trip.mobilePlaces":"Orte","trip.toast.placeUpdated":"Ort aktualisiert","trip.toast.placeAdded":"Ort hinzugefügt","trip.toast.placeDeleted":"Ort gelöscht","trip.toast.selectDay":"Bitte wähle zuerst einen Tag aus","trip.toast.assignedToDay":"Ort wurde dem Tag zugewiesen","trip.toast.reorderError":"Fehler beim Sortieren","trip.toast.reservationUpdated":"Reservierung aktualisiert","trip.toast.reservationAdded":"Reservierung hinzugefügt","trip.toast.deleted":"Gelöscht","trip.confirm.deletePlace":"Möchtest du diesen Ort wirklich löschen?","dayplan.emptyDay":"Keine Orte für diesen Tag geplant","dayplan.cannotReorderTransport":"Buchungen mit fester Uhrzeit können nicht verschoben werden","dayplan.confirmRemoveTimeTitle":"Uhrzeit entfernen?","dayplan.confirmRemoveTimeBody":"Dieser Ort hat eine feste Uhrzeit ({time}). Durch das Verschieben wird die Uhrzeit entfernt und der Ort kann frei sortiert werden.","dayplan.confirmRemoveTimeAction":"Uhrzeit entfernen & verschieben","dayplan.cannotDropOnTimed":"Orte können nicht zwischen zeitgebundene Einträge geschoben werden","dayplan.cannotBreakChronology":"Die zeitliche Reihenfolge von Uhrzeiten und Buchungen darf nicht verletzt werden","dayplan.addNote":"Notiz hinzufügen","dayplan.editNote":"Notiz bearbeiten","dayplan.noteAdd":"Notiz hinzufügen","dayplan.noteEdit":"Notiz bearbeiten","dayplan.noteTitle":"Notiz","dayplan.noteSubtitle":"Tagesnotiz","dayplan.totalCost":"Gesamtkosten","dayplan.days":"Tage","dayplan.dayN":"Tag {n}","dayplan.calculating":"Berechne...","dayplan.route":"Route","dayplan.optimize":"Optimieren","dayplan.optimized":"Route optimiert","dayplan.routeError":"Fehler bei der Routenberechnung","dayplan.toast.needTwoPlaces":"Mindestens zwei Orte für Routenoptimierung nötig","dayplan.toast.routeOptimized":"Route optimiert","dayplan.toast.noGeoPlaces":"Keine Orte mit Koordinaten für Routenberechnung gefunden","dayplan.confirmed":"Bestätigt","dayplan.pendingRes":"Ausstehend","dayplan.pdf":"PDF","dayplan.pdfTooltip":"Tagesplan als PDF exportieren","dayplan.pdfError":"Fehler beim PDF-Export","places.addPlace":"Ort/Aktivität hinzufügen","places.importGpx":"GPX","places.gpxImported":"{count} Orte aus GPX importiert","places.urlResolved":"Ort aus URL importiert","places.gpxError":"GPX-Import fehlgeschlagen","places.importGoogleList":"Google Liste","places.googleListHint":"Geteilten Google Maps Listen-Link einfügen, um alle Orte zu importieren.","places.googleListImported":'{count} Orte aus "{list}" importiert',"places.googleListError":"Google Maps Liste konnte nicht importiert werden","places.viewDetails":"Details anzeigen","places.assignToDay":"Zu welchem Tag hinzufügen?","places.all":"Alle","places.unplanned":"Ungeplant","places.search":"Orte suchen...","places.allCategories":"Alle Kategorien","places.categoriesSelected":"Kategorien","places.clearFilter":"Filter zurücksetzen","places.count":"{count} Orte","places.countSingular":"1 Ort","places.allPlanned":"Alle Orte sind eingeplant","places.noneFound":"Keine Orte gefunden","places.editPlace":"Ort bearbeiten","places.formName":"Name","places.formNamePlaceholder":"z.B. Eiffelturm","places.formDescription":"Beschreibung","places.formDescriptionPlaceholder":"Kurze Beschreibung...","places.formAddress":"Adresse","places.formAddressPlaceholder":"Straße, Stadt, Land","places.formLat":"Breitengrad (z.B. 48.8566)","places.formLng":"Längengrad (z.B. 2.3522)","places.formCategory":"Kategorie","places.noCategory":"Keine Kategorie","places.categoryNamePlaceholder":"Kategoriename","places.formTime":"Uhrzeit","places.startTime":"Start","places.endTime":"Ende","places.endTimeBeforeStart":"Endzeit liegt vor der Startzeit","places.timeCollision":"Zeitliche Überschneidung mit:","places.formWebsite":"Website","places.formNotesPlaceholder":"Persönliche Notizen...","places.formReservation":"Reservierung","places.reservationNotesPlaceholder":"Reservierungsnotizen, Bestätigungsnummer...","places.mapsSearchPlaceholder":"Ortssuche...","places.mapsSearchError":"Ortssuche fehlgeschlagen.","places.osmHint":"OpenStreetMap-Suche aktiv (ohne Bilder, Öffnungszeiten, Bewertungen). Für erweiterte Daten Google API Key in den Einstellungen hinterlegen.","places.osmActive":"Suche via OpenStreetMap (ohne Bilder, Bewertungen & Öffnungszeiten). Google API Key in den Einstellungen hinterlegen für erweiterte Daten.","places.categoryCreateError":"Fehler beim Erstellen der Kategorie","places.nameRequired":"Bitte einen Namen eingeben","places.saveError":"Fehler beim Speichern","inspector.opened":"Geöffnet","inspector.closed":"Geschlossen","inspector.openingHours":"Öffnungszeiten","inspector.showHours":"Öffnungszeiten anzeigen","inspector.files":"Dateien","inspector.filesCount":"{count} Dateien","inspector.removeFromDay":"Vom Tag entfernen","inspector.addToDay":"Zum Tag hinzufügen","inspector.confirmedRes":"Bestätigte Reservierung","inspector.pendingRes":"Ausstehende Reservierung","inspector.google":"In Google Maps öffnen","inspector.website":"Webseite öffnen","inspector.addRes":"Reservierung","inspector.editRes":"Reservierung bearbeiten","inspector.participants":"Teilnehmer","inspector.trackStats":"Streckendaten","reservations.title":"Buchungen","reservations.empty":"Keine Reservierungen vorhanden","reservations.emptyHint":"Füge Reservierungen für Flüge, Hotels und mehr hinzu","reservations.add":"Reservierung hinzufügen","reservations.addManual":"Manuelle Buchung","reservations.placeHint":"Tipp: Buchungen werden am besten direkt über einen angelegten Ort erstellt, um sie mit dem Tagesplan zu verknüpfen.","reservations.confirmed":"Bestätigt","reservations.pending":"Ausstehend","reservations.summary":"{confirmed} bestätigt, {pending} ausstehend","reservations.fromPlan":"Aus Planung","reservations.showFiles":"Dateien anzeigen","reservations.editTitle":"Reservierung bearbeiten","reservations.status":"Status","reservations.datetime":"Datum & Uhrzeit","reservations.startTime":"Startzeit","reservations.endTime":"Endzeit","reservations.date":"Datum","reservations.time":"Uhrzeit","reservations.timeAlt":"Uhrzeit (alternativ, z.B. 19:30)","reservations.notes":"Notizen","reservations.notesPlaceholder":"Zusätzliche Notizen...","reservations.meta.airline":"Airline","reservations.meta.flightNumber":"Flugnr.","reservations.meta.from":"Von","reservations.meta.to":"Nach","reservations.meta.trainNumber":"Zugnr.","reservations.meta.platform":"Gleis","reservations.meta.seat":"Sitzplatz","reservations.meta.checkIn":"Check-in","reservations.meta.checkOut":"Check-out","reservations.meta.linkAccommodation":"Unterkunft","reservations.meta.pickAccommodation":"Mit Unterkunft verknüpfen","reservations.meta.noAccommodation":"Keine","reservations.meta.hotelPlace":"Unterkunft","reservations.meta.pickHotel":"Unterkunft auswählen","reservations.meta.fromDay":"Von","reservations.meta.toDay":"Bis","reservations.meta.selectDay":"Tag wählen","reservations.type.flight":"Flug","reservations.type.hotel":"Unterkunft","reservations.type.restaurant":"Restaurant","reservations.type.train":"Zug","reservations.type.car":"Mietwagen","reservations.type.cruise":"Kreuzfahrt","reservations.type.event":"Veranstaltung","reservations.type.tour":"Tour","reservations.type.other":"Sonstiges","reservations.confirm.delete":'Möchtest du die Reservierung "{name}" wirklich löschen?',"reservations.confirm.deleteTitle":"Buchung löschen?","reservations.confirm.deleteBody":'"{name}" wird unwiderruflich gelöscht.',"reservations.toast.updated":"Reservierung aktualisiert","reservations.toast.removed":"Reservierung gelöscht","reservations.toast.saveError":"Fehler beim Speichern","reservations.toast.updateError":"Fehler beim Aktualisieren","reservations.toast.deleteError":"Fehler beim Löschen","reservations.confirm.remove":'Reservierung für "{name}" entfernen?',"reservations.toast.fileUploaded":"Datei hochgeladen","reservations.toast.uploadError":"Fehler beim Hochladen","reservations.newTitle":"Neue Buchung","reservations.bookingType":"Art der Buchung","reservations.titleLabel":"Titel","reservations.titlePlaceholder":"z.B. Lufthansa LH123, Hotel Adlon, ...","reservations.locationAddress":"Ort / Adresse","reservations.locationPlaceholder":"Adresse, Flughafen, Hotel...","reservations.confirmationCode":"Buchungscode","reservations.confirmationPlaceholder":"z.B. ABC12345","reservations.day":"Tag","reservations.noDay":"Kein Tag","reservations.place":"Ort","reservations.noPlace":"Kein Ort","reservations.pendingSave":"wird gespeichert…","reservations.uploading":"Wird hochgeladen...","reservations.attachFile":"Datei anhängen","reservations.linkExisting":"Vorhandene verknüpfen","reservations.linkAssignment":"Mit Tagesplanung verknüpfen","reservations.pickAssignment":"Zuordnung aus dem Plan wählen...","reservations.noAssignment":"Keine Verknüpfung","budget.title":"Budget","budget.exportCsv":"CSV exportieren","budget.emptyTitle":"Noch kein Budget erstellt","budget.emptyText":"Erstelle Kategorien und Einträge, um dein Reisebudget zu planen","budget.emptyPlaceholder":"Kategoriename eingeben...","budget.createCategory":"Kategorie erstellen","budget.category":"Kategorie","budget.categoryName":"Kategoriename","budget.table.name":"Name","budget.table.total":"Gesamt","budget.table.persons":"Personen","budget.table.days":"Tage","budget.table.perPerson":"Pro Person","budget.table.perDay":"Pro Tag","budget.table.perPersonDay":"P. p / Tag","budget.table.note":"Notiz","budget.table.date":"Datum","budget.newEntry":"Neuer Eintrag","budget.defaultEntry":"Neuer Eintrag","budget.defaultCategory":"Neue Kategorie","budget.total":"Gesamt","budget.totalBudget":"Gesamtbudget","budget.byCategory":"Nach Kategorie","budget.editTooltip":"Klicken zum Bearbeiten","budget.confirm.deleteCategory":'Möchtest du die Kategorie "{name}" mit {count} Einträgen wirklich löschen?',"budget.deleteCategory":"Kategorie löschen","budget.perPerson":"Pro Person","budget.paid":"Bezahlt","budget.open":"Offen","budget.noMembers":"Keine Teilnehmer zugewiesen","budget.settlement":"Ausgleich","budget.settlementInfo":"Klicke auf ein Mitglied-Bild bei einem Eintrag, um es grün zu markieren — das bedeutet, diese Person hat bezahlt. Der Ausgleich zeigt dann, wer wem wie viel schuldet.","budget.netBalances":"Netto-Salden","files.title":"Dateien","files.count":"{count} Dateien","files.countSingular":"1 Datei","files.uploaded":"{count} hochgeladen","files.uploadError":"Fehler beim Hochladen","files.dropzone":"Dateien hier ablegen","files.dropzoneHint":"oder klicken zum Auswählen","files.allowedTypes":"Bilder, PDF, DOC, DOCX, XLS, XLSX, TXT, CSV · Max 50 MB","files.uploading":"Wird hochgeladen...","files.filterAll":"Alle","files.filterPdf":"PDFs","files.filterImages":"Bilder","files.filterDocs":"Dokumente","files.filterCollab":"Collab Notizen","files.sourceCollab":"Aus Collab Notizen","files.empty":"Keine Dateien vorhanden","files.emptyHint":"Lade Dateien hoch, um sie mit deiner Reise zu verknüpfen","files.openTab":"In neuem Tab öffnen","files.confirm.delete":"Möchtest du diese Datei wirklich löschen?","files.toast.deleted":"Datei gelöscht","files.toast.deleteError":"Fehler beim Löschen der Datei","files.sourcePlan":"Tagesplan","files.sourceBooking":"Buchung","files.attach":"Anhängen","files.pasteHint":"Du kannst auch Bilder aus der Zwischenablage einfügen (Strg+V)","files.trash":"Papierkorb","files.trashEmpty":"Papierkorb ist leer","files.emptyTrash":"Papierkorb leeren","files.restore":"Wiederherstellen","files.star":"Markieren","files.unstar":"Markierung entfernen","files.assign":"Zuweisen","files.assignTitle":"Datei zuweisen","files.assignPlace":"Ort","files.assignBooking":"Buchung","files.unassigned":"Nicht zugewiesen","files.unlink":"Verknüpfung entfernen","files.toast.trashed":"In den Papierkorb verschoben","files.toast.restored":"Datei wiederhergestellt","files.toast.trashEmptied":"Papierkorb geleert","files.toast.assigned":"Datei zugewiesen","files.toast.assignError":"Zuweisung fehlgeschlagen","files.toast.restoreError":"Wiederherstellung fehlgeschlagen","files.confirm.permanentDelete":"Diese Datei endgültig löschen? Das kann nicht rückgängig gemacht werden.","files.confirm.emptyTrash":"Alle Dateien im Papierkorb endgültig löschen? Das kann nicht rückgängig gemacht werden.","files.noteLabel":"Notiz","files.notePlaceholder":"Notiz hinzufügen...","packing.title":"Packliste","packing.empty":"Packliste ist leer","packing.import":"Importieren","packing.importTitle":"Packliste importieren","packing.importHint":"Ein Eintrag pro Zeile. Format: Kategorie, Name, Gewicht in g (optional), Tasche (optional), checked/unchecked (optional)","packing.importPlaceholder":`Hygiene, Zahnbürste Kleidung, T-Shirts, 200 Dokumente, Reisepass, , Handgepäck @@ -93,7 +93,7 @@ Elektronik, Ladekabel, 50, Koffer, checked`,"packing.importCsv":"CSV/TXT laden", Alle aktuellen Daten werden durch den Backup-Stand ersetzt.`,"backup.confirm.uploadRestore":`Backup-Datei "{name}" hochladen und wiederherstellen? -Alle aktuellen Daten werden überschrieben.`,"backup.confirm.delete":'Backup "{name}" löschen?',"backup.toast.loadError":"Fehler beim Laden der Backups","backup.toast.created":"Backup erfolgreich erstellt","backup.toast.createError":"Fehler beim Erstellen des Backups","backup.toast.restored":"Backup wiederhergestellt. Seite wird neu geladen…","backup.toast.restoreError":"Fehler beim Wiederherstellen","backup.toast.uploadError":"Fehler beim Hochladen","backup.toast.deleted":"Backup gelöscht","backup.toast.deleteError":"Fehler beim Löschen","backup.toast.downloadError":"Download fehlgeschlagen","backup.toast.settingsSaved":"Auto-Backup Einstellungen gespeichert","backup.toast.settingsError":"Fehler beim Speichern der Einstellungen","backup.auto.title":"Auto-Backup","backup.auto.subtitle":"Automatische Sicherung nach Zeitplan","backup.auto.enable":"Auto-Backup aktivieren","backup.auto.enableHint":"Backups werden automatisch nach dem gewählten Zeitplan erstellt","backup.auto.interval":"Intervall","backup.auto.hour":"Ausführung um","backup.auto.hourHint":"Lokale Serverzeit ({format}-Format)","backup.auto.dayOfWeek":"Wochentag","backup.auto.dayOfMonth":"Tag des Monats","backup.auto.dayOfMonthHint":"Auf 1–28 beschränkt, um mit allen Monaten kompatibel zu sein","backup.auto.scheduleSummary":"Zeitplan","backup.auto.summaryDaily":"Täglich um {hour}:00","backup.auto.summaryWeekly":"Jeden {day} um {hour}:00","backup.auto.summaryMonthly":"Am {day}. jedes Monats um {hour}:00","backup.auto.envLocked":"Docker","backup.auto.envLockedHint":"Auto-Backup wird über Docker-Umgebungsvariablen konfiguriert. Ändern Sie Ihre docker-compose.yml und starten Sie den Container neu.","backup.auto.copyEnv":"Docker-Umgebungsvariablen kopieren","backup.auto.envCopied":"Docker-Umgebungsvariablen in die Zwischenablage kopiert","backup.auto.keepLabel":"Alte Backups löschen nach","backup.dow.sunday":"So","backup.dow.monday":"Mo","backup.dow.tuesday":"Di","backup.dow.wednesday":"Mi","backup.dow.thursday":"Do","backup.dow.friday":"Fr","backup.dow.saturday":"Sa","backup.interval.hourly":"Stündlich","backup.interval.daily":"Täglich","backup.interval.weekly":"Wöchentlich","backup.interval.monthly":"Monatlich","backup.keep.1day":"1 Tag","backup.keep.3days":"3 Tage","backup.keep.7days":"7 Tage","backup.keep.14days":"14 Tage","backup.keep.30days":"30 Tage","backup.keep.forever":"Immer behalten","photos.allDays":"Alle Tage","photos.noPhotos":"Noch keine Fotos","photos.uploadHint":"Lade deine Reisefotos hoch","photos.clickToSelect":"oder klicken zum Auswählen","photos.linkPlace":"Ort verknüpfen","photos.noPlace":"Kein Ort","photos.uploadN":"{n} Foto(s) hochladen","backup.restoreConfirmTitle":"Backup wiederherstellen?","backup.restoreWarning":"Alle aktuellen Daten (Reisen, Orte, Benutzer, Uploads) werden unwiderruflich durch das Backup ersetzt. Dieser Vorgang kann nicht rückgängig gemacht werden.","backup.restoreTip":"Tipp: Erstelle zuerst ein Backup des aktuellen Stands, bevor du wiederherstellst.","backup.restoreConfirm":"Ja, wiederherstellen","pdf.travelPlan":"Reiseplan","pdf.planned":"Eingeplant","pdf.costLabel":"Kosten EUR","pdf.preview":"PDF Vorschau","pdf.saveAsPdf":"Als PDF speichern","planner.places":"Orte","planner.bookings":"Buchungen","planner.packingList":"Packliste","planner.documents":"Dokumente","planner.dayPlan":"Tagesplan","planner.reservations":"Reservierungen","planner.minTwoPlaces":"Mindestens 2 Orte mit Koordinaten benötigt","planner.noGeoPlaces":"Keine Orte mit Koordinaten vorhanden","planner.routeCalculated":"Route berechnet","planner.routeCalcFailed":"Route konnte nicht berechnet werden","planner.routeError":"Fehler bei der Routenberechnung","planner.routeOptimized":"Route optimiert","planner.reservationUpdated":"Reservierung aktualisiert","planner.reservationAdded":"Reservierung hinzugefügt","planner.confirmDeleteReservation":"Reservierung löschen?","planner.reservationDeleted":"Reservierung gelöscht","planner.days":"Tage","planner.allPlaces":"Alle Orte","planner.totalPlaces":"{n} Orte gesamt","planner.noDaysPlanned":"Noch keine Tage geplant","planner.editTrip":"Reise bearbeiten →","planner.placeOne":"1 Ort","planner.placeN":"{n} Orte","planner.addNote":"Notiz hinzufügen","planner.noEntries":"Keine Einträge für diesen Tag","planner.addPlace":"Ort/Aktivität hinzufügen","planner.addPlaceShort":"+ Ort/Aktivität hinzufügen","planner.resPending":"Reservierung ausstehend · ","planner.resConfirmed":"Reservierung bestätigt · ","planner.notePlaceholder":"Notiz…","planner.noteTimePlaceholder":"Zeit (optional)","planner.noteExamplePlaceholder":"z.B. S3 um 14:30 ab Hauptbahnhof, Fähre ab Pier 7, Mittagspause…","planner.totalCost":"Gesamtkosten","planner.searchPlaces":"Orte suchen…","planner.allCategories":"Alle Kategorien","planner.noPlacesFound":"Keine Orte gefunden","planner.addFirstPlace":"Ersten Ort hinzufügen","planner.noReservations":"Keine Reservierungen","planner.addFirstReservation":"Erste Reservierung hinzufügen","planner.new":"Neu","planner.addToDay":"+ Tag","planner.calculating":"Berechne…","planner.route":"Route","planner.optimize":"Optimieren","planner.openGoogleMaps":"In Google Maps öffnen","planner.selectDayHint":"Wähle einen Tag aus der linken Liste um den Tagesplan zu sehen","planner.noPlacesForDay":"Noch keine Orte für diesen Tag","planner.addPlacesLink":"Orte hinzufügen →","planner.minTotal":"Min. gesamt","planner.noReservation":"Keine Reservierung","planner.removeFromDay":"Aus Tag entfernen","planner.addToThisDay":"Zum Tag hinzufügen","planner.overview":"Gesamtübersicht","planner.noDays":"Noch keine Tage","planner.editTripToAddDays":"Reise bearbeiten um Tage hinzuzufügen","planner.dayCount":"{n} Tage","planner.clickToUnlock":"Klicken zum Entsperren","planner.keepPosition":"Position bei Routenoptimierung beibehalten","planner.dayDetails":"Tagesdetails","planner.dayN":"Tag {n}","stats.countries":"Länder","stats.cities":"Städte","stats.trips":"Reisen","stats.places":"Orte","stats.worldProgress":"Weltfortschritt","stats.visited":"besucht","stats.remaining":"verbleibend","stats.visitedCountries":"Besuchte Länder","day.precipProb":"Regenwahrscheinlichkeit","day.precipitation":"Niederschlag","day.wind":"Wind","day.sunrise":"Sonnenaufgang","day.sunset":"Sonnenuntergang","day.hourlyForecast":"Stündliche Vorhersage","day.climateHint":"Historische Durchschnittswerte — echte Vorhersage verfügbar innerhalb von 16 Tagen vor diesem Datum.","day.noWeather":"Keine Wetterdaten verfügbar. Füge einen Ort mit Koordinaten hinzu.","day.overview":"Tagesübersicht","day.accommodation":"Unterkunft","day.addAccommodation":"Unterkunft hinzufügen","day.hotelDayRange":"Auf Tage anwenden","day.noPlacesForHotel":"Füge zuerst Orte zu deiner Reise hinzu","day.allDays":"Alle","day.checkIn":"Check-in","day.checkOut":"Check-out","day.confirmation":"Bestätigung","day.editAccommodation":"Unterkunft bearbeiten","day.reservations":"Reservierungen","memories.title":"Fotos","memories.notConnected":"Immich nicht verbunden","memories.notConnectedHint":"Verbinde deine Immich-Instanz in den Einstellungen, um deine Reisefotos hier zu sehen.","memories.noDates":"Füge Daten zu deiner Reise hinzu, um Fotos zu laden.","memories.noPhotos":"Keine Fotos gefunden","memories.noPhotosHint":"Keine Fotos in Immich für den Zeitraum dieser Reise gefunden.","memories.photosFound":"Fotos","memories.fromOthers":"von anderen","memories.sharePhotos":"Fotos teilen","memories.sharing":"Wird geteilt","memories.reviewTitle":"Deine Fotos prüfen","memories.reviewHint":"Klicke auf Fotos, um sie vom Teilen auszuschließen.","memories.shareCount":"{count} Fotos teilen","memories.immichUrl":"Immich Server URL","memories.immichApiKey":"API-Schlüssel","memories.testConnection":"Verbindung testen","memories.testFirst":"Verbindung zuerst testen","memories.connected":"Verbunden","memories.disconnected":"Nicht verbunden","memories.connectionSuccess":"Verbindung zu Immich hergestellt","memories.connectionError":"Verbindung zu Immich fehlgeschlagen","memories.saved":"Immich-Einstellungen gespeichert","memories.addPhotos":"Fotos hinzufügen","memories.linkAlbum":"Album verknüpfen","memories.selectAlbum":"Immich-Album auswählen","memories.noAlbums":"Keine Alben gefunden","memories.syncAlbum":"Album synchronisieren","memories.unlinkAlbum":"Album trennen","memories.photos":"Fotos","memories.selectPhotos":"Fotos aus Immich auswählen","memories.selectHint":"Tippe auf Fotos um sie auszuwählen.","memories.selected":"ausgewählt","memories.addSelected":"{count} Fotos hinzufügen","memories.alreadyAdded":"Hinzugefügt","memories.private":"Privat","memories.stopSharing":"Nicht mehr teilen","memories.oldest":"Älteste zuerst","memories.newest":"Neueste zuerst","memories.allLocations":"Alle Orte","memories.tripDates":"Trip-Zeitraum","memories.allPhotos":"Alle Fotos","memories.confirmShareTitle":"Mit Reisebegleitern teilen?","memories.confirmShareHint":"{count} Fotos werden für alle Mitglieder dieses Trips sichtbar. Du kannst einzelne Fotos nachträglich auf privat setzen.","memories.confirmShareButton":"Fotos teilen","collab.tabs.chat":"Chat","collab.tabs.notes":"Notizen","collab.tabs.polls":"Umfragen","collab.whatsNext.title":"Nächste","collab.whatsNext.today":"Heute","collab.whatsNext.tomorrow":"Morgen","collab.whatsNext.empty":"Keine anstehenden Aktivitäten","collab.whatsNext.until":"bis","collab.whatsNext.emptyHint":"Aktivitäten mit Uhrzeit erscheinen hier","collab.chat.send":"Senden","collab.chat.placeholder":"Nachricht eingeben...","collab.chat.empty":"Starte die Unterhaltung","collab.chat.emptyHint":"Nachrichten werden mit allen Reiseteilnehmern geteilt","collab.chat.emptyDesc":"Teile Ideen, Pläne und Updates mit deiner Reisegruppe","collab.chat.today":"Heute","collab.chat.yesterday":"Gestern","collab.chat.deletedMessage":"hat eine Nachricht gelöscht","collab.chat.reply":"Antworten","collab.chat.loadMore":"Ältere Nachrichten laden","collab.chat.justNow":"gerade eben","collab.chat.minutesAgo":"vor {n} Min.","collab.chat.hoursAgo":"vor {n} Std.","collab.notes.title":"Notizen","collab.notes.new":"Neue Notiz","collab.notes.empty":"Noch keine Notizen","collab.notes.emptyHint":"Halte Ideen und Pläne fest","collab.notes.all":"Alle","collab.notes.titlePlaceholder":"Notiztitel","collab.notes.contentPlaceholder":"Schreibe etwas...","collab.notes.categoryPlaceholder":"Kategorie","collab.notes.newCategory":"Neue Kategorie...","collab.notes.category":"Kategorie","collab.notes.noCategory":"Keine Kategorie","collab.notes.color":"Farbe","collab.notes.save":"Speichern","collab.notes.cancel":"Abbrechen","collab.notes.edit":"Bearbeiten","collab.notes.delete":"Löschen","collab.notes.pin":"Anheften","collab.notes.unpin":"Loslösen","collab.notes.daysAgo":"vor {n} T.","collab.notes.categorySettings":"Kategorien verwalten","collab.notes.create":"Erstellen","collab.notes.website":"Website","collab.notes.websitePlaceholder":"https://...","collab.notes.attachFiles":"Dateien anhängen","collab.notes.noCategoriesYet":"Noch keine Kategorien","collab.notes.emptyDesc":"Erstelle eine Notiz um loszulegen","collab.polls.title":"Umfragen","collab.polls.new":"Neue Umfrage","collab.polls.empty":"Noch keine Umfragen","collab.polls.emptyHint":"Frage die Gruppe und stimmt gemeinsam ab","collab.polls.question":"Frage","collab.polls.questionPlaceholder":"Was sollen wir machen?","collab.polls.addOption":"+ Option hinzufügen","collab.polls.optionPlaceholder":"Option {n}","collab.polls.create":"Umfrage erstellen","collab.polls.close":"Schließen","collab.polls.closed":"Geschlossen","collab.polls.votes":"{n} Stimmen","collab.polls.vote":"{n} Stimme","collab.polls.multipleChoice":"Mehrfachauswahl","collab.polls.multiChoice":"Mehrfachauswahl","collab.polls.deadline":"Frist","collab.polls.option":"Option","collab.polls.options":"Optionen","collab.polls.delete":"Löschen","collab.polls.closedSection":"Geschlossen","admin.tabs.permissions":"Berechtigungen","perm.title":"Berechtigungseinstellungen","perm.subtitle":"Steuern Sie, wer Aktionen in der Anwendung ausführen kann","perm.saved":"Berechtigungseinstellungen gespeichert","perm.resetDefaults":"Auf Standard zurücksetzen","perm.customized":"angepasst","perm.level.admin":"Nur Administrator","perm.level.tripOwner":"Reise-Eigentümer","perm.level.tripMember":"Reise-Mitglieder","perm.level.everybody":"Alle","perm.cat.trip":"Reiseverwaltung","perm.cat.members":"Mitgliederverwaltung","perm.cat.files":"Dateien","perm.cat.content":"Inhalte & Zeitplan","perm.cat.extras":"Budget, Packlisten & Zusammenarbeit","perm.action.trip_create":"Reisen erstellen","perm.action.trip_edit":"Reisedetails bearbeiten","perm.action.trip_delete":"Reisen löschen","perm.action.trip_archive":"Reisen archivieren / dearchivieren","perm.action.trip_cover_upload":"Titelbild hochladen","perm.action.member_manage":"Mitglieder hinzufügen / entfernen","perm.action.file_upload":"Dateien hochladen","perm.action.file_edit":"Datei-Metadaten bearbeiten","perm.action.file_delete":"Dateien löschen","perm.action.place_edit":"Orte hinzufügen / bearbeiten / löschen","perm.action.day_edit":"Tage, Notizen & Zuweisungen bearbeiten","perm.action.reservation_edit":"Reservierungen verwalten","perm.action.budget_edit":"Budget verwalten","perm.action.packing_edit":"Packlisten verwalten","perm.action.collab_edit":"Zusammenarbeit (Notizen, Umfragen, Chat)","perm.action.share_manage":"Freigabelinks verwalten","perm.actionHint.trip_create":"Wer kann neue Reisen erstellen","perm.actionHint.trip_edit":"Wer kann Reisename, Daten, Beschreibung und Währung ändern","perm.actionHint.trip_delete":"Wer kann eine Reise dauerhaft löschen","perm.actionHint.trip_archive":"Wer kann eine Reise archivieren oder dearchivieren","perm.actionHint.trip_cover_upload":"Wer kann das Titelbild hochladen oder ändern","perm.actionHint.member_manage":"Wer kann Reise-Mitglieder einladen oder entfernen","perm.actionHint.file_upload":"Wer kann Dateien zu einer Reise hochladen","perm.actionHint.file_edit":"Wer kann Dateibeschreibungen und Links bearbeiten","perm.actionHint.file_delete":"Wer kann Dateien in den Papierkorb verschieben oder dauerhaft löschen","perm.actionHint.place_edit":"Wer kann Orte hinzufügen, bearbeiten oder löschen","perm.actionHint.day_edit":"Wer kann Tage, Tagesnotizen und Ort-Zuweisungen bearbeiten","perm.actionHint.reservation_edit":"Wer kann Reservierungen erstellen, bearbeiten oder löschen","perm.actionHint.budget_edit":"Wer kann Budgetposten erstellen, bearbeiten oder löschen","perm.actionHint.packing_edit":"Wer kann Packstücke und Taschen verwalten","perm.actionHint.collab_edit":"Wer kann Notizen, Umfragen erstellen und Nachrichten senden","perm.actionHint.share_manage":"Wer kann öffentliche Freigabelinks erstellen oder löschen"},_j={"common.save":"Save","common.cancel":"Cancel","common.delete":"Delete","common.edit":"Edit","common.add":"Add","common.loading":"Loading...","common.import":"Import","common.error":"Error","common.back":"Back","common.all":"All","common.close":"Close","common.open":"Open","common.upload":"Upload","common.search":"Search","common.confirm":"Confirm","common.ok":"OK","common.yes":"Yes","common.no":"No","common.or":"or","common.none":"None","common.date":"Date","common.rename":"Rename","common.name":"Name","common.email":"Email","common.password":"Password","common.saving":"Saving...","common.saved":"Saved","trips.reminder":"Reminder","trips.reminderNone":"None","trips.reminderDay":"day","trips.reminderDays":"days","trips.reminderCustom":"Custom","trips.reminderDaysBefore":"days before departure","trips.reminderDisabledHint":"Trip reminders are disabled. Enable them in Admin > Settings > Notifications.","common.update":"Update","common.change":"Change","common.uploading":"Uploading…","common.backToPlanning":"Back to Planning","common.reset":"Reset","nav.trip":"Trip","nav.share":"Share","nav.settings":"Settings","nav.admin":"Admin","nav.logout":"Log out","nav.lightMode":"Light Mode","nav.darkMode":"Dark Mode","nav.autoMode":"Auto Mode","nav.administrator":"Administrator","dashboard.title":"My Trips","dashboard.subtitle.loading":"Loading trips...","dashboard.subtitle.trips":"{count} trips ({archived} archived)","dashboard.subtitle.empty":"Start your first trip","dashboard.subtitle.activeOne":"{count} active trip","dashboard.subtitle.activeMany":"{count} active trips","dashboard.subtitle.archivedSuffix":" · {count} archived","dashboard.newTrip":"New Trip","dashboard.gridView":"Grid view","dashboard.listView":"List view","dashboard.currency":"Currency","dashboard.timezone":"Timezones","dashboard.localTime":"Local","dashboard.timezoneCustomTitle":"Custom Timezone","dashboard.timezoneCustomLabelPlaceholder":"Label (optional)","dashboard.timezoneCustomTzPlaceholder":"e.g. America/New_York","dashboard.timezoneCustomAdd":"Add","dashboard.timezoneCustomErrorEmpty":"Enter a timezone identifier","dashboard.timezoneCustomErrorInvalid":"Invalid timezone. Use format like Europe/Berlin","dashboard.timezoneCustomErrorDuplicate":"Already added","dashboard.emptyTitle":"No trips yet","dashboard.emptyText":"Create your first trip and start planning!","dashboard.emptyButton":"Create First Trip","dashboard.nextTrip":"Next Trip","dashboard.shared":"Shared","dashboard.sharedBy":"Shared by {name}","dashboard.days":"Days","dashboard.places":"Places","dashboard.archive":"Archive","dashboard.restore":"Restore","dashboard.archived":"Archived","dashboard.status.ongoing":"Ongoing","dashboard.status.today":"Today","dashboard.status.tomorrow":"Tomorrow","dashboard.status.past":"Past","dashboard.status.daysLeft":"{count} days left","dashboard.toast.loadError":"Failed to load trips","dashboard.toast.created":"Trip created successfully!","dashboard.toast.createError":"Failed to create trip","dashboard.toast.updated":"Trip updated!","dashboard.toast.updateError":"Failed to update trip","dashboard.toast.deleted":"Trip deleted","dashboard.toast.deleteError":"Failed to delete trip","dashboard.toast.archived":"Trip archived","dashboard.toast.archiveError":"Failed to archive trip","dashboard.toast.restored":"Trip restored","dashboard.toast.restoreError":"Failed to restore trip","dashboard.confirm.delete":'Delete trip "{title}"? All places and plans will be permanently deleted.',"dashboard.editTrip":"Edit Trip","dashboard.createTrip":"Create New Trip","dashboard.tripTitle":"Title","dashboard.tripTitlePlaceholder":"e.g. Summer in Japan","dashboard.tripDescription":"Description","dashboard.tripDescriptionPlaceholder":"What is this trip about?","dashboard.startDate":"Start Date","dashboard.endDate":"End Date","dashboard.noDateHint":"No date set — 7 default days will be created. You can change this anytime.","dashboard.coverImage":"Cover Image","dashboard.addCoverImage":"Add cover image (or drag & drop)","dashboard.addMembers":"Travel buddies","dashboard.addMember":"Add member","dashboard.coverSaved":"Cover image saved","dashboard.coverUploadError":"Failed to upload","dashboard.coverRemoveError":"Failed to remove","dashboard.titleRequired":"Title is required","dashboard.endDateError":"End date must be after start date","settings.title":"Settings","settings.subtitle":"Configure your personal settings","settings.map":"Map","settings.mapTemplate":"Map Template","settings.mapTemplatePlaceholder.select":"Select template...","settings.mapDefaultHint":"Leave empty for OpenStreetMap (default)","settings.mapTemplatePlaceholder":"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png","settings.mapHint":"URL template for map tiles","settings.latitude":"Latitude","settings.longitude":"Longitude","settings.saveMap":"Save Map","settings.apiKeys":"API Keys","settings.mapsKey":"Google Maps API Key","settings.mapsKeyHint":"For place search. Requires Places API (New). Get at console.cloud.google.com","settings.weatherKey":"OpenWeatherMap API Key","settings.weatherKeyHint":"For weather data. Free at openweathermap.org/api","settings.keyPlaceholder":"Enter key...","settings.configured":"Configured","settings.saveKeys":"Save Keys","settings.display":"Display","settings.colorMode":"Color Mode","settings.light":"Light","settings.dark":"Dark","settings.auto":"Auto","settings.language":"Language","settings.temperature":"Temperature Unit","settings.timeFormat":"Time Format","settings.routeCalculation":"Route Calculation","settings.blurBookingCodes":"Blur Booking Codes","settings.notifications":"Notifications","settings.notifyTripInvite":"Trip invitations","settings.notifyBookingChange":"Booking changes","settings.notifyTripReminder":"Trip reminders","settings.notifyVacayInvite":"Vacay fusion invitations","settings.notifyPhotosShared":"Shared photos (Immich)","settings.notifyCollabMessage":"Chat messages (Collab)","settings.notifyPackingTagged":"Packing list: assignments","settings.notifyWebhook":"Webhook notifications","admin.notifications.title":"Notifications","admin.notifications.hint":"Choose one notification channel. Only one can be active at a time.","admin.notifications.none":"Disabled","admin.notifications.email":"Email (SMTP)","admin.notifications.webhook":"Webhook","admin.notifications.events":"Notification Events","admin.notifications.eventsHint":"Choose which events trigger notifications for all users.","admin.notifications.configureFirst":"Configure the SMTP or webhook settings below first, then enable events.","admin.notifications.save":"Save notification settings","admin.notifications.saved":"Notification settings saved","admin.notifications.testWebhook":"Send test webhook","admin.notifications.testWebhookSuccess":"Test webhook sent successfully","admin.notifications.testWebhookFailed":"Test webhook failed","admin.smtp.title":"Email & Notifications","admin.smtp.hint":"SMTP configuration for sending email notifications.","admin.smtp.testButton":"Send test email","admin.webhook.hint":"Send notifications to an external webhook (Discord, Slack, etc.).","admin.smtp.testSuccess":"Test email sent successfully","admin.smtp.testFailed":"Test email failed","settings.notificationsDisabled":"Notifications are not configured. Ask an admin to enable email or webhook notifications.","settings.notificationsActive":"Active channel","settings.notificationsManagedByAdmin":"Notification events are configured by your administrator.","dayplan.icsTooltip":"Export calendar (ICS)","share.linkTitle":"Public Link","share.linkHint":"Create a link anyone can use to view this trip without logging in. Read-only — no editing possible.","share.createLink":"Create link","share.deleteLink":"Delete link","share.createError":"Could not create link","common.copy":"Copy","common.copied":"Copied","share.permMap":"Map & Plan","share.permBookings":"Bookings","share.permPacking":"Packing","shared.expired":"Link expired or invalid","shared.expiredHint":"This shared trip link is no longer active.","shared.readOnly":"Read-only shared view","shared.tabPlan":"Plan","shared.tabBookings":"Bookings","shared.tabPacking":"Packing","shared.tabBudget":"Budget","shared.tabChat":"Chat","shared.days":"days","shared.places":"places","shared.other":"Other","shared.totalBudget":"Total Budget","shared.messages":"messages","shared.sharedVia":"Shared via","shared.confirmed":"Confirmed","shared.pending":"Pending","share.permBudget":"Budget","share.permCollab":"Chat","settings.on":"On","settings.off":"Off","settings.mcp.title":"MCP Configuration","settings.mcp.endpoint":"MCP Endpoint","settings.mcp.clientConfig":"Client Configuration","settings.mcp.clientConfigHint":"Replace with an API token from the list below. The path to npx may need to be adjusted for your system (e.g. C:\\PROGRA~1\\nodejs\\npx.cmd on Windows).","settings.mcp.copy":"Copy","settings.mcp.copied":"Copied!","settings.mcp.apiTokens":"API Tokens","settings.mcp.createToken":"Create New Token","settings.mcp.noTokens":"No tokens yet. Create one to connect MCP clients.","settings.mcp.tokenCreatedAt":"Created","settings.mcp.tokenUsedAt":"Used","settings.mcp.deleteTokenTitle":"Delete Token","settings.mcp.deleteTokenMessage":"This token will stop working immediately. Any MCP client using it will lose access.","settings.mcp.modal.createTitle":"Create API Token","settings.mcp.modal.tokenName":"Token Name","settings.mcp.modal.tokenNamePlaceholder":"e.g. Claude Desktop, Work laptop","settings.mcp.modal.creating":"Creating…","settings.mcp.modal.create":"Create Token","settings.mcp.modal.createdTitle":"Token Created","settings.mcp.modal.createdWarning":"This token will only be shown once. Copy and store it now — it cannot be recovered.","settings.mcp.modal.done":"Done","settings.mcp.toast.created":"Token created","settings.mcp.toast.createError":"Failed to create token","settings.mcp.toast.deleted":"Token deleted","settings.mcp.toast.deleteError":"Failed to delete token","settings.account":"Account","settings.username":"Username","settings.email":"Email","settings.role":"Role","settings.roleAdmin":"Administrator","settings.oidcLinked":"Linked with","settings.changePassword":"Change Password","settings.currentPassword":"Current password","settings.currentPasswordRequired":"Current password is required","settings.newPassword":"New password","settings.confirmPassword":"Confirm new password","settings.updatePassword":"Update password","settings.passwordRequired":"Please enter current and new password","settings.passwordTooShort":"Password must be at least 8 characters","settings.passwordMismatch":"Passwords do not match","settings.passwordWeak":"Password must contain uppercase, lowercase, a number, and a special character","settings.passwordChanged":"Password changed successfully","settings.mustChangePassword":"You must change your password before you can continue. Please set a new password below.","settings.deleteAccount":"Delete account","settings.deleteAccountTitle":"Delete your account?","settings.deleteAccountWarning":"Your account and all your trips, places, and files will be permanently deleted. This action cannot be undone.","settings.deleteAccountConfirm":"Delete permanently","settings.deleteBlockedTitle":"Deletion not possible","settings.deleteBlockedMessage":"You are the only administrator. Promote another user to admin before deleting your account.","settings.roleUser":"User","settings.saveProfile":"Save Profile","settings.toast.mapSaved":"Map settings saved","settings.toast.keysSaved":"API keys saved","settings.toast.displaySaved":"Display settings saved","settings.toast.profileSaved":"Profile saved","settings.uploadAvatar":"Upload Profile Picture","settings.removeAvatar":"Remove Profile Picture","settings.avatarUploaded":"Profile picture updated","settings.avatarRemoved":"Profile picture removed","settings.avatarError":"Upload failed","settings.mfa.title":"Two-factor authentication (2FA)","settings.mfa.description":"Adds a second step when you sign in with email and password. Use an authenticator app (Google Authenticator, Authy, etc.).","settings.mfa.requiredByPolicy":"Your administrator requires two-factor authentication. Set up an authenticator app below before continuing.","settings.mfa.backupTitle":"Backup codes","settings.mfa.backupDescription":"Use these one-time backup codes if you lose access to your authenticator app.","settings.mfa.backupWarning":"Save these codes now. Each code can only be used once.","settings.mfa.backupCopy":"Copy codes","settings.mfa.backupDownload":"Download TXT","settings.mfa.backupPrint":"Print / PDF","settings.mfa.backupCopied":"Backup codes copied","settings.mfa.enabled":"2FA is enabled on your account.","settings.mfa.disabled":"2FA is not enabled.","settings.mfa.setup":"Set up authenticator","settings.mfa.scanQr":"Scan this QR code with your app, or enter the secret manually.","settings.mfa.secretLabel":"Secret key (manual entry)","settings.mfa.codePlaceholder":"6-digit code","settings.mfa.enable":"Enable 2FA","settings.mfa.cancelSetup":"Cancel","settings.mfa.disableTitle":"Disable 2FA","settings.mfa.disableHint":"Enter your account password and a current code from your authenticator.","settings.mfa.disable":"Disable 2FA","settings.mfa.toastEnabled":"Two-factor authentication enabled","settings.mfa.toastDisabled":"Two-factor authentication disabled","settings.mfa.demoBlocked":"Not available in demo mode","login.error":"Login failed. Please check your credentials.","login.tagline":`Your Trips. +Alle aktuellen Daten werden überschrieben.`,"backup.confirm.delete":'Backup "{name}" löschen?',"backup.toast.loadError":"Fehler beim Laden der Backups","backup.toast.created":"Backup erfolgreich erstellt","backup.toast.createError":"Fehler beim Erstellen des Backups","backup.toast.restored":"Backup wiederhergestellt. Seite wird neu geladen…","backup.toast.restoreError":"Fehler beim Wiederherstellen","backup.toast.uploadError":"Fehler beim Hochladen","backup.toast.deleted":"Backup gelöscht","backup.toast.deleteError":"Fehler beim Löschen","backup.toast.downloadError":"Download fehlgeschlagen","backup.toast.settingsSaved":"Auto-Backup Einstellungen gespeichert","backup.toast.settingsError":"Fehler beim Speichern der Einstellungen","backup.auto.title":"Auto-Backup","backup.auto.subtitle":"Automatische Sicherung nach Zeitplan","backup.auto.enable":"Auto-Backup aktivieren","backup.auto.enableHint":"Backups werden automatisch nach dem gewählten Zeitplan erstellt","backup.auto.interval":"Intervall","backup.auto.hour":"Ausführung um","backup.auto.hourHint":"Lokale Serverzeit ({format}-Format)","backup.auto.dayOfWeek":"Wochentag","backup.auto.dayOfMonth":"Tag des Monats","backup.auto.dayOfMonthHint":"Auf 1–28 beschränkt, um mit allen Monaten kompatibel zu sein","backup.auto.scheduleSummary":"Zeitplan","backup.auto.summaryDaily":"Täglich um {hour}:00","backup.auto.summaryWeekly":"Jeden {day} um {hour}:00","backup.auto.summaryMonthly":"Am {day}. jedes Monats um {hour}:00","backup.auto.envLocked":"Docker","backup.auto.envLockedHint":"Auto-Backup wird über Docker-Umgebungsvariablen konfiguriert. Ändern Sie Ihre docker-compose.yml und starten Sie den Container neu.","backup.auto.copyEnv":"Docker-Umgebungsvariablen kopieren","backup.auto.envCopied":"Docker-Umgebungsvariablen in die Zwischenablage kopiert","backup.auto.keepLabel":"Alte Backups löschen nach","backup.dow.sunday":"So","backup.dow.monday":"Mo","backup.dow.tuesday":"Di","backup.dow.wednesday":"Mi","backup.dow.thursday":"Do","backup.dow.friday":"Fr","backup.dow.saturday":"Sa","backup.interval.hourly":"Stündlich","backup.interval.daily":"Täglich","backup.interval.weekly":"Wöchentlich","backup.interval.monthly":"Monatlich","backup.keep.1day":"1 Tag","backup.keep.3days":"3 Tage","backup.keep.7days":"7 Tage","backup.keep.14days":"14 Tage","backup.keep.30days":"30 Tage","backup.keep.forever":"Immer behalten","photos.allDays":"Alle Tage","photos.noPhotos":"Noch keine Fotos","photos.uploadHint":"Lade deine Reisefotos hoch","photos.clickToSelect":"oder klicken zum Auswählen","photos.linkPlace":"Ort verknüpfen","photos.noPlace":"Kein Ort","photos.uploadN":"{n} Foto(s) hochladen","backup.restoreConfirmTitle":"Backup wiederherstellen?","backup.restoreWarning":"Alle aktuellen Daten (Reisen, Orte, Benutzer, Uploads) werden unwiderruflich durch das Backup ersetzt. Dieser Vorgang kann nicht rückgängig gemacht werden.","backup.restoreTip":"Tipp: Erstelle zuerst ein Backup des aktuellen Stands, bevor du wiederherstellst.","backup.restoreConfirm":"Ja, wiederherstellen","pdf.travelPlan":"Reiseplan","pdf.planned":"Eingeplant","pdf.costLabel":"Kosten EUR","pdf.preview":"PDF Vorschau","pdf.saveAsPdf":"Als PDF speichern","planner.places":"Orte","planner.bookings":"Buchungen","planner.packingList":"Packliste","planner.documents":"Dokumente","planner.dayPlan":"Tagesplan","planner.reservations":"Reservierungen","planner.minTwoPlaces":"Mindestens 2 Orte mit Koordinaten benötigt","planner.noGeoPlaces":"Keine Orte mit Koordinaten vorhanden","planner.routeCalculated":"Route berechnet","planner.routeCalcFailed":"Route konnte nicht berechnet werden","planner.routeError":"Fehler bei der Routenberechnung","planner.routeOptimized":"Route optimiert","planner.reservationUpdated":"Reservierung aktualisiert","planner.reservationAdded":"Reservierung hinzugefügt","planner.confirmDeleteReservation":"Reservierung löschen?","planner.reservationDeleted":"Reservierung gelöscht","planner.days":"Tage","planner.allPlaces":"Alle Orte","planner.totalPlaces":"{n} Orte gesamt","planner.noDaysPlanned":"Noch keine Tage geplant","planner.editTrip":"Reise bearbeiten →","planner.placeOne":"1 Ort","planner.placeN":"{n} Orte","planner.addNote":"Notiz hinzufügen","planner.noEntries":"Keine Einträge für diesen Tag","planner.addPlace":"Ort/Aktivität hinzufügen","planner.addPlaceShort":"+ Ort/Aktivität hinzufügen","planner.resPending":"Reservierung ausstehend · ","planner.resConfirmed":"Reservierung bestätigt · ","planner.notePlaceholder":"Notiz…","planner.noteTimePlaceholder":"Zeit (optional)","planner.noteExamplePlaceholder":"z.B. S3 um 14:30 ab Hauptbahnhof, Fähre ab Pier 7, Mittagspause…","planner.totalCost":"Gesamtkosten","planner.searchPlaces":"Orte suchen…","planner.allCategories":"Alle Kategorien","planner.noPlacesFound":"Keine Orte gefunden","planner.addFirstPlace":"Ersten Ort hinzufügen","planner.noReservations":"Keine Reservierungen","planner.addFirstReservation":"Erste Reservierung hinzufügen","planner.new":"Neu","planner.addToDay":"+ Tag","planner.calculating":"Berechne…","planner.route":"Route","planner.optimize":"Optimieren","planner.openGoogleMaps":"In Google Maps öffnen","planner.selectDayHint":"Wähle einen Tag aus der linken Liste um den Tagesplan zu sehen","planner.noPlacesForDay":"Noch keine Orte für diesen Tag","planner.addPlacesLink":"Orte hinzufügen →","planner.minTotal":"Min. gesamt","planner.noReservation":"Keine Reservierung","planner.removeFromDay":"Aus Tag entfernen","planner.addToThisDay":"Zum Tag hinzufügen","planner.overview":"Gesamtübersicht","planner.noDays":"Noch keine Tage","planner.editTripToAddDays":"Reise bearbeiten um Tage hinzuzufügen","planner.dayCount":"{n} Tage","planner.clickToUnlock":"Klicken zum Entsperren","planner.keepPosition":"Position bei Routenoptimierung beibehalten","planner.dayDetails":"Tagesdetails","planner.dayN":"Tag {n}","stats.countries":"Länder","stats.cities":"Städte","stats.trips":"Reisen","stats.places":"Orte","stats.worldProgress":"Weltfortschritt","stats.visited":"besucht","stats.remaining":"verbleibend","stats.visitedCountries":"Besuchte Länder","day.precipProb":"Regenwahrscheinlichkeit","day.precipitation":"Niederschlag","day.wind":"Wind","day.sunrise":"Sonnenaufgang","day.sunset":"Sonnenuntergang","day.hourlyForecast":"Stündliche Vorhersage","day.climateHint":"Historische Durchschnittswerte — echte Vorhersage verfügbar innerhalb von 16 Tagen vor diesem Datum.","day.noWeather":"Keine Wetterdaten verfügbar. Füge einen Ort mit Koordinaten hinzu.","day.overview":"Tagesübersicht","day.accommodation":"Unterkunft","day.addAccommodation":"Unterkunft hinzufügen","day.hotelDayRange":"Auf Tage anwenden","day.noPlacesForHotel":"Füge zuerst Orte zu deiner Reise hinzu","day.allDays":"Alle","day.checkIn":"Check-in","day.checkOut":"Check-out","day.confirmation":"Bestätigung","day.editAccommodation":"Unterkunft bearbeiten","day.reservations":"Reservierungen","memories.title":"Fotos","memories.notConnected":"Immich nicht verbunden","memories.notConnectedHint":"Verbinde deine Immich-Instanz in den Einstellungen, um deine Reisefotos hier zu sehen.","memories.noDates":"Füge Daten zu deiner Reise hinzu, um Fotos zu laden.","memories.noPhotos":"Keine Fotos gefunden","memories.noPhotosHint":"Keine Fotos in Immich für den Zeitraum dieser Reise gefunden.","memories.photosFound":"Fotos","memories.fromOthers":"von anderen","memories.sharePhotos":"Fotos teilen","memories.sharing":"Wird geteilt","memories.reviewTitle":"Deine Fotos prüfen","memories.reviewHint":"Klicke auf Fotos, um sie vom Teilen auszuschließen.","memories.shareCount":"{count} Fotos teilen","memories.immichUrl":"Immich Server URL","memories.immichApiKey":"API-Schlüssel","memories.testConnection":"Verbindung testen","memories.testFirst":"Verbindung zuerst testen","memories.connected":"Verbunden","memories.disconnected":"Nicht verbunden","memories.connectionSuccess":"Verbindung zu Immich hergestellt","memories.connectionError":"Verbindung zu Immich fehlgeschlagen","memories.saved":"Immich-Einstellungen gespeichert","memories.addPhotos":"Fotos hinzufügen","memories.linkAlbum":"Album verknüpfen","memories.selectAlbum":"Immich-Album auswählen","memories.noAlbums":"Keine Alben gefunden","memories.syncAlbum":"Album synchronisieren","memories.unlinkAlbum":"Album trennen","memories.photos":"Fotos","memories.selectPhotos":"Fotos aus Immich auswählen","memories.selectHint":"Tippe auf Fotos um sie auszuwählen.","memories.selected":"ausgewählt","memories.addSelected":"{count} Fotos hinzufügen","memories.alreadyAdded":"Hinzugefügt","memories.private":"Privat","memories.stopSharing":"Nicht mehr teilen","memories.oldest":"Älteste zuerst","memories.newest":"Neueste zuerst","memories.allLocations":"Alle Orte","memories.tripDates":"Trip-Zeitraum","memories.allPhotos":"Alle Fotos","memories.confirmShareTitle":"Mit Reisebegleitern teilen?","memories.confirmShareHint":"{count} Fotos werden für alle Mitglieder dieses Trips sichtbar. Du kannst einzelne Fotos nachträglich auf privat setzen.","memories.confirmShareButton":"Fotos teilen","collab.tabs.chat":"Chat","collab.tabs.notes":"Notizen","collab.tabs.polls":"Umfragen","collab.whatsNext.title":"Nächste","collab.whatsNext.today":"Heute","collab.whatsNext.tomorrow":"Morgen","collab.whatsNext.empty":"Keine anstehenden Aktivitäten","collab.whatsNext.until":"bis","collab.whatsNext.emptyHint":"Aktivitäten mit Uhrzeit erscheinen hier","collab.chat.send":"Senden","collab.chat.placeholder":"Nachricht eingeben...","collab.chat.empty":"Starte die Unterhaltung","collab.chat.emptyHint":"Nachrichten werden mit allen Reiseteilnehmern geteilt","collab.chat.emptyDesc":"Teile Ideen, Pläne und Updates mit deiner Reisegruppe","collab.chat.today":"Heute","collab.chat.yesterday":"Gestern","collab.chat.deletedMessage":"hat eine Nachricht gelöscht","collab.chat.reply":"Antworten","collab.chat.loadMore":"Ältere Nachrichten laden","collab.chat.justNow":"gerade eben","collab.chat.minutesAgo":"vor {n} Min.","collab.chat.hoursAgo":"vor {n} Std.","collab.notes.title":"Notizen","collab.notes.new":"Neue Notiz","collab.notes.empty":"Noch keine Notizen","collab.notes.emptyHint":"Halte Ideen und Pläne fest","collab.notes.all":"Alle","collab.notes.titlePlaceholder":"Notiztitel","collab.notes.contentPlaceholder":"Schreibe etwas...","collab.notes.categoryPlaceholder":"Kategorie","collab.notes.newCategory":"Neue Kategorie...","collab.notes.category":"Kategorie","collab.notes.noCategory":"Keine Kategorie","collab.notes.color":"Farbe","collab.notes.save":"Speichern","collab.notes.cancel":"Abbrechen","collab.notes.edit":"Bearbeiten","collab.notes.delete":"Löschen","collab.notes.pin":"Anheften","collab.notes.unpin":"Loslösen","collab.notes.daysAgo":"vor {n} T.","collab.notes.categorySettings":"Kategorien verwalten","collab.notes.create":"Erstellen","collab.notes.website":"Website","collab.notes.websitePlaceholder":"https://...","collab.notes.attachFiles":"Dateien anhängen","collab.notes.noCategoriesYet":"Noch keine Kategorien","collab.notes.emptyDesc":"Erstelle eine Notiz um loszulegen","collab.polls.title":"Umfragen","collab.polls.new":"Neue Umfrage","collab.polls.empty":"Noch keine Umfragen","collab.polls.emptyHint":"Frage die Gruppe und stimmt gemeinsam ab","collab.polls.question":"Frage","collab.polls.questionPlaceholder":"Was sollen wir machen?","collab.polls.addOption":"+ Option hinzufügen","collab.polls.optionPlaceholder":"Option {n}","collab.polls.create":"Umfrage erstellen","collab.polls.close":"Schließen","collab.polls.closed":"Geschlossen","collab.polls.votes":"{n} Stimmen","collab.polls.vote":"{n} Stimme","collab.polls.multipleChoice":"Mehrfachauswahl","collab.polls.multiChoice":"Mehrfachauswahl","collab.polls.deadline":"Frist","collab.polls.option":"Option","collab.polls.options":"Optionen","collab.polls.delete":"Löschen","collab.polls.closedSection":"Geschlossen","admin.tabs.permissions":"Berechtigungen","perm.title":"Berechtigungseinstellungen","perm.subtitle":"Steuern Sie, wer Aktionen in der Anwendung ausführen kann","perm.saved":"Berechtigungseinstellungen gespeichert","perm.resetDefaults":"Auf Standard zurücksetzen","perm.customized":"angepasst","perm.level.admin":"Nur Administrator","perm.level.tripOwner":"Reise-Eigentümer","perm.level.tripMember":"Reise-Mitglieder","perm.level.everybody":"Alle","perm.cat.trip":"Reiseverwaltung","perm.cat.members":"Mitgliederverwaltung","perm.cat.files":"Dateien","perm.cat.content":"Inhalte & Zeitplan","perm.cat.extras":"Budget, Packlisten & Zusammenarbeit","perm.action.trip_create":"Reisen erstellen","perm.action.trip_edit":"Reisedetails bearbeiten","perm.action.trip_delete":"Reisen löschen","perm.action.trip_archive":"Reisen archivieren / dearchivieren","perm.action.trip_cover_upload":"Titelbild hochladen","perm.action.member_manage":"Mitglieder hinzufügen / entfernen","perm.action.file_upload":"Dateien hochladen","perm.action.file_edit":"Datei-Metadaten bearbeiten","perm.action.file_delete":"Dateien löschen","perm.action.place_edit":"Orte hinzufügen / bearbeiten / löschen","perm.action.day_edit":"Tage, Notizen & Zuweisungen bearbeiten","perm.action.reservation_edit":"Reservierungen verwalten","perm.action.budget_edit":"Budget verwalten","perm.action.packing_edit":"Packlisten verwalten","perm.action.collab_edit":"Zusammenarbeit (Notizen, Umfragen, Chat)","perm.action.share_manage":"Freigabelinks verwalten","perm.actionHint.trip_create":"Wer kann neue Reisen erstellen","perm.actionHint.trip_edit":"Wer kann Reisename, Daten, Beschreibung und Währung ändern","perm.actionHint.trip_delete":"Wer kann eine Reise dauerhaft löschen","perm.actionHint.trip_archive":"Wer kann eine Reise archivieren oder dearchivieren","perm.actionHint.trip_cover_upload":"Wer kann das Titelbild hochladen oder ändern","perm.actionHint.member_manage":"Wer kann Reise-Mitglieder einladen oder entfernen","perm.actionHint.file_upload":"Wer kann Dateien zu einer Reise hochladen","perm.actionHint.file_edit":"Wer kann Dateibeschreibungen und Links bearbeiten","perm.actionHint.file_delete":"Wer kann Dateien in den Papierkorb verschieben oder dauerhaft löschen","perm.actionHint.place_edit":"Wer kann Orte hinzufügen, bearbeiten oder löschen","perm.actionHint.day_edit":"Wer kann Tage, Tagesnotizen und Ort-Zuweisungen bearbeiten","perm.actionHint.reservation_edit":"Wer kann Reservierungen erstellen, bearbeiten oder löschen","perm.actionHint.budget_edit":"Wer kann Budgetposten erstellen, bearbeiten oder löschen","perm.actionHint.packing_edit":"Wer kann Packstücke und Taschen verwalten","perm.actionHint.collab_edit":"Wer kann Notizen, Umfragen erstellen und Nachrichten senden","perm.actionHint.share_manage":"Wer kann öffentliche Freigabelinks erstellen oder löschen"},Sj={"common.save":"Save","common.cancel":"Cancel","common.delete":"Delete","common.edit":"Edit","common.add":"Add","common.loading":"Loading...","common.import":"Import","common.error":"Error","common.back":"Back","common.all":"All","common.close":"Close","common.open":"Open","common.upload":"Upload","common.search":"Search","common.confirm":"Confirm","common.ok":"OK","common.yes":"Yes","common.no":"No","common.or":"or","common.none":"None","common.date":"Date","common.rename":"Rename","common.name":"Name","common.email":"Email","common.password":"Password","common.saving":"Saving...","common.saved":"Saved","trips.reminder":"Reminder","trips.reminderNone":"None","trips.reminderDay":"day","trips.reminderDays":"days","trips.reminderCustom":"Custom","trips.reminderDaysBefore":"days before departure","trips.reminderDisabledHint":"Trip reminders are disabled. Enable them in Admin > Settings > Notifications.","common.update":"Update","common.change":"Change","common.uploading":"Uploading…","common.backToPlanning":"Back to Planning","common.reset":"Reset","nav.trip":"Trip","nav.share":"Share","nav.settings":"Settings","nav.admin":"Admin","nav.logout":"Log out","nav.lightMode":"Light Mode","nav.darkMode":"Dark Mode","nav.autoMode":"Auto Mode","nav.administrator":"Administrator","dashboard.title":"My Trips","dashboard.subtitle.loading":"Loading trips...","dashboard.subtitle.trips":"{count} trips ({archived} archived)","dashboard.subtitle.empty":"Start your first trip","dashboard.subtitle.activeOne":"{count} active trip","dashboard.subtitle.activeMany":"{count} active trips","dashboard.subtitle.archivedSuffix":" · {count} archived","dashboard.newTrip":"New Trip","dashboard.gridView":"Grid view","dashboard.listView":"List view","dashboard.currency":"Currency","dashboard.timezone":"Timezones","dashboard.localTime":"Local","dashboard.timezoneCustomTitle":"Custom Timezone","dashboard.timezoneCustomLabelPlaceholder":"Label (optional)","dashboard.timezoneCustomTzPlaceholder":"e.g. America/New_York","dashboard.timezoneCustomAdd":"Add","dashboard.timezoneCustomErrorEmpty":"Enter a timezone identifier","dashboard.timezoneCustomErrorInvalid":"Invalid timezone. Use format like Europe/Berlin","dashboard.timezoneCustomErrorDuplicate":"Already added","dashboard.emptyTitle":"No trips yet","dashboard.emptyText":"Create your first trip and start planning!","dashboard.emptyButton":"Create First Trip","dashboard.nextTrip":"Next Trip","dashboard.shared":"Shared","dashboard.sharedBy":"Shared by {name}","dashboard.days":"Days","dashboard.places":"Places","dashboard.archive":"Archive","dashboard.restore":"Restore","dashboard.archived":"Archived","dashboard.status.ongoing":"Ongoing","dashboard.status.today":"Today","dashboard.status.tomorrow":"Tomorrow","dashboard.status.past":"Past","dashboard.status.daysLeft":"{count} days left","dashboard.toast.loadError":"Failed to load trips","dashboard.toast.created":"Trip created successfully!","dashboard.toast.createError":"Failed to create trip","dashboard.toast.updated":"Trip updated!","dashboard.toast.updateError":"Failed to update trip","dashboard.toast.deleted":"Trip deleted","dashboard.toast.deleteError":"Failed to delete trip","dashboard.toast.archived":"Trip archived","dashboard.toast.archiveError":"Failed to archive trip","dashboard.toast.restored":"Trip restored","dashboard.toast.restoreError":"Failed to restore trip","dashboard.confirm.delete":'Delete trip "{title}"? All places and plans will be permanently deleted.',"dashboard.editTrip":"Edit Trip","dashboard.createTrip":"Create New Trip","dashboard.tripTitle":"Title","dashboard.tripTitlePlaceholder":"e.g. Summer in Japan","dashboard.tripDescription":"Description","dashboard.tripDescriptionPlaceholder":"What is this trip about?","dashboard.startDate":"Start Date","dashboard.endDate":"End Date","dashboard.noDateHint":"No date set — 7 default days will be created. You can change this anytime.","dashboard.coverImage":"Cover Image","dashboard.addCoverImage":"Add cover image (or drag & drop)","dashboard.addMembers":"Travel buddies","dashboard.addMember":"Add member","dashboard.coverSaved":"Cover image saved","dashboard.coverUploadError":"Failed to upload","dashboard.coverRemoveError":"Failed to remove","dashboard.titleRequired":"Title is required","dashboard.endDateError":"End date must be after start date","settings.title":"Settings","settings.subtitle":"Configure your personal settings","settings.map":"Map","settings.mapTemplate":"Map Template","settings.mapTemplatePlaceholder.select":"Select template...","settings.mapDefaultHint":"Leave empty for OpenStreetMap (default)","settings.mapTemplatePlaceholder":"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png","settings.mapHint":"URL template for map tiles","settings.latitude":"Latitude","settings.longitude":"Longitude","settings.saveMap":"Save Map","settings.apiKeys":"API Keys","settings.mapsKey":"Google Maps API Key","settings.mapsKeyHint":"For place search. Requires Places API (New). Get at console.cloud.google.com","settings.weatherKey":"OpenWeatherMap API Key","settings.weatherKeyHint":"For weather data. Free at openweathermap.org/api","settings.keyPlaceholder":"Enter key...","settings.configured":"Configured","settings.saveKeys":"Save Keys","settings.display":"Display","settings.colorMode":"Color Mode","settings.light":"Light","settings.dark":"Dark","settings.auto":"Auto","settings.language":"Language","settings.temperature":"Temperature Unit","settings.timeFormat":"Time Format","settings.routeCalculation":"Route Calculation","settings.blurBookingCodes":"Blur Booking Codes","settings.notifications":"Notifications","settings.notifyTripInvite":"Trip invitations","settings.notifyBookingChange":"Booking changes","settings.notifyTripReminder":"Trip reminders","settings.notifyVacayInvite":"Vacay fusion invitations","settings.notifyPhotosShared":"Shared photos (Immich)","settings.notifyCollabMessage":"Chat messages (Collab)","settings.notifyPackingTagged":"Packing list: assignments","settings.notifyWebhook":"Webhook notifications","admin.notifications.title":"Notifications","admin.notifications.hint":"Choose one notification channel. Only one can be active at a time.","admin.notifications.none":"Disabled","admin.notifications.email":"Email (SMTP)","admin.notifications.webhook":"Webhook","admin.notifications.events":"Notification Events","admin.notifications.eventsHint":"Choose which events trigger notifications for all users.","admin.notifications.configureFirst":"Configure the SMTP or webhook settings below first, then enable events.","admin.notifications.save":"Save notification settings","admin.notifications.saved":"Notification settings saved","admin.notifications.testWebhook":"Send test webhook","admin.notifications.testWebhookSuccess":"Test webhook sent successfully","admin.notifications.testWebhookFailed":"Test webhook failed","admin.smtp.title":"Email & Notifications","admin.smtp.hint":"SMTP configuration for sending email notifications.","admin.smtp.testButton":"Send test email","admin.webhook.hint":"Send notifications to an external webhook (Discord, Slack, etc.).","admin.smtp.testSuccess":"Test email sent successfully","admin.smtp.testFailed":"Test email failed","settings.notificationsDisabled":"Notifications are not configured. Ask an admin to enable email or webhook notifications.","settings.notificationsActive":"Active channel","settings.notificationsManagedByAdmin":"Notification events are configured by your administrator.","dayplan.icsTooltip":"Export calendar (ICS)","share.linkTitle":"Public Link","share.linkHint":"Create a link anyone can use to view this trip without logging in. Read-only — no editing possible.","share.createLink":"Create link","share.deleteLink":"Delete link","share.createError":"Could not create link","common.copy":"Copy","common.copied":"Copied","share.permMap":"Map & Plan","share.permBookings":"Bookings","share.permPacking":"Packing","shared.expired":"Link expired or invalid","shared.expiredHint":"This shared trip link is no longer active.","shared.readOnly":"Read-only shared view","shared.tabPlan":"Plan","shared.tabBookings":"Bookings","shared.tabPacking":"Packing","shared.tabBudget":"Budget","shared.tabChat":"Chat","shared.days":"days","shared.places":"places","shared.other":"Other","shared.totalBudget":"Total Budget","shared.messages":"messages","shared.sharedVia":"Shared via","shared.confirmed":"Confirmed","shared.pending":"Pending","share.permBudget":"Budget","share.permCollab":"Chat","settings.on":"On","settings.off":"Off","settings.mcp.title":"MCP Configuration","settings.mcp.endpoint":"MCP Endpoint","settings.mcp.clientConfig":"Client Configuration","settings.mcp.clientConfigHint":"Replace with an API token from the list below. The path to npx may need to be adjusted for your system (e.g. C:\\PROGRA~1\\nodejs\\npx.cmd on Windows).","settings.mcp.copy":"Copy","settings.mcp.copied":"Copied!","settings.mcp.apiTokens":"API Tokens","settings.mcp.createToken":"Create New Token","settings.mcp.noTokens":"No tokens yet. Create one to connect MCP clients.","settings.mcp.tokenCreatedAt":"Created","settings.mcp.tokenUsedAt":"Used","settings.mcp.deleteTokenTitle":"Delete Token","settings.mcp.deleteTokenMessage":"This token will stop working immediately. Any MCP client using it will lose access.","settings.mcp.modal.createTitle":"Create API Token","settings.mcp.modal.tokenName":"Token Name","settings.mcp.modal.tokenNamePlaceholder":"e.g. Claude Desktop, Work laptop","settings.mcp.modal.creating":"Creating…","settings.mcp.modal.create":"Create Token","settings.mcp.modal.createdTitle":"Token Created","settings.mcp.modal.createdWarning":"This token will only be shown once. Copy and store it now — it cannot be recovered.","settings.mcp.modal.done":"Done","settings.mcp.toast.created":"Token created","settings.mcp.toast.createError":"Failed to create token","settings.mcp.toast.deleted":"Token deleted","settings.mcp.toast.deleteError":"Failed to delete token","settings.account":"Account","settings.username":"Username","settings.email":"Email","settings.role":"Role","settings.roleAdmin":"Administrator","settings.oidcLinked":"Linked with","settings.changePassword":"Change Password","settings.currentPassword":"Current password","settings.currentPasswordRequired":"Current password is required","settings.newPassword":"New password","settings.confirmPassword":"Confirm new password","settings.updatePassword":"Update password","settings.passwordRequired":"Please enter current and new password","settings.passwordTooShort":"Password must be at least 8 characters","settings.passwordMismatch":"Passwords do not match","settings.passwordWeak":"Password must contain uppercase, lowercase, a number, and a special character","settings.passwordChanged":"Password changed successfully","settings.mustChangePassword":"You must change your password before you can continue. Please set a new password below.","settings.deleteAccount":"Delete account","settings.deleteAccountTitle":"Delete your account?","settings.deleteAccountWarning":"Your account and all your trips, places, and files will be permanently deleted. This action cannot be undone.","settings.deleteAccountConfirm":"Delete permanently","settings.deleteBlockedTitle":"Deletion not possible","settings.deleteBlockedMessage":"You are the only administrator. Promote another user to admin before deleting your account.","settings.roleUser":"User","settings.saveProfile":"Save Profile","settings.toast.mapSaved":"Map settings saved","settings.toast.keysSaved":"API keys saved","settings.toast.displaySaved":"Display settings saved","settings.toast.profileSaved":"Profile saved","settings.uploadAvatar":"Upload Profile Picture","settings.removeAvatar":"Remove Profile Picture","settings.avatarUploaded":"Profile picture updated","settings.avatarRemoved":"Profile picture removed","settings.avatarError":"Upload failed","settings.mfa.title":"Two-factor authentication (2FA)","settings.mfa.description":"Adds a second step when you sign in with email and password. Use an authenticator app (Google Authenticator, Authy, etc.).","settings.mfa.requiredByPolicy":"Your administrator requires two-factor authentication. Set up an authenticator app below before continuing.","settings.mfa.backupTitle":"Backup codes","settings.mfa.backupDescription":"Use these one-time backup codes if you lose access to your authenticator app.","settings.mfa.backupWarning":"Save these codes now. Each code can only be used once.","settings.mfa.backupCopy":"Copy codes","settings.mfa.backupDownload":"Download TXT","settings.mfa.backupPrint":"Print / PDF","settings.mfa.backupCopied":"Backup codes copied","settings.mfa.enabled":"2FA is enabled on your account.","settings.mfa.disabled":"2FA is not enabled.","settings.mfa.setup":"Set up authenticator","settings.mfa.scanQr":"Scan this QR code with your app, or enter the secret manually.","settings.mfa.secretLabel":"Secret key (manual entry)","settings.mfa.codePlaceholder":"6-digit code","settings.mfa.enable":"Enable 2FA","settings.mfa.cancelSetup":"Cancel","settings.mfa.disableTitle":"Disable 2FA","settings.mfa.disableHint":"Enter your account password and a current code from your authenticator.","settings.mfa.disable":"Disable 2FA","settings.mfa.toastEnabled":"Two-factor authentication enabled","settings.mfa.toastDisabled":"Two-factor authentication disabled","settings.mfa.demoBlocked":"Not available in demo mode","login.error":"Login failed. Please check your credentials.","login.tagline":`Your Trips. Your Plan.`,"login.description":"Plan trips collaboratively with interactive maps, budgets, and real-time sync.","login.features.maps":"Interactive Maps","login.features.mapsDesc":"Google Places, routes & clustering","login.features.realtime":"Real-Time Sync","login.features.realtimeDesc":"Plan together via WebSocket","login.features.budget":"Budget Tracking","login.features.budgetDesc":"Categories, charts & per-person costs","login.features.collab":"Collaboration","login.features.collabDesc":"Multi-user with shared trips","login.features.packing":"Packing Lists","login.features.packingDesc":"Categories, progress & suggestions","login.features.bookings":"Reservations","login.features.bookingsDesc":"Flights, hotels, restaurants & more","login.features.files":"Documents","login.features.filesDesc":"Upload & manage documents","login.features.routes":"Smart Routes","login.features.routesDesc":"Auto-optimize & Google Maps export","login.selfHosted":"Self-hosted · Open Source · Your data stays yours","login.title":"Sign In","login.subtitle":"Welcome back","login.signingIn":"Signing in…","login.signIn":"Sign In","login.createAdmin":"Create Admin Account","login.createAdminHint":"Set up the first admin account for TREK.","login.setNewPassword":"Set New Password","login.setNewPasswordHint":"You must change your password before continuing.","login.createAccount":"Create Account","login.createAccountHint":"Register a new account.","login.creating":"Creating…","login.noAccount":"Don't have an account?","login.hasAccount":"Already have an account?","login.register":"Register","login.emailPlaceholder":"your@email.com","login.username":"Username","login.oidc.registrationDisabled":"Registration is disabled. Contact your administrator.","login.oidc.noEmail":"No email received from provider.","login.oidc.tokenFailed":"Authentication failed.","login.oidc.invalidState":"Invalid session. Please try again.","login.demoFailed":"Demo login failed","login.oidcSignIn":"Sign in with {name}","login.oidcOnly":"Password authentication is disabled. Please sign in using your SSO provider.","login.demoHint":"Try the demo — no registration needed","login.mfaTitle":"Two-factor authentication","login.mfaSubtitle":"Enter the 6-digit code from your authenticator app.","login.mfaCodeLabel":"Verification code","login.mfaCodeRequired":"Enter the code from your authenticator app.","login.mfaHint":"Open Google Authenticator, Authy, or another TOTP app.","login.mfaBack":"← Back to sign in","login.mfaVerify":"Verify","register.passwordMismatch":"Passwords do not match","register.passwordTooShort":"Password must be at least 8 characters","register.failed":"Registration failed","register.getStarted":"Get Started","register.subtitle":"Create an account and start planning your dream trips.","register.feature1":"Unlimited trip plans","register.feature2":"Interactive map view","register.feature3":"Manage places and categories","register.feature4":"Track reservations","register.feature5":"Create packing lists","register.feature6":"Store photos and files","register.createAccount":"Create Account","register.startPlanning":"Start your trip planning","register.minChars":"Min. 6 characters","register.confirmPassword":"Confirm Password","register.repeatPassword":"Repeat password","register.registering":"Registering...","register.register":"Register","register.hasAccount":"Already have an account?","register.signIn":"Sign In","admin.title":"Administration","admin.subtitle":"User management and system settings","admin.tabs.users":"Users","admin.tabs.categories":"Categories","admin.tabs.backup":"Backup","admin.tabs.audit":"Audit log","admin.stats.users":"Users","admin.stats.trips":"Trips","admin.stats.places":"Places","admin.stats.photos":"Photos","admin.stats.files":"Files","admin.table.user":"User","admin.table.email":"Email","admin.table.role":"Role","admin.table.created":"Created","admin.table.lastLogin":"Last Login","admin.table.actions":"Actions","admin.you":"(You)","admin.editUser":"Edit User","admin.newPassword":"New Password","admin.newPasswordHint":"Leave empty to keep current password","admin.deleteUser":'Delete user "{name}"? All trips will be permanently deleted.',"admin.deleteUserTitle":"Delete user","admin.newPasswordPlaceholder":"Enter new password…","admin.toast.loadError":"Failed to load admin data","admin.toast.userUpdated":"User updated","admin.toast.updateError":"Failed to update","admin.toast.userDeleted":"User deleted","admin.toast.deleteError":"Failed to delete","admin.toast.cannotDeleteSelf":"Cannot delete your own account","admin.toast.userCreated":"User created","admin.toast.createError":"Failed to create user","admin.toast.fieldsRequired":"Username, email and password are required","admin.createUser":"Create User","admin.invite.title":"Invite Links","admin.invite.subtitle":"Create one-time registration links","admin.invite.create":"Create Link","admin.invite.createAndCopy":"Create & Copy","admin.invite.empty":"No invite links created yet","admin.invite.maxUses":"Max. Uses","admin.invite.expiry":"Expires after","admin.invite.uses":"used","admin.invite.expiresAt":"expires","admin.invite.createdBy":"by","admin.invite.active":"Active","admin.invite.expired":"Expired","admin.invite.usedUp":"Used up","admin.invite.copied":"Invite link copied to clipboard","admin.invite.copyLink":"Copy link","admin.invite.deleted":"Invite link deleted","admin.invite.createError":"Failed to create invite link","admin.invite.deleteError":"Failed to delete invite link","admin.tabs.settings":"Settings","admin.allowRegistration":"Allow Registration","admin.allowRegistrationHint":"New users can register themselves","admin.requireMfa":"Require two-factor authentication (2FA)","admin.requireMfaHint":"Users without 2FA must complete setup in Settings before using the app.","admin.apiKeys":"API Keys","admin.apiKeysHint":"Optional. Enables extended place data like photos and weather.","admin.mapsKey":"Google Maps API Key","admin.mapsKeyHint":"Required for place search. Get at console.cloud.google.com","admin.mapsKeyHintLong":"Without an API key, OpenStreetMap is used for place search. With a Google API key, photos, ratings, and opening hours can be loaded as well. Get one at console.cloud.google.com.","admin.recommended":"Recommended","admin.weatherKey":"OpenWeatherMap API Key","admin.weatherKeyHint":"For weather data. Free at openweathermap.org","admin.validateKey":"Test","admin.keyValid":"Connected","admin.keyInvalid":"Invalid","admin.keySaved":"API keys saved","admin.oidcTitle":"Single Sign-On (OIDC)","admin.oidcSubtitle":"Allow login via external providers like Google, Apple, Authentik or Keycloak.","admin.oidcDisplayName":"Display Name","admin.oidcIssuer":"Issuer URL","admin.oidcIssuerHint":"The OpenID Connect Issuer URL of the provider. e.g. https://accounts.google.com","admin.oidcSaved":"OIDC configuration saved","admin.oidcOnlyMode":"Disable password authentication","admin.oidcOnlyModeHint":"When enabled, only SSO login is permitted. Password-based login and registration are blocked.","admin.fileTypes":"Allowed File Types","admin.fileTypesHint":"Configure which file types users can upload.","admin.fileTypesFormat":"Comma-separated extensions (e.g. jpg,png,pdf,doc). Use * to allow all types.","admin.fileTypesSaved":"File type settings saved","admin.bagTracking.title":"Bag Tracking","admin.bagTracking.subtitle":"Enable weight and bag assignment for packing items","admin.tabs.config":"Configuration","admin.tabs.templates":"Packing Templates","admin.packingTemplates.title":"Packing Templates","admin.packingTemplates.subtitle":"Create reusable packing lists for your trips","admin.packingTemplates.create":"New Template","admin.packingTemplates.namePlaceholder":"Template name (e.g. Beach Holiday)","admin.packingTemplates.empty":"No templates created yet","admin.packingTemplates.items":"items","admin.packingTemplates.categories":"categories","admin.packingTemplates.itemName":"Item name","admin.packingTemplates.itemCategory":"Category","admin.packingTemplates.categoryName":"Category name (e.g. Clothing)","admin.packingTemplates.addCategory":"Add category","admin.packingTemplates.created":"Template created","admin.packingTemplates.deleted":"Template deleted","admin.packingTemplates.loadError":"Failed to load templates","admin.packingTemplates.createError":"Failed to create template","admin.packingTemplates.deleteError":"Failed to delete template","admin.packingTemplates.saveError":"Failed to save","admin.tabs.addons":"Addons","admin.addons.title":"Addons","admin.addons.subtitle":"Enable or disable features to customize your TREK experience.","admin.addons.catalog.packing.name":"Packing","admin.addons.catalog.packing.description":"Checklists to prepare your luggage for each trip","admin.addons.catalog.budget.name":"Budget","admin.addons.catalog.budget.description":"Track expenses and plan your trip budget","admin.addons.catalog.documents.name":"Documents","admin.addons.catalog.documents.description":"Store and manage travel documents","admin.addons.catalog.vacay.name":"Vacay","admin.addons.catalog.vacay.description":"Personal vacation planner with calendar view","admin.addons.catalog.atlas.name":"Atlas","admin.addons.catalog.atlas.description":"World map with visited countries and travel stats","admin.addons.catalog.collab.name":"Collab","admin.addons.catalog.collab.description":"Real-time notes, polls, and chat for trip planning","admin.addons.catalog.memories.name":"Photos (Immich)","admin.addons.catalog.memories.description":"Share trip photos via your Immich instance","admin.addons.catalog.mcp.name":"MCP","admin.addons.catalog.mcp.description":"Model Context Protocol for AI assistant integration","admin.addons.subtitleBefore":"Enable or disable features to customize your ","admin.addons.subtitleAfter":" experience.","admin.addons.enabled":"Enabled","admin.addons.disabled":"Disabled","admin.addons.type.trip":"Trip","admin.addons.type.global":"Global","admin.addons.type.integration":"Integration","admin.addons.tripHint":"Available as a tab within each trip","admin.addons.globalHint":"Available as a standalone section in the main navigation","admin.addons.integrationHint":"Backend services and API integrations with no dedicated page","admin.addons.toast.updated":"Addon updated","admin.addons.toast.error":"Failed to update addon","admin.addons.noAddons":"No addons available","admin.weather.title":"Weather Data","admin.weather.badge":"Since March 24, 2026","admin.weather.description":"TREK uses Open-Meteo as its weather data source. Open-Meteo is a free, open-source weather service — no API key required.","admin.weather.forecast":"16-day forecast","admin.weather.forecastDesc":"Previously 5 days (OpenWeatherMap)","admin.weather.climate":"Historical climate data","admin.weather.climateDesc":"Averages from the last 85 years for days beyond the 16-day forecast","admin.weather.requests":"10,000 requests / day","admin.weather.requestsDesc":"Free, no API key required","admin.weather.locationHint":"Weather is based on the first place with coordinates in each day. If no place is assigned to a day, any place from the place list is used as a reference.","admin.tabs.mcpTokens":"MCP Tokens","admin.mcpTokens.title":"MCP Tokens","admin.mcpTokens.subtitle":"Manage API tokens across all users","admin.mcpTokens.owner":"Owner","admin.mcpTokens.tokenName":"Token Name","admin.mcpTokens.created":"Created","admin.mcpTokens.lastUsed":"Last Used","admin.mcpTokens.never":"Never","admin.mcpTokens.empty":"No MCP tokens have been created yet","admin.mcpTokens.deleteTitle":"Delete Token","admin.mcpTokens.deleteMessage":"This will revoke the token immediately. The user will lose MCP access through this token.","admin.mcpTokens.deleteSuccess":"Token deleted","admin.mcpTokens.deleteError":"Failed to delete token","admin.mcpTokens.loadError":"Failed to load tokens","admin.tabs.github":"GitHub","admin.audit.subtitle":"Security-sensitive and administration events (backups, users, MFA, settings).","admin.audit.empty":"No audit entries yet.","admin.audit.refresh":"Refresh","admin.audit.loadMore":"Load more","admin.audit.showing":"{count} loaded · {total} total","admin.audit.col.time":"Time","admin.audit.col.user":"User","admin.audit.col.action":"Action","admin.audit.col.resource":"Resource","admin.audit.col.ip":"IP","admin.audit.col.details":"Details","admin.github.title":"Release History","admin.github.subtitle":"Latest updates from {repo}","admin.github.latest":"Latest","admin.github.prerelease":"Pre-release","admin.github.showDetails":"Show details","admin.github.hideDetails":"Hide details","admin.github.loadMore":"Load more","admin.github.loading":"Loading...","admin.github.error":"Failed to load releases","admin.github.by":"by","admin.github.support":"Helps me keep building TREK","admin.update.available":"Update available","admin.update.text":"TREK {version} is available. You are running {current}.","admin.update.button":"View on GitHub","admin.update.install":"Install Update","admin.update.confirmTitle":"Install Update?","admin.update.confirmText":"TREK will be updated from {current} to {version}. The server will restart automatically afterwards.","admin.update.dataInfo":"All your data (trips, users, API keys, uploads, Vacay, Atlas, budgets) will be preserved.","admin.update.warning":"The app will be briefly unavailable during the restart.","admin.update.confirm":"Update Now","admin.update.installing":"Updating…","admin.update.success":"Update installed! Server is restarting…","admin.update.failed":"Update failed","admin.update.backupHint":"We recommend creating a backup before updating.","admin.update.backupLink":"Go to Backup","admin.update.howTo":"How to Update","admin.update.dockerText":"Your TREK instance runs in Docker. To update to {version}, run the following commands on your server:","admin.update.reloadHint":"Please reload the page in a few seconds.","vacay.subtitle":"Plan and manage vacation days","vacay.settings":"Settings","vacay.year":"Year","vacay.addYear":"Add year","vacay.removeYear":"Remove year","vacay.removeYearConfirm":"Remove {year}?","vacay.removeYearHint":"All vacation entries and company holidays for this year will be permanently deleted.","vacay.remove":"Remove","vacay.persons":"Persons","vacay.noPersons":"No persons added","vacay.addPerson":"Add Person","vacay.editPerson":"Edit Person","vacay.removePerson":"Remove Person","vacay.removePersonConfirm":"Remove {name}?","vacay.removePersonHint":"All vacation entries for this person will be permanently deleted.","vacay.personName":"Name","vacay.personNamePlaceholder":"Enter name","vacay.color":"Color","vacay.add":"Add","vacay.legend":"Legend","vacay.publicHoliday":"Public Holiday","vacay.companyHoliday":"Company Holiday","vacay.weekend":"Weekend","vacay.modeVacation":"Vacation","vacay.modeCompany":"Company Holiday","vacay.entitlement":"Entitlement","vacay.entitlementDays":"Days","vacay.used":"Used","vacay.remaining":"Left","vacay.carriedOver":"from {year}","vacay.blockWeekends":"Block Weekends","vacay.blockWeekendsHint":"Prevent vacation entries on weekend days","vacay.weekendDays":"Weekend days","vacay.mon":"Mon","vacay.tue":"Tue","vacay.wed":"Wed","vacay.thu":"Thu","vacay.fri":"Fri","vacay.sat":"Sat","vacay.sun":"Sun","vacay.publicHolidays":"Public Holidays","vacay.publicHolidaysHint":"Mark public holidays in the calendar","vacay.selectCountry":"Select country","vacay.selectRegion":"Select region (optional)","vacay.addCalendar":"Add calendar","vacay.calendarLabel":"Label (optional)","vacay.calendarColor":"Color","vacay.noCalendars":"No holiday calendars added yet","vacay.companyHolidays":"Company Holidays","vacay.companyHolidaysHint":"Allow marking company-wide holiday days","vacay.companyHolidaysNoDeduct":"Company holidays do not count towards vacation days.","vacay.carryOver":"Carry Over","vacay.carryOverHint":"Automatically carry remaining vacation days into the next year","vacay.sharing":"Sharing","vacay.sharingHint":"Share your vacation plan with other TREK users","vacay.owner":"Owner","vacay.shareEmailPlaceholder":"Email of TREK user","vacay.shareSuccess":"Plan shared successfully","vacay.shareError":"Could not share plan","vacay.dissolve":"Dissolve Fusion","vacay.dissolveHint":"Separate calendars again. Your entries will be kept.","vacay.dissolveAction":"Dissolve","vacay.dissolved":"Calendar separated","vacay.fusedWith":"Fused with","vacay.you":"you","vacay.noData":"No data","vacay.changeColor":"Change color","vacay.inviteUser":"Invite User","vacay.inviteHint":"Invite another TREK user to share a combined vacation calendar.","vacay.selectUser":"Select user","vacay.sendInvite":"Send Invite","vacay.inviteSent":"Invite sent","vacay.inviteError":"Could not send invite","vacay.pending":"pending","vacay.noUsersAvailable":"No users available","vacay.accept":"Accept","vacay.decline":"Decline","vacay.acceptFusion":"Accept & Fuse","vacay.inviteTitle":"Fusion Request","vacay.inviteWantsToFuse":"wants to share a vacation calendar with you.","vacay.fuseInfo1":"Both of you will see all vacation entries in one shared calendar.","vacay.fuseInfo2":"Both parties can create and edit entries for each other.","vacay.fuseInfo3":"Both parties can delete entries and change vacation entitlements.","vacay.fuseInfo4":"Settings like public holidays and company holidays are shared.","vacay.fuseInfo5":"The fusion can be dissolved at any time by either party. Your entries will be preserved.","nav.myTrips":"My Trips","atlas.subtitle":"Your travel footprint around the world","atlas.countries":"Countries","atlas.trips":"Trips","atlas.places":"Places","atlas.unmark":"Remove","atlas.confirmMark":"Mark this country as visited?","atlas.confirmUnmark":"Remove this country from your visited list?","atlas.markVisited":"Mark as visited","atlas.markVisitedHint":"Add this country to your visited list","atlas.addToBucket":"Add to bucket list","atlas.addPoi":"Add place","atlas.searchCountry":"Search a country...","atlas.bucketNamePlaceholder":"Name (country, city, place...)","atlas.month":"Month","atlas.year":"Year","atlas.addToBucketHint":"Save as a place you want to visit","atlas.bucketWhen":"When do you plan to visit?","atlas.statsTab":"Stats","atlas.bucketTab":"Bucket List","atlas.addBucket":"Add to bucket list","atlas.bucketNotesPlaceholder":"Notes (optional)","atlas.bucketEmpty":"Your bucket list is empty","atlas.bucketEmptyHint":"Add places you dream of visiting","atlas.days":"Days","atlas.visitedCountries":"Visited Countries","atlas.cities":"Cities","atlas.noData":"No travel data yet","atlas.noDataHint":"Create a trip and add places to see your world map","atlas.lastTrip":"Last trip","atlas.nextTrip":"Next trip","atlas.daysLeft":"days left","atlas.streak":"Streak","atlas.years":"years","atlas.yearInRow":"year in a row","atlas.yearsInRow":"years in a row","atlas.tripIn":"trip in","atlas.tripsIn":"trips in","atlas.since":"since","atlas.europe":"Europe","atlas.asia":"Asia","atlas.northAmerica":"N. America","atlas.southAmerica":"S. America","atlas.africa":"Africa","atlas.oceania":"Oceania","atlas.other":"Other","atlas.firstVisit":"First trip","atlas.lastVisitLabel":"Last trip","atlas.tripSingular":"Trip","atlas.tripPlural":"Trips","atlas.placeVisited":"Place visited","atlas.placesVisited":"Places visited","trip.tabs.plan":"Plan","trip.tabs.reservations":"Bookings","trip.tabs.reservationsShort":"Book","trip.tabs.packing":"Packing List","trip.tabs.packingShort":"Packing","trip.tabs.budget":"Budget","trip.tabs.files":"Files","trip.loading":"Loading trip...","trip.loadingPhotos":"Loading place photos...","trip.mobilePlan":"Plan","trip.mobilePlaces":"Places","trip.toast.placeUpdated":"Place updated","trip.toast.placeAdded":"Place added","trip.toast.placeDeleted":"Place deleted","trip.toast.selectDay":"Please select a day first","trip.toast.assignedToDay":"Place assigned to day","trip.toast.reorderError":"Failed to reorder","trip.toast.reservationUpdated":"Reservation updated","trip.toast.reservationAdded":"Reservation added","trip.toast.deleted":"Deleted","trip.confirm.deletePlace":"Are you sure you want to delete this place?","dayplan.emptyDay":"No places planned for this day","dayplan.cannotReorderTransport":"Bookings with a fixed time cannot be reordered","dayplan.confirmRemoveTimeTitle":"Remove time?","dayplan.confirmRemoveTimeBody":"This place has a fixed time ({time}). Moving it will remove the time and allow free sorting.","dayplan.confirmRemoveTimeAction":"Remove time & move","dayplan.cannotDropOnTimed":"Items cannot be placed between time-bound entries","dayplan.cannotBreakChronology":"This would break the chronological order of timed items and bookings","dayplan.addNote":"Add Note","dayplan.editNote":"Edit Note","dayplan.noteAdd":"Add Note","dayplan.noteEdit":"Edit Note","dayplan.noteTitle":"Note","dayplan.noteSubtitle":"Daily Note","dayplan.totalCost":"Total Cost","dayplan.days":"Days","dayplan.dayN":"Day {n}","dayplan.calculating":"Calculating...","dayplan.route":"Route","dayplan.optimize":"Optimize","dayplan.optimized":"Route optimized","dayplan.routeError":"Failed to calculate route","dayplan.toast.needTwoPlaces":"At least two places needed for route optimization","dayplan.toast.routeOptimized":"Route optimized","dayplan.toast.noGeoPlaces":"No places with coordinates found for route calculation","dayplan.confirmed":"Confirmed","dayplan.pendingRes":"Pending","dayplan.pdf":"PDF","dayplan.pdfTooltip":"Export day plan as PDF","dayplan.pdfError":"Failed to export PDF","places.addPlace":"Add Place/Activity","places.importGpx":"GPX","places.gpxImported":"{count} places imported from GPX","places.urlResolved":"Place imported from URL","places.gpxError":"GPX import failed","places.importGoogleList":"Google List","places.googleListHint":"Paste a shared Google Maps list link to import all places.","places.googleListImported":'{count} places imported from "{list}"',"places.googleListError":"Failed to import Google Maps list","places.viewDetails":"View Details","places.assignToDay":"Add to which day?","places.all":"All","places.unplanned":"Unplanned","places.search":"Search places...","places.allCategories":"All Categories","places.categoriesSelected":"categories","places.clearFilter":"Clear filter","places.count":"{count} places","places.countSingular":"1 place","places.allPlanned":"All places are planned","places.noneFound":"No places found","places.editPlace":"Edit Place","places.formName":"Name","places.formNamePlaceholder":"e.g. Eiffel Tower","places.formDescription":"Description","places.formDescriptionPlaceholder":"Short description...","places.formAddress":"Address","places.formAddressPlaceholder":"Street, City, Country","places.formLat":"Latitude (e.g. 48.8566)","places.formLng":"Longitude (e.g. 2.3522)","places.formCategory":"Category","places.noCategory":"No Category","places.categoryNamePlaceholder":"Category name","places.formTime":"Time","places.startTime":"Start","places.endTime":"End","places.endTimeBeforeStart":"End time is before start time","places.timeCollision":"Time overlap with:","places.formWebsite":"Website","places.formNotesPlaceholder":"Personal notes...","places.formReservation":"Reservation","places.reservationNotesPlaceholder":"Reservation notes, confirmation number...","places.mapsSearchPlaceholder":"Search places...","places.mapsSearchError":"Place search failed.","places.osmHint":"Using OpenStreetMap search (no photos, opening hours, or ratings). Add a Google API key in settings for full details.","places.osmActive":"Search via OpenStreetMap (no photos, ratings or opening hours). Add a Google API key in Settings for enhanced data.","places.categoryCreateError":"Failed to create category","places.nameRequired":"Please enter a name","places.saveError":"Failed to save","inspector.opened":"Open","inspector.closed":"Closed","inspector.openingHours":"Opening Hours","inspector.showHours":"Show opening hours","inspector.files":"Files","inspector.filesCount":"{count} files","inspector.removeFromDay":"Remove from Day","inspector.addToDay":"Add to Day","inspector.confirmedRes":"Confirmed Reservation","inspector.pendingRes":"Pending Reservation","inspector.google":"Open in Google Maps","inspector.website":"Open Website","inspector.addRes":"Reservation","inspector.editRes":"Edit Reservation","inspector.participants":"Participants","inspector.trackStats":"Track Stats","reservations.title":"Bookings","reservations.empty":"No reservations yet","reservations.emptyHint":"Add reservations for flights, hotels and more","reservations.add":"Add Reservation","reservations.addManual":"Manual Booking","reservations.placeHint":"Tip: Reservations are best created directly from a place to link them with your day plan.","reservations.confirmed":"Confirmed","reservations.pending":"Pending","reservations.summary":"{confirmed} confirmed, {pending} pending","reservations.fromPlan":"From Plan","reservations.showFiles":"Show Files","reservations.editTitle":"Edit Reservation","reservations.status":"Status","reservations.datetime":"Date & Time","reservations.startTime":"Start time","reservations.endTime":"End time","reservations.date":"Date","reservations.time":"Time","reservations.timeAlt":"Time (alternative, e.g. 19:30)","reservations.notes":"Notes","reservations.notesPlaceholder":"Additional notes...","reservations.meta.airline":"Airline","reservations.meta.flightNumber":"Flight No.","reservations.meta.from":"From","reservations.meta.to":"To","reservations.meta.trainNumber":"Train No.","reservations.meta.platform":"Platform","reservations.meta.seat":"Seat","reservations.meta.checkIn":"Check-in","reservations.meta.checkOut":"Check-out","reservations.meta.linkAccommodation":"Accommodation","reservations.meta.pickAccommodation":"Link to accommodation","reservations.meta.noAccommodation":"None","reservations.meta.hotelPlace":"Accommodation","reservations.meta.pickHotel":"Select accommodation","reservations.meta.fromDay":"From","reservations.meta.toDay":"To","reservations.meta.selectDay":"Select day","reservations.type.flight":"Flight","reservations.type.hotel":"Accommodation","reservations.type.restaurant":"Restaurant","reservations.type.train":"Train","reservations.type.car":"Rental Car","reservations.type.cruise":"Cruise","reservations.type.event":"Event","reservations.type.tour":"Tour","reservations.type.other":"Other","reservations.confirm.delete":'Are you sure you want to delete the reservation "{name}"?',"reservations.confirm.deleteTitle":"Delete booking?","reservations.confirm.deleteBody":'"{name}" will be permanently deleted.',"reservations.toast.updated":"Reservation updated","reservations.toast.removed":"Reservation deleted","reservations.toast.fileUploaded":"File uploaded","reservations.toast.uploadError":"Failed to upload","reservations.newTitle":"New Reservation","reservations.bookingType":"Booking Type","reservations.titleLabel":"Title","reservations.titlePlaceholder":"e.g. Lufthansa LH123, Hotel Adlon, ...","reservations.locationAddress":"Location / Address","reservations.locationPlaceholder":"Address, Airport, Hotel...","reservations.confirmationCode":"Booking Code","reservations.confirmationPlaceholder":"e.g. ABC12345","reservations.day":"Day","reservations.noDay":"No Day","reservations.place":"Place","reservations.noPlace":"No Place","reservations.pendingSave":"will be saved…","reservations.uploading":"Uploading...","reservations.attachFile":"Attach file","reservations.linkExisting":"Link existing file","reservations.toast.saveError":"Failed to save","reservations.toast.updateError":"Failed to update","reservations.toast.deleteError":"Failed to delete","reservations.confirm.remove":'Remove reservation for "{name}"?',"reservations.linkAssignment":"Link to day assignment","reservations.pickAssignment":"Select an assignment from your plan...","reservations.noAssignment":"No link (standalone)","budget.title":"Budget","budget.exportCsv":"Export CSV","budget.emptyTitle":"No budget created yet","budget.emptyText":"Create categories and entries to plan your travel budget","budget.emptyPlaceholder":"Enter category name...","budget.createCategory":"Create Category","budget.category":"Category","budget.categoryName":"Category Name","budget.table.name":"Name","budget.table.total":"Total","budget.table.persons":"Persons","budget.table.days":"Days","budget.table.perPerson":"Per Person","budget.table.perDay":"Per Day","budget.table.perPersonDay":"P. p / Day","budget.table.note":"Note","budget.table.date":"Date","budget.newEntry":"New Entry","budget.defaultEntry":"New Entry","budget.defaultCategory":"New Category","budget.total":"Total","budget.totalBudget":"Total Budget","budget.byCategory":"By Category","budget.editTooltip":"Click to edit","budget.confirm.deleteCategory":'Are you sure you want to delete the category "{name}" with {count} entries?',"budget.deleteCategory":"Delete Category","budget.perPerson":"Per Person","budget.paid":"Paid","budget.open":"Open","budget.noMembers":"No members assigned","budget.settlement":"Settlement","budget.settlementInfo":"Click a member avatar on a budget item to mark them green — this means they paid. The settlement then shows who owes whom and how much.","budget.netBalances":"Net Balances","files.title":"Files","files.count":"{count} files","files.countSingular":"1 file","files.uploaded":"{count} uploaded","files.uploadError":"Upload failed","files.dropzone":"Drop files here","files.dropzoneHint":"or click to browse","files.allowedTypes":"Images, PDF, DOC, DOCX, XLS, XLSX, TXT, CSV · Max 50 MB","files.uploading":"Uploading...","files.filterAll":"All","files.filterPdf":"PDFs","files.filterImages":"Images","files.filterDocs":"Documents","files.filterCollab":"Collab Notes","files.sourceCollab":"From Collab Notes","files.empty":"No files yet","files.emptyHint":"Upload files to attach them to your trip","files.openTab":"Open in new tab","files.confirm.delete":"Are you sure you want to delete this file?","files.toast.deleted":"File deleted","files.toast.deleteError":"Failed to delete file","files.sourcePlan":"Day Plan","files.sourceBooking":"Booking","files.attach":"Attach","files.pasteHint":"You can also paste images from clipboard (Ctrl+V)","files.trash":"Trash","files.trashEmpty":"Trash is empty","files.emptyTrash":"Empty Trash","files.restore":"Restore","files.star":"Star","files.unstar":"Unstar","files.assign":"Assign","files.assignTitle":"Assign File","files.assignPlace":"Place","files.assignBooking":"Booking","files.unassigned":"Unassigned","files.unlink":"Remove link","files.toast.trashed":"Moved to trash","files.toast.restored":"File restored","files.toast.trashEmptied":"Trash emptied","files.toast.assigned":"File assigned","files.toast.assignError":"Assignment failed","files.toast.restoreError":"Restore failed","files.confirm.permanentDelete":"Permanently delete this file? This cannot be undone.","files.confirm.emptyTrash":"Permanently delete all trashed files? This cannot be undone.","files.noteLabel":"Note","files.notePlaceholder":"Add a note...","packing.title":"Packing List","packing.empty":"Packing list is empty","packing.import":"Import","packing.importTitle":"Import Packing List","packing.importHint":"One item per line. Format: Category, Name, Weight in g (optional), Bag (optional), checked/unchecked (optional)","packing.importPlaceholder":`Hygiene, Toothbrush Clothing, T-Shirts, 200 Documents, Passport, , Carry-on @@ -101,7 +101,7 @@ Electronics, Charger, 50, Suitcase, checked`,"packing.importCsv":"Load CSV/TXT", All current data will be replaced with the backup.`,"backup.confirm.uploadRestore":`Upload and restore backup file "{name}"? -All current data will be overwritten.`,"backup.confirm.delete":'Delete backup "{name}"?',"backup.toast.loadError":"Failed to load backups","backup.toast.created":"Backup created successfully","backup.toast.createError":"Failed to create backup","backup.toast.restored":"Backup restored. Page will reload…","backup.toast.restoreError":"Failed to restore","backup.toast.uploadError":"Failed to upload","backup.toast.deleted":"Backup deleted","backup.toast.deleteError":"Failed to delete","backup.toast.downloadError":"Download failed","backup.toast.settingsSaved":"Auto-backup settings saved","backup.toast.settingsError":"Failed to save settings","backup.auto.title":"Auto-Backup","backup.auto.subtitle":"Automatic backup on a schedule","backup.auto.enable":"Enable auto-backup","backup.auto.enableHint":"Backups will be created automatically on the chosen schedule","backup.auto.interval":"Interval","backup.auto.hour":"Run at hour","backup.auto.hourHint":"Server local time ({format} format)","backup.auto.dayOfWeek":"Day of week","backup.auto.dayOfMonth":"Day of month","backup.auto.dayOfMonthHint":"Limited to 1–28 for compatibility with all months","backup.auto.scheduleSummary":"Schedule","backup.auto.summaryDaily":"Every day at {hour}:00","backup.auto.summaryWeekly":"Every {day} at {hour}:00","backup.auto.summaryMonthly":"Day {day} of every month at {hour}:00","backup.auto.envLocked":"Docker","backup.auto.envLockedHint":"Auto-backup is configured via Docker environment variables. To change these settings, update your docker-compose.yml and restart the container.","backup.auto.copyEnv":"Copy Docker env vars","backup.auto.envCopied":"Docker env vars copied to clipboard","backup.auto.keepLabel":"Delete old backups after","backup.dow.sunday":"Sun","backup.dow.monday":"Mon","backup.dow.tuesday":"Tue","backup.dow.wednesday":"Wed","backup.dow.thursday":"Thu","backup.dow.friday":"Fri","backup.dow.saturday":"Sat","backup.interval.hourly":"Hourly","backup.interval.daily":"Daily","backup.interval.weekly":"Weekly","backup.interval.monthly":"Monthly","backup.keep.1day":"1 day","backup.keep.3days":"3 days","backup.keep.7days":"7 days","backup.keep.14days":"14 days","backup.keep.30days":"30 days","backup.keep.forever":"Keep forever","photos.allDays":"All Days","photos.noPhotos":"No photos yet","photos.uploadHint":"Upload your travel photos","photos.clickToSelect":"or click to select","photos.linkPlace":"Link Place","photos.noPlace":"No Place","photos.uploadN":"{n} photo(s) upload","backup.restoreConfirmTitle":"Restore Backup?","backup.restoreWarning":"All current data (trips, places, users, uploads) will be permanently replaced by the backup. This action cannot be undone.","backup.restoreTip":"Tip: Create a backup of the current state before restoring.","backup.restoreConfirm":"Yes, restore","pdf.travelPlan":"Travel Plan","pdf.planned":"Planned","pdf.costLabel":"Cost EUR","pdf.preview":"PDF Preview","pdf.saveAsPdf":"Save as PDF","planner.places":"Places","planner.bookings":"Bookings","planner.packingList":"Packing List","planner.documents":"Documents","planner.dayPlan":"Day Plan","planner.reservations":"Reservations","planner.minTwoPlaces":"At least 2 places with coordinates needed","planner.noGeoPlaces":"No places with coordinates available","planner.routeCalculated":"Route calculated","planner.routeCalcFailed":"Route could not be calculated","planner.routeError":"Error calculating route","planner.routeOptimized":"Route optimized","planner.reservationUpdated":"Reservation updated","planner.reservationAdded":"Reservation added","planner.confirmDeleteReservation":"Delete reservation?","planner.reservationDeleted":"Reservation deleted","planner.days":"Days","planner.allPlaces":"All Places","planner.totalPlaces":"{n} places total","planner.noDaysPlanned":"No days planned yet","planner.editTrip":"Edit trip →","planner.placeOne":"1 place","planner.placeN":"{n} places","planner.addNote":"Add note","planner.noEntries":"No entries for this day","planner.addPlace":"Add place/activity","planner.addPlaceShort":"+ Add place/activity","planner.resPending":"Reservation pending · ","planner.resConfirmed":"Reservation confirmed · ","planner.notePlaceholder":"Note…","planner.noteTimePlaceholder":"Time (optional)","planner.noteExamplePlaceholder":"e.g. S3 at 14:30 from central station, ferry from pier 7, lunch break…","planner.totalCost":"Total cost","planner.searchPlaces":"Search places…","planner.allCategories":"All Categories","planner.noPlacesFound":"No places found","planner.addFirstPlace":"Add first place","planner.noReservations":"No reservations","planner.addFirstReservation":"Add first reservation","planner.new":"New","planner.addToDay":"+ Day","planner.calculating":"Calculating…","planner.route":"Route","planner.optimize":"Optimize","planner.openGoogleMaps":"Open in Google Maps","planner.selectDayHint":"Select a day from the left list to see the day plan","planner.noPlacesForDay":"No places for this day yet","planner.addPlacesLink":"Add places →","planner.minTotal":"min. total","planner.noReservation":"No reservation","planner.removeFromDay":"Remove from day","planner.addToThisDay":"Add to day","planner.overview":"Overview","planner.noDays":"No days yet","planner.editTripToAddDays":"Edit trip to add days","planner.dayCount":"{n} Days","planner.clickToUnlock":"Click to unlock","planner.keepPosition":"Keep position during route optimization","planner.dayDetails":"Day details","planner.dayN":"Day {n}","stats.countries":"Countries","stats.cities":"Cities","stats.trips":"Trips","stats.places":"Places","stats.worldProgress":"World Progress","stats.visited":"visited","stats.remaining":"remaining","stats.visitedCountries":"Visited Countries","day.precipProb":"Rain probability","day.precipitation":"Precipitation","day.wind":"Wind","day.sunrise":"Sunrise","day.sunset":"Sunset","day.hourlyForecast":"Hourly Forecast","day.climateHint":"Historical averages — real forecast available within 16 days of this date.","day.noWeather":"No weather data available. Add a place with coordinates.","day.overview":"Daily Overview","day.accommodation":"Accommodation","day.addAccommodation":"Add accommodation","day.hotelDayRange":"Apply to days","day.noPlacesForHotel":"Add places to your trip first","day.allDays":"All","day.checkIn":"Check-in","day.checkOut":"Check-out","day.confirmation":"Confirmation","day.editAccommodation":"Edit accommodation","day.reservations":"Reservations","memories.title":"Photos","memories.notConnected":"Immich not connected","memories.notConnectedHint":"Connect your Immich instance in Settings to see your trip photos here.","memories.noDates":"Add dates to your trip to load photos.","memories.noPhotos":"No photos found","memories.noPhotosHint":"No photos found in Immich for this trip's date range.","memories.photosFound":"photos","memories.fromOthers":"from others","memories.sharePhotos":"Share photos","memories.sharing":"Sharing","memories.reviewTitle":"Review your photos","memories.reviewHint":"Click photos to exclude them from sharing.","memories.shareCount":"Share {count} photos","memories.immichUrl":"Immich Server URL","memories.immichApiKey":"API Key","memories.testConnection":"Test connection","memories.testFirst":"Test connection first","memories.connected":"Connected","memories.disconnected":"Not connected","memories.connectionSuccess":"Connected to Immich","memories.connectionError":"Could not connect to Immich","memories.saved":"Immich settings saved","memories.addPhotos":"Add photos","memories.linkAlbum":"Link Album","memories.selectAlbum":"Select Immich Album","memories.noAlbums":"No albums found","memories.syncAlbum":"Sync album","memories.unlinkAlbum":"Unlink album","memories.photos":"photos","memories.selectPhotos":"Select photos from Immich","memories.selectHint":"Tap photos to select them.","memories.selected":"selected","memories.addSelected":"Add {count} photos","memories.alreadyAdded":"Added","memories.private":"Private","memories.stopSharing":"Stop sharing","memories.oldest":"Oldest first","memories.newest":"Newest first","memories.allLocations":"All locations","memories.tripDates":"Trip dates","memories.allPhotos":"All photos","memories.confirmShareTitle":"Share with trip members?","memories.confirmShareHint":"{count} photos will be visible to all members of this trip. You can make individual photos private later.","memories.confirmShareButton":"Share photos","collab.tabs.chat":"Chat","collab.tabs.notes":"Notes","collab.tabs.polls":"Polls","collab.whatsNext.title":"What's Next","collab.whatsNext.today":"Today","collab.whatsNext.tomorrow":"Tomorrow","collab.whatsNext.empty":"No upcoming activities","collab.whatsNext.until":"to","collab.whatsNext.emptyHint":"Activities with times will appear here","collab.chat.send":"Send","collab.chat.placeholder":"Type a message...","collab.chat.empty":"Start the conversation","collab.chat.emptyHint":"Messages are shared with all trip members","collab.chat.emptyDesc":"Share ideas, plans, and updates with your travel group","collab.chat.today":"Today","collab.chat.yesterday":"Yesterday","collab.chat.deletedMessage":"deleted a message","collab.chat.reply":"Reply","collab.chat.loadMore":"Load older messages","collab.chat.justNow":"just now","collab.chat.minutesAgo":"{n}m ago","collab.chat.hoursAgo":"{n}h ago","collab.notes.title":"Notes","collab.notes.new":"New Note","collab.notes.empty":"No notes yet","collab.notes.emptyHint":"Start capturing ideas and plans","collab.notes.all":"All","collab.notes.titlePlaceholder":"Note title","collab.notes.contentPlaceholder":"Write something...","collab.notes.categoryPlaceholder":"Category","collab.notes.newCategory":"New category...","collab.notes.category":"Category","collab.notes.noCategory":"No category","collab.notes.color":"Color","collab.notes.save":"Save","collab.notes.cancel":"Cancel","collab.notes.edit":"Edit","collab.notes.delete":"Delete","collab.notes.pin":"Pin","collab.notes.unpin":"Unpin","collab.notes.daysAgo":"{n}d ago","collab.notes.categorySettings":"Manage Categories","collab.notes.create":"Create","collab.notes.website":"Website","collab.notes.websitePlaceholder":"https://...","collab.notes.attachFiles":"Attach files","collab.notes.noCategoriesYet":"No categories yet","collab.notes.emptyDesc":"Create a note to get started","collab.polls.title":"Polls","collab.polls.new":"New Poll","collab.polls.empty":"No polls yet","collab.polls.emptyHint":"Ask the group and vote together","collab.polls.question":"Question","collab.polls.questionPlaceholder":"What should we do?","collab.polls.addOption":"+ Add option","collab.polls.optionPlaceholder":"Option {n}","collab.polls.create":"Create Poll","collab.polls.close":"Close","collab.polls.closed":"Closed","collab.polls.votes":"{n} votes","collab.polls.vote":"{n} vote","collab.polls.multipleChoice":"Multiple choice","collab.polls.multiChoice":"Multiple choice","collab.polls.deadline":"Deadline","collab.polls.option":"Option","collab.polls.options":"Options","collab.polls.delete":"Delete","collab.polls.closedSection":"Closed","admin.tabs.permissions":"Permissions","perm.title":"Permission Settings","perm.subtitle":"Control who can perform actions across the application","perm.saved":"Permission settings saved","perm.resetDefaults":"Reset to defaults","perm.customized":"customized","perm.level.admin":"Admin only","perm.level.tripOwner":"Trip owner","perm.level.tripMember":"Trip members","perm.level.everybody":"Everyone","perm.cat.trip":"Trip Management","perm.cat.members":"Member Management","perm.cat.files":"Files","perm.cat.content":"Content & Schedule","perm.cat.extras":"Budget, Packing & Collaboration","perm.action.trip_create":"Create trips","perm.action.trip_edit":"Edit trip details","perm.action.trip_delete":"Delete trips","perm.action.trip_archive":"Archive / unarchive trips","perm.action.trip_cover_upload":"Upload cover image","perm.action.member_manage":"Add / remove members","perm.action.file_upload":"Upload files","perm.action.file_edit":"Edit file metadata","perm.action.file_delete":"Delete files","perm.action.place_edit":"Add / edit / delete places","perm.action.day_edit":"Edit days, notes & assignments","perm.action.reservation_edit":"Manage reservations","perm.action.budget_edit":"Manage budget","perm.action.packing_edit":"Manage packing lists","perm.action.collab_edit":"Collaboration (notes, polls, chat)","perm.action.share_manage":"Manage share links","perm.actionHint.trip_create":"Who can create new trips","perm.actionHint.trip_edit":"Who can change trip name, dates, description and currency","perm.actionHint.trip_delete":"Who can permanently delete a trip","perm.actionHint.trip_archive":"Who can archive or unarchive a trip","perm.actionHint.trip_cover_upload":"Who can upload or change the cover image","perm.actionHint.member_manage":"Who can invite or remove trip members","perm.actionHint.file_upload":"Who can upload files to a trip","perm.actionHint.file_edit":"Who can edit file descriptions and links","perm.actionHint.file_delete":"Who can move files to trash or permanently delete them","perm.actionHint.place_edit":"Who can add, edit or delete places","perm.actionHint.day_edit":"Who can edit days, day notes and place assignments","perm.actionHint.reservation_edit":"Who can create, edit or delete reservations","perm.actionHint.budget_edit":"Who can create, edit or delete budget items","perm.actionHint.packing_edit":"Who can manage packing items and bags","perm.actionHint.collab_edit":"Who can create notes, polls and send messages","perm.actionHint.share_manage":"Who can create or delete public share links"},vM={"common.save":"Guardar","common.cancel":"Cancelar","common.delete":"Eliminar","common.edit":"Editar","common.add":"Añadir","common.loading":"Cargando...","common.import":"Importar","common.error":"Error","common.back":"Atrás","common.all":"Todo","common.close":"Cerrar","common.open":"Abrir","common.upload":"Subir","common.search":"Buscar","common.confirm":"Confirmar","common.ok":"Aceptar","common.yes":"Sí","common.no":"No","common.or":"o","common.none":"Ninguno","common.date":"Fecha","common.rename":"Renombrar","common.name":"Nombre","common.email":"Correo","common.password":"Contraseña","common.saving":"Guardando...","common.saved":"Guardado","trips.reminder":"Recordatorio","trips.reminderNone":"Ninguno","trips.reminderDay":"día","trips.reminderDays":"días","trips.reminderCustom":"Personalizado","trips.reminderDaysBefore":"días antes de la salida","trips.reminderDisabledHint":"Los recordatorios de viaje están desactivados. Actívalos en Admin > Configuración > Notificaciones.","common.update":"Actualizar","common.change":"Cambiar","common.uploading":"Subiendo…","common.backToPlanning":"Volver a la planificación","common.reset":"Restablecer","nav.trip":"Viaje","nav.share":"Compartir","nav.settings":"Ajustes","nav.admin":"Administración","nav.logout":"Cerrar sesión","nav.lightMode":"Modo claro","nav.darkMode":"Modo oscuro","nav.autoMode":"Modo automático","nav.administrator":"Administrador","nav.myTrips":"Mis viajes","dashboard.title":"Mis viajes","dashboard.subtitle.loading":"Cargando viajes...","dashboard.subtitle.trips":"{count} viajes ({archived} archivados)","dashboard.subtitle.empty":"Empieza tu primer viaje","dashboard.subtitle.activeOne":"{count} viaje activo","dashboard.subtitle.activeMany":"{count} viajes activos","dashboard.subtitle.archivedSuffix":" · {count} archivados","dashboard.newTrip":"Nuevo viaje","dashboard.gridView":"Vista de cuadrícula","dashboard.listView":"Vista de lista","dashboard.currency":"Divisa","dashboard.timezone":"Zonas horarias","dashboard.localTime":"Hora local","dashboard.timezoneCustomTitle":"Zona horaria personalizada","dashboard.timezoneCustomLabelPlaceholder":"Nombre (opcional)","dashboard.timezoneCustomTzPlaceholder":"ej. America/New_York","dashboard.timezoneCustomAdd":"Añadir","dashboard.timezoneCustomErrorEmpty":"Introduce una zona horaria","dashboard.timezoneCustomErrorInvalid":"Zona horaria no válida. Usa formato como Europe/Madrid","dashboard.timezoneCustomErrorDuplicate":"Ya añadida","dashboard.emptyTitle":"Aún no hay viajes","dashboard.emptyText":"Crea tu primer viaje y empieza a planificar","dashboard.emptyButton":"Crear primer viaje","dashboard.nextTrip":"Próximo viaje","dashboard.shared":"Compartido","dashboard.sharedBy":"Compartido por {name}","dashboard.days":"Días","dashboard.places":"Lugares","dashboard.archive":"Archivar","dashboard.restore":"Restaurar","dashboard.archived":"Archivado","dashboard.status.ongoing":"En curso","dashboard.status.today":"Hoy","dashboard.status.tomorrow":"Mañana","dashboard.status.past":"Pasado","dashboard.status.daysLeft":"Quedan {count} días","dashboard.toast.loadError":"No se pudieron cargar los viajes","dashboard.toast.created":"¡Viaje creado correctamente!","dashboard.toast.createError":"No se pudo crear el viaje","dashboard.toast.updated":"¡Viaje actualizado!","dashboard.toast.updateError":"No se pudo actualizar el viaje","dashboard.toast.deleted":"Viaje eliminado","dashboard.toast.deleteError":"No se pudo eliminar el viaje","dashboard.toast.archived":"Viaje archivado","dashboard.toast.archiveError":"No se pudo archivar el viaje","dashboard.toast.restored":"Viaje restaurado","dashboard.toast.restoreError":"No se pudo restaurar el viaje","dashboard.confirm.delete":'¿Eliminar el viaje "{title}"? Todos los lugares y planes se borrarán permanentemente.',"dashboard.editTrip":"Editar viaje","dashboard.createTrip":"Crear nuevo viaje","dashboard.tripTitle":"Título","dashboard.tripTitlePlaceholder":"p. ej. Verano en Japón","dashboard.tripDescription":"Descripción","dashboard.tripDescriptionPlaceholder":"¿De qué trata este viaje?","dashboard.startDate":"Fecha de inicio","dashboard.endDate":"Fecha de fin","dashboard.noDateHint":"Sin fecha definida: se crearán 7 días por defecto. Puedes cambiarlo cuando quieras.","dashboard.coverImage":"Imagen de portada","dashboard.addCoverImage":"Añadir imagen de portada","dashboard.addMembers":"Compañeros de viaje","dashboard.addMember":"Añadir miembro","dashboard.coverSaved":"Imagen de portada guardada","dashboard.coverUploadError":"Error al subir la imagen","dashboard.coverRemoveError":"Error al eliminar la imagen","dashboard.titleRequired":"El título es obligatorio","dashboard.endDateError":"La fecha de fin debe ser posterior a la de inicio","settings.title":"Ajustes","settings.subtitle":"Configura tus ajustes personales","settings.map":"Mapa","settings.mapTemplate":"Plantilla del mapa","settings.mapTemplatePlaceholder.select":"Seleccionar plantilla...","settings.mapDefaultHint":"Déjalo vacío para OpenStreetMap (por defecto)","settings.mapTemplatePlaceholder":"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png","settings.mapHint":"Plantilla de URL para los mosaicos del mapa","settings.latitude":"Latitud","settings.longitude":"Longitud","settings.saveMap":"Guardar mapa","settings.apiKeys":"Claves API","settings.mapsKey":"Clave API de Google Maps","settings.mapsKeyHint":"Necesaria para buscar lugares. Consíguela en console.cloud.google.com","settings.weatherKey":"Clave API de OpenWeatherMap","settings.weatherKeyHint":"Para datos meteorológicos. Gratis en openweathermap.org/api","settings.keyPlaceholder":"Introduce la clave...","settings.configured":"Configurado","settings.saveKeys":"Guardar claves","settings.display":"Visualización","settings.colorMode":"Modo de color","settings.light":"Claro","settings.dark":"Oscuro","settings.auto":"Automático","settings.language":"Idioma","settings.temperature":"Unidad de temperatura","settings.timeFormat":"Formato de hora","settings.routeCalculation":"Cálculo de ruta","settings.blurBookingCodes":"Difuminar códigos de reserva","settings.notifications":"Notificaciones","settings.notifyTripInvite":"Invitaciones de viaje","settings.notifyBookingChange":"Cambios en reservas","settings.notifyTripReminder":"Recordatorios de viaje","settings.notifyVacayInvite":"Invitaciones de fusión Vacay","settings.notifyPhotosShared":"Fotos compartidas (Immich)","settings.notifyCollabMessage":"Mensajes de chat (Collab)","settings.notifyPackingTagged":"Lista de equipaje: asignaciones","settings.notifyWebhook":"Notificaciones webhook","settings.notificationsDisabled":"Las notificaciones no están configuradas. Pida a un administrador que active las notificaciones por correo o webhook.","settings.notificationsActive":"Canal activo","settings.notificationsManagedByAdmin":"Los eventos de notificación son configurados por el administrador.","admin.notifications.title":"Notificaciones","admin.notifications.hint":"Elija un canal de notificación. Solo uno puede estar activo a la vez.","admin.notifications.none":"Desactivado","admin.notifications.email":"Correo (SMTP)","admin.notifications.webhook":"Webhook","admin.notifications.events":"Eventos de notificación","admin.notifications.eventsHint":"Elige qué eventos activan notificaciones para todos los usuarios.","admin.notifications.configureFirst":"Configura primero los ajustes SMTP o webhook a continuación, luego activa los eventos.","admin.notifications.save":"Guardar configuración de notificaciones","admin.notifications.saved":"Configuración de notificaciones guardada","admin.notifications.testWebhook":"Enviar webhook de prueba","admin.notifications.testWebhookSuccess":"Webhook de prueba enviado correctamente","admin.notifications.testWebhookFailed":"Error al enviar webhook de prueba","admin.smtp.title":"Correo y notificaciones","admin.smtp.hint":"Configuración SMTP para el envío de notificaciones por correo.","admin.smtp.testButton":"Enviar correo de prueba","admin.webhook.hint":"Enviar notificaciones a un webhook externo (Discord, Slack, etc.).","admin.smtp.testSuccess":"Correo de prueba enviado correctamente","admin.smtp.testFailed":"Error al enviar correo de prueba","dayplan.icsTooltip":"Exportar calendario (ICS)","share.linkTitle":"Enlace público","share.linkHint":"Crea un enlace que cualquiera puede usar para ver este viaje sin iniciar sesión. Solo lectura — no se puede editar.","share.createLink":"Crear enlace","share.deleteLink":"Eliminar enlace","share.createError":"No se pudo crear el enlace","common.copy":"Copiar","common.copied":"Copiado","share.permMap":"Mapa y plan","share.permBookings":"Reservas","share.permPacking":"Equipaje","shared.expired":"Enlace expirado o inválido","shared.expiredHint":"Este enlace de viaje compartido ya no está activo.","shared.readOnly":"Vista de solo lectura","shared.tabPlan":"Plan","shared.tabBookings":"Reservas","shared.tabPacking":"Equipaje","shared.tabBudget":"Presupuesto","shared.tabChat":"Chat","shared.days":"días","shared.places":"lugares","shared.other":"Otro","shared.totalBudget":"Presupuesto total","shared.messages":"mensajes","shared.sharedVia":"Compartido vía","shared.confirmed":"Confirmado","shared.pending":"Pendiente","share.permBudget":"Presupuesto","share.permCollab":"Chat","settings.on":"Activado","settings.off":"Desactivado","settings.mcp.title":"Configuración MCP","settings.mcp.endpoint":"Endpoint MCP","settings.mcp.clientConfig":"Configuración del cliente","settings.mcp.clientConfigHint":"Reemplaza con un token de la lista de abajo. Es posible que debas ajustar la ruta de npx según tu sistema (p. ej. C:\\PROGRA~1\\nodejs\\npx.cmd en Windows).","settings.mcp.copy":"Copiar","settings.mcp.copied":"¡Copiado!","settings.mcp.apiTokens":"Tokens de API","settings.mcp.createToken":"Crear nuevo token","settings.mcp.noTokens":"Sin tokens aún. Crea uno para conectar clientes MCP.","settings.mcp.tokenCreatedAt":"Creado","settings.mcp.tokenUsedAt":"Usado","settings.mcp.deleteTokenTitle":"Eliminar token","settings.mcp.deleteTokenMessage":"Este token dejará de funcionar de inmediato. Cualquier cliente MCP que lo use perderá el acceso.","settings.mcp.modal.createTitle":"Crear token de API","settings.mcp.modal.tokenName":"Nombre del token","settings.mcp.modal.tokenNamePlaceholder":"p. ej. Claude Desktop, Portátil de trabajo","settings.mcp.modal.creating":"Creando…","settings.mcp.modal.create":"Crear token","settings.mcp.modal.createdTitle":"Token creado","settings.mcp.modal.createdWarning":"Este token solo se mostrará una vez. Cópialo y guárdalo ahora — no se podrá recuperar.","settings.mcp.modal.done":"Listo","settings.mcp.toast.created":"Token creado","settings.mcp.toast.createError":"Error al crear el token","settings.mcp.toast.deleted":"Token eliminado","settings.mcp.toast.deleteError":"Error al eliminar el token","settings.account":"Cuenta","settings.username":"Usuario","settings.email":"Correo","settings.role":"Rol","settings.roleAdmin":"Administrador","settings.oidcLinked":"Vinculado con","settings.changePassword":"Cambiar contraseña","settings.mustChangePassword":"Debe cambiar su contraseña antes de continuar. Establezca una nueva contraseña a continuación.","settings.currentPassword":"Contraseña actual","settings.newPassword":"Nueva contraseña","settings.confirmPassword":"Confirmar nueva contraseña","settings.updatePassword":"Actualizar contraseña","settings.passwordRequired":"Introduce la contraseña actual y la nueva","settings.passwordTooShort":"La contraseña debe tener al menos 8 caracteres","settings.passwordMismatch":"Las contraseñas no coinciden","settings.passwordChanged":"Contraseña cambiada correctamente","settings.deleteAccount":"Eliminar cuenta","settings.deleteAccountTitle":"¿Eliminar tu cuenta?","settings.deleteAccountWarning":"Tu cuenta y todos tus viajes, lugares y archivos se eliminarán permanentemente. Esta acción no se puede deshacer.","settings.deleteAccountConfirm":"Eliminar permanentemente","settings.deleteBlockedTitle":"No es posible eliminarla","settings.deleteBlockedMessage":"Eres el único administrador. Asciende a otro usuario a administrador antes de eliminar tu cuenta.","settings.roleUser":"Usuario","settings.saveProfile":"Guardar perfil","settings.mfa.title":"Autenticación de dos factores (2FA)","settings.mfa.description":"Añade un segundo paso al iniciar sesión. Usa una app de autenticación (Google Authenticator, Authy, etc.).","settings.mfa.requiredByPolicy":"Tu administrador exige autenticación en dos factores. Configura una app de autenticación abajo antes de continuar.","settings.mfa.backupTitle":"Códigos de respaldo","settings.mfa.backupDescription":"Usa estos códigos de un solo uso si pierdes acceso a tu app autenticadora.","settings.mfa.backupWarning":"Guárdalos ahora. Cada código solo se puede usar una vez.","settings.mfa.backupCopy":"Copiar códigos","settings.mfa.backupDownload":"Descargar TXT","settings.mfa.backupPrint":"Imprimir / PDF","settings.mfa.backupCopied":"Códigos de respaldo copiados","settings.mfa.enabled":"2FA está activado en tu cuenta.","settings.mfa.disabled":"2FA no está activado.","settings.mfa.setup":"Configurar autenticador","settings.mfa.scanQr":"Escanea este código QR con tu app o introduce la clave manualmente.","settings.mfa.secretLabel":"Clave secreta (entrada manual)","settings.mfa.codePlaceholder":"Código de 6 dígitos","settings.mfa.enable":"Activar 2FA","settings.mfa.cancelSetup":"Cancelar","settings.mfa.disableTitle":"Desactivar 2FA","settings.mfa.disableHint":"Introduce tu contraseña y un código actual de tu autenticador.","settings.mfa.disable":"Desactivar 2FA","settings.mfa.toastEnabled":"Autenticación de dos factores activada","settings.mfa.toastDisabled":"Autenticación de dos factores desactivada","settings.mfa.demoBlocked":"No disponible en modo demo","settings.toast.mapSaved":"Ajustes del mapa guardados","settings.toast.keysSaved":"Claves API guardadas","settings.toast.displaySaved":"Ajustes de visualización guardados","settings.toast.profileSaved":"Perfil guardado","settings.uploadAvatar":"Subir foto de perfil","settings.removeAvatar":"Eliminar foto de perfil","settings.avatarUploaded":"Foto de perfil actualizada","settings.avatarRemoved":"Foto de perfil eliminada","settings.avatarError":"Falló la subida","login.error":"Inicio de sesión fallido. Revisa tus credenciales.","login.tagline":`Tus viajes. +All current data will be overwritten.`,"backup.confirm.delete":'Delete backup "{name}"?',"backup.toast.loadError":"Failed to load backups","backup.toast.created":"Backup created successfully","backup.toast.createError":"Failed to create backup","backup.toast.restored":"Backup restored. Page will reload…","backup.toast.restoreError":"Failed to restore","backup.toast.uploadError":"Failed to upload","backup.toast.deleted":"Backup deleted","backup.toast.deleteError":"Failed to delete","backup.toast.downloadError":"Download failed","backup.toast.settingsSaved":"Auto-backup settings saved","backup.toast.settingsError":"Failed to save settings","backup.auto.title":"Auto-Backup","backup.auto.subtitle":"Automatic backup on a schedule","backup.auto.enable":"Enable auto-backup","backup.auto.enableHint":"Backups will be created automatically on the chosen schedule","backup.auto.interval":"Interval","backup.auto.hour":"Run at hour","backup.auto.hourHint":"Server local time ({format} format)","backup.auto.dayOfWeek":"Day of week","backup.auto.dayOfMonth":"Day of month","backup.auto.dayOfMonthHint":"Limited to 1–28 for compatibility with all months","backup.auto.scheduleSummary":"Schedule","backup.auto.summaryDaily":"Every day at {hour}:00","backup.auto.summaryWeekly":"Every {day} at {hour}:00","backup.auto.summaryMonthly":"Day {day} of every month at {hour}:00","backup.auto.envLocked":"Docker","backup.auto.envLockedHint":"Auto-backup is configured via Docker environment variables. To change these settings, update your docker-compose.yml and restart the container.","backup.auto.copyEnv":"Copy Docker env vars","backup.auto.envCopied":"Docker env vars copied to clipboard","backup.auto.keepLabel":"Delete old backups after","backup.dow.sunday":"Sun","backup.dow.monday":"Mon","backup.dow.tuesday":"Tue","backup.dow.wednesday":"Wed","backup.dow.thursday":"Thu","backup.dow.friday":"Fri","backup.dow.saturday":"Sat","backup.interval.hourly":"Hourly","backup.interval.daily":"Daily","backup.interval.weekly":"Weekly","backup.interval.monthly":"Monthly","backup.keep.1day":"1 day","backup.keep.3days":"3 days","backup.keep.7days":"7 days","backup.keep.14days":"14 days","backup.keep.30days":"30 days","backup.keep.forever":"Keep forever","photos.allDays":"All Days","photos.noPhotos":"No photos yet","photos.uploadHint":"Upload your travel photos","photos.clickToSelect":"or click to select","photos.linkPlace":"Link Place","photos.noPlace":"No Place","photos.uploadN":"{n} photo(s) upload","backup.restoreConfirmTitle":"Restore Backup?","backup.restoreWarning":"All current data (trips, places, users, uploads) will be permanently replaced by the backup. This action cannot be undone.","backup.restoreTip":"Tip: Create a backup of the current state before restoring.","backup.restoreConfirm":"Yes, restore","pdf.travelPlan":"Travel Plan","pdf.planned":"Planned","pdf.costLabel":"Cost EUR","pdf.preview":"PDF Preview","pdf.saveAsPdf":"Save as PDF","planner.places":"Places","planner.bookings":"Bookings","planner.packingList":"Packing List","planner.documents":"Documents","planner.dayPlan":"Day Plan","planner.reservations":"Reservations","planner.minTwoPlaces":"At least 2 places with coordinates needed","planner.noGeoPlaces":"No places with coordinates available","planner.routeCalculated":"Route calculated","planner.routeCalcFailed":"Route could not be calculated","planner.routeError":"Error calculating route","planner.routeOptimized":"Route optimized","planner.reservationUpdated":"Reservation updated","planner.reservationAdded":"Reservation added","planner.confirmDeleteReservation":"Delete reservation?","planner.reservationDeleted":"Reservation deleted","planner.days":"Days","planner.allPlaces":"All Places","planner.totalPlaces":"{n} places total","planner.noDaysPlanned":"No days planned yet","planner.editTrip":"Edit trip →","planner.placeOne":"1 place","planner.placeN":"{n} places","planner.addNote":"Add note","planner.noEntries":"No entries for this day","planner.addPlace":"Add place/activity","planner.addPlaceShort":"+ Add place/activity","planner.resPending":"Reservation pending · ","planner.resConfirmed":"Reservation confirmed · ","planner.notePlaceholder":"Note…","planner.noteTimePlaceholder":"Time (optional)","planner.noteExamplePlaceholder":"e.g. S3 at 14:30 from central station, ferry from pier 7, lunch break…","planner.totalCost":"Total cost","planner.searchPlaces":"Search places…","planner.allCategories":"All Categories","planner.noPlacesFound":"No places found","planner.addFirstPlace":"Add first place","planner.noReservations":"No reservations","planner.addFirstReservation":"Add first reservation","planner.new":"New","planner.addToDay":"+ Day","planner.calculating":"Calculating…","planner.route":"Route","planner.optimize":"Optimize","planner.openGoogleMaps":"Open in Google Maps","planner.selectDayHint":"Select a day from the left list to see the day plan","planner.noPlacesForDay":"No places for this day yet","planner.addPlacesLink":"Add places →","planner.minTotal":"min. total","planner.noReservation":"No reservation","planner.removeFromDay":"Remove from day","planner.addToThisDay":"Add to day","planner.overview":"Overview","planner.noDays":"No days yet","planner.editTripToAddDays":"Edit trip to add days","planner.dayCount":"{n} Days","planner.clickToUnlock":"Click to unlock","planner.keepPosition":"Keep position during route optimization","planner.dayDetails":"Day details","planner.dayN":"Day {n}","stats.countries":"Countries","stats.cities":"Cities","stats.trips":"Trips","stats.places":"Places","stats.worldProgress":"World Progress","stats.visited":"visited","stats.remaining":"remaining","stats.visitedCountries":"Visited Countries","day.precipProb":"Rain probability","day.precipitation":"Precipitation","day.wind":"Wind","day.sunrise":"Sunrise","day.sunset":"Sunset","day.hourlyForecast":"Hourly Forecast","day.climateHint":"Historical averages — real forecast available within 16 days of this date.","day.noWeather":"No weather data available. Add a place with coordinates.","day.overview":"Daily Overview","day.accommodation":"Accommodation","day.addAccommodation":"Add accommodation","day.hotelDayRange":"Apply to days","day.noPlacesForHotel":"Add places to your trip first","day.allDays":"All","day.checkIn":"Check-in","day.checkOut":"Check-out","day.confirmation":"Confirmation","day.editAccommodation":"Edit accommodation","day.reservations":"Reservations","memories.title":"Photos","memories.notConnected":"Immich not connected","memories.notConnectedHint":"Connect your Immich instance in Settings to see your trip photos here.","memories.noDates":"Add dates to your trip to load photos.","memories.noPhotos":"No photos found","memories.noPhotosHint":"No photos found in Immich for this trip's date range.","memories.photosFound":"photos","memories.fromOthers":"from others","memories.sharePhotos":"Share photos","memories.sharing":"Sharing","memories.reviewTitle":"Review your photos","memories.reviewHint":"Click photos to exclude them from sharing.","memories.shareCount":"Share {count} photos","memories.immichUrl":"Immich Server URL","memories.immichApiKey":"API Key","memories.testConnection":"Test connection","memories.testFirst":"Test connection first","memories.connected":"Connected","memories.disconnected":"Not connected","memories.connectionSuccess":"Connected to Immich","memories.connectionError":"Could not connect to Immich","memories.saved":"Immich settings saved","memories.addPhotos":"Add photos","memories.linkAlbum":"Link Album","memories.selectAlbum":"Select Immich Album","memories.noAlbums":"No albums found","memories.syncAlbum":"Sync album","memories.unlinkAlbum":"Unlink album","memories.photos":"photos","memories.selectPhotos":"Select photos from Immich","memories.selectHint":"Tap photos to select them.","memories.selected":"selected","memories.addSelected":"Add {count} photos","memories.alreadyAdded":"Added","memories.private":"Private","memories.stopSharing":"Stop sharing","memories.oldest":"Oldest first","memories.newest":"Newest first","memories.allLocations":"All locations","memories.tripDates":"Trip dates","memories.allPhotos":"All photos","memories.confirmShareTitle":"Share with trip members?","memories.confirmShareHint":"{count} photos will be visible to all members of this trip. You can make individual photos private later.","memories.confirmShareButton":"Share photos","collab.tabs.chat":"Chat","collab.tabs.notes":"Notes","collab.tabs.polls":"Polls","collab.whatsNext.title":"What's Next","collab.whatsNext.today":"Today","collab.whatsNext.tomorrow":"Tomorrow","collab.whatsNext.empty":"No upcoming activities","collab.whatsNext.until":"to","collab.whatsNext.emptyHint":"Activities with times will appear here","collab.chat.send":"Send","collab.chat.placeholder":"Type a message...","collab.chat.empty":"Start the conversation","collab.chat.emptyHint":"Messages are shared with all trip members","collab.chat.emptyDesc":"Share ideas, plans, and updates with your travel group","collab.chat.today":"Today","collab.chat.yesterday":"Yesterday","collab.chat.deletedMessage":"deleted a message","collab.chat.reply":"Reply","collab.chat.loadMore":"Load older messages","collab.chat.justNow":"just now","collab.chat.minutesAgo":"{n}m ago","collab.chat.hoursAgo":"{n}h ago","collab.notes.title":"Notes","collab.notes.new":"New Note","collab.notes.empty":"No notes yet","collab.notes.emptyHint":"Start capturing ideas and plans","collab.notes.all":"All","collab.notes.titlePlaceholder":"Note title","collab.notes.contentPlaceholder":"Write something...","collab.notes.categoryPlaceholder":"Category","collab.notes.newCategory":"New category...","collab.notes.category":"Category","collab.notes.noCategory":"No category","collab.notes.color":"Color","collab.notes.save":"Save","collab.notes.cancel":"Cancel","collab.notes.edit":"Edit","collab.notes.delete":"Delete","collab.notes.pin":"Pin","collab.notes.unpin":"Unpin","collab.notes.daysAgo":"{n}d ago","collab.notes.categorySettings":"Manage Categories","collab.notes.create":"Create","collab.notes.website":"Website","collab.notes.websitePlaceholder":"https://...","collab.notes.attachFiles":"Attach files","collab.notes.noCategoriesYet":"No categories yet","collab.notes.emptyDesc":"Create a note to get started","collab.polls.title":"Polls","collab.polls.new":"New Poll","collab.polls.empty":"No polls yet","collab.polls.emptyHint":"Ask the group and vote together","collab.polls.question":"Question","collab.polls.questionPlaceholder":"What should we do?","collab.polls.addOption":"+ Add option","collab.polls.optionPlaceholder":"Option {n}","collab.polls.create":"Create Poll","collab.polls.close":"Close","collab.polls.closed":"Closed","collab.polls.votes":"{n} votes","collab.polls.vote":"{n} vote","collab.polls.multipleChoice":"Multiple choice","collab.polls.multiChoice":"Multiple choice","collab.polls.deadline":"Deadline","collab.polls.option":"Option","collab.polls.options":"Options","collab.polls.delete":"Delete","collab.polls.closedSection":"Closed","admin.tabs.permissions":"Permissions","perm.title":"Permission Settings","perm.subtitle":"Control who can perform actions across the application","perm.saved":"Permission settings saved","perm.resetDefaults":"Reset to defaults","perm.customized":"customized","perm.level.admin":"Admin only","perm.level.tripOwner":"Trip owner","perm.level.tripMember":"Trip members","perm.level.everybody":"Everyone","perm.cat.trip":"Trip Management","perm.cat.members":"Member Management","perm.cat.files":"Files","perm.cat.content":"Content & Schedule","perm.cat.extras":"Budget, Packing & Collaboration","perm.action.trip_create":"Create trips","perm.action.trip_edit":"Edit trip details","perm.action.trip_delete":"Delete trips","perm.action.trip_archive":"Archive / unarchive trips","perm.action.trip_cover_upload":"Upload cover image","perm.action.member_manage":"Add / remove members","perm.action.file_upload":"Upload files","perm.action.file_edit":"Edit file metadata","perm.action.file_delete":"Delete files","perm.action.place_edit":"Add / edit / delete places","perm.action.day_edit":"Edit days, notes & assignments","perm.action.reservation_edit":"Manage reservations","perm.action.budget_edit":"Manage budget","perm.action.packing_edit":"Manage packing lists","perm.action.collab_edit":"Collaboration (notes, polls, chat)","perm.action.share_manage":"Manage share links","perm.actionHint.trip_create":"Who can create new trips","perm.actionHint.trip_edit":"Who can change trip name, dates, description and currency","perm.actionHint.trip_delete":"Who can permanently delete a trip","perm.actionHint.trip_archive":"Who can archive or unarchive a trip","perm.actionHint.trip_cover_upload":"Who can upload or change the cover image","perm.actionHint.member_manage":"Who can invite or remove trip members","perm.actionHint.file_upload":"Who can upload files to a trip","perm.actionHint.file_edit":"Who can edit file descriptions and links","perm.actionHint.file_delete":"Who can move files to trash or permanently delete them","perm.actionHint.place_edit":"Who can add, edit or delete places","perm.actionHint.day_edit":"Who can edit days, day notes and place assignments","perm.actionHint.reservation_edit":"Who can create, edit or delete reservations","perm.actionHint.budget_edit":"Who can create, edit or delete budget items","perm.actionHint.packing_edit":"Who can manage packing items and bags","perm.actionHint.collab_edit":"Who can create notes, polls and send messages","perm.actionHint.share_manage":"Who can create or delete public share links"},yM={"common.save":"Guardar","common.cancel":"Cancelar","common.delete":"Eliminar","common.edit":"Editar","common.add":"Añadir","common.loading":"Cargando...","common.import":"Importar","common.error":"Error","common.back":"Atrás","common.all":"Todo","common.close":"Cerrar","common.open":"Abrir","common.upload":"Subir","common.search":"Buscar","common.confirm":"Confirmar","common.ok":"Aceptar","common.yes":"Sí","common.no":"No","common.or":"o","common.none":"Ninguno","common.date":"Fecha","common.rename":"Renombrar","common.name":"Nombre","common.email":"Correo","common.password":"Contraseña","common.saving":"Guardando...","common.saved":"Guardado","trips.reminder":"Recordatorio","trips.reminderNone":"Ninguno","trips.reminderDay":"día","trips.reminderDays":"días","trips.reminderCustom":"Personalizado","trips.reminderDaysBefore":"días antes de la salida","trips.reminderDisabledHint":"Los recordatorios de viaje están desactivados. Actívalos en Admin > Configuración > Notificaciones.","common.update":"Actualizar","common.change":"Cambiar","common.uploading":"Subiendo…","common.backToPlanning":"Volver a la planificación","common.reset":"Restablecer","nav.trip":"Viaje","nav.share":"Compartir","nav.settings":"Ajustes","nav.admin":"Administración","nav.logout":"Cerrar sesión","nav.lightMode":"Modo claro","nav.darkMode":"Modo oscuro","nav.autoMode":"Modo automático","nav.administrator":"Administrador","nav.myTrips":"Mis viajes","dashboard.title":"Mis viajes","dashboard.subtitle.loading":"Cargando viajes...","dashboard.subtitle.trips":"{count} viajes ({archived} archivados)","dashboard.subtitle.empty":"Empieza tu primer viaje","dashboard.subtitle.activeOne":"{count} viaje activo","dashboard.subtitle.activeMany":"{count} viajes activos","dashboard.subtitle.archivedSuffix":" · {count} archivados","dashboard.newTrip":"Nuevo viaje","dashboard.gridView":"Vista de cuadrícula","dashboard.listView":"Vista de lista","dashboard.currency":"Divisa","dashboard.timezone":"Zonas horarias","dashboard.localTime":"Hora local","dashboard.timezoneCustomTitle":"Zona horaria personalizada","dashboard.timezoneCustomLabelPlaceholder":"Nombre (opcional)","dashboard.timezoneCustomTzPlaceholder":"ej. America/New_York","dashboard.timezoneCustomAdd":"Añadir","dashboard.timezoneCustomErrorEmpty":"Introduce una zona horaria","dashboard.timezoneCustomErrorInvalid":"Zona horaria no válida. Usa formato como Europe/Madrid","dashboard.timezoneCustomErrorDuplicate":"Ya añadida","dashboard.emptyTitle":"Aún no hay viajes","dashboard.emptyText":"Crea tu primer viaje y empieza a planificar","dashboard.emptyButton":"Crear primer viaje","dashboard.nextTrip":"Próximo viaje","dashboard.shared":"Compartido","dashboard.sharedBy":"Compartido por {name}","dashboard.days":"Días","dashboard.places":"Lugares","dashboard.archive":"Archivar","dashboard.restore":"Restaurar","dashboard.archived":"Archivado","dashboard.status.ongoing":"En curso","dashboard.status.today":"Hoy","dashboard.status.tomorrow":"Mañana","dashboard.status.past":"Pasado","dashboard.status.daysLeft":"Quedan {count} días","dashboard.toast.loadError":"No se pudieron cargar los viajes","dashboard.toast.created":"¡Viaje creado correctamente!","dashboard.toast.createError":"No se pudo crear el viaje","dashboard.toast.updated":"¡Viaje actualizado!","dashboard.toast.updateError":"No se pudo actualizar el viaje","dashboard.toast.deleted":"Viaje eliminado","dashboard.toast.deleteError":"No se pudo eliminar el viaje","dashboard.toast.archived":"Viaje archivado","dashboard.toast.archiveError":"No se pudo archivar el viaje","dashboard.toast.restored":"Viaje restaurado","dashboard.toast.restoreError":"No se pudo restaurar el viaje","dashboard.confirm.delete":'¿Eliminar el viaje "{title}"? Todos los lugares y planes se borrarán permanentemente.',"dashboard.editTrip":"Editar viaje","dashboard.createTrip":"Crear nuevo viaje","dashboard.tripTitle":"Título","dashboard.tripTitlePlaceholder":"p. ej. Verano en Japón","dashboard.tripDescription":"Descripción","dashboard.tripDescriptionPlaceholder":"¿De qué trata este viaje?","dashboard.startDate":"Fecha de inicio","dashboard.endDate":"Fecha de fin","dashboard.noDateHint":"Sin fecha definida: se crearán 7 días por defecto. Puedes cambiarlo cuando quieras.","dashboard.coverImage":"Imagen de portada","dashboard.addCoverImage":"Añadir imagen de portada","dashboard.addMembers":"Compañeros de viaje","dashboard.addMember":"Añadir miembro","dashboard.coverSaved":"Imagen de portada guardada","dashboard.coverUploadError":"Error al subir la imagen","dashboard.coverRemoveError":"Error al eliminar la imagen","dashboard.titleRequired":"El título es obligatorio","dashboard.endDateError":"La fecha de fin debe ser posterior a la de inicio","settings.title":"Ajustes","settings.subtitle":"Configura tus ajustes personales","settings.map":"Mapa","settings.mapTemplate":"Plantilla del mapa","settings.mapTemplatePlaceholder.select":"Seleccionar plantilla...","settings.mapDefaultHint":"Déjalo vacío para OpenStreetMap (por defecto)","settings.mapTemplatePlaceholder":"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png","settings.mapHint":"Plantilla de URL para los mosaicos del mapa","settings.latitude":"Latitud","settings.longitude":"Longitud","settings.saveMap":"Guardar mapa","settings.apiKeys":"Claves API","settings.mapsKey":"Clave API de Google Maps","settings.mapsKeyHint":"Necesaria para buscar lugares. Consíguela en console.cloud.google.com","settings.weatherKey":"Clave API de OpenWeatherMap","settings.weatherKeyHint":"Para datos meteorológicos. Gratis en openweathermap.org/api","settings.keyPlaceholder":"Introduce la clave...","settings.configured":"Configurado","settings.saveKeys":"Guardar claves","settings.display":"Visualización","settings.colorMode":"Modo de color","settings.light":"Claro","settings.dark":"Oscuro","settings.auto":"Automático","settings.language":"Idioma","settings.temperature":"Unidad de temperatura","settings.timeFormat":"Formato de hora","settings.routeCalculation":"Cálculo de ruta","settings.blurBookingCodes":"Difuminar códigos de reserva","settings.notifications":"Notificaciones","settings.notifyTripInvite":"Invitaciones de viaje","settings.notifyBookingChange":"Cambios en reservas","settings.notifyTripReminder":"Recordatorios de viaje","settings.notifyVacayInvite":"Invitaciones de fusión Vacay","settings.notifyPhotosShared":"Fotos compartidas (Immich)","settings.notifyCollabMessage":"Mensajes de chat (Collab)","settings.notifyPackingTagged":"Lista de equipaje: asignaciones","settings.notifyWebhook":"Notificaciones webhook","settings.notificationsDisabled":"Las notificaciones no están configuradas. Pida a un administrador que active las notificaciones por correo o webhook.","settings.notificationsActive":"Canal activo","settings.notificationsManagedByAdmin":"Los eventos de notificación son configurados por el administrador.","admin.notifications.title":"Notificaciones","admin.notifications.hint":"Elija un canal de notificación. Solo uno puede estar activo a la vez.","admin.notifications.none":"Desactivado","admin.notifications.email":"Correo (SMTP)","admin.notifications.webhook":"Webhook","admin.notifications.events":"Eventos de notificación","admin.notifications.eventsHint":"Elige qué eventos activan notificaciones para todos los usuarios.","admin.notifications.configureFirst":"Configura primero los ajustes SMTP o webhook a continuación, luego activa los eventos.","admin.notifications.save":"Guardar configuración de notificaciones","admin.notifications.saved":"Configuración de notificaciones guardada","admin.notifications.testWebhook":"Enviar webhook de prueba","admin.notifications.testWebhookSuccess":"Webhook de prueba enviado correctamente","admin.notifications.testWebhookFailed":"Error al enviar webhook de prueba","admin.smtp.title":"Correo y notificaciones","admin.smtp.hint":"Configuración SMTP para el envío de notificaciones por correo.","admin.smtp.testButton":"Enviar correo de prueba","admin.webhook.hint":"Enviar notificaciones a un webhook externo (Discord, Slack, etc.).","admin.smtp.testSuccess":"Correo de prueba enviado correctamente","admin.smtp.testFailed":"Error al enviar correo de prueba","dayplan.icsTooltip":"Exportar calendario (ICS)","share.linkTitle":"Enlace público","share.linkHint":"Crea un enlace que cualquiera puede usar para ver este viaje sin iniciar sesión. Solo lectura — no se puede editar.","share.createLink":"Crear enlace","share.deleteLink":"Eliminar enlace","share.createError":"No se pudo crear el enlace","common.copy":"Copiar","common.copied":"Copiado","share.permMap":"Mapa y plan","share.permBookings":"Reservas","share.permPacking":"Equipaje","shared.expired":"Enlace expirado o inválido","shared.expiredHint":"Este enlace de viaje compartido ya no está activo.","shared.readOnly":"Vista de solo lectura","shared.tabPlan":"Plan","shared.tabBookings":"Reservas","shared.tabPacking":"Equipaje","shared.tabBudget":"Presupuesto","shared.tabChat":"Chat","shared.days":"días","shared.places":"lugares","shared.other":"Otro","shared.totalBudget":"Presupuesto total","shared.messages":"mensajes","shared.sharedVia":"Compartido vía","shared.confirmed":"Confirmado","shared.pending":"Pendiente","share.permBudget":"Presupuesto","share.permCollab":"Chat","settings.on":"Activado","settings.off":"Desactivado","settings.mcp.title":"Configuración MCP","settings.mcp.endpoint":"Endpoint MCP","settings.mcp.clientConfig":"Configuración del cliente","settings.mcp.clientConfigHint":"Reemplaza con un token de la lista de abajo. Es posible que debas ajustar la ruta de npx según tu sistema (p. ej. C:\\PROGRA~1\\nodejs\\npx.cmd en Windows).","settings.mcp.copy":"Copiar","settings.mcp.copied":"¡Copiado!","settings.mcp.apiTokens":"Tokens de API","settings.mcp.createToken":"Crear nuevo token","settings.mcp.noTokens":"Sin tokens aún. Crea uno para conectar clientes MCP.","settings.mcp.tokenCreatedAt":"Creado","settings.mcp.tokenUsedAt":"Usado","settings.mcp.deleteTokenTitle":"Eliminar token","settings.mcp.deleteTokenMessage":"Este token dejará de funcionar de inmediato. Cualquier cliente MCP que lo use perderá el acceso.","settings.mcp.modal.createTitle":"Crear token de API","settings.mcp.modal.tokenName":"Nombre del token","settings.mcp.modal.tokenNamePlaceholder":"p. ej. Claude Desktop, Portátil de trabajo","settings.mcp.modal.creating":"Creando…","settings.mcp.modal.create":"Crear token","settings.mcp.modal.createdTitle":"Token creado","settings.mcp.modal.createdWarning":"Este token solo se mostrará una vez. Cópialo y guárdalo ahora — no se podrá recuperar.","settings.mcp.modal.done":"Listo","settings.mcp.toast.created":"Token creado","settings.mcp.toast.createError":"Error al crear el token","settings.mcp.toast.deleted":"Token eliminado","settings.mcp.toast.deleteError":"Error al eliminar el token","settings.account":"Cuenta","settings.username":"Usuario","settings.email":"Correo","settings.role":"Rol","settings.roleAdmin":"Administrador","settings.oidcLinked":"Vinculado con","settings.changePassword":"Cambiar contraseña","settings.mustChangePassword":"Debe cambiar su contraseña antes de continuar. Establezca una nueva contraseña a continuación.","settings.currentPassword":"Contraseña actual","settings.newPassword":"Nueva contraseña","settings.confirmPassword":"Confirmar nueva contraseña","settings.updatePassword":"Actualizar contraseña","settings.passwordRequired":"Introduce la contraseña actual y la nueva","settings.passwordTooShort":"La contraseña debe tener al menos 8 caracteres","settings.passwordMismatch":"Las contraseñas no coinciden","settings.passwordChanged":"Contraseña cambiada correctamente","settings.deleteAccount":"Eliminar cuenta","settings.deleteAccountTitle":"¿Eliminar tu cuenta?","settings.deleteAccountWarning":"Tu cuenta y todos tus viajes, lugares y archivos se eliminarán permanentemente. Esta acción no se puede deshacer.","settings.deleteAccountConfirm":"Eliminar permanentemente","settings.deleteBlockedTitle":"No es posible eliminarla","settings.deleteBlockedMessage":"Eres el único administrador. Asciende a otro usuario a administrador antes de eliminar tu cuenta.","settings.roleUser":"Usuario","settings.saveProfile":"Guardar perfil","settings.mfa.title":"Autenticación de dos factores (2FA)","settings.mfa.description":"Añade un segundo paso al iniciar sesión. Usa una app de autenticación (Google Authenticator, Authy, etc.).","settings.mfa.requiredByPolicy":"Tu administrador exige autenticación en dos factores. Configura una app de autenticación abajo antes de continuar.","settings.mfa.backupTitle":"Códigos de respaldo","settings.mfa.backupDescription":"Usa estos códigos de un solo uso si pierdes acceso a tu app autenticadora.","settings.mfa.backupWarning":"Guárdalos ahora. Cada código solo se puede usar una vez.","settings.mfa.backupCopy":"Copiar códigos","settings.mfa.backupDownload":"Descargar TXT","settings.mfa.backupPrint":"Imprimir / PDF","settings.mfa.backupCopied":"Códigos de respaldo copiados","settings.mfa.enabled":"2FA está activado en tu cuenta.","settings.mfa.disabled":"2FA no está activado.","settings.mfa.setup":"Configurar autenticador","settings.mfa.scanQr":"Escanea este código QR con tu app o introduce la clave manualmente.","settings.mfa.secretLabel":"Clave secreta (entrada manual)","settings.mfa.codePlaceholder":"Código de 6 dígitos","settings.mfa.enable":"Activar 2FA","settings.mfa.cancelSetup":"Cancelar","settings.mfa.disableTitle":"Desactivar 2FA","settings.mfa.disableHint":"Introduce tu contraseña y un código actual de tu autenticador.","settings.mfa.disable":"Desactivar 2FA","settings.mfa.toastEnabled":"Autenticación de dos factores activada","settings.mfa.toastDisabled":"Autenticación de dos factores desactivada","settings.mfa.demoBlocked":"No disponible en modo demo","settings.toast.mapSaved":"Ajustes del mapa guardados","settings.toast.keysSaved":"Claves API guardadas","settings.toast.displaySaved":"Ajustes de visualización guardados","settings.toast.profileSaved":"Perfil guardado","settings.uploadAvatar":"Subir foto de perfil","settings.removeAvatar":"Eliminar foto de perfil","settings.avatarUploaded":"Foto de perfil actualizada","settings.avatarRemoved":"Foto de perfil eliminada","settings.avatarError":"Falló la subida","login.error":"Inicio de sesión fallido. Revisa tus credenciales.","login.tagline":`Tus viajes. Tu plan.`,"login.description":"Planifica viajes en colaboración con mapas interactivos, presupuestos y sincronización en tiempo real.","login.features.maps":"Mapas interactivos","login.features.mapsDesc":"Google Places, rutas y agrupación","login.features.realtime":"Sincronización en tiempo real","login.features.realtimeDesc":"Planificad juntos mediante WebSocket","login.features.budget":"Control de presupuesto","login.features.budgetDesc":"Categorías, gráficos y costes por persona","login.features.collab":"Colaboración","login.features.collabDesc":"Multiusuario con viajes compartidos","login.features.packing":"Listas de equipaje","login.features.packingDesc":"Categorías, progreso y sugerencias","login.features.bookings":"Reservas","login.features.bookingsDesc":"Vuelos, hoteles, restaurantes y más","login.features.files":"Documentos","login.features.filesDesc":"Sube y gestiona documentos","login.features.routes":"Rutas inteligentes","login.features.routesDesc":"Optimización automática y exportación a Google Maps","login.selfHosted":"Autoalojado · Código abierto · Tus datos siguen siendo tuyos","login.title":"Iniciar sesión","login.subtitle":"Bienvenido de nuevo","login.signingIn":"Iniciando sesión…","login.signIn":"Entrar","login.createAdmin":"Crear cuenta de administrador","login.createAdminHint":"Configura la primera cuenta administradora de NOMAD.","login.setNewPassword":"Establecer nueva contraseña","login.setNewPasswordHint":"Debe cambiar su contraseña antes de continuar.","login.createAccount":"Crear cuenta","login.createAccountHint":"Crea una cuenta nueva.","login.creating":"Creando…","login.noAccount":"¿No tienes cuenta?","login.hasAccount":"¿Ya tienes cuenta?","login.register":"Registrarse","login.emailPlaceholder":"tu@correo.com","login.username":"Usuario","login.oidc.registrationDisabled":"El registro está desactivado. Contacta con tu administrador.","login.oidc.noEmail":"No se recibió ningún correo del proveedor.","login.mfaTitle":"Autenticación de dos factores","login.mfaSubtitle":"Introduce el código de 6 dígitos de tu app de autenticación.","login.mfaCodeLabel":"Código de verificación","login.mfaCodeRequired":"Introduce el código de tu app de autenticación.","login.mfaHint":"Abre Google Authenticator, Authy u otra app TOTP.","login.mfaBack":"← Volver al inicio de sesión","login.mfaVerify":"Verificar","login.oidc.tokenFailed":"La autenticación falló.","login.oidc.invalidState":"Sesión no válida. Inténtalo de nuevo.","login.demoFailed":"Falló el acceso a la demo","login.oidcSignIn":"Entrar con {name}","login.demoHint":"Prueba la demo: no necesitas registrarte","register.passwordMismatch":"Las contraseñas no coinciden","register.passwordTooShort":"La contraseña debe tener al menos 8 caracteres","register.failed":"Falló el registro","register.getStarted":"Empezar","register.subtitle":"Crea una cuenta y empieza a planificar tus viajes.","register.feature1":"Planes de viaje ilimitados","register.feature2":"Vista de mapa interactiva","register.feature3":"Gestiona lugares y categorías","register.feature4":"Haz seguimiento de las reservas","register.feature5":"Crea listas de equipaje","register.feature6":"Guarda fotos y archivos","register.createAccount":"Crear cuenta","register.startPlanning":"Empieza a planificar tu viaje","register.minChars":"Mín. 6 caracteres","register.confirmPassword":"Confirmar contraseña","register.repeatPassword":"Repetir contraseña","register.registering":"Registrando...","register.register":"Registrarse","register.hasAccount":"¿Ya tienes cuenta?","register.signIn":"Iniciar sesión","admin.title":"Administración","admin.subtitle":"Gestión de usuarios y ajustes del sistema","admin.tabs.users":"Usuarios","admin.tabs.categories":"Categorías","admin.tabs.backup":"Copia de seguridad","admin.tabs.audit":"Registro de auditoría","admin.stats.users":"Usuarios","admin.stats.trips":"Viajes","admin.stats.places":"Lugares","admin.stats.photos":"Fotos","admin.stats.files":"Archivos","admin.table.user":"Usuario","admin.table.email":"Correo","admin.table.role":"Rol","admin.table.created":"Creado","admin.table.lastLogin":"Último acceso","admin.table.actions":"Acciones","admin.you":"(Tú)","admin.editUser":"Editar usuario","admin.newPassword":"Nueva contraseña","admin.newPasswordHint":"Déjalo vacío para mantener la contraseña actual","admin.deleteUser":'¿Eliminar al usuario "{name}"? Todos sus viajes se borrarán permanentemente.',"admin.deleteUserTitle":"Eliminar usuario","admin.newPasswordPlaceholder":"Introduce una nueva contraseña…","admin.toast.loadError":"No se pudieron cargar los datos de administración","admin.toast.userUpdated":"Usuario actualizado","admin.toast.updateError":"No se pudo actualizar","admin.toast.userDeleted":"Usuario eliminado","admin.toast.deleteError":"No se pudo eliminar","admin.toast.cannotDeleteSelf":"No puedes eliminar tu propia cuenta","admin.toast.userCreated":"Usuario creado","admin.toast.createError":"No se pudo crear el usuario","admin.toast.fieldsRequired":"Usuario, correo y contraseña son obligatorios","admin.createUser":"Crear usuario","admin.invite.title":"Enlaces de invitación","admin.invite.subtitle":"Crear enlaces de registro de un solo uso","admin.invite.create":"Crear enlace","admin.invite.createAndCopy":"Crear y copiar","admin.invite.empty":"No se han creado enlaces de invitación","admin.invite.maxUses":"Usos máx.","admin.invite.expiry":"Expira después de","admin.invite.uses":"usado(s)","admin.invite.expiresAt":"expira el","admin.invite.createdBy":"por","admin.invite.active":"Activo","admin.invite.expired":"Expirado","admin.invite.usedUp":"Agotado","admin.invite.copied":"Enlace de invitación copiado","admin.invite.copyLink":"Copiar enlace","admin.invite.deleted":"Enlace de invitación eliminado","admin.invite.createError":"Error al crear el enlace","admin.invite.deleteError":"Error al eliminar el enlace","admin.tabs.settings":"Ajustes","admin.allowRegistration":"Permitir el registro","admin.allowRegistrationHint":"Los nuevos usuarios pueden registrarse por sí mismos","admin.requireMfa":"Exigir autenticación en dos factores (2FA)","admin.requireMfaHint":"Los usuarios sin 2FA deben completar la configuración en Ajustes antes de usar la aplicación.","admin.apiKeys":"Claves API","admin.apiKeysHint":"Opcional. Activa datos ampliados de lugares, como fotos y previsión del tiempo.","admin.mapsKey":"Clave API de Google Maps","admin.mapsKeyHint":"Obligatoria para buscar lugares. Consíguela en console.cloud.google.com","admin.mapsKeyHintLong":"Sin una clave API, la búsqueda de lugares usa OpenStreetMap. Con una clave de Google también se pueden cargar fotos, valoraciones y horarios de apertura. Consíguela en console.cloud.google.com.","admin.recommended":"Recomendado","admin.weatherKey":"Clave API de OpenWeatherMap","admin.weatherKeyHint":"Para datos meteorológicos. Gratis en openweathermap.org","admin.validateKey":"Probar","admin.keyValid":"Conectado","admin.keyInvalid":"No válida","admin.keySaved":"Claves API guardadas","admin.oidcTitle":"Inicio de sesión único (OIDC)","admin.oidcSubtitle":"Permite iniciar sesión mediante proveedores externos como Google, Apple, Authentik o Keycloak.","admin.oidcDisplayName":"Nombre visible","admin.oidcIssuer":"URL del emisor","admin.oidcIssuerHint":"La URL Issuer de OpenID Connect del proveedor. Ej.: https://accounts.google.com","admin.oidcSaved":"Configuración OIDC guardada","admin.fileTypes":"Tipos de archivo permitidos","admin.fileTypesHint":"Configura qué tipos de archivo pueden subir los usuarios.","admin.fileTypesFormat":"Extensiones separadas por comas (p. ej. jpg,png,pdf,doc). Usa * para permitir todos los tipos.","admin.fileTypesSaved":"Ajustes de tipos de archivo guardados","admin.bagTracking.title":"Seguimiento de equipaje","admin.bagTracking.subtitle":"Activar peso y asignación de equipaje para artículos de la lista","admin.tabs.config":"Configuración","admin.tabs.templates":"Plantillas de equipaje","admin.packingTemplates.title":"Plantillas de equipaje","admin.packingTemplates.subtitle":"Crear listas de equipaje reutilizables para tus viajes","admin.packingTemplates.create":"Nueva plantilla","admin.packingTemplates.namePlaceholder":"Nombre de la plantilla (ej. Vacaciones en la playa)","admin.packingTemplates.empty":"No se han creado plantillas aún","admin.packingTemplates.items":"artículos","admin.packingTemplates.categories":"categorías","admin.packingTemplates.itemName":"Nombre del artículo","admin.packingTemplates.itemCategory":"Categoría","admin.packingTemplates.categoryName":"Nombre de categoría (ej. Ropa)","admin.packingTemplates.addCategory":"Añadir categoría","admin.packingTemplates.created":"Plantilla creada","admin.packingTemplates.deleted":"Plantilla eliminada","admin.packingTemplates.loadError":"Error al cargar plantillas","admin.packingTemplates.createError":"Error al crear plantilla","admin.packingTemplates.deleteError":"Error al eliminar plantilla","admin.packingTemplates.saveError":"Error al guardar","admin.tabs.addons":"Complementos","admin.addons.title":"Complementos","admin.addons.subtitle":"Activa o desactiva funciones para personalizar tu experiencia en NOMAD.","admin.addons.subtitleBefore":"Activa o desactiva funciones para personalizar tu experiencia en ","admin.addons.subtitleAfter":".","admin.addons.enabled":"Activo","admin.addons.disabled":"Desactivado","admin.addons.type.trip":"Viaje","admin.addons.type.global":"Global","admin.addons.type.integration":"Integración","admin.addons.tripHint":"Disponible como pestaña dentro de cada viaje","admin.addons.globalHint":"Disponible como sección independiente en la navegación principal","admin.addons.integrationHint":"Servicios backend e integraciones de API sin página dedicada","admin.addons.toast.updated":"Complemento actualizado","admin.addons.toast.error":"No se pudo actualizar el complemento","admin.addons.noAddons":"No hay complementos disponibles","admin.weather.title":"Datos meteorológicos","admin.weather.badge":"Desde el 24 de marzo de 2026","admin.weather.description":"NOMAD utiliza Open-Meteo como fuente de datos meteorológicos. Open-Meteo es un servicio meteorológico gratuito y de código abierto: no requiere clave API.","admin.weather.forecast":"Pronóstico de 16 días","admin.weather.forecastDesc":"Antes eran 5 días (OpenWeatherMap)","admin.weather.climate":"Datos climáticos históricos","admin.weather.climateDesc":"Promedios de los últimos 85 años para fechas posteriores al pronóstico de 16 días","admin.weather.requests":"10.000 solicitudes / día","admin.weather.requestsDesc":"Gratis, sin necesidad de clave API","admin.weather.locationHint":"El tiempo se basa en el primer lugar con coordenadas de cada día. Si no hay ningún lugar asignado a un día, se usa como referencia cualquier lugar de la lista.","admin.tabs.mcpTokens":"Tokens MCP","admin.mcpTokens.title":"Tokens MCP","admin.mcpTokens.subtitle":"Gestionar tokens de API de todos los usuarios","admin.mcpTokens.owner":"Propietario","admin.mcpTokens.tokenName":"Nombre del token","admin.mcpTokens.created":"Creado","admin.mcpTokens.lastUsed":"Último uso","admin.mcpTokens.never":"Nunca","admin.mcpTokens.empty":"Aún no se han creado tokens MCP","admin.mcpTokens.deleteTitle":"Eliminar token","admin.mcpTokens.deleteMessage":"Este token se revocará inmediatamente. El usuario perderá el acceso MCP a través de este token.","admin.mcpTokens.deleteSuccess":"Token eliminado","admin.mcpTokens.deleteError":"No se pudo eliminar el token","admin.mcpTokens.loadError":"No se pudieron cargar los tokens","admin.tabs.github":"GitHub","admin.audit.subtitle":"Eventos sensibles de seguridad y administración (copias de seguridad, usuarios, MFA, ajustes).","admin.audit.empty":"Aún no hay entradas de auditoría.","admin.audit.refresh":"Actualizar","admin.audit.loadMore":"Cargar más","admin.audit.showing":"{count} cargados · {total} en total","admin.audit.col.time":"Fecha y hora","admin.audit.col.user":"Usuario","admin.audit.col.action":"Acción","admin.audit.col.resource":"Recurso","admin.audit.col.ip":"IP","admin.audit.col.details":"Detalles","admin.github.title":"Historial de versiones","admin.github.subtitle":"Últimas novedades de {repo}","admin.github.latest":"Última","admin.github.prerelease":"Prelanzamiento","admin.github.showDetails":"Mostrar detalles","admin.github.hideDetails":"Ocultar detalles","admin.github.loadMore":"Cargar más","admin.github.loading":"Cargando...","admin.github.support":"Ayuda a seguir desarrollando TREK","admin.github.error":"No se pudieron cargar las versiones","admin.github.by":"por","admin.update.available":"Actualización disponible","admin.update.text":"NOMAD {version} está disponible. Estás usando {current}.","admin.update.button":"Ver en GitHub","admin.update.install":"Instalar actualización","admin.update.confirmTitle":"¿Instalar actualización?","admin.update.confirmText":"NOMAD se actualizará de {current} a {version}. Después, el servidor se reiniciará automáticamente.","admin.update.dataInfo":"Todos tus datos (viajes, usuarios, claves API, subidas, Vacay, Atlas, presupuestos) se conservarán.","admin.update.warning":"La app estará brevemente no disponible durante el reinicio.","admin.update.confirm":"Actualizar ahora","admin.update.installing":"Actualizando…","admin.update.success":"¡Actualización instalada! El servidor se está reiniciando…","admin.update.failed":"La actualización falló","admin.update.backupHint":"Recomendamos crear una copia de seguridad antes de actualizar.","admin.update.backupLink":"Ir a Copia de seguridad","admin.update.howTo":"Cómo actualizar","admin.update.dockerText":"Tu instancia de NOMAD se ejecuta en Docker. Para actualizar a {version}, ejecuta los siguientes comandos en tu servidor:","admin.update.reloadHint":"Recarga la página en unos segundos.","vacay.subtitle":"Planifica y gestiona días de vacaciones","vacay.settings":"Ajustes","vacay.year":"Año","vacay.addYear":"Añadir año","vacay.removeYear":"Eliminar año","vacay.removeYearConfirm":"¿Eliminar {year}?","vacay.removeYearHint":"Todas las vacaciones y festivos de empresa de este año se borrarán permanentemente.","vacay.remove":"Eliminar","vacay.persons":"Personas","vacay.noPersons":"No se han añadido personas","vacay.addPerson":"Añadir persona","vacay.editPerson":"Editar persona","vacay.removePerson":"Eliminar persona","vacay.removePersonConfirm":"¿Eliminar a {name}?","vacay.removePersonHint":"Todas las vacaciones de esta persona se borrarán permanentemente.","vacay.personName":"Nombre","vacay.personNamePlaceholder":"Introduce un nombre","vacay.color":"Color","vacay.add":"Añadir","vacay.legend":"Leyenda","vacay.publicHoliday":"Festivo","vacay.companyHoliday":"Festivo de empresa","vacay.weekend":"Fin de semana","vacay.modeVacation":"Vacaciones","vacay.modeCompany":"Festivo de empresa","vacay.entitlement":"Derecho","vacay.entitlementDays":"Días","vacay.used":"Usados","vacay.remaining":"Restantes","vacay.carriedOver":"de {year}","vacay.blockWeekends":"Bloquear fines de semana","vacay.blockWeekendsHint":"Impide marcar vacaciones en sábados y domingos","vacay.weekendDays":"Días de fin de semana","vacay.mon":"Lun","vacay.tue":"Mar","vacay.wed":"Mié","vacay.thu":"Jue","vacay.fri":"Vie","vacay.sat":"Sáb","vacay.sun":"Dom","vacay.publicHolidays":"Festivos","vacay.publicHolidaysHint":"Marcar festivos en el calendario","vacay.selectCountry":"Seleccionar país","vacay.selectRegion":"Seleccionar región (opcional)","vacay.companyHolidays":"Festivos de empresa","vacay.companyHolidaysHint":"Permitir marcar días festivos comunes de la empresa","vacay.companyHolidaysNoDeduct":"Los festivos de empresa no descuentan días de vacaciones.","vacay.carryOver":"Arrastrar saldo","vacay.carryOverHint":"Trasladar automáticamente los días restantes al año siguiente","vacay.sharing":"Compartir","vacay.sharingHint":"Comparte tu calendario de vacaciones con otros usuarios de NOMAD","vacay.owner":"Propietario","vacay.shareEmailPlaceholder":"Correo electrónico del usuario de NOMAD","vacay.shareSuccess":"Plan compartido correctamente","vacay.shareError":"No se pudo compartir el plan","vacay.dissolve":"Deshacer fusión","vacay.dissolveHint":"Separar de nuevo los calendarios. Tus entradas se conservarán.","vacay.dissolveAction":"Disolver","vacay.dissolved":"Calendario separado","vacay.fusedWith":"Fusionado con","vacay.you":"tú","vacay.noData":"Sin datos","vacay.changeColor":"Cambiar color","vacay.inviteUser":"Invitar usuario","vacay.inviteHint":"Invita a otro usuario de NOMAD a compartir un calendario combinado de vacaciones.","vacay.selectUser":"Seleccionar usuario","vacay.sendInvite":"Enviar invitación","vacay.inviteSent":"Invitación enviada","vacay.inviteError":"No se pudo enviar la invitación","vacay.pending":"pendiente","vacay.noUsersAvailable":"No hay usuarios disponibles","vacay.accept":"Aceptar","vacay.decline":"Rechazar","vacay.acceptFusion":"Aceptar y fusionar","vacay.inviteTitle":"Solicitud de fusión","vacay.inviteWantsToFuse":"quiere compartir un calendario de vacaciones contigo.","vacay.fuseInfo1":"Ambos veréis todas las entradas de vacaciones en un único calendario compartido.","vacay.fuseInfo2":"Ambas partes pueden crear y editar entradas mutuamente.","vacay.fuseInfo3":"Ambas partes pueden borrar entradas y cambiar el número de días de vacaciones disponibles.","vacay.fuseInfo4":"Ajustes como festivos y festivos de empresa se comparten.","vacay.fuseInfo5":"La fusión puede disolverse en cualquier momento por cualquiera de las partes. Tus entradas se conservarán.","vacay.addCalendar":"Añadir calendario","vacay.calendarColor":"Color","vacay.calendarLabel":"Etiqueta","vacay.noCalendars":"Sin calendarios","atlas.subtitle":"Tu huella viajera por el mundo","atlas.countries":"Países","atlas.trips":"Viajes","atlas.places":"Lugares","atlas.days":"Días","atlas.visitedCountries":"Países visitados","atlas.cities":"Ciudades","atlas.noData":"Aún no hay datos de viaje","atlas.noDataHint":"Crea un viaje y añade lugares para ver tu mapa del mundo","atlas.lastTrip":"Último viaje","atlas.nextTrip":"Próximo viaje","atlas.daysLeft":"días restantes","atlas.streak":"Racha","atlas.year":"año","atlas.years":"años","atlas.yearInRow":"año seguido","atlas.yearsInRow":"años seguidos","atlas.tripIn":"viaje en","atlas.tripsIn":"viajes en","atlas.since":"desde","atlas.europe":"Europa","atlas.asia":"Asia","atlas.northAmerica":"América del Norte","atlas.southAmerica":"América del Sur","atlas.africa":"África","atlas.oceania":"Oceanía","atlas.other":"Otros","atlas.firstVisit":"Primer viaje","atlas.lastVisitLabel":"Último viaje","atlas.tripSingular":"Viaje","atlas.tripPlural":"Viajes","atlas.placeVisited":"Lugar visitado","atlas.placesVisited":"Lugares visitados","atlas.statsTab":"Estadísticas","atlas.bucketTab":"Lista de deseos","atlas.addBucket":"Añadir a lista de deseos","atlas.bucketNamePlaceholder":"Lugar o destino...","atlas.bucketNotesPlaceholder":"Notas (opcional)","atlas.bucketEmpty":"Tu lista de deseos está vacía","atlas.bucketEmptyHint":"Añade lugares que sueñas con visitar","atlas.unmark":"Eliminar","atlas.confirmMark":"¿Marcar este país como visitado?","atlas.confirmUnmark":"¿Eliminar este país de tu lista de visitados?","atlas.markVisited":"Marcar como visitado","atlas.markVisitedHint":"Añadir este país a tu lista de visitados","atlas.addToBucket":"Añadir a lista de deseos","atlas.addPoi":"Añadir lugar","atlas.searchCountry":"Buscar un país...","atlas.month":"Mes","atlas.addToBucketHint":"Guardar como lugar que quieres visitar","atlas.bucketWhen":"¿Cuándo planeas visitarlo?","trip.tabs.plan":"Plan","trip.tabs.reservations":"Reservas","trip.tabs.reservationsShort":"Reservas","trip.tabs.packing":"Lista de equipaje","trip.tabs.packingShort":"Equipaje","trip.tabs.budget":"Presupuesto","trip.tabs.files":"Archivos","trip.loading":"Cargando viaje...","trip.loadingPhotos":"Cargando fotos de los lugares...","trip.mobilePlan":"Plan","trip.mobilePlaces":"Lugares","trip.toast.placeUpdated":"Lugar actualizado","trip.toast.placeAdded":"Lugar añadido","trip.toast.placeDeleted":"Lugar eliminado","trip.toast.selectDay":"Selecciona primero un día","trip.toast.assignedToDay":"Lugar asignado al día","trip.toast.reorderError":"No se pudo reordenar","trip.toast.reservationUpdated":"Reserva actualizada","trip.toast.reservationAdded":"Reserva añadida","trip.toast.deleted":"Eliminado","trip.confirm.deletePlace":"¿Seguro que quieres eliminar este lugar?","dayplan.emptyDay":"No hay lugares planificados para este día","dayplan.addNote":"Añadir nota","dayplan.editNote":"Editar nota","dayplan.noteAdd":"Añadir nota","dayplan.noteEdit":"Editar nota","dayplan.noteTitle":"Nota","dayplan.noteSubtitle":"Nota diaria","dayplan.totalCost":"Coste total","dayplan.days":"Días","dayplan.dayN":"Día {n}","dayplan.calculating":"Calculando...","dayplan.route":"Ruta","dayplan.optimize":"Optimizar","dayplan.optimized":"Ruta optimizada","dayplan.routeError":"No se pudo calcular la ruta","dayplan.toast.needTwoPlaces":"Se necesitan al menos dos lugares para optimizar la ruta","dayplan.toast.routeOptimized":"Ruta optimizada","dayplan.toast.noGeoPlaces":"No se encontraron lugares con coordenadas para calcular la ruta","dayplan.confirmed":"Confirmado","dayplan.pendingRes":"Pendiente","dayplan.pdf":"PDF","dayplan.pdfTooltip":"Exportar plan diario como PDF","dayplan.pdfError":"No se pudo exportar el PDF","dayplan.cannotReorderTransport":"Las reservas con hora fija no se pueden reordenar","dayplan.confirmRemoveTimeTitle":"¿Eliminar hora?","dayplan.confirmRemoveTimeBody":"Este lugar tiene una hora fija ({time}). Al moverlo se eliminará la hora y se permitirá el orden libre.","dayplan.confirmRemoveTimeAction":"Eliminar hora y mover","dayplan.cannotDropOnTimed":"No se pueden colocar elementos entre entradas con hora fija","dayplan.cannotBreakChronology":"Esto rompería el orden cronológico de los elementos y reservas programados","places.addPlace":"Añadir lugar/actividad","places.importGpx":"GPX","places.gpxImported":"{count} lugares importados desde GPX","places.gpxError":"Error al importar GPX","places.importGoogleList":"Lista Google","places.googleListHint":"Pega un enlace compartido de una lista de Google Maps para importar todos los lugares.","places.googleListImported":'{count} lugares importados de "{list}"',"places.googleListError":"Error al importar la lista de Google Maps","places.viewDetails":"Ver detalles","places.urlResolved":"Lugar importado desde URL","places.assignToDay":"¿A qué día añadirlo?","places.all":"Todo","places.unplanned":"Sin planificar","places.search":"Buscar lugares...","places.allCategories":"Todas las categorías","places.categoriesSelected":"categorías","places.clearFilter":"Borrar filtro","places.count":"{count} lugares","places.countSingular":"1 lugar","places.allPlanned":"Todos los lugares están planificados","places.noneFound":"No se encontraron lugares","places.editPlace":"Editar lugar","places.formName":"Nombre","places.formNamePlaceholder":"p. ej. Torre Eiffel","places.formDescription":"Descripción","places.formDescriptionPlaceholder":"Descripción breve...","places.formAddress":"Dirección","places.formAddressPlaceholder":"Calle, ciudad, país","places.formLat":"Latitud (p. ej. 48.8566)","places.formLng":"Longitud (p. ej. 2.3522)","places.formCategory":"Categoría","places.noCategory":"Sin categoría","places.categoryNamePlaceholder":"Nombre de la categoría","places.formTime":"Hora","places.startTime":"Inicio","places.endTime":"Fin","places.endTimeBeforeStart":"La hora de fin es anterior a la de inicio","places.timeCollision":"Solapamiento horario con:","places.formWebsite":"Página web","places.formNotesPlaceholder":"Notas personales...","places.formReservation":"Reserva","places.reservationNotesPlaceholder":"Notas de reserva, número de confirmación...","places.mapsSearchPlaceholder":"Buscar lugares...","places.mapsSearchError":"La búsqueda de lugares falló.","places.osmHint":"Usando búsqueda con OpenStreetMap (sin fotos, horarios ni valoraciones). Añade una clave API de Google en Ajustes para obtener todos los detalles.","places.osmActive":"Búsqueda mediante OpenStreetMap (sin fotos, valoraciones ni horarios). Añade una clave API de Google en Ajustes para datos ampliados.","places.categoryCreateError":"No se pudo crear la categoría","places.nameRequired":"Introduce un nombre","places.saveError":"No se pudo guardar","inspector.opened":"Abierto","inspector.closed":"Cerrado","inspector.openingHours":"Horario de apertura","inspector.showHours":"Mostrar horario","inspector.files":"Archivos","inspector.filesCount":"{count} archivos","inspector.removeFromDay":"Quitar del día","inspector.addToDay":"Añadir al día","inspector.confirmedRes":"Reserva confirmada","inspector.pendingRes":"Reserva pendiente","inspector.google":"Abrir en Google Maps","inspector.website":"Abrir la web","inspector.addRes":"Reserva","inspector.editRes":"Editar reserva","inspector.participants":"Participantes","inspector.trackStats":"Datos de la ruta","reservations.title":"Reservas","reservations.empty":"Aún no hay reservas","reservations.emptyHint":"Añade reservas de vuelos, hoteles y más","reservations.add":"Añadir reserva","reservations.addManual":"Reserva manual","reservations.placeHint":"Consejo: es mejor crear las reservas directamente desde un lugar para vincularlas con el plan del día.","reservations.confirmed":"Confirmada","reservations.pending":"Pendiente","reservations.summary":"{confirmed} confirmadas, {pending} pendientes","reservations.fromPlan":"Del plan","reservations.showFiles":"Mostrar archivos","reservations.editTitle":"Editar reserva","reservations.status":"Estado","reservations.datetime":"Fecha y hora","reservations.startTime":"Hora de inicio","reservations.endTime":"Hora de fin","reservations.date":"Fecha","reservations.time":"Hora","reservations.timeAlt":"Hora (alternativa, p. ej. 19:30)","reservations.notes":"Notas","reservations.notesPlaceholder":"Notas adicionales...","reservations.type.flight":"Vuelo","reservations.type.hotel":"Alojamiento","reservations.type.restaurant":"Restaurante","reservations.type.train":"Tren","reservations.type.car":"Coche de alquiler","reservations.type.cruise":"Crucero","reservations.type.event":"Evento","reservations.type.tour":"Tour","reservations.type.other":"Otro","reservations.confirm.delete":'¿Seguro que quieres eliminar la reserva "{name}"?',"reservations.confirm.deleteTitle":"¿Eliminar reserva?","reservations.confirm.deleteBody":"« {name} » se eliminará permanentemente.","reservations.toast.updated":"Reserva actualizada","reservations.toast.removed":"Reserva eliminada","reservations.toast.fileUploaded":"Archivo subido","reservations.toast.uploadError":"No se pudo subir","reservations.newTitle":"Nueva reserva","reservations.bookingType":"Tipo de reserva","reservations.titleLabel":"Título","reservations.titlePlaceholder":"p. ej. Lufthansa LH123, Hotel Adlon, ...","reservations.locationAddress":"Ubicación / dirección","reservations.locationPlaceholder":"Dirección, aeropuerto, hotel...","reservations.confirmationCode":"Código de reserva","reservations.confirmationPlaceholder":"p. ej. ABC12345","reservations.day":"Día","reservations.noDay":"Sin día","reservations.place":"Lugar","reservations.noPlace":"Sin lugar","reservations.pendingSave":"se guardará…","reservations.uploading":"Subiendo...","reservations.attachFile":"Adjuntar archivo","reservations.linkExisting":"Vincular archivo existente","reservations.toast.saveError":"No se pudo guardar","reservations.toast.updateError":"No se pudo actualizar","reservations.toast.deleteError":"No se pudo eliminar","reservations.confirm.remove":'¿Eliminar la reserva de "{name}"?',"reservations.linkAssignment":"Vincular a una asignación del día","reservations.pickAssignment":"Selecciona una asignación de tu plan...","reservations.noAssignment":"Sin vínculo (independiente)","budget.title":"Presupuesto","budget.exportCsv":"Exportar CSV","budget.emptyTitle":"Aún no se ha creado ningún presupuesto","budget.emptyText":"Crea categorías y entradas para planificar el presupuesto de tu viaje","budget.emptyPlaceholder":"Introduce el nombre de la categoría...","budget.createCategory":"Crear categoría","budget.category":"Categoría","budget.categoryName":"Nombre de la categoría","budget.table.name":"Nombre","budget.table.total":"Total","budget.table.persons":"Personas","budget.table.days":"Días","budget.table.perPerson":"Por persona","budget.table.perDay":"Por día","budget.table.perPersonDay":"Por pers. / día","budget.table.note":"Nota","budget.table.date":"Fecha","budget.newEntry":"Nueva entrada","budget.defaultEntry":"Nueva entrada","budget.defaultCategory":"Nueva categoría","budget.total":"Total","budget.totalBudget":"Presupuesto total","budget.byCategory":"Por categoría","budget.editTooltip":"Haz clic para editar","budget.confirm.deleteCategory":'¿Seguro que quieres eliminar la categoría "{name}" con {count} entradas?',"budget.deleteCategory":"Eliminar categoría","budget.perPerson":"Por persona","budget.paid":"Pagado","budget.open":"Abrir","budget.noMembers":"No hay miembros asignados","budget.settlement":"Liquidación","budget.settlementInfo":"Haz clic en el avatar de un miembro en una partida del presupuesto para marcarlo en verde — esto significa que ha pagado. La liquidación muestra quién debe cuánto a quién.","budget.netBalances":"Saldos netos","files.title":"Archivos","files.count":"{count} archivos","files.countSingular":"1 archivo","files.uploaded":"{count} archivos subidos","files.uploadError":"La subida falló","files.dropzone":"Arrastra aquí los archivos","files.dropzoneHint":"o haz clic para explorar","files.allowedTypes":"Imágenes, PDF, DOC, DOCX, XLS, XLSX, TXT, CSV · Máx. 50 MB","files.uploading":"Subiendo...","files.filterAll":"Todo","files.filterPdf":"PDF","files.filterImages":"Imágenes","files.filterDocs":"Documentos","files.filterCollab":"Notas de colaboración","files.sourceCollab":"Desde notas de colaboración","files.empty":"Aún no hay archivos","files.emptyHint":"Sube archivos para adjuntarlos a tu viaje","files.openTab":"Abrir en una pestaña nueva","files.confirm.delete":"¿Seguro que quieres eliminar este archivo?","files.toast.deleted":"Archivo eliminado","files.toast.deleteError":"No se pudo eliminar el archivo","files.sourcePlan":"Plan diario","files.sourceBooking":"Reserva","files.attach":"Adjuntar","files.pasteHint":"También puedes pegar imágenes desde el portapapeles (Ctrl+V)","packing.title":"Lista de equipaje","packing.empty":"La lista de equipaje está vacía","packing.import":"Importar","packing.importTitle":"Importar lista de equipaje","packing.importHint":"Un elemento por línea. Categoría y cantidad opcionales separadas por coma, punto y coma o tabulación: Nombre, Categoría, Cantidad","packing.importPlaceholder":`Cepillo de dientes Protector solar, Higiene Camisetas, Ropa, 5 @@ -109,7 +109,7 @@ Pasaporte, Documentos`,"packing.importCsv":"Cargar CSV/TXT","packing.importActio Todos los datos actuales serán reemplazados por la copia.`,"backup.confirm.uploadRestore":`¿Subir y restaurar el archivo de copia "{name}"? -Todos los datos actuales se sobrescribirán.`,"backup.confirm.delete":'¿Eliminar la copia "{name}"?',"backup.toast.loadError":"No se pudieron cargar las copias","backup.toast.created":"Copia de seguridad creada correctamente","backup.toast.createError":"No se pudo crear la copia","backup.toast.restored":"Copia restaurada. La página se recargará…","backup.toast.restoreError":"No se pudo restaurar","backup.toast.uploadError":"No se pudo subir","backup.toast.deleted":"Copia eliminada","backup.toast.deleteError":"No se pudo eliminar","backup.toast.downloadError":"La descarga falló","backup.toast.settingsSaved":"Ajustes de copia automática guardados","backup.toast.settingsError":"No se pudieron guardar los ajustes","backup.auto.title":"Copia automática","backup.auto.subtitle":"Copia de seguridad automática según una programación","backup.auto.enable":"Activar copia automática","backup.auto.enableHint":"Se crearán copias automáticamente según la frecuencia elegida","backup.auto.interval":"Intervalo","backup.auto.hour":"Ejecutar a la hora","backup.auto.hourHint":"Hora local del servidor (formato {format})","backup.auto.dayOfWeek":"Día de la semana","backup.auto.dayOfMonth":"Día del mes","backup.auto.dayOfMonthHint":"Limitado a 1–28 para compatibilidad con todos los meses","backup.auto.scheduleSummary":"Programación","backup.auto.summaryDaily":"Todos los días a las {hour}:00","backup.auto.summaryWeekly":"Cada {day} a las {hour}:00","backup.auto.summaryMonthly":"El día {day} de cada mes a las {hour}:00","backup.auto.envLocked":"Docker","backup.auto.envLockedHint":"La copia automática está configurada mediante variables de entorno Docker. Para cambiar estos ajustes, actualiza tu docker-compose.yml y reinicia el contenedor.","backup.auto.copyEnv":"Copiar variables de entorno Docker","backup.auto.envCopied":"Variables de entorno Docker copiadas al portapapeles","backup.auto.keepLabel":"Eliminar copias antiguas después de","backup.dow.sunday":"Dom","backup.dow.monday":"Lun","backup.dow.tuesday":"Mar","backup.dow.wednesday":"Mié","backup.dow.thursday":"Jue","backup.dow.friday":"Vie","backup.dow.saturday":"Sáb","backup.interval.hourly":"Cada hora","backup.interval.daily":"Diaria","backup.interval.weekly":"Semanal","backup.interval.monthly":"Mensual","backup.keep.1day":"1 día","backup.keep.3days":"3 días","backup.keep.7days":"7 días","backup.keep.14days":"14 días","backup.keep.30days":"30 días","backup.keep.forever":"Conservar para siempre","photos.allDays":"Todos los días","photos.noPhotos":"Aún no hay fotos","photos.uploadHint":"Sube y organiza las fotos compartidas de este viaje","photos.clickToSelect":"o haz clic para seleccionar","photos.linkPlace":"Vincular lugar","photos.noPlace":"Sin lugar","photos.uploadN":"Subida de {n} foto(s)","admin.addons.catalog.memories.name":"Fotos (Immich)","admin.addons.catalog.memories.description":"Comparte fotos de viaje a través de tu instancia de Immich","admin.addons.catalog.mcp.name":"MCP","admin.addons.catalog.mcp.description":"Protocolo de contexto de modelo para integración con asistentes de IA","admin.addons.catalog.packing.name":"Equipaje","admin.addons.catalog.packing.description":"Prepara tu equipaje con listas de comprobación para cada viaje","admin.addons.catalog.budget.name":"Presupuesto","admin.addons.catalog.budget.description":"Controla los gastos y planifica el presupuesto del viaje","admin.addons.catalog.documents.name":"Documentos","admin.addons.catalog.documents.description":"Guarda y gestiona la documentación del viaje","admin.addons.catalog.vacay.name":"Vacaciones","admin.addons.catalog.vacay.description":"Planificador personal de vacaciones con vista de calendario","admin.addons.catalog.atlas.name":"Atlas","admin.addons.catalog.atlas.description":"Mapa del mundo con los países visitados y estadísticas de viaje","admin.addons.catalog.collab.name":"Colaboración","admin.addons.catalog.collab.description":"Notas, encuestas y chat en tiempo real para organizar el viaje","backup.restoreConfirmTitle":"¿Restaurar copia?","backup.restoreWarning":"Todos los datos actuales (viajes, lugares, usuarios, subidas) serán reemplazados permanentemente por la copia. Esta acción no se puede deshacer.","backup.restoreTip":"Consejo: crea una copia del estado actual antes de restaurar.","backup.restoreConfirm":"Sí, restaurar","pdf.travelPlan":"Plan de viaje","pdf.planned":"Planificado","pdf.costLabel":"Coste EUR","pdf.preview":"Vista previa PDF","pdf.saveAsPdf":"Guardar como PDF","planner.places":"Lugares","planner.bookings":"Reservas","planner.packingList":"Lista de equipaje","planner.documents":"Documentos","planner.dayPlan":"Plan por días","planner.reservations":"Reservas","planner.minTwoPlaces":"Se necesitan al menos 2 lugares con coordenadas","planner.noGeoPlaces":"No hay lugares con coordenadas disponibles","planner.routeCalculated":"Ruta calculada","planner.routeCalcFailed":"No se pudo calcular la ruta","planner.routeError":"Error al calcular la ruta","planner.routeOptimized":"Ruta optimizada","planner.reservationUpdated":"Reserva actualizada","planner.reservationAdded":"Reserva añadida","planner.confirmDeleteReservation":"¿Eliminar reserva?","planner.reservationDeleted":"Reserva eliminada","planner.days":"Días","planner.allPlaces":"Todos los lugares","planner.totalPlaces":"{n} lugares en total","planner.noDaysPlanned":"Aún no hay días planificados","planner.editTrip":"Editar viaje →","planner.placeOne":"1 lugar","planner.placeN":"{n} lugares","planner.addNote":"Añadir nota","planner.noEntries":"No hay entradas para este día","planner.addPlace":"Añadir lugar/actividad","planner.addPlaceShort":"+ Añadir lugar/actividad","planner.resPending":"Reserva pendiente · ","planner.resConfirmed":"Reserva confirmada · ","planner.notePlaceholder":"Nota…","planner.noteTimePlaceholder":"Hora (opcional)","planner.noteExamplePlaceholder":"p. ej. S3 a las 14:30 desde la estación central, ferry desde el muelle 7, pausa para comer…","planner.totalCost":"Coste total","planner.searchPlaces":"Buscar lugares…","planner.allCategories":"Todas las categorías","planner.noPlacesFound":"No se encontraron lugares","planner.addFirstPlace":"Añadir el primer lugar","planner.noReservations":"Sin reservas","planner.addFirstReservation":"Añadir la primera reserva","planner.new":"Nuevo","planner.addToDay":"+ Día","planner.calculating":"Calculando…","planner.route":"Ruta","planner.optimize":"Optimizar","planner.openGoogleMaps":"Abrir en Google Maps","planner.selectDayHint":"Selecciona un día de la lista izquierda para ver su plan","planner.noPlacesForDay":"Aún no hay lugares para este día","planner.addPlacesLink":"Añadir lugares →","planner.minTotal":"min en total","planner.noReservation":"Sin reserva","planner.removeFromDay":"Quitar del día","planner.addToThisDay":"Añadir al día","planner.overview":"Vista general","planner.noDays":"No hay días todavía","planner.editTripToAddDays":"Edita el viaje para añadir días","planner.dayCount":"{n} días","planner.clickToUnlock":"Haz clic para desbloquear","planner.keepPosition":"Mantener posición durante la optimización de ruta","planner.dayDetails":"Detalles del día","planner.dayN":"Día {n}","stats.countries":"Países","stats.cities":"Ciudades","stats.trips":"Viajes","stats.places":"Lugares","stats.worldProgress":"Progreso mundial","stats.visited":"visitados","stats.remaining":"restantes","stats.visitedCountries":"Países visitados","day.precipProb":"Probabilidad de lluvia","day.precipitation":"Precipitación","day.wind":"Viento","day.sunrise":"Amanecer","day.sunset":"Atardecer","day.hourlyForecast":"Pronóstico por horas","day.climateHint":"Promedios históricos: el pronóstico real está disponible dentro de los 16 días previos a la fecha.","day.noWeather":"No hay datos meteorológicos disponibles. Añade un lugar con coordenadas.","day.overview":"Resumen diario","day.accommodation":"Alojamiento","day.addAccommodation":"Añadir alojamiento","day.hotelDayRange":"Aplicar a los días","day.noPlacesForHotel":"Añade primero lugares al viaje","day.allDays":"Todos","day.checkIn":"Check-in","day.checkOut":"Check-out","day.confirmation":"Confirmación","day.editAccommodation":"Editar alojamiento","day.reservations":"Reservas","memories.title":"Fotos","memories.notConnected":"Immich no conectado","memories.notConnectedHint":"Conecta tu instancia de Immich en Ajustes para ver tus fotos de viaje aquí.","memories.noDates":"Añade fechas a tu viaje para cargar fotos.","memories.noPhotos":"No se encontraron fotos","memories.noPhotosHint":"No se encontraron fotos en Immich para el rango de fechas de este viaje.","memories.photosFound":"fotos","memories.fromOthers":"de otros","memories.sharePhotos":"Compartir fotos","memories.sharing":"Compartiendo","memories.reviewTitle":"Revisar tus fotos","memories.reviewHint":"Haz clic en las fotos para excluirlas de compartir.","memories.shareCount":"Compartir {count} fotos","memories.immichUrl":"URL del servidor Immich","memories.immichApiKey":"Clave API","memories.testConnection":"Probar conexión","memories.testFirst":"Probar conexión primero","memories.connected":"Conectado","memories.disconnected":"No conectado","memories.connectionSuccess":"Conectado a Immich","memories.connectionError":"No se pudo conectar a Immich","memories.saved":"Configuración de Immich guardada","memories.oldest":"Más antiguas","memories.newest":"Más recientes","memories.allLocations":"Todas las ubicaciones","memories.addPhotos":"Añadir fotos","memories.linkAlbum":"Vincular álbum","memories.selectAlbum":"Seleccionar álbum de Immich","memories.noAlbums":"No se encontraron álbumes","memories.syncAlbum":"Sincronizar álbum","memories.unlinkAlbum":"Desvincular","memories.photos":"fotos","memories.selectPhotos":"Seleccionar fotos de Immich","memories.selectHint":"Toca las fotos para seleccionarlas.","memories.selected":"seleccionado(s)","memories.addSelected":"Añadir {count} fotos","memories.alreadyAdded":"Añadido","memories.private":"Privado","memories.stopSharing":"Dejar de compartir","memories.tripDates":"Fechas del viaje","memories.allPhotos":"Todas las fotos","memories.confirmShareTitle":"¿Compartir con los miembros del viaje?","memories.confirmShareHint":"{count} fotos serán visibles para todos los miembros de este viaje. Puedes hacer fotos individuales privadas más tarde.","memories.confirmShareButton":"Compartir fotos","collab.tabs.chat":"Mensajes","collab.tabs.notes":"Notas","collab.tabs.polls":"Encuestas","collab.whatsNext.title":"Qué viene ahora","collab.whatsNext.today":"Hoy","collab.whatsNext.tomorrow":"Mañana","collab.whatsNext.empty":"No hay actividades próximas","collab.whatsNext.until":"hasta","collab.whatsNext.emptyHint":"Las actividades con hora aparecerán aquí","collab.chat.send":"Enviar","collab.chat.placeholder":"Escribe un mensaje...","collab.chat.empty":"Empieza la conversación","collab.chat.emptyHint":"Los mensajes se comparten con todos los miembros del viaje","collab.chat.emptyDesc":"Comparte ideas, planes y novedades con tu grupo de viaje","collab.chat.today":"Hoy","collab.chat.yesterday":"Ayer","collab.chat.deletedMessage":"eliminó un mensaje","collab.chat.reply":"Responder","collab.chat.loadMore":"Cargar mensajes anteriores","collab.chat.justNow":"justo ahora","collab.chat.minutesAgo":"hace {n} min","collab.chat.hoursAgo":"hace {n} h","collab.notes.title":"Notas","collab.notes.new":"Nueva nota","collab.notes.empty":"Aún no hay notas","collab.notes.emptyHint":"Empieza a capturar ideas y planes","collab.notes.all":"Todas","collab.notes.titlePlaceholder":"Título de la nota","collab.notes.contentPlaceholder":"Escribe algo...","collab.notes.categoryPlaceholder":"Categoría","collab.notes.newCategory":"Nueva categoría...","collab.notes.category":"Categoría","collab.notes.noCategory":"Sin categoría","collab.notes.color":"Color","collab.notes.save":"Guardar","collab.notes.cancel":"Cancelar","collab.notes.edit":"Editar","collab.notes.delete":"Eliminar","collab.notes.pin":"Fijar","collab.notes.unpin":"Desfijar","collab.notes.daysAgo":"hace {n} d","collab.notes.categorySettings":"Gestionar categorías","collab.notes.create":"Crear","collab.notes.website":"Sitio web","collab.notes.websitePlaceholder":"https://...","collab.notes.attachFiles":"Adjuntar archivos","collab.notes.noCategoriesYet":"Aún no hay categorías","collab.notes.emptyDesc":"Crea una nota para empezar","collab.polls.title":"Encuestas","collab.polls.new":"Nueva encuesta","collab.polls.empty":"Aún no hay encuestas","collab.polls.emptyHint":"Pregunta al grupo y votad juntos","collab.polls.question":"Pregunta","collab.polls.questionPlaceholder":"¿Qué deberíamos hacer?","collab.polls.addOption":"+ Añadir opción","collab.polls.optionPlaceholder":"Opción {n}","collab.polls.create":"Crear encuesta","collab.polls.close":"Cerrar","collab.polls.closed":"Cerrada","collab.polls.votes":"{n} votos","collab.polls.vote":"{n} voto","collab.polls.multipleChoice":"Selección múltiple","collab.polls.multiChoice":"Selección múltiple","collab.polls.deadline":"Fecha límite","collab.polls.option":"Opción","collab.polls.options":"Opciones","collab.polls.delete":"Eliminar","collab.polls.closedSection":"Cerradas","files.trash":"Papelera","files.trashEmpty":"La papelera está vacía","files.emptyTrash":"Vaciar papelera","files.restore":"Restaurar","files.star":"Destacar","files.unstar":"Quitar destacado","files.assign":"Asignar","files.assignTitle":"Asignar archivo","files.assignPlace":"Lugar","files.assignBooking":"Reserva","files.unassigned":"Sin asignar","files.unlink":"Eliminar vínculo","files.noteLabel":"Nota","files.notePlaceholder":"Añadir una nota...","files.toast.trashed":"Movido a la papelera","files.toast.restored":"Archivo restaurado","files.toast.trashEmptied":"Papelera vaciada","files.toast.assigned":"Archivo asignado","files.toast.assignError":"Error al asignar","files.toast.restoreError":"Error al restaurar","files.confirm.permanentDelete":"Eliminar este archivo permanentemente? No se puede deshacer.","files.confirm.emptyTrash":"Eliminar todos los archivos de la papelera? No se puede deshacer.","reservations.meta.airline":"Aerolínea","reservations.meta.flightNumber":"N° de vuelo","reservations.meta.from":"Desde","reservations.meta.to":"Hasta","reservations.meta.trainNumber":"N° de tren","reservations.meta.platform":"Andén","reservations.meta.seat":"Asiento","reservations.meta.checkIn":"Check-in","reservations.meta.checkOut":"Check-out","reservations.meta.linkAccommodation":"Alojamiento","reservations.meta.pickAccommodation":"Vincular con alojamiento","reservations.meta.noAccommodation":"Ninguno","reservations.meta.hotelPlace":"Alojamiento","reservations.meta.pickHotel":"Seleccionar alojamiento","reservations.meta.fromDay":"Desde","reservations.meta.toDay":"Hasta","reservations.meta.selectDay":"Seleccionar día","admin.oidcOnlyMode":"Desactivar autenticación por contraseña","admin.oidcOnlyModeHint":"Si está activado, solo se permite el inicio de sesión con SSO. El inicio de sesión y registro con contraseña se bloquean.","login.oidcOnly":"La autenticación por contraseña está desactivada. Por favor, inicia sesión con tu proveedor SSO.","settings.currentPasswordRequired":"La contraseña actual es obligatoria","settings.passwordWeak":"La contraseña debe contener mayúsculas, minúsculas, números y un carácter especial","admin.tabs.permissions":"Permisos","perm.title":"Configuración de permisos","perm.subtitle":"Controla quién puede realizar acciones en la aplicación","perm.saved":"Configuración de permisos guardada","perm.resetDefaults":"Restablecer valores predeterminados","perm.customized":"personalizado","perm.level.admin":"Solo administrador","perm.level.tripOwner":"Propietario del viaje","perm.level.tripMember":"Miembros del viaje","perm.level.everybody":"Todos","perm.cat.trip":"Gestión de viajes","perm.cat.members":"Gestión de miembros","perm.cat.files":"Archivos","perm.cat.content":"Contenido y horario","perm.cat.extras":"Presupuesto, equipaje y colaboración","perm.action.trip_create":"Crear viajes","perm.action.trip_edit":"Editar detalles del viaje","perm.action.trip_delete":"Eliminar viajes","perm.action.trip_archive":"Archivar / desarchivar viajes","perm.action.trip_cover_upload":"Subir imagen de portada","perm.action.member_manage":"Añadir / eliminar miembros","perm.action.file_upload":"Subir archivos","perm.action.file_edit":"Editar metadatos del archivo","perm.action.file_delete":"Eliminar archivos","perm.action.place_edit":"Añadir / editar / eliminar lugares","perm.action.day_edit":"Editar días, notas y asignaciones","perm.action.reservation_edit":"Gestionar reservas","perm.action.budget_edit":"Gestionar presupuesto","perm.action.packing_edit":"Gestionar listas de equipaje","perm.action.collab_edit":"Colaboración (notas, encuestas, chat)","perm.action.share_manage":"Gestionar enlaces compartidos","perm.actionHint.trip_create":"Quién puede crear nuevos viajes","perm.actionHint.trip_edit":"Quién puede cambiar el nombre, fechas, descripción y moneda del viaje","perm.actionHint.trip_delete":"Quién puede eliminar permanentemente un viaje","perm.actionHint.trip_archive":"Quién puede archivar o desarchivar un viaje","perm.actionHint.trip_cover_upload":"Quién puede subir o cambiar la imagen de portada","perm.actionHint.member_manage":"Quién puede invitar o eliminar miembros del viaje","perm.actionHint.file_upload":"Quién puede subir archivos a un viaje","perm.actionHint.file_edit":"Quién puede editar descripciones y enlaces de archivos","perm.actionHint.file_delete":"Quién puede mover archivos a la papelera o eliminarlos permanentemente","perm.actionHint.place_edit":"Quién puede añadir, editar o eliminar lugares","perm.actionHint.day_edit":"Quién puede editar días, notas de días y asignaciones de lugares","perm.actionHint.reservation_edit":"Quién puede crear, editar o eliminar reservas","perm.actionHint.budget_edit":"Quién puede crear, editar o eliminar partidas del presupuesto","perm.actionHint.packing_edit":"Quién puede gestionar artículos de equipaje y bolsas","perm.actionHint.collab_edit":"Quién puede crear notas, encuestas y enviar mensajes","perm.actionHint.share_manage":"Quién puede crear o eliminar enlaces compartidos públicos"},yM={"common.save":"Enregistrer","common.cancel":"Annuler","common.delete":"Supprimer","common.edit":"Modifier","common.add":"Ajouter","common.loading":"Chargement…","common.import":"Importer","common.error":"Erreur","common.back":"Retour","common.all":"Tout","common.close":"Fermer","common.open":"Ouvrir","common.upload":"Importer","common.search":"Rechercher","common.confirm":"Confirmer","common.ok":"OK","common.yes":"Oui","common.no":"Non","common.or":"ou","common.none":"Aucun","common.date":"Date","common.rename":"Renommer","common.name":"Nom","common.email":"E-mail","common.password":"Mot de passe","common.saving":"Enregistrement…","common.saved":"Enregistré","trips.reminder":"Rappel","trips.reminderNone":"Aucun","trips.reminderDay":"jour","trips.reminderDays":"jours","trips.reminderCustom":"Personnalisé","trips.reminderDaysBefore":"jours avant le départ","trips.reminderDisabledHint":"Les rappels de voyage sont désactivés. Activez-les dans Admin > Paramètres > Notifications.","common.update":"Mettre à jour","common.change":"Modifier","common.uploading":"Import en cours…","common.backToPlanning":"Retour à la planification","common.reset":"Réinitialiser","nav.trip":"Voyage","nav.share":"Partager","nav.settings":"Paramètres","nav.admin":"Admin","nav.logout":"Déconnexion","nav.lightMode":"Mode clair","nav.darkMode":"Mode sombre","nav.autoMode":"Mode auto","nav.administrator":"Administrateur","dashboard.title":"Mes voyages","dashboard.subtitle.loading":"Chargement des voyages…","dashboard.subtitle.trips":"{count} voyages ({archived} archivés)","dashboard.subtitle.empty":"Commencez votre premier voyage","dashboard.subtitle.activeOne":"{count} voyage actif","dashboard.subtitle.activeMany":"{count} voyages actifs","dashboard.subtitle.archivedSuffix":" · {count} archivés","dashboard.newTrip":"Nouveau voyage","dashboard.gridView":"Vue en grille","dashboard.listView":"Vue en liste","dashboard.currency":"Devise","dashboard.timezone":"Fuseau horaire","dashboard.localTime":"Heure locale","dashboard.timezoneCustomTitle":"Fuseau horaire personnalisé","dashboard.timezoneCustomLabelPlaceholder":"Libellé (facultatif)","dashboard.timezoneCustomTzPlaceholder":"ex. America/New_York","dashboard.timezoneCustomAdd":"Ajouter","dashboard.timezoneCustomErrorEmpty":"Saisissez un identifiant de fuseau horaire","dashboard.timezoneCustomErrorInvalid":"Fuseau horaire invalide. Utilisez un format comme Europe/Berlin","dashboard.timezoneCustomErrorDuplicate":"Déjà ajouté","dashboard.emptyTitle":"Aucun voyage","dashboard.emptyText":"Créez votre premier voyage et commencez à planifier !","dashboard.emptyButton":"Créer un premier voyage","dashboard.nextTrip":"Prochain voyage","dashboard.shared":"Partagé","dashboard.sharedBy":"Partagé par {name}","dashboard.days":"Jours","dashboard.places":"Lieux","dashboard.archive":"Archiver","dashboard.restore":"Restaurer","dashboard.archived":"Archivé","dashboard.status.ongoing":"En cours","dashboard.status.today":"Aujourd'hui","dashboard.status.tomorrow":"Demain","dashboard.status.past":"Passé","dashboard.status.daysLeft":"{count} jours restants","dashboard.toast.loadError":"Impossible de charger les voyages","dashboard.toast.created":"Voyage créé avec succès !","dashboard.toast.createError":"Impossible de créer le voyage","dashboard.toast.updated":"Voyage mis à jour !","dashboard.toast.updateError":"Impossible de mettre à jour le voyage","dashboard.toast.deleted":"Voyage supprimé","dashboard.toast.deleteError":"Impossible de supprimer le voyage","dashboard.toast.archived":"Voyage archivé","dashboard.toast.archiveError":"Impossible d'archiver le voyage","dashboard.toast.restored":"Voyage restauré","dashboard.toast.restoreError":"Impossible de restaurer le voyage","dashboard.confirm.delete":"Supprimer le voyage « {title} » ? Tous les lieux et plans seront définitivement supprimés.","dashboard.editTrip":"Modifier le voyage","dashboard.createTrip":"Créer un nouveau voyage","dashboard.tripTitle":"Titre","dashboard.tripTitlePlaceholder":"ex. Été au Japon","dashboard.tripDescription":"Description","dashboard.tripDescriptionPlaceholder":"De quoi parle ce voyage ?","dashboard.startDate":"Date de début","dashboard.endDate":"Date de fin","dashboard.noDateHint":"Aucune date définie — 7 jours par défaut seront créés. Vous pouvez modifier cela à tout moment.","dashboard.coverImage":"Image de couverture","dashboard.addCoverImage":"Ajouter une image de couverture","dashboard.addMembers":"Compagnons de voyage","dashboard.addMember":"Ajouter un membre","dashboard.coverSaved":"Image de couverture enregistrée","dashboard.coverUploadError":"Échec de l'import","dashboard.coverRemoveError":"Échec de la suppression","dashboard.titleRequired":"Le titre est obligatoire","dashboard.endDateError":"La date de fin doit être postérieure à la date de début","settings.title":"Paramètres","settings.subtitle":"Configurez vos paramètres personnels","settings.map":"Carte","settings.mapTemplate":"Modèle de carte","settings.mapTemplatePlaceholder.select":"Sélectionner un modèle…","settings.mapDefaultHint":"Laissez vide pour OpenStreetMap (par défaut)","settings.mapTemplatePlaceholder":"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png","settings.mapHint":"Modèle d'URL pour les tuiles de carte","settings.latitude":"Latitude","settings.longitude":"Longitude","settings.saveMap":"Enregistrer la carte","settings.apiKeys":"Clés API","settings.mapsKey":"Clé API Google Maps","settings.mapsKeyHint":"Pour la recherche de lieux. Nécessite l'API Places (New). Obtenez-la sur console.cloud.google.com","settings.weatherKey":"Clé API OpenWeatherMap","settings.weatherKeyHint":"Pour les données météo. Gratuit sur openweathermap.org/api","settings.keyPlaceholder":"Saisir la clé…","settings.configured":"Configuré","settings.saveKeys":"Enregistrer les clés","settings.display":"Affichage","settings.colorMode":"Mode de couleur","settings.light":"Clair","settings.dark":"Sombre","settings.auto":"Auto","settings.language":"Langue","settings.temperature":"Unité de température","settings.timeFormat":"Format de l'heure","settings.routeCalculation":"Calcul d'itinéraire","settings.blurBookingCodes":"Masquer les codes de réservation","settings.notifications":"Notifications","settings.notifyTripInvite":"Invitations de voyage","settings.notifyBookingChange":"Modifications de réservation","settings.notifyTripReminder":"Rappels de voyage","settings.notifyVacayInvite":"Invitations de fusion Vacay","settings.notifyPhotosShared":"Photos partagées (Immich)","settings.notifyCollabMessage":"Messages de chat (Collab)","settings.notifyPackingTagged":"Liste de bagages : attributions","settings.notifyWebhook":"Notifications webhook","settings.notificationsDisabled":"Les notifications ne sont pas configurées. Demandez à un administrateur d'activer les notifications par e-mail ou webhook.","settings.notificationsActive":"Canal actif","settings.notificationsManagedByAdmin":"Les événements de notification sont configurés par votre administrateur.","admin.notifications.title":"Notifications","admin.notifications.hint":"Choisissez un canal de notification. Un seul peut être actif à la fois.","admin.notifications.none":"Désactivé","admin.notifications.email":"E-mail (SMTP)","admin.notifications.webhook":"Webhook","admin.notifications.events":"Événements de notification","admin.notifications.eventsHint":"Choisissez quels événements déclenchent des notifications pour tous les utilisateurs.","admin.notifications.configureFirst":"Configurez d'abord les paramètres SMTP ou webhook ci-dessous, puis activez les événements.","admin.notifications.save":"Enregistrer les paramètres de notification","admin.notifications.saved":"Paramètres de notification enregistrés","admin.notifications.testWebhook":"Envoyer un webhook de test","admin.notifications.testWebhookSuccess":"Webhook de test envoyé avec succès","admin.notifications.testWebhookFailed":"Échec du webhook de test","admin.smtp.title":"E-mail et notifications","admin.smtp.hint":"Configuration SMTP pour l'envoi des notifications par e-mail.","admin.smtp.testButton":"Envoyer un e-mail de test","admin.webhook.hint":"Envoyer des notifications vers un webhook externe (Discord, Slack, etc.).","admin.smtp.testSuccess":"E-mail de test envoyé avec succès","admin.smtp.testFailed":"Échec de l'e-mail de test","dayplan.icsTooltip":"Exporter le calendrier (ICS)","share.linkTitle":"Lien public","share.linkHint":"Créez un lien que n'importe qui peut utiliser pour consulter ce voyage sans se connecter. Lecture seule — aucune modification possible.","share.createLink":"Créer un lien","share.deleteLink":"Supprimer le lien","share.createError":"Impossible de créer le lien","common.copy":"Copier","common.copied":"Copié","share.permMap":"Carte et plan","share.permBookings":"Réservations","share.permPacking":"Bagages","shared.expired":"Lien expiré ou invalide","shared.expiredHint":"Ce lien de partage n'est plus actif.","shared.readOnly":"Vue en lecture seule","shared.tabPlan":"Plan","shared.tabBookings":"Réservations","shared.tabPacking":"Bagages","shared.tabBudget":"Budget","shared.tabChat":"Chat","shared.days":"jours","shared.places":"lieux","shared.other":"Autre","shared.totalBudget":"Budget total","shared.messages":"messages","shared.sharedVia":"Partagé via","shared.confirmed":"Confirmé","shared.pending":"En attente","share.permBudget":"Budget","share.permCollab":"Chat","settings.on":"Activé","settings.off":"Désactivé","settings.mcp.title":"Configuration MCP","settings.mcp.endpoint":"Point de terminaison MCP","settings.mcp.clientConfig":"Configuration du client","settings.mcp.clientConfigHint":"Remplacez par un token API de la liste ci-dessous. Le chemin vers npx devra peut-être être ajusté selon votre système (ex. C:\\PROGRA~1\\nodejs\\npx.cmd sous Windows).","settings.mcp.copy":"Copier","settings.mcp.copied":"Copié !","settings.mcp.apiTokens":"Tokens API","settings.mcp.createToken":"Créer un token","settings.mcp.noTokens":"Aucun token pour l'instant. Créez-en un pour connecter des clients MCP.","settings.mcp.tokenCreatedAt":"Créé","settings.mcp.tokenUsedAt":"Utilisé","settings.mcp.deleteTokenTitle":"Supprimer le token","settings.mcp.deleteTokenMessage":"Ce token cessera de fonctionner immédiatement. Tout client MCP l'utilisant perdra l'accès.","settings.mcp.modal.createTitle":"Créer un token API","settings.mcp.modal.tokenName":"Nom du token","settings.mcp.modal.tokenNamePlaceholder":"ex. Claude Desktop, Ordinateur pro","settings.mcp.modal.creating":"Création…","settings.mcp.modal.create":"Créer le token","settings.mcp.modal.createdTitle":"Token créé","settings.mcp.modal.createdWarning":"Ce token ne sera affiché qu'une seule fois. Copiez-le et conservez-le maintenant — il ne pourra pas être récupéré.","settings.mcp.modal.done":"Terminé","settings.mcp.toast.created":"Token créé","settings.mcp.toast.createError":"Impossible de créer le token","settings.mcp.toast.deleted":"Token supprimé","settings.mcp.toast.deleteError":"Impossible de supprimer le token","settings.account":"Compte","settings.username":"Nom d'utilisateur","settings.email":"E-mail","settings.role":"Rôle","settings.roleAdmin":"Administrateur","settings.oidcLinked":"Lié avec","settings.changePassword":"Changer le mot de passe","settings.mustChangePassword":"Vous devez changer votre mot de passe avant de continuer. Veuillez définir un nouveau mot de passe ci-dessous.","settings.currentPassword":"Mot de passe actuel","settings.currentPasswordRequired":"Le mot de passe actuel est requis","settings.newPassword":"Nouveau mot de passe","settings.confirmPassword":"Confirmer le nouveau mot de passe","settings.updatePassword":"Mettre à jour le mot de passe","settings.passwordRequired":"Veuillez saisir le mot de passe actuel et le nouveau","settings.passwordTooShort":"Le mot de passe doit comporter au moins 8 caractères","settings.passwordMismatch":"Les mots de passe ne correspondent pas","settings.passwordWeak":"Le mot de passe doit contenir des majuscules, des minuscules, un chiffre et un caractère spécial","settings.passwordChanged":"Mot de passe modifié avec succès","settings.deleteAccount":"Supprimer le compte","settings.deleteAccountTitle":"Supprimer votre compte ?","settings.deleteAccountWarning":"Votre compte ainsi que tous vos voyages, lieux et fichiers seront définitivement supprimés. Cette action est irréversible.","settings.deleteAccountConfirm":"Supprimer définitivement","settings.deleteBlockedTitle":"Suppression impossible","settings.deleteBlockedMessage":"Vous êtes le seul administrateur. Promouvez un autre utilisateur en tant qu'administrateur avant de supprimer votre compte.","settings.roleUser":"Utilisateur","settings.saveProfile":"Enregistrer le profil","settings.mfa.title":"Authentification à deux facteurs (2FA)","settings.mfa.description":"Ajoute une étape supplémentaire lors de la connexion. Utilisez une application d'authentification (Google Authenticator, Authy, etc.).","settings.mfa.requiredByPolicy":"Votre administrateur exige l'authentification à deux facteurs. Configurez une application d'authentification ci-dessous avant de continuer.","settings.mfa.backupTitle":"Codes de secours","settings.mfa.backupDescription":"Utilisez ces codes à usage unique si vous perdez l'accès à votre application d'authentification.","settings.mfa.backupWarning":"Enregistrez ces codes maintenant. Chaque code n'est utilisable qu'une seule fois.","settings.mfa.backupCopy":"Copier les codes","settings.mfa.backupDownload":"Télécharger TXT","settings.mfa.backupPrint":"Imprimer / PDF","settings.mfa.backupCopied":"Codes de secours copiés","settings.mfa.enabled":"2FA est activé sur votre compte.","settings.mfa.disabled":"2FA n'est pas activé.","settings.mfa.setup":"Configurer l'authentificateur","settings.mfa.scanQr":"Scannez ce code QR avec votre application ou entrez la clé manuellement.","settings.mfa.secretLabel":"Clé secrète (saisie manuelle)","settings.mfa.codePlaceholder":"Code à 6 chiffres","settings.mfa.enable":"Activer 2FA","settings.mfa.cancelSetup":"Annuler","settings.mfa.disableTitle":"Désactiver 2FA","settings.mfa.disableHint":"Entrez votre mot de passe et un code actuel de votre authentificateur.","settings.mfa.disable":"Désactiver 2FA","settings.mfa.toastEnabled":"Authentification à deux facteurs activée","settings.mfa.toastDisabled":"Authentification à deux facteurs désactivée","settings.mfa.demoBlocked":"Non disponible en mode démo","settings.toast.mapSaved":"Paramètres de carte enregistrés","settings.toast.keysSaved":"Clés API enregistrées","settings.toast.displaySaved":"Paramètres d'affichage enregistrés","settings.toast.profileSaved":"Profil enregistré","settings.uploadAvatar":"Importer une photo de profil","settings.removeAvatar":"Supprimer la photo de profil","settings.avatarUploaded":"Photo de profil mise à jour","settings.avatarRemoved":"Photo de profil supprimée","settings.avatarError":"Échec de l'import","login.error":"Échec de la connexion. Veuillez vérifier vos identifiants.","login.tagline":`Vos voyages. +Todos los datos actuales se sobrescribirán.`,"backup.confirm.delete":'¿Eliminar la copia "{name}"?',"backup.toast.loadError":"No se pudieron cargar las copias","backup.toast.created":"Copia de seguridad creada correctamente","backup.toast.createError":"No se pudo crear la copia","backup.toast.restored":"Copia restaurada. La página se recargará…","backup.toast.restoreError":"No se pudo restaurar","backup.toast.uploadError":"No se pudo subir","backup.toast.deleted":"Copia eliminada","backup.toast.deleteError":"No se pudo eliminar","backup.toast.downloadError":"La descarga falló","backup.toast.settingsSaved":"Ajustes de copia automática guardados","backup.toast.settingsError":"No se pudieron guardar los ajustes","backup.auto.title":"Copia automática","backup.auto.subtitle":"Copia de seguridad automática según una programación","backup.auto.enable":"Activar copia automática","backup.auto.enableHint":"Se crearán copias automáticamente según la frecuencia elegida","backup.auto.interval":"Intervalo","backup.auto.hour":"Ejecutar a la hora","backup.auto.hourHint":"Hora local del servidor (formato {format})","backup.auto.dayOfWeek":"Día de la semana","backup.auto.dayOfMonth":"Día del mes","backup.auto.dayOfMonthHint":"Limitado a 1–28 para compatibilidad con todos los meses","backup.auto.scheduleSummary":"Programación","backup.auto.summaryDaily":"Todos los días a las {hour}:00","backup.auto.summaryWeekly":"Cada {day} a las {hour}:00","backup.auto.summaryMonthly":"El día {day} de cada mes a las {hour}:00","backup.auto.envLocked":"Docker","backup.auto.envLockedHint":"La copia automática está configurada mediante variables de entorno Docker. Para cambiar estos ajustes, actualiza tu docker-compose.yml y reinicia el contenedor.","backup.auto.copyEnv":"Copiar variables de entorno Docker","backup.auto.envCopied":"Variables de entorno Docker copiadas al portapapeles","backup.auto.keepLabel":"Eliminar copias antiguas después de","backup.dow.sunday":"Dom","backup.dow.monday":"Lun","backup.dow.tuesday":"Mar","backup.dow.wednesday":"Mié","backup.dow.thursday":"Jue","backup.dow.friday":"Vie","backup.dow.saturday":"Sáb","backup.interval.hourly":"Cada hora","backup.interval.daily":"Diaria","backup.interval.weekly":"Semanal","backup.interval.monthly":"Mensual","backup.keep.1day":"1 día","backup.keep.3days":"3 días","backup.keep.7days":"7 días","backup.keep.14days":"14 días","backup.keep.30days":"30 días","backup.keep.forever":"Conservar para siempre","photos.allDays":"Todos los días","photos.noPhotos":"Aún no hay fotos","photos.uploadHint":"Sube y organiza las fotos compartidas de este viaje","photos.clickToSelect":"o haz clic para seleccionar","photos.linkPlace":"Vincular lugar","photos.noPlace":"Sin lugar","photos.uploadN":"Subida de {n} foto(s)","admin.addons.catalog.memories.name":"Fotos (Immich)","admin.addons.catalog.memories.description":"Comparte fotos de viaje a través de tu instancia de Immich","admin.addons.catalog.mcp.name":"MCP","admin.addons.catalog.mcp.description":"Protocolo de contexto de modelo para integración con asistentes de IA","admin.addons.catalog.packing.name":"Equipaje","admin.addons.catalog.packing.description":"Prepara tu equipaje con listas de comprobación para cada viaje","admin.addons.catalog.budget.name":"Presupuesto","admin.addons.catalog.budget.description":"Controla los gastos y planifica el presupuesto del viaje","admin.addons.catalog.documents.name":"Documentos","admin.addons.catalog.documents.description":"Guarda y gestiona la documentación del viaje","admin.addons.catalog.vacay.name":"Vacaciones","admin.addons.catalog.vacay.description":"Planificador personal de vacaciones con vista de calendario","admin.addons.catalog.atlas.name":"Atlas","admin.addons.catalog.atlas.description":"Mapa del mundo con los países visitados y estadísticas de viaje","admin.addons.catalog.collab.name":"Colaboración","admin.addons.catalog.collab.description":"Notas, encuestas y chat en tiempo real para organizar el viaje","backup.restoreConfirmTitle":"¿Restaurar copia?","backup.restoreWarning":"Todos los datos actuales (viajes, lugares, usuarios, subidas) serán reemplazados permanentemente por la copia. Esta acción no se puede deshacer.","backup.restoreTip":"Consejo: crea una copia del estado actual antes de restaurar.","backup.restoreConfirm":"Sí, restaurar","pdf.travelPlan":"Plan de viaje","pdf.planned":"Planificado","pdf.costLabel":"Coste EUR","pdf.preview":"Vista previa PDF","pdf.saveAsPdf":"Guardar como PDF","planner.places":"Lugares","planner.bookings":"Reservas","planner.packingList":"Lista de equipaje","planner.documents":"Documentos","planner.dayPlan":"Plan por días","planner.reservations":"Reservas","planner.minTwoPlaces":"Se necesitan al menos 2 lugares con coordenadas","planner.noGeoPlaces":"No hay lugares con coordenadas disponibles","planner.routeCalculated":"Ruta calculada","planner.routeCalcFailed":"No se pudo calcular la ruta","planner.routeError":"Error al calcular la ruta","planner.routeOptimized":"Ruta optimizada","planner.reservationUpdated":"Reserva actualizada","planner.reservationAdded":"Reserva añadida","planner.confirmDeleteReservation":"¿Eliminar reserva?","planner.reservationDeleted":"Reserva eliminada","planner.days":"Días","planner.allPlaces":"Todos los lugares","planner.totalPlaces":"{n} lugares en total","planner.noDaysPlanned":"Aún no hay días planificados","planner.editTrip":"Editar viaje →","planner.placeOne":"1 lugar","planner.placeN":"{n} lugares","planner.addNote":"Añadir nota","planner.noEntries":"No hay entradas para este día","planner.addPlace":"Añadir lugar/actividad","planner.addPlaceShort":"+ Añadir lugar/actividad","planner.resPending":"Reserva pendiente · ","planner.resConfirmed":"Reserva confirmada · ","planner.notePlaceholder":"Nota…","planner.noteTimePlaceholder":"Hora (opcional)","planner.noteExamplePlaceholder":"p. ej. S3 a las 14:30 desde la estación central, ferry desde el muelle 7, pausa para comer…","planner.totalCost":"Coste total","planner.searchPlaces":"Buscar lugares…","planner.allCategories":"Todas las categorías","planner.noPlacesFound":"No se encontraron lugares","planner.addFirstPlace":"Añadir el primer lugar","planner.noReservations":"Sin reservas","planner.addFirstReservation":"Añadir la primera reserva","planner.new":"Nuevo","planner.addToDay":"+ Día","planner.calculating":"Calculando…","planner.route":"Ruta","planner.optimize":"Optimizar","planner.openGoogleMaps":"Abrir en Google Maps","planner.selectDayHint":"Selecciona un día de la lista izquierda para ver su plan","planner.noPlacesForDay":"Aún no hay lugares para este día","planner.addPlacesLink":"Añadir lugares →","planner.minTotal":"min en total","planner.noReservation":"Sin reserva","planner.removeFromDay":"Quitar del día","planner.addToThisDay":"Añadir al día","planner.overview":"Vista general","planner.noDays":"No hay días todavía","planner.editTripToAddDays":"Edita el viaje para añadir días","planner.dayCount":"{n} días","planner.clickToUnlock":"Haz clic para desbloquear","planner.keepPosition":"Mantener posición durante la optimización de ruta","planner.dayDetails":"Detalles del día","planner.dayN":"Día {n}","stats.countries":"Países","stats.cities":"Ciudades","stats.trips":"Viajes","stats.places":"Lugares","stats.worldProgress":"Progreso mundial","stats.visited":"visitados","stats.remaining":"restantes","stats.visitedCountries":"Países visitados","day.precipProb":"Probabilidad de lluvia","day.precipitation":"Precipitación","day.wind":"Viento","day.sunrise":"Amanecer","day.sunset":"Atardecer","day.hourlyForecast":"Pronóstico por horas","day.climateHint":"Promedios históricos: el pronóstico real está disponible dentro de los 16 días previos a la fecha.","day.noWeather":"No hay datos meteorológicos disponibles. Añade un lugar con coordenadas.","day.overview":"Resumen diario","day.accommodation":"Alojamiento","day.addAccommodation":"Añadir alojamiento","day.hotelDayRange":"Aplicar a los días","day.noPlacesForHotel":"Añade primero lugares al viaje","day.allDays":"Todos","day.checkIn":"Check-in","day.checkOut":"Check-out","day.confirmation":"Confirmación","day.editAccommodation":"Editar alojamiento","day.reservations":"Reservas","memories.title":"Fotos","memories.notConnected":"Immich no conectado","memories.notConnectedHint":"Conecta tu instancia de Immich en Ajustes para ver tus fotos de viaje aquí.","memories.noDates":"Añade fechas a tu viaje para cargar fotos.","memories.noPhotos":"No se encontraron fotos","memories.noPhotosHint":"No se encontraron fotos en Immich para el rango de fechas de este viaje.","memories.photosFound":"fotos","memories.fromOthers":"de otros","memories.sharePhotos":"Compartir fotos","memories.sharing":"Compartiendo","memories.reviewTitle":"Revisar tus fotos","memories.reviewHint":"Haz clic en las fotos para excluirlas de compartir.","memories.shareCount":"Compartir {count} fotos","memories.immichUrl":"URL del servidor Immich","memories.immichApiKey":"Clave API","memories.testConnection":"Probar conexión","memories.testFirst":"Probar conexión primero","memories.connected":"Conectado","memories.disconnected":"No conectado","memories.connectionSuccess":"Conectado a Immich","memories.connectionError":"No se pudo conectar a Immich","memories.saved":"Configuración de Immich guardada","memories.oldest":"Más antiguas","memories.newest":"Más recientes","memories.allLocations":"Todas las ubicaciones","memories.addPhotos":"Añadir fotos","memories.linkAlbum":"Vincular álbum","memories.selectAlbum":"Seleccionar álbum de Immich","memories.noAlbums":"No se encontraron álbumes","memories.syncAlbum":"Sincronizar álbum","memories.unlinkAlbum":"Desvincular","memories.photos":"fotos","memories.selectPhotos":"Seleccionar fotos de Immich","memories.selectHint":"Toca las fotos para seleccionarlas.","memories.selected":"seleccionado(s)","memories.addSelected":"Añadir {count} fotos","memories.alreadyAdded":"Añadido","memories.private":"Privado","memories.stopSharing":"Dejar de compartir","memories.tripDates":"Fechas del viaje","memories.allPhotos":"Todas las fotos","memories.confirmShareTitle":"¿Compartir con los miembros del viaje?","memories.confirmShareHint":"{count} fotos serán visibles para todos los miembros de este viaje. Puedes hacer fotos individuales privadas más tarde.","memories.confirmShareButton":"Compartir fotos","collab.tabs.chat":"Mensajes","collab.tabs.notes":"Notas","collab.tabs.polls":"Encuestas","collab.whatsNext.title":"Qué viene ahora","collab.whatsNext.today":"Hoy","collab.whatsNext.tomorrow":"Mañana","collab.whatsNext.empty":"No hay actividades próximas","collab.whatsNext.until":"hasta","collab.whatsNext.emptyHint":"Las actividades con hora aparecerán aquí","collab.chat.send":"Enviar","collab.chat.placeholder":"Escribe un mensaje...","collab.chat.empty":"Empieza la conversación","collab.chat.emptyHint":"Los mensajes se comparten con todos los miembros del viaje","collab.chat.emptyDesc":"Comparte ideas, planes y novedades con tu grupo de viaje","collab.chat.today":"Hoy","collab.chat.yesterday":"Ayer","collab.chat.deletedMessage":"eliminó un mensaje","collab.chat.reply":"Responder","collab.chat.loadMore":"Cargar mensajes anteriores","collab.chat.justNow":"justo ahora","collab.chat.minutesAgo":"hace {n} min","collab.chat.hoursAgo":"hace {n} h","collab.notes.title":"Notas","collab.notes.new":"Nueva nota","collab.notes.empty":"Aún no hay notas","collab.notes.emptyHint":"Empieza a capturar ideas y planes","collab.notes.all":"Todas","collab.notes.titlePlaceholder":"Título de la nota","collab.notes.contentPlaceholder":"Escribe algo...","collab.notes.categoryPlaceholder":"Categoría","collab.notes.newCategory":"Nueva categoría...","collab.notes.category":"Categoría","collab.notes.noCategory":"Sin categoría","collab.notes.color":"Color","collab.notes.save":"Guardar","collab.notes.cancel":"Cancelar","collab.notes.edit":"Editar","collab.notes.delete":"Eliminar","collab.notes.pin":"Fijar","collab.notes.unpin":"Desfijar","collab.notes.daysAgo":"hace {n} d","collab.notes.categorySettings":"Gestionar categorías","collab.notes.create":"Crear","collab.notes.website":"Sitio web","collab.notes.websitePlaceholder":"https://...","collab.notes.attachFiles":"Adjuntar archivos","collab.notes.noCategoriesYet":"Aún no hay categorías","collab.notes.emptyDesc":"Crea una nota para empezar","collab.polls.title":"Encuestas","collab.polls.new":"Nueva encuesta","collab.polls.empty":"Aún no hay encuestas","collab.polls.emptyHint":"Pregunta al grupo y votad juntos","collab.polls.question":"Pregunta","collab.polls.questionPlaceholder":"¿Qué deberíamos hacer?","collab.polls.addOption":"+ Añadir opción","collab.polls.optionPlaceholder":"Opción {n}","collab.polls.create":"Crear encuesta","collab.polls.close":"Cerrar","collab.polls.closed":"Cerrada","collab.polls.votes":"{n} votos","collab.polls.vote":"{n} voto","collab.polls.multipleChoice":"Selección múltiple","collab.polls.multiChoice":"Selección múltiple","collab.polls.deadline":"Fecha límite","collab.polls.option":"Opción","collab.polls.options":"Opciones","collab.polls.delete":"Eliminar","collab.polls.closedSection":"Cerradas","files.trash":"Papelera","files.trashEmpty":"La papelera está vacía","files.emptyTrash":"Vaciar papelera","files.restore":"Restaurar","files.star":"Destacar","files.unstar":"Quitar destacado","files.assign":"Asignar","files.assignTitle":"Asignar archivo","files.assignPlace":"Lugar","files.assignBooking":"Reserva","files.unassigned":"Sin asignar","files.unlink":"Eliminar vínculo","files.noteLabel":"Nota","files.notePlaceholder":"Añadir una nota...","files.toast.trashed":"Movido a la papelera","files.toast.restored":"Archivo restaurado","files.toast.trashEmptied":"Papelera vaciada","files.toast.assigned":"Archivo asignado","files.toast.assignError":"Error al asignar","files.toast.restoreError":"Error al restaurar","files.confirm.permanentDelete":"Eliminar este archivo permanentemente? No se puede deshacer.","files.confirm.emptyTrash":"Eliminar todos los archivos de la papelera? No se puede deshacer.","reservations.meta.airline":"Aerolínea","reservations.meta.flightNumber":"N° de vuelo","reservations.meta.from":"Desde","reservations.meta.to":"Hasta","reservations.meta.trainNumber":"N° de tren","reservations.meta.platform":"Andén","reservations.meta.seat":"Asiento","reservations.meta.checkIn":"Check-in","reservations.meta.checkOut":"Check-out","reservations.meta.linkAccommodation":"Alojamiento","reservations.meta.pickAccommodation":"Vincular con alojamiento","reservations.meta.noAccommodation":"Ninguno","reservations.meta.hotelPlace":"Alojamiento","reservations.meta.pickHotel":"Seleccionar alojamiento","reservations.meta.fromDay":"Desde","reservations.meta.toDay":"Hasta","reservations.meta.selectDay":"Seleccionar día","admin.oidcOnlyMode":"Desactivar autenticación por contraseña","admin.oidcOnlyModeHint":"Si está activado, solo se permite el inicio de sesión con SSO. El inicio de sesión y registro con contraseña se bloquean.","login.oidcOnly":"La autenticación por contraseña está desactivada. Por favor, inicia sesión con tu proveedor SSO.","settings.currentPasswordRequired":"La contraseña actual es obligatoria","settings.passwordWeak":"La contraseña debe contener mayúsculas, minúsculas, números y un carácter especial","admin.tabs.permissions":"Permisos","perm.title":"Configuración de permisos","perm.subtitle":"Controla quién puede realizar acciones en la aplicación","perm.saved":"Configuración de permisos guardada","perm.resetDefaults":"Restablecer valores predeterminados","perm.customized":"personalizado","perm.level.admin":"Solo administrador","perm.level.tripOwner":"Propietario del viaje","perm.level.tripMember":"Miembros del viaje","perm.level.everybody":"Todos","perm.cat.trip":"Gestión de viajes","perm.cat.members":"Gestión de miembros","perm.cat.files":"Archivos","perm.cat.content":"Contenido y horario","perm.cat.extras":"Presupuesto, equipaje y colaboración","perm.action.trip_create":"Crear viajes","perm.action.trip_edit":"Editar detalles del viaje","perm.action.trip_delete":"Eliminar viajes","perm.action.trip_archive":"Archivar / desarchivar viajes","perm.action.trip_cover_upload":"Subir imagen de portada","perm.action.member_manage":"Añadir / eliminar miembros","perm.action.file_upload":"Subir archivos","perm.action.file_edit":"Editar metadatos del archivo","perm.action.file_delete":"Eliminar archivos","perm.action.place_edit":"Añadir / editar / eliminar lugares","perm.action.day_edit":"Editar días, notas y asignaciones","perm.action.reservation_edit":"Gestionar reservas","perm.action.budget_edit":"Gestionar presupuesto","perm.action.packing_edit":"Gestionar listas de equipaje","perm.action.collab_edit":"Colaboración (notas, encuestas, chat)","perm.action.share_manage":"Gestionar enlaces compartidos","perm.actionHint.trip_create":"Quién puede crear nuevos viajes","perm.actionHint.trip_edit":"Quién puede cambiar el nombre, fechas, descripción y moneda del viaje","perm.actionHint.trip_delete":"Quién puede eliminar permanentemente un viaje","perm.actionHint.trip_archive":"Quién puede archivar o desarchivar un viaje","perm.actionHint.trip_cover_upload":"Quién puede subir o cambiar la imagen de portada","perm.actionHint.member_manage":"Quién puede invitar o eliminar miembros del viaje","perm.actionHint.file_upload":"Quién puede subir archivos a un viaje","perm.actionHint.file_edit":"Quién puede editar descripciones y enlaces de archivos","perm.actionHint.file_delete":"Quién puede mover archivos a la papelera o eliminarlos permanentemente","perm.actionHint.place_edit":"Quién puede añadir, editar o eliminar lugares","perm.actionHint.day_edit":"Quién puede editar días, notas de días y asignaciones de lugares","perm.actionHint.reservation_edit":"Quién puede crear, editar o eliminar reservas","perm.actionHint.budget_edit":"Quién puede crear, editar o eliminar partidas del presupuesto","perm.actionHint.packing_edit":"Quién puede gestionar artículos de equipaje y bolsas","perm.actionHint.collab_edit":"Quién puede crear notas, encuestas y enviar mensajes","perm.actionHint.share_manage":"Quién puede crear o eliminar enlaces compartidos públicos"},bM={"common.save":"Enregistrer","common.cancel":"Annuler","common.delete":"Supprimer","common.edit":"Modifier","common.add":"Ajouter","common.loading":"Chargement…","common.import":"Importer","common.error":"Erreur","common.back":"Retour","common.all":"Tout","common.close":"Fermer","common.open":"Ouvrir","common.upload":"Importer","common.search":"Rechercher","common.confirm":"Confirmer","common.ok":"OK","common.yes":"Oui","common.no":"Non","common.or":"ou","common.none":"Aucun","common.date":"Date","common.rename":"Renommer","common.name":"Nom","common.email":"E-mail","common.password":"Mot de passe","common.saving":"Enregistrement…","common.saved":"Enregistré","trips.reminder":"Rappel","trips.reminderNone":"Aucun","trips.reminderDay":"jour","trips.reminderDays":"jours","trips.reminderCustom":"Personnalisé","trips.reminderDaysBefore":"jours avant le départ","trips.reminderDisabledHint":"Les rappels de voyage sont désactivés. Activez-les dans Admin > Paramètres > Notifications.","common.update":"Mettre à jour","common.change":"Modifier","common.uploading":"Import en cours…","common.backToPlanning":"Retour à la planification","common.reset":"Réinitialiser","nav.trip":"Voyage","nav.share":"Partager","nav.settings":"Paramètres","nav.admin":"Admin","nav.logout":"Déconnexion","nav.lightMode":"Mode clair","nav.darkMode":"Mode sombre","nav.autoMode":"Mode auto","nav.administrator":"Administrateur","dashboard.title":"Mes voyages","dashboard.subtitle.loading":"Chargement des voyages…","dashboard.subtitle.trips":"{count} voyages ({archived} archivés)","dashboard.subtitle.empty":"Commencez votre premier voyage","dashboard.subtitle.activeOne":"{count} voyage actif","dashboard.subtitle.activeMany":"{count} voyages actifs","dashboard.subtitle.archivedSuffix":" · {count} archivés","dashboard.newTrip":"Nouveau voyage","dashboard.gridView":"Vue en grille","dashboard.listView":"Vue en liste","dashboard.currency":"Devise","dashboard.timezone":"Fuseau horaire","dashboard.localTime":"Heure locale","dashboard.timezoneCustomTitle":"Fuseau horaire personnalisé","dashboard.timezoneCustomLabelPlaceholder":"Libellé (facultatif)","dashboard.timezoneCustomTzPlaceholder":"ex. America/New_York","dashboard.timezoneCustomAdd":"Ajouter","dashboard.timezoneCustomErrorEmpty":"Saisissez un identifiant de fuseau horaire","dashboard.timezoneCustomErrorInvalid":"Fuseau horaire invalide. Utilisez un format comme Europe/Berlin","dashboard.timezoneCustomErrorDuplicate":"Déjà ajouté","dashboard.emptyTitle":"Aucun voyage","dashboard.emptyText":"Créez votre premier voyage et commencez à planifier !","dashboard.emptyButton":"Créer un premier voyage","dashboard.nextTrip":"Prochain voyage","dashboard.shared":"Partagé","dashboard.sharedBy":"Partagé par {name}","dashboard.days":"Jours","dashboard.places":"Lieux","dashboard.archive":"Archiver","dashboard.restore":"Restaurer","dashboard.archived":"Archivé","dashboard.status.ongoing":"En cours","dashboard.status.today":"Aujourd'hui","dashboard.status.tomorrow":"Demain","dashboard.status.past":"Passé","dashboard.status.daysLeft":"{count} jours restants","dashboard.toast.loadError":"Impossible de charger les voyages","dashboard.toast.created":"Voyage créé avec succès !","dashboard.toast.createError":"Impossible de créer le voyage","dashboard.toast.updated":"Voyage mis à jour !","dashboard.toast.updateError":"Impossible de mettre à jour le voyage","dashboard.toast.deleted":"Voyage supprimé","dashboard.toast.deleteError":"Impossible de supprimer le voyage","dashboard.toast.archived":"Voyage archivé","dashboard.toast.archiveError":"Impossible d'archiver le voyage","dashboard.toast.restored":"Voyage restauré","dashboard.toast.restoreError":"Impossible de restaurer le voyage","dashboard.confirm.delete":"Supprimer le voyage « {title} » ? Tous les lieux et plans seront définitivement supprimés.","dashboard.editTrip":"Modifier le voyage","dashboard.createTrip":"Créer un nouveau voyage","dashboard.tripTitle":"Titre","dashboard.tripTitlePlaceholder":"ex. Été au Japon","dashboard.tripDescription":"Description","dashboard.tripDescriptionPlaceholder":"De quoi parle ce voyage ?","dashboard.startDate":"Date de début","dashboard.endDate":"Date de fin","dashboard.noDateHint":"Aucune date définie — 7 jours par défaut seront créés. Vous pouvez modifier cela à tout moment.","dashboard.coverImage":"Image de couverture","dashboard.addCoverImage":"Ajouter une image de couverture","dashboard.addMembers":"Compagnons de voyage","dashboard.addMember":"Ajouter un membre","dashboard.coverSaved":"Image de couverture enregistrée","dashboard.coverUploadError":"Échec de l'import","dashboard.coverRemoveError":"Échec de la suppression","dashboard.titleRequired":"Le titre est obligatoire","dashboard.endDateError":"La date de fin doit être postérieure à la date de début","settings.title":"Paramètres","settings.subtitle":"Configurez vos paramètres personnels","settings.map":"Carte","settings.mapTemplate":"Modèle de carte","settings.mapTemplatePlaceholder.select":"Sélectionner un modèle…","settings.mapDefaultHint":"Laissez vide pour OpenStreetMap (par défaut)","settings.mapTemplatePlaceholder":"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png","settings.mapHint":"Modèle d'URL pour les tuiles de carte","settings.latitude":"Latitude","settings.longitude":"Longitude","settings.saveMap":"Enregistrer la carte","settings.apiKeys":"Clés API","settings.mapsKey":"Clé API Google Maps","settings.mapsKeyHint":"Pour la recherche de lieux. Nécessite l'API Places (New). Obtenez-la sur console.cloud.google.com","settings.weatherKey":"Clé API OpenWeatherMap","settings.weatherKeyHint":"Pour les données météo. Gratuit sur openweathermap.org/api","settings.keyPlaceholder":"Saisir la clé…","settings.configured":"Configuré","settings.saveKeys":"Enregistrer les clés","settings.display":"Affichage","settings.colorMode":"Mode de couleur","settings.light":"Clair","settings.dark":"Sombre","settings.auto":"Auto","settings.language":"Langue","settings.temperature":"Unité de température","settings.timeFormat":"Format de l'heure","settings.routeCalculation":"Calcul d'itinéraire","settings.blurBookingCodes":"Masquer les codes de réservation","settings.notifications":"Notifications","settings.notifyTripInvite":"Invitations de voyage","settings.notifyBookingChange":"Modifications de réservation","settings.notifyTripReminder":"Rappels de voyage","settings.notifyVacayInvite":"Invitations de fusion Vacay","settings.notifyPhotosShared":"Photos partagées (Immich)","settings.notifyCollabMessage":"Messages de chat (Collab)","settings.notifyPackingTagged":"Liste de bagages : attributions","settings.notifyWebhook":"Notifications webhook","settings.notificationsDisabled":"Les notifications ne sont pas configurées. Demandez à un administrateur d'activer les notifications par e-mail ou webhook.","settings.notificationsActive":"Canal actif","settings.notificationsManagedByAdmin":"Les événements de notification sont configurés par votre administrateur.","admin.notifications.title":"Notifications","admin.notifications.hint":"Choisissez un canal de notification. Un seul peut être actif à la fois.","admin.notifications.none":"Désactivé","admin.notifications.email":"E-mail (SMTP)","admin.notifications.webhook":"Webhook","admin.notifications.events":"Événements de notification","admin.notifications.eventsHint":"Choisissez quels événements déclenchent des notifications pour tous les utilisateurs.","admin.notifications.configureFirst":"Configurez d'abord les paramètres SMTP ou webhook ci-dessous, puis activez les événements.","admin.notifications.save":"Enregistrer les paramètres de notification","admin.notifications.saved":"Paramètres de notification enregistrés","admin.notifications.testWebhook":"Envoyer un webhook de test","admin.notifications.testWebhookSuccess":"Webhook de test envoyé avec succès","admin.notifications.testWebhookFailed":"Échec du webhook de test","admin.smtp.title":"E-mail et notifications","admin.smtp.hint":"Configuration SMTP pour l'envoi des notifications par e-mail.","admin.smtp.testButton":"Envoyer un e-mail de test","admin.webhook.hint":"Envoyer des notifications vers un webhook externe (Discord, Slack, etc.).","admin.smtp.testSuccess":"E-mail de test envoyé avec succès","admin.smtp.testFailed":"Échec de l'e-mail de test","dayplan.icsTooltip":"Exporter le calendrier (ICS)","share.linkTitle":"Lien public","share.linkHint":"Créez un lien que n'importe qui peut utiliser pour consulter ce voyage sans se connecter. Lecture seule — aucune modification possible.","share.createLink":"Créer un lien","share.deleteLink":"Supprimer le lien","share.createError":"Impossible de créer le lien","common.copy":"Copier","common.copied":"Copié","share.permMap":"Carte et plan","share.permBookings":"Réservations","share.permPacking":"Bagages","shared.expired":"Lien expiré ou invalide","shared.expiredHint":"Ce lien de partage n'est plus actif.","shared.readOnly":"Vue en lecture seule","shared.tabPlan":"Plan","shared.tabBookings":"Réservations","shared.tabPacking":"Bagages","shared.tabBudget":"Budget","shared.tabChat":"Chat","shared.days":"jours","shared.places":"lieux","shared.other":"Autre","shared.totalBudget":"Budget total","shared.messages":"messages","shared.sharedVia":"Partagé via","shared.confirmed":"Confirmé","shared.pending":"En attente","share.permBudget":"Budget","share.permCollab":"Chat","settings.on":"Activé","settings.off":"Désactivé","settings.mcp.title":"Configuration MCP","settings.mcp.endpoint":"Point de terminaison MCP","settings.mcp.clientConfig":"Configuration du client","settings.mcp.clientConfigHint":"Remplacez par un token API de la liste ci-dessous. Le chemin vers npx devra peut-être être ajusté selon votre système (ex. C:\\PROGRA~1\\nodejs\\npx.cmd sous Windows).","settings.mcp.copy":"Copier","settings.mcp.copied":"Copié !","settings.mcp.apiTokens":"Tokens API","settings.mcp.createToken":"Créer un token","settings.mcp.noTokens":"Aucun token pour l'instant. Créez-en un pour connecter des clients MCP.","settings.mcp.tokenCreatedAt":"Créé","settings.mcp.tokenUsedAt":"Utilisé","settings.mcp.deleteTokenTitle":"Supprimer le token","settings.mcp.deleteTokenMessage":"Ce token cessera de fonctionner immédiatement. Tout client MCP l'utilisant perdra l'accès.","settings.mcp.modal.createTitle":"Créer un token API","settings.mcp.modal.tokenName":"Nom du token","settings.mcp.modal.tokenNamePlaceholder":"ex. Claude Desktop, Ordinateur pro","settings.mcp.modal.creating":"Création…","settings.mcp.modal.create":"Créer le token","settings.mcp.modal.createdTitle":"Token créé","settings.mcp.modal.createdWarning":"Ce token ne sera affiché qu'une seule fois. Copiez-le et conservez-le maintenant — il ne pourra pas être récupéré.","settings.mcp.modal.done":"Terminé","settings.mcp.toast.created":"Token créé","settings.mcp.toast.createError":"Impossible de créer le token","settings.mcp.toast.deleted":"Token supprimé","settings.mcp.toast.deleteError":"Impossible de supprimer le token","settings.account":"Compte","settings.username":"Nom d'utilisateur","settings.email":"E-mail","settings.role":"Rôle","settings.roleAdmin":"Administrateur","settings.oidcLinked":"Lié avec","settings.changePassword":"Changer le mot de passe","settings.mustChangePassword":"Vous devez changer votre mot de passe avant de continuer. Veuillez définir un nouveau mot de passe ci-dessous.","settings.currentPassword":"Mot de passe actuel","settings.currentPasswordRequired":"Le mot de passe actuel est requis","settings.newPassword":"Nouveau mot de passe","settings.confirmPassword":"Confirmer le nouveau mot de passe","settings.updatePassword":"Mettre à jour le mot de passe","settings.passwordRequired":"Veuillez saisir le mot de passe actuel et le nouveau","settings.passwordTooShort":"Le mot de passe doit comporter au moins 8 caractères","settings.passwordMismatch":"Les mots de passe ne correspondent pas","settings.passwordWeak":"Le mot de passe doit contenir des majuscules, des minuscules, un chiffre et un caractère spécial","settings.passwordChanged":"Mot de passe modifié avec succès","settings.deleteAccount":"Supprimer le compte","settings.deleteAccountTitle":"Supprimer votre compte ?","settings.deleteAccountWarning":"Votre compte ainsi que tous vos voyages, lieux et fichiers seront définitivement supprimés. Cette action est irréversible.","settings.deleteAccountConfirm":"Supprimer définitivement","settings.deleteBlockedTitle":"Suppression impossible","settings.deleteBlockedMessage":"Vous êtes le seul administrateur. Promouvez un autre utilisateur en tant qu'administrateur avant de supprimer votre compte.","settings.roleUser":"Utilisateur","settings.saveProfile":"Enregistrer le profil","settings.mfa.title":"Authentification à deux facteurs (2FA)","settings.mfa.description":"Ajoute une étape supplémentaire lors de la connexion. Utilisez une application d'authentification (Google Authenticator, Authy, etc.).","settings.mfa.requiredByPolicy":"Votre administrateur exige l'authentification à deux facteurs. Configurez une application d'authentification ci-dessous avant de continuer.","settings.mfa.backupTitle":"Codes de secours","settings.mfa.backupDescription":"Utilisez ces codes à usage unique si vous perdez l'accès à votre application d'authentification.","settings.mfa.backupWarning":"Enregistrez ces codes maintenant. Chaque code n'est utilisable qu'une seule fois.","settings.mfa.backupCopy":"Copier les codes","settings.mfa.backupDownload":"Télécharger TXT","settings.mfa.backupPrint":"Imprimer / PDF","settings.mfa.backupCopied":"Codes de secours copiés","settings.mfa.enabled":"2FA est activé sur votre compte.","settings.mfa.disabled":"2FA n'est pas activé.","settings.mfa.setup":"Configurer l'authentificateur","settings.mfa.scanQr":"Scannez ce code QR avec votre application ou entrez la clé manuellement.","settings.mfa.secretLabel":"Clé secrète (saisie manuelle)","settings.mfa.codePlaceholder":"Code à 6 chiffres","settings.mfa.enable":"Activer 2FA","settings.mfa.cancelSetup":"Annuler","settings.mfa.disableTitle":"Désactiver 2FA","settings.mfa.disableHint":"Entrez votre mot de passe et un code actuel de votre authentificateur.","settings.mfa.disable":"Désactiver 2FA","settings.mfa.toastEnabled":"Authentification à deux facteurs activée","settings.mfa.toastDisabled":"Authentification à deux facteurs désactivée","settings.mfa.demoBlocked":"Non disponible en mode démo","settings.toast.mapSaved":"Paramètres de carte enregistrés","settings.toast.keysSaved":"Clés API enregistrées","settings.toast.displaySaved":"Paramètres d'affichage enregistrés","settings.toast.profileSaved":"Profil enregistré","settings.uploadAvatar":"Importer une photo de profil","settings.removeAvatar":"Supprimer la photo de profil","settings.avatarUploaded":"Photo de profil mise à jour","settings.avatarRemoved":"Photo de profil supprimée","settings.avatarError":"Échec de l'import","login.error":"Échec de la connexion. Veuillez vérifier vos identifiants.","login.tagline":`Vos voyages. Votre organisation.`,"login.description":"Planifiez vos voyages en collaboration avec des cartes interactives, des budgets et la synchronisation en temps réel.","login.features.maps":"Cartes interactives","login.features.mapsDesc":"Google Places, itinéraires et regroupement","login.features.realtime":"Synchronisation en temps réel","login.features.realtimeDesc":"Planifiez ensemble via WebSocket","login.features.budget":"Suivi du budget","login.features.budgetDesc":"Catégories, graphiques et coûts par personne","login.features.collab":"Collaboration","login.features.collabDesc":"Multi-utilisateurs avec voyages partagés","login.features.packing":"Listes de bagages","login.features.packingDesc":"Catégories, progression et suggestions","login.features.bookings":"Réservations","login.features.bookingsDesc":"Vols, hôtels, restaurants et plus","login.features.files":"Documents","login.features.filesDesc":"Importez et gérez vos documents","login.features.routes":"Itinéraires intelligents","login.features.routesDesc":"Optimisation automatique et export Google Maps","login.selfHosted":"Auto-hébergé · Open Source · Vos données restent les vôtres","login.title":"Connexion","login.subtitle":"Bon retour","login.signingIn":"Connexion en cours…","login.signIn":"Se connecter","login.createAdmin":"Créer un compte administrateur","login.createAdminHint":"Configurez le premier compte administrateur pour TREK.","login.setNewPassword":"Définir un nouveau mot de passe","login.setNewPasswordHint":"Vous devez changer votre mot de passe avant de continuer.","login.createAccount":"Créer un compte","login.createAccountHint":"Créez un nouveau compte.","login.creating":"Création…","login.noAccount":"Pas encore de compte ?","login.hasAccount":"Vous avez déjà un compte ?","login.register":"S'inscrire","login.emailPlaceholder":"votre@email.com","login.username":"Nom d'utilisateur","login.oidc.registrationDisabled":"Les inscriptions sont désactivées. Contactez votre administrateur.","login.oidc.noEmail":"Aucun e-mail reçu du fournisseur.","login.mfaTitle":"Authentification à deux facteurs","login.mfaSubtitle":"Entrez le code à 6 chiffres de votre application d'authentification.","login.mfaCodeLabel":"Code de vérification","login.mfaCodeRequired":"Entrez le code de votre application d'authentification.","login.mfaHint":"Ouvrez Google Authenticator, Authy ou une autre application TOTP.","login.mfaBack":"← Retour à la connexion","login.mfaVerify":"Vérifier","login.oidc.tokenFailed":"L'authentification a échoué.","login.oidc.invalidState":"Session invalide. Veuillez réessayer.","login.demoFailed":"Échec de la connexion démo","login.oidcSignIn":"Se connecter avec {name}","login.oidcOnly":"L'authentification par mot de passe est désactivée. Veuillez vous connecter via votre fournisseur SSO.","login.demoHint":"Essayez la démo — aucune inscription nécessaire","register.passwordMismatch":"Les mots de passe ne correspondent pas","register.passwordTooShort":"Le mot de passe doit comporter au moins 8 caractères","register.failed":"Échec de l'inscription","register.getStarted":"Commencer","register.subtitle":"Créez un compte et commencez à planifier vos voyages de rêve.","register.feature1":"Plans de voyage illimités","register.feature2":"Vue carte interactive","register.feature3":"Gérez les lieux et catégories","register.feature4":"Suivez les réservations","register.feature5":"Créez des listes de bagages","register.feature6":"Stockez photos et fichiers","register.createAccount":"Créer un compte","register.startPlanning":"Commencez à planifier vos voyages","register.minChars":"Min. 6 caractères","register.confirmPassword":"Confirmer le mot de passe","register.repeatPassword":"Répéter le mot de passe","register.registering":"Inscription en cours…","register.register":"S'inscrire","register.hasAccount":"Vous avez déjà un compte ?","register.signIn":"Se connecter","admin.title":"Administration","admin.subtitle":"Gestion des utilisateurs et paramètres système","admin.tabs.users":"Utilisateurs","admin.tabs.categories":"Catégories","admin.tabs.backup":"Sauvegarde","admin.stats.users":"Utilisateurs","admin.stats.trips":"Voyages","admin.stats.places":"Lieux","admin.stats.photos":"Photos","admin.stats.files":"Fichiers","admin.table.user":"Utilisateur","admin.table.email":"E-mail","admin.table.role":"Rôle","admin.table.created":"Créé le","admin.table.lastLogin":"Dernière connexion","admin.table.actions":"Actions","admin.you":"(Vous)","admin.editUser":"Modifier l'utilisateur","admin.newPassword":"Nouveau mot de passe","admin.newPasswordHint":"Laissez vide pour conserver le mot de passe actuel","admin.deleteUser":"Supprimer l'utilisateur « {name} » ? Tous les voyages seront définitivement supprimés.","admin.deleteUserTitle":"Supprimer l'utilisateur","admin.newPasswordPlaceholder":"Saisir le nouveau mot de passe…","admin.toast.loadError":"Impossible de charger les données d'administration","admin.toast.userUpdated":"Utilisateur mis à jour","admin.toast.updateError":"Échec de la mise à jour","admin.toast.userDeleted":"Utilisateur supprimé","admin.toast.deleteError":"Échec de la suppression","admin.toast.cannotDeleteSelf":"Impossible de supprimer votre propre compte","admin.toast.userCreated":"Utilisateur créé","admin.toast.createError":"Échec de la création de l'utilisateur","admin.toast.fieldsRequired":"Le nom d'utilisateur, l'e-mail et le mot de passe sont requis","admin.createUser":"Créer un utilisateur","admin.invite.title":"Liens d'invitation","admin.invite.subtitle":"Créer des liens d'inscription à usage unique","admin.invite.create":"Créer un lien","admin.invite.createAndCopy":"Créer et copier","admin.invite.empty":"Aucun lien d'invitation créé","admin.invite.maxUses":"Utilisations max.","admin.invite.expiry":"Expire après","admin.invite.uses":"utilisé(s)","admin.invite.expiresAt":"expire le","admin.invite.createdBy":"par","admin.invite.active":"Actif","admin.invite.expired":"Expiré","admin.invite.usedUp":"Épuisé","admin.invite.copied":"Lien d'invitation copié","admin.invite.copyLink":"Copier le lien","admin.invite.deleted":"Lien d'invitation supprimé","admin.invite.createError":"Erreur lors de la création du lien","admin.invite.deleteError":"Erreur lors de la suppression du lien","admin.tabs.settings":"Paramètres","admin.allowRegistration":"Autoriser les inscriptions","admin.allowRegistrationHint":"Les nouveaux utilisateurs peuvent s'inscrire eux-mêmes","admin.requireMfa":"Exiger l'authentification à deux facteurs (2FA)","admin.requireMfaHint":"Les utilisateurs sans 2FA doivent terminer la configuration dans Paramètres avant d'utiliser l'application.","admin.apiKeys":"Clés API","admin.apiKeysHint":"Facultatif. Active les données de lieu étendues comme les photos et la météo.","admin.mapsKey":"Clé API Google Maps","admin.mapsKeyHint":"Requise pour la recherche de lieux. Obtenez-la sur console.cloud.google.com","admin.mapsKeyHintLong":"Sans clé API, OpenStreetMap est utilisé pour la recherche de lieux. Avec une clé Google API, les photos, notes et horaires d'ouverture peuvent également être chargés. Obtenez-en une sur console.cloud.google.com.","admin.recommended":"Recommandé","admin.weatherKey":"Clé API OpenWeatherMap","admin.weatherKeyHint":"Pour les données météo. Gratuit sur openweathermap.org","admin.validateKey":"Tester","admin.keyValid":"Connecté","admin.keyInvalid":"Invalide","admin.keySaved":"Clés API enregistrées","admin.oidcTitle":"Authentification unique (OIDC)","admin.oidcSubtitle":"Autorisez la connexion via des fournisseurs externes comme Google, Apple, Authentik ou Keycloak.","admin.oidcDisplayName":"Nom d'affichage","admin.oidcIssuer":"URL de l'émetteur","admin.oidcIssuerHint":"L'URL de l'émetteur OpenID Connect du fournisseur. ex. https://accounts.google.com","admin.oidcSaved":"Configuration OIDC enregistrée","admin.oidcOnlyMode":"Désactiver l'authentification par mot de passe","admin.oidcOnlyModeHint":"Lorsqu'activé, seule la connexion SSO est autorisée. La connexion et l'inscription par mot de passe sont bloquées.","admin.fileTypes":"Types de fichiers autorisés","admin.fileTypesHint":"Configurez les types de fichiers que les utilisateurs peuvent importer.","admin.fileTypesFormat":"Extensions séparées par des virgules (ex. jpg,png,pdf,doc). Utilisez * pour autoriser tous les types.","admin.fileTypesSaved":"Paramètres des types de fichiers enregistrés","admin.bagTracking.title":"Suivi des bagages","admin.bagTracking.subtitle":"Activer le poids et l'attribution de bagages pour les articles","admin.tabs.config":"Configuration","admin.tabs.templates":"Modèles de bagages","admin.packingTemplates.title":"Modèles de bagages","admin.packingTemplates.subtitle":"Créer des listes de bagages réutilisables pour vos voyages","admin.packingTemplates.create":"Nouveau modèle","admin.packingTemplates.namePlaceholder":"Nom du modèle (ex. Vacances à la plage)","admin.packingTemplates.empty":"Aucun modèle créé","admin.packingTemplates.items":"articles","admin.packingTemplates.categories":"catégories","admin.packingTemplates.itemName":"Nom de l'article","admin.packingTemplates.itemCategory":"Catégorie","admin.packingTemplates.categoryName":"Nom de catégorie (ex. Vêtements)","admin.packingTemplates.addCategory":"Ajouter une catégorie","admin.packingTemplates.created":"Modèle créé","admin.packingTemplates.deleted":"Modèle supprimé","admin.packingTemplates.loadError":"Erreur de chargement des modèles","admin.packingTemplates.createError":"Erreur de création du modèle","admin.packingTemplates.deleteError":"Erreur de suppression du modèle","admin.packingTemplates.saveError":"Erreur de sauvegarde","admin.tabs.addons":"Extensions","admin.addons.title":"Extensions","admin.addons.subtitle":"Activez ou désactivez des fonctionnalités pour personnaliser votre expérience TREK.","admin.addons.catalog.memories.name":"Photos (Immich)","admin.addons.catalog.memories.description":"Partagez vos photos de voyage via votre instance Immich","admin.addons.catalog.mcp.name":"MCP","admin.addons.catalog.mcp.description":"Protocole de contexte de modèle pour l'intégration d'assistants IA","admin.addons.catalog.packing.name":"Bagages","admin.addons.catalog.packing.description":"Listes de contrôle pour préparer vos bagages pour chaque voyage","admin.addons.catalog.budget.name":"Budget","admin.addons.catalog.budget.description":"Suivez les dépenses et planifiez votre budget de voyage","admin.addons.catalog.documents.name":"Documents","admin.addons.catalog.documents.description":"Stockez et gérez vos documents de voyage","admin.addons.catalog.vacay.name":"Vacances","admin.addons.catalog.vacay.description":"Planificateur de vacances personnel avec vue calendrier","admin.addons.catalog.atlas.name":"Atlas","admin.addons.catalog.atlas.description":"Carte du monde avec pays visités et statistiques de voyage","admin.addons.catalog.collab.name":"Collaboration","admin.addons.catalog.collab.description":"Notes en temps réel, sondages et chat pour la planification de voyage","admin.addons.subtitleBefore":"Activez ou désactivez des fonctionnalités pour personnaliser votre expérience ","admin.addons.subtitleAfter":".","admin.addons.enabled":"Activé","admin.addons.disabled":"Désactivé","admin.addons.type.trip":"Voyage","admin.addons.type.global":"Global","admin.addons.type.integration":"Intégration","admin.addons.tripHint":"Disponible comme onglet dans chaque voyage","admin.addons.globalHint":"Disponible comme section autonome dans la navigation principale","admin.addons.integrationHint":"Services backend et intégrations API sans page dédiée","admin.addons.toast.updated":"Extension mise à jour","admin.addons.toast.error":"Échec de la mise à jour de l'extension","admin.addons.noAddons":"Aucune extension disponible","admin.weather.title":"Données météo","admin.weather.badge":"Depuis le 24 mars 2026","admin.weather.description":"TREK utilise Open-Meteo comme source de données météo. Open-Meteo est un service météo gratuit et open source — aucune clé API requise.","admin.weather.forecast":"Prévisions sur 16 jours","admin.weather.forecastDesc":"Auparavant 5 jours (OpenWeatherMap)","admin.weather.climate":"Données climatiques historiques","admin.weather.climateDesc":"Moyennes des 85 dernières années pour les jours au-delà des prévisions de 16 jours","admin.weather.requests":"10 000 requêtes / jour","admin.weather.requestsDesc":"Gratuit, aucune clé API requise","admin.weather.locationHint":"La météo est basée sur le premier lieu avec des coordonnées de chaque jour. Si aucun lieu n'est attribué à un jour, un lieu de la liste est utilisé comme référence.","admin.tabs.audit":"Journal d'audit","admin.audit.subtitle":"Événements sensibles de sécurité et d'administration (sauvegardes, utilisateurs, 2FA, paramètres).","admin.audit.empty":"Aucune entrée d'audit.","admin.audit.refresh":"Actualiser","admin.audit.loadMore":"Charger plus","admin.audit.showing":"{count} chargées · {total} au total","admin.audit.col.time":"Heure","admin.audit.col.user":"Utilisateur","admin.audit.col.action":"Action","admin.audit.col.resource":"Ressource","admin.audit.col.ip":"IP","admin.audit.col.details":"Détails","admin.tabs.mcpTokens":"Tokens MCP","admin.mcpTokens.title":"Tokens MCP","admin.mcpTokens.subtitle":"Gérer les tokens API de tous les utilisateurs","admin.mcpTokens.owner":"Propriétaire","admin.mcpTokens.tokenName":"Nom du token","admin.mcpTokens.created":"Créé","admin.mcpTokens.lastUsed":"Dernière utilisation","admin.mcpTokens.never":"Jamais","admin.mcpTokens.empty":"Aucun token MCP n'a encore été créé","admin.mcpTokens.deleteTitle":"Supprimer le token","admin.mcpTokens.deleteMessage":"Ce token sera révoqué immédiatement. L'utilisateur perdra l'accès MCP via ce token.","admin.mcpTokens.deleteSuccess":"Token supprimé","admin.mcpTokens.deleteError":"Impossible de supprimer le token","admin.mcpTokens.loadError":"Impossible de charger les tokens","admin.tabs.github":"GitHub","admin.github.title":"Historique des versions","admin.github.subtitle":"Dernières mises à jour de {repo}","admin.github.latest":"Dernière","admin.github.prerelease":"Pré-version","admin.github.showDetails":"Afficher les détails","admin.github.hideDetails":"Masquer les détails","admin.github.loadMore":"Charger plus","admin.github.loading":"Chargement…","admin.github.support":"Aidez à poursuivre le développement de TREK","admin.github.error":"Impossible de charger les versions","admin.github.by":"par","admin.update.available":"Mise à jour disponible","admin.update.text":"TREK {version} est disponible. Vous utilisez {current}.","admin.update.button":"Voir sur GitHub","admin.update.install":"Installer la mise à jour","admin.update.confirmTitle":"Installer la mise à jour ?","admin.update.confirmText":"TREK sera mis à jour de {current} vers {version}. Le serveur redémarrera automatiquement ensuite.","admin.update.dataInfo":"Toutes vos données (voyages, utilisateurs, clés API, importations, Vacances, Atlas, budgets) seront préservées.","admin.update.warning":"L'application sera brièvement indisponible pendant le redémarrage.","admin.update.confirm":"Mettre à jour maintenant","admin.update.installing":"Mise à jour…","admin.update.success":"Mise à jour installée ! Le serveur redémarre…","admin.update.failed":"Échec de la mise à jour","admin.update.backupHint":"Nous recommandons de créer une sauvegarde avant la mise à jour.","admin.update.backupLink":"Aller aux sauvegardes","admin.update.howTo":"Comment mettre à jour","admin.update.dockerText":"Votre instance TREK fonctionne dans Docker. Pour mettre à jour vers {version}, exécutez les commandes suivantes sur votre serveur :","admin.update.reloadHint":"Veuillez recharger la page dans quelques secondes.","vacay.subtitle":"Planifiez et gérez vos jours de congés","vacay.settings":"Paramètres","vacay.year":"Année","vacay.addYear":"Ajouter une année","vacay.removeYear":"Supprimer l'année","vacay.removeYearConfirm":"Supprimer {year} ?","vacay.removeYearHint":"Toutes les entrées de vacances et jours fériés d'entreprise de cette année seront définitivement supprimés.","vacay.remove":"Supprimer","vacay.persons":"Personnes","vacay.noPersons":"Aucune personne ajoutée","vacay.addPerson":"Ajouter une personne","vacay.editPerson":"Modifier la personne","vacay.removePerson":"Supprimer la personne","vacay.removePersonConfirm":"Supprimer {name} ?","vacay.removePersonHint":"Toutes les entrées de vacances de cette personne seront définitivement supprimées.","vacay.personName":"Nom","vacay.personNamePlaceholder":"Saisir le nom","vacay.color":"Couleur","vacay.add":"Ajouter","vacay.legend":"Légende","vacay.publicHoliday":"Jour férié","vacay.companyHoliday":"Jour férié d'entreprise","vacay.weekend":"Week-end","vacay.modeVacation":"Vacances","vacay.modeCompany":"Jour férié d'entreprise","vacay.entitlement":"Droits","vacay.entitlementDays":"Jours","vacay.used":"Utilisés","vacay.remaining":"Restants","vacay.carriedOver":"de {year}","vacay.weekendDays":"Jours de week-end","vacay.mon":"Lun","vacay.tue":"Mar","vacay.wed":"Mer","vacay.thu":"Jeu","vacay.fri":"Ven","vacay.sat":"Sam","vacay.sun":"Dim","vacay.blockWeekends":"Bloquer les week-ends","vacay.blockWeekendsHint":"Empêcher les entrées de vacances les samedis et dimanches","vacay.publicHolidays":"Jours fériés","vacay.publicHolidaysHint":"Marquer les jours fériés dans le calendrier","vacay.selectCountry":"Sélectionner un pays","vacay.selectRegion":"Sélectionner une région (facultatif)","vacay.companyHolidays":"Jours fériés d'entreprise","vacay.companyHolidaysHint":"Autoriser le marquage des jours fériés d'entreprise","vacay.companyHolidaysNoDeduct":"Les jours fériés d'entreprise ne sont pas déduits des jours de vacances.","vacay.carryOver":"Report","vacay.carryOverHint":"Reporter automatiquement les jours de vacances restants à l'année suivante","vacay.sharing":"Partage","vacay.sharingHint":"Partagez votre plan de vacances avec d'autres utilisateurs TREK","vacay.owner":"Propriétaire","vacay.shareEmailPlaceholder":"E-mail de l'utilisateur TREK","vacay.shareSuccess":"Plan partagé avec succès","vacay.shareError":"Impossible de partager le plan","vacay.dissolve":"Séparer les calendriers","vacay.dissolveHint":"Séparer à nouveau les calendriers. Vos entrées seront conservées.","vacay.dissolveAction":"Dissoudre","vacay.dissolved":"Calendrier séparé","vacay.fusedWith":"Partagé avec","vacay.you":"vous","vacay.noData":"Aucune donnée","vacay.changeColor":"Changer la couleur","vacay.inviteUser":"Inviter un utilisateur","vacay.inviteHint":"Invitez un autre utilisateur TREK à partager un calendrier de vacances combiné.","vacay.selectUser":"Sélectionner un utilisateur","vacay.sendInvite":"Envoyer l'invitation","vacay.inviteSent":"Invitation envoyée","vacay.inviteError":"Impossible d'envoyer l'invitation","vacay.pending":"en attente","vacay.noUsersAvailable":"Aucun utilisateur disponible","vacay.accept":"Accepter","vacay.decline":"Refuser","vacay.acceptFusion":"Accepter et fusionner","vacay.inviteTitle":"Demande de fusion","vacay.inviteWantsToFuse":"souhaite partager un calendrier de vacances avec vous.","vacay.fuseInfo1":"Vous verrez tous les deux toutes les entrées de vacances dans un calendrier partagé.","vacay.fuseInfo2":"Les deux parties peuvent créer et modifier des entrées pour l'autre.","vacay.fuseInfo3":"Les deux parties peuvent supprimer des entrées et modifier les droits aux vacances.","vacay.fuseInfo4":"Les paramètres comme les jours fériés et les jours d'entreprise sont partagés.","vacay.fuseInfo5":"La fusion peut être dissoute à tout moment par l'une ou l'autre partie. Vos entrées seront préservées.","vacay.addCalendar":"Ajouter un calendrier","vacay.calendarColor":"Couleur","vacay.calendarLabel":"Libellé","vacay.noCalendars":"Aucun calendrier","nav.myTrips":"Mes voyages","atlas.subtitle":"Votre empreinte de voyage à travers le monde","atlas.countries":"Pays","atlas.trips":"Voyages","atlas.places":"Lieux","atlas.days":"Jours","atlas.visitedCountries":"Pays visités","atlas.cities":"Villes","atlas.noData":"Aucune donnée de voyage","atlas.noDataHint":"Créez un voyage et ajoutez des lieux pour voir votre carte du monde","atlas.lastTrip":"Dernier voyage","atlas.nextTrip":"Prochain voyage","atlas.daysLeft":"jours restants","atlas.streak":"Série","atlas.year":"an","atlas.years":"ans","atlas.yearInRow":"année consécutive","atlas.yearsInRow":"années consécutives","atlas.tripIn":"voyage en","atlas.tripsIn":"voyages en","atlas.since":"depuis","atlas.europe":"Europe","atlas.asia":"Asie","atlas.northAmerica":"Amérique du N.","atlas.southAmerica":"Amérique du S.","atlas.africa":"Afrique","atlas.oceania":"Océanie","atlas.other":"Autre","atlas.firstVisit":"Premier voyage","atlas.lastVisitLabel":"Dernier voyage","atlas.tripSingular":"Voyage","atlas.tripPlural":"Voyages","atlas.placeVisited":"Lieu visité","atlas.placesVisited":"Lieux visités","atlas.statsTab":"Statistiques","atlas.bucketTab":"Bucket List","atlas.addBucket":"Ajouter à la bucket list","atlas.bucketNamePlaceholder":"Lieu ou destination...","atlas.bucketNotesPlaceholder":"Notes (optionnel)","atlas.bucketEmpty":"Votre bucket list est vide","atlas.bucketEmptyHint":"Ajoutez des lieux que vous rêvez de visiter","atlas.unmark":"Retirer","atlas.confirmMark":"Marquer ce pays comme visité ?","atlas.confirmUnmark":"Retirer ce pays de votre liste ?","atlas.markVisited":"Marquer comme visité","atlas.markVisitedHint":"Ajouter ce pays à votre liste de visités","atlas.addToBucket":"Ajouter à la bucket list","atlas.addPoi":"Ajouter un lieu","atlas.searchCountry":"Rechercher un pays…","atlas.month":"Mois","atlas.addToBucketHint":"Sauvegarder comme lieu à visiter","atlas.bucketWhen":"Quand prévoyez-vous d'y aller ?","trip.tabs.plan":"Plan","trip.tabs.reservations":"Réservations","trip.tabs.reservationsShort":"Résa","trip.tabs.packing":"Liste de bagages","trip.tabs.packingShort":"Bagages","trip.tabs.budget":"Budget","trip.tabs.files":"Fichiers","trip.loading":"Chargement du voyage…","trip.loadingPhotos":"Chargement des photos des lieux...","trip.mobilePlan":"Plan","trip.mobilePlaces":"Lieux","trip.toast.placeUpdated":"Lieu mis à jour","trip.toast.placeAdded":"Lieu ajouté","trip.toast.placeDeleted":"Lieu supprimé","trip.toast.selectDay":"Veuillez d'abord sélectionner un jour","trip.toast.assignedToDay":"Lieu attribué au planning","trip.toast.reorderError":"Échec de la réorganisation","trip.toast.reservationUpdated":"Réservation mise à jour","trip.toast.reservationAdded":"Réservation ajoutée","trip.toast.deleted":"Supprimé","trip.confirm.deletePlace":"Voulez-vous vraiment supprimer ce lieu ?","dayplan.emptyDay":"Aucun lieu prévu pour ce jour","dayplan.addNote":"Ajouter une note","dayplan.editNote":"Modifier la note","dayplan.noteAdd":"Ajouter une note","dayplan.noteEdit":"Modifier la note","dayplan.noteTitle":"Note","dayplan.noteSubtitle":"Note du jour","dayplan.totalCost":"Coût total","dayplan.days":"Jours","dayplan.dayN":"Jour {n}","dayplan.calculating":"Calcul en cours…","dayplan.route":"Itinéraire","dayplan.optimize":"Optimiser","dayplan.optimized":"Itinéraire optimisé","dayplan.routeError":"Impossible de calculer l'itinéraire","dayplan.toast.needTwoPlaces":"Au moins deux lieux nécessaires pour optimiser l'itinéraire","dayplan.toast.routeOptimized":"Itinéraire optimisé","dayplan.toast.noGeoPlaces":"Aucun lieu avec des coordonnées trouvé pour le calcul d'itinéraire","dayplan.confirmed":"Confirmé","dayplan.pendingRes":"En attente","dayplan.pdf":"PDF","dayplan.pdfTooltip":"Exporter le plan du jour en PDF","dayplan.pdfError":"Échec de l'export PDF","dayplan.cannotReorderTransport":"Les réservations avec une heure fixe ne peuvent pas être réorganisées","dayplan.confirmRemoveTimeTitle":"Supprimer l'heure ?","dayplan.confirmRemoveTimeBody":"Ce lieu a une heure fixe ({time}). Le déplacer supprimera l'heure et permettra un tri libre.","dayplan.confirmRemoveTimeAction":"Supprimer l'heure et déplacer","dayplan.cannotDropOnTimed":"Les éléments ne peuvent pas être placés entre des entrées à heure fixe","dayplan.cannotBreakChronology":"Cela briserait l'ordre chronologique des éléments et réservations planifiés","places.addPlace":"Ajouter un lieu/activité","places.importGpx":"GPX","places.gpxImported":"{count} lieux importés depuis GPX","places.gpxError":"L'import GPX a échoué","places.importGoogleList":"Liste Google","places.googleListHint":"Collez un lien de liste Google Maps partagée pour importer tous les lieux.","places.googleListImported":'{count} lieux importés depuis "{list}"',"places.googleListError":"Impossible d'importer la liste Google Maps","places.viewDetails":"Voir les détails","places.urlResolved":"Lieu importé depuis l'URL","places.assignToDay":"Ajouter à quel jour ?","places.all":"Tous","places.unplanned":"Non planifiés","places.search":"Rechercher des lieux…","places.allCategories":"Toutes les catégories","places.categoriesSelected":"catégories","places.clearFilter":"Effacer le filtre","places.count":"{count} lieux","places.countSingular":"1 lieu","places.allPlanned":"Tous les lieux sont planifiés","places.noneFound":"Aucun lieu trouvé","places.editPlace":"Modifier le lieu","places.formName":"Nom","places.formNamePlaceholder":"ex. Tour Eiffel","places.formDescription":"Description","places.formDescriptionPlaceholder":"Brève description…","places.formAddress":"Adresse","places.formAddressPlaceholder":"Rue, ville, pays","places.formLat":"Latitude (ex. 48.8566)","places.formLng":"Longitude (ex. 2.3522)","places.formCategory":"Catégorie","places.noCategory":"Sans catégorie","places.categoryNamePlaceholder":"Nom de la catégorie","places.formTime":"Heure","places.startTime":"Début","places.endTime":"Fin","places.endTimeBeforeStart":"L'heure de fin est antérieure à l'heure de début","places.timeCollision":"Chevauchement horaire avec :","places.formWebsite":"Site web","places.formNotesPlaceholder":"Notes personnelles…","places.formReservation":"Réservation","places.reservationNotesPlaceholder":"Notes de réservation, numéro de confirmation…","places.mapsSearchPlaceholder":"Rechercher des lieux…","places.mapsSearchError":"La recherche de lieu a échoué.","places.osmHint":"Recherche via OpenStreetMap (pas de photos, horaires ni notes). Ajoutez une clé API Google dans les paramètres pour plus de détails.","places.osmActive":"Recherche via OpenStreetMap (pas de photos, notes ni horaires). Ajoutez une clé API Google dans les paramètres pour des données enrichies.","places.categoryCreateError":"Impossible de créer la catégorie","places.nameRequired":"Veuillez saisir un nom","places.saveError":"Échec de l'enregistrement","inspector.opened":"Ouvert","inspector.closed":"Fermé","inspector.openingHours":"Horaires d'ouverture","inspector.showHours":"Afficher les horaires","inspector.files":"Fichiers","inspector.filesCount":"{count} fichiers","inspector.removeFromDay":"Retirer du jour","inspector.addToDay":"Ajouter au jour","inspector.confirmedRes":"Réservation confirmée","inspector.pendingRes":"Réservation en attente","inspector.google":"Ouvrir dans Google Maps","inspector.website":"Ouvrir le site web","inspector.addRes":"Réservation","inspector.editRes":"Modifier la réservation","inspector.participants":"Participants","inspector.trackStats":"Données du parcours","reservations.title":"Réservations","reservations.empty":"Aucune réservation","reservations.emptyHint":"Ajoutez des réservations pour les vols, hôtels et plus","reservations.add":"Ajouter une réservation","reservations.addManual":"Réservation manuelle","reservations.placeHint":"Conseil : les réservations sont mieux créées directement depuis un lieu pour les lier à votre plan du jour.","reservations.confirmed":"Confirmée","reservations.pending":"En attente","reservations.summary":"{confirmed} confirmées, {pending} en attente","reservations.fromPlan":"Du plan","reservations.showFiles":"Afficher les fichiers","reservations.editTitle":"Modifier la réservation","reservations.status":"Statut","reservations.datetime":"Date et heure","reservations.startTime":"Heure de début","reservations.endTime":"Heure de fin","reservations.date":"Date","reservations.time":"Heure","reservations.timeAlt":"Heure (alternative, ex. 19h30)","reservations.notes":"Notes","reservations.notesPlaceholder":"Notes supplémentaires…","reservations.meta.airline":"Compagnie aérienne","reservations.meta.flightNumber":"N° de vol","reservations.meta.from":"De","reservations.meta.to":"À","reservations.meta.trainNumber":"N° de train","reservations.meta.platform":"Quai","reservations.meta.seat":"Place","reservations.meta.checkIn":"Arrivée","reservations.meta.checkOut":"Départ","reservations.meta.linkAccommodation":"Hébergement","reservations.meta.pickAccommodation":"Lier à un hébergement","reservations.meta.noAccommodation":"Aucun","reservations.meta.hotelPlace":"Hébergement","reservations.meta.pickHotel":"Sélectionner un hébergement","reservations.meta.fromDay":"Du","reservations.meta.toDay":"Au","reservations.meta.selectDay":"Sélectionner un jour","reservations.type.flight":"Vol","reservations.type.hotel":"Hébergement","reservations.type.restaurant":"Restaurant","reservations.type.train":"Train","reservations.type.car":"Voiture de location","reservations.type.cruise":"Croisière","reservations.type.event":"Événement","reservations.type.tour":"Visite","reservations.type.other":"Autre","reservations.confirm.delete":"Voulez-vous vraiment supprimer la réservation « {name} » ?","reservations.confirm.deleteTitle":"Supprimer la réservation ?","reservations.confirm.deleteBody":"« {name} » sera définitivement supprimé.","reservations.toast.updated":"Réservation mise à jour","reservations.toast.removed":"Réservation supprimée","reservations.toast.fileUploaded":"Fichier importé","reservations.toast.uploadError":"Échec de l'import","reservations.newTitle":"Nouvelle réservation","reservations.bookingType":"Type de réservation","reservations.titleLabel":"Titre","reservations.titlePlaceholder":"ex. Lufthansa LH123, Hôtel Adlon, …","reservations.locationAddress":"Lieu / Adresse","reservations.locationPlaceholder":"Adresse, aéroport, hôtel…","reservations.confirmationCode":"Code de réservation","reservations.confirmationPlaceholder":"ex. ABC12345","reservations.day":"Jour","reservations.noDay":"Aucun jour","reservations.place":"Lieu","reservations.noPlace":"Aucun lieu","reservations.pendingSave":"sera enregistré…","reservations.uploading":"Importation…","reservations.attachFile":"Joindre un fichier","reservations.linkExisting":"Lier un fichier existant","reservations.toast.saveError":"Échec de l'enregistrement","reservations.toast.updateError":"Échec de la mise à jour","reservations.toast.deleteError":"Échec de la suppression","reservations.confirm.remove":"Supprimer la réservation pour « {name} » ?","reservations.linkAssignment":"Lier à l'affectation du jour","reservations.pickAssignment":"Sélectionnez une affectation de votre plan…","reservations.noAssignment":"Aucun lien (autonome)","budget.title":"Budget","budget.exportCsv":"Exporter CSV","budget.emptyTitle":"Aucun budget créé","budget.emptyText":"Créez des catégories et des entrées pour planifier votre budget de voyage","budget.emptyPlaceholder":"Nom de la catégorie…","budget.createCategory":"Créer une catégorie","budget.category":"Catégorie","budget.categoryName":"Nom de la catégorie","budget.table.name":"Nom","budget.table.total":"Total","budget.table.persons":"Personnes","budget.table.days":"Jours","budget.table.perPerson":"Par personne","budget.table.perDay":"Par jour","budget.table.perPersonDay":"P. p / Jour","budget.table.note":"Note","budget.table.date":"Date","budget.newEntry":"Nouvelle entrée","budget.defaultEntry":"Nouvelle entrée","budget.defaultCategory":"Nouvelle catégorie","budget.total":"Total","budget.totalBudget":"Budget total","budget.byCategory":"Par catégorie","budget.editTooltip":"Cliquez pour modifier","budget.confirm.deleteCategory":"Voulez-vous vraiment supprimer la catégorie « {name} » avec {count} entrées ?","budget.deleteCategory":"Supprimer la catégorie","budget.perPerson":"Par personne","budget.paid":"Payé","budget.open":"Ouvert","budget.noMembers":"Aucun membre assigné","budget.settlement":"Règlement","budget.settlementInfo":"Cliquez sur l'avatar d'un membre sur un poste budgétaire pour le marquer en vert — cela signifie qu'il a payé. Le règlement indique ensuite qui doit combien à qui.","budget.netBalances":"Soldes nets","files.title":"Fichiers","files.count":"{count} fichiers","files.countSingular":"1 fichier","files.uploaded":"{count} importés","files.uploadError":"Échec de l'import","files.dropzone":"Déposez les fichiers ici","files.dropzoneHint":"ou cliquez pour parcourir","files.allowedTypes":"Images, PDF, DOC, DOCX, XLS, XLSX, TXT, CSV · Max 50 Mo","files.uploading":"Importation…","files.filterAll":"Tous","files.filterPdf":"PDF","files.filterImages":"Images","files.filterDocs":"Documents","files.filterCollab":"Notes Collab","files.sourceCollab":"Depuis les notes Collab","files.empty":"Aucun fichier","files.emptyHint":"Importez des fichiers pour les joindre à votre voyage","files.openTab":"Ouvrir dans un nouvel onglet","files.confirm.delete":"Voulez-vous vraiment supprimer ce fichier ?","files.toast.deleted":"Fichier supprimé","files.toast.deleteError":"Impossible de supprimer le fichier","files.sourcePlan":"Plan du jour","files.sourceBooking":"Réservation","files.attach":"Joindre","files.pasteHint":"Vous pouvez aussi coller des images depuis le presse-papiers (Ctrl+V)","files.trash":"Corbeille","files.trashEmpty":"La corbeille est vide","files.emptyTrash":"Vider la corbeille","files.restore":"Restaurer","files.star":"Favori","files.unstar":"Retirer des favoris","files.assign":"Assigner","files.assignTitle":"Assigner le fichier","files.assignPlace":"Lieu","files.assignBooking":"Réservation","files.unassigned":"Non attribué","files.unlink":"Supprimer le lien","files.toast.trashed":"Déplacé dans la corbeille","files.toast.restored":"Fichier restauré","files.toast.trashEmptied":"Corbeille vidée","files.toast.assigned":"Fichier attribué","files.toast.assignError":"Échec de l'assignation","files.toast.restoreError":"Échec de la restauration","files.confirm.permanentDelete":"Supprimer définitivement ce fichier ? Cette action est irréversible.","files.confirm.emptyTrash":"Supprimer définitivement tous les fichiers de la corbeille ? Cette action est irréversible.","files.noteLabel":"Note","files.notePlaceholder":"Ajouter une note…","packing.title":"Liste de bagages","packing.empty":"La liste de bagages est vide","packing.import":"Importer","packing.importTitle":"Importer la liste","packing.importHint":"Un élément par ligne. Catégorie et quantité optionnelles séparées par virgule, point-virgule ou tabulation : Nom, Catégorie, Quantité","packing.importPlaceholder":`Brosse à dents Crème solaire, Hygiène T-Shirts, Vêtements, 5 @@ -117,7 +117,7 @@ Passeport, Documents`,"packing.importCsv":"Charger CSV/TXT","packing.importActio Toutes les données actuelles seront remplacées par la sauvegarde.`,"backup.confirm.uploadRestore":`Importer et restaurer le fichier de sauvegarde « {name} » ? -Toutes les données actuelles seront écrasées.`,"backup.confirm.delete":"Supprimer la sauvegarde « {name} » ?","backup.toast.loadError":"Impossible de charger les sauvegardes","backup.toast.created":"Sauvegarde créée avec succès","backup.toast.createError":"Impossible de créer la sauvegarde","backup.toast.restored":"Sauvegarde restaurée. La page va se recharger…","backup.toast.restoreError":"Échec de la restauration","backup.toast.uploadError":"Échec de l'import","backup.toast.deleted":"Sauvegarde supprimée","backup.toast.deleteError":"Échec de la suppression","backup.toast.downloadError":"Échec du téléchargement","backup.toast.settingsSaved":"Paramètres de sauvegarde automatique enregistrés","backup.toast.settingsError":"Impossible d'enregistrer les paramètres","backup.auto.title":"Sauvegarde automatique","backup.auto.subtitle":"Sauvegarde automatique programmée","backup.auto.enable":"Activer la sauvegarde automatique","backup.auto.enableHint":"Les sauvegardes seront créées automatiquement selon le calendrier choisi","backup.auto.interval":"Intervalle","backup.auto.hour":"Exécuter à l'heure","backup.auto.hourHint":"Heure locale du serveur (format {format})","backup.auto.dayOfWeek":"Jour de la semaine","backup.auto.dayOfMonth":"Jour du mois","backup.auto.dayOfMonthHint":"Limité à 1–28 pour la compatibilité avec tous les mois","backup.auto.scheduleSummary":"Planification","backup.auto.summaryDaily":"Tous les jours à {hour}h00","backup.auto.summaryWeekly":"Chaque {day} à {hour}h00","backup.auto.summaryMonthly":"Le {day} de chaque mois à {hour}h00","backup.auto.envLocked":"Docker","backup.auto.envLockedHint":"La sauvegarde automatique est configurée via les variables d'environnement Docker. Pour modifier ces paramètres, mettez à jour votre docker-compose.yml et redémarrez le conteneur.","backup.auto.copyEnv":"Copier les variables d'env Docker","backup.auto.envCopied":"Variables d'env Docker copiées dans le presse-papiers","backup.auto.keepLabel":"Supprimer les anciennes sauvegardes après","backup.dow.sunday":"Dim","backup.dow.monday":"Lun","backup.dow.tuesday":"Mar","backup.dow.wednesday":"Mer","backup.dow.thursday":"Jeu","backup.dow.friday":"Ven","backup.dow.saturday":"Sam","backup.interval.hourly":"Toutes les heures","backup.interval.daily":"Quotidien","backup.interval.weekly":"Hebdomadaire","backup.interval.monthly":"Mensuel","backup.keep.1day":"1 jour","backup.keep.3days":"3 jours","backup.keep.7days":"7 jours","backup.keep.14days":"14 jours","backup.keep.30days":"30 jours","backup.keep.forever":"Conserver indéfiniment","photos.allDays":"Tous les jours","photos.noPhotos":"Aucune photo","photos.uploadHint":"Importez vos photos de voyage","photos.clickToSelect":"ou cliquez pour sélectionner","photos.linkPlace":"Lier au lieu","photos.noPlace":"Aucun lieu","photos.uploadN":"{n} photo(s) importée(s)","backup.restoreConfirmTitle":"Restaurer la sauvegarde ?","backup.restoreWarning":"Toutes les données actuelles (voyages, lieux, utilisateurs, importations) seront définitivement remplacées par la sauvegarde. Cette action est irréversible.","backup.restoreTip":"Conseil : créez une sauvegarde de l'état actuel avant de restaurer.","backup.restoreConfirm":"Oui, restaurer","pdf.travelPlan":"Plan de voyage","pdf.planned":"Planifié","pdf.costLabel":"Coût EUR","pdf.preview":"Aperçu PDF","pdf.saveAsPdf":"Enregistrer en PDF","planner.places":"Lieux","planner.bookings":"Réservations","planner.packingList":"Liste de bagages","planner.documents":"Documents","planner.dayPlan":"Plan du jour","planner.reservations":"Réservations","planner.minTwoPlaces":"Au moins 2 lieux avec coordonnées nécessaires","planner.noGeoPlaces":"Aucun lieu avec coordonnées disponible","planner.routeCalculated":"Itinéraire calculé","planner.routeCalcFailed":"L'itinéraire n'a pas pu être calculé","planner.routeError":"Erreur lors du calcul de l'itinéraire","planner.routeOptimized":"Itinéraire optimisé","planner.reservationUpdated":"Réservation mise à jour","planner.reservationAdded":"Réservation ajoutée","planner.confirmDeleteReservation":"Supprimer la réservation ?","planner.reservationDeleted":"Réservation supprimée","planner.days":"Jours","planner.allPlaces":"Tous les lieux","planner.totalPlaces":"{n} lieux au total","planner.noDaysPlanned":"Aucun jour planifié","planner.editTrip":"Modifier le voyage →","planner.placeOne":"1 lieu","planner.placeN":"{n} lieux","planner.addNote":"Ajouter une note","planner.noEntries":"Aucune entrée pour ce jour","planner.addPlace":"Ajouter un lieu ou une activité","planner.addPlaceShort":"+ Ajouter un lieu ou une activité","planner.resPending":"Réservation en attente · ","planner.resConfirmed":"Réservation confirmée · ","planner.notePlaceholder":"Note…","planner.noteTimePlaceholder":"Heure (facultatif)","planner.noteExamplePlaceholder":"ex. S3 à 14h30 depuis la gare centrale, ferry depuis le quai 7, pause déjeuner…","planner.totalCost":"Coût total","planner.searchPlaces":"Rechercher des lieux…","planner.allCategories":"Toutes les catégories","planner.noPlacesFound":"Aucun lieu trouvé","planner.addFirstPlace":"Ajouter un premier lieu","planner.noReservations":"Aucune réservation","planner.addFirstReservation":"Ajouter une première réservation","planner.new":"Nouveau","planner.addToDay":"+ Jour","planner.calculating":"Calcul…","planner.route":"Itinéraire","planner.optimize":"Optimiser","planner.openGoogleMaps":"Ouvrir dans Google Maps","planner.selectDayHint":"Sélectionnez un jour dans la liste de gauche pour voir le plan du jour","planner.noPlacesForDay":"Aucun lieu pour ce jour","planner.addPlacesLink":"Ajouter des lieux →","planner.minTotal":"min. total","planner.noReservation":"Pas de réservation","planner.removeFromDay":"Retirer du jour","planner.addToThisDay":"Ajouter au jour","planner.overview":"Aperçu","planner.noDays":"Aucun jour","planner.editTripToAddDays":"Modifiez le voyage pour ajouter des jours","planner.dayCount":"{n} jours","planner.clickToUnlock":"Cliquez pour déverrouiller","planner.keepPosition":"Maintenir la position lors de l'optimisation de l'itinéraire","planner.dayDetails":"Détails du jour","planner.dayN":"Jour {n}","stats.countries":"Pays","stats.cities":"Villes","stats.trips":"Voyages","stats.places":"Lieux","stats.worldProgress":"Progression mondiale","stats.visited":"visités","stats.remaining":"restants","stats.visitedCountries":"Pays visités","day.precipProb":"Probabilité de pluie","day.precipitation":"Précipitations","day.wind":"Vent","day.sunrise":"Lever du soleil","day.sunset":"Coucher du soleil","day.hourlyForecast":"Prévisions horaires","day.climateHint":"Moyennes historiques — prévisions réelles disponibles dans les 16 jours précédant cette date.","day.noWeather":"Aucune donnée météo disponible. Ajoutez un lieu avec des coordonnées.","day.overview":"Aperçu du jour","day.accommodation":"Hébergement","day.addAccommodation":"Ajouter un hébergement","day.hotelDayRange":"Appliquer aux jours","day.noPlacesForHotel":"Ajoutez d'abord des lieux à votre voyage","day.allDays":"Tous","day.checkIn":"Arrivée","day.checkOut":"Départ","day.confirmation":"Confirmation","day.editAccommodation":"Modifier l'hébergement","day.reservations":"Réservations","memories.title":"Photos","memories.notConnected":"Immich non connecté","memories.notConnectedHint":"Connectez votre instance Immich dans les paramètres pour voir vos photos de voyage ici.","memories.noDates":"Ajoutez des dates à votre voyage pour charger les photos.","memories.noPhotos":"Aucune photo trouvée","memories.noPhotosHint":"Aucune photo trouvée dans Immich pour la période de ce voyage.","memories.photosFound":"photos","memories.fromOthers":"d'autres","memories.sharePhotos":"Partager les photos","memories.sharing":"Partagé","memories.reviewTitle":"Vérifier vos photos","memories.reviewHint":"Cliquez sur les photos pour les exclure du partage.","memories.shareCount":"Partager {count} photos","memories.immichUrl":"URL du serveur Immich","memories.immichApiKey":"Clé API","memories.testConnection":"Tester la connexion","memories.testFirst":"Testez la connexion avant de sauvegarder","memories.connected":"Connecté","memories.disconnected":"Non connecté","memories.connectionSuccess":"Connecté à Immich","memories.connectionError":"Impossible de se connecter à Immich","memories.saved":"Paramètres Immich enregistrés","memories.oldest":"Plus anciennes","memories.newest":"Plus récentes","memories.allLocations":"Tous les lieux","memories.addPhotos":"Ajouter des photos","memories.linkAlbum":"Lier un album","memories.selectAlbum":"Choisir un album Immich","memories.noAlbums":"Aucun album trouvé","memories.syncAlbum":"Synchroniser","memories.unlinkAlbum":"Délier","memories.photos":"photos","memories.selectPhotos":"Sélectionner des photos depuis Immich","memories.selectHint":"Appuyez sur les photos pour les sélectionner.","memories.selected":"sélectionné(s)","memories.addSelected":"Ajouter {count} photos","memories.alreadyAdded":"Ajouté","memories.private":"Privé","memories.stopSharing":"Arrêter le partage","memories.tripDates":"Dates du voyage","memories.allPhotos":"Toutes les photos","memories.confirmShareTitle":"Partager avec les membres du voyage ?","memories.confirmShareHint":"{count} photos seront visibles par tous les membres de ce voyage. Vous pourrez rendre des photos individuelles privées plus tard.","memories.confirmShareButton":"Partager les photos","collab.tabs.chat":"Discussion","collab.tabs.notes":"Notes","collab.tabs.polls":"Sondages","collab.whatsNext.title":"À venir","collab.whatsNext.today":"Aujourd'hui","collab.whatsNext.tomorrow":"Demain","collab.whatsNext.empty":"Aucune activité à venir","collab.whatsNext.until":"à","collab.whatsNext.emptyHint":"Les activités avec des horaires apparaîtront ici","collab.chat.send":"Envoyer","collab.chat.placeholder":"Écrire un message…","collab.chat.empty":"Commencez la conversation","collab.chat.emptyHint":"Les messages sont partagés avec tous les membres du voyage","collab.chat.emptyDesc":"Partagez des idées, des plans et des mises à jour avec votre groupe de voyage","collab.chat.today":"Aujourd'hui","collab.chat.yesterday":"Hier","collab.chat.deletedMessage":"a supprimé un message","collab.chat.reply":"Répondre","collab.chat.loadMore":"Charger les messages précédents","collab.chat.justNow":"à l'instant","collab.chat.minutesAgo":"il y a {n} min","collab.chat.hoursAgo":"il y a {n} h","collab.notes.title":"Notes","collab.notes.new":"Nouvelle note","collab.notes.empty":"Aucune note","collab.notes.emptyHint":"Commencez à capturer vos idées et plans","collab.notes.all":"Toutes","collab.notes.titlePlaceholder":"Titre de la note","collab.notes.contentPlaceholder":"Écrivez quelque chose…","collab.notes.categoryPlaceholder":"Catégorie","collab.notes.newCategory":"Nouvelle catégorie…","collab.notes.category":"Catégorie","collab.notes.noCategory":"Sans catégorie","collab.notes.color":"Couleur","collab.notes.save":"Enregistrer","collab.notes.cancel":"Annuler","collab.notes.edit":"Modifier","collab.notes.delete":"Supprimer","collab.notes.pin":"Épingler","collab.notes.unpin":"Désépingler","collab.notes.daysAgo":"il y a {n} j","collab.notes.categorySettings":"Gérer les catégories","collab.notes.create":"Créer","collab.notes.website":"Site web","collab.notes.websitePlaceholder":"https://…","collab.notes.attachFiles":"Joindre des fichiers","collab.notes.noCategoriesYet":"Aucune catégorie","collab.notes.emptyDesc":"Créez une note pour commencer","collab.polls.title":"Sondages","collab.polls.new":"Nouveau sondage","collab.polls.empty":"Aucun sondage","collab.polls.emptyHint":"Posez des questions au groupe et votez ensemble","collab.polls.question":"Question","collab.polls.questionPlaceholder":"Que devrait-on faire ?","collab.polls.addOption":"+ Ajouter une option","collab.polls.optionPlaceholder":"Option {n}","collab.polls.create":"Créer le sondage","collab.polls.close":"Fermer","collab.polls.closed":"Fermé","collab.polls.votes":"{n} votes","collab.polls.vote":"{n} vote","collab.polls.multipleChoice":"Choix multiples","collab.polls.multiChoice":"Choix multiples","collab.polls.deadline":"Date limite","collab.polls.option":"Option","collab.polls.options":"Options","collab.polls.delete":"Supprimer","collab.polls.closedSection":"Fermés","admin.tabs.permissions":"Permissions","perm.title":"Paramètres des permissions","perm.subtitle":"Contrôlez qui peut effectuer des actions dans l'application","perm.saved":"Paramètres des permissions enregistrés","perm.resetDefaults":"Réinitialiser par défaut","perm.customized":"personnalisé","perm.level.admin":"Administrateur uniquement","perm.level.tripOwner":"Propriétaire du voyage","perm.level.tripMember":"Membres du voyage","perm.level.everybody":"Tout le monde","perm.cat.trip":"Gestion des voyages","perm.cat.members":"Gestion des membres","perm.cat.files":"Fichiers","perm.cat.content":"Contenu et planning","perm.cat.extras":"Budget, bagages et collaboration","perm.action.trip_create":"Créer des voyages","perm.action.trip_edit":"Modifier les détails du voyage","perm.action.trip_delete":"Supprimer des voyages","perm.action.trip_archive":"Archiver / désarchiver des voyages","perm.action.trip_cover_upload":"Télécharger l'image de couverture","perm.action.member_manage":"Ajouter / supprimer des membres","perm.action.file_upload":"Télécharger des fichiers","perm.action.file_edit":"Modifier les métadonnées des fichiers","perm.action.file_delete":"Supprimer des fichiers","perm.action.place_edit":"Ajouter / modifier / supprimer des lieux","perm.action.day_edit":"Modifier les jours, notes et affectations","perm.action.reservation_edit":"Gérer les réservations","perm.action.budget_edit":"Gérer le budget","perm.action.packing_edit":"Gérer les listes de bagages","perm.action.collab_edit":"Collaboration (notes, sondages, chat)","perm.action.share_manage":"Gérer les liens de partage","perm.actionHint.trip_create":"Qui peut créer de nouveaux voyages","perm.actionHint.trip_edit":"Qui peut modifier le nom, les dates, la description et la devise du voyage","perm.actionHint.trip_delete":"Qui peut supprimer définitivement un voyage","perm.actionHint.trip_archive":"Qui peut archiver ou désarchiver un voyage","perm.actionHint.trip_cover_upload":"Qui peut télécharger ou modifier l'image de couverture","perm.actionHint.member_manage":"Qui peut inviter ou supprimer des membres du voyage","perm.actionHint.file_upload":"Qui peut télécharger des fichiers vers un voyage","perm.actionHint.file_edit":"Qui peut modifier les descriptions et liens des fichiers","perm.actionHint.file_delete":"Qui peut déplacer des fichiers vers la corbeille ou les supprimer définitivement","perm.actionHint.place_edit":"Qui peut ajouter, modifier ou supprimer des lieux","perm.actionHint.day_edit":"Qui peut modifier les jours, notes de jours et affectations de lieux","perm.actionHint.reservation_edit":"Qui peut créer, modifier ou supprimer des réservations","perm.actionHint.budget_edit":"Qui peut créer, modifier ou supprimer des éléments de budget","perm.actionHint.packing_edit":"Qui peut gérer les articles de bagages et les sacs","perm.actionHint.collab_edit":"Qui peut créer des notes, des sondages et envoyer des messages","perm.actionHint.share_manage":"Qui peut créer ou supprimer des liens de partage publics"},bM={"common.save":"Mentés","common.cancel":"Mégse","common.delete":"Törlés","common.edit":"Szerkesztés","common.add":"Hozzáadás","common.loading":"Betöltés...","common.import":"Importálás","common.error":"Hiba","common.back":"Vissza","common.all":"Összes","common.close":"Bezárás","common.open":"Megnyitás","common.upload":"Feltöltés","common.search":"Keresés","common.confirm":"Megerősítés","common.ok":"OK","common.yes":"Igen","common.no":"Nem","common.or":"vagy","common.none":"Nincs","common.date":"Dátum","common.rename":"Átnevezés","common.name":"Név","common.email":"E-mail","common.password":"Jelszó","common.saving":"Mentés...","common.saved":"Mentve","trips.reminder":"Emlékeztető","trips.reminderNone":"Nincs","trips.reminderDay":"nap","trips.reminderDays":"nap","trips.reminderCustom":"Egyéni","trips.reminderDaysBefore":"nappal indulás előtt","trips.reminderDisabledHint":"Az utazási emlékeztetők ki vannak kapcsolva. Kapcsold be az Admin > Beállítások > Értesítések menüben.","common.update":"Frissítés","common.change":"Módosítás","common.uploading":"Feltöltés…","common.backToPlanning":"Vissza a tervezéshez","common.reset":"Visszaállítás","nav.trip":"Utazás","nav.share":"Megosztás","nav.settings":"Beállítások","nav.admin":"Admin","nav.logout":"Kijelentkezés","nav.lightMode":"Világos mód","nav.darkMode":"Sötét mód","nav.autoMode":"Automatikus mód","nav.administrator":"Adminisztrátor","dashboard.title":"Utazásaim","dashboard.subtitle.loading":"Utazások betöltése...","dashboard.subtitle.trips":"{count} utazás ({archived} archivált)","dashboard.subtitle.empty":"Indítsd el az első utazásodat","dashboard.subtitle.activeOne":"{count} aktív utazás","dashboard.subtitle.activeMany":"{count} aktív utazás","dashboard.subtitle.archivedSuffix":" · {count} archivált","dashboard.newTrip":"Új utazás","dashboard.gridView":"Rácsnézet","dashboard.listView":"Listanézet","dashboard.currency":"Pénznem","dashboard.timezone":"Időzónák","dashboard.localTime":"Helyi","dashboard.timezoneCustomTitle":"Egyéni időzóna","dashboard.timezoneCustomLabelPlaceholder":"Címke (opcionális)","dashboard.timezoneCustomTzPlaceholder":"pl. America/New_York","dashboard.timezoneCustomAdd":"Hozzáadás","dashboard.timezoneCustomErrorEmpty":"Adj meg egy időzóna-azonosítót","dashboard.timezoneCustomErrorInvalid":"Érvénytelen időzóna. Használj Europe/Berlin formátumot","dashboard.timezoneCustomErrorDuplicate":"Már hozzáadva","dashboard.emptyTitle":"Még nincsenek utazások","dashboard.emptyText":"Hozd létre az első utazásodat, és kezdj el tervezni helyeket, napi programokat és csomagolási listákat.","dashboard.emptyButton":"Első utazás létrehozása","dashboard.nextTrip":"Következő utazás","dashboard.shared":"Megosztott","dashboard.sharedBy":"Megosztotta: {name}","dashboard.days":"nap","dashboard.places":"hely","dashboard.archive":"Archiválás","dashboard.restore":"Visszaállítás","dashboard.archived":"Archivált","dashboard.status.ongoing":"Folyamatban","dashboard.status.today":"Ma","dashboard.status.tomorrow":"Holnap","dashboard.status.past":"Múlt","dashboard.status.daysLeft":"Még {count} nap","dashboard.toast.loadError":"Nem sikerült betölteni az utazásokat","dashboard.toast.created":"Utazás sikeresen létrehozva!","dashboard.toast.createError":"Nem sikerült létrehozni","dashboard.toast.updated":"Utazás frissítve!","dashboard.toast.updateError":"Nem sikerült frissíteni","dashboard.toast.deleted":"Utazás törölve","dashboard.toast.deleteError":"Nem sikerült törölni","dashboard.toast.archived":"Utazás archiválva","dashboard.toast.archiveError":"Nem sikerült archiválni","dashboard.toast.restored":"Utazás visszaállítva","dashboard.toast.restoreError":"Nem sikerült visszaállítani","dashboard.confirm.delete":'"{title}" utazás törlése? Minden hely és terv véglegesen törlődik.',"dashboard.editTrip":"Utazás szerkesztése","dashboard.createTrip":"Új utazás létrehozása","dashboard.tripTitle":"Cím","dashboard.tripTitlePlaceholder":"pl. Nyár Japánban","dashboard.tripDescription":"Leírás","dashboard.tripDescriptionPlaceholder":"Miről szól ez az utazás?","dashboard.startDate":"Kezdő dátum","dashboard.endDate":"Záró dátum","dashboard.noDateHint":"Nincs dátum megadva — 7 alapértelmezett nap jön létre. Ezt bármikor módosíthatod.","dashboard.coverImage":"Borítókép","dashboard.addCoverImage":"Borítókép hozzáadása","dashboard.addMembers":"Útitársak","dashboard.addMember":"Tag hozzáadása","dashboard.coverSaved":"Borítókép mentve","dashboard.coverUploadError":"Feltöltés sikertelen","dashboard.coverRemoveError":"Eltávolítás sikertelen","dashboard.titleRequired":"A cím megadása kötelező","dashboard.endDateError":"A záró dátumnak a kezdő dátum után kell lennie","settings.title":"Beállítások","settings.subtitle":"Személyes beállítások konfigurálása","settings.map":"Térkép","settings.mapTemplate":"Térkép sablon","settings.mapTemplatePlaceholder.select":"Sablon kiválasztása...","settings.mapDefaultHint":"Hagyd üresen az OpenStreetMap használatához (alapértelmezett)","settings.mapTemplatePlaceholder":"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png","settings.mapHint":"URL sablon a térképcsempékhez","settings.latitude":"Szélességi fok","settings.longitude":"Hosszúsági fok","settings.saveMap":"Térkép mentése","settings.apiKeys":"API kulcsok","settings.mapsKey":"Google Maps API kulcs","settings.mapsKeyHint":"Helykereséséhez. Places API (New) szükséges. Létrehozás: console.cloud.google.com","settings.weatherKey":"OpenWeatherMap API kulcs","settings.weatherKeyHint":"Időjárás adatokhoz. Ingyenes: openweathermap.org/api","settings.keyPlaceholder":"Kulcs megadása...","settings.configured":"Konfigurálva","settings.saveKeys":"Kulcsok mentése","settings.display":"Megjelenítés","settings.colorMode":"Színmód","settings.light":"Világos","settings.dark":"Sötét","settings.auto":"Automatikus","settings.language":"Nyelv","settings.temperature":"Hőmérséklet egység","settings.timeFormat":"Időformátum","settings.routeCalculation":"Útvonalszámítás","settings.blurBookingCodes":"Foglalási kódok elrejtése","settings.notifications":"Értesítések","settings.notifyTripInvite":"Utazási meghívók","settings.notifyBookingChange":"Foglalási változások","settings.notifyTripReminder":"Utazási emlékeztetők","settings.notifyVacayInvite":"Vacay összevonási meghívók","settings.notifyPhotosShared":"Megosztott fotók (Immich)","settings.notifyCollabMessage":"Csevegés üzenetek (Collab)","settings.notifyPackingTagged":"Csomagolási lista: hozzárendelések","settings.notifyWebhook":"Webhook értesítések","settings.notificationsDisabled":"Az értesítések nincsenek beállítva. Kérje meg a rendszergazdát, hogy engedélyezze az e-mail vagy webhook értesítéseket.","settings.notificationsActive":"Aktív csatorna","settings.notificationsManagedByAdmin":"Az értesítési eseményeket az adminisztrátor konfigurálja.","settings.on":"Be","settings.off":"Ki","settings.mcp.title":"MCP konfiguráció","settings.mcp.endpoint":"MCP végpont","settings.mcp.clientConfig":"Kliens konfiguráció","settings.mcp.clientConfigHint":"Cserélje ki a részt egy API tokenre az alábbi listából. Az npx elérési útját szükség lehet módosítani a rendszeréhez (pl. C:\\PROGRA~1\\nodejs\\npx.cmd Windows-on).","settings.mcp.copy":"Másolás","settings.mcp.copied":"Másolva!","settings.mcp.apiTokens":"API tokenek","settings.mcp.createToken":"Új token létrehozása","settings.mcp.noTokens":"Még nincsenek tokenek. Hozzon létre egyet MCP kliensek csatlakoztatásához.","settings.mcp.tokenCreatedAt":"Létrehozva","settings.mcp.tokenUsedAt":"Használva","settings.mcp.deleteTokenTitle":"Token törlése","settings.mcp.deleteTokenMessage":"Ez a token azonnal érvénytelenné válik. Minden MCP kliens, amely használja, elveszíti a hozzáférést.","settings.mcp.modal.createTitle":"API token létrehozása","settings.mcp.modal.tokenName":"Token neve","settings.mcp.modal.tokenNamePlaceholder":"pl. Claude Desktop, Munkahelyi laptop","settings.mcp.modal.creating":"Létrehozás…","settings.mcp.modal.create":"Token létrehozása","settings.mcp.modal.createdTitle":"Token létrehozva","settings.mcp.modal.createdWarning":"Ez a token csak egyszer jelenik meg. Másolja és mentse el most — nem lehet visszaállítani.","settings.mcp.modal.done":"Kész","settings.mcp.toast.created":"Token létrehozva","settings.mcp.toast.createError":"Nem sikerült létrehozni a tokent","settings.mcp.toast.deleted":"Token törölve","settings.mcp.toast.deleteError":"Nem sikerült törölni a tokent","settings.account":"Fiók","settings.username":"Felhasználónév","settings.email":"E-mail","settings.role":"Szerepkör","settings.roleAdmin":"Adminisztrátor","settings.oidcLinked":"Összekapcsolva:","settings.changePassword":"Jelszó módosítása","settings.currentPassword":"Jelenlegi jelszó","settings.newPassword":"Új jelszó","settings.confirmPassword":"Új jelszó megerősítése","settings.updatePassword":"Jelszó frissítése","settings.passwordRequired":"Kérjük, add meg a jelenlegi és az új jelszót","settings.currentPasswordRequired":"A jelenlegi jelszó megadása kötelező","settings.passwordTooShort":"A jelszónak legalább 8 karakter hosszúnak kell lennie","settings.passwordWeak":"A jelszónak tartalmaznia kell nagybetűt, kisbetűt, számot és speciális karaktert","settings.passwordMismatch":"A jelszavak nem egyeznek","settings.passwordChanged":"Jelszó sikeresen módosítva","settings.deleteAccount":"Törlés","settings.deleteAccountTitle":"Biztosan törölni szeretnéd a fiókodat?","settings.deleteAccountWarning":"A fiókod és minden utazásod, helyed és fájlod véglegesen törlődik. Ez a művelet nem vonható vissza.","settings.deleteAccountConfirm":"Végleges törlés","settings.deleteBlockedTitle":"Törlés nem lehetséges","settings.deleteBlockedMessage":"Te vagy az egyetlen adminisztrátor. Nevezz ki egy másik felhasználót adminnak, mielőtt törölnéd a fiókodat.","settings.roleUser":"Felhasználó","settings.saveProfile":"Mentés","settings.toast.mapSaved":"Térképbeállítások mentve","settings.toast.keysSaved":"API kulcsok mentve","settings.toast.displaySaved":"Megjelenítési beállítások mentve","settings.toast.profileSaved":"Profil frissítve","settings.uploadAvatar":"Profilkép feltöltése","settings.removeAvatar":"Profilkép eltávolítása","settings.avatarUploaded":"Profilkép frissítve","settings.avatarRemoved":"Profilkép eltávolítva","settings.avatarError":"Feltöltés sikertelen","settings.mfa.title":"Kétfaktoros hitelesítés (2FA)","settings.mfa.description":"Egy második lépést ad a bejelentkezéshez e-mail és jelszó használatakor. Használj hitelesítő alkalmazást (Google Authenticator, Authy stb.).","settings.mfa.requiredByPolicy":"A rendszergazda kétlépcsős hitelesítést ír elő. Állíts be hitelesítő alkalmazást lent, mielőtt továbblépnél.","settings.mfa.backupTitle":"Tartalék kódok","settings.mfa.backupDescription":"Használd ezeket az egyszer használatos kódokat, ha elveszíted a hozzáférést a hitelesítő alkalmazásodhoz.","settings.mfa.backupWarning":"Mentsd el ezeket most. Minden kód csak egyszer használható.","settings.mfa.backupCopy":"Kódok másolása","settings.mfa.backupDownload":"TXT letöltése","settings.mfa.backupPrint":"Nyomtatás / PDF","settings.mfa.backupCopied":"Tartalék kódok másolva","settings.mfa.enabled":"2FA engedélyezve van a fiókodban.","settings.mfa.disabled":"2FA nincs engedélyezve.","settings.mfa.setup":"Hitelesítő beállítása","settings.mfa.scanQr":"Olvasd be ezt a QR-kódot az alkalmazásoddal, vagy add meg manuálisan a titkos kulcsot.","settings.mfa.secretLabel":"Titkos kulcs (kézi megadás)","settings.mfa.codePlaceholder":"6 jegyű kód","settings.mfa.enable":"2FA engedélyezése","settings.mfa.cancelSetup":"Mégse","settings.mfa.disableTitle":"2FA kikapcsolása","settings.mfa.disableHint":"Add meg a fiókod jelszavát és a hitelesítő alkalmazás aktuális kódját.","settings.mfa.disable":"2FA kikapcsolása","settings.mfa.toastEnabled":"Kétfaktoros hitelesítés engedélyezve","settings.mfa.toastDisabled":"Kétfaktoros hitelesítés kikapcsolva","settings.mfa.demoBlocked":"Demo módban nem érhető el","settings.mustChangePassword":"A folytatás előtt meg kell változtatnod a jelszavad. Kérjük, adj meg egy új jelszót alább.","admin.notifications.title":"Értesítések","admin.notifications.hint":"Válasszon értesítési csatornát. Egyszerre csak egy lehet aktív.","admin.notifications.none":"Kikapcsolva","admin.notifications.email":"E-mail (SMTP)","admin.notifications.webhook":"Webhook","admin.notifications.events":"Értesítési események","admin.notifications.eventsHint":"Válaszd ki, mely események indítsanak értesítéseket minden felhasználó számára.","admin.notifications.configureFirst":"Először konfiguráld az SMTP vagy webhook beállításokat lent, majd engedélyezd az eseményeket.","admin.notifications.save":"Értesítési beállítások mentése","admin.notifications.saved":"Értesítési beállítások mentve","admin.notifications.testWebhook":"Teszt webhook küldése","admin.notifications.testWebhookSuccess":"Teszt webhook sikeresen elküldve","admin.notifications.testWebhookFailed":"Teszt webhook küldése sikertelen","admin.smtp.title":"E-mail és értesítések","admin.smtp.hint":"SMTP konfiguráció e-mail értesítések küldéséhez.","admin.smtp.testButton":"Teszt e-mail küldése","admin.webhook.hint":"Értesítések küldése külső webhookra (Discord, Slack stb.).","admin.smtp.testSuccess":"Teszt e-mail sikeresen elküldve","admin.smtp.testFailed":"Teszt e-mail küldése sikertelen","dayplan.icsTooltip":"Naptár exportálása (ICS)","share.linkTitle":"Nyilvános link","share.linkHint":"Hozz létre egy linket, amellyel bárki megtekintheti ezt az utazást bejelentkezés nélkül. Csak olvasható — szerkesztés nem lehetséges.","share.createLink":"Link létrehozása","share.deleteLink":"Link törlése","share.createError":"Nem sikerült létrehozni a linket","common.copy":"Másolás","common.copied":"Másolva","share.permMap":"Térkép és terv","share.permBookings":"Foglalások","share.permPacking":"Csomagolás","shared.expired":"Link lejárt vagy érvénytelen","shared.expiredHint":"Ez a megosztott utazási link már nem aktív.","shared.readOnly":"Csak olvasható megosztott nézet","shared.tabPlan":"Terv","shared.tabBookings":"Foglalások","shared.tabPacking":"Csomagolás","shared.tabBudget":"Költségvetés","shared.tabChat":"Csevegés","shared.days":"nap","shared.places":"hely","shared.other":"Egyéb","shared.totalBudget":"Teljes költségvetés","shared.messages":"üzenet","shared.sharedVia":"Megosztva:","shared.confirmed":"Megerősítve","shared.pending":"Függőben","share.permBudget":"Költségvetés","share.permCollab":"Csevegés","login.error":"Bejelentkezés sikertelen. Kérjük, ellenőrizd a megadott adatokat.","login.tagline":`Az utazásaid. +Toutes les données actuelles seront écrasées.`,"backup.confirm.delete":"Supprimer la sauvegarde « {name} » ?","backup.toast.loadError":"Impossible de charger les sauvegardes","backup.toast.created":"Sauvegarde créée avec succès","backup.toast.createError":"Impossible de créer la sauvegarde","backup.toast.restored":"Sauvegarde restaurée. La page va se recharger…","backup.toast.restoreError":"Échec de la restauration","backup.toast.uploadError":"Échec de l'import","backup.toast.deleted":"Sauvegarde supprimée","backup.toast.deleteError":"Échec de la suppression","backup.toast.downloadError":"Échec du téléchargement","backup.toast.settingsSaved":"Paramètres de sauvegarde automatique enregistrés","backup.toast.settingsError":"Impossible d'enregistrer les paramètres","backup.auto.title":"Sauvegarde automatique","backup.auto.subtitle":"Sauvegarde automatique programmée","backup.auto.enable":"Activer la sauvegarde automatique","backup.auto.enableHint":"Les sauvegardes seront créées automatiquement selon le calendrier choisi","backup.auto.interval":"Intervalle","backup.auto.hour":"Exécuter à l'heure","backup.auto.hourHint":"Heure locale du serveur (format {format})","backup.auto.dayOfWeek":"Jour de la semaine","backup.auto.dayOfMonth":"Jour du mois","backup.auto.dayOfMonthHint":"Limité à 1–28 pour la compatibilité avec tous les mois","backup.auto.scheduleSummary":"Planification","backup.auto.summaryDaily":"Tous les jours à {hour}h00","backup.auto.summaryWeekly":"Chaque {day} à {hour}h00","backup.auto.summaryMonthly":"Le {day} de chaque mois à {hour}h00","backup.auto.envLocked":"Docker","backup.auto.envLockedHint":"La sauvegarde automatique est configurée via les variables d'environnement Docker. Pour modifier ces paramètres, mettez à jour votre docker-compose.yml et redémarrez le conteneur.","backup.auto.copyEnv":"Copier les variables d'env Docker","backup.auto.envCopied":"Variables d'env Docker copiées dans le presse-papiers","backup.auto.keepLabel":"Supprimer les anciennes sauvegardes après","backup.dow.sunday":"Dim","backup.dow.monday":"Lun","backup.dow.tuesday":"Mar","backup.dow.wednesday":"Mer","backup.dow.thursday":"Jeu","backup.dow.friday":"Ven","backup.dow.saturday":"Sam","backup.interval.hourly":"Toutes les heures","backup.interval.daily":"Quotidien","backup.interval.weekly":"Hebdomadaire","backup.interval.monthly":"Mensuel","backup.keep.1day":"1 jour","backup.keep.3days":"3 jours","backup.keep.7days":"7 jours","backup.keep.14days":"14 jours","backup.keep.30days":"30 jours","backup.keep.forever":"Conserver indéfiniment","photos.allDays":"Tous les jours","photos.noPhotos":"Aucune photo","photos.uploadHint":"Importez vos photos de voyage","photos.clickToSelect":"ou cliquez pour sélectionner","photos.linkPlace":"Lier au lieu","photos.noPlace":"Aucun lieu","photos.uploadN":"{n} photo(s) importée(s)","backup.restoreConfirmTitle":"Restaurer la sauvegarde ?","backup.restoreWarning":"Toutes les données actuelles (voyages, lieux, utilisateurs, importations) seront définitivement remplacées par la sauvegarde. Cette action est irréversible.","backup.restoreTip":"Conseil : créez une sauvegarde de l'état actuel avant de restaurer.","backup.restoreConfirm":"Oui, restaurer","pdf.travelPlan":"Plan de voyage","pdf.planned":"Planifié","pdf.costLabel":"Coût EUR","pdf.preview":"Aperçu PDF","pdf.saveAsPdf":"Enregistrer en PDF","planner.places":"Lieux","planner.bookings":"Réservations","planner.packingList":"Liste de bagages","planner.documents":"Documents","planner.dayPlan":"Plan du jour","planner.reservations":"Réservations","planner.minTwoPlaces":"Au moins 2 lieux avec coordonnées nécessaires","planner.noGeoPlaces":"Aucun lieu avec coordonnées disponible","planner.routeCalculated":"Itinéraire calculé","planner.routeCalcFailed":"L'itinéraire n'a pas pu être calculé","planner.routeError":"Erreur lors du calcul de l'itinéraire","planner.routeOptimized":"Itinéraire optimisé","planner.reservationUpdated":"Réservation mise à jour","planner.reservationAdded":"Réservation ajoutée","planner.confirmDeleteReservation":"Supprimer la réservation ?","planner.reservationDeleted":"Réservation supprimée","planner.days":"Jours","planner.allPlaces":"Tous les lieux","planner.totalPlaces":"{n} lieux au total","planner.noDaysPlanned":"Aucun jour planifié","planner.editTrip":"Modifier le voyage →","planner.placeOne":"1 lieu","planner.placeN":"{n} lieux","planner.addNote":"Ajouter une note","planner.noEntries":"Aucune entrée pour ce jour","planner.addPlace":"Ajouter un lieu ou une activité","planner.addPlaceShort":"+ Ajouter un lieu ou une activité","planner.resPending":"Réservation en attente · ","planner.resConfirmed":"Réservation confirmée · ","planner.notePlaceholder":"Note…","planner.noteTimePlaceholder":"Heure (facultatif)","planner.noteExamplePlaceholder":"ex. S3 à 14h30 depuis la gare centrale, ferry depuis le quai 7, pause déjeuner…","planner.totalCost":"Coût total","planner.searchPlaces":"Rechercher des lieux…","planner.allCategories":"Toutes les catégories","planner.noPlacesFound":"Aucun lieu trouvé","planner.addFirstPlace":"Ajouter un premier lieu","planner.noReservations":"Aucune réservation","planner.addFirstReservation":"Ajouter une première réservation","planner.new":"Nouveau","planner.addToDay":"+ Jour","planner.calculating":"Calcul…","planner.route":"Itinéraire","planner.optimize":"Optimiser","planner.openGoogleMaps":"Ouvrir dans Google Maps","planner.selectDayHint":"Sélectionnez un jour dans la liste de gauche pour voir le plan du jour","planner.noPlacesForDay":"Aucun lieu pour ce jour","planner.addPlacesLink":"Ajouter des lieux →","planner.minTotal":"min. total","planner.noReservation":"Pas de réservation","planner.removeFromDay":"Retirer du jour","planner.addToThisDay":"Ajouter au jour","planner.overview":"Aperçu","planner.noDays":"Aucun jour","planner.editTripToAddDays":"Modifiez le voyage pour ajouter des jours","planner.dayCount":"{n} jours","planner.clickToUnlock":"Cliquez pour déverrouiller","planner.keepPosition":"Maintenir la position lors de l'optimisation de l'itinéraire","planner.dayDetails":"Détails du jour","planner.dayN":"Jour {n}","stats.countries":"Pays","stats.cities":"Villes","stats.trips":"Voyages","stats.places":"Lieux","stats.worldProgress":"Progression mondiale","stats.visited":"visités","stats.remaining":"restants","stats.visitedCountries":"Pays visités","day.precipProb":"Probabilité de pluie","day.precipitation":"Précipitations","day.wind":"Vent","day.sunrise":"Lever du soleil","day.sunset":"Coucher du soleil","day.hourlyForecast":"Prévisions horaires","day.climateHint":"Moyennes historiques — prévisions réelles disponibles dans les 16 jours précédant cette date.","day.noWeather":"Aucune donnée météo disponible. Ajoutez un lieu avec des coordonnées.","day.overview":"Aperçu du jour","day.accommodation":"Hébergement","day.addAccommodation":"Ajouter un hébergement","day.hotelDayRange":"Appliquer aux jours","day.noPlacesForHotel":"Ajoutez d'abord des lieux à votre voyage","day.allDays":"Tous","day.checkIn":"Arrivée","day.checkOut":"Départ","day.confirmation":"Confirmation","day.editAccommodation":"Modifier l'hébergement","day.reservations":"Réservations","memories.title":"Photos","memories.notConnected":"Immich non connecté","memories.notConnectedHint":"Connectez votre instance Immich dans les paramètres pour voir vos photos de voyage ici.","memories.noDates":"Ajoutez des dates à votre voyage pour charger les photos.","memories.noPhotos":"Aucune photo trouvée","memories.noPhotosHint":"Aucune photo trouvée dans Immich pour la période de ce voyage.","memories.photosFound":"photos","memories.fromOthers":"d'autres","memories.sharePhotos":"Partager les photos","memories.sharing":"Partagé","memories.reviewTitle":"Vérifier vos photos","memories.reviewHint":"Cliquez sur les photos pour les exclure du partage.","memories.shareCount":"Partager {count} photos","memories.immichUrl":"URL du serveur Immich","memories.immichApiKey":"Clé API","memories.testConnection":"Tester la connexion","memories.testFirst":"Testez la connexion avant de sauvegarder","memories.connected":"Connecté","memories.disconnected":"Non connecté","memories.connectionSuccess":"Connecté à Immich","memories.connectionError":"Impossible de se connecter à Immich","memories.saved":"Paramètres Immich enregistrés","memories.oldest":"Plus anciennes","memories.newest":"Plus récentes","memories.allLocations":"Tous les lieux","memories.addPhotos":"Ajouter des photos","memories.linkAlbum":"Lier un album","memories.selectAlbum":"Choisir un album Immich","memories.noAlbums":"Aucun album trouvé","memories.syncAlbum":"Synchroniser","memories.unlinkAlbum":"Délier","memories.photos":"photos","memories.selectPhotos":"Sélectionner des photos depuis Immich","memories.selectHint":"Appuyez sur les photos pour les sélectionner.","memories.selected":"sélectionné(s)","memories.addSelected":"Ajouter {count} photos","memories.alreadyAdded":"Ajouté","memories.private":"Privé","memories.stopSharing":"Arrêter le partage","memories.tripDates":"Dates du voyage","memories.allPhotos":"Toutes les photos","memories.confirmShareTitle":"Partager avec les membres du voyage ?","memories.confirmShareHint":"{count} photos seront visibles par tous les membres de ce voyage. Vous pourrez rendre des photos individuelles privées plus tard.","memories.confirmShareButton":"Partager les photos","collab.tabs.chat":"Discussion","collab.tabs.notes":"Notes","collab.tabs.polls":"Sondages","collab.whatsNext.title":"À venir","collab.whatsNext.today":"Aujourd'hui","collab.whatsNext.tomorrow":"Demain","collab.whatsNext.empty":"Aucune activité à venir","collab.whatsNext.until":"à","collab.whatsNext.emptyHint":"Les activités avec des horaires apparaîtront ici","collab.chat.send":"Envoyer","collab.chat.placeholder":"Écrire un message…","collab.chat.empty":"Commencez la conversation","collab.chat.emptyHint":"Les messages sont partagés avec tous les membres du voyage","collab.chat.emptyDesc":"Partagez des idées, des plans et des mises à jour avec votre groupe de voyage","collab.chat.today":"Aujourd'hui","collab.chat.yesterday":"Hier","collab.chat.deletedMessage":"a supprimé un message","collab.chat.reply":"Répondre","collab.chat.loadMore":"Charger les messages précédents","collab.chat.justNow":"à l'instant","collab.chat.minutesAgo":"il y a {n} min","collab.chat.hoursAgo":"il y a {n} h","collab.notes.title":"Notes","collab.notes.new":"Nouvelle note","collab.notes.empty":"Aucune note","collab.notes.emptyHint":"Commencez à capturer vos idées et plans","collab.notes.all":"Toutes","collab.notes.titlePlaceholder":"Titre de la note","collab.notes.contentPlaceholder":"Écrivez quelque chose…","collab.notes.categoryPlaceholder":"Catégorie","collab.notes.newCategory":"Nouvelle catégorie…","collab.notes.category":"Catégorie","collab.notes.noCategory":"Sans catégorie","collab.notes.color":"Couleur","collab.notes.save":"Enregistrer","collab.notes.cancel":"Annuler","collab.notes.edit":"Modifier","collab.notes.delete":"Supprimer","collab.notes.pin":"Épingler","collab.notes.unpin":"Désépingler","collab.notes.daysAgo":"il y a {n} j","collab.notes.categorySettings":"Gérer les catégories","collab.notes.create":"Créer","collab.notes.website":"Site web","collab.notes.websitePlaceholder":"https://…","collab.notes.attachFiles":"Joindre des fichiers","collab.notes.noCategoriesYet":"Aucune catégorie","collab.notes.emptyDesc":"Créez une note pour commencer","collab.polls.title":"Sondages","collab.polls.new":"Nouveau sondage","collab.polls.empty":"Aucun sondage","collab.polls.emptyHint":"Posez des questions au groupe et votez ensemble","collab.polls.question":"Question","collab.polls.questionPlaceholder":"Que devrait-on faire ?","collab.polls.addOption":"+ Ajouter une option","collab.polls.optionPlaceholder":"Option {n}","collab.polls.create":"Créer le sondage","collab.polls.close":"Fermer","collab.polls.closed":"Fermé","collab.polls.votes":"{n} votes","collab.polls.vote":"{n} vote","collab.polls.multipleChoice":"Choix multiples","collab.polls.multiChoice":"Choix multiples","collab.polls.deadline":"Date limite","collab.polls.option":"Option","collab.polls.options":"Options","collab.polls.delete":"Supprimer","collab.polls.closedSection":"Fermés","admin.tabs.permissions":"Permissions","perm.title":"Paramètres des permissions","perm.subtitle":"Contrôlez qui peut effectuer des actions dans l'application","perm.saved":"Paramètres des permissions enregistrés","perm.resetDefaults":"Réinitialiser par défaut","perm.customized":"personnalisé","perm.level.admin":"Administrateur uniquement","perm.level.tripOwner":"Propriétaire du voyage","perm.level.tripMember":"Membres du voyage","perm.level.everybody":"Tout le monde","perm.cat.trip":"Gestion des voyages","perm.cat.members":"Gestion des membres","perm.cat.files":"Fichiers","perm.cat.content":"Contenu et planning","perm.cat.extras":"Budget, bagages et collaboration","perm.action.trip_create":"Créer des voyages","perm.action.trip_edit":"Modifier les détails du voyage","perm.action.trip_delete":"Supprimer des voyages","perm.action.trip_archive":"Archiver / désarchiver des voyages","perm.action.trip_cover_upload":"Télécharger l'image de couverture","perm.action.member_manage":"Ajouter / supprimer des membres","perm.action.file_upload":"Télécharger des fichiers","perm.action.file_edit":"Modifier les métadonnées des fichiers","perm.action.file_delete":"Supprimer des fichiers","perm.action.place_edit":"Ajouter / modifier / supprimer des lieux","perm.action.day_edit":"Modifier les jours, notes et affectations","perm.action.reservation_edit":"Gérer les réservations","perm.action.budget_edit":"Gérer le budget","perm.action.packing_edit":"Gérer les listes de bagages","perm.action.collab_edit":"Collaboration (notes, sondages, chat)","perm.action.share_manage":"Gérer les liens de partage","perm.actionHint.trip_create":"Qui peut créer de nouveaux voyages","perm.actionHint.trip_edit":"Qui peut modifier le nom, les dates, la description et la devise du voyage","perm.actionHint.trip_delete":"Qui peut supprimer définitivement un voyage","perm.actionHint.trip_archive":"Qui peut archiver ou désarchiver un voyage","perm.actionHint.trip_cover_upload":"Qui peut télécharger ou modifier l'image de couverture","perm.actionHint.member_manage":"Qui peut inviter ou supprimer des membres du voyage","perm.actionHint.file_upload":"Qui peut télécharger des fichiers vers un voyage","perm.actionHint.file_edit":"Qui peut modifier les descriptions et liens des fichiers","perm.actionHint.file_delete":"Qui peut déplacer des fichiers vers la corbeille ou les supprimer définitivement","perm.actionHint.place_edit":"Qui peut ajouter, modifier ou supprimer des lieux","perm.actionHint.day_edit":"Qui peut modifier les jours, notes de jours et affectations de lieux","perm.actionHint.reservation_edit":"Qui peut créer, modifier ou supprimer des réservations","perm.actionHint.budget_edit":"Qui peut créer, modifier ou supprimer des éléments de budget","perm.actionHint.packing_edit":"Qui peut gérer les articles de bagages et les sacs","perm.actionHint.collab_edit":"Qui peut créer des notes, des sondages et envoyer des messages","perm.actionHint.share_manage":"Qui peut créer ou supprimer des liens de partage publics"},xM={"common.save":"Mentés","common.cancel":"Mégse","common.delete":"Törlés","common.edit":"Szerkesztés","common.add":"Hozzáadás","common.loading":"Betöltés...","common.import":"Importálás","common.error":"Hiba","common.back":"Vissza","common.all":"Összes","common.close":"Bezárás","common.open":"Megnyitás","common.upload":"Feltöltés","common.search":"Keresés","common.confirm":"Megerősítés","common.ok":"OK","common.yes":"Igen","common.no":"Nem","common.or":"vagy","common.none":"Nincs","common.date":"Dátum","common.rename":"Átnevezés","common.name":"Név","common.email":"E-mail","common.password":"Jelszó","common.saving":"Mentés...","common.saved":"Mentve","trips.reminder":"Emlékeztető","trips.reminderNone":"Nincs","trips.reminderDay":"nap","trips.reminderDays":"nap","trips.reminderCustom":"Egyéni","trips.reminderDaysBefore":"nappal indulás előtt","trips.reminderDisabledHint":"Az utazási emlékeztetők ki vannak kapcsolva. Kapcsold be az Admin > Beállítások > Értesítések menüben.","common.update":"Frissítés","common.change":"Módosítás","common.uploading":"Feltöltés…","common.backToPlanning":"Vissza a tervezéshez","common.reset":"Visszaállítás","nav.trip":"Utazás","nav.share":"Megosztás","nav.settings":"Beállítások","nav.admin":"Admin","nav.logout":"Kijelentkezés","nav.lightMode":"Világos mód","nav.darkMode":"Sötét mód","nav.autoMode":"Automatikus mód","nav.administrator":"Adminisztrátor","dashboard.title":"Utazásaim","dashboard.subtitle.loading":"Utazások betöltése...","dashboard.subtitle.trips":"{count} utazás ({archived} archivált)","dashboard.subtitle.empty":"Indítsd el az első utazásodat","dashboard.subtitle.activeOne":"{count} aktív utazás","dashboard.subtitle.activeMany":"{count} aktív utazás","dashboard.subtitle.archivedSuffix":" · {count} archivált","dashboard.newTrip":"Új utazás","dashboard.gridView":"Rácsnézet","dashboard.listView":"Listanézet","dashboard.currency":"Pénznem","dashboard.timezone":"Időzónák","dashboard.localTime":"Helyi","dashboard.timezoneCustomTitle":"Egyéni időzóna","dashboard.timezoneCustomLabelPlaceholder":"Címke (opcionális)","dashboard.timezoneCustomTzPlaceholder":"pl. America/New_York","dashboard.timezoneCustomAdd":"Hozzáadás","dashboard.timezoneCustomErrorEmpty":"Adj meg egy időzóna-azonosítót","dashboard.timezoneCustomErrorInvalid":"Érvénytelen időzóna. Használj Europe/Berlin formátumot","dashboard.timezoneCustomErrorDuplicate":"Már hozzáadva","dashboard.emptyTitle":"Még nincsenek utazások","dashboard.emptyText":"Hozd létre az első utazásodat, és kezdj el tervezni helyeket, napi programokat és csomagolási listákat.","dashboard.emptyButton":"Első utazás létrehozása","dashboard.nextTrip":"Következő utazás","dashboard.shared":"Megosztott","dashboard.sharedBy":"Megosztotta: {name}","dashboard.days":"nap","dashboard.places":"hely","dashboard.archive":"Archiválás","dashboard.restore":"Visszaállítás","dashboard.archived":"Archivált","dashboard.status.ongoing":"Folyamatban","dashboard.status.today":"Ma","dashboard.status.tomorrow":"Holnap","dashboard.status.past":"Múlt","dashboard.status.daysLeft":"Még {count} nap","dashboard.toast.loadError":"Nem sikerült betölteni az utazásokat","dashboard.toast.created":"Utazás sikeresen létrehozva!","dashboard.toast.createError":"Nem sikerült létrehozni","dashboard.toast.updated":"Utazás frissítve!","dashboard.toast.updateError":"Nem sikerült frissíteni","dashboard.toast.deleted":"Utazás törölve","dashboard.toast.deleteError":"Nem sikerült törölni","dashboard.toast.archived":"Utazás archiválva","dashboard.toast.archiveError":"Nem sikerült archiválni","dashboard.toast.restored":"Utazás visszaállítva","dashboard.toast.restoreError":"Nem sikerült visszaállítani","dashboard.confirm.delete":'"{title}" utazás törlése? Minden hely és terv véglegesen törlődik.',"dashboard.editTrip":"Utazás szerkesztése","dashboard.createTrip":"Új utazás létrehozása","dashboard.tripTitle":"Cím","dashboard.tripTitlePlaceholder":"pl. Nyár Japánban","dashboard.tripDescription":"Leírás","dashboard.tripDescriptionPlaceholder":"Miről szól ez az utazás?","dashboard.startDate":"Kezdő dátum","dashboard.endDate":"Záró dátum","dashboard.noDateHint":"Nincs dátum megadva — 7 alapértelmezett nap jön létre. Ezt bármikor módosíthatod.","dashboard.coverImage":"Borítókép","dashboard.addCoverImage":"Borítókép hozzáadása","dashboard.addMembers":"Útitársak","dashboard.addMember":"Tag hozzáadása","dashboard.coverSaved":"Borítókép mentve","dashboard.coverUploadError":"Feltöltés sikertelen","dashboard.coverRemoveError":"Eltávolítás sikertelen","dashboard.titleRequired":"A cím megadása kötelező","dashboard.endDateError":"A záró dátumnak a kezdő dátum után kell lennie","settings.title":"Beállítások","settings.subtitle":"Személyes beállítások konfigurálása","settings.map":"Térkép","settings.mapTemplate":"Térkép sablon","settings.mapTemplatePlaceholder.select":"Sablon kiválasztása...","settings.mapDefaultHint":"Hagyd üresen az OpenStreetMap használatához (alapértelmezett)","settings.mapTemplatePlaceholder":"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png","settings.mapHint":"URL sablon a térképcsempékhez","settings.latitude":"Szélességi fok","settings.longitude":"Hosszúsági fok","settings.saveMap":"Térkép mentése","settings.apiKeys":"API kulcsok","settings.mapsKey":"Google Maps API kulcs","settings.mapsKeyHint":"Helykereséséhez. Places API (New) szükséges. Létrehozás: console.cloud.google.com","settings.weatherKey":"OpenWeatherMap API kulcs","settings.weatherKeyHint":"Időjárás adatokhoz. Ingyenes: openweathermap.org/api","settings.keyPlaceholder":"Kulcs megadása...","settings.configured":"Konfigurálva","settings.saveKeys":"Kulcsok mentése","settings.display":"Megjelenítés","settings.colorMode":"Színmód","settings.light":"Világos","settings.dark":"Sötét","settings.auto":"Automatikus","settings.language":"Nyelv","settings.temperature":"Hőmérséklet egység","settings.timeFormat":"Időformátum","settings.routeCalculation":"Útvonalszámítás","settings.blurBookingCodes":"Foglalási kódok elrejtése","settings.notifications":"Értesítések","settings.notifyTripInvite":"Utazási meghívók","settings.notifyBookingChange":"Foglalási változások","settings.notifyTripReminder":"Utazási emlékeztetők","settings.notifyVacayInvite":"Vacay összevonási meghívók","settings.notifyPhotosShared":"Megosztott fotók (Immich)","settings.notifyCollabMessage":"Csevegés üzenetek (Collab)","settings.notifyPackingTagged":"Csomagolási lista: hozzárendelések","settings.notifyWebhook":"Webhook értesítések","settings.notificationsDisabled":"Az értesítések nincsenek beállítva. Kérje meg a rendszergazdát, hogy engedélyezze az e-mail vagy webhook értesítéseket.","settings.notificationsActive":"Aktív csatorna","settings.notificationsManagedByAdmin":"Az értesítési eseményeket az adminisztrátor konfigurálja.","settings.on":"Be","settings.off":"Ki","settings.mcp.title":"MCP konfiguráció","settings.mcp.endpoint":"MCP végpont","settings.mcp.clientConfig":"Kliens konfiguráció","settings.mcp.clientConfigHint":"Cserélje ki a részt egy API tokenre az alábbi listából. Az npx elérési útját szükség lehet módosítani a rendszeréhez (pl. C:\\PROGRA~1\\nodejs\\npx.cmd Windows-on).","settings.mcp.copy":"Másolás","settings.mcp.copied":"Másolva!","settings.mcp.apiTokens":"API tokenek","settings.mcp.createToken":"Új token létrehozása","settings.mcp.noTokens":"Még nincsenek tokenek. Hozzon létre egyet MCP kliensek csatlakoztatásához.","settings.mcp.tokenCreatedAt":"Létrehozva","settings.mcp.tokenUsedAt":"Használva","settings.mcp.deleteTokenTitle":"Token törlése","settings.mcp.deleteTokenMessage":"Ez a token azonnal érvénytelenné válik. Minden MCP kliens, amely használja, elveszíti a hozzáférést.","settings.mcp.modal.createTitle":"API token létrehozása","settings.mcp.modal.tokenName":"Token neve","settings.mcp.modal.tokenNamePlaceholder":"pl. Claude Desktop, Munkahelyi laptop","settings.mcp.modal.creating":"Létrehozás…","settings.mcp.modal.create":"Token létrehozása","settings.mcp.modal.createdTitle":"Token létrehozva","settings.mcp.modal.createdWarning":"Ez a token csak egyszer jelenik meg. Másolja és mentse el most — nem lehet visszaállítani.","settings.mcp.modal.done":"Kész","settings.mcp.toast.created":"Token létrehozva","settings.mcp.toast.createError":"Nem sikerült létrehozni a tokent","settings.mcp.toast.deleted":"Token törölve","settings.mcp.toast.deleteError":"Nem sikerült törölni a tokent","settings.account":"Fiók","settings.username":"Felhasználónév","settings.email":"E-mail","settings.role":"Szerepkör","settings.roleAdmin":"Adminisztrátor","settings.oidcLinked":"Összekapcsolva:","settings.changePassword":"Jelszó módosítása","settings.currentPassword":"Jelenlegi jelszó","settings.newPassword":"Új jelszó","settings.confirmPassword":"Új jelszó megerősítése","settings.updatePassword":"Jelszó frissítése","settings.passwordRequired":"Kérjük, add meg a jelenlegi és az új jelszót","settings.currentPasswordRequired":"A jelenlegi jelszó megadása kötelező","settings.passwordTooShort":"A jelszónak legalább 8 karakter hosszúnak kell lennie","settings.passwordWeak":"A jelszónak tartalmaznia kell nagybetűt, kisbetűt, számot és speciális karaktert","settings.passwordMismatch":"A jelszavak nem egyeznek","settings.passwordChanged":"Jelszó sikeresen módosítva","settings.deleteAccount":"Törlés","settings.deleteAccountTitle":"Biztosan törölni szeretnéd a fiókodat?","settings.deleteAccountWarning":"A fiókod és minden utazásod, helyed és fájlod véglegesen törlődik. Ez a művelet nem vonható vissza.","settings.deleteAccountConfirm":"Végleges törlés","settings.deleteBlockedTitle":"Törlés nem lehetséges","settings.deleteBlockedMessage":"Te vagy az egyetlen adminisztrátor. Nevezz ki egy másik felhasználót adminnak, mielőtt törölnéd a fiókodat.","settings.roleUser":"Felhasználó","settings.saveProfile":"Mentés","settings.toast.mapSaved":"Térképbeállítások mentve","settings.toast.keysSaved":"API kulcsok mentve","settings.toast.displaySaved":"Megjelenítési beállítások mentve","settings.toast.profileSaved":"Profil frissítve","settings.uploadAvatar":"Profilkép feltöltése","settings.removeAvatar":"Profilkép eltávolítása","settings.avatarUploaded":"Profilkép frissítve","settings.avatarRemoved":"Profilkép eltávolítva","settings.avatarError":"Feltöltés sikertelen","settings.mfa.title":"Kétfaktoros hitelesítés (2FA)","settings.mfa.description":"Egy második lépést ad a bejelentkezéshez e-mail és jelszó használatakor. Használj hitelesítő alkalmazást (Google Authenticator, Authy stb.).","settings.mfa.requiredByPolicy":"A rendszergazda kétlépcsős hitelesítést ír elő. Állíts be hitelesítő alkalmazást lent, mielőtt továbblépnél.","settings.mfa.backupTitle":"Tartalék kódok","settings.mfa.backupDescription":"Használd ezeket az egyszer használatos kódokat, ha elveszíted a hozzáférést a hitelesítő alkalmazásodhoz.","settings.mfa.backupWarning":"Mentsd el ezeket most. Minden kód csak egyszer használható.","settings.mfa.backupCopy":"Kódok másolása","settings.mfa.backupDownload":"TXT letöltése","settings.mfa.backupPrint":"Nyomtatás / PDF","settings.mfa.backupCopied":"Tartalék kódok másolva","settings.mfa.enabled":"2FA engedélyezve van a fiókodban.","settings.mfa.disabled":"2FA nincs engedélyezve.","settings.mfa.setup":"Hitelesítő beállítása","settings.mfa.scanQr":"Olvasd be ezt a QR-kódot az alkalmazásoddal, vagy add meg manuálisan a titkos kulcsot.","settings.mfa.secretLabel":"Titkos kulcs (kézi megadás)","settings.mfa.codePlaceholder":"6 jegyű kód","settings.mfa.enable":"2FA engedélyezése","settings.mfa.cancelSetup":"Mégse","settings.mfa.disableTitle":"2FA kikapcsolása","settings.mfa.disableHint":"Add meg a fiókod jelszavát és a hitelesítő alkalmazás aktuális kódját.","settings.mfa.disable":"2FA kikapcsolása","settings.mfa.toastEnabled":"Kétfaktoros hitelesítés engedélyezve","settings.mfa.toastDisabled":"Kétfaktoros hitelesítés kikapcsolva","settings.mfa.demoBlocked":"Demo módban nem érhető el","settings.mustChangePassword":"A folytatás előtt meg kell változtatnod a jelszavad. Kérjük, adj meg egy új jelszót alább.","admin.notifications.title":"Értesítések","admin.notifications.hint":"Válasszon értesítési csatornát. Egyszerre csak egy lehet aktív.","admin.notifications.none":"Kikapcsolva","admin.notifications.email":"E-mail (SMTP)","admin.notifications.webhook":"Webhook","admin.notifications.events":"Értesítési események","admin.notifications.eventsHint":"Válaszd ki, mely események indítsanak értesítéseket minden felhasználó számára.","admin.notifications.configureFirst":"Először konfiguráld az SMTP vagy webhook beállításokat lent, majd engedélyezd az eseményeket.","admin.notifications.save":"Értesítési beállítások mentése","admin.notifications.saved":"Értesítési beállítások mentve","admin.notifications.testWebhook":"Teszt webhook küldése","admin.notifications.testWebhookSuccess":"Teszt webhook sikeresen elküldve","admin.notifications.testWebhookFailed":"Teszt webhook küldése sikertelen","admin.smtp.title":"E-mail és értesítések","admin.smtp.hint":"SMTP konfiguráció e-mail értesítések küldéséhez.","admin.smtp.testButton":"Teszt e-mail küldése","admin.webhook.hint":"Értesítések küldése külső webhookra (Discord, Slack stb.).","admin.smtp.testSuccess":"Teszt e-mail sikeresen elküldve","admin.smtp.testFailed":"Teszt e-mail küldése sikertelen","dayplan.icsTooltip":"Naptár exportálása (ICS)","share.linkTitle":"Nyilvános link","share.linkHint":"Hozz létre egy linket, amellyel bárki megtekintheti ezt az utazást bejelentkezés nélkül. Csak olvasható — szerkesztés nem lehetséges.","share.createLink":"Link létrehozása","share.deleteLink":"Link törlése","share.createError":"Nem sikerült létrehozni a linket","common.copy":"Másolás","common.copied":"Másolva","share.permMap":"Térkép és terv","share.permBookings":"Foglalások","share.permPacking":"Csomagolás","shared.expired":"Link lejárt vagy érvénytelen","shared.expiredHint":"Ez a megosztott utazási link már nem aktív.","shared.readOnly":"Csak olvasható megosztott nézet","shared.tabPlan":"Terv","shared.tabBookings":"Foglalások","shared.tabPacking":"Csomagolás","shared.tabBudget":"Költségvetés","shared.tabChat":"Csevegés","shared.days":"nap","shared.places":"hely","shared.other":"Egyéb","shared.totalBudget":"Teljes költségvetés","shared.messages":"üzenet","shared.sharedVia":"Megosztva:","shared.confirmed":"Megerősítve","shared.pending":"Függőben","share.permBudget":"Költségvetés","share.permCollab":"Csevegés","login.error":"Bejelentkezés sikertelen. Kérjük, ellenőrizd a megadott adatokat.","login.tagline":`Az utazásaid. A terved.`,"login.description":"Tervezz utazásokat közösen interaktív térképekkel, költségvetéssel és valós idejű szinkronizálással.","login.features.maps":"Interaktív térképek","login.features.mapsDesc":"Google Places, útvonalak és csoportosítás","login.features.realtime":"Valós idejű szinkron","login.features.realtimeDesc":"Közös tervezés WebSocket-en keresztül","login.features.budget":"Költségvetés-követés","login.features.budgetDesc":"Kategóriák, diagramok és személyenkénti költségek","login.features.collab":"Együttműködés","login.features.collabDesc":"Többfelhasználós, megosztott utazásokkal","login.features.packing":"Csomagolási listák","login.features.packingDesc":"Kategóriák és haladás","login.features.bookings":"Foglalások","login.features.bookingsDesc":"Repülők, szállodák, éttermek és még több","login.features.files":"Dokumentumok","login.features.filesDesc":"Fájlok feltöltése és kezelése","login.features.routes":"Útvonal-optimalizálás","login.features.routesDesc":"Automatikus optimalizálás és Google Maps export","login.selfHosted":"Saját üzemeltetés · Nyílt forráskód · Az adataid nálad maradnak","login.title":"Bejelentkezés","login.subtitle":"Üdv újra","login.signingIn":"Bejelentkezés…","login.signIn":"Bejelentkezés","login.createAdmin":"Admin fiók létrehozása","login.createAdminHint":"Hozd létre az első admin fiókot a TREK-hez.","login.setNewPassword":"Új jelszó beállítása","login.setNewPasswordHint":"A folytatás előtt meg kell változtatnia a jelszavát.","login.createAccount":"Fiók létrehozása","login.createAccountHint":"Új fiók regisztrálása.","login.creating":"Létrehozás…","login.noAccount":"Nincs még fiókod?","login.hasAccount":"Már van fiókod?","login.register":"Regisztráció","login.emailPlaceholder":"email@cimed.hu","login.username":"Felhasználónév","login.oidc.registrationDisabled":"A regisztráció le van tiltva. Lépj kapcsolatba az adminisztrátorral.","login.oidc.noEmail":"Nem érkezett e-mail a szolgáltatótól.","login.oidc.tokenFailed":"Hitelesítés sikertelen.","login.oidc.invalidState":"Érvénytelen munkamenet. Kérjük, próbáld újra.","login.demoFailed":"Demo bejelentkezés sikertelen","login.oidcSignIn":"Bejelentkezés ezzel: {name}","login.oidcOnly":"A jelszavas hitelesítés le van tiltva. Kérjük, jelentkezz be az SSO szolgáltatódon keresztül.","login.demoHint":"Próbáld ki a demót — regisztráció nélkül","login.mfaTitle":"Kétfaktoros hitelesítés","login.mfaSubtitle":"Add meg a 6 jegyű kódot a hitelesítő alkalmazásból.","login.mfaCodeLabel":"Ellenőrző kód","login.mfaCodeRequired":"Add meg a kódot a hitelesítő alkalmazásból.","login.mfaHint":"Nyisd meg a Google Authenticator, Authy vagy más TOTP alkalmazást.","login.mfaBack":"← Vissza a bejelentkezéshez","login.mfaVerify":"Ellenőrzés","register.passwordMismatch":"A jelszavak nem egyeznek","register.passwordTooShort":"A jelszónak legalább 8 karakter hosszúnak kell lennie","register.failed":"Regisztráció sikertelen","register.getStarted":"Kezdjük","register.subtitle":"Hozz létre egy fiókot, és kezdd el megtervezni álomutazásaidat.","register.feature1":"Korlátlan utazási tervek","register.feature2":"Interaktív térképnézet","register.feature3":"Helyek és kategóriák kezelése","register.feature4":"Foglalások nyomon követése","register.feature5":"Csomagolási listák készítése","register.feature6":"Fényképek és fájlok tárolása","register.createAccount":"Fiók létrehozása","register.startPlanning":"Kezdd el az utazástervezést","register.minChars":"Min. 6 karakter","register.confirmPassword":"Jelszó megerősítése","register.repeatPassword":"Jelszó ismétlése","register.registering":"Regisztráció...","register.register":"Regisztráció","register.hasAccount":"Már van fiókod?","register.signIn":"Bejelentkezés","admin.title":"Adminisztráció","admin.subtitle":"Felhasználókezelés és rendszerbeállítások","admin.tabs.users":"Felhasználók","admin.tabs.categories":"Kategóriák","admin.tabs.backup":"Biztonsági mentés","admin.stats.users":"Felhasználók","admin.stats.trips":"Utazások","admin.stats.places":"Helyek","admin.stats.photos":"Fotók","admin.stats.files":"Fájlok","admin.table.user":"Felhasználó","admin.table.email":"E-mail","admin.table.role":"Szerepkör","admin.table.created":"Létrehozva","admin.table.lastLogin":"Utolsó belépés","admin.table.actions":"Műveletek","admin.you":"(Te)","admin.editUser":"Felhasználó szerkesztése","admin.newPassword":"Új jelszó","admin.newPasswordHint":"Hagyd üresen a jelenlegi jelszó megtartásához","admin.deleteUser":'"{name}" felhasználó törlése? Minden utazás véglegesen törlődik.',"admin.deleteUserTitle":"Felhasználó törlése","admin.newPasswordPlaceholder":"Új jelszó megadása…","admin.toast.loadError":"Nem sikerült betölteni az admin adatokat","admin.toast.userUpdated":"Felhasználó frissítve","admin.toast.updateError":"Nem sikerült frissíteni","admin.toast.userDeleted":"Felhasználó törölve","admin.toast.deleteError":"Nem sikerült törölni","admin.toast.cannotDeleteSelf":"Saját fiók nem törölhető","admin.toast.userCreated":"Felhasználó létrehozva","admin.toast.createError":"Nem sikerült létrehozni a felhasználót","admin.toast.fieldsRequired":"Felhasználónév, e-mail és jelszó megadása kötelező","admin.createUser":"Felhasználó létrehozása","admin.invite.title":"Meghívó linkek","admin.invite.subtitle":"Egyszer használatos regisztrációs linkek létrehozása","admin.invite.create":"Link létrehozása","admin.invite.createAndCopy":"Létrehozás és másolás","admin.invite.empty":"Még nincsenek meghívó linkek","admin.invite.maxUses":"Max. használat","admin.invite.expiry":"Lejárat","admin.invite.uses":"felhasználva","admin.invite.expiresAt":"lejár","admin.invite.createdBy":"készítette","admin.invite.active":"Aktív","admin.invite.expired":"Lejárt","admin.invite.usedUp":"Elhasználva","admin.invite.copied":"Meghívó link vágólapra másolva","admin.invite.copyLink":"Link másolása","admin.invite.deleted":"Meghívó link törölve","admin.invite.createError":"Nem sikerült létrehozni a meghívó linket","admin.invite.deleteError":"Nem sikerült törölni a meghívó linket","admin.tabs.settings":"Beállítások","admin.allowRegistration":"Regisztráció engedélyezése","admin.allowRegistrationHint":"Új felhasználók regisztrálhatják magukat","admin.requireMfa":"Kétlépcsős hitelesítés (2FA) kötelezővé tétele","admin.requireMfaHint":"A 2FA nélküli felhasználóknak a Beállításokban kell befejezniük a beállítást az alkalmazás használata előtt.","admin.apiKeys":"API kulcsok","admin.apiKeysHint":"Opcionális. Bővített helyadatokat tesz lehetővé, például fotókat és időjárást.","admin.mapsKey":"Google Maps API kulcs","admin.mapsKeyHint":"Helykereséshez szükséges. Létrehozás: console.cloud.google.com","admin.mapsKeyHintLong":"API kulcs nélkül az OpenStreetMap szolgál helykeresésre. Google API kulccsal képek, értékelések és nyitvatartás is betölthetők. Létrehozás: console.cloud.google.com.","admin.recommended":"Ajánlott","admin.weatherKey":"OpenWeatherMap API kulcs","admin.weatherKeyHint":"Időjárás adatokhoz. Ingyenes: openweathermap.org","admin.validateKey":"Teszt","admin.keyValid":"Csatlakozva","admin.keyInvalid":"Érvénytelen","admin.keySaved":"API kulcsok mentve","admin.oidcTitle":"Egyszeri bejelentkezés (OIDC)","admin.oidcSubtitle":"Bejelentkezés külső szolgáltatókon keresztül, pl. Google, Apple, Authentik vagy Keycloak.","admin.oidcDisplayName":"Megjelenítendő név","admin.oidcIssuer":"Issuer URL","admin.oidcIssuerHint":"A szolgáltató OpenID Connect Issuer URL-je. pl. https://accounts.google.com","admin.oidcSaved":"OIDC konfiguráció mentve","admin.oidcOnlyMode":"Jelszavas hitelesítés letiltása","admin.oidcOnlyModeHint":"Ha engedélyezve van, csak SSO bejelentkezés lehetséges. A jelszavas bejelentkezés és regisztráció le van tiltva.","admin.fileTypes":"Engedélyezett fájltípusok","admin.fileTypesHint":"Állítsd be, milyen fájltípusokat tölthetnek fel a felhasználók.","admin.fileTypesFormat":"Vesszővel elválasztott kiterjesztések (pl. jpg,png,pdf,doc). Használj *-ot az összes típus engedélyezéséhez.","admin.fileTypesSaved":"Fájltípus-beállítások mentve","admin.bagTracking.title":"Poggyászkövetés","admin.bagTracking.subtitle":"Súly- és táskahozzárendelés engedélyezése csomagolási tételeknél","admin.tabs.config":"Konfiguráció","admin.tabs.templates":"Csomagolási sablonok","admin.packingTemplates.title":"Csomagolási sablonok","admin.packingTemplates.subtitle":"Újrafelhasználható csomagolási listák létrehozása utazásaidhoz","admin.packingTemplates.create":"Új sablon","admin.packingTemplates.namePlaceholder":"Sablon neve (pl. Tengerparti nyaralás)","admin.packingTemplates.empty":"Még nincsenek sablonok","admin.packingTemplates.items":"tétel","admin.packingTemplates.categories":"kategória","admin.packingTemplates.itemName":"Tétel neve","admin.packingTemplates.itemCategory":"Kategória","admin.packingTemplates.categoryName":"Kategória neve (pl. Ruházat)","admin.packingTemplates.addCategory":"Kategória hozzáadása","admin.packingTemplates.created":"Sablon létrehozva","admin.packingTemplates.deleted":"Sablon törölve","admin.packingTemplates.loadError":"Nem sikerült betölteni a sablonokat","admin.packingTemplates.createError":"Nem sikerült létrehozni a sablont","admin.packingTemplates.deleteError":"Nem sikerült törölni a sablont","admin.packingTemplates.saveError":"Nem sikerült menteni","admin.tabs.addons":"Bővítmények","admin.addons.title":"Bővítmények","admin.addons.subtitle":"Funkciók engedélyezése vagy letiltása a TREK testreszabásához.","admin.addons.catalog.packing.name":"Csomagolás","admin.addons.catalog.packing.description":"Ellenőrzőlisták a poggyász előkészítéséhez minden utazáshoz","admin.addons.catalog.budget.name":"Költségvetés","admin.addons.catalog.budget.description":"Kiadások nyomon követése és az utazási költségvetés tervezése","admin.addons.catalog.documents.name":"Dokumentumok","admin.addons.catalog.documents.description":"Úti dokumentumok tárolása és kezelése","admin.addons.catalog.vacay.name":"Vacay","admin.addons.catalog.vacay.description":"Személyes szabadságtervező naptárnézettel","admin.addons.catalog.atlas.name":"Atlasz","admin.addons.catalog.atlas.description":"Világtérkép meglátogatott országokkal és utazási statisztikákkal","admin.addons.catalog.collab.name":"Együttműködés","admin.addons.catalog.collab.description":"Valós idejű jegyzetek, szavazások és csevegés az utazás tervezéséhez","admin.addons.catalog.memories.name":"Fotók (Immich)","admin.addons.catalog.memories.description":"Utazási fotók megosztása az Immich példányon keresztül","admin.addons.catalog.mcp.name":"MCP","admin.addons.catalog.mcp.description":"Model Context Protocol AI asszisztens integrációhoz","admin.addons.subtitleBefore":"Funkciók engedélyezése vagy letiltása a ","admin.addons.subtitleAfter":" testreszabásához.","admin.addons.enabled":"Engedélyezve","admin.addons.disabled":"Letiltva","admin.addons.type.trip":"Utazás","admin.addons.type.global":"Globális","admin.addons.type.integration":"Integráció","admin.addons.tripHint":"Fülként érhető el minden utazáson belül","admin.addons.globalHint":"Önálló szekcióként elérhető a fő navigációban","admin.addons.integrationHint":"Háttérszolgáltatások és API integrációk dedikált oldal nélkül","admin.addons.toast.updated":"Bővítmény frissítve","admin.addons.toast.error":"Nem sikerült frissíteni a bővítményt","admin.addons.noAddons":"Nincsenek elérhető bővítmények","admin.weather.title":"Időjárás adatok","admin.weather.badge":"2026. március 24. óta","admin.weather.description":"A TREK az Open-Meteo-t használja időjárás-adatforrásként. Az Open-Meteo egy ingyenes, nyílt forráskódú időjárás-szolgáltatás — nincs szükség API kulcsra.","admin.weather.forecast":"16 napos előrejelzés","admin.weather.forecastDesc":"Korábban 5 nap volt (OpenWeatherMap)","admin.weather.climate":"Történelmi klímaadatok","admin.weather.climateDesc":"Az elmúlt 85 év átlagai a 16 napos előrejelzésen túli napokhoz","admin.weather.requests":"10 000 kérés / nap","admin.weather.requestsDesc":"Ingyenes, nincs szükség API kulcsra","admin.weather.locationHint":"Az időjárás az adott nap első koordinátákkal rendelkező helye alapján készül. Ha nincs hely hozzárendelve a naphoz, a helylista bármelyik helye szolgál referenciául.","admin.tabs.audit":"Auditnapló","admin.audit.subtitle":"Biztonsági és adminisztrációs események (mentések, felhasználók, 2FA, beállítások).","admin.audit.empty":"Még nincsenek audit bejegyzések.","admin.audit.refresh":"Frissítés","admin.audit.loadMore":"Továbbiak betöltése","admin.audit.showing":"{count} betöltve · {total} összesen","admin.audit.col.time":"Időpont","admin.audit.col.user":"Felhasználó","admin.audit.col.action":"Művelet","admin.audit.col.resource":"Erőforrás","admin.audit.col.ip":"IP","admin.audit.col.details":"Részletek","admin.tabs.mcpTokens":"MCP tokenek","admin.mcpTokens.title":"MCP tokenek","admin.mcpTokens.subtitle":"Összes felhasználó API tokeneinek kezelése","admin.mcpTokens.owner":"Tulajdonos","admin.mcpTokens.tokenName":"Token neve","admin.mcpTokens.created":"Létrehozva","admin.mcpTokens.lastUsed":"Utoljára használva","admin.mcpTokens.never":"Soha","admin.mcpTokens.empty":"Még nem hoztak létre MCP tokeneket","admin.mcpTokens.deleteTitle":"Token törlése","admin.mcpTokens.deleteMessage":"Ez a token azonnal érvénytelenítésre kerül. A felhasználó elveszíti az MCP hozzáférést ezen a tokenen keresztül.","admin.mcpTokens.deleteSuccess":"Token törölve","admin.mcpTokens.deleteError":"Nem sikerült törölni a tokent","admin.mcpTokens.loadError":"Nem sikerült betölteni a tokeneket","admin.tabs.github":"GitHub","admin.github.title":"Frissítési előzmények","admin.github.subtitle":"Legújabb frissítések: {repo}","admin.github.latest":"Legújabb","admin.github.prerelease":"Előzetes kiadás","admin.github.showDetails":"Részletek megjelenítése","admin.github.hideDetails":"Részletek elrejtése","admin.github.loadMore":"Továbbiak betöltése","admin.github.loading":"Betöltés...","admin.github.error":"Nem sikerült betölteni a kiadásokat","admin.github.by":"készítette","admin.github.support":"Segít fenntartani a TREK fejlesztését","admin.update.available":"Frissítés elérhető","admin.update.text":"A TREK {version} elérhető. Jelenleg a {current} verziót használod.","admin.update.button":"Megtekintés a GitHubon","admin.update.install":"Frissítés telepítése","admin.update.confirmTitle":"Frissítés telepítése?","admin.update.confirmText":"A TREK frissítésre kerül {current} verzióról {version} verzióra. A szerver ezután automatikusan újraindul.","admin.update.dataInfo":"Minden adat (utazások, felhasználók, API kulcsok, feltöltések, Vacay, Atlas, költségvetések) megmarad.","admin.update.warning":"Az alkalmazás az újraindítás alatt rövid ideig nem lesz elérhető.","admin.update.confirm":"Frissítés most","admin.update.installing":"Frissítés…","admin.update.success":"Frissítés telepítve! A szerver újraindul…","admin.update.failed":"Frissítés sikertelen","admin.update.backupHint":"Javasoljuk, hogy frissítés előtt készíts biztonsági mentést.","admin.update.backupLink":"Biztonsági mentéshez","admin.update.howTo":"Frissítési útmutató","admin.update.dockerText":"A TREK példányod Dockerben fut. A {version} verzióra frissítéshez futtasd a következő parancsokat a szervereden:","admin.update.reloadHint":"Kérjük, töltsd újra az oldalt néhány másodperc múlva.","vacay.subtitle":"Szabadságnapok tervezése és kezelése","vacay.settings":"Beállítások","vacay.year":"Év","vacay.addYear":"Év hozzáadása","vacay.removeYear":"Év eltávolítása","vacay.removeYearConfirm":"{year} eltávolítása?","vacay.removeYearHint":"Az adott év összes szabadság-bejegyzése és céges szabadnapja véglegesen törlődik.","vacay.remove":"Eltávolítás","vacay.persons":"Személyek","vacay.noPersons":"Nincsenek személyek hozzáadva","vacay.addPerson":"Személy hozzáadása","vacay.editPerson":"Személy szerkesztése","vacay.removePerson":"Személy eltávolítása","vacay.removePersonConfirm":"{name} eltávolítása?","vacay.removePersonHint":"A személy összes szabadság-bejegyzése véglegesen törlődik.","vacay.personName":"Név","vacay.personNamePlaceholder":"Név megadása","vacay.color":"Szín","vacay.add":"Hozzáadás","vacay.legend":"Jelmagyarázat","vacay.publicHoliday":"Ünnepnap","vacay.companyHoliday":"Céges szabadnap","vacay.weekend":"Hétvége","vacay.modeVacation":"Szabadság","vacay.modeCompany":"Céges szabadnap","vacay.entitlement":"Szabadságkeret","vacay.entitlementDays":"nap","vacay.used":"Felhasznált","vacay.remaining":"Maradt","vacay.carriedOver":"{year}-ból/ből","vacay.blockWeekends":"Hétvégék zárolása","vacay.blockWeekendsHint":"Szabadság-bejegyzések megakadályozása szombaton és vasárnap","vacay.publicHolidays":"Ünnepnapok","vacay.publicHolidaysHint":"Ünnepnapok megjelölése a naptárban","vacay.selectCountry":"Ország kiválasztása","vacay.selectRegion":"Régió kiválasztása (opcionális)","vacay.addCalendar":"Naptár hozzáadása","vacay.calendarLabel":"Címke (opcionális)","vacay.calendarColor":"Szín","vacay.noCalendars":"Még nincsenek ünnepnap-naptárak hozzáadva","vacay.weekendDays":"Hétvégi napok","vacay.mon":"Hé","vacay.tue":"Ke","vacay.wed":"Sze","vacay.thu":"Csü","vacay.fri":"Pé","vacay.sat":"Szo","vacay.sun":"Va","vacay.companyHolidays":"Céges szabadnapok","vacay.companyHolidaysHint":"Céges szintű szabadnapok megjelölésének engedélyezése","vacay.companyHolidaysNoDeduct":"A céges szabadnapok nem számítanak bele a szabadságkeretbe.","vacay.carryOver":"Szabadság átvitele","vacay.carryOverHint":"Megmaradt szabadságnapok automatikus átvitele a következő évre","vacay.sharing":"Megosztás","vacay.sharingHint":"Szabadságterved megosztása más TREK felhasználókkal","vacay.owner":"Tulajdonos","vacay.shareEmailPlaceholder":"TREK felhasználó e-mail címe","vacay.shareSuccess":"Terv sikeresen megosztva","vacay.shareError":"Nem sikerült megosztani a tervet","vacay.dissolve":"Összevonás feloldása","vacay.dissolveHint":"Naptárak újbóli szétválasztása. A bejegyzéseid megmaradnak.","vacay.dissolveAction":"Feloldás","vacay.dissolved":"Naptár szétválasztva","vacay.fusedWith":"Összevonva:","vacay.you":"te","vacay.noData":"Nincs adat","vacay.changeColor":"Szín módosítása","vacay.inviteUser":"Felhasználó meghívása","vacay.inviteHint":"Hívj meg egy másik TREK felhasználót közös szabadságnaptár megosztásához.","vacay.selectUser":"Felhasználó kiválasztása","vacay.sendInvite":"Meghívó küldése","vacay.inviteSent":"Meghívó elküldve","vacay.inviteError":"Nem sikerült elküldeni a meghívót","vacay.pending":"függőben","vacay.noUsersAvailable":"Nincsenek elérhető felhasználók","vacay.accept":"Elfogadás","vacay.decline":"Elutasítás","vacay.acceptFusion":"Elfogadás és összevonás","vacay.inviteTitle":"Összevonási kérelem","vacay.inviteWantsToFuse":"szeretne megosztani veled egy szabadságnaptárat.","vacay.fuseInfo1":"Mindketten látjátok az összes szabadság-bejegyzést egy közös naptárban.","vacay.fuseInfo2":"Mindkét fél létrehozhat és szerkeszthet bejegyzéseket a másik számára.","vacay.fuseInfo3":"Mindkét fél törölhet bejegyzéseket és módosíthatja a szabadságkeretet.","vacay.fuseInfo4":"A beállítások, mint ünnepnapok és céges szabadnapok, közösen érvényesek.","vacay.fuseInfo5":"Az összevonás bármikor feloldható bármelyik fél által. A bejegyzések megmaradnak.","nav.myTrips":"Utazásaim","atlas.subtitle":"Utazási lábnyomod a világban","atlas.countries":"Országok","atlas.trips":"Utazások","atlas.places":"Helyek","atlas.unmark":"Eltávolítás","atlas.confirmMark":"Megjelölöd ezt az országot meglátogatottként?","atlas.confirmUnmark":"Eltávolítod ezt az országot a meglátogatottak listájáról?","atlas.markVisited":"Megjelölés meglátogatottként","atlas.markVisitedHint":"Ország hozzáadása a meglátogatottak listájához","atlas.addToBucket":"Hozzáadás a bakancslistához","atlas.addPoi":"Hely hozzáadása","atlas.searchCountry":"Ország keresése...","atlas.bucketNamePlaceholder":"Név (ország, város, hely...)","atlas.month":"Hónap","atlas.addToBucketHint":"Mentés meglátogatni kívánt helyként","atlas.bucketWhen":"Mikor tervezed meglátogatni?","atlas.statsTab":"Statisztikák","atlas.bucketTab":"Bakancslista","atlas.addBucket":"Hozzáadás a bakancslistához","atlas.bucketNotesPlaceholder":"Jegyzetek (opcionális)","atlas.bucketEmpty":"A bakancslistád üres","atlas.bucketEmptyHint":"Adj hozzá helyeket, ahová álmodsz eljutni","atlas.days":"Napok","atlas.visitedCountries":"Meglátogatott országok","atlas.cities":"Városok","atlas.noData":"Még nincsenek utazási adatok","atlas.noDataHint":"Hozz létre egy utazást és adj hozzá helyeket a világtérképhez","atlas.lastTrip":"Utolsó utazás","atlas.nextTrip":"Következő utazás","atlas.daysLeft":"nap van hátra","atlas.streak":"Sorozat","atlas.year":"év","atlas.years":"év","atlas.yearInRow":"egymást követő év","atlas.yearsInRow":"egymást követő év","atlas.tripIn":"utazás","atlas.tripsIn":"utazás","atlas.since":"óta","atlas.europe":"Európa","atlas.asia":"Ázsia","atlas.northAmerica":"É-Amerika","atlas.southAmerica":"D-Amerika","atlas.africa":"Afrika","atlas.oceania":"Óceánia","atlas.other":"Egyéb","atlas.firstVisit":"Első utazás","atlas.lastVisitLabel":"Utolsó utazás","atlas.tripSingular":"Utazás","atlas.tripPlural":"Utazások","atlas.placeVisited":"Meglátogatott hely","atlas.placesVisited":"Meglátogatott helyek","trip.tabs.plan":"Terv","trip.tabs.reservations":"Foglalások","trip.tabs.reservationsShort":"Foglalás","trip.tabs.packing":"Csomagolási lista","trip.tabs.packingShort":"Csomag","trip.tabs.budget":"Költségvetés","trip.tabs.files":"Fájlok","trip.loading":"Utazás betöltése...","trip.mobilePlan":"Tervezés","trip.mobilePlaces":"Helyek","trip.toast.placeUpdated":"Hely frissítve","trip.toast.placeAdded":"Hely hozzáadva","trip.toast.placeDeleted":"Hely törölve","trip.toast.selectDay":"Kérjük, először válassz egy napot","trip.toast.assignedToDay":"Hely hozzárendelve a naphoz","trip.toast.reorderError":"Nem sikerült átrendezni","trip.toast.reservationUpdated":"Foglalás frissítve","trip.toast.reservationAdded":"Foglalás hozzáadva","trip.toast.deleted":"Törölve","trip.confirm.deletePlace":"Biztosan törölni szeretnéd ezt a helyet?","trip.loadingPhotos":"Helyek fotóinak betöltése...","dayplan.emptyDay":"Nincs tervezett hely erre a napra","dayplan.addNote":"Jegyzet hozzáadása","dayplan.editNote":"Jegyzet szerkesztése","dayplan.noteAdd":"Jegyzet hozzáadása","dayplan.noteEdit":"Jegyzet szerkesztése","dayplan.noteTitle":"Jegyzet","dayplan.noteSubtitle":"Napi jegyzet","dayplan.totalCost":"Összköltség","dayplan.days":"nap","dayplan.dayN":"{n}. nap","dayplan.calculating":"Számítás...","dayplan.route":"Útvonal","dayplan.optimize":"Optimalizálás","dayplan.optimized":"Útvonal optimalizálva","dayplan.routeError":"Nem sikerült kiszámítani az útvonalat","dayplan.toast.needTwoPlaces":"Legalább két hely szükséges az útvonal-optimalizáláshoz","dayplan.toast.routeOptimized":"Útvonal optimalizálva","dayplan.toast.noGeoPlaces":"Nem találhatók koordinátákkal rendelkező helyek az útvonalszámításhoz","dayplan.confirmed":"Megerősítve","dayplan.pendingRes":"Függőben","dayplan.pdf":"PDF","dayplan.pdfTooltip":"Napi terv exportálása PDF-be","dayplan.pdfError":"Nem sikerült a PDF exportálás","dayplan.cannotReorderTransport":"A rögzített időpontú foglalások nem rendezhetők át","dayplan.confirmRemoveTimeTitle":"Időpont eltávolítása?","dayplan.confirmRemoveTimeBody":"Ennek a helynek rögzített időpontja van ({time}). Az áthelyezéssel az időpont eltávolítódik és szabad rendezés válik lehetővé.","dayplan.confirmRemoveTimeAction":"Időpont eltávolítása és áthelyezés","dayplan.cannotDropOnTimed":"Elemek nem helyezhetők rögzített időpontú bejegyzések közé","dayplan.cannotBreakChronology":"Ez megbontaná az időzített elemek és foglalások időrendi sorrendjét","places.addPlace":"Hely/Tevékenység hozzáadása","places.importGpx":"GPX","places.gpxImported":"{count} hely importálva GPX-ből","places.urlResolved":"Hely importálva URL-ből","places.gpxError":"GPX importálás sikertelen","places.importGoogleList":"Google Lista","places.googleListHint":"Illessz be egy megosztott Google Maps lista linket az osszes hely importalasahoz.","places.googleListImported":'{count} hely importalva a(z) "{list}" listabol',"places.googleListError":"Google Maps lista importalasa sikertelen","places.viewDetails":"Részletek megtekintése","places.assignToDay":"Melyik naphoz adod?","places.all":"Összes","places.unplanned":"Nem tervezett","places.search":"Helyek keresése...","places.allCategories":"Összes kategória","places.categoriesSelected":"kategória","places.clearFilter":"Szűrő törlése","places.count":"{count} hely","places.countSingular":"1 hely","places.allPlanned":"Minden hely be van tervezve","places.noneFound":"Nem találhatók helyek","places.editPlace":"Hely szerkesztése","places.formName":"Név","places.formNamePlaceholder":"pl. Eiffel-torony","places.formDescription":"Leírás","places.formDescriptionPlaceholder":"Rövid leírás...","places.formAddress":"Cím","places.formAddressPlaceholder":"Utca, Város, Ország","places.formLat":"Szélességi fok (pl. 48.8566)","places.formLng":"Hosszúsági fok (pl. 2.3522)","places.formCategory":"Kategória","places.noCategory":"Nincs kategória","places.categoryNamePlaceholder":"Kategória neve","places.formTime":"Időpont","places.startTime":"Kezdés","places.endTime":"Befejezés","places.endTimeBeforeStart":"A befejezési idő a kezdési idő előtt van","places.timeCollision":"Időbeli átfedés:","places.formWebsite":"Weboldal","places.formNotesPlaceholder":"Személyes jegyzetek...","places.formReservation":"Foglalás","places.reservationNotesPlaceholder":"Foglalási jegyzetek, visszaigazolási szám...","places.mapsSearchPlaceholder":"Helyek keresése...","places.mapsSearchError":"Helykeresés sikertelen.","places.osmHint":"OpenStreetMap keresés aktív (képek, nyitvatartás és értékelések nélkül). Bővített adatokhoz add meg a Google API kulcsot a beállításokban.","places.osmActive":"Keresés OpenStreetMap-en keresztül (képek, értékelések és nyitvatartás nélkül). Bővített adatokhoz add meg a Google API kulcsot a beállításokban.","places.categoryCreateError":"Nem sikerült létrehozni a kategóriát","places.nameRequired":"Kérjük, adj meg egy nevet","places.saveError":"Nem sikerült menteni","inspector.opened":"Nyitva","inspector.closed":"Zárva","inspector.openingHours":"Nyitvatartás","inspector.showHours":"Nyitvatartás megjelenítése","inspector.files":"Fájlok","inspector.filesCount":"{count} fájl","inspector.removeFromDay":"Eltávolítás a napról","inspector.addToDay":"Hozzáadás a naphoz","inspector.confirmedRes":"Megerősített foglalás","inspector.pendingRes":"Függőben lévő foglalás","inspector.google":"Megnyitás a Google Térképben","inspector.website":"Weboldal megnyitása","inspector.addRes":"Foglalás","inspector.editRes":"Foglalás szerkesztése","inspector.participants":"Résztvevők","inspector.trackStats":"Útvonal adatok","reservations.title":"Foglalások","reservations.empty":"Még nincsenek foglalások","reservations.emptyHint":"Adj hozzá foglalásokat repülőkhöz, szállodákhoz és egyebekhez","reservations.add":"Foglalás hozzáadása","reservations.addManual":"Kézi foglalás","reservations.placeHint":"Tipp: A foglalásokat legjobb közvetlenül egy helyről létrehozni, hogy összekapcsolódjon a napi tervvel.","reservations.confirmed":"Megerősítve","reservations.pending":"Függőben","reservations.summary":"{confirmed} megerősítve, {pending} függőben","reservations.fromPlan":"Tervből","reservations.showFiles":"Fájlok megjelenítése","reservations.editTitle":"Foglalás szerkesztése","reservations.status":"Állapot","reservations.datetime":"Dátum és idő","reservations.startTime":"Kezdési idő","reservations.endTime":"Befejezési idő","reservations.date":"Dátum","reservations.time":"Időpont","reservations.timeAlt":"Időpont (alternatív, pl. 19:30)","reservations.linkExisting":"Meglévő fájl csatolása","reservations.notes":"Jegyzetek","reservations.notesPlaceholder":"További jegyzetek...","reservations.meta.airline":"Légitársaság","reservations.meta.flightNumber":"Járatszám","reservations.meta.from":"Honnan","reservations.meta.to":"Hová","reservations.meta.trainNumber":"Vonatszám","reservations.meta.platform":"Vágány","reservations.meta.seat":"Ülés","reservations.meta.checkIn":"Bejelentkezés","reservations.meta.checkOut":"Kijelentkezés","reservations.meta.linkAccommodation":"Szállás","reservations.meta.pickAccommodation":"Szállás hozzárendelése","reservations.meta.noAccommodation":"Nincs","reservations.meta.hotelPlace":"Szálloda","reservations.meta.pickHotel":"Szálloda kiválasztása","reservations.meta.fromDay":"Ettől","reservations.meta.toDay":"Eddig","reservations.meta.selectDay":"Nap kiválasztása","reservations.type.flight":"Repülő","reservations.type.hotel":"Szálloda","reservations.type.restaurant":"Étterem","reservations.type.train":"Vonat","reservations.type.car":"Autóbérlés","reservations.type.cruise":"Hajóút","reservations.type.event":"Esemény","reservations.type.tour":"Túra","reservations.type.other":"Egyéb","reservations.confirm.delete":'Biztosan törölni szeretnéd a(z) "{name}" foglalást?',"reservations.confirm.deleteTitle":"Foglalás törlése?","reservations.confirm.deleteBody":'"{name}" véglegesen törlődik.',"reservations.toast.updated":"Foglalás frissítve","reservations.toast.removed":"Foglalás törölve","reservations.toast.fileUploaded":"Fájl feltöltve","reservations.toast.uploadError":"Feltöltés sikertelen","reservations.newTitle":"Új foglalás","reservations.bookingType":"Foglalás típusa","reservations.titleLabel":"Cím","reservations.titlePlaceholder":"pl. Lufthansa LH123, Hotel Adlon, ...","reservations.locationAddress":"Helyszín / Cím","reservations.locationPlaceholder":"Cím, Repülőtér, Szálloda...","reservations.confirmationCode":"Foglalási kód","reservations.confirmationPlaceholder":"pl. ABC12345","reservations.day":"Nap","reservations.noDay":"Nincs nap","reservations.place":"Hely","reservations.noPlace":"Nincs hely","reservations.pendingSave":"mentés…","reservations.uploading":"Feltöltés...","reservations.attachFile":"Fájl csatolása","reservations.toast.saveError":"Nem sikerült menteni","reservations.toast.updateError":"Nem sikerült frissíteni","reservations.toast.deleteError":"Nem sikerült törölni","reservations.confirm.remove":'"{name}" foglalás eltávolítása?',"reservations.linkAssignment":"Összekapcsolás napi tervvel","reservations.pickAssignment":"Válassz hozzárendelést a tervedből...","reservations.noAssignment":"Nincs összekapcsolás (önálló)","budget.title":"Költségvetés","budget.exportCsv":"CSV exportálás","budget.emptyTitle":"Még nincs költségvetés létrehozva","budget.emptyText":"Hozz létre kategóriákat és bejegyzéseket az utazási költségvetés tervezéséhez","budget.emptyPlaceholder":"Kategória neve...","budget.createCategory":"Kategória létrehozása","budget.category":"Kategória","budget.categoryName":"Kategória neve","budget.table.name":"Név","budget.table.total":"Összesen","budget.table.persons":"Személyek","budget.table.days":"nap","budget.table.perPerson":"Személyenként","budget.table.perDay":"Naponta","budget.table.perPersonDay":"Fő / Nap","budget.table.note":"Megjegyzés","budget.table.date":"Dátum","budget.newEntry":"Új bejegyzés","budget.defaultEntry":"Új bejegyzés","budget.defaultCategory":"Új kategória","budget.total":"Összesen","budget.totalBudget":"Teljes költségvetés","budget.byCategory":"Kategóriánként","budget.editTooltip":"Kattints a szerkesztéshez","budget.confirm.deleteCategory":'Biztosan törölni szeretnéd a(z) "{name}" kategóriát {count} bejegyzéssel?',"budget.deleteCategory":"Kategória törlése","budget.perPerson":"Személyenként","budget.paid":"Fizetve","budget.open":"Nyitott","budget.noMembers":"Nincsenek résztvevők hozzárendelve","budget.settlement":"Elszámolás","budget.settlementInfo":"Kattints egy tag avatárjára egy költségvetési tételen a zöld jelöléshez — ez azt jelenti, hogy fizetett. Az elszámolás ezután mutatja, ki kinek mennyivel tartozik.","budget.netBalances":"Nettó egyenlegek","files.title":"Fájlok","files.count":"{count} fájl","files.countSingular":"1 fájl","files.uploaded":"{count} feltöltve","files.uploadError":"Feltöltés sikertelen","files.dropzone":"Húzd ide a fájlokat","files.dropzoneHint":"vagy kattints a böngészéshez","files.allowedTypes":"Képek, PDF, DOC, DOCX, XLS, XLSX, TXT, CSV · Max 50 MB","files.uploading":"Feltöltés...","files.filterAll":"Összes","files.filterPdf":"PDF-ek","files.filterImages":"Képek","files.filterDocs":"Dokumentumok","files.filterCollab":"Közös jegyzetek","files.sourceCollab":"Közös jegyzetekből","files.empty":"Még nincsenek fájlok","files.emptyHint":"Tölts fel fájlokat az utazásodhoz","files.openTab":"Megnyitás új lapon","files.confirm.delete":"Biztosan törölni szeretnéd ezt a fájlt?","files.toast.deleted":"Fájl törölve","files.toast.deleteError":"Nem sikerült törölni a fájlt","files.sourcePlan":"Napi terv","files.sourceBooking":"Foglalás","files.attach":"Csatolás","files.pasteHint":"Képeket a vágólapról is beillesztheted (Ctrl+V)","files.trash":"Kuka","files.trashEmpty":"A kuka üres","files.emptyTrash":"Kuka ürítése","files.restore":"Visszaállítás","files.star":"Csillag","files.unstar":"Csillag eltávolítása","files.assign":"Hozzárendelés","files.assignTitle":"Fájl hozzárendelése","files.assignPlace":"Hely","files.assignBooking":"Foglalás","files.unassigned":"Nincs hozzárendelve","files.unlink":"Kapcsolat eltávolítása","files.toast.trashed":"Kukába helyezve","files.toast.restored":"Fájl visszaállítva","files.toast.trashEmptied":"Kuka kiürítve","files.toast.assigned":"Fájl hozzárendelve","files.toast.assignError":"Hozzárendelés sikertelen","files.toast.restoreError":"Visszaállítás sikertelen","files.confirm.permanentDelete":"Véglegesen törlöd ezt a fájlt? Ez nem vonható vissza.","files.confirm.emptyTrash":"Véglegesen törlöd az összes kukába helyezett fájlt? Ez nem vonható vissza.","files.noteLabel":"Megjegyzés","files.notePlaceholder":"Megjegyzés hozzáadása...","packing.title":"Csomagolási lista","packing.empty":"A csomagolási lista üres","packing.import":"Importálás","packing.importTitle":"Csomagolási lista importálása","packing.importHint":"Soronként egy tétel. Formátum: Kategória, Név, Súly g-ban (opcionális), Táska (opcionális), checked/unchecked (opcionális)","packing.importPlaceholder":`Tisztálkodás, Fogkefe Ruházat, Pólók, 200 Dokumentumok, Útlevél, , Kézipoggyász @@ -125,7 +125,7 @@ Elektronika, Töltő, 50, Bőrönd, checked`,"packing.importCsv":"CSV/TXT betöl Minden jelenlegi adat a mentéssel lesz helyettesítve.`,"backup.confirm.uploadRestore":`"{name}" mentésfájl feltöltése és visszaállítása? -Minden jelenlegi adat felülíródik.`,"backup.confirm.delete":'"{name}" mentés törlése?',"backup.toast.loadError":"Nem sikerült betölteni a mentéseket","backup.toast.created":"Mentés sikeresen létrehozva","backup.toast.createError":"Nem sikerült létrehozni a mentést","backup.toast.restored":"Mentés visszaállítva. Az oldal újratöltődik…","backup.toast.restoreError":"Nem sikerült visszaállítani","backup.toast.uploadError":"Nem sikerült feltölteni","backup.toast.deleted":"Mentés törölve","backup.toast.deleteError":"Nem sikerült törölni","backup.toast.downloadError":"Letöltés sikertelen","backup.toast.settingsSaved":"Automatikus mentés beállításai mentve","backup.toast.settingsError":"Nem sikerült menteni a beállításokat","backup.auto.title":"Automatikus mentés","backup.auto.subtitle":"Automatikus mentés ütemezés szerint","backup.auto.enable":"Automatikus mentés engedélyezése","backup.auto.enableHint":"A mentések automatikusan készülnek a választott ütemezés szerint","backup.auto.interval":"Időköz","backup.auto.hour":"Futtatás időpontja","backup.auto.hourHint":"Szerver helyi ideje ({format} formátum)","backup.auto.dayOfWeek":"A hét napja","backup.auto.dayOfMonth":"A hónap napja","backup.auto.dayOfMonthHint":"1–28-ra korlátozva az összes hónappal való kompatibilitás érdekében","backup.auto.scheduleSummary":"Ütemezés","backup.auto.summaryDaily":"Minden nap {hour}:00-kor","backup.auto.summaryWeekly":"Minden {day} {hour}:00-kor","backup.auto.summaryMonthly":"Minden hónap {day}. napján {hour}:00-kor","backup.auto.envLocked":"Docker","backup.auto.envLockedHint":"Az automatikus mentés Docker környezeti változókon keresztül van konfigurálva. A beállítások módosításához frissítsd a docker-compose.yml fájlt és indítsd újra a konténert.","backup.auto.copyEnv":"Docker env változók másolása","backup.auto.envCopied":"Docker env változók vágólapra másolva","backup.auto.keepLabel":"Régi mentések törlése ennyi idő után","backup.dow.sunday":"Va","backup.dow.monday":"Hé","backup.dow.tuesday":"Ke","backup.dow.wednesday":"Sze","backup.dow.thursday":"Csü","backup.dow.friday":"Pé","backup.dow.saturday":"Szo","backup.interval.hourly":"Óránként","backup.interval.daily":"Naponta","backup.interval.weekly":"Hetente","backup.interval.monthly":"Havonta","backup.keep.1day":"1 nap","backup.keep.3days":"3 nap","backup.keep.7days":"7 nap","backup.keep.14days":"14 nap","backup.keep.30days":"30 nap","backup.keep.forever":"Örökre megőrzés","photos.allDays":"Minden nap","photos.noPhotos":"Még nincsenek fotók","photos.uploadHint":"Töltsd fel az úti fotóidat","photos.clickToSelect":"vagy kattints a kiválasztáshoz","photos.linkPlace":"Hely társítása","photos.noPlace":"Nincs hely","photos.uploadN":"{n} fotó feltöltése","backup.restoreConfirmTitle":"Mentés visszaállítása?","backup.restoreWarning":"Minden jelenlegi adat (utazások, helyek, felhasználók, feltöltések) véglegesen lecserélődik a mentéssel. Ez a művelet nem vonható vissza.","backup.restoreTip":"Tipp: Készíts mentést a jelenlegi állapotról a visszaállítás előtt.","backup.restoreConfirm":"Igen, visszaállítás","pdf.travelPlan":"Utazási terv","pdf.planned":"Tervezett","pdf.costLabel":"Költség","pdf.preview":"PDF előnézet","pdf.saveAsPdf":"Mentés PDF-ként","planner.places":"Helyek","planner.bookings":"Foglalások","planner.packingList":"Csomagolási lista","planner.documents":"Dokumentumok","planner.dayPlan":"Napi terv","planner.reservations":"Foglalások","planner.minTwoPlaces":"Legalább 2 koordinátákkal rendelkező hely szükséges","planner.noGeoPlaces":"Nincsenek koordinátákkal rendelkező helyek","planner.routeCalculated":"Útvonal kiszámítva","planner.routeCalcFailed":"Nem sikerült kiszámítani az útvonalat","planner.routeError":"Hiba az útvonalszámítás során","planner.routeOptimized":"Útvonal optimalizálva","planner.reservationUpdated":"Foglalás frissítve","planner.reservationAdded":"Foglalás hozzáadva","planner.confirmDeleteReservation":"Foglalás törlése?","planner.reservationDeleted":"Foglalás törölve","planner.days":"nap","planner.allPlaces":"Összes hely","planner.totalPlaces":"Összesen {n} hely","planner.noDaysPlanned":"Még nincsenek napok tervezve","planner.editTrip":"Utazás szerkesztése →","planner.placeOne":"1 hely","planner.placeN":"{n} hely","planner.addNote":"Jegyzet hozzáadása","planner.noEntries":"Nincsenek bejegyzések erre a napra","planner.addPlace":"Hely/tevékenység hozzáadása","planner.addPlaceShort":"+ Hely/tevékenység hozzáadása","planner.resPending":"Foglalás függőben · ","planner.resConfirmed":"Foglalás megerősítve · ","planner.notePlaceholder":"Jegyzet…","planner.noteTimePlaceholder":"Időpont (opcionális)","planner.noteExamplePlaceholder":"pl. S3 14:30-kor a főpályaudvarról, komp a 7. mólóról, ebédszünet…","planner.totalCost":"Összköltség","planner.searchPlaces":"Helyek keresése…","planner.allCategories":"Összes kategória","planner.noPlacesFound":"Nem találhatók helyek","planner.addFirstPlace":"Első hely hozzáadása","planner.noReservations":"Nincsenek foglalások","planner.addFirstReservation":"Első foglalás hozzáadása","planner.new":"Új","planner.addToDay":"+ Nap","planner.calculating":"Számítás…","planner.route":"Útvonal","planner.optimize":"Optimalizálás","planner.openGoogleMaps":"Megnyitás a Google Térképben","planner.selectDayHint":"Válassz egy napot a bal oldali listából a napi terv megtekintéséhez","planner.noPlacesForDay":"Még nincsenek helyek erre a napra","planner.addPlacesLink":"Helyek hozzáadása →","planner.minTotal":"perc összesen","planner.noReservation":"Nincs foglalás","planner.removeFromDay":"Eltávolítás a napról","planner.addToThisDay":"Hozzáadás a naphoz","planner.overview":"Áttekintés","planner.noDays":"Még nincsenek napok","planner.editTripToAddDays":"Szerkeszd az utazást napok hozzáadásához","planner.dayCount":"{n} nap","planner.clickToUnlock":"Kattints a feloldáshoz","planner.keepPosition":"Pozíció megtartása útvonal-optimalizálás során","planner.dayDetails":"Nap részletei","planner.dayN":"{n}. nap","stats.countries":"Országok","stats.cities":"Városok","stats.trips":"Utazások","stats.places":"Helyek","stats.worldProgress":"Világ felfedezése","stats.visited":"meglátogatott","stats.remaining":"hátralévő","stats.visitedCountries":"Meglátogatott országok","day.precipProb":"Csapadékvalószínűség","day.precipitation":"Csapadék","day.wind":"Szél","day.sunrise":"Napkelte","day.sunset":"Napnyugta","day.hourlyForecast":"Óránkénti előrejelzés","day.climateHint":"Történelmi átlagok — valós előrejelzés a dátum előtti 16 napon belül érhető el.","day.noWeather":"Nem állnak rendelkezésre időjárási adatok. Adj hozzá egy helyet koordinátákkal.","day.overview":"Napi áttekintés","day.accommodation":"Szállás","day.addAccommodation":"Szállás hozzáadása","day.hotelDayRange":"Alkalmazás napokra","day.noPlacesForHotel":"Először adj hozzá helyeket az utazásodhoz","day.allDays":"Összes","day.checkIn":"Bejelentkezés","day.checkOut":"Kijelentkezés","day.confirmation":"Visszaigazolás","day.editAccommodation":"Szállás szerkesztése","day.reservations":"Foglalások","collab.tabs.chat":"Csevegés","collab.tabs.notes":"Jegyzetek","collab.tabs.polls":"Szavazások","collab.whatsNext.title":"Mi következik","collab.whatsNext.today":"Ma","collab.whatsNext.tomorrow":"Holnap","collab.whatsNext.empty":"Nincsenek közelgő tevékenységek","collab.whatsNext.until":"-ig","collab.whatsNext.emptyHint":"Az időponttal rendelkező tevékenységek itt jelennek meg","collab.chat.send":"Küldés","collab.chat.placeholder":"Üzenet írása...","collab.chat.empty":"Kezdd el a beszélgetést","collab.chat.emptyHint":"Az üzenetek az utazás minden tagjával meg vannak osztva","collab.chat.emptyDesc":"Oszd meg ötleteidet, terveidet és híreidet az utazócsoportoddal","collab.chat.today":"Ma","collab.chat.yesterday":"Tegnap","collab.chat.deletedMessage":"törölt egy üzenetet","collab.chat.reply":"Válasz","collab.chat.loadMore":"Korábbi üzenetek betöltése","collab.chat.justNow":"éppen most","collab.chat.minutesAgo":"{n} perce","collab.chat.hoursAgo":"{n} órája","collab.notes.title":"Jegyzetek","collab.notes.new":"Új jegyzet","collab.notes.empty":"Még nincsenek jegyzetek","collab.notes.emptyHint":"Rögzítsd az ötleteidet és terveidet","collab.notes.all":"Összes","collab.notes.titlePlaceholder":"Jegyzet címe","collab.notes.contentPlaceholder":"Írj valamit...","collab.notes.categoryPlaceholder":"Kategória","collab.notes.newCategory":"Új kategória...","collab.notes.category":"Kategória","collab.notes.noCategory":"Nincs kategória","collab.notes.color":"Szín","collab.notes.save":"Mentés","collab.notes.cancel":"Mégse","collab.notes.edit":"Szerkesztés","collab.notes.delete":"Törlés","collab.notes.pin":"Kitűzés","collab.notes.unpin":"Kitűzés eltávolítása","collab.notes.daysAgo":"{n} napja","collab.notes.categorySettings":"Kategóriák kezelése","collab.notes.create":"Létrehozás","collab.notes.website":"Weboldal","collab.notes.websitePlaceholder":"https://...","collab.notes.attachFiles":"Fájlok csatolása","collab.notes.noCategoriesYet":"Még nincsenek kategóriák","collab.notes.emptyDesc":"Hozz létre egy jegyzetet a kezdéshez","collab.polls.title":"Szavazások","collab.polls.new":"Új szavazás","collab.polls.empty":"Még nincsenek szavazások","collab.polls.emptyHint":"Kérdezd meg a csoportot és szavazzatok együtt","collab.polls.question":"Kérdés","collab.polls.questionPlaceholder":"Mit csináljunk?","collab.polls.addOption":"Opció hozzáadása","collab.polls.optionPlaceholder":"{n}. opció","collab.polls.create":"Szavazás létrehozása","collab.polls.close":"Lezárás","collab.polls.closed":"Lezárva","collab.polls.votes":"{n} szavazat","collab.polls.vote":"{n} szavazat","collab.polls.multipleChoice":"Többszörös választás","collab.polls.multiChoice":"Többszörös választás","collab.polls.deadline":"Határidő","collab.polls.option":"Opció","collab.polls.options":"Opciók","collab.polls.delete":"Törlés","collab.polls.closedSection":"Lezárva","memories.title":"Fotók","memories.notConnected":"Immich nincs csatlakoztatva","memories.notConnectedHint":"Csatlakoztasd az Immich példányodat a Beállításokban, hogy itt lásd az utazási fotóidat.","memories.noDates":"Adj hozzá dátumokat az utazáshoz a fotók betöltéséhez.","memories.noPhotos":"Nem találhatók fotók","memories.noPhotosHint":"Nem találhatók fotók az Immichben erre az utazási időszakra.","memories.photosFound":"fotó","memories.fromOthers":"másoktól","memories.sharePhotos":"Fotók megosztása","memories.sharing":"Megosztás","memories.reviewTitle":"Nézd át a fotóidat","memories.reviewHint":"Kattints a fotókra a megosztásból való kizáráshoz.","memories.shareCount":"{count} fotó megosztása","memories.immichUrl":"Immich szerver URL","memories.immichApiKey":"API kulcs","memories.testConnection":"Kapcsolat tesztelése","memories.testFirst":"Először teszteld a kapcsolatot","memories.connected":"Csatlakoztatva","memories.disconnected":"Nincs csatlakoztatva","memories.connectionSuccess":"Csatlakozva az Immichhez","memories.connectionError":"Nem sikerült csatlakozni az Immichhez","memories.saved":"Immich beállítások mentve","memories.addPhotos":"Fotók hozzáadása","memories.linkAlbum":"Album csatolása","memories.selectAlbum":"Immich album kiválasztása","memories.noAlbums":"Nem található album","memories.syncAlbum":"Album szinkronizálása","memories.unlinkAlbum":"Leválasztás","memories.photos":"fotó","memories.selectPhotos":"Fotók kiválasztása az Immichből","memories.selectHint":"Koppints a fotókra a kijelölésükhöz.","memories.selected":"kijelölve","memories.addSelected":"{count} fotó hozzáadása","memories.alreadyAdded":"Hozzáadva","memories.private":"Privát","memories.stopSharing":"Megosztás leállítása","memories.oldest":"Legrégebbi elöl","memories.newest":"Legújabb elöl","memories.allLocations":"Összes helyszín","memories.tripDates":"Utazás dátumai","memories.allPhotos":"Összes fotó","memories.confirmShareTitle":"Megosztás az utazótársakkal?","memories.confirmShareHint":"{count} fotó lesz látható az utazás összes tagja számára. Később egyenként is priváttá teheted őket.","memories.confirmShareButton":"Fotók megosztása","admin.tabs.permissions":"Jogosultságok","perm.title":"Jogosultsági beállítások","perm.subtitle":"Szabályozd, ki milyen műveleteket végezhet az alkalmazásban","perm.saved":"Jogosultsági beállítások mentve","perm.resetDefaults":"Alapértelmezések visszaállítása","perm.customized":"testreszabott","perm.level.admin":"Csak adminisztrátor","perm.level.tripOwner":"Utazás tulajdonosa","perm.level.tripMember":"Utazás tagjai","perm.level.everybody":"Mindenki","perm.cat.trip":"Utazáskezelés","perm.cat.members":"Tagkezelés","perm.cat.files":"Fájlok","perm.cat.content":"Tartalom és menetrend","perm.cat.extras":"Költségvetés, csomagolás és együttműködés","perm.action.trip_create":"Utazások létrehozása","perm.action.trip_edit":"Utazás részleteinek szerkesztése","perm.action.trip_delete":"Utazások törlése","perm.action.trip_archive":"Utazások archiválása / visszaállítása","perm.action.trip_cover_upload":"Borítókép feltöltése","perm.action.member_manage":"Tagok hozzáadása / eltávolítása","perm.action.file_upload":"Fájlok feltöltése","perm.action.file_edit":"Fájl metaadatok szerkesztése","perm.action.file_delete":"Fájlok törlése","perm.action.place_edit":"Helyek hozzáadása / szerkesztése / törlése","perm.action.day_edit":"Napok, jegyzetek és hozzárendelések szerkesztése","perm.action.reservation_edit":"Foglalások kezelése","perm.action.budget_edit":"Költségvetés kezelése","perm.action.packing_edit":"Csomagolási listák kezelése","perm.action.collab_edit":"Együttműködés (jegyzetek, szavazások, chat)","perm.action.share_manage":"Megosztási linkek kezelése","perm.actionHint.trip_create":"Ki hozhat létre új utazásokat","perm.actionHint.trip_edit":"Ki módosíthatja az utazás nevét, dátumait, leírását és pénznemét","perm.actionHint.trip_delete":"Ki törölhet véglegesen egy utazást","perm.actionHint.trip_archive":"Ki archiválhat vagy állíthat vissza egy utazást","perm.actionHint.trip_cover_upload":"Ki tölthet fel vagy módosíthat borítóképet","perm.actionHint.member_manage":"Ki hívhat meg vagy távolíthat el utazás tagokat","perm.actionHint.file_upload":"Ki tölthet fel fájlokat egy utazáshoz","perm.actionHint.file_edit":"Ki szerkesztheti a fájlok leírásait és linkjeit","perm.actionHint.file_delete":"Ki helyezhet fájlokat a kukába vagy törölheti véglegesen","perm.actionHint.place_edit":"Ki adhat hozzá, szerkeszthet vagy törölhet helyeket","perm.actionHint.day_edit":"Ki szerkesztheti a napokat, napi jegyzeteket és hely-hozzárendeléseket","perm.actionHint.reservation_edit":"Ki hozhat létre, szerkeszthet vagy törölhet foglalásokat","perm.actionHint.budget_edit":"Ki hozhat létre, szerkeszthet vagy törölhet költségvetési tételeket","perm.actionHint.packing_edit":"Ki kezelheti a csomagolási tételeket és táskákat","perm.actionHint.collab_edit":"Ki hozhat létre jegyzeteket, szavazásokat és küldhet üzeneteket","perm.actionHint.share_manage":"Ki hozhat létre vagy törölhet nyilvános megosztási linkeket"},xM={"common.save":"Salva","common.cancel":"Annulla","common.delete":"Elimina","common.edit":"Modifica","common.add":"Aggiungi","common.loading":"Caricamento...","common.import":"Importa","common.error":"Errore","common.back":"Indietro","common.all":"Tutti","common.close":"Chiudi","common.open":"Apri","common.upload":"Carica","common.search":"Cerca","common.confirm":"Conferma","common.ok":"OK","common.yes":"Sì","common.no":"No","common.or":"o","common.none":"Nessuno","common.date":"Data","common.rename":"Rinomina","common.name":"Nome","common.email":"Email","common.password":"Password","common.saving":"Salvataggio...","common.saved":"Salvato","trips.reminder":"Promemoria","trips.reminderNone":"Nessuno","trips.reminderDay":"giorno","trips.reminderDays":"giorni","trips.reminderCustom":"Personalizzato","trips.reminderDaysBefore":"giorni prima della partenza","trips.reminderDisabledHint":"I promemoria dei viaggi sono disabilitati. Abilitali in Admin > Impostazioni > Notifiche.","common.update":"Aggiorna","common.change":"Cambia","common.uploading":"Caricamento…","common.backToPlanning":"Torna al Programma","common.reset":"Reimposta","nav.trip":"Viaggio","nav.share":"Condividi","nav.settings":"Impostazioni","nav.admin":"Amministrazione","nav.logout":"Esci","nav.lightMode":"Modalità chiara","nav.darkMode":"Modalità scura","nav.autoMode":"Modalità automatica","nav.administrator":"Amministratore","dashboard.title":"I miei Viaggi","dashboard.subtitle.loading":"Caricamento viaggi...","dashboard.subtitle.trips":"{count} viaggi ({archived} archiviati)","dashboard.subtitle.empty":"Inizia il tuo primo viaggio","dashboard.subtitle.activeOne":"{count} viaggio attivo","dashboard.subtitle.activeMany":"{count} viaggi attivi","dashboard.subtitle.archivedSuffix":" · {count} archiviati","dashboard.newTrip":"Nuovo Viaggio","dashboard.gridView":"Vista a griglia","dashboard.listView":"Vista a lista","dashboard.currency":"Valuta","dashboard.timezone":"Fusi orari","dashboard.localTime":"Locale","dashboard.timezoneCustomTitle":"Fuso orario personalizzato","dashboard.timezoneCustomLabelPlaceholder":"Etichetta (opzionale)","dashboard.timezoneCustomTzPlaceholder":"es. Europe/Rome","dashboard.timezoneCustomAdd":"Aggiungi","dashboard.timezoneCustomErrorEmpty":"Inserisci un identificatore di fuso orario","dashboard.timezoneCustomErrorInvalid":"Fuso orario non valido. Usa formati come Europe/Rome","dashboard.timezoneCustomErrorDuplicate":"Già aggiunto","dashboard.emptyTitle":"Ancora nessun viaggio","dashboard.emptyText":"Crea il tuo primo viaggio e inizia a programmare!","dashboard.emptyButton":"Crea il primo viaggio","dashboard.nextTrip":"Prossimo Viaggio","dashboard.shared":"Condiviso","dashboard.sharedBy":"Condiviso da {name}","dashboard.days":"Giorni","dashboard.places":"Luoghi","dashboard.archive":"Archivia","dashboard.restore":"Ripristina","dashboard.archived":"Archiviati","dashboard.status.ongoing":"In corso","dashboard.status.today":"Oggi","dashboard.status.tomorrow":"Domani","dashboard.status.past":"Passato","dashboard.status.daysLeft":"-{count} giorni","dashboard.toast.loadError":"Impossibile caricare i viaggi","dashboard.toast.created":"Viaggio creato con successo!","dashboard.toast.createError":"Impossibile creare il viaggio","dashboard.toast.updated":"Viaggio aggiornato!","dashboard.toast.updateError":"Impossibile aggiornare il viaggio","dashboard.toast.deleted":"Viaggio eliminato","dashboard.toast.deleteError":"Impossibile eliminare il viaggio","dashboard.toast.archived":"Viaggio archiviato","dashboard.toast.archiveError":"Impossibile archiviare il viaggio","dashboard.toast.restored":"Viaggio ripristinato","dashboard.toast.restoreError":"Impossibile ripristinare il viaggio","dashboard.confirm.delete":'Eliminare il viaggio "{title}"? Tutti i luoghi e i programmi verranno eliminati in modo permanente.',"dashboard.editTrip":"Modifica Viaggio","dashboard.createTrip":"Crea Nuovo Viaggio","dashboard.tripTitle":"Titolo","dashboard.tripTitlePlaceholder":"es. Estate in Giappone","dashboard.tripDescription":"Descrizione","dashboard.tripDescriptionPlaceholder":"Di cosa tratta questo viaggio?","dashboard.startDate":"Data di inizio","dashboard.endDate":"Data di fine","dashboard.noDateHint":"Nessuna data impostata — verranno creati 7 giorni predefiniti. Puoi cambiarlo in qualsiasi momento.","dashboard.coverImage":"Immagine di copertina","dashboard.addCoverImage":"Aggiungi immagine di copertina (o trascinala qui)","dashboard.addMembers":"Compagni di viaggio","dashboard.addMember":"Aggiungi membro","dashboard.coverSaved":"Immagine di copertina salvata","dashboard.coverUploadError":"Impossibile caricare","dashboard.coverRemoveError":"Impossibile rimuovere","dashboard.titleRequired":"Il titolo è obbligatorio","dashboard.endDateError":"La data di fine deve essere successiva alla data di inizio","settings.title":"Impostazioni","settings.subtitle":"Configura le tue impostazioni personali","settings.map":"Mappa","settings.mapTemplate":"Modello Mappa","settings.mapTemplatePlaceholder.select":"Seleziona modello...","settings.mapDefaultHint":"Lascia vuoto per OpenStreetMap (predefinito)","settings.mapTemplatePlaceholder":"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png","settings.mapHint":"Modello URL per i tile della mappa","settings.latitude":"Latitudine","settings.longitude":"Longitudine","settings.saveMap":"Salva Mappa","settings.apiKeys":"Chiavi API","settings.mapsKey":"Chiave API Google Maps","settings.mapsKeyHint":"Per la ricerca dei luoghi. Richiede Places API (New). Ottienila su console.cloud.google.com","settings.weatherKey":"Chiave API OpenWeatherMap","settings.weatherKeyHint":"Per i dati meteo. Gratuita su openweathermap.org/api","settings.keyPlaceholder":"Inserisci la chiave...","settings.configured":"Configurata","settings.saveKeys":"Salva Chiavi","settings.display":"Visualizzazione","settings.colorMode":"Modalità Colore","settings.light":"Chiara","settings.dark":"Scura","settings.auto":"Automatica","settings.language":"Lingua","settings.temperature":"Unità di Temperatura","settings.timeFormat":"Formato Ora","settings.routeCalculation":"Calcolo Percorso","settings.blurBookingCodes":"Nascondi codici di prenotazione","settings.notifications":"Notifiche","settings.notifyTripInvite":"Inviti di viaggio","settings.notifyBookingChange":"Modifiche alle prenotazioni","settings.notifyTripReminder":"Promemoria di viaggio","settings.notifyVacayInvite":"Inviti fusione Vacay","settings.notifyPhotosShared":"Foto condivise (Immich)","settings.notifyCollabMessage":"Messaggi chat (Collab)","settings.notifyPackingTagged":"Lista valigia: assegnazioni","settings.notifyWebhook":"Notifiche webhook","settings.notificationsDisabled":"Le notifiche non sono configurate. Chiedi a un amministratore di abilitare le notifiche e-mail o webhook.","settings.notificationsActive":"Canale attivo","settings.notificationsManagedByAdmin":"Gli eventi di notifica sono configurati dall'amministratore.","settings.on":"On","settings.off":"Off","settings.mcp.title":"Configurazione MCP","settings.mcp.endpoint":"Endpoint MCP","settings.mcp.clientConfig":"Configurazione client","settings.mcp.clientConfigHint":"Sostituisci con un token API dalla lista sottostante. Il percorso di npx potrebbe dover essere adattato per il tuo sistema (es. C:\\PROGRA~1\\nodejs\\npx.cmd su Windows).","settings.mcp.copy":"Copia","settings.mcp.copied":"Copiato!","settings.mcp.apiTokens":"Token API","settings.mcp.createToken":"Crea nuovo token","settings.mcp.noTokens":"Nessun token ancora. Creane uno per connettere i client MCP.","settings.mcp.tokenCreatedAt":"Creato","settings.mcp.tokenUsedAt":"Utilizzato","settings.mcp.deleteTokenTitle":"Elimina token","settings.mcp.deleteTokenMessage":"Questo token smetterà di funzionare immediatamente. Qualsiasi client MCP che lo utilizza perderà l'accesso.","settings.mcp.modal.createTitle":"Crea token API","settings.mcp.modal.tokenName":"Nome del token","settings.mcp.modal.tokenNamePlaceholder":"es. Claude Desktop, Laptop di lavoro","settings.mcp.modal.creating":"Creazione…","settings.mcp.modal.create":"Crea token","settings.mcp.modal.createdTitle":"Token creato","settings.mcp.modal.createdWarning":"Questo token verrà mostrato solo una volta. Copialo e salvalo ora — non può essere recuperato.","settings.mcp.modal.done":"Fatto","settings.mcp.toast.created":"Token creato","settings.mcp.toast.createError":"Impossibile creare il token","settings.mcp.toast.deleted":"Token eliminato","settings.mcp.toast.deleteError":"Impossibile eliminare il token","settings.account":"Account","settings.username":"Username","settings.email":"Email","settings.role":"Ruolo","settings.roleAdmin":"Amministratore","settings.oidcLinked":"Collegato con","settings.changePassword":"Cambia Password","settings.currentPassword":"Password attuale","settings.currentPasswordRequired":"La password attuale è obbligatoria","settings.newPassword":"Nuova password","settings.confirmPassword":"Conferma nuova password","settings.updatePassword":"Aggiorna password","settings.passwordRequired":"Inserisci la password attuale e quella nuova","settings.passwordTooShort":"La password deve contenere almeno 8 caratteri","settings.passwordMismatch":"Le password non corrispondono","settings.passwordWeak":"La password deve contenere lettere maiuscole, minuscole, un numero e un carattere speciale","settings.passwordChanged":"Password cambiata con successo","settings.deleteAccount":"Elimina account","settings.deleteAccountTitle":"Eliminare il tuo account?","settings.deleteAccountWarning":"Il tuo account e tutti i tuoi viaggi, luoghi e file verranno eliminati in modo permanente. Questa azione non può essere annullata.","settings.deleteAccountConfirm":"Elimina in modo permanente","settings.deleteBlockedTitle":"Eliminazione impossibile","settings.deleteBlockedMessage":"Sei l'unico amministratore. Promuovi un altro utente ad amministratore prima di eliminare il tuo account.","settings.roleUser":"Utente","settings.saveProfile":"Salva Profillo","settings.toast.mapSaved":"Impostazioni mappa salvate","settings.toast.keysSaved":"Chiavi API salvate","settings.toast.displaySaved":"Impostazioni di visualizzazione salvate","settings.toast.profileSaved":"Profilo salvato","settings.uploadAvatar":"Carica Immagine del Profilo","settings.removeAvatar":"Rimuovi Immagine del Profilo","settings.avatarUploaded":"Immagine del profilo aggiornata","settings.avatarRemoved":"Immagine del profilo rimossa","settings.avatarError":"Impossibile caricare","settings.mfa.title":"Autenticazione a due fattori (2FA)","settings.mfa.description":"Aggiunge un secondo passaggio quando accedi con email e password. Usa un'app authenticator (Google Authenticator, Authy, ecc.).","settings.mfa.requiredByPolicy":"L'amministratore richiede l'autenticazione a due fattori. Configura un'app authenticator qui sotto prima di continuare.","settings.mfa.backupTitle":"Codici di backup","settings.mfa.backupDescription":"Usa questi codici monouso se perdi l'accesso alla tua app authenticator.","settings.mfa.backupWarning":"Salvali adesso. Ogni codice può essere usato una sola volta.","settings.mfa.backupCopy":"Copia codici","settings.mfa.backupDownload":"Scarica TXT","settings.mfa.backupPrint":"Stampa / PDF","settings.mfa.backupCopied":"Codici di backup copiati","settings.mfa.enabled":"La 2FA è abilitata sul tuo account.","settings.mfa.disabled":"La 2FA non è abilitata.","settings.mfa.setup":"Configura authenticator","settings.mfa.scanQr":"Scansiona questo codice QR con la tua app, o inserisci il segreto manualmente.","settings.mfa.secretLabel":"Chiave segreta (inserimento manuale)","settings.mfa.codePlaceholder":"Codice a 6 cifre","settings.mfa.enable":"Abilita 2FA","settings.mfa.cancelSetup":"Annulla","settings.mfa.disableTitle":"Disabilita 2FA","settings.mfa.disableHint":"Inserisci la password del tuo account e un codice attuale dal tuo authenticator.","settings.mfa.disable":"Disabilita 2FA","settings.mfa.toastEnabled":"Autenticazione a due fattori abilitata","settings.mfa.toastDisabled":"Autenticazione a due fattori disabilitata","settings.mfa.demoBlocked":"Non disponibile in modalità demo","settings.mustChangePassword":"Devi cambiare la password prima di continuare. Imposta una nuova password qui sotto.","admin.notifications.title":"Notifiche","admin.notifications.hint":"Scegli un canale di notifica. Solo uno può essere attivo alla volta.","admin.notifications.none":"Disattivato","admin.notifications.email":"E-mail (SMTP)","admin.notifications.webhook":"Webhook","admin.notifications.events":"Eventi di notifica","admin.notifications.eventsHint":"Scegli quali eventi attivano le notifiche per tutti gli utenti.","admin.notifications.configureFirst":"Configura prima le impostazioni SMTP o webhook qui sotto, poi abilita gli eventi.","admin.notifications.save":"Salva impostazioni notifiche","admin.notifications.saved":"Impostazioni notifiche salvate","admin.notifications.testWebhook":"Invia webhook di test","admin.notifications.testWebhookSuccess":"Webhook di test inviato con successo","admin.notifications.testWebhookFailed":"Invio webhook di test fallito","admin.smtp.title":"Email e notifiche","admin.smtp.hint":"Configurazione SMTP per l'invio delle notifiche via e-mail.","admin.smtp.testButton":"Invia email di prova","admin.webhook.hint":"Invia notifiche a un webhook esterno (Discord, Slack, ecc.).","admin.smtp.testSuccess":"Email di prova inviata con successo","admin.smtp.testFailed":"Invio email di prova fallito","dayplan.icsTooltip":"Esporta calendario (ICS)","share.linkTitle":"Link pubblico","share.linkHint":"Crea un link che chiunque può usare per visualizzare questo viaggio senza accedere. Solo lettura — nessuna modifica possibile.","share.createLink":"Crea link","share.deleteLink":"Elimina link","share.createError":"Impossibile creare il link","common.copy":"Copia","common.copied":"Copiato","share.permMap":"Mappa e programma","share.permBookings":"Prenotazioni","share.permPacking":"Valigia","shared.expired":"Link scaduto o non valido","shared.expiredHint":"Questo link di viaggio condiviso non è più attivo.","shared.readOnly":"Vista in sola lettura","shared.tabPlan":"Programma","shared.tabBookings":"Prenotazioni","shared.tabPacking":"Valigia","shared.tabBudget":"Budget","shared.tabChat":"Chat","shared.days":"giorni","shared.places":"luoghi","shared.other":"Altro","shared.totalBudget":"Budget totale","shared.messages":"messaggi","shared.sharedVia":"Condiviso tramite","shared.confirmed":"Confermato","shared.pending":"In attesa","share.permBudget":"Budget","share.permCollab":"Chat","login.error":"Accesso fallito. Controlla le tue credenziali.","login.tagline":`I tuoi viaggi. +Minden jelenlegi adat felülíródik.`,"backup.confirm.delete":'"{name}" mentés törlése?',"backup.toast.loadError":"Nem sikerült betölteni a mentéseket","backup.toast.created":"Mentés sikeresen létrehozva","backup.toast.createError":"Nem sikerült létrehozni a mentést","backup.toast.restored":"Mentés visszaállítva. Az oldal újratöltődik…","backup.toast.restoreError":"Nem sikerült visszaállítani","backup.toast.uploadError":"Nem sikerült feltölteni","backup.toast.deleted":"Mentés törölve","backup.toast.deleteError":"Nem sikerült törölni","backup.toast.downloadError":"Letöltés sikertelen","backup.toast.settingsSaved":"Automatikus mentés beállításai mentve","backup.toast.settingsError":"Nem sikerült menteni a beállításokat","backup.auto.title":"Automatikus mentés","backup.auto.subtitle":"Automatikus mentés ütemezés szerint","backup.auto.enable":"Automatikus mentés engedélyezése","backup.auto.enableHint":"A mentések automatikusan készülnek a választott ütemezés szerint","backup.auto.interval":"Időköz","backup.auto.hour":"Futtatás időpontja","backup.auto.hourHint":"Szerver helyi ideje ({format} formátum)","backup.auto.dayOfWeek":"A hét napja","backup.auto.dayOfMonth":"A hónap napja","backup.auto.dayOfMonthHint":"1–28-ra korlátozva az összes hónappal való kompatibilitás érdekében","backup.auto.scheduleSummary":"Ütemezés","backup.auto.summaryDaily":"Minden nap {hour}:00-kor","backup.auto.summaryWeekly":"Minden {day} {hour}:00-kor","backup.auto.summaryMonthly":"Minden hónap {day}. napján {hour}:00-kor","backup.auto.envLocked":"Docker","backup.auto.envLockedHint":"Az automatikus mentés Docker környezeti változókon keresztül van konfigurálva. A beállítások módosításához frissítsd a docker-compose.yml fájlt és indítsd újra a konténert.","backup.auto.copyEnv":"Docker env változók másolása","backup.auto.envCopied":"Docker env változók vágólapra másolva","backup.auto.keepLabel":"Régi mentések törlése ennyi idő után","backup.dow.sunday":"Va","backup.dow.monday":"Hé","backup.dow.tuesday":"Ke","backup.dow.wednesday":"Sze","backup.dow.thursday":"Csü","backup.dow.friday":"Pé","backup.dow.saturday":"Szo","backup.interval.hourly":"Óránként","backup.interval.daily":"Naponta","backup.interval.weekly":"Hetente","backup.interval.monthly":"Havonta","backup.keep.1day":"1 nap","backup.keep.3days":"3 nap","backup.keep.7days":"7 nap","backup.keep.14days":"14 nap","backup.keep.30days":"30 nap","backup.keep.forever":"Örökre megőrzés","photos.allDays":"Minden nap","photos.noPhotos":"Még nincsenek fotók","photos.uploadHint":"Töltsd fel az úti fotóidat","photos.clickToSelect":"vagy kattints a kiválasztáshoz","photos.linkPlace":"Hely társítása","photos.noPlace":"Nincs hely","photos.uploadN":"{n} fotó feltöltése","backup.restoreConfirmTitle":"Mentés visszaállítása?","backup.restoreWarning":"Minden jelenlegi adat (utazások, helyek, felhasználók, feltöltések) véglegesen lecserélődik a mentéssel. Ez a művelet nem vonható vissza.","backup.restoreTip":"Tipp: Készíts mentést a jelenlegi állapotról a visszaállítás előtt.","backup.restoreConfirm":"Igen, visszaállítás","pdf.travelPlan":"Utazási terv","pdf.planned":"Tervezett","pdf.costLabel":"Költség","pdf.preview":"PDF előnézet","pdf.saveAsPdf":"Mentés PDF-ként","planner.places":"Helyek","planner.bookings":"Foglalások","planner.packingList":"Csomagolási lista","planner.documents":"Dokumentumok","planner.dayPlan":"Napi terv","planner.reservations":"Foglalások","planner.minTwoPlaces":"Legalább 2 koordinátákkal rendelkező hely szükséges","planner.noGeoPlaces":"Nincsenek koordinátákkal rendelkező helyek","planner.routeCalculated":"Útvonal kiszámítva","planner.routeCalcFailed":"Nem sikerült kiszámítani az útvonalat","planner.routeError":"Hiba az útvonalszámítás során","planner.routeOptimized":"Útvonal optimalizálva","planner.reservationUpdated":"Foglalás frissítve","planner.reservationAdded":"Foglalás hozzáadva","planner.confirmDeleteReservation":"Foglalás törlése?","planner.reservationDeleted":"Foglalás törölve","planner.days":"nap","planner.allPlaces":"Összes hely","planner.totalPlaces":"Összesen {n} hely","planner.noDaysPlanned":"Még nincsenek napok tervezve","planner.editTrip":"Utazás szerkesztése →","planner.placeOne":"1 hely","planner.placeN":"{n} hely","planner.addNote":"Jegyzet hozzáadása","planner.noEntries":"Nincsenek bejegyzések erre a napra","planner.addPlace":"Hely/tevékenység hozzáadása","planner.addPlaceShort":"+ Hely/tevékenység hozzáadása","planner.resPending":"Foglalás függőben · ","planner.resConfirmed":"Foglalás megerősítve · ","planner.notePlaceholder":"Jegyzet…","planner.noteTimePlaceholder":"Időpont (opcionális)","planner.noteExamplePlaceholder":"pl. S3 14:30-kor a főpályaudvarról, komp a 7. mólóról, ebédszünet…","planner.totalCost":"Összköltség","planner.searchPlaces":"Helyek keresése…","planner.allCategories":"Összes kategória","planner.noPlacesFound":"Nem találhatók helyek","planner.addFirstPlace":"Első hely hozzáadása","planner.noReservations":"Nincsenek foglalások","planner.addFirstReservation":"Első foglalás hozzáadása","planner.new":"Új","planner.addToDay":"+ Nap","planner.calculating":"Számítás…","planner.route":"Útvonal","planner.optimize":"Optimalizálás","planner.openGoogleMaps":"Megnyitás a Google Térképben","planner.selectDayHint":"Válassz egy napot a bal oldali listából a napi terv megtekintéséhez","planner.noPlacesForDay":"Még nincsenek helyek erre a napra","planner.addPlacesLink":"Helyek hozzáadása →","planner.minTotal":"perc összesen","planner.noReservation":"Nincs foglalás","planner.removeFromDay":"Eltávolítás a napról","planner.addToThisDay":"Hozzáadás a naphoz","planner.overview":"Áttekintés","planner.noDays":"Még nincsenek napok","planner.editTripToAddDays":"Szerkeszd az utazást napok hozzáadásához","planner.dayCount":"{n} nap","planner.clickToUnlock":"Kattints a feloldáshoz","planner.keepPosition":"Pozíció megtartása útvonal-optimalizálás során","planner.dayDetails":"Nap részletei","planner.dayN":"{n}. nap","stats.countries":"Országok","stats.cities":"Városok","stats.trips":"Utazások","stats.places":"Helyek","stats.worldProgress":"Világ felfedezése","stats.visited":"meglátogatott","stats.remaining":"hátralévő","stats.visitedCountries":"Meglátogatott országok","day.precipProb":"Csapadékvalószínűség","day.precipitation":"Csapadék","day.wind":"Szél","day.sunrise":"Napkelte","day.sunset":"Napnyugta","day.hourlyForecast":"Óránkénti előrejelzés","day.climateHint":"Történelmi átlagok — valós előrejelzés a dátum előtti 16 napon belül érhető el.","day.noWeather":"Nem állnak rendelkezésre időjárási adatok. Adj hozzá egy helyet koordinátákkal.","day.overview":"Napi áttekintés","day.accommodation":"Szállás","day.addAccommodation":"Szállás hozzáadása","day.hotelDayRange":"Alkalmazás napokra","day.noPlacesForHotel":"Először adj hozzá helyeket az utazásodhoz","day.allDays":"Összes","day.checkIn":"Bejelentkezés","day.checkOut":"Kijelentkezés","day.confirmation":"Visszaigazolás","day.editAccommodation":"Szállás szerkesztése","day.reservations":"Foglalások","collab.tabs.chat":"Csevegés","collab.tabs.notes":"Jegyzetek","collab.tabs.polls":"Szavazások","collab.whatsNext.title":"Mi következik","collab.whatsNext.today":"Ma","collab.whatsNext.tomorrow":"Holnap","collab.whatsNext.empty":"Nincsenek közelgő tevékenységek","collab.whatsNext.until":"-ig","collab.whatsNext.emptyHint":"Az időponttal rendelkező tevékenységek itt jelennek meg","collab.chat.send":"Küldés","collab.chat.placeholder":"Üzenet írása...","collab.chat.empty":"Kezdd el a beszélgetést","collab.chat.emptyHint":"Az üzenetek az utazás minden tagjával meg vannak osztva","collab.chat.emptyDesc":"Oszd meg ötleteidet, terveidet és híreidet az utazócsoportoddal","collab.chat.today":"Ma","collab.chat.yesterday":"Tegnap","collab.chat.deletedMessage":"törölt egy üzenetet","collab.chat.reply":"Válasz","collab.chat.loadMore":"Korábbi üzenetek betöltése","collab.chat.justNow":"éppen most","collab.chat.minutesAgo":"{n} perce","collab.chat.hoursAgo":"{n} órája","collab.notes.title":"Jegyzetek","collab.notes.new":"Új jegyzet","collab.notes.empty":"Még nincsenek jegyzetek","collab.notes.emptyHint":"Rögzítsd az ötleteidet és terveidet","collab.notes.all":"Összes","collab.notes.titlePlaceholder":"Jegyzet címe","collab.notes.contentPlaceholder":"Írj valamit...","collab.notes.categoryPlaceholder":"Kategória","collab.notes.newCategory":"Új kategória...","collab.notes.category":"Kategória","collab.notes.noCategory":"Nincs kategória","collab.notes.color":"Szín","collab.notes.save":"Mentés","collab.notes.cancel":"Mégse","collab.notes.edit":"Szerkesztés","collab.notes.delete":"Törlés","collab.notes.pin":"Kitűzés","collab.notes.unpin":"Kitűzés eltávolítása","collab.notes.daysAgo":"{n} napja","collab.notes.categorySettings":"Kategóriák kezelése","collab.notes.create":"Létrehozás","collab.notes.website":"Weboldal","collab.notes.websitePlaceholder":"https://...","collab.notes.attachFiles":"Fájlok csatolása","collab.notes.noCategoriesYet":"Még nincsenek kategóriák","collab.notes.emptyDesc":"Hozz létre egy jegyzetet a kezdéshez","collab.polls.title":"Szavazások","collab.polls.new":"Új szavazás","collab.polls.empty":"Még nincsenek szavazások","collab.polls.emptyHint":"Kérdezd meg a csoportot és szavazzatok együtt","collab.polls.question":"Kérdés","collab.polls.questionPlaceholder":"Mit csináljunk?","collab.polls.addOption":"Opció hozzáadása","collab.polls.optionPlaceholder":"{n}. opció","collab.polls.create":"Szavazás létrehozása","collab.polls.close":"Lezárás","collab.polls.closed":"Lezárva","collab.polls.votes":"{n} szavazat","collab.polls.vote":"{n} szavazat","collab.polls.multipleChoice":"Többszörös választás","collab.polls.multiChoice":"Többszörös választás","collab.polls.deadline":"Határidő","collab.polls.option":"Opció","collab.polls.options":"Opciók","collab.polls.delete":"Törlés","collab.polls.closedSection":"Lezárva","memories.title":"Fotók","memories.notConnected":"Immich nincs csatlakoztatva","memories.notConnectedHint":"Csatlakoztasd az Immich példányodat a Beállításokban, hogy itt lásd az utazási fotóidat.","memories.noDates":"Adj hozzá dátumokat az utazáshoz a fotók betöltéséhez.","memories.noPhotos":"Nem találhatók fotók","memories.noPhotosHint":"Nem találhatók fotók az Immichben erre az utazási időszakra.","memories.photosFound":"fotó","memories.fromOthers":"másoktól","memories.sharePhotos":"Fotók megosztása","memories.sharing":"Megosztás","memories.reviewTitle":"Nézd át a fotóidat","memories.reviewHint":"Kattints a fotókra a megosztásból való kizáráshoz.","memories.shareCount":"{count} fotó megosztása","memories.immichUrl":"Immich szerver URL","memories.immichApiKey":"API kulcs","memories.testConnection":"Kapcsolat tesztelése","memories.testFirst":"Először teszteld a kapcsolatot","memories.connected":"Csatlakoztatva","memories.disconnected":"Nincs csatlakoztatva","memories.connectionSuccess":"Csatlakozva az Immichhez","memories.connectionError":"Nem sikerült csatlakozni az Immichhez","memories.saved":"Immich beállítások mentve","memories.addPhotos":"Fotók hozzáadása","memories.linkAlbum":"Album csatolása","memories.selectAlbum":"Immich album kiválasztása","memories.noAlbums":"Nem található album","memories.syncAlbum":"Album szinkronizálása","memories.unlinkAlbum":"Leválasztás","memories.photos":"fotó","memories.selectPhotos":"Fotók kiválasztása az Immichből","memories.selectHint":"Koppints a fotókra a kijelölésükhöz.","memories.selected":"kijelölve","memories.addSelected":"{count} fotó hozzáadása","memories.alreadyAdded":"Hozzáadva","memories.private":"Privát","memories.stopSharing":"Megosztás leállítása","memories.oldest":"Legrégebbi elöl","memories.newest":"Legújabb elöl","memories.allLocations":"Összes helyszín","memories.tripDates":"Utazás dátumai","memories.allPhotos":"Összes fotó","memories.confirmShareTitle":"Megosztás az utazótársakkal?","memories.confirmShareHint":"{count} fotó lesz látható az utazás összes tagja számára. Később egyenként is priváttá teheted őket.","memories.confirmShareButton":"Fotók megosztása","admin.tabs.permissions":"Jogosultságok","perm.title":"Jogosultsági beállítások","perm.subtitle":"Szabályozd, ki milyen műveleteket végezhet az alkalmazásban","perm.saved":"Jogosultsági beállítások mentve","perm.resetDefaults":"Alapértelmezések visszaállítása","perm.customized":"testreszabott","perm.level.admin":"Csak adminisztrátor","perm.level.tripOwner":"Utazás tulajdonosa","perm.level.tripMember":"Utazás tagjai","perm.level.everybody":"Mindenki","perm.cat.trip":"Utazáskezelés","perm.cat.members":"Tagkezelés","perm.cat.files":"Fájlok","perm.cat.content":"Tartalom és menetrend","perm.cat.extras":"Költségvetés, csomagolás és együttműködés","perm.action.trip_create":"Utazások létrehozása","perm.action.trip_edit":"Utazás részleteinek szerkesztése","perm.action.trip_delete":"Utazások törlése","perm.action.trip_archive":"Utazások archiválása / visszaállítása","perm.action.trip_cover_upload":"Borítókép feltöltése","perm.action.member_manage":"Tagok hozzáadása / eltávolítása","perm.action.file_upload":"Fájlok feltöltése","perm.action.file_edit":"Fájl metaadatok szerkesztése","perm.action.file_delete":"Fájlok törlése","perm.action.place_edit":"Helyek hozzáadása / szerkesztése / törlése","perm.action.day_edit":"Napok, jegyzetek és hozzárendelések szerkesztése","perm.action.reservation_edit":"Foglalások kezelése","perm.action.budget_edit":"Költségvetés kezelése","perm.action.packing_edit":"Csomagolási listák kezelése","perm.action.collab_edit":"Együttműködés (jegyzetek, szavazások, chat)","perm.action.share_manage":"Megosztási linkek kezelése","perm.actionHint.trip_create":"Ki hozhat létre új utazásokat","perm.actionHint.trip_edit":"Ki módosíthatja az utazás nevét, dátumait, leírását és pénznemét","perm.actionHint.trip_delete":"Ki törölhet véglegesen egy utazást","perm.actionHint.trip_archive":"Ki archiválhat vagy állíthat vissza egy utazást","perm.actionHint.trip_cover_upload":"Ki tölthet fel vagy módosíthat borítóképet","perm.actionHint.member_manage":"Ki hívhat meg vagy távolíthat el utazás tagokat","perm.actionHint.file_upload":"Ki tölthet fel fájlokat egy utazáshoz","perm.actionHint.file_edit":"Ki szerkesztheti a fájlok leírásait és linkjeit","perm.actionHint.file_delete":"Ki helyezhet fájlokat a kukába vagy törölheti véglegesen","perm.actionHint.place_edit":"Ki adhat hozzá, szerkeszthet vagy törölhet helyeket","perm.actionHint.day_edit":"Ki szerkesztheti a napokat, napi jegyzeteket és hely-hozzárendeléseket","perm.actionHint.reservation_edit":"Ki hozhat létre, szerkeszthet vagy törölhet foglalásokat","perm.actionHint.budget_edit":"Ki hozhat létre, szerkeszthet vagy törölhet költségvetési tételeket","perm.actionHint.packing_edit":"Ki kezelheti a csomagolási tételeket és táskákat","perm.actionHint.collab_edit":"Ki hozhat létre jegyzeteket, szavazásokat és küldhet üzeneteket","perm.actionHint.share_manage":"Ki hozhat létre vagy törölhet nyilvános megosztási linkeket"},kM={"common.save":"Salva","common.cancel":"Annulla","common.delete":"Elimina","common.edit":"Modifica","common.add":"Aggiungi","common.loading":"Caricamento...","common.import":"Importa","common.error":"Errore","common.back":"Indietro","common.all":"Tutti","common.close":"Chiudi","common.open":"Apri","common.upload":"Carica","common.search":"Cerca","common.confirm":"Conferma","common.ok":"OK","common.yes":"Sì","common.no":"No","common.or":"o","common.none":"Nessuno","common.date":"Data","common.rename":"Rinomina","common.name":"Nome","common.email":"Email","common.password":"Password","common.saving":"Salvataggio...","common.saved":"Salvato","trips.reminder":"Promemoria","trips.reminderNone":"Nessuno","trips.reminderDay":"giorno","trips.reminderDays":"giorni","trips.reminderCustom":"Personalizzato","trips.reminderDaysBefore":"giorni prima della partenza","trips.reminderDisabledHint":"I promemoria dei viaggi sono disabilitati. Abilitali in Admin > Impostazioni > Notifiche.","common.update":"Aggiorna","common.change":"Cambia","common.uploading":"Caricamento…","common.backToPlanning":"Torna al Programma","common.reset":"Reimposta","nav.trip":"Viaggio","nav.share":"Condividi","nav.settings":"Impostazioni","nav.admin":"Amministrazione","nav.logout":"Esci","nav.lightMode":"Modalità chiara","nav.darkMode":"Modalità scura","nav.autoMode":"Modalità automatica","nav.administrator":"Amministratore","dashboard.title":"I miei Viaggi","dashboard.subtitle.loading":"Caricamento viaggi...","dashboard.subtitle.trips":"{count} viaggi ({archived} archiviati)","dashboard.subtitle.empty":"Inizia il tuo primo viaggio","dashboard.subtitle.activeOne":"{count} viaggio attivo","dashboard.subtitle.activeMany":"{count} viaggi attivi","dashboard.subtitle.archivedSuffix":" · {count} archiviati","dashboard.newTrip":"Nuovo Viaggio","dashboard.gridView":"Vista a griglia","dashboard.listView":"Vista a lista","dashboard.currency":"Valuta","dashboard.timezone":"Fusi orari","dashboard.localTime":"Locale","dashboard.timezoneCustomTitle":"Fuso orario personalizzato","dashboard.timezoneCustomLabelPlaceholder":"Etichetta (opzionale)","dashboard.timezoneCustomTzPlaceholder":"es. Europe/Rome","dashboard.timezoneCustomAdd":"Aggiungi","dashboard.timezoneCustomErrorEmpty":"Inserisci un identificatore di fuso orario","dashboard.timezoneCustomErrorInvalid":"Fuso orario non valido. Usa formati come Europe/Rome","dashboard.timezoneCustomErrorDuplicate":"Già aggiunto","dashboard.emptyTitle":"Ancora nessun viaggio","dashboard.emptyText":"Crea il tuo primo viaggio e inizia a programmare!","dashboard.emptyButton":"Crea il primo viaggio","dashboard.nextTrip":"Prossimo Viaggio","dashboard.shared":"Condiviso","dashboard.sharedBy":"Condiviso da {name}","dashboard.days":"Giorni","dashboard.places":"Luoghi","dashboard.archive":"Archivia","dashboard.restore":"Ripristina","dashboard.archived":"Archiviati","dashboard.status.ongoing":"In corso","dashboard.status.today":"Oggi","dashboard.status.tomorrow":"Domani","dashboard.status.past":"Passato","dashboard.status.daysLeft":"-{count} giorni","dashboard.toast.loadError":"Impossibile caricare i viaggi","dashboard.toast.created":"Viaggio creato con successo!","dashboard.toast.createError":"Impossibile creare il viaggio","dashboard.toast.updated":"Viaggio aggiornato!","dashboard.toast.updateError":"Impossibile aggiornare il viaggio","dashboard.toast.deleted":"Viaggio eliminato","dashboard.toast.deleteError":"Impossibile eliminare il viaggio","dashboard.toast.archived":"Viaggio archiviato","dashboard.toast.archiveError":"Impossibile archiviare il viaggio","dashboard.toast.restored":"Viaggio ripristinato","dashboard.toast.restoreError":"Impossibile ripristinare il viaggio","dashboard.confirm.delete":'Eliminare il viaggio "{title}"? Tutti i luoghi e i programmi verranno eliminati in modo permanente.',"dashboard.editTrip":"Modifica Viaggio","dashboard.createTrip":"Crea Nuovo Viaggio","dashboard.tripTitle":"Titolo","dashboard.tripTitlePlaceholder":"es. Estate in Giappone","dashboard.tripDescription":"Descrizione","dashboard.tripDescriptionPlaceholder":"Di cosa tratta questo viaggio?","dashboard.startDate":"Data di inizio","dashboard.endDate":"Data di fine","dashboard.noDateHint":"Nessuna data impostata — verranno creati 7 giorni predefiniti. Puoi cambiarlo in qualsiasi momento.","dashboard.coverImage":"Immagine di copertina","dashboard.addCoverImage":"Aggiungi immagine di copertina (o trascinala qui)","dashboard.addMembers":"Compagni di viaggio","dashboard.addMember":"Aggiungi membro","dashboard.coverSaved":"Immagine di copertina salvata","dashboard.coverUploadError":"Impossibile caricare","dashboard.coverRemoveError":"Impossibile rimuovere","dashboard.titleRequired":"Il titolo è obbligatorio","dashboard.endDateError":"La data di fine deve essere successiva alla data di inizio","settings.title":"Impostazioni","settings.subtitle":"Configura le tue impostazioni personali","settings.map":"Mappa","settings.mapTemplate":"Modello Mappa","settings.mapTemplatePlaceholder.select":"Seleziona modello...","settings.mapDefaultHint":"Lascia vuoto per OpenStreetMap (predefinito)","settings.mapTemplatePlaceholder":"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png","settings.mapHint":"Modello URL per i tile della mappa","settings.latitude":"Latitudine","settings.longitude":"Longitudine","settings.saveMap":"Salva Mappa","settings.apiKeys":"Chiavi API","settings.mapsKey":"Chiave API Google Maps","settings.mapsKeyHint":"Per la ricerca dei luoghi. Richiede Places API (New). Ottienila su console.cloud.google.com","settings.weatherKey":"Chiave API OpenWeatherMap","settings.weatherKeyHint":"Per i dati meteo. Gratuita su openweathermap.org/api","settings.keyPlaceholder":"Inserisci la chiave...","settings.configured":"Configurata","settings.saveKeys":"Salva Chiavi","settings.display":"Visualizzazione","settings.colorMode":"Modalità Colore","settings.light":"Chiara","settings.dark":"Scura","settings.auto":"Automatica","settings.language":"Lingua","settings.temperature":"Unità di Temperatura","settings.timeFormat":"Formato Ora","settings.routeCalculation":"Calcolo Percorso","settings.blurBookingCodes":"Nascondi codici di prenotazione","settings.notifications":"Notifiche","settings.notifyTripInvite":"Inviti di viaggio","settings.notifyBookingChange":"Modifiche alle prenotazioni","settings.notifyTripReminder":"Promemoria di viaggio","settings.notifyVacayInvite":"Inviti fusione Vacay","settings.notifyPhotosShared":"Foto condivise (Immich)","settings.notifyCollabMessage":"Messaggi chat (Collab)","settings.notifyPackingTagged":"Lista valigia: assegnazioni","settings.notifyWebhook":"Notifiche webhook","settings.notificationsDisabled":"Le notifiche non sono configurate. Chiedi a un amministratore di abilitare le notifiche e-mail o webhook.","settings.notificationsActive":"Canale attivo","settings.notificationsManagedByAdmin":"Gli eventi di notifica sono configurati dall'amministratore.","settings.on":"On","settings.off":"Off","settings.mcp.title":"Configurazione MCP","settings.mcp.endpoint":"Endpoint MCP","settings.mcp.clientConfig":"Configurazione client","settings.mcp.clientConfigHint":"Sostituisci con un token API dalla lista sottostante. Il percorso di npx potrebbe dover essere adattato per il tuo sistema (es. C:\\PROGRA~1\\nodejs\\npx.cmd su Windows).","settings.mcp.copy":"Copia","settings.mcp.copied":"Copiato!","settings.mcp.apiTokens":"Token API","settings.mcp.createToken":"Crea nuovo token","settings.mcp.noTokens":"Nessun token ancora. Creane uno per connettere i client MCP.","settings.mcp.tokenCreatedAt":"Creato","settings.mcp.tokenUsedAt":"Utilizzato","settings.mcp.deleteTokenTitle":"Elimina token","settings.mcp.deleteTokenMessage":"Questo token smetterà di funzionare immediatamente. Qualsiasi client MCP che lo utilizza perderà l'accesso.","settings.mcp.modal.createTitle":"Crea token API","settings.mcp.modal.tokenName":"Nome del token","settings.mcp.modal.tokenNamePlaceholder":"es. Claude Desktop, Laptop di lavoro","settings.mcp.modal.creating":"Creazione…","settings.mcp.modal.create":"Crea token","settings.mcp.modal.createdTitle":"Token creato","settings.mcp.modal.createdWarning":"Questo token verrà mostrato solo una volta. Copialo e salvalo ora — non può essere recuperato.","settings.mcp.modal.done":"Fatto","settings.mcp.toast.created":"Token creato","settings.mcp.toast.createError":"Impossibile creare il token","settings.mcp.toast.deleted":"Token eliminato","settings.mcp.toast.deleteError":"Impossibile eliminare il token","settings.account":"Account","settings.username":"Username","settings.email":"Email","settings.role":"Ruolo","settings.roleAdmin":"Amministratore","settings.oidcLinked":"Collegato con","settings.changePassword":"Cambia Password","settings.currentPassword":"Password attuale","settings.currentPasswordRequired":"La password attuale è obbligatoria","settings.newPassword":"Nuova password","settings.confirmPassword":"Conferma nuova password","settings.updatePassword":"Aggiorna password","settings.passwordRequired":"Inserisci la password attuale e quella nuova","settings.passwordTooShort":"La password deve contenere almeno 8 caratteri","settings.passwordMismatch":"Le password non corrispondono","settings.passwordWeak":"La password deve contenere lettere maiuscole, minuscole, un numero e un carattere speciale","settings.passwordChanged":"Password cambiata con successo","settings.deleteAccount":"Elimina account","settings.deleteAccountTitle":"Eliminare il tuo account?","settings.deleteAccountWarning":"Il tuo account e tutti i tuoi viaggi, luoghi e file verranno eliminati in modo permanente. Questa azione non può essere annullata.","settings.deleteAccountConfirm":"Elimina in modo permanente","settings.deleteBlockedTitle":"Eliminazione impossibile","settings.deleteBlockedMessage":"Sei l'unico amministratore. Promuovi un altro utente ad amministratore prima di eliminare il tuo account.","settings.roleUser":"Utente","settings.saveProfile":"Salva Profillo","settings.toast.mapSaved":"Impostazioni mappa salvate","settings.toast.keysSaved":"Chiavi API salvate","settings.toast.displaySaved":"Impostazioni di visualizzazione salvate","settings.toast.profileSaved":"Profilo salvato","settings.uploadAvatar":"Carica Immagine del Profilo","settings.removeAvatar":"Rimuovi Immagine del Profilo","settings.avatarUploaded":"Immagine del profilo aggiornata","settings.avatarRemoved":"Immagine del profilo rimossa","settings.avatarError":"Impossibile caricare","settings.mfa.title":"Autenticazione a due fattori (2FA)","settings.mfa.description":"Aggiunge un secondo passaggio quando accedi con email e password. Usa un'app authenticator (Google Authenticator, Authy, ecc.).","settings.mfa.requiredByPolicy":"L'amministratore richiede l'autenticazione a due fattori. Configura un'app authenticator qui sotto prima di continuare.","settings.mfa.backupTitle":"Codici di backup","settings.mfa.backupDescription":"Usa questi codici monouso se perdi l'accesso alla tua app authenticator.","settings.mfa.backupWarning":"Salvali adesso. Ogni codice può essere usato una sola volta.","settings.mfa.backupCopy":"Copia codici","settings.mfa.backupDownload":"Scarica TXT","settings.mfa.backupPrint":"Stampa / PDF","settings.mfa.backupCopied":"Codici di backup copiati","settings.mfa.enabled":"La 2FA è abilitata sul tuo account.","settings.mfa.disabled":"La 2FA non è abilitata.","settings.mfa.setup":"Configura authenticator","settings.mfa.scanQr":"Scansiona questo codice QR con la tua app, o inserisci il segreto manualmente.","settings.mfa.secretLabel":"Chiave segreta (inserimento manuale)","settings.mfa.codePlaceholder":"Codice a 6 cifre","settings.mfa.enable":"Abilita 2FA","settings.mfa.cancelSetup":"Annulla","settings.mfa.disableTitle":"Disabilita 2FA","settings.mfa.disableHint":"Inserisci la password del tuo account e un codice attuale dal tuo authenticator.","settings.mfa.disable":"Disabilita 2FA","settings.mfa.toastEnabled":"Autenticazione a due fattori abilitata","settings.mfa.toastDisabled":"Autenticazione a due fattori disabilitata","settings.mfa.demoBlocked":"Non disponibile in modalità demo","settings.mustChangePassword":"Devi cambiare la password prima di continuare. Imposta una nuova password qui sotto.","admin.notifications.title":"Notifiche","admin.notifications.hint":"Scegli un canale di notifica. Solo uno può essere attivo alla volta.","admin.notifications.none":"Disattivato","admin.notifications.email":"E-mail (SMTP)","admin.notifications.webhook":"Webhook","admin.notifications.events":"Eventi di notifica","admin.notifications.eventsHint":"Scegli quali eventi attivano le notifiche per tutti gli utenti.","admin.notifications.configureFirst":"Configura prima le impostazioni SMTP o webhook qui sotto, poi abilita gli eventi.","admin.notifications.save":"Salva impostazioni notifiche","admin.notifications.saved":"Impostazioni notifiche salvate","admin.notifications.testWebhook":"Invia webhook di test","admin.notifications.testWebhookSuccess":"Webhook di test inviato con successo","admin.notifications.testWebhookFailed":"Invio webhook di test fallito","admin.smtp.title":"Email e notifiche","admin.smtp.hint":"Configurazione SMTP per l'invio delle notifiche via e-mail.","admin.smtp.testButton":"Invia email di prova","admin.webhook.hint":"Invia notifiche a un webhook esterno (Discord, Slack, ecc.).","admin.smtp.testSuccess":"Email di prova inviata con successo","admin.smtp.testFailed":"Invio email di prova fallito","dayplan.icsTooltip":"Esporta calendario (ICS)","share.linkTitle":"Link pubblico","share.linkHint":"Crea un link che chiunque può usare per visualizzare questo viaggio senza accedere. Solo lettura — nessuna modifica possibile.","share.createLink":"Crea link","share.deleteLink":"Elimina link","share.createError":"Impossibile creare il link","common.copy":"Copia","common.copied":"Copiato","share.permMap":"Mappa e programma","share.permBookings":"Prenotazioni","share.permPacking":"Valigia","shared.expired":"Link scaduto o non valido","shared.expiredHint":"Questo link di viaggio condiviso non è più attivo.","shared.readOnly":"Vista in sola lettura","shared.tabPlan":"Programma","shared.tabBookings":"Prenotazioni","shared.tabPacking":"Valigia","shared.tabBudget":"Budget","shared.tabChat":"Chat","shared.days":"giorni","shared.places":"luoghi","shared.other":"Altro","shared.totalBudget":"Budget totale","shared.messages":"messaggi","shared.sharedVia":"Condiviso tramite","shared.confirmed":"Confermato","shared.pending":"In attesa","share.permBudget":"Budget","share.permCollab":"Chat","login.error":"Accesso fallito. Controlla le tue credenziali.","login.tagline":`I tuoi viaggi. Il tuo programma.`,"login.description":"Programma viaggi in collaborazione con mappe interattive, budget e sincronizzazione in tempo reale.","login.features.maps":"Mappe Interattive","login.features.mapsDesc":"Google Places, percorsi e clustering","login.features.realtime":"Sincronizzazione in tempo reale","login.features.realtimeDesc":"Programmate insieme tramite WebSocket","login.features.budget":"Tracciamento Budget","login.features.budgetDesc":"Categorie, grafici e costi per persona","login.features.collab":"Collaborazione","login.features.collabDesc":"Multi-utente con viaggi condivisi","login.features.packing":"Lista Valigia","login.features.packingDesc":"Categorie, progressi e suggerimenti","login.features.bookings":"Prenotazioni","login.features.bookingsDesc":"Voli, alloggi, ristoranti e altro","login.features.files":"Documenti","login.features.filesDesc":"Carica e gestisci i documenti","login.features.routes":"Percorsi Intelligenti","login.features.routesDesc":"Ottimizzazione automatica ed esportazione su Google Maps","login.selfHosted":"Self-hosted · Open Source · Your data stays yours","login.title":"Accedi","login.subtitle":"Bentornato","login.signingIn":"Accesso in corso…","login.signIn":"Accedi","login.createAdmin":"Crea Account Amministratore","login.createAdminHint":"Imposta il primo account amministratore per TREK.","login.setNewPassword":"Imposta nuova password","login.setNewPasswordHint":"Devi cambiare la password prima di continuare.","login.createAccount":"Crea Account","login.createAccountHint":"Registra un nuovo account.","login.creating":"Creazione in corso…","login.noAccount":"Non hai un account?","login.hasAccount":"Hai già un account?","login.register":"Registrati","login.emailPlaceholder":"tua@email.com","login.username":"Username","login.oidc.registrationDisabled":"La registrazione è disabilitata. Contatta il tuo amministratore.","login.oidc.noEmail":"Nessuna email ricevuta dal provider.","login.oidc.tokenFailed":"Autenticazione fallita.","login.oidc.invalidState":"Sessione non valida. Riprova.","login.demoFailed":"Accesso demo fallito","login.oidcSignIn":"Accedi con {name}","login.oidcOnly":"L'autenticazione tramite password è disabilitata. Accedi utilizzando il tuo provider SSO.","login.demoHint":"Prova la demo — nessuna registrazione necessaria","login.mfaTitle":"Autenticazione a due fattori","login.mfaSubtitle":"Inserisci il codice a 6 cifre dalla tua app authenticator.","login.mfaCodeLabel":"Codice di verifica","login.mfaCodeRequired":"Inserisci il codice dalla tua app authenticator.","login.mfaHint":"Apri Google Authenticator, Authy o un'altra app TOTP.","login.mfaBack":"← Torna all'accesso","login.mfaVerify":"Verifica","register.passwordMismatch":"Le password non corrispondono","register.passwordTooShort":"La password deve contenere almeno 8 caratteri","register.failed":"Registrazione fallita","register.getStarted":"Inizia","register.subtitle":"Crea un account e inizia a programmare i viaggi dei tuoi sogni.","register.feature1":"Piani di viaggio illimitati","register.feature2":"Vista mappa interattiva","register.feature3":"Gestisci luoghi e categorie","register.feature4":"Traccia le prenotazioni","register.feature5":"Crea liste per la valigia","register.feature6":"Archivia foto e file","register.createAccount":"Crea Account","register.startPlanning":"Inizia a programmare il tuo viaggio","register.minChars":"Min. 6 caratteri","register.confirmPassword":"Conferma Password","register.repeatPassword":"Ripeti password","register.registering":"Registrazione in corso...","register.register":"Registrati","register.hasAccount":"Hai già un account?","register.signIn":"Accedi","admin.title":"Amministrazione","admin.subtitle":"Gestione utenti e impostazioni di sistema","admin.tabs.users":"Utenti","admin.tabs.categories":"Categorie","admin.tabs.backup":"Backup","admin.stats.users":"Utenti","admin.stats.trips":"Viaggi","admin.stats.places":"Luoghi","admin.stats.photos":"Foto","admin.stats.files":"File","admin.table.user":"Utente","admin.table.email":"Email","admin.table.role":"Ruolo","admin.table.created":"Creato","admin.table.lastLogin":"Ultimo Accesso","admin.table.actions":"Azioni","admin.you":"(Tu)","admin.editUser":"Modifica Utente","admin.newPassword":"Nuova Password","admin.newPasswordHint":"Lascia vuoto per mantenere la password attuale","admin.deleteUser":`Eliminare l'utente "{name}"? Tutti i viaggi verranno eliminati in modo permanente.`,"admin.deleteUserTitle":"Elimina utente","admin.newPasswordPlaceholder":"Inserisci nuova password…","admin.toast.loadError":"Impossibile caricare i dati di amministrazione","admin.toast.userUpdated":"Utente aggiornato","admin.toast.updateError":"Impossibile aggiornare","admin.toast.userDeleted":"Utente eliminato","admin.toast.deleteError":"Impossibile eliminare","admin.toast.cannotDeleteSelf":"Impossibile eliminare il proprio account","admin.toast.userCreated":"Utente creato","admin.toast.createError":"Impossibile creare l'utente","admin.toast.fieldsRequired":"Username, email e password sono obbligatori","admin.createUser":"Crea Utente","admin.invite.title":"Link di Invito","admin.invite.subtitle":"Crea link di registrazione monouso","admin.invite.create":"Crea Link","admin.invite.createAndCopy":"Crea & Copia","admin.invite.empty":"Nessun link di invito ancora creato","admin.invite.maxUses":"Usi Max.","admin.invite.expiry":"Scade tra","admin.invite.uses":"usato","admin.invite.expiresAt":"scade","admin.invite.createdBy":"da","admin.invite.active":"Attivo","admin.invite.expired":"Scaduto","admin.invite.usedUp":"Esaurito","admin.invite.copied":"Link di invito copiato negli appunti","admin.invite.copyLink":"Copia link","admin.invite.deleted":"Link di invito eliminato","admin.invite.createError":"Impossibile creare il link di invito","admin.invite.deleteError":"Impossibile eliminare il link di invito","admin.tabs.settings":"Impostazioni","admin.allowRegistration":"Consenti Registrazione","admin.allowRegistrationHint":"I nuovi utenti possono registrarsi autonomamente","admin.requireMfa":"Richiedi autenticazione a due fattori (2FA)","admin.requireMfaHint":"Gli utenti senza 2FA devono completare la configurazione in Impostazioni prima di usare l'app.","admin.apiKeys":"Chiavi API","admin.apiKeysHint":"Opzionale. Abilita dati estesi per i luoghi come foto e meteo.","admin.mapsKey":"Chiave API Google Maps","admin.mapsKeyHint":"Richiesta per la ricerca dei luoghi. Ottienila su console.cloud.google.com","admin.mapsKeyHintLong":"Senza una chiave API, OpenStreetMap viene utilizzato per la ricerca dei luoghi. Con una chiave API di Google, è possibile caricare anche foto, valutazioni e orari di apertura. Ottienine una su console.cloud.google.com.","admin.recommended":"Consigliato","admin.weatherKey":"Chiave API OpenWeatherMap","admin.weatherKeyHint":"Per i dati meteo. Gratuita su openweathermap.org","admin.validateKey":"Testa","admin.keyValid":"Connessa","admin.keyInvalid":"Non valida","admin.keySaved":"Chiavi API salvate","admin.oidcTitle":"Single Sign-On (OIDC)","admin.oidcSubtitle":"Consenti l'accesso tramite provider esterni come Google, Apple, Authentik o Keycloak.","admin.oidcDisplayName":"Nome Visualizzato","admin.oidcIssuer":"URL Emittente","admin.oidcIssuerHint":"L'URL dell'Emittente OpenID Connect del provider. es. https://accounts.google.com","admin.oidcSaved":"Configurazione OIDC salvata","admin.oidcOnlyMode":"Disabilita autenticazione con password","admin.oidcOnlyModeHint":"Se abilitato, è consentito solo l'accesso SSO. L'accesso basato su password e la registrazione sono bloccati.","admin.fileTypes":"Tipi di File Consentiti","admin.fileTypesHint":"Configura quali tipi di file gli utenti possono caricare.","admin.fileTypesFormat":"Estensioni separate da virgola (es. jpg,png,pdf,doc). Usa * per consentire tutti i tipi.","admin.fileTypesSaved":"Impostazioni dei tipi di file salvate","admin.bagTracking.title":"Tracciamento valigia","admin.bagTracking.subtitle":"Abilita il peso e l'assegnazione della valigia per gli elementi della lista valigia","admin.tabs.config":"Configurazione","admin.tabs.templates":"Modelli lista valigia","admin.packingTemplates.title":"Modelli lista valigia","admin.packingTemplates.subtitle":"Crea liste valigia riutilizzabili per i tuoi viaggi","admin.packingTemplates.create":"Nuovo modello","admin.packingTemplates.namePlaceholder":"Nome modello (es. Vacanza al mare)","admin.packingTemplates.empty":"Ancora nessun modello creato","admin.packingTemplates.items":"elementi","admin.packingTemplates.categories":"categorie","admin.packingTemplates.itemName":"Nome elemento","admin.packingTemplates.itemCategory":"Categoria","admin.packingTemplates.categoryName":"Nome categoria (es. Abbigliamento)","admin.packingTemplates.addCategory":"Aggiungi categoria","admin.packingTemplates.created":"Modello creato","admin.packingTemplates.deleted":"Modello eliminato","admin.packingTemplates.loadError":"Impossibile caricare i modelli","admin.packingTemplates.createError":"Impossibile creare il modello","admin.packingTemplates.deleteError":"Impossibile eliminare il modello","admin.packingTemplates.saveError":"Impossibile salvare","admin.tabs.addons":"Moduli","admin.addons.title":"Moduli","admin.addons.subtitle":"Abilita o disabilita le funzionalità per personalizzare la tua esperienza TREK.","admin.addons.catalog.packing.name":"Lista valigia","admin.addons.catalog.packing.description":"Checklist per preparare la valigia per ogni viaggio","admin.addons.catalog.budget.name":"Budget","admin.addons.catalog.budget.description":"Tieni traccia delle spese e pianifica il budget del tuo viaggio","admin.addons.catalog.documents.name":"Documenti","admin.addons.catalog.documents.description":"Archivia e gestisci i documenti di viaggio","admin.addons.catalog.vacay.name":"Ferie","admin.addons.catalog.vacay.description":"Pianificatore personale delle ferie con vista calendario","admin.addons.catalog.atlas.name":"Atlante","admin.addons.catalog.atlas.description":"Mappa del mondo con paesi visitati e statistiche di viaggio","admin.addons.catalog.collab.name":"Collaborazione","admin.addons.catalog.collab.description":"Note, sondaggi e chat in tempo reale per la pianificazione del viaggio","admin.addons.catalog.memories.name":"Foto (Immich)","admin.addons.catalog.memories.description":"Condividi le foto del viaggio tramite la tua istanza Immich","admin.addons.catalog.mcp.name":"MCP","admin.addons.catalog.mcp.description":"Model Context Protocol per l'integrazione di assistenti AI","admin.addons.subtitleBefore":"Abilita o disabilita le funzionalità per personalizzare la tua ","admin.addons.subtitleAfter":" esperienza.","admin.addons.enabled":"Abilitato","admin.addons.disabled":"Disabilitato","admin.addons.type.trip":"Viaggio","admin.addons.type.global":"Globale","admin.addons.type.integration":"Integrazione","admin.addons.tripHint":"Disponibile come scheda all'interno di ciascun viaggio","admin.addons.globalHint":"Disponibile come sezione autonoma nella navigazione principale","admin.addons.integrationHint":"Servizi backend e integrazioni API senza pagina dedicata","admin.addons.toast.updated":"Modulo aggiornato","admin.addons.toast.error":"Impossibile aggiornare il modulo","admin.addons.noAddons":"Nessun modulo disponibile","admin.weather.title":"Dati meteo","admin.weather.badge":"Dal 24 marzo 2026","admin.weather.description":"TREK utilizza Open-Meteo come fonte dei dati meteo. Open-Meteo è un servizio meteo gratuito e open-source — non è richiesta alcuna chiave API.","admin.weather.forecast":"Previsioni a 16 giorni","admin.weather.forecastDesc":"In precedenza 5 giorni (OpenWeatherMap)","admin.weather.climate":"Dati climatici storici","admin.weather.climateDesc":"Medie degli ultimi 85 anni per i giorni oltre le previsioni a 16 giorni","admin.weather.requests":"10.000 richieste / giorno","admin.weather.requestsDesc":"Gratis, nessuna chiave API richiesta","admin.weather.locationHint":"Il meteo si basa sul primo luogo con coordinate di ogni giorno. Se a un giorno non è assegnato alcun luogo, viene utilizzato come riferimento un qualsiasi luogo dell'elenco.","admin.tabs.audit":"Log di audit","admin.audit.subtitle":"Eventi sensibili di sicurezza e amministrazione (backup, utenti, 2FA, impostazioni).","admin.audit.empty":"Nessuna voce di audit.","admin.audit.refresh":"Aggiorna","admin.audit.loadMore":"Carica altro","admin.audit.showing":"{count} caricati · {total} totali","admin.audit.col.time":"Ora","admin.audit.col.user":"Utente","admin.audit.col.action":"Azione","admin.audit.col.resource":"Risorsa","admin.audit.col.ip":"IP","admin.audit.col.details":"Dettagli","admin.tabs.mcpTokens":"Token MCP","admin.mcpTokens.title":"Token MCP","admin.mcpTokens.subtitle":"Gestisci i token API di tutti gli utenti","admin.mcpTokens.owner":"Proprietario","admin.mcpTokens.tokenName":"Nome token","admin.mcpTokens.created":"Creato","admin.mcpTokens.lastUsed":"Ultimo utilizzo","admin.mcpTokens.never":"Mai","admin.mcpTokens.empty":"Non sono ancora stati creati token MCP","admin.mcpTokens.deleteTitle":"Elimina token","admin.mcpTokens.deleteMessage":"Questo token verrà revocato immediatamente. L'utente perderà l'accesso MCP tramite questo token.","admin.mcpTokens.deleteSuccess":"Token eliminato","admin.mcpTokens.deleteError":"Impossibile eliminare il token","admin.mcpTokens.loadError":"Impossibile caricare i token","admin.tabs.github":"GitHub","admin.github.title":"Cronologia rilasci","admin.github.subtitle":"Ultimi aggiornamenti da {repo}","admin.github.latest":"Ultimo","admin.github.prerelease":"Pre-release","admin.github.showDetails":"Mostra dettagli","admin.github.hideDetails":"Nascondi dettagli","admin.github.loadMore":"Carica altro","admin.github.loading":"Caricamento...","admin.github.error":"Impossibile caricare i rilasci","admin.github.by":"da","admin.github.support":"Mi aiuta a continuare a sviluppare TREK","admin.update.available":"Aggiornamento disponibile","admin.update.text":"TREK {version} è disponibile. Stai eseguendo {current}.","admin.update.button":"Vedi su GitHub","admin.update.install":"Installa aggiornamento","admin.update.confirmTitle":"Installare l'aggiornamento?","admin.update.confirmText":"TREK verrà aggiornato da {current} a {version}. Il server si riavvierà automaticamente in seguito.","admin.update.dataInfo":"Tutti i tuoi dati (viaggi, utenti, chiavi API, caricamenti, Ferie, Atlante, budget) saranno preservati.","admin.update.warning":"L'app sarà temporaneamente non disponibile durante il riavvio.","admin.update.confirm":"Aggiorna ora","admin.update.installing":"Aggiornamento in corso…","admin.update.success":"Aggiornamento installato! Il server si sta riavviando…","admin.update.failed":"Aggiornamento non riuscito","admin.update.backupHint":"Ti consigliamo di creare un backup prima di aggiornare.","admin.update.backupLink":"Vai a Backup","admin.update.howTo":"Come aggiornare","admin.update.dockerText":"La tua istanza TREK è in esecuzione in Docker. Per aggiornare alla versione {version}, esegui i seguenti comandi sul tuo server:","admin.update.reloadHint":"Ricarica la pagina tra qualche secondo.","vacay.subtitle":"Pianifica e gestisci i giorni di ferie","vacay.settings":"Impostazioni","vacay.year":"Anno","vacay.addYear":"Aggiungi anno","vacay.removeYear":"Rimuovi anno","vacay.removeYearConfirm":"Rimuovere {year}?","vacay.removeYearHint":"Tutte le voci delle ferie e le ferie aziendali di questo anno verranno eliminate in modo permanente.","vacay.remove":"Rimuovi","vacay.persons":"Persone","vacay.noPersons":"Nessuna persona aggiunta","vacay.addPerson":"Aggiungi persona","vacay.editPerson":"Modifica persona","vacay.removePerson":"Rimuovi persona","vacay.removePersonConfirm":"Rimuovere {name}?","vacay.removePersonHint":"Tutte le voci delle ferie per questa persona verranno eliminate in modo permanente.","vacay.personName":"Nome","vacay.personNamePlaceholder":"Inserisci nome","vacay.color":"Colore","vacay.add":"Aggiungi","vacay.legend":"Legenda","vacay.publicHoliday":"Festività pubblica","vacay.companyHoliday":"Ferie aziendali","vacay.weekend":"Weekend","vacay.modeVacation":"Ferie","vacay.modeCompany":"Ferie aziendali","vacay.entitlement":"Disponibilità","vacay.entitlementDays":"Giorni","vacay.used":"Usati","vacay.remaining":"Rimanenti","vacay.carriedOver":"dal {year}","vacay.blockWeekends":"Blocca weekend","vacay.blockWeekendsHint":"Impedisci le voci ferie nei giorni del weekend","vacay.weekendDays":"Giorni del weekend","vacay.mon":"Lun","vacay.tue":"Mar","vacay.wed":"Mer","vacay.thu":"Gio","vacay.fri":"Ven","vacay.sat":"Sab","vacay.sun":"Dom","vacay.publicHolidays":"Festività pubbliche","vacay.publicHolidaysHint":"Segna le festività pubbliche nel calendario","vacay.selectCountry":"Seleziona paese","vacay.selectRegion":"Seleziona regione (opzionale)","vacay.addCalendar":"Aggiungi calendario","vacay.calendarLabel":"Etichetta (opzionale)","vacay.calendarColor":"Colore","vacay.noCalendars":"Ancora nessun calendario delle festività aggiunto","vacay.companyHolidays":"Ferie aziendali","vacay.companyHolidaysHint":"Consenti di segnare giorni di ferie aziendali","vacay.companyHolidaysNoDeduct":"Le ferie aziendali non vengono conteggiate nei giorni di ferie.","vacay.carryOver":"Riporto","vacay.carryOverHint":"Riporta automaticamente i giorni di ferie rimanenti all'anno successivo","vacay.sharing":"Condivisione","vacay.sharingHint":"Condividi il tuo piano ferie con altri utenti TREK","vacay.owner":"Proprietario","vacay.shareEmailPlaceholder":"Email dell'utente TREK","vacay.shareSuccess":"Piano condiviso con successo","vacay.shareError":"Impossibile condividere il piano","vacay.dissolve":"Sciogli unione","vacay.dissolveHint":"Separa di nuovo i calendari. Le tue voci verranno mantenute.","vacay.dissolveAction":"Sciogli","vacay.dissolved":"Calendario separato","vacay.fusedWith":"Unito con","vacay.you":"tu","vacay.noData":"Nessun dato","vacay.changeColor":"Cambia colore","vacay.inviteUser":"Invita utente","vacay.inviteHint":"Invita un altro utente TREK a condividere un calendario ferie combinato.","vacay.selectUser":"Seleziona utente","vacay.sendInvite":"Invia invito","vacay.inviteSent":"Invito inviato","vacay.inviteError":"Impossibile inviare l'invito","vacay.pending":"in attesa","vacay.noUsersAvailable":"Nessun utente disponibile","vacay.accept":"Accetta","vacay.decline":"Rifiuta","vacay.acceptFusion":"Accetta e unisci","vacay.inviteTitle":"Richiesta di unione","vacay.inviteWantsToFuse":"vuole condividere con te un calendario ferie.","vacay.fuseInfo1":"Entrambi vedrete tutte le voci ferie in un unico calendario condiviso.","vacay.fuseInfo2":"Entrambe le parti possono creare e modificare le voci reciproche.","vacay.fuseInfo3":"Entrambe le parti possono eliminare le voci e modificare le disponibilità ferie.","vacay.fuseInfo4":"Le impostazioni come festività pubbliche e ferie aziendali sono condivise.","vacay.fuseInfo5":"L'unione può essere sciolta in qualsiasi momento da una delle due parti. Le tue voci verranno preservate.","nav.myTrips":"I miei viaggi","atlas.subtitle":"La tua impronta di viaggio nel mondo","atlas.countries":"Paesi","atlas.trips":"Viaggi","atlas.places":"Luoghi","atlas.unmark":"Rimuovi","atlas.confirmMark":"Segnare questo paese come visitato?","atlas.confirmUnmark":"Rimuovere questo paese dalla tua lista dei visitati?","atlas.markVisited":"Segna come visitato","atlas.markVisitedHint":"Aggiungi questo paese alla tua lista dei visitati","atlas.addToBucket":"Aggiungi alla lista desideri","atlas.addPoi":"Aggiungi luogo","atlas.bucketNamePlaceholder":"Nome (paese, città, luogo...)","atlas.month":"Mese","atlas.addToBucketHint":"Salvalo come luogo che vuoi visitare","atlas.bucketWhen":"Quando pensi di visitarlo?","atlas.statsTab":"Statistiche","atlas.bucketTab":"Lista desideri","atlas.addBucket":"Aggiungi alla lista desideri","atlas.bucketNotesPlaceholder":"Note (opzionale)","atlas.bucketEmpty":"La tua lista desideri è vuota","atlas.bucketEmptyHint":"Aggiungi luoghi che sogni di visitare","atlas.days":"Giorni","atlas.visitedCountries":"Paesi visitati","atlas.cities":"Città","atlas.noData":"Ancora nessun dato di viaggio","atlas.noDataHint":"Crea un viaggio e aggiungi luoghi per vedere la tua mappa del mondo","atlas.lastTrip":"Ultimo viaggio","atlas.nextTrip":"Prossimo viaggio","atlas.daysLeft":"giorni rimasti","atlas.streak":"Serie","atlas.year":"anno","atlas.years":"anni","atlas.yearInRow":"anno consecutivo","atlas.yearsInRow":"anni consecutivi","atlas.tripIn":"viaggio in","atlas.tripsIn":"viaggi in","atlas.since":"dal","atlas.europe":"Europa","atlas.asia":"Asia","atlas.northAmerica":"Nord America","atlas.southAmerica":"Sud America","atlas.africa":"Africa","atlas.oceania":"Oceania","atlas.other":"Altro","atlas.firstVisit":"Primo viaggio","atlas.lastVisitLabel":"Ultimo viaggio","atlas.tripSingular":"Viaggio","atlas.tripPlural":"Viaggi","atlas.placeVisited":"Luogo visitato","atlas.placesVisited":"Luoghi visitati","atlas.searchCountry":"Cerca un paese...","trip.tabs.plan":"Programma","trip.tabs.reservations":"Prenotazioni","trip.tabs.reservationsShort":"Pren.","trip.tabs.packing":"Lista valigia","trip.tabs.packingShort":"Valigia","trip.tabs.budget":"Budget","trip.tabs.files":"File","trip.loading":"Caricamento viaggio...","trip.mobilePlan":"Programma","trip.mobilePlaces":"Luoghi","trip.toast.placeUpdated":"Luogo aggiornato","trip.toast.placeAdded":"Luogo aggiunto","trip.toast.placeDeleted":"Luogo eliminato","trip.toast.selectDay":"Seleziona prima un giorno","trip.toast.assignedToDay":"Luogo assegnato al giorno","trip.toast.reorderError":"Impossibile riordinare","trip.toast.reservationUpdated":"Prenotazione aggiornata","trip.toast.reservationAdded":"Prenotazione aggiunta","trip.toast.deleted":"Eliminato","trip.confirm.deletePlace":"Sei sicuro di voler eliminare questo luogo?","trip.loadingPhotos":"Caricamento foto dei luoghi...","dayplan.emptyDay":"Nessun luogo programmato per questo giorno","dayplan.addNote":"Aggiungi nota","dayplan.editNote":"Modifica nota","dayplan.noteAdd":"Aggiungi nota","dayplan.noteEdit":"Modifica nota","dayplan.noteTitle":"Nota","dayplan.noteSubtitle":"Nota giornaliera","dayplan.totalCost":"Costo totale","dayplan.days":"Giorni","dayplan.dayN":"Giorno {n}","dayplan.calculating":"Calcolo in corso...","dayplan.route":"Percorso","dayplan.optimize":"Ottimizza","dayplan.optimized":"Percorso ottimizzato","dayplan.routeError":"Impossibile calcolare il percorso","dayplan.toast.needTwoPlaces":"Servono almeno due luoghi per l'ottimizzazione del percorso","dayplan.toast.routeOptimized":"Percorso ottimizzato","dayplan.toast.noGeoPlaces":"Nessun luogo con coordinate trovato per il calcolo del percorso","dayplan.confirmed":"Confermata","dayplan.pendingRes":"In attesa","dayplan.pdf":"PDF","dayplan.pdfTooltip":"Esporta il programma del giorno come PDF","dayplan.pdfError":"Impossibile esportare il PDF","dayplan.cannotReorderTransport":"Le prenotazioni con un orario fisso non possono essere riordinate","dayplan.confirmRemoveTimeTitle":"Rimuovere l'orario?","dayplan.confirmRemoveTimeBody":"Questo luogo ha un orario fisso ({time}). Spostarlo rimuoverà l'orario e consentirà l'ordinamento libero.","dayplan.confirmRemoveTimeAction":"Rimuovi orario e sposta","dayplan.cannotDropOnTimed":"Gli elementi non possono essere posizionati tra voci con orario fisso","dayplan.cannotBreakChronology":"Ciò interromperebbe l'ordine cronologico degli elementi e delle prenotazioni pianificati","places.addPlace":"Aggiungi Luogo/Attività","places.importGpx":"GPX","places.gpxImported":"{count} luoghi importati da GPX","places.urlResolved":"Luogo importato dall'URL","places.gpxError":"Importazione GPX non riuscita","places.importGoogleList":"Lista Google","places.googleListHint":"Incolla un link condiviso di una lista Google Maps per importare tutti i luoghi.","places.googleListImported":'{count} luoghi importati da "{list}"',"places.googleListError":"Importazione lista Google Maps non riuscita","places.viewDetails":"Visualizza dettagli","places.assignToDay":"A quale giorno aggiungere?","places.all":"Tutti","places.unplanned":"Non pianificati","places.search":"Cerca luoghi...","places.allCategories":"Tutte le categorie","places.categoriesSelected":"categorie","places.clearFilter":"Cancella filtro","places.count":"{count} luoghi","places.countSingular":"1 luogo","places.allPlanned":"Tutti i luoghi sono programmati","places.noneFound":"Nessun luogo trovato","places.editPlace":"Modifica luogo","places.formName":"Nome","places.formNamePlaceholder":"es. Torre Eiffel","places.formDescription":"Descrizione","places.formDescriptionPlaceholder":"Breve descrizione...","places.formAddress":"Indirizzo","places.formAddressPlaceholder":"Via, Città, Paese","places.formLat":"Latitudine (es. 48.8566)","places.formLng":"Longitudine (es. 2.3522)","places.formCategory":"Categoria","places.noCategory":"Nessuna categoria","places.categoryNamePlaceholder":"Nome categoria","places.formTime":"Ora","places.startTime":"Inizio","places.endTime":"Fine","places.endTimeBeforeStart":"L'ora di fine è precedente all'ora di inizio","places.timeCollision":"Sovrapposizione di orario con:","places.formWebsite":"Sito web","places.formNotesPlaceholder":"Note personali...","places.formReservation":"Prenotazione","places.reservationNotesPlaceholder":"Note della prenotazione, numero di conferma...","places.mapsSearchPlaceholder":"Cerca luoghi...","places.mapsSearchError":"Impossibile cercare i luoghi.","places.osmHint":"Uso della ricerca OpenStreetMap (senza foto, orari di apertura o valutazioni). Aggiungi una chiave API Google nelle impostazioni per i dettagli completi.","places.osmActive":"Ricerca tramite OpenStreetMap (senza foto, valutazioni o orari di apertura). Aggiungi una chiave API Google nelle Impostazioni per dati avanzati.","places.categoryCreateError":"Impossibile creare la categoria","places.nameRequired":"Inserisci un nome","places.saveError":"Impossibile salvare","inspector.opened":"Aperto","inspector.closed":"Chiuso","inspector.openingHours":"Orari di apertura","inspector.showHours":"Mostra orari di apertura","inspector.files":"File","inspector.filesCount":"{count} file","inspector.removeFromDay":"Rimuovi dal giorno","inspector.addToDay":"Aggiungi al giorno","inspector.confirmedRes":"Prenotazione confermata","inspector.pendingRes":"Prenotazione in attesa","inspector.google":"Apri in Google Maps","inspector.website":"Apri sito web","inspector.addRes":"Prenotazione","inspector.editRes":"Modifica prenotazione","inspector.participants":"Partecipanti","inspector.trackStats":"Dati del percorso","reservations.title":"Prenotazioni","reservations.empty":"Ancora nessuna prenotazione","reservations.emptyHint":"Aggiungi prenotazioni per voli, alloggi e altro","reservations.add":"Aggiungi prenotazione","reservations.addManual":"Prenotazione manuale","reservations.placeHint":"Suggerimento: è meglio creare le prenotazioni direttamente da un luogo per collegarle al tuo programma del giorno.","reservations.confirmed":"Confermata","reservations.pending":"In attesa","reservations.summary":"{confirmed} confermate, {pending} in attesa","reservations.fromPlan":"Dal programma","reservations.showFiles":"Mostra file","reservations.editTitle":"Modifica prenotazione","reservations.status":"Stato","reservations.datetime":"Data e ora","reservations.startTime":"Ora di inizio","reservations.endTime":"Ora di fine","reservations.date":"Data","reservations.time":"Ora","reservations.timeAlt":"Ora (alternativa, es. 19:30)","reservations.notes":"Note","reservations.notesPlaceholder":"Note aggiuntive...","reservations.meta.airline":"Compagnia aerea","reservations.meta.flightNumber":"N. volo","reservations.meta.from":"Da","reservations.meta.to":"A","reservations.meta.trainNumber":"N. treno","reservations.meta.platform":"Binario","reservations.meta.seat":"Posto","reservations.meta.checkIn":"Check-in","reservations.meta.checkOut":"Check-out","reservations.meta.linkAccommodation":"Alloggio","reservations.meta.pickAccommodation":"Collega a un alloggio","reservations.meta.noAccommodation":"Nessuno","reservations.meta.hotelPlace":"Alloggio","reservations.meta.pickHotel":"Seleziona alloggio","reservations.meta.fromDay":"Da","reservations.meta.toDay":"A","reservations.meta.selectDay":"Seleziona giorno","reservations.type.flight":"Volo","reservations.type.hotel":"Alloggio","reservations.type.restaurant":"Ristorante","reservations.type.train":"Treno","reservations.type.car":"Auto a noleggio","reservations.type.cruise":"Crociera","reservations.type.event":"Evento","reservations.type.tour":"Tour","reservations.type.other":"Altro","reservations.confirm.delete":'Sei sicuro di voler eliminare la prenotazione "{name}"?',"reservations.confirm.deleteTitle":"Eliminare la prenotazione?","reservations.confirm.deleteBody":'"{name}" verrà eliminato in modo permanente.',"reservations.toast.updated":"Prenotazione aggiornata","reservations.toast.removed":"Prenotazione eliminata","reservations.toast.fileUploaded":"File caricato","reservations.toast.uploadError":"Impossibile caricare","reservations.newTitle":"Nuova prenotazione","reservations.bookingType":"Tipo di prenotazione","reservations.titleLabel":"Titolo","reservations.titlePlaceholder":"es. Lufthansa LH123, Hotel Adlon, ...","reservations.locationAddress":"Posizione / Indirizzo","reservations.locationPlaceholder":"Indirizzo, aeroporto, hotel...","reservations.confirmationCode":"Codice prenotazione","reservations.confirmationPlaceholder":"es. ABC12345","reservations.day":"Giorno","reservations.noDay":"Nessun giorno","reservations.place":"Luogo","reservations.noPlace":"Nessun luogo","reservations.pendingSave":"verrà salvato…","reservations.uploading":"Caricamento...","reservations.attachFile":"Allega file","reservations.linkExisting":"Collega file esistente","reservations.toast.saveError":"Impossibile salvare","reservations.toast.updateError":"Impossibile aggiornare","reservations.toast.deleteError":"Impossibile eliminare","reservations.confirm.remove":'Rimuovere la prenotazione per "{name}"?',"reservations.linkAssignment":"Collega all'assegnazione del giorno","reservations.pickAssignment":"Seleziona un'assegnazione dal tuo programma...","reservations.noAssignment":"Nessun collegamento (autonomo)","budget.title":"Budget","budget.exportCsv":"Esporta CSV","budget.emptyTitle":"Ancora nessun budget creato","budget.emptyText":"Crea categorie e voci per pianificare il budget del tuo viaggio","budget.emptyPlaceholder":"Inserisci nome categoria...","budget.createCategory":"Crea categoria","budget.category":"Categoria","budget.categoryName":"Nome categoria","budget.table.name":"Nome","budget.table.total":"Totale","budget.table.persons":"Persone","budget.table.days":"Giorni","budget.table.perPerson":"Per persona","budget.table.perDay":"Per giorno","budget.table.perPersonDay":"P. p / gio.","budget.table.note":"Nota","budget.table.date":"Data","budget.newEntry":"Nuova voce","budget.defaultEntry":"Nuova voce","budget.defaultCategory":"Nuova categoria","budget.total":"Totale","budget.totalBudget":"Budget totale","budget.byCategory":"Per categoria","budget.editTooltip":"Clicca per modificare","budget.confirm.deleteCategory":'Sei sicuro di voler eliminare la categoria "{name}" con {count} voci?',"budget.deleteCategory":"Elimina categoria","budget.perPerson":"Per persona","budget.paid":"Pagato","budget.open":"Aperto","budget.noMembers":"Nessun membro assegnato","budget.settlement":"Regolamento","budget.settlementInfo":"Clicca sull'avatar di un membro su una voce di budget per contrassegnarlo in verde — significa che ha pagato. Il regolamento mostra poi chi deve quanto a chi.","budget.netBalances":"Saldi netti","files.title":"File","files.count":"{count} file","files.countSingular":"1 file","files.uploaded":"{count} caricati","files.uploadError":"Caricamento non riuscito","files.dropzone":"Trascina qui i file","files.dropzoneHint":"oppure clicca per sfogliare","files.allowedTypes":"Immagini, PDF, DOC, DOCX, XLS, XLSX, TXT, CSV · Max 50 MB","files.uploading":"Caricamento...","files.filterAll":"Tutti","files.filterPdf":"PDF","files.filterImages":"Immagini","files.filterDocs":"Documenti","files.filterCollab":"Note Collaborazione","files.sourceCollab":"Da Note Collaborazione","files.empty":"Ancora nessun file","files.emptyHint":"Carica file per allegarli al tuo viaggio","files.openTab":"Apri in una nuova scheda","files.confirm.delete":"Sei sicuro di voler eliminare questo file?","files.toast.deleted":"File eliminato","files.toast.deleteError":"Impossibile eliminare il file","files.sourcePlan":"Programma giornaliero","files.sourceBooking":"Prenotazione","files.attach":"Allega","files.pasteHint":"Puoi anche incollare immagini dagli appunti (Ctrl+V)","files.trash":"Cestino","files.trashEmpty":"Il cestino è vuoto","files.emptyTrash":"Svuota cestino","files.restore":"Ripristina","files.star":"Aggiungi ai preferiti","files.unstar":"Rimuovi dai preferiti","files.assign":"Assegna","files.assignTitle":"Assegna file","files.assignPlace":"Luogo","files.assignBooking":"Prenotazione","files.unassigned":"Non assegnato","files.unlink":"Rimuovi collegamento","files.toast.trashed":"Spostato nel cestino","files.toast.restored":"File ripristinato","files.toast.trashEmptied":"Cestino svuotato","files.toast.assigned":"File assegnato","files.toast.assignError":"Assegnazione fallita","files.toast.restoreError":"Ripristino fallito","files.confirm.permanentDelete":"Eliminare questo file in modo permanente? Questa operazione non può essere annullata.","files.confirm.emptyTrash":"Eliminare in modo permanente tutti i file nel cestino? Questa operazione non può essere annullata.","files.noteLabel":"Nota","files.notePlaceholder":"Aggiungi una nota...","packing.title":"Lista valigia","packing.empty":"La lista valigia è vuota","packing.import":"Importa","packing.importTitle":"Importa lista valigia","packing.importHint":"Un elemento per riga. Formato: Categoria, Nome, Peso in g (opzionale), Borsa (opzionale), checked/unchecked (opzionale)","packing.importPlaceholder":`Igiene, Spazzolino Abbigliamento, Magliette, 200 Documenti, Passaporto, , Bagaglio a mano @@ -133,7 +133,7 @@ Elettronica, Caricabatterie, 50, Valigia, checked`,"packing.importCsv":"Carica C Tutti i dati attuali verranno sostituiti con il backup.`,"backup.confirm.uploadRestore":`Scaricare e ripristinare il file di backup "{name}"? -Tutti i dati attuali verranno sovrascritti.`,"backup.confirm.delete":'Eliminare il backup "{name}"?',"backup.toast.loadError":"Impossibile caricare i backup","backup.toast.created":"Backup creato con successo","backup.toast.createError":"Impossibile creare il backup","backup.toast.restored":"Backup ripristinato. La pagina verrà ricaricata...","backup.toast.restoreError":"Impossibile ripristinare","backup.toast.uploadError":"Impossibile caricare","backup.toast.deleted":"Backup eliminato","backup.toast.deleteError":"Impossibile eliminare","backup.toast.downloadError":"Download non riuscito","backup.toast.settingsSaved":"Impostazioni auto-backup salvate","backup.toast.settingsError":"Impossibile salvare le impostazioni","backup.auto.title":"Auto-Backup","backup.auto.subtitle":"Backup automatico pianificato","backup.auto.enable":"Abilita auto-backup","backup.auto.enableHint":"I backup verranno creati automaticamente in base alla pianificazione scelta","backup.auto.interval":"Intervallo","backup.auto.hour":"Esegui all'ora","backup.auto.hourHint":"Ora locale del server (formato {format})","backup.auto.dayOfWeek":"Giorno della settimana","backup.auto.dayOfMonth":"Giorno del mese","backup.auto.dayOfMonthHint":"Limitato a 1–28 per compatibilità con tutti i mesi","backup.auto.scheduleSummary":"Pianificazione","backup.auto.summaryDaily":"Ogni giorno alle {hour}:00","backup.auto.summaryWeekly":"Ogni {day} alle {hour}:00","backup.auto.summaryMonthly":"Giorno {day} di ogni mese alle {hour}:00","backup.auto.envLocked":"Docker","backup.auto.envLockedHint":"L'auto-backup è configurato tramite variabili d'ambiente Docker. Per modificare queste impostazioni, aggiorna il tuo docker-compose.yml e riavvia il container.","backup.auto.copyEnv":"Copia variabili env Docker","backup.auto.envCopied":"Variabili env Docker copiate negli appunti","backup.auto.keepLabel":"Elimina i vecchi backup dopo","backup.dow.sunday":"Dom","backup.dow.monday":"Lun","backup.dow.tuesday":"Mar","backup.dow.wednesday":"Mer","backup.dow.thursday":"Gio","backup.dow.friday":"Ven","backup.dow.saturday":"Sab","backup.interval.hourly":"Ogni ora","backup.interval.daily":"Giornaliero","backup.interval.weekly":"Settimanale","backup.interval.monthly":"Mensile","backup.keep.1day":"1 giorno","backup.keep.3days":"3 giorni","backup.keep.7days":"7 giorni","backup.keep.14days":"14 giorni","backup.keep.30days":"30 giorni","backup.keep.forever":"Conserva per sempre","photos.allDays":"Tutti i giorni","photos.noPhotos":"Ancora nessuna foto","photos.uploadHint":"Carica le foto del tuo viaggio","photos.clickToSelect":"o clicca per selezionare","photos.linkPlace":"Collega luogo","photos.noPlace":"Nessun luogo","photos.uploadN":"Caricamento di {n} foto","backup.restoreConfirmTitle":"Ripristinare il backup?","backup.restoreWarning":"Tutti i dati attuali (viaggi, luoghi, utenti, caricamenti) verranno sostituiti in modo permanente dal backup. Questa azione non può essere annullata.","backup.restoreTip":"Suggerimento: Crea un backup dello stato attuale prima di ripristinare.","backup.restoreConfirm":"Sì, ripristina","pdf.travelPlan":"Programma di viaggio","pdf.planned":"Programmato","pdf.costLabel":"Costo EUR","pdf.preview":"Anteprima PDF","pdf.saveAsPdf":"Salva come PDF","planner.places":"Luoghi","planner.bookings":"Prenotazioni","planner.packingList":"Lista valigia","planner.documents":"Documenti","planner.dayPlan":"Programma giornaliero","planner.reservations":"Prenotazioni","planner.minTwoPlaces":"Servono almeno 2 luoghi con coordinate","planner.noGeoPlaces":"Nessun luogo con coordinate disponibile","planner.routeCalculated":"Percorso calcolato","planner.routeCalcFailed":"Il percorso non è stato calcolato","planner.routeError":"Errore nel calcolo del percorso","planner.routeOptimized":"Percorso ottimizzato","planner.reservationUpdated":"Prenotazione aggiornata","planner.reservationAdded":"Prenotazione aggiunta","planner.confirmDeleteReservation":"Eliminare la prenotazione?","planner.reservationDeleted":"Prenotazione eliminata","planner.days":"Giorni","planner.allPlaces":"Tutti i luoghi","planner.totalPlaces":"{n} luoghi in totale","planner.noDaysPlanned":"Nessun giorno ancora programmato","planner.editTrip":"Modifica viaggio →","planner.placeOne":"1 luogo","planner.placeN":"{n} luoghi","planner.addNote":"Aggiungi nota","planner.noEntries":"Nessuna voce per questo giorno","planner.addPlace":"Aggiungi luogo/attività","planner.addPlaceShort":"+ Aggiungi luogo/attività","planner.resPending":"Prenotazione in attesa · ","planner.resConfirmed":"Prenotazione confermata · ","planner.notePlaceholder":"Nota…","planner.noteTimePlaceholder":"Ora (opzionale)","planner.noteExamplePlaceholder":"es. S3 alle 14:30 dalla stazione centrale, traghetto dal molo 7, pausa pranzo…","planner.totalCost":"Costo totale","planner.searchPlaces":"Cerca luoghi…","planner.allCategories":"Tutte le categorie","planner.noPlacesFound":"Nessun luogo trovato","planner.addFirstPlace":"Aggiungi primo luogo","planner.noReservations":"Nessuna prenotazione","planner.addFirstReservation":"Aggiungi prima prenotazione","planner.new":"Nuovo","planner.addToDay":"+ Giorno","planner.calculating":"Calcolo in corso…","planner.route":"Percorso","planner.optimize":"Ottimizza","planner.openGoogleMaps":"Apri in Google Maps","planner.selectDayHint":"Seleziona un giorno dall'elenco a sinistra per vedere il programma","planner.noPlacesForDay":"Ancora nessun luogo per questo giorno","planner.addPlacesLink":"Aggiungi luoghi →","planner.minTotal":"min. totali","planner.noReservation":"Nessuna prenotazione","planner.removeFromDay":"Rimuovi dal giorno","planner.addToThisDay":"Aggiungi al giorno","planner.overview":"Panoramica","planner.noDays":"Ancora nessun giorno","planner.editTripToAddDays":"Modifica viaggio per aggiungere giorni","planner.dayCount":"{n} Giorni","planner.clickToUnlock":"Clicca per sbloccare","planner.keepPosition":"Mantieni la posizione durante l'ottimizzazione del percorso","planner.dayDetails":"Dettagli del giorno","planner.dayN":"Giorno {n}","stats.countries":"Paesi","stats.cities":"Città","stats.trips":"Viaggi","stats.places":"Luoghi","stats.worldProgress":"Progresso nel mondo","stats.visited":"visitati","stats.remaining":"rimanenti","stats.visitedCountries":"Paesi visitati","day.precipProb":"Probabilità di pioggia","day.precipitation":"Precipitazioni","day.wind":"Vento","day.sunrise":"Alba","day.sunset":"Tramonto","day.hourlyForecast":"Previsione oraria","day.climateHint":"Medie storiche — previsioni reali disponibili entro 16 giorni da questa data.","day.noWeather":"Nessun dato meteo disponibile. Aggiungi un luogo con coordinate.","day.overview":"Panoramica giornaliera","day.accommodation":"Alloggio","day.addAccommodation":"Aggiungi alloggio","day.hotelDayRange":"Applica ai giorni","day.noPlacesForHotel":"Aggiungi prima i luoghi al tuo viaggio","day.allDays":"Tutti","day.checkIn":"Check-in","day.checkOut":"Check-out","day.confirmation":"Conferma","day.editAccommodation":"Modifica alloggio","day.reservations":"Prenotazioni","memories.title":"Foto","memories.notConnected":"Immich non connesso","memories.notConnectedHint":"Connetti la tua istanza Immich nelle Impostazioni per vedere qui le foto del tuo viaggio.","memories.noDates":"Aggiungi le date al tuo viaggio per caricare le foto.","memories.noPhotos":"Nessuna foto trovata","memories.noPhotosHint":"Nessuna foto trovata in Immich per l'intervallo di date di questo viaggio.","memories.photosFound":"foto","memories.fromOthers":"da altri","memories.sharePhotos":"Condividi foto","memories.sharing":"Condivisione","memories.reviewTitle":"Rivedi le tue foto","memories.reviewHint":"Clicca sulle foto per escluderle dalla condivisione.","memories.shareCount":"Condividi {count} foto","memories.immichUrl":"URL Server Immich","memories.immichApiKey":"Chiave API","memories.testConnection":"Test connessione","memories.testFirst":"Testa prima la connessione","memories.connected":"Connesso","memories.disconnected":"Non connesso","memories.connectionSuccess":"Connesso a Immich","memories.connectionError":"Impossibile connettersi a Immich","memories.saved":"Impostazioni Immich salvate","memories.addPhotos":"Aggiungi foto","memories.linkAlbum":"Collega album","memories.selectAlbum":"Seleziona album Immich","memories.noAlbums":"Nessun album trovato","memories.syncAlbum":"Sincronizza album","memories.unlinkAlbum":"Scollega","memories.photos":"foto","memories.selectPhotos":"Seleziona foto da Immich","memories.selectHint":"Tocca le foto per selezionarle.","memories.selected":"selezionate","memories.addSelected":"Aggiungi {count} foto","memories.alreadyAdded":"Aggiunta","memories.private":"Privato","memories.stopSharing":"Interrompi condivisione","memories.oldest":"Prima le più vecchie","memories.newest":"Prima le più recenti","memories.allLocations":"Tutte le posizioni","memories.tripDates":"Date del viaggio","memories.allPhotos":"Tutte le foto","memories.confirmShareTitle":"Condividere con i membri del viaggio?","memories.confirmShareHint":"{count} foto saranno visibili a tutti i membri di questo viaggio. Potrai rendere private le singole foto in seguito.","memories.confirmShareButton":"Condividi foto","collab.tabs.chat":"Chat","collab.tabs.notes":"Note","collab.tabs.polls":"Sondaggi","collab.whatsNext.title":"Cosa c'è dopo","collab.whatsNext.today":"Oggi","collab.whatsNext.tomorrow":"Domani","collab.whatsNext.empty":"Nessuna attività imminente","collab.whatsNext.until":"a","collab.whatsNext.emptyHint":"Le attività con orari appariranno qui","collab.chat.send":"Invia","collab.chat.placeholder":"Scrivi un messaggio...","collab.chat.empty":"Inizia la conversazione","collab.chat.emptyHint":"I messaggi sono condivisi con tutti i membri del viaggio","collab.chat.emptyDesc":"Condividi idee, programmi e aggiornamenti con il tuo gruppo di viaggio","collab.chat.today":"Oggi","collab.chat.yesterday":"Ieri","collab.chat.deletedMessage":"ha eliminato un messaggio","collab.chat.reply":"Rispondi","collab.chat.loadMore":"Carica messaggi precedenti","collab.chat.justNow":"ora","collab.chat.minutesAgo":"{n}m fa","collab.chat.hoursAgo":"{n}h fa","collab.notes.title":"Note","collab.notes.new":"Nuova nota","collab.notes.empty":"Ancora nessuna nota","collab.notes.emptyHint":"Inizia a raccogliere idee e programmi","collab.notes.all":"Tutte","collab.notes.titlePlaceholder":"Titolo della nota","collab.notes.contentPlaceholder":"Scrivi qualcosa...","collab.notes.categoryPlaceholder":"Categoria","collab.notes.newCategory":"Nuova categoria...","collab.notes.category":"Categoria","collab.notes.noCategory":"Nessuna categoria","collab.notes.color":"Colore","collab.notes.save":"Salva","collab.notes.cancel":"Annulla","collab.notes.edit":"Modifica","collab.notes.delete":"Elimina","collab.notes.pin":"Fissa","collab.notes.unpin":"Rimuovi","collab.notes.daysAgo":"{n}g fa","collab.notes.categorySettings":"Gestisci categorie","collab.notes.create":"Crea","collab.notes.website":"Sito web","collab.notes.websitePlaceholder":"https://...","collab.notes.attachFiles":"Allega file","collab.notes.noCategoriesYet":"Ancora nessuna categoria","collab.notes.emptyDesc":"Crea una nota per iniziare","collab.polls.title":"Sondaggi","collab.polls.new":"Nuovo sondaggio","collab.polls.empty":"Ancora nessun sondaggio","collab.polls.emptyHint":"Chiedi al gruppo e votate insieme","collab.polls.question":"Domanda","collab.polls.questionPlaceholder":"Cosa dovremmo fare?","collab.polls.addOption":"+ Aggiungi opzione","collab.polls.optionPlaceholder":"Opzione {n}","collab.polls.create":"Crea sondaggio","collab.polls.close":"Chiudi","collab.polls.closed":"Chiuso","collab.polls.votes":"{n} voti","collab.polls.vote":"{n} voto","collab.polls.multipleChoice":"Scelta multipla","collab.polls.multiChoice":"Scelta multipla","collab.polls.deadline":"Scadenza","collab.polls.option":"Opzione","collab.polls.options":"Opzioni","collab.polls.delete":"Elimina","collab.polls.closedSection":"Chiusi","admin.tabs.permissions":"Permessi","perm.title":"Impostazioni dei permessi","perm.subtitle":"Controlla chi può eseguire azioni nell'applicazione","perm.saved":"Impostazioni dei permessi salvate","perm.resetDefaults":"Ripristina predefiniti","perm.customized":"personalizzato","perm.level.admin":"Solo amministratore","perm.level.tripOwner":"Proprietario del viaggio","perm.level.tripMember":"Membri del viaggio","perm.level.everybody":"Tutti","perm.cat.trip":"Gestione viaggi","perm.cat.members":"Gestione membri","perm.cat.files":"File","perm.cat.content":"Contenuti e programma","perm.cat.extras":"Budget, bagagli e collaborazione","perm.action.trip_create":"Creare viaggi","perm.action.trip_edit":"Modificare dettagli del viaggio","perm.action.trip_delete":"Eliminare viaggi","perm.action.trip_archive":"Archiviare / dearchiviare viaggi","perm.action.trip_cover_upload":"Caricare immagine di copertina","perm.action.member_manage":"Aggiungere / rimuovere membri","perm.action.file_upload":"Caricare file","perm.action.file_edit":"Modificare metadati dei file","perm.action.file_delete":"Eliminare file","perm.action.place_edit":"Aggiungere / modificare / eliminare luoghi","perm.action.day_edit":"Modificare giorni, note e assegnazioni","perm.action.reservation_edit":"Gestire prenotazioni","perm.action.budget_edit":"Gestire budget","perm.action.packing_edit":"Gestire liste bagagli","perm.action.collab_edit":"Collaborazione (note, sondaggi, chat)","perm.action.share_manage":"Gestire link di condivisione","perm.actionHint.trip_create":"Chi può creare nuovi viaggi","perm.actionHint.trip_edit":"Chi può modificare nome, date, descrizione e valuta del viaggio","perm.actionHint.trip_delete":"Chi può eliminare definitivamente un viaggio","perm.actionHint.trip_archive":"Chi può archiviare o dearchiviare un viaggio","perm.actionHint.trip_cover_upload":"Chi può caricare o modificare l'immagine di copertina","perm.actionHint.member_manage":"Chi può invitare o rimuovere membri del viaggio","perm.actionHint.file_upload":"Chi può caricare file in un viaggio","perm.actionHint.file_edit":"Chi può modificare descrizioni e link dei file","perm.actionHint.file_delete":"Chi può spostare file nel cestino o eliminarli definitivamente","perm.actionHint.place_edit":"Chi può aggiungere, modificare o eliminare luoghi","perm.actionHint.day_edit":"Chi può modificare giorni, note dei giorni e assegnazioni dei luoghi","perm.actionHint.reservation_edit":"Chi può creare, modificare o eliminare prenotazioni","perm.actionHint.budget_edit":"Chi può creare, modificare o eliminare voci di budget","perm.actionHint.packing_edit":"Chi può gestire articoli da bagaglio e borse","perm.actionHint.collab_edit":"Chi può creare note, sondaggi e inviare messaggi","perm.actionHint.share_manage":"Chi può creare o eliminare link di condivisione pubblici"},kM={"common.save":"Сохранить","common.cancel":"Отмена","common.delete":"Удалить","common.edit":"Редактировать","common.add":"Добавить","common.loading":"Загрузка...","common.import":"Импорт","common.error":"Ошибка","common.back":"Назад","common.all":"Все","common.close":"Закрыть","common.open":"Открыть","common.upload":"Загрузить","common.search":"Поиск","common.confirm":"Подтвердить","common.ok":"ОК","common.yes":"Да","common.no":"Нет","common.or":"или","common.none":"Нет","common.date":"Дата","common.rename":"Переименовать","common.name":"Имя","common.email":"Эл. почта","common.password":"Пароль","common.saving":"Сохранение...","common.saved":"Сохранено","trips.reminder":"Напоминание","trips.reminderNone":"Нет","trips.reminderDay":"день","trips.reminderDays":"дней","trips.reminderCustom":"Другое","trips.reminderDaysBefore":"дней до отъезда","trips.reminderDisabledHint":"Напоминания о поездках отключены. Включите их в Админ > Настройки > Уведомления.","common.update":"Обновить","common.change":"Изменить","common.uploading":"Загрузка…","common.backToPlanning":"Вернуться к планированию","common.reset":"Сбросить","nav.trip":"Поездка","nav.share":"Поделиться","nav.settings":"Настройки","nav.admin":"Админ","nav.logout":"Выйти","nav.lightMode":"Светлая тема","nav.darkMode":"Тёмная тема","nav.autoMode":"Авто","nav.administrator":"Администратор","dashboard.title":"Мои поездки","dashboard.subtitle.loading":"Загрузка поездок...","dashboard.subtitle.trips":"{count} поездок ({archived} в архиве)","dashboard.subtitle.empty":"Начните свою первую поездку","dashboard.subtitle.activeOne":"{count} активная поездка","dashboard.subtitle.activeMany":"{count} активных поездок","dashboard.subtitle.archivedSuffix":" · {count} в архиве","dashboard.newTrip":"Новая поездка","dashboard.gridView":"Плитка","dashboard.listView":"Список","dashboard.currency":"Валюта","dashboard.timezone":"Часовые пояса","dashboard.localTime":"Местное","dashboard.timezoneCustomTitle":"Свой часовой пояс","dashboard.timezoneCustomLabelPlaceholder":"Название (необязательно)","dashboard.timezoneCustomTzPlaceholder":"напр. America/New_York","dashboard.timezoneCustomAdd":"Добавить","dashboard.timezoneCustomErrorEmpty":"Введите идентификатор часового пояса","dashboard.timezoneCustomErrorInvalid":"Неверный часовой пояс. Используйте формат Europe/Berlin","dashboard.timezoneCustomErrorDuplicate":"Уже добавлен","dashboard.emptyTitle":"Нет поездок","dashboard.emptyText":"Создайте свою первую поездку и начните планировать!","dashboard.emptyButton":"Создать первую поездку","dashboard.nextTrip":"Следующая поездка","dashboard.shared":"Общая","dashboard.sharedBy":"Поделился {name}","dashboard.days":"Дни","dashboard.places":"Места","dashboard.archive":"Архивировать","dashboard.restore":"Восстановить","dashboard.archived":"В архиве","dashboard.status.ongoing":"В процессе","dashboard.status.today":"Сегодня","dashboard.status.tomorrow":"Завтра","dashboard.status.past":"Прошло","dashboard.status.daysLeft":"осталось {count} дн.","dashboard.toast.loadError":"Не удалось загрузить поездки","dashboard.toast.created":"Поездка создана!","dashboard.toast.createError":"Не удалось создать поездку","dashboard.toast.updated":"Поездка обновлена!","dashboard.toast.updateError":"Не удалось обновить поездку","dashboard.toast.deleted":"Поездка удалена","dashboard.toast.deleteError":"Не удалось удалить поездку","dashboard.toast.archived":"Поездка архивирована","dashboard.toast.archiveError":"Не удалось архивировать поездку","dashboard.toast.restored":"Поездка восстановлена","dashboard.toast.restoreError":"Не удалось восстановить поездку","dashboard.confirm.delete":"Удалить поездку «{title}»? Все места и планы будут безвозвратно удалены.","dashboard.editTrip":"Редактировать поездку","dashboard.createTrip":"Создать новую поездку","dashboard.tripTitle":"Название","dashboard.tripTitlePlaceholder":"напр. Лето в Японии","dashboard.tripDescription":"Описание","dashboard.tripDescriptionPlaceholder":"О чём эта поездка?","dashboard.startDate":"Дата начала","dashboard.endDate":"Дата окончания","dashboard.noDateHint":"Дата не указана — будет создано 7 дней по умолчанию. Вы можете изменить это в любое время.","dashboard.coverImage":"Обложка","dashboard.addCoverImage":"Добавить обложку","dashboard.addMembers":"Попутчики","dashboard.addMember":"Добавить участника","dashboard.coverSaved":"Обложка сохранена","dashboard.coverUploadError":"Ошибка загрузки","dashboard.coverRemoveError":"Ошибка удаления","dashboard.titleRequired":"Название обязательно","dashboard.endDateError":"Дата окончания должна быть позже даты начала","settings.title":"Настройки","settings.subtitle":"Настройте свои персональные параметры","settings.map":"Карта","settings.mapTemplate":"Шаблон карты","settings.mapTemplatePlaceholder.select":"Выберите шаблон...","settings.mapDefaultHint":"Оставьте пустым для OpenStreetMap (по умолчанию)","settings.mapTemplatePlaceholder":"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png","settings.mapHint":"URL-шаблон для тайлов карты","settings.latitude":"Широта","settings.longitude":"Долгота","settings.saveMap":"Сохранить карту","settings.apiKeys":"API-ключи","settings.mapsKey":"API-ключ Google Maps","settings.mapsKeyHint":"Для поиска мест. Требуется Places API (New). Получите на console.cloud.google.com","settings.weatherKey":"API-ключ OpenWeatherMap","settings.weatherKeyHint":"Для данных о погоде. Бесплатно на openweathermap.org/api","settings.keyPlaceholder":"Введите ключ...","settings.configured":"Настроено","settings.saveKeys":"Сохранить ключи","settings.display":"Отображение","settings.colorMode":"Цветовая схема","settings.light":"Светлая","settings.dark":"Тёмная","settings.auto":"Авто","settings.language":"Язык","settings.temperature":"Единица температуры","settings.timeFormat":"Формат времени","settings.routeCalculation":"Расчёт маршрута","settings.blurBookingCodes":"Скрыть коды бронирования","settings.notifications":"Уведомления","settings.notifyTripInvite":"Приглашения в поездку","settings.notifyBookingChange":"Изменения бронирований","settings.notifyTripReminder":"Напоминания о поездке","settings.notifyVacayInvite":"Приглашения слияния Vacay","settings.notifyPhotosShared":"Общие фото (Immich)","settings.notifyCollabMessage":"Сообщения чата (Collab)","settings.notifyPackingTagged":"Список вещей: назначения","settings.notifyWebhook":"Webhook-уведомления","settings.notificationsDisabled":"Уведомления не настроены. Попросите администратора включить уведомления по электронной почте или webhook.","settings.notificationsActive":"Активный канал","settings.notificationsManagedByAdmin":"События уведомлений настраиваются администратором.","admin.notifications.title":"Уведомления","admin.notifications.hint":"Выберите канал уведомлений. Одновременно может быть активен только один.","admin.notifications.none":"Отключено","admin.notifications.email":"Эл. почта (SMTP)","admin.notifications.webhook":"Webhook","admin.notifications.events":"События уведомлений","admin.notifications.eventsHint":"Выберите, какие события вызывают уведомления для всех пользователей.","admin.notifications.configureFirst":"Сначала настройте SMTP или webhook ниже, затем включите события.","admin.notifications.save":"Сохранить настройки уведомлений","admin.notifications.saved":"Настройки уведомлений сохранены","admin.notifications.testWebhook":"Отправить тестовый вебхук","admin.notifications.testWebhookSuccess":"Тестовый вебхук успешно отправлен","admin.notifications.testWebhookFailed":"Ошибка отправки тестового вебхука","admin.smtp.title":"Почта и уведомления","admin.smtp.hint":"Конфигурация SMTP для отправки уведомлений по электронной почте.","admin.smtp.testButton":"Отправить тестовое письмо","admin.webhook.hint":"Отправлять уведомления через внешний webhook (Discord, Slack и т.д.).","admin.smtp.testSuccess":"Тестовое письмо успешно отправлено","admin.smtp.testFailed":"Ошибка отправки тестового письма","dayplan.icsTooltip":"Экспорт календаря (ICS)","share.linkTitle":"Публичная ссылка","share.linkHint":"Создайте ссылку, по которой любой сможет просмотреть эту поездку без входа в систему. Только чтение — редактирование невозможно.","share.createLink":"Создать ссылку","share.deleteLink":"Удалить ссылку","share.createError":"Не удалось создать ссылку","common.copy":"Копировать","common.copied":"Скопировано","share.permMap":"Карта и план","share.permBookings":"Бронирования","share.permPacking":"Вещи","shared.expired":"Ссылка устарела или недействительна","shared.expiredHint":"Эта ссылка на поездку больше не активна.","shared.readOnly":"Режим только для чтения","shared.tabPlan":"План","shared.tabBookings":"Бронирования","shared.tabPacking":"Багаж","shared.tabBudget":"Бюджет","shared.tabChat":"Чат","shared.days":"дней","shared.places":"мест","shared.other":"Прочее","shared.totalBudget":"Общий бюджет","shared.messages":"сообщений","shared.sharedVia":"Поделено через","shared.confirmed":"Подтверждено","shared.pending":"Ожидает","share.permBudget":"Бюджет","share.permCollab":"Чат","settings.on":"Вкл.","settings.off":"Выкл.","settings.mcp.title":"Настройка MCP","settings.mcp.endpoint":"MCP-эндпоинт","settings.mcp.clientConfig":"Конфигурация клиента","settings.mcp.clientConfigHint":"Замените на API-токен из списка ниже. Путь к npx может потребовать настройки для вашей системы (например, C:\\PROGRA~1\\nodejs\\npx.cmd в Windows).","settings.mcp.copy":"Копировать","settings.mcp.copied":"Скопировано!","settings.mcp.apiTokens":"API-токены","settings.mcp.createToken":"Создать токен","settings.mcp.noTokens":"Токенов пока нет. Создайте один для подключения MCP-клиентов.","settings.mcp.tokenCreatedAt":"Создан","settings.mcp.tokenUsedAt":"Использован","settings.mcp.deleteTokenTitle":"Удалить токен","settings.mcp.deleteTokenMessage":"Этот токен перестанет работать немедленно. Любой MCP-клиент, использующий его, потеряет доступ.","settings.mcp.modal.createTitle":"Создать API-токен","settings.mcp.modal.tokenName":"Название токена","settings.mcp.modal.tokenNamePlaceholder":"напр. Claude Desktop, Рабочий ноутбук","settings.mcp.modal.creating":"Создание…","settings.mcp.modal.create":"Создать токен","settings.mcp.modal.createdTitle":"Токен создан","settings.mcp.modal.createdWarning":"Этот токен будет показан только один раз. Скопируйте и сохраните его сейчас — восстановить его будет невозможно.","settings.mcp.modal.done":"Готово","settings.mcp.toast.created":"Токен создан","settings.mcp.toast.createError":"Не удалось создать токен","settings.mcp.toast.deleted":"Токен удалён","settings.mcp.toast.deleteError":"Не удалось удалить токен","settings.account":"Аккаунт","settings.username":"Имя пользователя","settings.email":"Эл. почта","settings.role":"Роль","settings.roleAdmin":"Администратор","settings.oidcLinked":"Связан с","settings.changePassword":"Изменить пароль","settings.mustChangePassword":"Вы должны сменить пароль перед продолжением. Пожалуйста, установите новый пароль ниже.","settings.currentPassword":"Текущий пароль","settings.currentPasswordRequired":"Текущий пароль обязателен","settings.newPassword":"Новый пароль","settings.confirmPassword":"Подтвердите новый пароль","settings.updatePassword":"Обновить пароль","settings.passwordRequired":"Введите текущий и новый пароль","settings.passwordTooShort":"Пароль должен содержать не менее 8 символов","settings.passwordMismatch":"Пароли не совпадают","settings.passwordWeak":"Пароль должен содержать заглавные, строчные буквы, цифру и специальный символ","settings.passwordChanged":"Пароль успешно изменён","settings.deleteAccount":"Удалить аккаунт","settings.deleteAccountTitle":"Удалить ваш аккаунт?","settings.deleteAccountWarning":"Ваш аккаунт и все поездки, места и файлы будут безвозвратно удалены. Это действие нельзя отменить.","settings.deleteAccountConfirm":"Удалить безвозвратно","settings.deleteBlockedTitle":"Удаление невозможно","settings.deleteBlockedMessage":"Вы единственный администратор. Назначьте другого пользователя администратором перед удалением своего аккаунта.","settings.roleUser":"Пользователь","settings.saveProfile":"Сохранить профиль","settings.mfa.title":"Двухфакторная аутентификация (2FA)","settings.mfa.description":"Добавляет второй шаг при входе. Используйте приложение-аутентификатор (Google Authenticator, Authy и др.).","settings.mfa.requiredByPolicy":"Администратор требует двухфакторную аутентификацию. Настройте приложение-аутентификатор ниже, прежде чем продолжить.","settings.mfa.backupTitle":"Резервные коды","settings.mfa.backupDescription":"Используйте эти одноразовые коды, если потеряете доступ к приложению-аутентификатору.","settings.mfa.backupWarning":"Сохраните их сейчас. Каждый код можно использовать только один раз.","settings.mfa.backupCopy":"Скопировать коды","settings.mfa.backupDownload":"Скачать TXT","settings.mfa.backupPrint":"Печать / PDF","settings.mfa.backupCopied":"Резервные коды скопированы","settings.mfa.enabled":"2FA включена для вашего аккаунта.","settings.mfa.disabled":"2FA не включена.","settings.mfa.setup":"Настроить аутентификатор","settings.mfa.scanQr":"Отсканируйте QR-код приложением или введите ключ вручную.","settings.mfa.secretLabel":"Секретный ключ (ручной ввод)","settings.mfa.codePlaceholder":"6-значный код","settings.mfa.enable":"Включить 2FA","settings.mfa.cancelSetup":"Отмена","settings.mfa.disableTitle":"Отключить 2FA","settings.mfa.disableHint":"Введите пароль аккаунта и текущий код из аутентификатора.","settings.mfa.disable":"Отключить 2FA","settings.mfa.toastEnabled":"Двухфакторная аутентификация включена","settings.mfa.toastDisabled":"Двухфакторная аутентификация отключена","settings.mfa.demoBlocked":"Недоступно в демо-режиме","settings.toast.mapSaved":"Настройки карты сохранены","settings.toast.keysSaved":"API-ключи сохранены","settings.toast.displaySaved":"Настройки отображения сохранены","settings.toast.profileSaved":"Профиль сохранён","settings.uploadAvatar":"Загрузить фото профиля","settings.removeAvatar":"Удалить фото профиля","settings.avatarUploaded":"Фото профиля обновлено","settings.avatarRemoved":"Фото профиля удалено","settings.avatarError":"Ошибка загрузки","login.error":"Ошибка входа. Проверьте свои учётные данные.","login.tagline":`Ваши поездки. +Tutti i dati attuali verranno sovrascritti.`,"backup.confirm.delete":'Eliminare il backup "{name}"?',"backup.toast.loadError":"Impossibile caricare i backup","backup.toast.created":"Backup creato con successo","backup.toast.createError":"Impossibile creare il backup","backup.toast.restored":"Backup ripristinato. La pagina verrà ricaricata...","backup.toast.restoreError":"Impossibile ripristinare","backup.toast.uploadError":"Impossibile caricare","backup.toast.deleted":"Backup eliminato","backup.toast.deleteError":"Impossibile eliminare","backup.toast.downloadError":"Download non riuscito","backup.toast.settingsSaved":"Impostazioni auto-backup salvate","backup.toast.settingsError":"Impossibile salvare le impostazioni","backup.auto.title":"Auto-Backup","backup.auto.subtitle":"Backup automatico pianificato","backup.auto.enable":"Abilita auto-backup","backup.auto.enableHint":"I backup verranno creati automaticamente in base alla pianificazione scelta","backup.auto.interval":"Intervallo","backup.auto.hour":"Esegui all'ora","backup.auto.hourHint":"Ora locale del server (formato {format})","backup.auto.dayOfWeek":"Giorno della settimana","backup.auto.dayOfMonth":"Giorno del mese","backup.auto.dayOfMonthHint":"Limitato a 1–28 per compatibilità con tutti i mesi","backup.auto.scheduleSummary":"Pianificazione","backup.auto.summaryDaily":"Ogni giorno alle {hour}:00","backup.auto.summaryWeekly":"Ogni {day} alle {hour}:00","backup.auto.summaryMonthly":"Giorno {day} di ogni mese alle {hour}:00","backup.auto.envLocked":"Docker","backup.auto.envLockedHint":"L'auto-backup è configurato tramite variabili d'ambiente Docker. Per modificare queste impostazioni, aggiorna il tuo docker-compose.yml e riavvia il container.","backup.auto.copyEnv":"Copia variabili env Docker","backup.auto.envCopied":"Variabili env Docker copiate negli appunti","backup.auto.keepLabel":"Elimina i vecchi backup dopo","backup.dow.sunday":"Dom","backup.dow.monday":"Lun","backup.dow.tuesday":"Mar","backup.dow.wednesday":"Mer","backup.dow.thursday":"Gio","backup.dow.friday":"Ven","backup.dow.saturday":"Sab","backup.interval.hourly":"Ogni ora","backup.interval.daily":"Giornaliero","backup.interval.weekly":"Settimanale","backup.interval.monthly":"Mensile","backup.keep.1day":"1 giorno","backup.keep.3days":"3 giorni","backup.keep.7days":"7 giorni","backup.keep.14days":"14 giorni","backup.keep.30days":"30 giorni","backup.keep.forever":"Conserva per sempre","photos.allDays":"Tutti i giorni","photos.noPhotos":"Ancora nessuna foto","photos.uploadHint":"Carica le foto del tuo viaggio","photos.clickToSelect":"o clicca per selezionare","photos.linkPlace":"Collega luogo","photos.noPlace":"Nessun luogo","photos.uploadN":"Caricamento di {n} foto","backup.restoreConfirmTitle":"Ripristinare il backup?","backup.restoreWarning":"Tutti i dati attuali (viaggi, luoghi, utenti, caricamenti) verranno sostituiti in modo permanente dal backup. Questa azione non può essere annullata.","backup.restoreTip":"Suggerimento: Crea un backup dello stato attuale prima di ripristinare.","backup.restoreConfirm":"Sì, ripristina","pdf.travelPlan":"Programma di viaggio","pdf.planned":"Programmato","pdf.costLabel":"Costo EUR","pdf.preview":"Anteprima PDF","pdf.saveAsPdf":"Salva come PDF","planner.places":"Luoghi","planner.bookings":"Prenotazioni","planner.packingList":"Lista valigia","planner.documents":"Documenti","planner.dayPlan":"Programma giornaliero","planner.reservations":"Prenotazioni","planner.minTwoPlaces":"Servono almeno 2 luoghi con coordinate","planner.noGeoPlaces":"Nessun luogo con coordinate disponibile","planner.routeCalculated":"Percorso calcolato","planner.routeCalcFailed":"Il percorso non è stato calcolato","planner.routeError":"Errore nel calcolo del percorso","planner.routeOptimized":"Percorso ottimizzato","planner.reservationUpdated":"Prenotazione aggiornata","planner.reservationAdded":"Prenotazione aggiunta","planner.confirmDeleteReservation":"Eliminare la prenotazione?","planner.reservationDeleted":"Prenotazione eliminata","planner.days":"Giorni","planner.allPlaces":"Tutti i luoghi","planner.totalPlaces":"{n} luoghi in totale","planner.noDaysPlanned":"Nessun giorno ancora programmato","planner.editTrip":"Modifica viaggio →","planner.placeOne":"1 luogo","planner.placeN":"{n} luoghi","planner.addNote":"Aggiungi nota","planner.noEntries":"Nessuna voce per questo giorno","planner.addPlace":"Aggiungi luogo/attività","planner.addPlaceShort":"+ Aggiungi luogo/attività","planner.resPending":"Prenotazione in attesa · ","planner.resConfirmed":"Prenotazione confermata · ","planner.notePlaceholder":"Nota…","planner.noteTimePlaceholder":"Ora (opzionale)","planner.noteExamplePlaceholder":"es. S3 alle 14:30 dalla stazione centrale, traghetto dal molo 7, pausa pranzo…","planner.totalCost":"Costo totale","planner.searchPlaces":"Cerca luoghi…","planner.allCategories":"Tutte le categorie","planner.noPlacesFound":"Nessun luogo trovato","planner.addFirstPlace":"Aggiungi primo luogo","planner.noReservations":"Nessuna prenotazione","planner.addFirstReservation":"Aggiungi prima prenotazione","planner.new":"Nuovo","planner.addToDay":"+ Giorno","planner.calculating":"Calcolo in corso…","planner.route":"Percorso","planner.optimize":"Ottimizza","planner.openGoogleMaps":"Apri in Google Maps","planner.selectDayHint":"Seleziona un giorno dall'elenco a sinistra per vedere il programma","planner.noPlacesForDay":"Ancora nessun luogo per questo giorno","planner.addPlacesLink":"Aggiungi luoghi →","planner.minTotal":"min. totali","planner.noReservation":"Nessuna prenotazione","planner.removeFromDay":"Rimuovi dal giorno","planner.addToThisDay":"Aggiungi al giorno","planner.overview":"Panoramica","planner.noDays":"Ancora nessun giorno","planner.editTripToAddDays":"Modifica viaggio per aggiungere giorni","planner.dayCount":"{n} Giorni","planner.clickToUnlock":"Clicca per sbloccare","planner.keepPosition":"Mantieni la posizione durante l'ottimizzazione del percorso","planner.dayDetails":"Dettagli del giorno","planner.dayN":"Giorno {n}","stats.countries":"Paesi","stats.cities":"Città","stats.trips":"Viaggi","stats.places":"Luoghi","stats.worldProgress":"Progresso nel mondo","stats.visited":"visitati","stats.remaining":"rimanenti","stats.visitedCountries":"Paesi visitati","day.precipProb":"Probabilità di pioggia","day.precipitation":"Precipitazioni","day.wind":"Vento","day.sunrise":"Alba","day.sunset":"Tramonto","day.hourlyForecast":"Previsione oraria","day.climateHint":"Medie storiche — previsioni reali disponibili entro 16 giorni da questa data.","day.noWeather":"Nessun dato meteo disponibile. Aggiungi un luogo con coordinate.","day.overview":"Panoramica giornaliera","day.accommodation":"Alloggio","day.addAccommodation":"Aggiungi alloggio","day.hotelDayRange":"Applica ai giorni","day.noPlacesForHotel":"Aggiungi prima i luoghi al tuo viaggio","day.allDays":"Tutti","day.checkIn":"Check-in","day.checkOut":"Check-out","day.confirmation":"Conferma","day.editAccommodation":"Modifica alloggio","day.reservations":"Prenotazioni","memories.title":"Foto","memories.notConnected":"Immich non connesso","memories.notConnectedHint":"Connetti la tua istanza Immich nelle Impostazioni per vedere qui le foto del tuo viaggio.","memories.noDates":"Aggiungi le date al tuo viaggio per caricare le foto.","memories.noPhotos":"Nessuna foto trovata","memories.noPhotosHint":"Nessuna foto trovata in Immich per l'intervallo di date di questo viaggio.","memories.photosFound":"foto","memories.fromOthers":"da altri","memories.sharePhotos":"Condividi foto","memories.sharing":"Condivisione","memories.reviewTitle":"Rivedi le tue foto","memories.reviewHint":"Clicca sulle foto per escluderle dalla condivisione.","memories.shareCount":"Condividi {count} foto","memories.immichUrl":"URL Server Immich","memories.immichApiKey":"Chiave API","memories.testConnection":"Test connessione","memories.testFirst":"Testa prima la connessione","memories.connected":"Connesso","memories.disconnected":"Non connesso","memories.connectionSuccess":"Connesso a Immich","memories.connectionError":"Impossibile connettersi a Immich","memories.saved":"Impostazioni Immich salvate","memories.addPhotos":"Aggiungi foto","memories.linkAlbum":"Collega album","memories.selectAlbum":"Seleziona album Immich","memories.noAlbums":"Nessun album trovato","memories.syncAlbum":"Sincronizza album","memories.unlinkAlbum":"Scollega","memories.photos":"foto","memories.selectPhotos":"Seleziona foto da Immich","memories.selectHint":"Tocca le foto per selezionarle.","memories.selected":"selezionate","memories.addSelected":"Aggiungi {count} foto","memories.alreadyAdded":"Aggiunta","memories.private":"Privato","memories.stopSharing":"Interrompi condivisione","memories.oldest":"Prima le più vecchie","memories.newest":"Prima le più recenti","memories.allLocations":"Tutte le posizioni","memories.tripDates":"Date del viaggio","memories.allPhotos":"Tutte le foto","memories.confirmShareTitle":"Condividere con i membri del viaggio?","memories.confirmShareHint":"{count} foto saranno visibili a tutti i membri di questo viaggio. Potrai rendere private le singole foto in seguito.","memories.confirmShareButton":"Condividi foto","collab.tabs.chat":"Chat","collab.tabs.notes":"Note","collab.tabs.polls":"Sondaggi","collab.whatsNext.title":"Cosa c'è dopo","collab.whatsNext.today":"Oggi","collab.whatsNext.tomorrow":"Domani","collab.whatsNext.empty":"Nessuna attività imminente","collab.whatsNext.until":"a","collab.whatsNext.emptyHint":"Le attività con orari appariranno qui","collab.chat.send":"Invia","collab.chat.placeholder":"Scrivi un messaggio...","collab.chat.empty":"Inizia la conversazione","collab.chat.emptyHint":"I messaggi sono condivisi con tutti i membri del viaggio","collab.chat.emptyDesc":"Condividi idee, programmi e aggiornamenti con il tuo gruppo di viaggio","collab.chat.today":"Oggi","collab.chat.yesterday":"Ieri","collab.chat.deletedMessage":"ha eliminato un messaggio","collab.chat.reply":"Rispondi","collab.chat.loadMore":"Carica messaggi precedenti","collab.chat.justNow":"ora","collab.chat.minutesAgo":"{n}m fa","collab.chat.hoursAgo":"{n}h fa","collab.notes.title":"Note","collab.notes.new":"Nuova nota","collab.notes.empty":"Ancora nessuna nota","collab.notes.emptyHint":"Inizia a raccogliere idee e programmi","collab.notes.all":"Tutte","collab.notes.titlePlaceholder":"Titolo della nota","collab.notes.contentPlaceholder":"Scrivi qualcosa...","collab.notes.categoryPlaceholder":"Categoria","collab.notes.newCategory":"Nuova categoria...","collab.notes.category":"Categoria","collab.notes.noCategory":"Nessuna categoria","collab.notes.color":"Colore","collab.notes.save":"Salva","collab.notes.cancel":"Annulla","collab.notes.edit":"Modifica","collab.notes.delete":"Elimina","collab.notes.pin":"Fissa","collab.notes.unpin":"Rimuovi","collab.notes.daysAgo":"{n}g fa","collab.notes.categorySettings":"Gestisci categorie","collab.notes.create":"Crea","collab.notes.website":"Sito web","collab.notes.websitePlaceholder":"https://...","collab.notes.attachFiles":"Allega file","collab.notes.noCategoriesYet":"Ancora nessuna categoria","collab.notes.emptyDesc":"Crea una nota per iniziare","collab.polls.title":"Sondaggi","collab.polls.new":"Nuovo sondaggio","collab.polls.empty":"Ancora nessun sondaggio","collab.polls.emptyHint":"Chiedi al gruppo e votate insieme","collab.polls.question":"Domanda","collab.polls.questionPlaceholder":"Cosa dovremmo fare?","collab.polls.addOption":"+ Aggiungi opzione","collab.polls.optionPlaceholder":"Opzione {n}","collab.polls.create":"Crea sondaggio","collab.polls.close":"Chiudi","collab.polls.closed":"Chiuso","collab.polls.votes":"{n} voti","collab.polls.vote":"{n} voto","collab.polls.multipleChoice":"Scelta multipla","collab.polls.multiChoice":"Scelta multipla","collab.polls.deadline":"Scadenza","collab.polls.option":"Opzione","collab.polls.options":"Opzioni","collab.polls.delete":"Elimina","collab.polls.closedSection":"Chiusi","admin.tabs.permissions":"Permessi","perm.title":"Impostazioni dei permessi","perm.subtitle":"Controlla chi può eseguire azioni nell'applicazione","perm.saved":"Impostazioni dei permessi salvate","perm.resetDefaults":"Ripristina predefiniti","perm.customized":"personalizzato","perm.level.admin":"Solo amministratore","perm.level.tripOwner":"Proprietario del viaggio","perm.level.tripMember":"Membri del viaggio","perm.level.everybody":"Tutti","perm.cat.trip":"Gestione viaggi","perm.cat.members":"Gestione membri","perm.cat.files":"File","perm.cat.content":"Contenuti e programma","perm.cat.extras":"Budget, bagagli e collaborazione","perm.action.trip_create":"Creare viaggi","perm.action.trip_edit":"Modificare dettagli del viaggio","perm.action.trip_delete":"Eliminare viaggi","perm.action.trip_archive":"Archiviare / dearchiviare viaggi","perm.action.trip_cover_upload":"Caricare immagine di copertina","perm.action.member_manage":"Aggiungere / rimuovere membri","perm.action.file_upload":"Caricare file","perm.action.file_edit":"Modificare metadati dei file","perm.action.file_delete":"Eliminare file","perm.action.place_edit":"Aggiungere / modificare / eliminare luoghi","perm.action.day_edit":"Modificare giorni, note e assegnazioni","perm.action.reservation_edit":"Gestire prenotazioni","perm.action.budget_edit":"Gestire budget","perm.action.packing_edit":"Gestire liste bagagli","perm.action.collab_edit":"Collaborazione (note, sondaggi, chat)","perm.action.share_manage":"Gestire link di condivisione","perm.actionHint.trip_create":"Chi può creare nuovi viaggi","perm.actionHint.trip_edit":"Chi può modificare nome, date, descrizione e valuta del viaggio","perm.actionHint.trip_delete":"Chi può eliminare definitivamente un viaggio","perm.actionHint.trip_archive":"Chi può archiviare o dearchiviare un viaggio","perm.actionHint.trip_cover_upload":"Chi può caricare o modificare l'immagine di copertina","perm.actionHint.member_manage":"Chi può invitare o rimuovere membri del viaggio","perm.actionHint.file_upload":"Chi può caricare file in un viaggio","perm.actionHint.file_edit":"Chi può modificare descrizioni e link dei file","perm.actionHint.file_delete":"Chi può spostare file nel cestino o eliminarli definitivamente","perm.actionHint.place_edit":"Chi può aggiungere, modificare o eliminare luoghi","perm.actionHint.day_edit":"Chi può modificare giorni, note dei giorni e assegnazioni dei luoghi","perm.actionHint.reservation_edit":"Chi può creare, modificare o eliminare prenotazioni","perm.actionHint.budget_edit":"Chi può creare, modificare o eliminare voci di budget","perm.actionHint.packing_edit":"Chi può gestire articoli da bagaglio e borse","perm.actionHint.collab_edit":"Chi può creare note, sondaggi e inviare messaggi","perm.actionHint.share_manage":"Chi può creare o eliminare link di condivisione pubblici"},wM={"common.save":"Сохранить","common.cancel":"Отмена","common.delete":"Удалить","common.edit":"Редактировать","common.add":"Добавить","common.loading":"Загрузка...","common.import":"Импорт","common.error":"Ошибка","common.back":"Назад","common.all":"Все","common.close":"Закрыть","common.open":"Открыть","common.upload":"Загрузить","common.search":"Поиск","common.confirm":"Подтвердить","common.ok":"ОК","common.yes":"Да","common.no":"Нет","common.or":"или","common.none":"Нет","common.date":"Дата","common.rename":"Переименовать","common.name":"Имя","common.email":"Эл. почта","common.password":"Пароль","common.saving":"Сохранение...","common.saved":"Сохранено","trips.reminder":"Напоминание","trips.reminderNone":"Нет","trips.reminderDay":"день","trips.reminderDays":"дней","trips.reminderCustom":"Другое","trips.reminderDaysBefore":"дней до отъезда","trips.reminderDisabledHint":"Напоминания о поездках отключены. Включите их в Админ > Настройки > Уведомления.","common.update":"Обновить","common.change":"Изменить","common.uploading":"Загрузка…","common.backToPlanning":"Вернуться к планированию","common.reset":"Сбросить","nav.trip":"Поездка","nav.share":"Поделиться","nav.settings":"Настройки","nav.admin":"Админ","nav.logout":"Выйти","nav.lightMode":"Светлая тема","nav.darkMode":"Тёмная тема","nav.autoMode":"Авто","nav.administrator":"Администратор","dashboard.title":"Мои поездки","dashboard.subtitle.loading":"Загрузка поездок...","dashboard.subtitle.trips":"{count} поездок ({archived} в архиве)","dashboard.subtitle.empty":"Начните свою первую поездку","dashboard.subtitle.activeOne":"{count} активная поездка","dashboard.subtitle.activeMany":"{count} активных поездок","dashboard.subtitle.archivedSuffix":" · {count} в архиве","dashboard.newTrip":"Новая поездка","dashboard.gridView":"Плитка","dashboard.listView":"Список","dashboard.currency":"Валюта","dashboard.timezone":"Часовые пояса","dashboard.localTime":"Местное","dashboard.timezoneCustomTitle":"Свой часовой пояс","dashboard.timezoneCustomLabelPlaceholder":"Название (необязательно)","dashboard.timezoneCustomTzPlaceholder":"напр. America/New_York","dashboard.timezoneCustomAdd":"Добавить","dashboard.timezoneCustomErrorEmpty":"Введите идентификатор часового пояса","dashboard.timezoneCustomErrorInvalid":"Неверный часовой пояс. Используйте формат Europe/Berlin","dashboard.timezoneCustomErrorDuplicate":"Уже добавлен","dashboard.emptyTitle":"Нет поездок","dashboard.emptyText":"Создайте свою первую поездку и начните планировать!","dashboard.emptyButton":"Создать первую поездку","dashboard.nextTrip":"Следующая поездка","dashboard.shared":"Общая","dashboard.sharedBy":"Поделился {name}","dashboard.days":"Дни","dashboard.places":"Места","dashboard.archive":"Архивировать","dashboard.restore":"Восстановить","dashboard.archived":"В архиве","dashboard.status.ongoing":"В процессе","dashboard.status.today":"Сегодня","dashboard.status.tomorrow":"Завтра","dashboard.status.past":"Прошло","dashboard.status.daysLeft":"осталось {count} дн.","dashboard.toast.loadError":"Не удалось загрузить поездки","dashboard.toast.created":"Поездка создана!","dashboard.toast.createError":"Не удалось создать поездку","dashboard.toast.updated":"Поездка обновлена!","dashboard.toast.updateError":"Не удалось обновить поездку","dashboard.toast.deleted":"Поездка удалена","dashboard.toast.deleteError":"Не удалось удалить поездку","dashboard.toast.archived":"Поездка архивирована","dashboard.toast.archiveError":"Не удалось архивировать поездку","dashboard.toast.restored":"Поездка восстановлена","dashboard.toast.restoreError":"Не удалось восстановить поездку","dashboard.confirm.delete":"Удалить поездку «{title}»? Все места и планы будут безвозвратно удалены.","dashboard.editTrip":"Редактировать поездку","dashboard.createTrip":"Создать новую поездку","dashboard.tripTitle":"Название","dashboard.tripTitlePlaceholder":"напр. Лето в Японии","dashboard.tripDescription":"Описание","dashboard.tripDescriptionPlaceholder":"О чём эта поездка?","dashboard.startDate":"Дата начала","dashboard.endDate":"Дата окончания","dashboard.noDateHint":"Дата не указана — будет создано 7 дней по умолчанию. Вы можете изменить это в любое время.","dashboard.coverImage":"Обложка","dashboard.addCoverImage":"Добавить обложку","dashboard.addMembers":"Попутчики","dashboard.addMember":"Добавить участника","dashboard.coverSaved":"Обложка сохранена","dashboard.coverUploadError":"Ошибка загрузки","dashboard.coverRemoveError":"Ошибка удаления","dashboard.titleRequired":"Название обязательно","dashboard.endDateError":"Дата окончания должна быть позже даты начала","settings.title":"Настройки","settings.subtitle":"Настройте свои персональные параметры","settings.map":"Карта","settings.mapTemplate":"Шаблон карты","settings.mapTemplatePlaceholder.select":"Выберите шаблон...","settings.mapDefaultHint":"Оставьте пустым для OpenStreetMap (по умолчанию)","settings.mapTemplatePlaceholder":"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png","settings.mapHint":"URL-шаблон для тайлов карты","settings.latitude":"Широта","settings.longitude":"Долгота","settings.saveMap":"Сохранить карту","settings.apiKeys":"API-ключи","settings.mapsKey":"API-ключ Google Maps","settings.mapsKeyHint":"Для поиска мест. Требуется Places API (New). Получите на console.cloud.google.com","settings.weatherKey":"API-ключ OpenWeatherMap","settings.weatherKeyHint":"Для данных о погоде. Бесплатно на openweathermap.org/api","settings.keyPlaceholder":"Введите ключ...","settings.configured":"Настроено","settings.saveKeys":"Сохранить ключи","settings.display":"Отображение","settings.colorMode":"Цветовая схема","settings.light":"Светлая","settings.dark":"Тёмная","settings.auto":"Авто","settings.language":"Язык","settings.temperature":"Единица температуры","settings.timeFormat":"Формат времени","settings.routeCalculation":"Расчёт маршрута","settings.blurBookingCodes":"Скрыть коды бронирования","settings.notifications":"Уведомления","settings.notifyTripInvite":"Приглашения в поездку","settings.notifyBookingChange":"Изменения бронирований","settings.notifyTripReminder":"Напоминания о поездке","settings.notifyVacayInvite":"Приглашения слияния Vacay","settings.notifyPhotosShared":"Общие фото (Immich)","settings.notifyCollabMessage":"Сообщения чата (Collab)","settings.notifyPackingTagged":"Список вещей: назначения","settings.notifyWebhook":"Webhook-уведомления","settings.notificationsDisabled":"Уведомления не настроены. Попросите администратора включить уведомления по электронной почте или webhook.","settings.notificationsActive":"Активный канал","settings.notificationsManagedByAdmin":"События уведомлений настраиваются администратором.","admin.notifications.title":"Уведомления","admin.notifications.hint":"Выберите канал уведомлений. Одновременно может быть активен только один.","admin.notifications.none":"Отключено","admin.notifications.email":"Эл. почта (SMTP)","admin.notifications.webhook":"Webhook","admin.notifications.events":"События уведомлений","admin.notifications.eventsHint":"Выберите, какие события вызывают уведомления для всех пользователей.","admin.notifications.configureFirst":"Сначала настройте SMTP или webhook ниже, затем включите события.","admin.notifications.save":"Сохранить настройки уведомлений","admin.notifications.saved":"Настройки уведомлений сохранены","admin.notifications.testWebhook":"Отправить тестовый вебхук","admin.notifications.testWebhookSuccess":"Тестовый вебхук успешно отправлен","admin.notifications.testWebhookFailed":"Ошибка отправки тестового вебхука","admin.smtp.title":"Почта и уведомления","admin.smtp.hint":"Конфигурация SMTP для отправки уведомлений по электронной почте.","admin.smtp.testButton":"Отправить тестовое письмо","admin.webhook.hint":"Отправлять уведомления через внешний webhook (Discord, Slack и т.д.).","admin.smtp.testSuccess":"Тестовое письмо успешно отправлено","admin.smtp.testFailed":"Ошибка отправки тестового письма","dayplan.icsTooltip":"Экспорт календаря (ICS)","share.linkTitle":"Публичная ссылка","share.linkHint":"Создайте ссылку, по которой любой сможет просмотреть эту поездку без входа в систему. Только чтение — редактирование невозможно.","share.createLink":"Создать ссылку","share.deleteLink":"Удалить ссылку","share.createError":"Не удалось создать ссылку","common.copy":"Копировать","common.copied":"Скопировано","share.permMap":"Карта и план","share.permBookings":"Бронирования","share.permPacking":"Вещи","shared.expired":"Ссылка устарела или недействительна","shared.expiredHint":"Эта ссылка на поездку больше не активна.","shared.readOnly":"Режим только для чтения","shared.tabPlan":"План","shared.tabBookings":"Бронирования","shared.tabPacking":"Багаж","shared.tabBudget":"Бюджет","shared.tabChat":"Чат","shared.days":"дней","shared.places":"мест","shared.other":"Прочее","shared.totalBudget":"Общий бюджет","shared.messages":"сообщений","shared.sharedVia":"Поделено через","shared.confirmed":"Подтверждено","shared.pending":"Ожидает","share.permBudget":"Бюджет","share.permCollab":"Чат","settings.on":"Вкл.","settings.off":"Выкл.","settings.mcp.title":"Настройка MCP","settings.mcp.endpoint":"MCP-эндпоинт","settings.mcp.clientConfig":"Конфигурация клиента","settings.mcp.clientConfigHint":"Замените на API-токен из списка ниже. Путь к npx может потребовать настройки для вашей системы (например, C:\\PROGRA~1\\nodejs\\npx.cmd в Windows).","settings.mcp.copy":"Копировать","settings.mcp.copied":"Скопировано!","settings.mcp.apiTokens":"API-токены","settings.mcp.createToken":"Создать токен","settings.mcp.noTokens":"Токенов пока нет. Создайте один для подключения MCP-клиентов.","settings.mcp.tokenCreatedAt":"Создан","settings.mcp.tokenUsedAt":"Использован","settings.mcp.deleteTokenTitle":"Удалить токен","settings.mcp.deleteTokenMessage":"Этот токен перестанет работать немедленно. Любой MCP-клиент, использующий его, потеряет доступ.","settings.mcp.modal.createTitle":"Создать API-токен","settings.mcp.modal.tokenName":"Название токена","settings.mcp.modal.tokenNamePlaceholder":"напр. Claude Desktop, Рабочий ноутбук","settings.mcp.modal.creating":"Создание…","settings.mcp.modal.create":"Создать токен","settings.mcp.modal.createdTitle":"Токен создан","settings.mcp.modal.createdWarning":"Этот токен будет показан только один раз. Скопируйте и сохраните его сейчас — восстановить его будет невозможно.","settings.mcp.modal.done":"Готово","settings.mcp.toast.created":"Токен создан","settings.mcp.toast.createError":"Не удалось создать токен","settings.mcp.toast.deleted":"Токен удалён","settings.mcp.toast.deleteError":"Не удалось удалить токен","settings.account":"Аккаунт","settings.username":"Имя пользователя","settings.email":"Эл. почта","settings.role":"Роль","settings.roleAdmin":"Администратор","settings.oidcLinked":"Связан с","settings.changePassword":"Изменить пароль","settings.mustChangePassword":"Вы должны сменить пароль перед продолжением. Пожалуйста, установите новый пароль ниже.","settings.currentPassword":"Текущий пароль","settings.currentPasswordRequired":"Текущий пароль обязателен","settings.newPassword":"Новый пароль","settings.confirmPassword":"Подтвердите новый пароль","settings.updatePassword":"Обновить пароль","settings.passwordRequired":"Введите текущий и новый пароль","settings.passwordTooShort":"Пароль должен содержать не менее 8 символов","settings.passwordMismatch":"Пароли не совпадают","settings.passwordWeak":"Пароль должен содержать заглавные, строчные буквы, цифру и специальный символ","settings.passwordChanged":"Пароль успешно изменён","settings.deleteAccount":"Удалить аккаунт","settings.deleteAccountTitle":"Удалить ваш аккаунт?","settings.deleteAccountWarning":"Ваш аккаунт и все поездки, места и файлы будут безвозвратно удалены. Это действие нельзя отменить.","settings.deleteAccountConfirm":"Удалить безвозвратно","settings.deleteBlockedTitle":"Удаление невозможно","settings.deleteBlockedMessage":"Вы единственный администратор. Назначьте другого пользователя администратором перед удалением своего аккаунта.","settings.roleUser":"Пользователь","settings.saveProfile":"Сохранить профиль","settings.mfa.title":"Двухфакторная аутентификация (2FA)","settings.mfa.description":"Добавляет второй шаг при входе. Используйте приложение-аутентификатор (Google Authenticator, Authy и др.).","settings.mfa.requiredByPolicy":"Администратор требует двухфакторную аутентификацию. Настройте приложение-аутентификатор ниже, прежде чем продолжить.","settings.mfa.backupTitle":"Резервные коды","settings.mfa.backupDescription":"Используйте эти одноразовые коды, если потеряете доступ к приложению-аутентификатору.","settings.mfa.backupWarning":"Сохраните их сейчас. Каждый код можно использовать только один раз.","settings.mfa.backupCopy":"Скопировать коды","settings.mfa.backupDownload":"Скачать TXT","settings.mfa.backupPrint":"Печать / PDF","settings.mfa.backupCopied":"Резервные коды скопированы","settings.mfa.enabled":"2FA включена для вашего аккаунта.","settings.mfa.disabled":"2FA не включена.","settings.mfa.setup":"Настроить аутентификатор","settings.mfa.scanQr":"Отсканируйте QR-код приложением или введите ключ вручную.","settings.mfa.secretLabel":"Секретный ключ (ручной ввод)","settings.mfa.codePlaceholder":"6-значный код","settings.mfa.enable":"Включить 2FA","settings.mfa.cancelSetup":"Отмена","settings.mfa.disableTitle":"Отключить 2FA","settings.mfa.disableHint":"Введите пароль аккаунта и текущий код из аутентификатора.","settings.mfa.disable":"Отключить 2FA","settings.mfa.toastEnabled":"Двухфакторная аутентификация включена","settings.mfa.toastDisabled":"Двухфакторная аутентификация отключена","settings.mfa.demoBlocked":"Недоступно в демо-режиме","settings.toast.mapSaved":"Настройки карты сохранены","settings.toast.keysSaved":"API-ключи сохранены","settings.toast.displaySaved":"Настройки отображения сохранены","settings.toast.profileSaved":"Профиль сохранён","settings.uploadAvatar":"Загрузить фото профиля","settings.removeAvatar":"Удалить фото профиля","settings.avatarUploaded":"Фото профиля обновлено","settings.avatarRemoved":"Фото профиля удалено","settings.avatarError":"Ошибка загрузки","login.error":"Ошибка входа. Проверьте свои учётные данные.","login.tagline":`Ваши поездки. Ваш план.`,"login.description":"Планируйте поездки совместно с интерактивными картами, бюджетами и синхронизацией в реальном времени.","login.features.maps":"Интерактивные карты","login.features.mapsDesc":"Google Places, маршруты и кластеризация","login.features.realtime":"Синхронизация в реальном времени","login.features.realtimeDesc":"Планируйте вместе через WebSocket","login.features.budget":"Контроль бюджета","login.features.budgetDesc":"Категории, графики и расходы на человека","login.features.collab":"Совместная работа","login.features.collabDesc":"Многопользовательский режим с общими поездками","login.features.packing":"Списки вещей","login.features.packingDesc":"Категории, прогресс и подсказки","login.features.bookings":"Бронирования","login.features.bookingsDesc":"Авиабилеты, отели, рестораны и многое другое","login.features.files":"Документы","login.features.filesDesc":"Загружайте и управляйте документами","login.features.routes":"Умные маршруты","login.features.routesDesc":"Автооптимизация и экспорт в Google Maps","login.selfHosted":"Самостоятельный хостинг · Открытый код · Ваши данные остаются у вас","login.title":"Вход","login.subtitle":"С возвращением","login.signingIn":"Вход…","login.signIn":"Войти","login.createAdmin":"Создать аккаунт администратора","login.createAdminHint":"Настройте первый аккаунт администратора для TREK.","login.setNewPassword":"Установить новый пароль","login.setNewPasswordHint":"Вы должны сменить пароль, прежде чем продолжить.","login.createAccount":"Создать аккаунт","login.createAccountHint":"Зарегистрируйте новый аккаунт.","login.creating":"Создание…","login.noAccount":"Нет аккаунта?","login.hasAccount":"Уже есть аккаунт?","login.register":"Регистрация","login.emailPlaceholder":"ваш@email.com","login.username":"Имя пользователя","login.oidc.registrationDisabled":"Регистрация отключена. Обратитесь к администратору.","login.oidc.noEmail":"Провайдер не предоставил адрес эл. почты.","login.mfaTitle":"Двухфакторная аутентификация","login.mfaSubtitle":"Введите 6-значный код из приложения-аутентификатора.","login.mfaCodeLabel":"Код подтверждения","login.mfaCodeRequired":"Введите код из приложения-аутентификатора.","login.mfaHint":"Откройте Google Authenticator, Authy или другое TOTP-приложение.","login.mfaBack":"← Назад к входу","login.mfaVerify":"Подтвердить","login.oidc.tokenFailed":"Аутентификация не удалась.","login.oidc.invalidState":"Недействительная сессия. Попробуйте снова.","login.demoFailed":"Ошибка демо-входа","login.oidcSignIn":"Войти через {name}","login.oidcOnly":"Вход по паролю отключён. Используйте вашего провайдера SSO для входа.","login.demoHint":"Попробуйте демо — регистрация не требуется","register.passwordMismatch":"Пароли не совпадают","register.passwordTooShort":"Пароль должен содержать не менее 8 символов","register.failed":"Ошибка регистрации","register.getStarted":"Начать","register.subtitle":"Создайте аккаунт и начните планировать поездки мечты.","register.feature1":"Неограниченные планы поездок","register.feature2":"Интерактивная карта","register.feature3":"Управление местами и категориями","register.feature4":"Отслеживание бронирований","register.feature5":"Создание списков вещей","register.feature6":"Хранение фото и файлов","register.createAccount":"Создать аккаунт","register.startPlanning":"Начните планировать свои поездки","register.minChars":"Мин. 6 символов","register.confirmPassword":"Подтвердите пароль","register.repeatPassword":"Повторите пароль","register.registering":"Регистрация...","register.register":"Зарегистрироваться","register.hasAccount":"Уже есть аккаунт?","register.signIn":"Войти","admin.title":"Администрирование","admin.subtitle":"Управление пользователями и системные настройки","admin.tabs.users":"Пользователи","admin.tabs.categories":"Категории","admin.tabs.backup":"Резервная копия","admin.tabs.audit":"Журнал аудита","admin.stats.users":"Пользователи","admin.stats.trips":"Поездки","admin.stats.places":"Места","admin.stats.photos":"Фото","admin.stats.files":"Файлы","admin.table.user":"Пользователь","admin.table.email":"Эл. почта","admin.table.role":"Роль","admin.table.created":"Создан","admin.table.lastLogin":"Последний вход","admin.table.actions":"Действия","admin.you":"(Вы)","admin.editUser":"Редактировать пользователя","admin.newPassword":"Новый пароль","admin.newPasswordHint":"Оставьте пустым, чтобы сохранить текущий пароль","admin.deleteUser":"Удалить пользователя «{name}»? Все поездки будут безвозвратно удалены.","admin.deleteUserTitle":"Удалить пользователя","admin.newPasswordPlaceholder":"Введите новый пароль…","admin.toast.loadError":"Не удалось загрузить данные администрирования","admin.toast.userUpdated":"Пользователь обновлён","admin.toast.updateError":"Ошибка обновления","admin.toast.userDeleted":"Пользователь удалён","admin.toast.deleteError":"Ошибка удаления","admin.toast.cannotDeleteSelf":"Нельзя удалить собственный аккаунт","admin.toast.userCreated":"Пользователь создан","admin.toast.createError":"Ошибка создания пользователя","admin.toast.fieldsRequired":"Имя пользователя, эл. почта и пароль обязательны","admin.createUser":"Создать пользователя","admin.invite.title":"Ссылки-приглашения","admin.invite.subtitle":"Создание одноразовых ссылок для регистрации","admin.invite.create":"Создать ссылку","admin.invite.createAndCopy":"Создать и скопировать","admin.invite.empty":"Ссылки-приглашения ещё не созданы","admin.invite.maxUses":"Макс. использований","admin.invite.expiry":"Действует","admin.invite.uses":"использовано","admin.invite.expiresAt":"истекает","admin.invite.createdBy":"от","admin.invite.active":"Активна","admin.invite.expired":"Истекла","admin.invite.usedUp":"Исчерпана","admin.invite.copied":"Ссылка-приглашение скопирована","admin.invite.copyLink":"Копировать ссылку","admin.invite.deleted":"Ссылка-приглашение удалена","admin.invite.createError":"Ошибка при создании ссылки","admin.invite.deleteError":"Ошибка при удалении ссылки","admin.tabs.settings":"Настройки","admin.allowRegistration":"Разрешить регистрацию","admin.allowRegistrationHint":"Новые пользователи могут регистрироваться самостоятельно","admin.requireMfa":"Требовать двухфакторную аутентификацию (2FA)","admin.requireMfaHint":"Пользователи без 2FA должны завершить настройку в разделе «Настройки» перед использованием приложения.","admin.apiKeys":"API-ключи","admin.apiKeysHint":"Необязательно. Включает расширенные данные о местах, такие как фото и погода.","admin.mapsKey":"API-ключ Google Maps","admin.mapsKeyHint":"Необходим для поиска мест. Получите на console.cloud.google.com","admin.mapsKeyHintLong":"Без API-ключа используется OpenStreetMap для поиска мест. С ключом Google API можно загружать фото, рейтинги и часы работы. Получите ключ на console.cloud.google.com.","admin.recommended":"Рекомендуется","admin.weatherKey":"API-ключ OpenWeatherMap","admin.weatherKeyHint":"Для данных о погоде. Бесплатно на openweathermap.org","admin.validateKey":"Проверить","admin.keyValid":"Подключено","admin.keyInvalid":"Недействителен","admin.keySaved":"API-ключи сохранены","admin.oidcTitle":"Единый вход (OIDC)","admin.oidcSubtitle":"Разрешить вход через внешних провайдеров, таких как Google, Apple, Authentik или Keycloak.","admin.oidcDisplayName":"Отображаемое имя","admin.oidcIssuer":"URL издателя","admin.oidcIssuerHint":"URL издателя OpenID Connect провайдера. Напр. https://accounts.google.com","admin.oidcSaved":"Конфигурация OIDC сохранена","admin.oidcOnlyMode":"Отключить вход по паролю","admin.oidcOnlyModeHint":"При включении разрешён только вход через SSO. Вход и регистрация по паролю будут заблокированы.","admin.fileTypes":"Разрешённые типы файлов","admin.fileTypesHint":"Настройте, какие типы файлов могут загружать пользователи.","admin.fileTypesFormat":"Расширения через запятую (напр. jpg,png,pdf,doc). Используйте * для разрешения всех типов.","admin.fileTypesSaved":"Настройки типов файлов сохранены","admin.bagTracking.title":"Отслеживание багажа","admin.bagTracking.subtitle":"Включить вес и привязку к багажу для вещей","admin.tabs.config":"Конфигурация","admin.tabs.templates":"Шаблоны упаковки","admin.packingTemplates.title":"Шаблоны упаковки","admin.packingTemplates.subtitle":"Создавайте многоразовые списки вещей для поездок","admin.packingTemplates.create":"Новый шаблон","admin.packingTemplates.namePlaceholder":"Название шаблона (напр. Пляжный отдых)","admin.packingTemplates.empty":"Шаблоны ещё не созданы","admin.packingTemplates.items":"вещей","admin.packingTemplates.categories":"категорий","admin.packingTemplates.itemName":"Название вещи","admin.packingTemplates.itemCategory":"Категория","admin.packingTemplates.categoryName":"Название категории (напр. Одежда)","admin.packingTemplates.addCategory":"Добавить категорию","admin.packingTemplates.created":"Шаблон создан","admin.packingTemplates.deleted":"Шаблон удалён","admin.packingTemplates.loadError":"Ошибка загрузки шаблонов","admin.packingTemplates.createError":"Ошибка создания шаблона","admin.packingTemplates.deleteError":"Ошибка удаления шаблона","admin.packingTemplates.saveError":"Ошибка сохранения","admin.tabs.addons":"Дополнения","admin.addons.title":"Дополнения","admin.addons.subtitle":"Включайте или отключайте функции для настройки TREK под себя.","admin.addons.catalog.memories.name":"Фото (Immich)","admin.addons.catalog.memories.description":"Делитесь фотографиями из поездок через Immich","admin.addons.catalog.mcp.name":"MCP","admin.addons.catalog.mcp.description":"Протокол контекста модели для интеграции с ИИ-ассистентами","admin.addons.catalog.packing.name":"Сборы","admin.addons.catalog.packing.description":"Чек-листы для подготовки багажа к каждой поездке","admin.addons.catalog.budget.name":"Бюджет","admin.addons.catalog.budget.description":"Отслеживайте расходы и планируйте бюджет поездки","admin.addons.catalog.documents.name":"Документы","admin.addons.catalog.documents.description":"Храните и управляйте документами для путешествий","admin.addons.catalog.vacay.name":"Vacay","admin.addons.catalog.vacay.description":"Личный планировщик отпусков с календарём","admin.addons.catalog.atlas.name":"Atlas","admin.addons.catalog.atlas.description":"Карта мира с посещёнными странами и статистикой путешествий","admin.addons.catalog.collab.name":"Collab","admin.addons.catalog.collab.description":"Заметки в реальном времени, опросы и чат для планирования поездок","admin.addons.subtitleBefore":"Включайте или отключайте функции для настройки ","admin.addons.subtitleAfter":" под себя.","admin.addons.enabled":"Включено","admin.addons.disabled":"Отключено","admin.addons.type.trip":"Поездка","admin.addons.type.global":"Глобально","admin.addons.type.integration":"Интеграция","admin.addons.tripHint":"Доступно как вкладка внутри каждой поездки","admin.addons.globalHint":"Доступно как отдельный раздел в основной навигации","admin.addons.integrationHint":"Фоновые сервисы и API-интеграции без отдельной страницы","admin.addons.toast.updated":"Дополнение обновлено","admin.addons.toast.error":"Не удалось обновить дополнение","admin.addons.noAddons":"Нет доступных дополнений","admin.weather.title":"Данные о погоде","admin.weather.badge":"С 24 марта 2026","admin.weather.description":"TREK использует Open-Meteo как источник данных о погоде. Open-Meteo — бесплатный сервис с открытым кодом, API-ключ не требуется.","admin.weather.forecast":"Прогноз на 16 дней","admin.weather.forecastDesc":"Ранее 5 дней (OpenWeatherMap)","admin.weather.climate":"Исторические климатические данные","admin.weather.climateDesc":"Средние значения за последние 85 лет для дней за пределами 16-дневного прогноза","admin.weather.requests":"10 000 запросов / день","admin.weather.requestsDesc":"Бесплатно, API-ключ не требуется","admin.weather.locationHint":"Погода основана на первом месте с координатами в каждом дне. Если ни одно место не назначено на день, в качестве ориентира используется любое место из списка.","admin.tabs.mcpTokens":"MCP-токены","admin.mcpTokens.title":"MCP-токены","admin.mcpTokens.subtitle":"Управление API-токенами всех пользователей","admin.mcpTokens.owner":"Владелец","admin.mcpTokens.tokenName":"Название токена","admin.mcpTokens.created":"Создан","admin.mcpTokens.lastUsed":"Последнее использование","admin.mcpTokens.never":"Никогда","admin.mcpTokens.empty":"MCP-токены ещё не созданы","admin.mcpTokens.deleteTitle":"Удалить токен","admin.mcpTokens.deleteMessage":"Токен будет немедленно отозван. Пользователь потеряет доступ к MCP через этот токен.","admin.mcpTokens.deleteSuccess":"Токен удалён","admin.mcpTokens.deleteError":"Не удалось удалить токен","admin.mcpTokens.loadError":"Не удалось загрузить токены","admin.tabs.github":"GitHub","admin.audit.subtitle":"События, связанные с безопасностью и администрированием (резервные копии, пользователи, MFA, настройки).","admin.audit.empty":"Записей аудита пока нет.","admin.audit.refresh":"Обновить","admin.audit.loadMore":"Загрузить ещё","admin.audit.showing":"Загружено: {count} · всего {total}","admin.audit.col.time":"Время","admin.audit.col.user":"Пользователь","admin.audit.col.action":"Действие","admin.audit.col.resource":"Объект","admin.audit.col.ip":"IP","admin.audit.col.details":"Подробности","admin.github.title":"История релизов","admin.github.subtitle":"Последние обновления из {repo}","admin.github.latest":"Последний","admin.github.prerelease":"Пре-релиз","admin.github.showDetails":"Показать подробности","admin.github.hideDetails":"Скрыть подробности","admin.github.loadMore":"Загрузить ещё","admin.github.loading":"Загрузка...","admin.github.support":"Помогает продолжать разработку TREK","admin.github.error":"Не удалось загрузить релизы","admin.github.by":"от","admin.update.available":"Доступно обновление","admin.update.text":"Доступна версия TREK {version}. У вас установлена {current}.","admin.update.button":"Посмотреть на GitHub","admin.update.install":"Установить обновление","admin.update.confirmTitle":"Установить обновление?","admin.update.confirmText":"TREK будет обновлён с {current} до {version}. Сервер перезапустится автоматически.","admin.update.dataInfo":"Все ваши данные (поездки, пользователи, API-ключи, загрузки, Vacay, Atlas, бюджеты) будут сохранены.","admin.update.warning":"Приложение будет кратковременно недоступно во время перезапуска.","admin.update.confirm":"Обновить сейчас","admin.update.installing":"Обновление…","admin.update.success":"Обновление установлено! Сервер перезапускается…","admin.update.failed":"Ошибка обновления","admin.update.backupHint":"Рекомендуем создать резервную копию перед обновлением.","admin.update.backupLink":"Перейти к резервным копиям","admin.update.howTo":"Как обновить","admin.update.dockerText":"Ваш экземпляр TREK работает в Docker. Для обновления до {version} выполните следующие команды на сервере:","admin.update.reloadHint":"Перезагрузите страницу через несколько секунд.","vacay.subtitle":"Планируйте и управляйте днями отпуска","vacay.settings":"Настройки","vacay.year":"Год","vacay.addYear":"Добавить год","vacay.removeYear":"Удалить год","vacay.removeYearConfirm":"Удалить {year}?","vacay.removeYearHint":"Все записи об отпуске и корпоративные выходные за этот год будут безвозвратно удалены.","vacay.remove":"Удалить","vacay.persons":"Люди","vacay.noPersons":"Никто не добавлен","vacay.addPerson":"Добавить человека","vacay.editPerson":"Редактировать","vacay.removePerson":"Удалить человека","vacay.removePersonConfirm":"Удалить {name}?","vacay.removePersonHint":"Все записи об отпуске этого человека будут безвозвратно удалены.","vacay.personName":"Имя","vacay.personNamePlaceholder":"Введите имя","vacay.color":"Цвет","vacay.add":"Добавить","vacay.legend":"Легенда","vacay.publicHoliday":"Государственный праздник","vacay.companyHoliday":"Корпоративный выходной","vacay.weekend":"Выходные","vacay.modeVacation":"Отпуск","vacay.modeCompany":"Корпоративный выходной","vacay.entitlement":"Право на отпуск","vacay.entitlementDays":"Дни","vacay.used":"Использовано","vacay.remaining":"Осталось","vacay.carriedOver":"из {year}","vacay.blockWeekends":"Блокировать выходные","vacay.blockWeekendsHint":"Запретить записи об отпуске в субботу и воскресенье","vacay.weekendDays":"Выходные дни","vacay.mon":"Пн","vacay.tue":"Вт","vacay.wed":"Ср","vacay.thu":"Чт","vacay.fri":"Пт","vacay.sat":"Сб","vacay.sun":"Вс","vacay.publicHolidays":"Государственные праздники","vacay.publicHolidaysHint":"Отмечать государственные праздники в календаре","vacay.selectCountry":"Выберите страну","vacay.selectRegion":"Выберите регион (необязательно)","vacay.companyHolidays":"Корпоративные выходные","vacay.companyHolidaysHint":"Разрешить отмечать корпоративные выходные дни","vacay.companyHolidaysNoDeduct":"Корпоративные выходные не вычитаются из дней отпуска.","vacay.carryOver":"Перенос","vacay.carryOverHint":"Автоматически переносить оставшиеся дни отпуска на следующий год","vacay.sharing":"Общий доступ","vacay.sharingHint":"Поделитесь планом отпуска с другими пользователями TREK","vacay.owner":"Владелец","vacay.shareEmailPlaceholder":"Эл. почта пользователя TREK","vacay.shareSuccess":"План успешно предоставлен","vacay.shareError":"Не удалось поделиться планом","vacay.dissolve":"Разделить объединение","vacay.dissolveHint":"Снова разделить календари. Ваши записи будут сохранены.","vacay.dissolveAction":"Разделить","vacay.dissolved":"Календарь разделён","vacay.fusedWith":"Объединён с","vacay.you":"вы","vacay.noData":"Нет данных","vacay.changeColor":"Изменить цвет","vacay.inviteUser":"Пригласить пользователя","vacay.inviteHint":"Пригласите другого пользователя TREK для совместного календаря отпусков.","vacay.selectUser":"Выберите пользователя","vacay.sendInvite":"Отправить приглашение","vacay.inviteSent":"Приглашение отправлено","vacay.inviteError":"Не удалось отправить приглашение","vacay.pending":"ожидание","vacay.noUsersAvailable":"Нет доступных пользователей","vacay.accept":"Принять","vacay.decline":"Отклонить","vacay.acceptFusion":"Принять и объединить","vacay.inviteTitle":"Запрос на объединение","vacay.inviteWantsToFuse":"хочет объединить календарь отпусков с вами.","vacay.fuseInfo1":"Вы оба будете видеть все записи об отпуске в одном общем календаре.","vacay.fuseInfo2":"Обе стороны могут создавать и редактировать записи друг для друга.","vacay.fuseInfo3":"Обе стороны могут удалять записи и изменять право на отпуск.","vacay.fuseInfo4":"Настройки, такие как праздники и корпоративные выходные, становятся общими.","vacay.fuseInfo5":"Объединение можно отменить в любое время любой из сторон. Ваши записи будут сохранены.","vacay.addCalendar":"Добавить календарь","vacay.calendarColor":"Цвет","vacay.calendarLabel":"Название","vacay.noCalendars":"Нет календарей","nav.myTrips":"Мои поездки","atlas.subtitle":"Ваш след путешествий по всему миру","atlas.countries":"Страны","atlas.trips":"Поездки","atlas.places":"Места","atlas.days":"Дни","atlas.visitedCountries":"Посещённые страны","atlas.cities":"Города","atlas.noData":"Данных о поездках пока нет","atlas.noDataHint":"Создайте поездку и добавьте места, чтобы увидеть карту мира","atlas.lastTrip":"Последняя поездка","atlas.nextTrip":"Следующая поездка","atlas.daysLeft":"дней осталось","atlas.streak":"Серия","atlas.year":"год","atlas.years":"лет","atlas.yearInRow":"год подряд","atlas.yearsInRow":"лет подряд","atlas.tripIn":"поездка в","atlas.tripsIn":"поездок в","atlas.since":"с","atlas.europe":"Европа","atlas.asia":"Азия","atlas.northAmerica":"Сев. Америка","atlas.southAmerica":"Юж. Америка","atlas.africa":"Африка","atlas.oceania":"Океания","atlas.other":"Другое","atlas.firstVisit":"Первая поездка","atlas.lastVisitLabel":"Последняя поездка","atlas.tripSingular":"Поездка","atlas.tripPlural":"Поездки","atlas.placeVisited":"Посещённое место","atlas.placesVisited":"Посещённые места","atlas.statsTab":"Статистика","atlas.bucketTab":"Список желаний","atlas.addBucket":"Добавить в список желаний","atlas.bucketNamePlaceholder":"Место или направление...","atlas.bucketNotesPlaceholder":"Заметки (необязательно)","atlas.bucketEmpty":"Ваш список желаний пуст","atlas.bucketEmptyHint":"Добавьте места, которые мечтаете посетить","atlas.unmark":"Удалить","atlas.confirmMark":"Отметить эту страну как посещённую?","atlas.confirmUnmark":"Удалить эту страну из списка посещённых?","atlas.markVisited":"Отметить как посещённую","atlas.markVisitedHint":"Добавить эту страну в список посещённых","atlas.addToBucket":"В список желаний","atlas.addPoi":"Добавить место","atlas.searchCountry":"Поиск страны...","atlas.month":"Месяц","atlas.addToBucketHint":"Сохранить как место для посещения","atlas.bucketWhen":"Когда вы планируете поехать?","trip.tabs.plan":"План","trip.tabs.reservations":"Бронирования","trip.tabs.reservationsShort":"Брони","trip.tabs.packing":"Список вещей","trip.tabs.packingShort":"Вещи","trip.tabs.budget":"Бюджет","trip.tabs.files":"Файлы","trip.loading":"Загрузка поездки...","trip.loadingPhotos":"Загрузка фото мест...","trip.mobilePlan":"План","trip.mobilePlaces":"Места","trip.toast.placeUpdated":"Место обновлено","trip.toast.placeAdded":"Место добавлено","trip.toast.placeDeleted":"Место удалено","trip.toast.selectDay":"Сначала выберите день","trip.toast.assignedToDay":"Место назначено на день","trip.toast.reorderError":"Ошибка изменения порядка","trip.toast.reservationUpdated":"Бронирование обновлено","trip.toast.reservationAdded":"Бронирование добавлено","trip.toast.deleted":"Удалено","trip.confirm.deletePlace":"Вы уверены, что хотите удалить это место?","dayplan.emptyDay":"На этот день мест не запланировано","dayplan.addNote":"Добавить заметку","dayplan.editNote":"Редактировать заметку","dayplan.noteAdd":"Добавить заметку","dayplan.noteEdit":"Редактировать заметку","dayplan.noteTitle":"Заметка","dayplan.noteSubtitle":"Заметка на день","dayplan.totalCost":"Общая стоимость","dayplan.days":"Дни","dayplan.dayN":"День {n}","dayplan.calculating":"Расчёт...","dayplan.route":"Маршрут","dayplan.optimize":"Оптимизировать","dayplan.optimized":"Маршрут оптимизирован","dayplan.routeError":"Не удалось рассчитать маршрут","dayplan.toast.needTwoPlaces":"Для оптимизации маршрута нужно минимум два места","dayplan.toast.routeOptimized":"Маршрут оптимизирован","dayplan.toast.noGeoPlaces":"Не найдено мест с координатами для расчёта маршрута","dayplan.confirmed":"Подтверждено","dayplan.pendingRes":"Ожидание","dayplan.pdf":"PDF","dayplan.pdfTooltip":"Экспортировать план дня в PDF","dayplan.pdfError":"Ошибка экспорта PDF","dayplan.cannotReorderTransport":"Бронирования с фиксированным временем нельзя перемещать","dayplan.confirmRemoveTimeTitle":"Удалить время?","dayplan.confirmRemoveTimeBody":"У этого места фиксированное время ({time}). При перемещении время будет удалено, и станет доступна свободная сортировка.","dayplan.confirmRemoveTimeAction":"Удалить время и переместить","dayplan.cannotDropOnTimed":"Элементы нельзя размещать между записями с фиксированным временем","dayplan.cannotBreakChronology":"Это нарушит хронологический порядок запланированных элементов и бронирований","places.addPlace":"Добавить место/активность","places.importGpx":"GPX","places.gpxImported":"{count} мест импортировано из GPX","places.gpxError":"Ошибка импорта GPX","places.importGoogleList":"Список Google","places.googleListHint":"Вставьте ссылку на общий список Google Maps для импорта всех мест.","places.googleListImported":'{count} мест импортировано из "{list}"',"places.googleListError":"Не удалось импортировать список Google Maps","places.viewDetails":"Подробности","places.urlResolved":"Место импортировано из URL","places.assignToDay":"Добавить в какой день?","places.all":"Все","places.unplanned":"Незапланированные","places.search":"Поиск мест...","places.allCategories":"Все категории","places.categoriesSelected":"категорий","places.clearFilter":"Сбросить фильтр","places.count":"{count} мест","places.countSingular":"1 место","places.allPlanned":"Все места запланированы","places.noneFound":"Места не найдены","places.editPlace":"Редактировать место","places.formName":"Название","places.formNamePlaceholder":"напр. Эйфелева башня","places.formDescription":"Описание","places.formDescriptionPlaceholder":"Краткое описание...","places.formAddress":"Адрес","places.formAddressPlaceholder":"Улица, город, страна","places.formLat":"Широта (напр. 48.8566)","places.formLng":"Долгота (напр. 2.3522)","places.formCategory":"Категория","places.noCategory":"Без категории","places.categoryNamePlaceholder":"Название категории","places.formTime":"Время","places.startTime":"Начало","places.endTime":"Конец","places.endTimeBeforeStart":"Время окончания раньше времени начала","places.timeCollision":"Пересечение по времени с:","places.formWebsite":"Сайт","places.formNotesPlaceholder":"Личные заметки...","places.formReservation":"Бронирование","places.reservationNotesPlaceholder":"Заметки о бронировании, номер подтверждения...","places.mapsSearchPlaceholder":"Поиск мест...","places.mapsSearchError":"Ошибка поиска мест.","places.osmHint":"Поиск через OpenStreetMap (без фото, часов работы и рейтингов). Добавьте API-ключ Google в настройках для полной информации.","places.osmActive":"Поиск через OpenStreetMap (без фото, рейтингов и часов работы). Добавьте API-ключ Google в настройках для расширенных данных.","places.categoryCreateError":"Не удалось создать категорию","places.nameRequired":"Введите название","places.saveError":"Ошибка сохранения","inspector.opened":"Открыто","inspector.closed":"Закрыто","inspector.openingHours":"Часы работы","inspector.showHours":"Показать часы работы","inspector.files":"Файлы","inspector.filesCount":"{count} файлов","inspector.removeFromDay":"Убрать из дня","inspector.addToDay":"Добавить в день","inspector.confirmedRes":"Подтверждённое бронирование","inspector.pendingRes":"Ожидающее бронирование","inspector.google":"Открыть в Google Maps","inspector.website":"Открыть сайт","inspector.addRes":"Бронирование","inspector.editRes":"Редактировать бронирование","inspector.participants":"Участники","inspector.trackStats":"Данные маршрута","reservations.title":"Бронирования","reservations.empty":"Пока нет бронирований","reservations.emptyHint":"Добавьте бронирования на авиабилеты, отели и другое","reservations.add":"Добавить бронирование","reservations.addManual":"Ручное бронирование","reservations.placeHint":"Совет: бронирования лучше создавать прямо из места, чтобы связать их с планом дня.","reservations.confirmed":"Подтверждено","reservations.pending":"Ожидание","reservations.summary":"{confirmed} подтв., {pending} ожид.","reservations.fromPlan":"Из плана","reservations.showFiles":"Показать файлы","reservations.editTitle":"Редактировать бронирование","reservations.status":"Статус","reservations.datetime":"Дата и время","reservations.startTime":"Время начала","reservations.endTime":"Время окончания","reservations.date":"Дата","reservations.time":"Время","reservations.timeAlt":"Время (альтернативное, напр. 19:30)","reservations.notes":"Заметки","reservations.notesPlaceholder":"Дополнительные заметки...","reservations.meta.airline":"Авиакомпания","reservations.meta.flightNumber":"Номер рейса","reservations.meta.from":"Откуда","reservations.meta.to":"Куда","reservations.meta.trainNumber":"Номер поезда","reservations.meta.platform":"Платформа","reservations.meta.seat":"Место","reservations.meta.checkIn":"Заезд","reservations.meta.checkOut":"Выезд","reservations.meta.linkAccommodation":"Жильё","reservations.meta.pickAccommodation":"Привязать к жилью","reservations.meta.noAccommodation":"Нет","reservations.meta.hotelPlace":"Жильё","reservations.meta.pickHotel":"Выбрать жильё","reservations.meta.fromDay":"С","reservations.meta.toDay":"По","reservations.meta.selectDay":"Выбрать день","reservations.type.flight":"Авиабилет","reservations.type.hotel":"Жильё","reservations.type.restaurant":"Ресторан","reservations.type.train":"Поезд","reservations.type.car":"Аренда авто","reservations.type.cruise":"Круиз","reservations.type.event":"Мероприятие","reservations.type.tour":"Экскурсия","reservations.type.other":"Другое","reservations.confirm.delete":"Вы уверены, что хотите удалить бронирование «{name}»?","reservations.confirm.deleteTitle":"Удалить бронирование?","reservations.confirm.deleteBody":"«{name}» будет удалено навсегда.","reservations.toast.updated":"Бронирование обновлено","reservations.toast.removed":"Бронирование удалено","reservations.toast.fileUploaded":"Файл загружен","reservations.toast.uploadError":"Ошибка загрузки","reservations.newTitle":"Новое бронирование","reservations.bookingType":"Тип бронирования","reservations.titleLabel":"Название","reservations.titlePlaceholder":"напр. Lufthansa LH123, Hotel Adlon, ...","reservations.locationAddress":"Местоположение / Адрес","reservations.locationPlaceholder":"Адрес, аэропорт, отель...","reservations.confirmationCode":"Код бронирования","reservations.confirmationPlaceholder":"напр. ABC12345","reservations.day":"День","reservations.noDay":"Без дня","reservations.place":"Место","reservations.noPlace":"Без места","reservations.pendingSave":"будет сохранено…","reservations.uploading":"Загрузка...","reservations.attachFile":"Прикрепить файл","reservations.linkExisting":"Привязать существующий файл","reservations.toast.saveError":"Ошибка сохранения","reservations.toast.updateError":"Ошибка обновления","reservations.toast.deleteError":"Ошибка удаления","reservations.confirm.remove":"Удалить бронирование для «{name}»?","reservations.linkAssignment":"Привязать к назначению дня","reservations.pickAssignment":"Выберите назначение из вашего плана...","reservations.noAssignment":"Без привязки (самостоятельное)","budget.title":"Бюджет","budget.exportCsv":"Экспорт CSV","budget.emptyTitle":"Бюджет ещё не создан","budget.emptyText":"Создайте категории и записи для планирования бюджета поездки","budget.emptyPlaceholder":"Введите название категории...","budget.createCategory":"Создать категорию","budget.category":"Категория","budget.categoryName":"Название категории","budget.table.name":"Название","budget.table.total":"Итого","budget.table.persons":"Человек","budget.table.days":"Дней","budget.table.perPerson":"На человека","budget.table.perDay":"В день","budget.table.perPersonDay":"Чел. / день","budget.table.note":"Заметка","budget.table.date":"Дата","budget.newEntry":"Новая запись","budget.defaultEntry":"Новая запись","budget.defaultCategory":"Новая категория","budget.total":"Итого","budget.totalBudget":"Общий бюджет","budget.byCategory":"По категориям","budget.editTooltip":"Нажмите для редактирования","budget.confirm.deleteCategory":"Вы уверены, что хотите удалить категорию «{name}» с {count} записями?","budget.deleteCategory":"Удалить категорию","budget.perPerson":"На человека","budget.paid":"Оплачено","budget.open":"Не оплачено","budget.noMembers":"Участники не назначены","budget.settlement":"Взаиморасчёт","budget.settlementInfo":"Нажмите на аватар участника в строке бюджета, чтобы отметить его зелёным — это значит, что он заплатил. Взаиморасчёт покажет, кто кому и сколько должен.","budget.netBalances":"Чистые балансы","files.title":"Файлы","files.count":"{count} файлов","files.countSingular":"1 файл","files.uploaded":"{count} загружено","files.uploadError":"Ошибка загрузки","files.dropzone":"Перетащите файлы сюда","files.dropzoneHint":"или нажмите для выбора","files.allowedTypes":"Изображения, PDF, DOC, DOCX, XLS, XLSX, TXT, CSV · Макс. 50 МБ","files.uploading":"Загрузка...","files.filterAll":"Все","files.filterPdf":"PDF","files.filterImages":"Изображения","files.filterDocs":"Документы","files.filterCollab":"Заметки Collab","files.sourceCollab":"Из заметок Collab","files.empty":"Файлов пока нет","files.emptyHint":"Загрузите файлы, чтобы прикрепить их к поездке","files.openTab":"Открыть в новой вкладке","files.confirm.delete":"Вы уверены, что хотите удалить этот файл?","files.toast.deleted":"Файл удалён","files.toast.deleteError":"Не удалось удалить файл","files.sourcePlan":"План дня","files.sourceBooking":"Бронирование","files.attach":"Прикрепить","files.pasteHint":"Также можно вставить изображения из буфера обмена (Ctrl+V)","files.trash":"Корзина","files.trashEmpty":"Корзина пуста","files.emptyTrash":"Очистить корзину","files.restore":"Восстановить","files.star":"В избранное","files.unstar":"Из избранного","files.assign":"Назначить","files.assignTitle":"Назначить файл","files.assignPlace":"Место","files.assignBooking":"Бронирование","files.unassigned":"Не назначен","files.unlink":"Удалить связь","files.toast.trashed":"Перемещено в корзину","files.toast.restored":"Файл восстановлен","files.toast.trashEmptied":"Корзина очищена","files.toast.assigned":"Файл назначен","files.toast.assignError":"Ошибка назначения","files.toast.restoreError":"Ошибка восстановления","files.confirm.permanentDelete":"Безвозвратно удалить этот файл? Это действие нельзя отменить.","files.confirm.emptyTrash":"Безвозвратно удалить все файлы из корзины? Это действие нельзя отменить.","files.noteLabel":"Заметка","files.notePlaceholder":"Добавить заметку...","packing.title":"Список вещей","packing.empty":"Список вещей пуст","packing.import":"Импорт","packing.importTitle":"Импорт списка вещей","packing.importHint":"Один предмет на строку. Категория и количество — через запятую, точку с запятой или табуляцию: Название, Категория, Количество","packing.importPlaceholder":`Зубная щётка Солнцезащитный крем, Гигиена Футболки, Одежда, 5 @@ -141,7 +141,7 @@ Tutti i dati attuali verranno sovrascritti.`,"backup.confirm.delete":'Eliminare Все текущие данные будут заменены данными из копии.`,"backup.confirm.uploadRestore":`Загрузить и восстановить файл копии «{name}»? -Все текущие данные будут перезаписаны.`,"backup.confirm.delete":"Удалить копию «{name}»?","backup.toast.loadError":"Не удалось загрузить резервные копии","backup.toast.created":"Резервная копия создана","backup.toast.createError":"Не удалось создать резервную копию","backup.toast.restored":"Копия восстановлена. Страница перезагрузится…","backup.toast.restoreError":"Ошибка восстановления","backup.toast.uploadError":"Ошибка загрузки","backup.toast.deleted":"Резервная копия удалена","backup.toast.deleteError":"Ошибка удаления","backup.toast.downloadError":"Ошибка скачивания","backup.toast.settingsSaved":"Настройки автокопирования сохранены","backup.toast.settingsError":"Не удалось сохранить настройки","backup.auto.title":"Автокопирование","backup.auto.subtitle":"Автоматическое резервное копирование по расписанию","backup.auto.enable":"Включить автокопирование","backup.auto.enableHint":"Резервные копии будут создаваться автоматически по выбранному расписанию","backup.auto.interval":"Интервал","backup.auto.hour":"Запуск в час","backup.auto.hourHint":"Местное время сервера (формат {format})","backup.auto.dayOfWeek":"День недели","backup.auto.dayOfMonth":"День месяца","backup.auto.dayOfMonthHint":"Ограничено 1–28 для совместимости со всеми месяцами","backup.auto.scheduleSummary":"Расписание","backup.auto.summaryDaily":"Каждый день в {hour}:00","backup.auto.summaryWeekly":"Каждый {day} в {hour}:00","backup.auto.summaryMonthly":"{day}-го числа каждого месяца в {hour}:00","backup.auto.envLocked":"Docker","backup.auto.envLockedHint":"Автокопирование настроено через переменные окружения Docker. Чтобы изменить параметры, обновите docker-compose.yml и перезапустите контейнер.","backup.auto.copyEnv":"Скопировать переменные окружения Docker","backup.auto.envCopied":"Переменные окружения Docker скопированы в буфер обмена","backup.auto.keepLabel":"Удалять старые копии через","backup.dow.sunday":"Вс","backup.dow.monday":"Пн","backup.dow.tuesday":"Вт","backup.dow.wednesday":"Ср","backup.dow.thursday":"Чт","backup.dow.friday":"Пт","backup.dow.saturday":"Сб","backup.interval.hourly":"Каждый час","backup.interval.daily":"Ежедневно","backup.interval.weekly":"Еженедельно","backup.interval.monthly":"Ежемесячно","backup.keep.1day":"1 день","backup.keep.3days":"3 дня","backup.keep.7days":"7 дней","backup.keep.14days":"14 дней","backup.keep.30days":"30 дней","backup.keep.forever":"Хранить вечно","photos.allDays":"Все дни","photos.noPhotos":"Фото пока нет","photos.uploadHint":"Загрузите фото из путешествия","photos.clickToSelect":"или нажмите для выбора","photos.linkPlace":"Привязать место","photos.noPlace":"Без места","photos.uploadN":"{n} фото загружено","backup.restoreConfirmTitle":"Восстановить копию?","backup.restoreWarning":"Все текущие данные (поездки, места, пользователи, загрузки) будут безвозвратно заменены данными из копии. Это действие нельзя отменить.","backup.restoreTip":"Совет: создайте резервную копию текущего состояния перед восстановлением.","backup.restoreConfirm":"Да, восстановить","pdf.travelPlan":"План поездки","pdf.planned":"Запланировано","pdf.costLabel":"Стоимость EUR","pdf.preview":"Предпросмотр PDF","pdf.saveAsPdf":"Сохранить как PDF","planner.places":"Места","planner.bookings":"Бронирования","planner.packingList":"Список вещей","planner.documents":"Документы","planner.dayPlan":"План дня","planner.reservations":"Бронирования","planner.minTwoPlaces":"Нужно минимум 2 места с координатами","planner.noGeoPlaces":"Нет мест с координатами","planner.routeCalculated":"Маршрут рассчитан","planner.routeCalcFailed":"Не удалось рассчитать маршрут","planner.routeError":"Ошибка расчёта маршрута","planner.routeOptimized":"Маршрут оптимизирован","planner.reservationUpdated":"Бронирование обновлено","planner.reservationAdded":"Бронирование добавлено","planner.confirmDeleteReservation":"Удалить бронирование?","planner.reservationDeleted":"Бронирование удалено","planner.days":"Дни","planner.allPlaces":"Все места","planner.totalPlaces":"Всего {n} мест","planner.noDaysPlanned":"Дни ещё не запланированы","planner.editTrip":"Редактировать поездку →","planner.placeOne":"1 место","planner.placeN":"{n} мест","planner.addNote":"Добавить заметку","planner.noEntries":"На этот день записей нет","planner.addPlace":"Добавить место/активность","planner.addPlaceShort":"+ Добавить место/активность","planner.resPending":"Бронирование ожидает · ","planner.resConfirmed":"Бронирование подтверждено · ","planner.notePlaceholder":"Заметка…","planner.noteTimePlaceholder":"Время (необязательно)","planner.noteExamplePlaceholder":"напр. S3 в 14:30 с вокзала, паром с причала 7, обеденный перерыв…","planner.totalCost":"Общая стоимость","planner.searchPlaces":"Поиск мест…","planner.allCategories":"Все категории","planner.noPlacesFound":"Места не найдены","planner.addFirstPlace":"Добавить первое место","planner.noReservations":"Нет бронирований","planner.addFirstReservation":"Добавить первое бронирование","planner.new":"Новое","planner.addToDay":"+ День","planner.calculating":"Расчёт…","planner.route":"Маршрут","planner.optimize":"Оптимизировать","planner.openGoogleMaps":"Открыть в Google Maps","planner.selectDayHint":"Выберите день из списка слева для просмотра плана дня","planner.noPlacesForDay":"На этот день мест пока нет","planner.addPlacesLink":"Добавить места →","planner.minTotal":"мин. всего","planner.noReservation":"Нет бронирования","planner.removeFromDay":"Убрать из дня","planner.addToThisDay":"Добавить в день","planner.overview":"Обзор","planner.noDays":"Дней нет","planner.editTripToAddDays":"Отредактируйте поездку для добавления дней","planner.dayCount":"{n} дней","planner.clickToUnlock":"Нажмите для разблокировки","planner.keepPosition":"Сохранить позицию при оптимизации маршрута","planner.dayDetails":"Подробности дня","planner.dayN":"День {n}","stats.countries":"Страны","stats.cities":"Города","stats.trips":"Поездки","stats.places":"Места","stats.worldProgress":"Прогресс по миру","stats.visited":"посещено","stats.remaining":"осталось","stats.visitedCountries":"Посещённые страны","day.precipProb":"Вероятность осадков","day.precipitation":"Осадки","day.wind":"Ветер","day.sunrise":"Восход","day.sunset":"Закат","day.hourlyForecast":"Почасовой прогноз","day.climateHint":"Исторические средние — реальный прогноз доступен за 16 дней до этой даты.","day.noWeather":"Данные о погоде недоступны. Добавьте место с координатами.","day.overview":"Обзор дня","day.accommodation":"Жильё","day.addAccommodation":"Добавить жильё","day.hotelDayRange":"Применить к дням","day.noPlacesForHotel":"Сначала добавьте места в поездку","day.allDays":"Все","day.checkIn":"Заезд","day.checkOut":"Выезд","day.confirmation":"Подтверждение","day.editAccommodation":"Редактировать жильё","day.reservations":"Бронирования","memories.title":"Фото","memories.notConnected":"Immich не подключён","memories.notConnectedHint":"Подключите Immich в настройках, чтобы видеть фотографии из поездок.","memories.noDates":"Добавьте даты поездки для загрузки фотографий.","memories.noPhotos":"Фотографии не найдены","memories.noPhotosHint":"В Immich нет фотографий за период этой поездки.","memories.photosFound":"фото","memories.fromOthers":"от других","memories.sharePhotos":"Поделиться фото","memories.sharing":"Общий доступ","memories.reviewTitle":"Проверьте ваши фото","memories.reviewHint":"Нажмите на фото, чтобы исключить его из общего доступа.","memories.shareCount":"Поделиться ({count} фото)","memories.immichUrl":"URL сервера Immich","memories.immichApiKey":"API-ключ","memories.testConnection":"Проверить подключение","memories.testFirst":"Сначала проверьте подключение","memories.connected":"Подключено","memories.disconnected":"Не подключено","memories.connectionSuccess":"Подключение к Immich установлено","memories.connectionError":"Не удалось подключиться к Immich","memories.saved":"Настройки Immich сохранены","memories.oldest":"Сначала старые","memories.newest":"Сначала новые","memories.allLocations":"Все места","memories.addPhotos":"Добавить фото","memories.linkAlbum":"Привязать альбом","memories.selectAlbum":"Выбрать альбом Immich","memories.noAlbums":"Альбомы не найдены","memories.syncAlbum":"Синхронизировать","memories.unlinkAlbum":"Отвязать","memories.photos":"фото","memories.selectPhotos":"Выбрать фото из Immich","memories.selectHint":"Нажмите на фото, чтобы выбрать их.","memories.selected":"выбрано","memories.addSelected":"Добавить {count} фото","memories.alreadyAdded":"Добавлено","memories.private":"Приватное","memories.stopSharing":"Прекратить доступ","memories.tripDates":"Даты поездки","memories.allPhotos":"Все фото","memories.confirmShareTitle":"Поделиться с участниками поездки?","memories.confirmShareHint":"{count} фото станут видны всем участникам этой поездки. Вы сможете сделать отдельные фото приватными позже.","memories.confirmShareButton":"Поделиться фото","collab.tabs.chat":"Чат","collab.tabs.notes":"Заметки","collab.tabs.polls":"Опросы","collab.whatsNext.title":"Что дальше","collab.whatsNext.today":"Сегодня","collab.whatsNext.tomorrow":"Завтра","collab.whatsNext.empty":"Нет предстоящих активностей","collab.whatsNext.until":"до","collab.whatsNext.emptyHint":"Активности со временем будут отображаться здесь","collab.chat.send":"Отправить","collab.chat.placeholder":"Введите сообщение...","collab.chat.empty":"Начните разговор","collab.chat.emptyHint":"Сообщения видны всем участникам поездки","collab.chat.emptyDesc":"Делитесь идеями, планами и новостями с вашей группой","collab.chat.today":"Сегодня","collab.chat.yesterday":"Вчера","collab.chat.deletedMessage":"удалил(а) сообщение","collab.chat.reply":"Ответить","collab.chat.loadMore":"Загрузить старые сообщения","collab.chat.justNow":"только что","collab.chat.minutesAgo":"{n} мин. назад","collab.chat.hoursAgo":"{n} ч. назад","collab.notes.title":"Заметки","collab.notes.new":"Новая заметка","collab.notes.empty":"Заметок пока нет","collab.notes.emptyHint":"Начните записывать идеи и планы","collab.notes.all":"Все","collab.notes.titlePlaceholder":"Название заметки","collab.notes.contentPlaceholder":"Напишите что-нибудь...","collab.notes.categoryPlaceholder":"Категория","collab.notes.newCategory":"Новая категория...","collab.notes.category":"Категория","collab.notes.noCategory":"Без категории","collab.notes.color":"Цвет","collab.notes.save":"Сохранить","collab.notes.cancel":"Отмена","collab.notes.edit":"Редактировать","collab.notes.delete":"Удалить","collab.notes.pin":"Закрепить","collab.notes.unpin":"Открепить","collab.notes.daysAgo":"{n} дн. назад","collab.notes.categorySettings":"Управление категориями","collab.notes.create":"Создать","collab.notes.website":"Сайт","collab.notes.websitePlaceholder":"https://...","collab.notes.attachFiles":"Прикрепить файлы","collab.notes.noCategoriesYet":"Категорий пока нет","collab.notes.emptyDesc":"Создайте заметку, чтобы начать","collab.polls.title":"Опросы","collab.polls.new":"Новый опрос","collab.polls.empty":"Опросов пока нет","collab.polls.emptyHint":"Задайте вопрос группе и голосуйте вместе","collab.polls.question":"Вопрос","collab.polls.questionPlaceholder":"Что нам делать?","collab.polls.addOption":"+ Добавить вариант","collab.polls.optionPlaceholder":"Вариант {n}","collab.polls.create":"Создать опрос","collab.polls.close":"Закрыть","collab.polls.closed":"Закрыт","collab.polls.votes":"{n} голосов","collab.polls.vote":"{n} голос","collab.polls.multipleChoice":"Множественный выбор","collab.polls.multiChoice":"Множественный выбор","collab.polls.deadline":"Срок","collab.polls.option":"Вариант","collab.polls.options":"Варианты","collab.polls.delete":"Удалить","collab.polls.closedSection":"Закрытые","admin.tabs.permissions":"Разрешения","perm.title":"Настройки разрешений","perm.subtitle":"Управляйте тем, кто может выполнять действия в приложении","perm.saved":"Настройки разрешений сохранены","perm.resetDefaults":"Сбросить по умолчанию","perm.customized":"изменено","perm.level.admin":"Только администратор","perm.level.tripOwner":"Владелец поездки","perm.level.tripMember":"Участники поездки","perm.level.everybody":"Все","perm.cat.trip":"Управление поездками","perm.cat.members":"Управление участниками","perm.cat.files":"Файлы","perm.cat.content":"Контент и расписание","perm.cat.extras":"Бюджет, сборы и совместная работа","perm.action.trip_create":"Создавать поездки","perm.action.trip_edit":"Редактировать детали поездки","perm.action.trip_delete":"Удалять поездки","perm.action.trip_archive":"Архивировать / разархивировать поездки","perm.action.trip_cover_upload":"Загружать обложку","perm.action.member_manage":"Добавлять / удалять участников","perm.action.file_upload":"Загружать файлы","perm.action.file_edit":"Редактировать метаданные файлов","perm.action.file_delete":"Удалять файлы","perm.action.place_edit":"Добавлять / редактировать / удалять места","perm.action.day_edit":"Редактировать дни, заметки и назначения","perm.action.reservation_edit":"Управлять бронированиями","perm.action.budget_edit":"Управлять бюджетом","perm.action.packing_edit":"Управлять списками вещей","perm.action.collab_edit":"Совместная работа (заметки, опросы, чат)","perm.action.share_manage":"Управлять ссылками для обмена","perm.actionHint.trip_create":"Кто может создавать новые поездки","perm.actionHint.trip_edit":"Кто может менять название, даты, описание и валюту поездки","perm.actionHint.trip_delete":"Кто может безвозвратно удалить поездку","perm.actionHint.trip_archive":"Кто может архивировать или разархивировать поездку","perm.actionHint.trip_cover_upload":"Кто может загружать или менять обложку","perm.actionHint.member_manage":"Кто может приглашать или удалять участников поездки","perm.actionHint.file_upload":"Кто может загружать файлы в поездку","perm.actionHint.file_edit":"Кто может редактировать описания и ссылки файлов","perm.actionHint.file_delete":"Кто может перемещать файлы в корзину или безвозвратно удалять","perm.actionHint.place_edit":"Кто может добавлять, редактировать или удалять места","perm.actionHint.day_edit":"Кто может редактировать дни, заметки к дням и назначения мест","perm.actionHint.reservation_edit":"Кто может создавать, редактировать или удалять бронирования","perm.actionHint.budget_edit":"Кто может создавать, редактировать или удалять статьи бюджета","perm.actionHint.packing_edit":"Кто может управлять вещами для сборов и сумками","perm.actionHint.collab_edit":"Кто может создавать заметки, опросы и отправлять сообщения","perm.actionHint.share_manage":"Кто может создавать или удалять публичные ссылки для обмена"},wM={"common.save":"保存","common.cancel":"取消","common.delete":"删除","common.edit":"编辑","common.add":"添加","common.loading":"加载中...","common.import":"导入","common.error":"错误","common.back":"返回","common.all":"全部","common.close":"关闭","common.open":"打开","common.upload":"上传","common.search":"搜索","common.confirm":"确认","common.ok":"确定","common.yes":"是","common.no":"否","common.or":"或","common.none":"无","common.date":"日期","common.rename":"重命名","common.name":"名称","common.email":"邮箱","common.password":"密码","common.saving":"保存中...","common.saved":"已保存","trips.reminder":"提醒","trips.reminderNone":"无","trips.reminderDay":"天","trips.reminderDays":"天","trips.reminderCustom":"自定义","trips.reminderDaysBefore":"天前提醒","trips.reminderDisabledHint":"旅行提醒已禁用。请在管理 > 设置 > 通知中启用。","common.update":"更新","common.change":"修改","common.uploading":"上传中…","common.backToPlanning":"返回规划","common.reset":"重置","nav.trip":"旅行","nav.share":"分享","nav.settings":"设置","nav.admin":"管理","nav.logout":"退出登录","nav.lightMode":"浅色模式","nav.darkMode":"深色模式","nav.autoMode":"自动模式","nav.administrator":"管理员","dashboard.title":"我的旅行","dashboard.subtitle.loading":"加载旅行中...","dashboard.subtitle.trips":"{count} 次旅行({archived} 已归档)","dashboard.subtitle.empty":"开始你的第一次旅行","dashboard.subtitle.activeOne":"{count} 个进行中的旅行","dashboard.subtitle.activeMany":"{count} 个进行中的旅行","dashboard.subtitle.archivedSuffix":" · {count} 已归档","dashboard.newTrip":"新建旅行","dashboard.gridView":"网格视图","dashboard.listView":"列表视图","dashboard.currency":"货币","dashboard.timezone":"时区","dashboard.localTime":"本地","dashboard.timezoneCustomTitle":"自定义时区","dashboard.timezoneCustomLabelPlaceholder":"标签(可选)","dashboard.timezoneCustomTzPlaceholder":"如 America/New_York","dashboard.timezoneCustomAdd":"添加","dashboard.timezoneCustomErrorEmpty":"请输入时区标识符","dashboard.timezoneCustomErrorInvalid":"无效的时区。请使用 Europe/Berlin 这样的格式","dashboard.timezoneCustomErrorDuplicate":"已添加","dashboard.emptyTitle":"暂无旅行","dashboard.emptyText":"创建你的第一次旅行,开始规划吧!","dashboard.emptyButton":"创建第一次旅行","dashboard.nextTrip":"下次旅行","dashboard.shared":"共享","dashboard.sharedBy":"由 {name} 分享","dashboard.days":"天","dashboard.places":"地点","dashboard.archive":"归档","dashboard.restore":"恢复","dashboard.archived":"已归档","dashboard.status.ongoing":"进行中","dashboard.status.today":"今天","dashboard.status.tomorrow":"明天","dashboard.status.past":"已结束","dashboard.status.daysLeft":"还剩 {count} 天","dashboard.toast.loadError":"加载旅行失败","dashboard.toast.created":"旅行创建成功!","dashboard.toast.createError":"创建旅行失败","dashboard.toast.updated":"旅行已更新!","dashboard.toast.updateError":"更新旅行失败","dashboard.toast.deleted":"旅行已删除","dashboard.toast.deleteError":"删除旅行失败","dashboard.toast.archived":"旅行已归档","dashboard.toast.archiveError":"归档旅行失败","dashboard.toast.restored":"旅行已恢复","dashboard.toast.restoreError":"恢复旅行失败","dashboard.confirm.delete":"删除旅行「{title}」?所有地点和计划将被永久删除。","dashboard.editTrip":"编辑旅行","dashboard.createTrip":"创建新旅行","dashboard.tripTitle":"标题","dashboard.tripTitlePlaceholder":"如:日本夏日之旅","dashboard.tripDescription":"描述","dashboard.tripDescriptionPlaceholder":"这次旅行是关于什么的?","dashboard.startDate":"开始日期","dashboard.endDate":"结束日期","dashboard.noDateHint":"未设置日期——将默认创建 7 天。你可以随时修改。","dashboard.coverImage":"封面图片","dashboard.addCoverImage":"添加封面图片","dashboard.addMembers":"旅伴","dashboard.addMember":"添加成员","dashboard.coverSaved":"封面图片已保存","dashboard.coverUploadError":"上传失败","dashboard.coverRemoveError":"移除失败","dashboard.titleRequired":"标题为必填项","dashboard.endDateError":"结束日期必须晚于开始日期","settings.title":"设置","settings.subtitle":"配置你的个人设置","settings.map":"地图","settings.mapTemplate":"地图模板","settings.mapTemplatePlaceholder.select":"选择模板...","settings.mapDefaultHint":"留空则使用 OpenStreetMap(默认)","settings.mapTemplatePlaceholder":"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png","settings.mapHint":"地图瓦片 URL 模板","settings.latitude":"纬度","settings.longitude":"经度","settings.saveMap":"保存地图","settings.apiKeys":"API 密钥","settings.mapsKey":"Google Maps API 密钥","settings.mapsKeyHint":"用于地点搜索。需要 Places API (New)。在 console.cloud.google.com 获取","settings.weatherKey":"OpenWeatherMap API 密钥","settings.weatherKeyHint":"用于天气数据。在 openweathermap.org/api 免费获取","settings.keyPlaceholder":"输入密钥...","settings.configured":"已配置","settings.saveKeys":"保存密钥","settings.display":"显示","settings.colorMode":"颜色模式","settings.light":"浅色","settings.dark":"深色","settings.auto":"自动","settings.language":"语言","settings.temperature":"温度单位","settings.timeFormat":"时间格式","settings.routeCalculation":"路线计算","settings.blurBookingCodes":"模糊预订代码","settings.notifications":"通知","settings.notifyTripInvite":"旅行邀请","settings.notifyBookingChange":"预订变更","settings.notifyTripReminder":"旅行提醒","settings.notifyVacayInvite":"Vacay 融合邀请","settings.notifyPhotosShared":"共享照片 (Immich)","settings.notifyCollabMessage":"聊天消息 (Collab)","settings.notifyPackingTagged":"行李清单:分配","settings.notifyWebhook":"Webhook 通知","settings.notificationsDisabled":"通知尚未配置。请联系管理员启用电子邮件或 Webhook 通知。","settings.notificationsActive":"活跃频道","settings.notificationsManagedByAdmin":"通知事件由管理员配置。","admin.notifications.title":"通知","admin.notifications.hint":"选择一个通知渠道。一次只能激活一个。","admin.notifications.none":"已禁用","admin.notifications.email":"电子邮件 (SMTP)","admin.notifications.webhook":"Webhook","admin.notifications.events":"通知事件","admin.notifications.eventsHint":"选择哪些事件为所有用户触发通知。","admin.notifications.configureFirst":"请先在下方配置 SMTP 或 Webhook,然后启用事件。","admin.notifications.save":"保存通知设置","admin.notifications.saved":"通知设置已保存","admin.notifications.testWebhook":"发送测试 Webhook","admin.notifications.testWebhookSuccess":"测试 Webhook 发送成功","admin.notifications.testWebhookFailed":"测试 Webhook 发送失败","admin.smtp.title":"邮件与通知","admin.smtp.hint":"用于发送电子邮件通知的 SMTP 配置。","admin.smtp.testButton":"发送测试邮件","admin.webhook.hint":"向外部 Webhook 发送通知(Discord、Slack 等)。","admin.smtp.testSuccess":"测试邮件发送成功","admin.smtp.testFailed":"测试邮件发送失败","dayplan.icsTooltip":"导出日历 (ICS)","share.linkTitle":"公开链接","share.linkHint":"创建一个链接,任何人无需登录即可查看此旅行。仅可查看,无法编辑。","share.createLink":"创建链接","share.deleteLink":"删除链接","share.createError":"无法创建链接","common.copy":"复制","common.copied":"已复制","share.permMap":"地图与计划","share.permBookings":"预订","share.permPacking":"行李","shared.expired":"链接已过期或无效","shared.expiredHint":"此共享旅行链接已失效。","shared.readOnly":"只读共享视图","shared.tabPlan":"计划","shared.tabBookings":"预订","shared.tabPacking":"行李","shared.tabBudget":"预算","shared.tabChat":"聊天","shared.days":"天","shared.places":"个地点","shared.other":"其他","shared.totalBudget":"总预算","shared.messages":"条消息","shared.sharedVia":"通过以下分享","shared.confirmed":"已确认","shared.pending":"待确认","share.permBudget":"预算","share.permCollab":"聊天","settings.on":"开","settings.off":"关","settings.mcp.title":"MCP 配置","settings.mcp.endpoint":"MCP 端点","settings.mcp.clientConfig":"客户端配置","settings.mcp.clientConfigHint":"将 替换为下方列表中的 API 令牌。npx 的路径可能需要根据您的系统进行调整(例如 Windows 上为 C:\\PROGRA~1\\nodejs\\npx.cmd)。","settings.mcp.copy":"复制","settings.mcp.copied":"已复制!","settings.mcp.apiTokens":"API 令牌","settings.mcp.createToken":"创建新令牌","settings.mcp.noTokens":"暂无令牌,请创建一个以连接 MCP 客户端。","settings.mcp.tokenCreatedAt":"创建于","settings.mcp.tokenUsedAt":"使用于","settings.mcp.deleteTokenTitle":"删除令牌","settings.mcp.deleteTokenMessage":"此令牌将立即失效,使用它的所有 MCP 客户端将失去访问权限。","settings.mcp.modal.createTitle":"创建 API 令牌","settings.mcp.modal.tokenName":"令牌名称","settings.mcp.modal.tokenNamePlaceholder":"例如:Claude Desktop、工作电脑","settings.mcp.modal.creating":"创建中…","settings.mcp.modal.create":"创建令牌","settings.mcp.modal.createdTitle":"令牌已创建","settings.mcp.modal.createdWarning":"此令牌只会显示一次,请立即复制并妥善保存——无法找回。","settings.mcp.modal.done":"完成","settings.mcp.toast.created":"令牌已创建","settings.mcp.toast.createError":"创建令牌失败","settings.mcp.toast.deleted":"令牌已删除","settings.mcp.toast.deleteError":"删除令牌失败","settings.account":"账户","settings.username":"用户名","settings.email":"邮箱","settings.role":"角色","settings.roleAdmin":"管理员","settings.oidcLinked":"已关联","settings.changePassword":"修改密码","settings.mustChangePassword":"您必须更改密码才能继续。请在下方设置新密码。","settings.currentPassword":"当前密码","settings.currentPasswordRequired":"请输入当前密码","settings.newPassword":"新密码","settings.confirmPassword":"确认新密码","settings.updatePassword":"更新密码","settings.passwordRequired":"请输入当前密码和新密码","settings.passwordTooShort":"密码至少需要 8 个字符","settings.passwordMismatch":"两次输入的密码不一致","settings.passwordWeak":"密码必须包含大写字母、小写字母、数字和特殊字符","settings.passwordChanged":"密码修改成功","settings.deleteAccount":"删除账户","settings.deleteAccountTitle":"确定删除账户?","settings.deleteAccountWarning":"你的账户以及所有旅行、地点和文件将被永久删除。此操作无法撤销。","settings.deleteAccountConfirm":"永久删除","settings.deleteBlockedTitle":"无法删除","settings.deleteBlockedMessage":"你是唯一的管理员。请先将其他用户提升为管理员,然后再删除账户。","settings.roleUser":"用户","settings.saveProfile":"保存资料","settings.mfa.title":"双因素认证 (2FA)","settings.mfa.description":"登录时添加第二步验证。使用身份验证器应用(Google Authenticator、Authy 等)。","settings.mfa.requiredByPolicy":"管理员要求双因素身份验证。请先完成下方的身份验证器设置后再继续。","settings.mfa.backupTitle":"备用代码","settings.mfa.backupDescription":"如果你无法使用身份验证器应用,可使用这些一次性备用代码登录。","settings.mfa.backupWarning":"请立即保存这些代码。每个代码只能使用一次。","settings.mfa.backupCopy":"复制代码","settings.mfa.backupDownload":"下载 TXT","settings.mfa.backupPrint":"打印 / PDF","settings.mfa.backupCopied":"备用代码已复制","settings.mfa.enabled":"您的账户已启用 2FA。","settings.mfa.disabled":"2FA 未启用。","settings.mfa.setup":"设置身份验证器","settings.mfa.scanQr":"使用应用扫描此二维码,或手动输入密钥。","settings.mfa.secretLabel":"密钥(手动输入)","settings.mfa.codePlaceholder":"6 位验证码","settings.mfa.enable":"启用 2FA","settings.mfa.cancelSetup":"取消","settings.mfa.disableTitle":"停用 2FA","settings.mfa.disableHint":"输入您的账户密码和身份验证器中的当前验证码。","settings.mfa.disable":"停用 2FA","settings.mfa.toastEnabled":"双因素认证已启用","settings.mfa.toastDisabled":"双因素认证已停用","settings.mfa.demoBlocked":"演示模式下不可用","settings.toast.mapSaved":"地图设置已保存","settings.toast.keysSaved":"API 密钥已保存","settings.toast.displaySaved":"显示设置已保存","settings.toast.profileSaved":"资料已保存","settings.uploadAvatar":"上传头像","settings.removeAvatar":"移除头像","settings.avatarUploaded":"头像已更新","settings.avatarRemoved":"头像已移除","settings.avatarError":"上传失败","login.error":"登录失败,请检查你的凭据。","login.tagline":`你的旅行。 +Все текущие данные будут перезаписаны.`,"backup.confirm.delete":"Удалить копию «{name}»?","backup.toast.loadError":"Не удалось загрузить резервные копии","backup.toast.created":"Резервная копия создана","backup.toast.createError":"Не удалось создать резервную копию","backup.toast.restored":"Копия восстановлена. Страница перезагрузится…","backup.toast.restoreError":"Ошибка восстановления","backup.toast.uploadError":"Ошибка загрузки","backup.toast.deleted":"Резервная копия удалена","backup.toast.deleteError":"Ошибка удаления","backup.toast.downloadError":"Ошибка скачивания","backup.toast.settingsSaved":"Настройки автокопирования сохранены","backup.toast.settingsError":"Не удалось сохранить настройки","backup.auto.title":"Автокопирование","backup.auto.subtitle":"Автоматическое резервное копирование по расписанию","backup.auto.enable":"Включить автокопирование","backup.auto.enableHint":"Резервные копии будут создаваться автоматически по выбранному расписанию","backup.auto.interval":"Интервал","backup.auto.hour":"Запуск в час","backup.auto.hourHint":"Местное время сервера (формат {format})","backup.auto.dayOfWeek":"День недели","backup.auto.dayOfMonth":"День месяца","backup.auto.dayOfMonthHint":"Ограничено 1–28 для совместимости со всеми месяцами","backup.auto.scheduleSummary":"Расписание","backup.auto.summaryDaily":"Каждый день в {hour}:00","backup.auto.summaryWeekly":"Каждый {day} в {hour}:00","backup.auto.summaryMonthly":"{day}-го числа каждого месяца в {hour}:00","backup.auto.envLocked":"Docker","backup.auto.envLockedHint":"Автокопирование настроено через переменные окружения Docker. Чтобы изменить параметры, обновите docker-compose.yml и перезапустите контейнер.","backup.auto.copyEnv":"Скопировать переменные окружения Docker","backup.auto.envCopied":"Переменные окружения Docker скопированы в буфер обмена","backup.auto.keepLabel":"Удалять старые копии через","backup.dow.sunday":"Вс","backup.dow.monday":"Пн","backup.dow.tuesday":"Вт","backup.dow.wednesday":"Ср","backup.dow.thursday":"Чт","backup.dow.friday":"Пт","backup.dow.saturday":"Сб","backup.interval.hourly":"Каждый час","backup.interval.daily":"Ежедневно","backup.interval.weekly":"Еженедельно","backup.interval.monthly":"Ежемесячно","backup.keep.1day":"1 день","backup.keep.3days":"3 дня","backup.keep.7days":"7 дней","backup.keep.14days":"14 дней","backup.keep.30days":"30 дней","backup.keep.forever":"Хранить вечно","photos.allDays":"Все дни","photos.noPhotos":"Фото пока нет","photos.uploadHint":"Загрузите фото из путешествия","photos.clickToSelect":"или нажмите для выбора","photos.linkPlace":"Привязать место","photos.noPlace":"Без места","photos.uploadN":"{n} фото загружено","backup.restoreConfirmTitle":"Восстановить копию?","backup.restoreWarning":"Все текущие данные (поездки, места, пользователи, загрузки) будут безвозвратно заменены данными из копии. Это действие нельзя отменить.","backup.restoreTip":"Совет: создайте резервную копию текущего состояния перед восстановлением.","backup.restoreConfirm":"Да, восстановить","pdf.travelPlan":"План поездки","pdf.planned":"Запланировано","pdf.costLabel":"Стоимость EUR","pdf.preview":"Предпросмотр PDF","pdf.saveAsPdf":"Сохранить как PDF","planner.places":"Места","planner.bookings":"Бронирования","planner.packingList":"Список вещей","planner.documents":"Документы","planner.dayPlan":"План дня","planner.reservations":"Бронирования","planner.minTwoPlaces":"Нужно минимум 2 места с координатами","planner.noGeoPlaces":"Нет мест с координатами","planner.routeCalculated":"Маршрут рассчитан","planner.routeCalcFailed":"Не удалось рассчитать маршрут","planner.routeError":"Ошибка расчёта маршрута","planner.routeOptimized":"Маршрут оптимизирован","planner.reservationUpdated":"Бронирование обновлено","planner.reservationAdded":"Бронирование добавлено","planner.confirmDeleteReservation":"Удалить бронирование?","planner.reservationDeleted":"Бронирование удалено","planner.days":"Дни","planner.allPlaces":"Все места","planner.totalPlaces":"Всего {n} мест","planner.noDaysPlanned":"Дни ещё не запланированы","planner.editTrip":"Редактировать поездку →","planner.placeOne":"1 место","planner.placeN":"{n} мест","planner.addNote":"Добавить заметку","planner.noEntries":"На этот день записей нет","planner.addPlace":"Добавить место/активность","planner.addPlaceShort":"+ Добавить место/активность","planner.resPending":"Бронирование ожидает · ","planner.resConfirmed":"Бронирование подтверждено · ","planner.notePlaceholder":"Заметка…","planner.noteTimePlaceholder":"Время (необязательно)","planner.noteExamplePlaceholder":"напр. S3 в 14:30 с вокзала, паром с причала 7, обеденный перерыв…","planner.totalCost":"Общая стоимость","planner.searchPlaces":"Поиск мест…","planner.allCategories":"Все категории","planner.noPlacesFound":"Места не найдены","planner.addFirstPlace":"Добавить первое место","planner.noReservations":"Нет бронирований","planner.addFirstReservation":"Добавить первое бронирование","planner.new":"Новое","planner.addToDay":"+ День","planner.calculating":"Расчёт…","planner.route":"Маршрут","planner.optimize":"Оптимизировать","planner.openGoogleMaps":"Открыть в Google Maps","planner.selectDayHint":"Выберите день из списка слева для просмотра плана дня","planner.noPlacesForDay":"На этот день мест пока нет","planner.addPlacesLink":"Добавить места →","planner.minTotal":"мин. всего","planner.noReservation":"Нет бронирования","planner.removeFromDay":"Убрать из дня","planner.addToThisDay":"Добавить в день","planner.overview":"Обзор","planner.noDays":"Дней нет","planner.editTripToAddDays":"Отредактируйте поездку для добавления дней","planner.dayCount":"{n} дней","planner.clickToUnlock":"Нажмите для разблокировки","planner.keepPosition":"Сохранить позицию при оптимизации маршрута","planner.dayDetails":"Подробности дня","planner.dayN":"День {n}","stats.countries":"Страны","stats.cities":"Города","stats.trips":"Поездки","stats.places":"Места","stats.worldProgress":"Прогресс по миру","stats.visited":"посещено","stats.remaining":"осталось","stats.visitedCountries":"Посещённые страны","day.precipProb":"Вероятность осадков","day.precipitation":"Осадки","day.wind":"Ветер","day.sunrise":"Восход","day.sunset":"Закат","day.hourlyForecast":"Почасовой прогноз","day.climateHint":"Исторические средние — реальный прогноз доступен за 16 дней до этой даты.","day.noWeather":"Данные о погоде недоступны. Добавьте место с координатами.","day.overview":"Обзор дня","day.accommodation":"Жильё","day.addAccommodation":"Добавить жильё","day.hotelDayRange":"Применить к дням","day.noPlacesForHotel":"Сначала добавьте места в поездку","day.allDays":"Все","day.checkIn":"Заезд","day.checkOut":"Выезд","day.confirmation":"Подтверждение","day.editAccommodation":"Редактировать жильё","day.reservations":"Бронирования","memories.title":"Фото","memories.notConnected":"Immich не подключён","memories.notConnectedHint":"Подключите Immich в настройках, чтобы видеть фотографии из поездок.","memories.noDates":"Добавьте даты поездки для загрузки фотографий.","memories.noPhotos":"Фотографии не найдены","memories.noPhotosHint":"В Immich нет фотографий за период этой поездки.","memories.photosFound":"фото","memories.fromOthers":"от других","memories.sharePhotos":"Поделиться фото","memories.sharing":"Общий доступ","memories.reviewTitle":"Проверьте ваши фото","memories.reviewHint":"Нажмите на фото, чтобы исключить его из общего доступа.","memories.shareCount":"Поделиться ({count} фото)","memories.immichUrl":"URL сервера Immich","memories.immichApiKey":"API-ключ","memories.testConnection":"Проверить подключение","memories.testFirst":"Сначала проверьте подключение","memories.connected":"Подключено","memories.disconnected":"Не подключено","memories.connectionSuccess":"Подключение к Immich установлено","memories.connectionError":"Не удалось подключиться к Immich","memories.saved":"Настройки Immich сохранены","memories.oldest":"Сначала старые","memories.newest":"Сначала новые","memories.allLocations":"Все места","memories.addPhotos":"Добавить фото","memories.linkAlbum":"Привязать альбом","memories.selectAlbum":"Выбрать альбом Immich","memories.noAlbums":"Альбомы не найдены","memories.syncAlbum":"Синхронизировать","memories.unlinkAlbum":"Отвязать","memories.photos":"фото","memories.selectPhotos":"Выбрать фото из Immich","memories.selectHint":"Нажмите на фото, чтобы выбрать их.","memories.selected":"выбрано","memories.addSelected":"Добавить {count} фото","memories.alreadyAdded":"Добавлено","memories.private":"Приватное","memories.stopSharing":"Прекратить доступ","memories.tripDates":"Даты поездки","memories.allPhotos":"Все фото","memories.confirmShareTitle":"Поделиться с участниками поездки?","memories.confirmShareHint":"{count} фото станут видны всем участникам этой поездки. Вы сможете сделать отдельные фото приватными позже.","memories.confirmShareButton":"Поделиться фото","collab.tabs.chat":"Чат","collab.tabs.notes":"Заметки","collab.tabs.polls":"Опросы","collab.whatsNext.title":"Что дальше","collab.whatsNext.today":"Сегодня","collab.whatsNext.tomorrow":"Завтра","collab.whatsNext.empty":"Нет предстоящих активностей","collab.whatsNext.until":"до","collab.whatsNext.emptyHint":"Активности со временем будут отображаться здесь","collab.chat.send":"Отправить","collab.chat.placeholder":"Введите сообщение...","collab.chat.empty":"Начните разговор","collab.chat.emptyHint":"Сообщения видны всем участникам поездки","collab.chat.emptyDesc":"Делитесь идеями, планами и новостями с вашей группой","collab.chat.today":"Сегодня","collab.chat.yesterday":"Вчера","collab.chat.deletedMessage":"удалил(а) сообщение","collab.chat.reply":"Ответить","collab.chat.loadMore":"Загрузить старые сообщения","collab.chat.justNow":"только что","collab.chat.minutesAgo":"{n} мин. назад","collab.chat.hoursAgo":"{n} ч. назад","collab.notes.title":"Заметки","collab.notes.new":"Новая заметка","collab.notes.empty":"Заметок пока нет","collab.notes.emptyHint":"Начните записывать идеи и планы","collab.notes.all":"Все","collab.notes.titlePlaceholder":"Название заметки","collab.notes.contentPlaceholder":"Напишите что-нибудь...","collab.notes.categoryPlaceholder":"Категория","collab.notes.newCategory":"Новая категория...","collab.notes.category":"Категория","collab.notes.noCategory":"Без категории","collab.notes.color":"Цвет","collab.notes.save":"Сохранить","collab.notes.cancel":"Отмена","collab.notes.edit":"Редактировать","collab.notes.delete":"Удалить","collab.notes.pin":"Закрепить","collab.notes.unpin":"Открепить","collab.notes.daysAgo":"{n} дн. назад","collab.notes.categorySettings":"Управление категориями","collab.notes.create":"Создать","collab.notes.website":"Сайт","collab.notes.websitePlaceholder":"https://...","collab.notes.attachFiles":"Прикрепить файлы","collab.notes.noCategoriesYet":"Категорий пока нет","collab.notes.emptyDesc":"Создайте заметку, чтобы начать","collab.polls.title":"Опросы","collab.polls.new":"Новый опрос","collab.polls.empty":"Опросов пока нет","collab.polls.emptyHint":"Задайте вопрос группе и голосуйте вместе","collab.polls.question":"Вопрос","collab.polls.questionPlaceholder":"Что нам делать?","collab.polls.addOption":"+ Добавить вариант","collab.polls.optionPlaceholder":"Вариант {n}","collab.polls.create":"Создать опрос","collab.polls.close":"Закрыть","collab.polls.closed":"Закрыт","collab.polls.votes":"{n} голосов","collab.polls.vote":"{n} голос","collab.polls.multipleChoice":"Множественный выбор","collab.polls.multiChoice":"Множественный выбор","collab.polls.deadline":"Срок","collab.polls.option":"Вариант","collab.polls.options":"Варианты","collab.polls.delete":"Удалить","collab.polls.closedSection":"Закрытые","admin.tabs.permissions":"Разрешения","perm.title":"Настройки разрешений","perm.subtitle":"Управляйте тем, кто может выполнять действия в приложении","perm.saved":"Настройки разрешений сохранены","perm.resetDefaults":"Сбросить по умолчанию","perm.customized":"изменено","perm.level.admin":"Только администратор","perm.level.tripOwner":"Владелец поездки","perm.level.tripMember":"Участники поездки","perm.level.everybody":"Все","perm.cat.trip":"Управление поездками","perm.cat.members":"Управление участниками","perm.cat.files":"Файлы","perm.cat.content":"Контент и расписание","perm.cat.extras":"Бюджет, сборы и совместная работа","perm.action.trip_create":"Создавать поездки","perm.action.trip_edit":"Редактировать детали поездки","perm.action.trip_delete":"Удалять поездки","perm.action.trip_archive":"Архивировать / разархивировать поездки","perm.action.trip_cover_upload":"Загружать обложку","perm.action.member_manage":"Добавлять / удалять участников","perm.action.file_upload":"Загружать файлы","perm.action.file_edit":"Редактировать метаданные файлов","perm.action.file_delete":"Удалять файлы","perm.action.place_edit":"Добавлять / редактировать / удалять места","perm.action.day_edit":"Редактировать дни, заметки и назначения","perm.action.reservation_edit":"Управлять бронированиями","perm.action.budget_edit":"Управлять бюджетом","perm.action.packing_edit":"Управлять списками вещей","perm.action.collab_edit":"Совместная работа (заметки, опросы, чат)","perm.action.share_manage":"Управлять ссылками для обмена","perm.actionHint.trip_create":"Кто может создавать новые поездки","perm.actionHint.trip_edit":"Кто может менять название, даты, описание и валюту поездки","perm.actionHint.trip_delete":"Кто может безвозвратно удалить поездку","perm.actionHint.trip_archive":"Кто может архивировать или разархивировать поездку","perm.actionHint.trip_cover_upload":"Кто может загружать или менять обложку","perm.actionHint.member_manage":"Кто может приглашать или удалять участников поездки","perm.actionHint.file_upload":"Кто может загружать файлы в поездку","perm.actionHint.file_edit":"Кто может редактировать описания и ссылки файлов","perm.actionHint.file_delete":"Кто может перемещать файлы в корзину или безвозвратно удалять","perm.actionHint.place_edit":"Кто может добавлять, редактировать или удалять места","perm.actionHint.day_edit":"Кто может редактировать дни, заметки к дням и назначения мест","perm.actionHint.reservation_edit":"Кто может создавать, редактировать или удалять бронирования","perm.actionHint.budget_edit":"Кто может создавать, редактировать или удалять статьи бюджета","perm.actionHint.packing_edit":"Кто может управлять вещами для сборов и сумками","perm.actionHint.collab_edit":"Кто может создавать заметки, опросы и отправлять сообщения","perm.actionHint.share_manage":"Кто может создавать или удалять публичные ссылки для обмена"},_M={"common.save":"保存","common.cancel":"取消","common.delete":"删除","common.edit":"编辑","common.add":"添加","common.loading":"加载中...","common.import":"导入","common.error":"错误","common.back":"返回","common.all":"全部","common.close":"关闭","common.open":"打开","common.upload":"上传","common.search":"搜索","common.confirm":"确认","common.ok":"确定","common.yes":"是","common.no":"否","common.or":"或","common.none":"无","common.date":"日期","common.rename":"重命名","common.name":"名称","common.email":"邮箱","common.password":"密码","common.saving":"保存中...","common.saved":"已保存","trips.reminder":"提醒","trips.reminderNone":"无","trips.reminderDay":"天","trips.reminderDays":"天","trips.reminderCustom":"自定义","trips.reminderDaysBefore":"天前提醒","trips.reminderDisabledHint":"旅行提醒已禁用。请在管理 > 设置 > 通知中启用。","common.update":"更新","common.change":"修改","common.uploading":"上传中…","common.backToPlanning":"返回规划","common.reset":"重置","nav.trip":"旅行","nav.share":"分享","nav.settings":"设置","nav.admin":"管理","nav.logout":"退出登录","nav.lightMode":"浅色模式","nav.darkMode":"深色模式","nav.autoMode":"自动模式","nav.administrator":"管理员","dashboard.title":"我的旅行","dashboard.subtitle.loading":"加载旅行中...","dashboard.subtitle.trips":"{count} 次旅行({archived} 已归档)","dashboard.subtitle.empty":"开始你的第一次旅行","dashboard.subtitle.activeOne":"{count} 个进行中的旅行","dashboard.subtitle.activeMany":"{count} 个进行中的旅行","dashboard.subtitle.archivedSuffix":" · {count} 已归档","dashboard.newTrip":"新建旅行","dashboard.gridView":"网格视图","dashboard.listView":"列表视图","dashboard.currency":"货币","dashboard.timezone":"时区","dashboard.localTime":"本地","dashboard.timezoneCustomTitle":"自定义时区","dashboard.timezoneCustomLabelPlaceholder":"标签(可选)","dashboard.timezoneCustomTzPlaceholder":"如 America/New_York","dashboard.timezoneCustomAdd":"添加","dashboard.timezoneCustomErrorEmpty":"请输入时区标识符","dashboard.timezoneCustomErrorInvalid":"无效的时区。请使用 Europe/Berlin 这样的格式","dashboard.timezoneCustomErrorDuplicate":"已添加","dashboard.emptyTitle":"暂无旅行","dashboard.emptyText":"创建你的第一次旅行,开始规划吧!","dashboard.emptyButton":"创建第一次旅行","dashboard.nextTrip":"下次旅行","dashboard.shared":"共享","dashboard.sharedBy":"由 {name} 分享","dashboard.days":"天","dashboard.places":"地点","dashboard.archive":"归档","dashboard.restore":"恢复","dashboard.archived":"已归档","dashboard.status.ongoing":"进行中","dashboard.status.today":"今天","dashboard.status.tomorrow":"明天","dashboard.status.past":"已结束","dashboard.status.daysLeft":"还剩 {count} 天","dashboard.toast.loadError":"加载旅行失败","dashboard.toast.created":"旅行创建成功!","dashboard.toast.createError":"创建旅行失败","dashboard.toast.updated":"旅行已更新!","dashboard.toast.updateError":"更新旅行失败","dashboard.toast.deleted":"旅行已删除","dashboard.toast.deleteError":"删除旅行失败","dashboard.toast.archived":"旅行已归档","dashboard.toast.archiveError":"归档旅行失败","dashboard.toast.restored":"旅行已恢复","dashboard.toast.restoreError":"恢复旅行失败","dashboard.confirm.delete":"删除旅行「{title}」?所有地点和计划将被永久删除。","dashboard.editTrip":"编辑旅行","dashboard.createTrip":"创建新旅行","dashboard.tripTitle":"标题","dashboard.tripTitlePlaceholder":"如:日本夏日之旅","dashboard.tripDescription":"描述","dashboard.tripDescriptionPlaceholder":"这次旅行是关于什么的?","dashboard.startDate":"开始日期","dashboard.endDate":"结束日期","dashboard.noDateHint":"未设置日期——将默认创建 7 天。你可以随时修改。","dashboard.coverImage":"封面图片","dashboard.addCoverImage":"添加封面图片","dashboard.addMembers":"旅伴","dashboard.addMember":"添加成员","dashboard.coverSaved":"封面图片已保存","dashboard.coverUploadError":"上传失败","dashboard.coverRemoveError":"移除失败","dashboard.titleRequired":"标题为必填项","dashboard.endDateError":"结束日期必须晚于开始日期","settings.title":"设置","settings.subtitle":"配置你的个人设置","settings.map":"地图","settings.mapTemplate":"地图模板","settings.mapTemplatePlaceholder.select":"选择模板...","settings.mapDefaultHint":"留空则使用 OpenStreetMap(默认)","settings.mapTemplatePlaceholder":"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png","settings.mapHint":"地图瓦片 URL 模板","settings.latitude":"纬度","settings.longitude":"经度","settings.saveMap":"保存地图","settings.apiKeys":"API 密钥","settings.mapsKey":"Google Maps API 密钥","settings.mapsKeyHint":"用于地点搜索。需要 Places API (New)。在 console.cloud.google.com 获取","settings.weatherKey":"OpenWeatherMap API 密钥","settings.weatherKeyHint":"用于天气数据。在 openweathermap.org/api 免费获取","settings.keyPlaceholder":"输入密钥...","settings.configured":"已配置","settings.saveKeys":"保存密钥","settings.display":"显示","settings.colorMode":"颜色模式","settings.light":"浅色","settings.dark":"深色","settings.auto":"自动","settings.language":"语言","settings.temperature":"温度单位","settings.timeFormat":"时间格式","settings.routeCalculation":"路线计算","settings.blurBookingCodes":"模糊预订代码","settings.notifications":"通知","settings.notifyTripInvite":"旅行邀请","settings.notifyBookingChange":"预订变更","settings.notifyTripReminder":"旅行提醒","settings.notifyVacayInvite":"Vacay 融合邀请","settings.notifyPhotosShared":"共享照片 (Immich)","settings.notifyCollabMessage":"聊天消息 (Collab)","settings.notifyPackingTagged":"行李清单:分配","settings.notifyWebhook":"Webhook 通知","settings.notificationsDisabled":"通知尚未配置。请联系管理员启用电子邮件或 Webhook 通知。","settings.notificationsActive":"活跃频道","settings.notificationsManagedByAdmin":"通知事件由管理员配置。","admin.notifications.title":"通知","admin.notifications.hint":"选择一个通知渠道。一次只能激活一个。","admin.notifications.none":"已禁用","admin.notifications.email":"电子邮件 (SMTP)","admin.notifications.webhook":"Webhook","admin.notifications.events":"通知事件","admin.notifications.eventsHint":"选择哪些事件为所有用户触发通知。","admin.notifications.configureFirst":"请先在下方配置 SMTP 或 Webhook,然后启用事件。","admin.notifications.save":"保存通知设置","admin.notifications.saved":"通知设置已保存","admin.notifications.testWebhook":"发送测试 Webhook","admin.notifications.testWebhookSuccess":"测试 Webhook 发送成功","admin.notifications.testWebhookFailed":"测试 Webhook 发送失败","admin.smtp.title":"邮件与通知","admin.smtp.hint":"用于发送电子邮件通知的 SMTP 配置。","admin.smtp.testButton":"发送测试邮件","admin.webhook.hint":"向外部 Webhook 发送通知(Discord、Slack 等)。","admin.smtp.testSuccess":"测试邮件发送成功","admin.smtp.testFailed":"测试邮件发送失败","dayplan.icsTooltip":"导出日历 (ICS)","share.linkTitle":"公开链接","share.linkHint":"创建一个链接,任何人无需登录即可查看此旅行。仅可查看,无法编辑。","share.createLink":"创建链接","share.deleteLink":"删除链接","share.createError":"无法创建链接","common.copy":"复制","common.copied":"已复制","share.permMap":"地图与计划","share.permBookings":"预订","share.permPacking":"行李","shared.expired":"链接已过期或无效","shared.expiredHint":"此共享旅行链接已失效。","shared.readOnly":"只读共享视图","shared.tabPlan":"计划","shared.tabBookings":"预订","shared.tabPacking":"行李","shared.tabBudget":"预算","shared.tabChat":"聊天","shared.days":"天","shared.places":"个地点","shared.other":"其他","shared.totalBudget":"总预算","shared.messages":"条消息","shared.sharedVia":"通过以下分享","shared.confirmed":"已确认","shared.pending":"待确认","share.permBudget":"预算","share.permCollab":"聊天","settings.on":"开","settings.off":"关","settings.mcp.title":"MCP 配置","settings.mcp.endpoint":"MCP 端点","settings.mcp.clientConfig":"客户端配置","settings.mcp.clientConfigHint":"将 替换为下方列表中的 API 令牌。npx 的路径可能需要根据您的系统进行调整(例如 Windows 上为 C:\\PROGRA~1\\nodejs\\npx.cmd)。","settings.mcp.copy":"复制","settings.mcp.copied":"已复制!","settings.mcp.apiTokens":"API 令牌","settings.mcp.createToken":"创建新令牌","settings.mcp.noTokens":"暂无令牌,请创建一个以连接 MCP 客户端。","settings.mcp.tokenCreatedAt":"创建于","settings.mcp.tokenUsedAt":"使用于","settings.mcp.deleteTokenTitle":"删除令牌","settings.mcp.deleteTokenMessage":"此令牌将立即失效,使用它的所有 MCP 客户端将失去访问权限。","settings.mcp.modal.createTitle":"创建 API 令牌","settings.mcp.modal.tokenName":"令牌名称","settings.mcp.modal.tokenNamePlaceholder":"例如:Claude Desktop、工作电脑","settings.mcp.modal.creating":"创建中…","settings.mcp.modal.create":"创建令牌","settings.mcp.modal.createdTitle":"令牌已创建","settings.mcp.modal.createdWarning":"此令牌只会显示一次,请立即复制并妥善保存——无法找回。","settings.mcp.modal.done":"完成","settings.mcp.toast.created":"令牌已创建","settings.mcp.toast.createError":"创建令牌失败","settings.mcp.toast.deleted":"令牌已删除","settings.mcp.toast.deleteError":"删除令牌失败","settings.account":"账户","settings.username":"用户名","settings.email":"邮箱","settings.role":"角色","settings.roleAdmin":"管理员","settings.oidcLinked":"已关联","settings.changePassword":"修改密码","settings.mustChangePassword":"您必须更改密码才能继续。请在下方设置新密码。","settings.currentPassword":"当前密码","settings.currentPasswordRequired":"请输入当前密码","settings.newPassword":"新密码","settings.confirmPassword":"确认新密码","settings.updatePassword":"更新密码","settings.passwordRequired":"请输入当前密码和新密码","settings.passwordTooShort":"密码至少需要 8 个字符","settings.passwordMismatch":"两次输入的密码不一致","settings.passwordWeak":"密码必须包含大写字母、小写字母、数字和特殊字符","settings.passwordChanged":"密码修改成功","settings.deleteAccount":"删除账户","settings.deleteAccountTitle":"确定删除账户?","settings.deleteAccountWarning":"你的账户以及所有旅行、地点和文件将被永久删除。此操作无法撤销。","settings.deleteAccountConfirm":"永久删除","settings.deleteBlockedTitle":"无法删除","settings.deleteBlockedMessage":"你是唯一的管理员。请先将其他用户提升为管理员,然后再删除账户。","settings.roleUser":"用户","settings.saveProfile":"保存资料","settings.mfa.title":"双因素认证 (2FA)","settings.mfa.description":"登录时添加第二步验证。使用身份验证器应用(Google Authenticator、Authy 等)。","settings.mfa.requiredByPolicy":"管理员要求双因素身份验证。请先完成下方的身份验证器设置后再继续。","settings.mfa.backupTitle":"备用代码","settings.mfa.backupDescription":"如果你无法使用身份验证器应用,可使用这些一次性备用代码登录。","settings.mfa.backupWarning":"请立即保存这些代码。每个代码只能使用一次。","settings.mfa.backupCopy":"复制代码","settings.mfa.backupDownload":"下载 TXT","settings.mfa.backupPrint":"打印 / PDF","settings.mfa.backupCopied":"备用代码已复制","settings.mfa.enabled":"您的账户已启用 2FA。","settings.mfa.disabled":"2FA 未启用。","settings.mfa.setup":"设置身份验证器","settings.mfa.scanQr":"使用应用扫描此二维码,或手动输入密钥。","settings.mfa.secretLabel":"密钥(手动输入)","settings.mfa.codePlaceholder":"6 位验证码","settings.mfa.enable":"启用 2FA","settings.mfa.cancelSetup":"取消","settings.mfa.disableTitle":"停用 2FA","settings.mfa.disableHint":"输入您的账户密码和身份验证器中的当前验证码。","settings.mfa.disable":"停用 2FA","settings.mfa.toastEnabled":"双因素认证已启用","settings.mfa.toastDisabled":"双因素认证已停用","settings.mfa.demoBlocked":"演示模式下不可用","settings.toast.mapSaved":"地图设置已保存","settings.toast.keysSaved":"API 密钥已保存","settings.toast.displaySaved":"显示设置已保存","settings.toast.profileSaved":"资料已保存","settings.uploadAvatar":"上传头像","settings.removeAvatar":"移除头像","settings.avatarUploaded":"头像已更新","settings.avatarRemoved":"头像已移除","settings.avatarError":"上传失败","login.error":"登录失败,请检查你的凭据。","login.tagline":`你的旅行。 你的计划。`,"login.description":"通过互动地图、预算管理和实时同步,协同规划旅行。","login.features.maps":"互动地图","login.features.mapsDesc":"Google Places、路线和聚类","login.features.realtime":"实时同步","login.features.realtimeDesc":"通过 WebSocket 协同规划","login.features.budget":"预算跟踪","login.features.budgetDesc":"分类、图表和人均费用","login.features.collab":"协作","login.features.collabDesc":"多用户共享旅行","login.features.packing":"行李清单","login.features.packingDesc":"分类、进度和建议","login.features.bookings":"预订","login.features.bookingsDesc":"航班、酒店、餐厅等","login.features.files":"文档","login.features.filesDesc":"上传和管理文档","login.features.routes":"智能路线","login.features.routesDesc":"自动优化和导出到 Google Maps","login.selfHosted":"自托管 · 开源 · 数据由你掌控","login.title":"登录","login.subtitle":"欢迎回来","login.signingIn":"登录中…","login.signIn":"登录","login.createAdmin":"创建管理员账户","login.createAdminHint":"为 TREK 设置第一个管理员账户。","login.setNewPassword":"设置新密码","login.setNewPasswordHint":"您必须更改密码才能继续。","login.createAccount":"创建账户","login.createAccountHint":"注册新账户。","login.creating":"创建中…","login.noAccount":"还没有账户?","login.hasAccount":"已有账户?","login.register":"注册","login.emailPlaceholder":"your@email.com","login.username":"用户名","login.oidc.registrationDisabled":"注册已关闭。请联系管理员。","login.oidc.noEmail":"未从提供商获取到邮箱。","login.mfaTitle":"双因素认证","login.mfaSubtitle":"请输入身份验证器应用中的 6 位验证码。","login.mfaCodeLabel":"验证码","login.mfaCodeRequired":"请输入身份验证器应用中的验证码。","login.mfaHint":"打开 Google Authenticator、Authy 或其他 TOTP 应用。","login.mfaBack":"← 返回登录","login.mfaVerify":"验证","login.oidc.tokenFailed":"认证失败。","login.oidc.invalidState":"会话无效,请重试。","login.demoFailed":"演示登录失败","login.oidcSignIn":"通过 {name} 登录","login.oidcOnly":"密码登录已关闭。请通过 SSO 提供商登录。","login.demoHint":"试用演示——无需注册","register.passwordMismatch":"两次输入的密码不一致","register.passwordTooShort":"密码至少需要 8 个字符","register.failed":"注册失败","register.getStarted":"开始使用","register.subtitle":"创建账户,开始规划你的梦想旅行。","register.feature1":"无限旅行计划","register.feature2":"互动地图视图","register.feature3":"管理地点和分类","register.feature4":"跟踪预订","register.feature5":"创建行李清单","register.feature6":"存储照片和文件","register.createAccount":"创建账户","register.startPlanning":"开始规划你的旅行","register.minChars":"至少 6 个字符","register.confirmPassword":"确认密码","register.repeatPassword":"重复密码","register.registering":"注册中...","register.register":"注册","register.hasAccount":"已有账户?","register.signIn":"登录","admin.title":"管理后台","admin.subtitle":"用户管理和系统设置","admin.tabs.users":"用户","admin.tabs.categories":"分类","admin.tabs.backup":"备份","admin.tabs.audit":"审计日志","admin.stats.users":"用户","admin.stats.trips":"旅行","admin.stats.places":"地点","admin.stats.photos":"照片","admin.stats.files":"文件","admin.table.user":"用户","admin.table.email":"邮箱","admin.table.role":"角色","admin.table.created":"创建时间","admin.table.lastLogin":"最后登录","admin.table.actions":"操作","admin.you":"(你)","admin.editUser":"编辑用户","admin.newPassword":"新密码","admin.newPasswordHint":"留空则保持当前密码","admin.deleteUser":"删除用户「{name}」?所有旅行将被永久删除。","admin.deleteUserTitle":"删除用户","admin.newPasswordPlaceholder":"输入新密码…","admin.toast.loadError":"加载管理数据失败","admin.toast.userUpdated":"用户已更新","admin.toast.updateError":"更新失败","admin.toast.userDeleted":"用户已删除","admin.toast.deleteError":"删除失败","admin.toast.cannotDeleteSelf":"不能删除自己的账户","admin.toast.userCreated":"用户已创建","admin.toast.createError":"创建用户失败","admin.toast.fieldsRequired":"用户名、邮箱和密码为必填项","admin.createUser":"创建用户","admin.invite.title":"邀请链接","admin.invite.subtitle":"创建一次性注册链接","admin.invite.create":"创建链接","admin.invite.createAndCopy":"创建并复制","admin.invite.empty":"尚未创建邀请链接","admin.invite.maxUses":"最大使用次数","admin.invite.expiry":"有效期","admin.invite.uses":"已使用","admin.invite.expiresAt":"过期时间","admin.invite.createdBy":"由","admin.invite.active":"有效","admin.invite.expired":"已过期","admin.invite.usedUp":"已用完","admin.invite.copied":"邀请链接已复制","admin.invite.copyLink":"复制链接","admin.invite.deleted":"邀请链接已删除","admin.invite.createError":"创建链接失败","admin.invite.deleteError":"删除链接失败","admin.tabs.settings":"设置","admin.allowRegistration":"允许注册","admin.allowRegistrationHint":"新用户可以自行注册","admin.requireMfa":"要求双因素身份验证(2FA)","admin.requireMfaHint":"未启用 2FA 的用户必须先完成设置中的配置才能使用应用。","admin.apiKeys":"API 密钥","admin.apiKeysHint":"可选。启用地点的扩展数据,如照片和天气。","admin.mapsKey":"Google Maps API 密钥","admin.mapsKeyHint":"用于地点搜索。在 console.cloud.google.com 获取","admin.mapsKeyHintLong":"没有 API 密钥时,使用 OpenStreetMap 搜索地点。有了 Google API 密钥,还可以加载照片、评分和营业时间。在 console.cloud.google.com 获取。","admin.recommended":"推荐","admin.weatherKey":"OpenWeatherMap API 密钥","admin.weatherKeyHint":"用于天气数据。在 openweathermap.org 免费获取","admin.validateKey":"测试","admin.keyValid":"已连接","admin.keyInvalid":"无效","admin.keySaved":"API 密钥已保存","admin.oidcTitle":"单点登录 (OIDC)","admin.oidcSubtitle":"允许通过 Google、Apple、Authentik 或 Keycloak 等外部提供商登录。","admin.oidcDisplayName":"显示名称","admin.oidcIssuer":"颁发者 URL","admin.oidcIssuerHint":"提供商的 OpenID Connect 颁发者 URL。如 https://accounts.google.com","admin.oidcSaved":"OIDC 配置已保存","admin.oidcOnlyMode":"禁用密码登录","admin.oidcOnlyModeHint":"启用后,仅允许 SSO 登录。密码登录和注册将被禁用。","admin.fileTypes":"允许的文件类型","admin.fileTypesHint":"配置用户可以上传的文件类型。","admin.fileTypesFormat":"以逗号分隔的扩展名(如 jpg,png,pdf,doc)。使用 * 允许所有类型。","admin.fileTypesSaved":"文件类型设置已保存","admin.bagTracking.title":"行李追踪","admin.bagTracking.subtitle":"为打包物品启用重量和行李分配","admin.tabs.config":"配置","admin.tabs.templates":"打包模板","admin.packingTemplates.title":"打包模板","admin.packingTemplates.subtitle":"创建可复用的旅行打包清单","admin.packingTemplates.create":"新建模板","admin.packingTemplates.namePlaceholder":"模板名称(如:海滩度假)","admin.packingTemplates.empty":"尚未创建模板","admin.packingTemplates.items":"物品","admin.packingTemplates.categories":"分类","admin.packingTemplates.itemName":"物品名称","admin.packingTemplates.itemCategory":"分类","admin.packingTemplates.categoryName":"分类名称(如:衣物)","admin.packingTemplates.addCategory":"添加分类","admin.packingTemplates.created":"模板已创建","admin.packingTemplates.deleted":"模板已删除","admin.packingTemplates.loadError":"加载模板失败","admin.packingTemplates.createError":"创建模板失败","admin.packingTemplates.deleteError":"删除模板失败","admin.packingTemplates.saveError":"保存失败","admin.tabs.addons":"扩展","admin.addons.title":"扩展","admin.addons.subtitle":"启用或禁用功能以自定义你的 TREK 体验。","admin.addons.catalog.memories.name":"照片 (Immich)","admin.addons.catalog.memories.description":"通过 Immich 实例分享旅行照片","admin.addons.catalog.mcp.name":"MCP","admin.addons.catalog.mcp.description":"用于 AI 助手集成的模型上下文协议","admin.addons.catalog.packing.name":"行李","admin.addons.catalog.packing.description":"每次旅行的行李准备清单","admin.addons.catalog.budget.name":"预算","admin.addons.catalog.budget.description":"跟踪支出并规划旅行预算","admin.addons.catalog.documents.name":"文档","admin.addons.catalog.documents.description":"存储和管理旅行文档","admin.addons.catalog.vacay.name":"Vacay","admin.addons.catalog.vacay.description":"带日历视图的个人假期规划器","admin.addons.catalog.atlas.name":"Atlas","admin.addons.catalog.atlas.description":"标记已访问国家和旅行统计的世界地图","admin.addons.catalog.collab.name":"Collab","admin.addons.catalog.collab.description":"旅行规划的实时笔记、投票和聊天","admin.addons.subtitleBefore":"启用或禁用功能以自定义你的 ","admin.addons.subtitleAfter":" 体验。","admin.addons.enabled":"已启用","admin.addons.disabled":"已禁用","admin.addons.type.trip":"旅行","admin.addons.type.global":"全局","admin.addons.type.integration":"集成","admin.addons.tripHint":"在每次旅行中作为标签页显示","admin.addons.globalHint":"在主导航中作为独立板块显示","admin.addons.integrationHint":"后端服务和 API 集成,无专属页面","admin.addons.toast.updated":"扩展已更新","admin.addons.toast.error":"更新扩展失败","admin.addons.noAddons":"暂无可用扩展","admin.weather.title":"天气数据","admin.weather.badge":"自 2026 年 3 月 24 日起","admin.weather.description":"TREK 使用 Open-Meteo 作为天气数据源。Open-Meteo 是免费的开源天气服务——无需 API 密钥。","admin.weather.forecast":"16 天天气预报","admin.weather.forecastDesc":"之前为 5 天 (OpenWeatherMap)","admin.weather.climate":"历史气候数据","admin.weather.climateDesc":"16 天预报之外的日期使用过去 85 年的平均值","admin.weather.requests":"每天 10,000 次请求","admin.weather.requestsDesc":"免费,无需 API 密钥","admin.weather.locationHint":"天气基于每天中第一个有坐标的地点。如果当天没有分配地点,则使用地点列表中的任意地点作为参考。","admin.tabs.mcpTokens":"MCP 令牌","admin.mcpTokens.title":"MCP 令牌","admin.mcpTokens.subtitle":"管理所有用户的 API 令牌","admin.mcpTokens.owner":"所有者","admin.mcpTokens.tokenName":"令牌名称","admin.mcpTokens.created":"创建时间","admin.mcpTokens.lastUsed":"最后使用","admin.mcpTokens.never":"从未","admin.mcpTokens.empty":"尚未创建任何 MCP 令牌","admin.mcpTokens.deleteTitle":"删除令牌","admin.mcpTokens.deleteMessage":"此令牌将立即被撤销。用户将失去通过此令牌的 MCP 访问权限。","admin.mcpTokens.deleteSuccess":"令牌已删除","admin.mcpTokens.deleteError":"删除令牌失败","admin.mcpTokens.loadError":"加载令牌失败","admin.tabs.github":"GitHub","admin.audit.subtitle":"安全与管理员操作记录(备份、用户、MFA、设置)。","admin.audit.empty":"暂无审计记录。","admin.audit.refresh":"刷新","admin.audit.loadMore":"加载更多","admin.audit.showing":"已加载 {count} 条 · 共 {total} 条","admin.audit.col.time":"时间","admin.audit.col.user":"用户","admin.audit.col.action":"操作","admin.audit.col.resource":"资源","admin.audit.col.ip":"IP","admin.audit.col.details":"详情","admin.github.title":"版本历史","admin.github.subtitle":"{repo} 的最新更新","admin.github.latest":"最新","admin.github.prerelease":"预发布","admin.github.showDetails":"显示详情","admin.github.hideDetails":"隐藏详情","admin.github.loadMore":"加载更多","admin.github.loading":"加载中...","admin.github.support":"帮助我继续开发 TREK","admin.github.error":"加载版本失败","admin.github.by":"作者","admin.update.available":"有可用更新","admin.update.text":"TREK {version} 已发布。你当前使用的是 {current}。","admin.update.button":"在 GitHub 查看","admin.update.install":"安装更新","admin.update.confirmTitle":"确定安装更新?","admin.update.confirmText":"TREK 将从 {current} 更新到 {version}。服务器将自动重启。","admin.update.dataInfo":"你的所有数据(旅行、用户、API 密钥、上传文件、Vacay、Atlas、预算)将被保留。","admin.update.warning":"重启期间应用将短暂不可用。","admin.update.confirm":"立即更新","admin.update.installing":"更新中…","admin.update.success":"更新已安装!服务器正在重启…","admin.update.failed":"更新失败","admin.update.backupHint":"建议在更新前创建备份。","admin.update.backupLink":"前往备份","admin.update.howTo":"如何更新","admin.update.dockerText":"你的 TREK 实例运行在 Docker 中。要更新到 {version},请在服务器上执行以下命令:","admin.update.reloadHint":"请在几秒后刷新页面。","vacay.subtitle":"规划和管理假期","vacay.settings":"设置","vacay.year":"年份","vacay.addYear":"添加年份","vacay.removeYear":"移除年份","vacay.removeYearConfirm":"移除 {year}?","vacay.removeYearHint":"该年度所有假期记录和公司假日将被永久删除。","vacay.remove":"移除","vacay.persons":"成员","vacay.noPersons":"暂无成员","vacay.addPerson":"添加成员","vacay.editPerson":"编辑成员","vacay.removePerson":"移除成员","vacay.removePersonConfirm":"移除 {name}?","vacay.removePersonHint":"该成员的所有假期记录将被永久删除。","vacay.personName":"姓名","vacay.personNamePlaceholder":"输入姓名","vacay.color":"颜色","vacay.add":"添加","vacay.legend":"图例","vacay.publicHoliday":"公共假日","vacay.companyHoliday":"公司假日","vacay.weekend":"周末","vacay.modeVacation":"休假","vacay.modeCompany":"公司假日","vacay.entitlement":"年假额度","vacay.entitlementDays":"天","vacay.used":"已用","vacay.remaining":"剩余","vacay.carriedOver":"从 {year} 结转","vacay.blockWeekends":"锁定周末","vacay.blockWeekendsHint":"禁止在周六和周日安排假期","vacay.weekendDays":"周末","vacay.mon":"周一","vacay.tue":"周二","vacay.wed":"周三","vacay.thu":"周四","vacay.fri":"周五","vacay.sat":"周六","vacay.sun":"周日","vacay.publicHolidays":"公共假日","vacay.publicHolidaysHint":"在日历中标记公共假日","vacay.selectCountry":"选择国家","vacay.selectRegion":"选择地区(可选)","vacay.companyHolidays":"公司假日","vacay.companyHolidaysHint":"允许标记公司统一休假日","vacay.companyHolidaysNoDeduct":"公司假日不计入年假天数。","vacay.carryOver":"结转","vacay.carryOverHint":"自动将剩余年假天数结转到下一年","vacay.sharing":"共享","vacay.sharingHint":"与其他 TREK 用户共享你的假期计划","vacay.owner":"所有者","vacay.shareEmailPlaceholder":"TREK 用户邮箱","vacay.shareSuccess":"计划共享成功","vacay.shareError":"无法共享计划","vacay.dissolve":"解除合并","vacay.dissolveHint":"重新分离日历。你的记录将被保留。","vacay.dissolveAction":"解除","vacay.dissolved":"日历已分离","vacay.fusedWith":"已合并","vacay.you":"你","vacay.noData":"暂无数据","vacay.changeColor":"更改颜色","vacay.inviteUser":"邀请用户","vacay.inviteHint":"邀请其他 TREK 用户共享合并的假期日历。","vacay.selectUser":"选择用户","vacay.sendInvite":"发送邀请","vacay.inviteSent":"邀请已发送","vacay.inviteError":"无法发送邀请","vacay.pending":"待处理","vacay.noUsersAvailable":"没有可用用户","vacay.accept":"接受","vacay.decline":"拒绝","vacay.acceptFusion":"接受并合并","vacay.inviteTitle":"合并请求","vacay.inviteWantsToFuse":"想要与你共享假期日历。","vacay.fuseInfo1":"你们双方将在一个共享日历中看到所有假期记录。","vacay.fuseInfo2":"双方都可以为对方创建和编辑记录。","vacay.fuseInfo3":"双方都可以删除记录和修改年假额度。","vacay.fuseInfo4":"公共假日和公司假日等设置将共享。","vacay.fuseInfo5":"任何一方都可以随时解除合并。你的记录将被保留。","vacay.addCalendar":"添加日历","vacay.calendarColor":"颜色","vacay.calendarLabel":"标签","vacay.noCalendars":"无日历","nav.myTrips":"我的旅行","atlas.subtitle":"你的全球旅行足迹","atlas.countries":"国家","atlas.trips":"旅行","atlas.places":"地点","atlas.days":"天","atlas.visitedCountries":"已访问国家","atlas.cities":"城市","atlas.noData":"暂无旅行数据","atlas.noDataHint":"创建旅行并添加地点以查看世界地图","atlas.lastTrip":"上次旅行","atlas.nextTrip":"下次旅行","atlas.daysLeft":"天后出发","atlas.streak":"连续","atlas.year":"年","atlas.years":"年","atlas.yearInRow":"年连续","atlas.yearsInRow":"年连续","atlas.tripIn":"次旅行在","atlas.tripsIn":"次旅行在","atlas.since":"自","atlas.europe":"欧洲","atlas.asia":"亚洲","atlas.northAmerica":"北美洲","atlas.southAmerica":"南美洲","atlas.africa":"非洲","atlas.oceania":"大洋洲","atlas.other":"其他","atlas.firstVisit":"首次旅行","atlas.lastVisitLabel":"最近旅行","atlas.tripSingular":"次旅行","atlas.tripPlural":"次旅行","atlas.placeVisited":"个地点已访问","atlas.placesVisited":"个地点已访问","atlas.statsTab":"统计","atlas.bucketTab":"心愿单","atlas.addBucket":"添加到心愿单","atlas.bucketNamePlaceholder":"地点或目的地...","atlas.bucketNotesPlaceholder":"备注(可选)","atlas.bucketEmpty":"你的心愿单是空的","atlas.bucketEmptyHint":"添加你梦想去的地方","atlas.unmark":"移除","atlas.confirmMark":"将此国家标记为已访问?","atlas.confirmUnmark":"从已访问列表中移除此国家?","atlas.markVisited":"标记为已访问","atlas.markVisitedHint":"将此国家添加到已访问列表","atlas.addToBucket":"添加到心愿单","atlas.addPoi":"添加地点","atlas.searchCountry":"搜索国家...","atlas.month":"月份","atlas.addToBucketHint":"保存为想去的地方","atlas.bucketWhen":"你计划什么时候去?","trip.tabs.plan":"计划","trip.tabs.reservations":"预订","trip.tabs.reservationsShort":"预订","trip.tabs.packing":"行李清单","trip.tabs.packingShort":"行李","trip.tabs.budget":"预算","trip.tabs.files":"文件","trip.loading":"加载旅行中...","trip.loadingPhotos":"正在加载地点照片...","trip.mobilePlan":"计划","trip.mobilePlaces":"地点","trip.toast.placeUpdated":"地点已更新","trip.toast.placeAdded":"地点已添加","trip.toast.placeDeleted":"地点已删除","trip.toast.selectDay":"请先选择一天","trip.toast.assignedToDay":"地点已分配到当天","trip.toast.reorderError":"排序失败","trip.toast.reservationUpdated":"预订已更新","trip.toast.reservationAdded":"预订已添加","trip.toast.deleted":"已删除","trip.confirm.deletePlace":"确定要删除这个地点吗?","dayplan.emptyDay":"当天暂无计划","dayplan.addNote":"添加备注","dayplan.editNote":"编辑备注","dayplan.noteAdd":"添加备注","dayplan.noteEdit":"编辑备注","dayplan.noteTitle":"备注","dayplan.noteSubtitle":"每日备注","dayplan.totalCost":"总费用","dayplan.days":"天","dayplan.dayN":"第 {n} 天","dayplan.calculating":"计算中...","dayplan.route":"路线","dayplan.optimize":"优化","dayplan.optimized":"路线已优化","dayplan.routeError":"路线计算失败","dayplan.toast.needTwoPlaces":"路线优化至少需要两个地点","dayplan.toast.routeOptimized":"路线已优化","dayplan.toast.noGeoPlaces":"未找到有坐标的地点用于路线计算","dayplan.confirmed":"已确认","dayplan.pendingRes":"待确认","dayplan.pdf":"PDF","dayplan.pdfTooltip":"导出当天计划为 PDF","dayplan.pdfError":"PDF 导出失败","dayplan.cannotReorderTransport":"有固定时间的预订无法重新排序","dayplan.confirmRemoveTimeTitle":"移除时间?","dayplan.confirmRemoveTimeBody":"此地点有固定时间({time})。移动后将移除时间并允许自由排序。","dayplan.confirmRemoveTimeAction":"移除时间并移动","dayplan.cannotDropOnTimed":"无法将项目放置在有固定时间的条目之间","dayplan.cannotBreakChronology":"这将打乱已计划项目和预订的时间顺序","places.addPlace":"添加地点/活动","places.importGpx":"GPX","places.gpxImported":"已从 GPX 导入 {count} 个地点","places.gpxError":"GPX 导入失败","places.importGoogleList":"Google 列表","places.googleListHint":"粘贴共享的 Google Maps 列表链接以导入所有地点。","places.googleListImported":'已从"{list}"导入 {count} 个地点',"places.googleListError":"Google Maps 列表导入失败","places.viewDetails":"查看详情","places.urlResolved":"已从 URL 导入地点","places.assignToDay":"添加到哪一天?","places.all":"全部","places.unplanned":"未规划","places.search":"搜索地点...","places.allCategories":"所有分类","places.categoriesSelected":"个分类","places.clearFilter":"清除筛选","places.count":"{count} 个地点","places.countSingular":"1 个地点","places.allPlanned":"所有地点已规划","places.noneFound":"未找到地点","places.editPlace":"编辑地点","places.formName":"名称","places.formNamePlaceholder":"如:埃菲尔铁塔","places.formDescription":"描述","places.formDescriptionPlaceholder":"简短描述...","places.formAddress":"地址","places.formAddressPlaceholder":"街道、城市、国家","places.formLat":"纬度(如 48.8566)","places.formLng":"经度(如 2.3522)","places.formCategory":"分类","places.noCategory":"无分类","places.categoryNamePlaceholder":"分类名称","places.formTime":"时间","places.startTime":"开始","places.endTime":"结束","places.endTimeBeforeStart":"结束时间早于开始时间","places.timeCollision":"时间冲突:","places.formWebsite":"网站","places.formNotesPlaceholder":"个人备注...","places.formReservation":"预订","places.reservationNotesPlaceholder":"预订备注、确认号...","places.mapsSearchPlaceholder":"搜索地点...","places.mapsSearchError":"地点搜索失败。","places.osmHint":"使用 OpenStreetMap 搜索(无照片、营业时间或评分)。在设置中添加 Google API 密钥以获取完整信息。","places.osmActive":"通过 OpenStreetMap 搜索(无照片、评分或营业时间)。在设置中添加 Google API 密钥以获取增强数据。","places.categoryCreateError":"创建分类失败","places.nameRequired":"请输入名称","places.saveError":"保存失败","inspector.opened":"营业中","inspector.closed":"已关闭","inspector.openingHours":"营业时间","inspector.showHours":"显示营业时间","inspector.files":"文件","inspector.filesCount":"{count} 个文件","inspector.removeFromDay":"从当天移除","inspector.addToDay":"添加到当天","inspector.confirmedRes":"已确认预订","inspector.pendingRes":"待确认预订","inspector.google":"在 Google Maps 中打开","inspector.website":"打开网站","inspector.addRes":"预订","inspector.editRes":"编辑预订","inspector.participants":"参与者","inspector.trackStats":"轨迹数据","reservations.title":"预订","reservations.empty":"暂无预订","reservations.emptyHint":"添加航班、酒店等预订信息","reservations.add":"添加预订","reservations.addManual":"手动添加","reservations.placeHint":"提示:建议从地点直接创建预订,以便与日程计划关联。","reservations.confirmed":"已确认","reservations.pending":"待确认","reservations.summary":"{confirmed} 已确认,{pending} 待确认","reservations.fromPlan":"来自计划","reservations.showFiles":"查看文件","reservations.editTitle":"编辑预订","reservations.status":"状态","reservations.datetime":"日期和时间","reservations.startTime":"开始时间","reservations.endTime":"结束时间","reservations.date":"日期","reservations.time":"时间","reservations.timeAlt":"时间(备选,如 19:30)","reservations.notes":"备注","reservations.notesPlaceholder":"其他备注...","reservations.meta.airline":"航空公司","reservations.meta.flightNumber":"航班号","reservations.meta.from":"出发","reservations.meta.to":"到达","reservations.meta.trainNumber":"车次","reservations.meta.platform":"站台","reservations.meta.seat":"座位","reservations.meta.checkIn":"入住","reservations.meta.checkOut":"退房","reservations.meta.linkAccommodation":"住宿","reservations.meta.pickAccommodation":"关联住宿","reservations.meta.noAccommodation":"无","reservations.meta.hotelPlace":"住宿","reservations.meta.pickHotel":"选择住宿","reservations.meta.fromDay":"从","reservations.meta.toDay":"到","reservations.meta.selectDay":"选择日期","reservations.type.flight":"航班","reservations.type.hotel":"住宿","reservations.type.restaurant":"餐厅","reservations.type.train":"火车","reservations.type.car":"租车","reservations.type.cruise":"邮轮","reservations.type.event":"活动","reservations.type.tour":"旅游团","reservations.type.other":"其他","reservations.confirm.delete":"确定要删除预订「{name}」吗?","reservations.confirm.deleteTitle":"删除预订?","reservations.confirm.deleteBody":'"{name}" 将被永久删除。',"reservations.toast.updated":"预订已更新","reservations.toast.removed":"预订已删除","reservations.toast.fileUploaded":"文件已上传","reservations.toast.uploadError":"上传失败","reservations.newTitle":"新建预订","reservations.bookingType":"预订类型","reservations.titleLabel":"标题","reservations.titlePlaceholder":"如:汉莎 LH123、阿德隆酒店...","reservations.locationAddress":"地点 / 地址","reservations.locationPlaceholder":"地址、机场、酒店...","reservations.confirmationCode":"预订码","reservations.confirmationPlaceholder":"如:ABC12345","reservations.day":"日期","reservations.noDay":"无日期","reservations.place":"地点","reservations.noPlace":"无地点","reservations.pendingSave":"将被保存…","reservations.uploading":"上传中...","reservations.attachFile":"附加文件","reservations.linkExisting":"关联已有文件","reservations.toast.saveError":"保存失败","reservations.toast.updateError":"更新失败","reservations.toast.deleteError":"删除失败","reservations.confirm.remove":"移除「{name}」的预订?","reservations.linkAssignment":"关联日程分配","reservations.pickAssignment":"从计划中选择一个分配...","reservations.noAssignment":"无关联(独立)","budget.title":"预算","budget.exportCsv":"导出 CSV","budget.emptyTitle":"尚未创建预算","budget.emptyText":"创建分类和条目来规划旅行预算","budget.emptyPlaceholder":"输入分类名称...","budget.createCategory":"创建分类","budget.category":"分类","budget.categoryName":"分类名称","budget.table.name":"名称","budget.table.total":"合计","budget.table.persons":"人数","budget.table.days":"天数","budget.table.perPerson":"人均","budget.table.perDay":"日均","budget.table.perPersonDay":"人日均","budget.table.note":"备注","budget.table.date":"日期","budget.newEntry":"新建条目","budget.defaultEntry":"新建条目","budget.defaultCategory":"新分类","budget.total":"合计","budget.totalBudget":"总预算","budget.byCategory":"按分类","budget.editTooltip":"点击编辑","budget.confirm.deleteCategory":"确定删除分类「{name}」及其 {count} 个条目?","budget.deleteCategory":"删除分类","budget.perPerson":"人均","budget.paid":"已支付","budget.open":"未支付","budget.noMembers":"未分配成员","budget.settlement":"结算","budget.settlementInfo":"点击预算项目上的成员头像将其标记为绿色——表示该成员已付款。结算会显示谁欠谁多少。","budget.netBalances":"净余额","files.title":"文件","files.count":"{count} 个文件","files.countSingular":"1 个文件","files.uploaded":"已上传 {count} 个","files.uploadError":"上传失败","files.dropzone":"将文件拖放到此处","files.dropzoneHint":"或点击浏览","files.allowedTypes":"图片、PDF、DOC、DOCX、XLS、XLSX、TXT、CSV · 最大 50 MB","files.uploading":"上传中...","files.filterAll":"全部","files.filterPdf":"PDF","files.filterImages":"图片","files.filterDocs":"文档","files.filterCollab":"协作笔记","files.sourceCollab":"来自协作笔记","files.empty":"暂无文件","files.emptyHint":"上传文件以附加到旅行中","files.openTab":"在新标签页中打开","files.confirm.delete":"确定要删除此文件吗?","files.toast.deleted":"文件已删除","files.toast.deleteError":"删除文件失败","files.sourcePlan":"日程计划","files.sourceBooking":"预订","files.attach":"附加","files.pasteHint":"也可以从剪贴板粘贴图片 (Ctrl+V)","files.trash":"回收站","files.trashEmpty":"回收站为空","files.emptyTrash":"清空回收站","files.restore":"恢复","files.star":"收藏","files.unstar":"取消收藏","files.assign":"分配","files.assignTitle":"分配文件","files.assignPlace":"地点","files.assignBooking":"预订","files.unassigned":"未分配","files.unlink":"移除关联","files.toast.trashed":"已移至回收站","files.toast.restored":"文件已恢复","files.toast.trashEmptied":"回收站已清空","files.toast.assigned":"文件已分配","files.toast.assignError":"分配失败","files.toast.restoreError":"恢复失败","files.confirm.permanentDelete":"永久删除此文件?此操作无法撤销。","files.confirm.emptyTrash":"永久删除回收站中的所有文件?此操作无法撤销。","files.noteLabel":"备注","files.notePlaceholder":"添加备注...","packing.title":"行李清单","packing.empty":"行李清单为空","packing.import":"导入","packing.importTitle":"导入装箱清单","packing.importHint":"每行一个物品。可选用逗号、分号或制表符分隔类别和数量:名称, 类别, 数量","packing.importPlaceholder":`牙刷 防晒霜, 卫生 T恤, 衣物, 5 @@ -149,7 +149,7 @@ T恤, 衣物, 5 所有当前数据将被备份数据替换。`,"backup.confirm.uploadRestore":`上传并恢复备份文件「{name}」? -所有当前数据将被覆盖。`,"backup.confirm.delete":"删除备份「{name}」?","backup.toast.loadError":"加载备份失败","backup.toast.created":"备份创建成功","backup.toast.createError":"创建备份失败","backup.toast.restored":"备份已恢复。页面即将刷新…","backup.toast.restoreError":"恢复失败","backup.toast.uploadError":"上传失败","backup.toast.deleted":"备份已删除","backup.toast.deleteError":"删除失败","backup.toast.downloadError":"下载失败","backup.toast.settingsSaved":"自动备份设置已保存","backup.toast.settingsError":"保存设置失败","backup.auto.title":"自动备份","backup.auto.subtitle":"按计划自动备份","backup.auto.enable":"启用自动备份","backup.auto.enableHint":"将按所选计划自动创建备份","backup.auto.interval":"间隔","backup.auto.hour":"执行时间","backup.auto.hourHint":"服务器本地时间({format} 格式)","backup.auto.dayOfWeek":"星期几","backup.auto.dayOfMonth":"每月几号","backup.auto.dayOfMonthHint":"限 1–28 以兼容所有月份","backup.auto.scheduleSummary":"计划","backup.auto.summaryDaily":"每天 {hour}:00","backup.auto.summaryWeekly":"每{day} {hour}:00","backup.auto.summaryMonthly":"每月 {day} 号 {hour}:00","backup.auto.envLocked":"Docker","backup.auto.envLockedHint":"自动备份通过 Docker 环境变量配置。要更改设置,请更新 docker-compose.yml 并重启容器。","backup.auto.copyEnv":"复制 Docker 环境变量","backup.auto.envCopied":"Docker 环境变量已复制到剪贴板","backup.auto.keepLabel":"自动删除旧备份","backup.dow.sunday":"周日","backup.dow.monday":"周一","backup.dow.tuesday":"周二","backup.dow.wednesday":"周三","backup.dow.thursday":"周四","backup.dow.friday":"周五","backup.dow.saturday":"周六","backup.interval.hourly":"每小时","backup.interval.daily":"每天","backup.interval.weekly":"每周","backup.interval.monthly":"每月","backup.keep.1day":"1 天","backup.keep.3days":"3 天","backup.keep.7days":"7 天","backup.keep.14days":"14 天","backup.keep.30days":"30 天","backup.keep.forever":"永久保留","photos.allDays":"所有天","photos.noPhotos":"暂无照片","photos.uploadHint":"上传你的旅行照片","photos.clickToSelect":"或点击选择","photos.linkPlace":"关联地点","photos.noPlace":"无地点","photos.uploadN":"上传 {n} 张照片","backup.restoreConfirmTitle":"恢复备份?","backup.restoreWarning":"所有当前数据(旅行、地点、用户、上传文件)将被备份数据永久替换。此操作无法撤销。","backup.restoreTip":"提示:恢复前建议先备份当前状态。","backup.restoreConfirm":"确认恢复","pdf.travelPlan":"旅行计划","pdf.planned":"已规划","pdf.costLabel":"费用 EUR","pdf.preview":"PDF 预览","pdf.saveAsPdf":"保存为 PDF","planner.places":"地点","planner.bookings":"预订","planner.packingList":"行李清单","planner.documents":"文档","planner.dayPlan":"日程计划","planner.reservations":"预订","planner.minTwoPlaces":"至少需要 2 个有坐标的地点","planner.noGeoPlaces":"没有有坐标的地点","planner.routeCalculated":"路线已计算","planner.routeCalcFailed":"无法计算路线","planner.routeError":"路线计算错误","planner.routeOptimized":"路线已优化","planner.reservationUpdated":"预订已更新","planner.reservationAdded":"预订已添加","planner.confirmDeleteReservation":"删除预订?","planner.reservationDeleted":"预订已删除","planner.days":"天","planner.allPlaces":"所有地点","planner.totalPlaces":"共 {n} 个地点","planner.noDaysPlanned":"尚未规划天数","planner.editTrip":"编辑旅行 →","planner.placeOne":"1 个地点","planner.placeN":"{n} 个地点","planner.addNote":"添加备注","planner.noEntries":"当天无条目","planner.addPlace":"添加地点/活动","planner.addPlaceShort":"+ 添加地点/活动","planner.resPending":"预订待确认 · ","planner.resConfirmed":"预订已确认 · ","planner.notePlaceholder":"备注…","planner.noteTimePlaceholder":"时间(可选)","planner.noteExamplePlaceholder":"如:14:30 从中央车站乘 S3,7 号码头渡轮,午餐休息…","planner.totalCost":"总费用","planner.searchPlaces":"搜索地点…","planner.allCategories":"所有分类","planner.noPlacesFound":"未找到地点","planner.addFirstPlace":"添加第一个地点","planner.noReservations":"暂无预订","planner.addFirstReservation":"添加第一个预订","planner.new":"新建","planner.addToDay":"+ 天","planner.calculating":"计算中…","planner.route":"路线","planner.optimize":"优化","planner.openGoogleMaps":"在 Google Maps 中打开","planner.selectDayHint":"从左侧列表选择一天以查看日程计划","planner.noPlacesForDay":"当天暂无地点","planner.addPlacesLink":"添加地点 →","planner.minTotal":"分钟 合计","planner.noReservation":"无预订","planner.removeFromDay":"从当天移除","planner.addToThisDay":"添加到当天","planner.overview":"概览","planner.noDays":"暂无天数","planner.editTripToAddDays":"编辑旅行以添加天数","planner.dayCount":"{n} 天","planner.clickToUnlock":"点击解锁","planner.keepPosition":"路线优化时保持位置","planner.dayDetails":"日程详情","planner.dayN":"第 {n} 天","stats.countries":"国家","stats.cities":"城市","stats.trips":"旅行","stats.places":"地点","stats.worldProgress":"全球进度","stats.visited":"已访问","stats.remaining":"未访问","stats.visitedCountries":"已访问国家","day.precipProb":"降水概率","day.precipitation":"降水量","day.wind":"风速","day.sunrise":"日出","day.sunset":"日落","day.hourlyForecast":"逐小时预报","day.climateHint":"历史平均值——实际预报在该日期前 16 天内可用。","day.noWeather":"无天气数据。请添加有坐标的地点。","day.overview":"每日概览","day.accommodation":"住宿","day.addAccommodation":"添加住宿","day.hotelDayRange":"应用到天数","day.noPlacesForHotel":"请先在旅行中添加地点","day.allDays":"全部","day.checkIn":"入住","day.checkOut":"退房","day.confirmation":"确认号","day.editAccommodation":"编辑住宿","day.reservations":"预订","memories.title":"照片","memories.notConnected":"Immich 未连接","memories.notConnectedHint":"在设置中连接您的 Immich 实例以在此查看旅行照片。","memories.noDates":"为旅行添加日期以加载照片。","memories.noPhotos":"未找到照片","memories.noPhotosHint":"Immich 中未找到此旅行日期范围内的照片。","memories.photosFound":"张照片","memories.fromOthers":"来自他人","memories.sharePhotos":"分享照片","memories.sharing":"分享中","memories.reviewTitle":"审查您的照片","memories.reviewHint":"点击照片以将其从分享中排除。","memories.shareCount":"分享 {count} 张照片","memories.immichUrl":"Immich 服务器地址","memories.immichApiKey":"API 密钥","memories.testConnection":"测试连接","memories.testFirst":"请先测试连接","memories.connected":"已连接","memories.disconnected":"未连接","memories.connectionSuccess":"已连接到 Immich","memories.connectionError":"无法连接到 Immich","memories.saved":"Immich 设置已保存","memories.oldest":"最早优先","memories.newest":"最新优先","memories.allLocations":"所有地点","memories.addPhotos":"添加照片","memories.linkAlbum":"关联相册","memories.selectAlbum":"选择 Immich 相册","memories.noAlbums":"未找到相册","memories.syncAlbum":"同步相册","memories.unlinkAlbum":"取消关联","memories.photos":"张照片","memories.selectPhotos":"从 Immich 选择照片","memories.selectHint":"点击照片以选择。","memories.selected":"已选择","memories.addSelected":"添加 {count} 张照片","memories.alreadyAdded":"已添加","memories.private":"私密","memories.stopSharing":"停止分享","memories.tripDates":"旅行日期","memories.allPhotos":"所有照片","memories.confirmShareTitle":"与旅行成员分享?","memories.confirmShareHint":"{count} 张照片将对本次旅行的所有成员可见。你可以稍后将单张照片设为私密。","memories.confirmShareButton":"分享照片","collab.tabs.chat":"聊天","collab.tabs.notes":"笔记","collab.tabs.polls":"投票","collab.whatsNext.title":"接下来","collab.whatsNext.today":"今天","collab.whatsNext.tomorrow":"明天","collab.whatsNext.empty":"暂无活动","collab.whatsNext.until":"至","collab.whatsNext.emptyHint":"有时间安排的活动将显示在此","collab.chat.send":"发送","collab.chat.placeholder":"输入消息...","collab.chat.empty":"开始对话","collab.chat.emptyHint":"消息对所有旅行成员可见","collab.chat.emptyDesc":"与旅伴分享想法、计划和动态","collab.chat.today":"今天","collab.chat.yesterday":"昨天","collab.chat.deletedMessage":"删除了一条消息","collab.chat.reply":"回复","collab.chat.loadMore":"加载更早的消息","collab.chat.justNow":"刚刚","collab.chat.minutesAgo":"{n} 分钟前","collab.chat.hoursAgo":"{n} 小时前","collab.notes.title":"笔记","collab.notes.new":"新建笔记","collab.notes.empty":"暂无笔记","collab.notes.emptyHint":"开始记录想法和计划","collab.notes.all":"全部","collab.notes.titlePlaceholder":"笔记标题","collab.notes.contentPlaceholder":"写点什么...","collab.notes.categoryPlaceholder":"分类","collab.notes.newCategory":"新建分类...","collab.notes.category":"分类","collab.notes.noCategory":"无分类","collab.notes.color":"颜色","collab.notes.save":"保存","collab.notes.cancel":"取消","collab.notes.edit":"编辑","collab.notes.delete":"删除","collab.notes.pin":"置顶","collab.notes.unpin":"取消置顶","collab.notes.daysAgo":"{n} 天前","collab.notes.categorySettings":"管理分类","collab.notes.create":"创建","collab.notes.website":"网站","collab.notes.websitePlaceholder":"https://...","collab.notes.attachFiles":"附加文件","collab.notes.noCategoriesYet":"暂无分类","collab.notes.emptyDesc":"创建一个笔记开始吧","collab.polls.title":"投票","collab.polls.new":"新建投票","collab.polls.empty":"暂无投票","collab.polls.emptyHint":"向团队提问并一起投票","collab.polls.question":"问题","collab.polls.questionPlaceholder":"我们应该做什么?","collab.polls.addOption":"+ 添加选项","collab.polls.optionPlaceholder":"选项 {n}","collab.polls.create":"创建投票","collab.polls.close":"关闭","collab.polls.closed":"已关闭","collab.polls.votes":"{n} 票","collab.polls.vote":"{n} 票","collab.polls.multipleChoice":"多选","collab.polls.multiChoice":"多选","collab.polls.deadline":"截止时间","collab.polls.option":"选项","collab.polls.options":"选项","collab.polls.delete":"删除","collab.polls.closedSection":"已关闭","admin.tabs.permissions":"权限","perm.title":"权限设置","perm.subtitle":"控制谁可以在应用中执行操作","perm.saved":"权限设置已保存","perm.resetDefaults":"恢复默认","perm.customized":"已自定义","perm.level.admin":"仅管理员","perm.level.tripOwner":"旅行所有者","perm.level.tripMember":"旅行成员","perm.level.everybody":"所有人","perm.cat.trip":"旅行管理","perm.cat.members":"成员管理","perm.cat.files":"文件","perm.cat.content":"内容与日程","perm.cat.extras":"预算、行李与协作","perm.action.trip_create":"创建旅行","perm.action.trip_edit":"编辑旅行详情","perm.action.trip_delete":"删除旅行","perm.action.trip_archive":"归档 / 取消归档旅行","perm.action.trip_cover_upload":"上传封面图片","perm.action.member_manage":"添加 / 移除成员","perm.action.file_upload":"上传文件","perm.action.file_edit":"编辑文件元数据","perm.action.file_delete":"删除文件","perm.action.place_edit":"添加 / 编辑 / 删除地点","perm.action.day_edit":"编辑日程、备注与分配","perm.action.reservation_edit":"管理预订","perm.action.budget_edit":"管理预算","perm.action.packing_edit":"管理行李清单","perm.action.collab_edit":"协作(笔记、投票、聊天)","perm.action.share_manage":"管理分享链接","perm.actionHint.trip_create":"谁可以创建新旅行","perm.actionHint.trip_edit":"谁可以更改旅行名称、日期、描述和货币","perm.actionHint.trip_delete":"谁可以永久删除旅行","perm.actionHint.trip_archive":"谁可以归档或取消归档旅行","perm.actionHint.trip_cover_upload":"谁可以上传或更改封面图片","perm.actionHint.member_manage":"谁可以邀请或移除旅行成员","perm.actionHint.file_upload":"谁可以向旅行上传文件","perm.actionHint.file_edit":"谁可以编辑文件描述和链接","perm.actionHint.file_delete":"谁可以将文件移至回收站或永久删除","perm.actionHint.place_edit":"谁可以添加、编辑或删除地点","perm.actionHint.day_edit":"谁可以编辑日程、日程备注和地点分配","perm.actionHint.reservation_edit":"谁可以创建、编辑或删除预订","perm.actionHint.budget_edit":"谁可以创建、编辑或删除预算项目","perm.actionHint.packing_edit":"谁可以管理行李物品和包袋","perm.actionHint.collab_edit":"谁可以创建笔记、投票和发送消息","perm.actionHint.share_manage":"谁可以创建或删除公开分享链接"},_M={"common.save":"Opslaan","common.cancel":"Annuleren","common.delete":"Verwijderen","common.edit":"Bewerken","common.add":"Toevoegen","common.loading":"Laden...","common.import":"Importeren","common.error":"Fout","common.back":"Terug","common.all":"Alles","common.close":"Sluiten","common.open":"Openen","common.upload":"Uploaden","common.search":"Zoeken","common.confirm":"Bevestigen","common.ok":"OK","common.yes":"Ja","common.no":"Nee","common.or":"of","common.none":"Geen","common.date":"Datum","common.rename":"Hernoemen","common.name":"Naam","common.email":"E-mail","common.password":"Wachtwoord","common.saving":"Opslaan...","common.saved":"Opgeslagen","trips.reminder":"Herinnering","trips.reminderNone":"Geen","trips.reminderDay":"dag","trips.reminderDays":"dagen","trips.reminderCustom":"Aangepast","trips.reminderDaysBefore":"dagen voor vertrek","trips.reminderDisabledHint":"Reisherinneringen zijn uitgeschakeld. Schakel ze in via Admin > Instellingen > Meldingen.","common.update":"Bijwerken","common.change":"Wijzigen","common.uploading":"Uploaden…","common.backToPlanning":"Terug naar planning","common.reset":"Resetten","nav.trip":"Reis","nav.share":"Delen","nav.settings":"Instellingen","nav.admin":"Admin","nav.logout":"Uitloggen","nav.lightMode":"Lichte modus","nav.darkMode":"Donkere modus","nav.autoMode":"Automatisch","nav.administrator":"Beheerder","dashboard.title":"Mijn reizen","dashboard.subtitle.loading":"Reizen laden...","dashboard.subtitle.trips":"{count} reizen ({archived} gearchiveerd)","dashboard.subtitle.empty":"Begin je eerste reis","dashboard.subtitle.activeOne":"{count} actieve reis","dashboard.subtitle.activeMany":"{count} actieve reizen","dashboard.subtitle.archivedSuffix":" · {count} gearchiveerd","dashboard.newTrip":"Nieuwe reis","dashboard.gridView":"Rasterweergave","dashboard.listView":"Lijstweergave","dashboard.currency":"Valuta","dashboard.timezone":"Tijdzones","dashboard.localTime":"Lokaal","dashboard.timezoneCustomTitle":"Aangepaste tijdzone","dashboard.timezoneCustomLabelPlaceholder":"Label (optioneel)","dashboard.timezoneCustomTzPlaceholder":"bijv. America/New_York","dashboard.timezoneCustomAdd":"Toevoegen","dashboard.timezoneCustomErrorEmpty":"Voer een tijdzone-identificatie in","dashboard.timezoneCustomErrorInvalid":"Ongeldige tijdzone. Gebruik een formaat zoals Europe/Berlin","dashboard.timezoneCustomErrorDuplicate":"Al toegevoegd","dashboard.emptyTitle":"Nog geen reizen","dashboard.emptyText":"Maak je eerste reis aan en begin met plannen!","dashboard.emptyButton":"Eerste reis aanmaken","dashboard.nextTrip":"Volgende reis","dashboard.shared":"Gedeeld","dashboard.sharedBy":"Gedeeld door {name}","dashboard.days":"Dagen","dashboard.places":"Plaatsen","dashboard.archive":"Archiveren","dashboard.restore":"Herstellen","dashboard.archived":"Gearchiveerd","dashboard.status.ongoing":"Lopend","dashboard.status.today":"Vandaag","dashboard.status.tomorrow":"Morgen","dashboard.status.past":"Afgelopen","dashboard.status.daysLeft":"nog {count} dagen","dashboard.toast.loadError":"Reizen laden mislukt","dashboard.toast.created":"Reis aangemaakt!","dashboard.toast.createError":"Reis aanmaken mislukt","dashboard.toast.updated":"Reis bijgewerkt!","dashboard.toast.updateError":"Reis bijwerken mislukt","dashboard.toast.deleted":"Reis verwijderd","dashboard.toast.deleteError":"Reis verwijderen mislukt","dashboard.toast.archived":"Reis gearchiveerd","dashboard.toast.archiveError":"Reis archiveren mislukt","dashboard.toast.restored":"Reis hersteld","dashboard.toast.restoreError":"Reis herstellen mislukt","dashboard.confirm.delete":'Reis "{title}" verwijderen? Alle plaatsen en plannen worden permanent verwijderd.',"dashboard.editTrip":"Reis bewerken","dashboard.createTrip":"Nieuwe reis aanmaken","dashboard.tripTitle":"Titel","dashboard.tripTitlePlaceholder":"bijv. Zomer in Japan","dashboard.tripDescription":"Beschrijving","dashboard.tripDescriptionPlaceholder":"Waar gaat deze reis over?","dashboard.startDate":"Startdatum","dashboard.endDate":"Einddatum","dashboard.noDateHint":"Geen datum ingesteld — er worden standaard 7 dagen aangemaakt. Je kunt dit altijd wijzigen.","dashboard.coverImage":"Omslagafbeelding","dashboard.addCoverImage":"Omslagafbeelding toevoegen","dashboard.addMembers":"Reisgenoten","dashboard.addMember":"Lid toevoegen","dashboard.coverSaved":"Omslagafbeelding opgeslagen","dashboard.coverUploadError":"Uploaden mislukt","dashboard.coverRemoveError":"Verwijderen mislukt","dashboard.titleRequired":"Titel is verplicht","dashboard.endDateError":"Einddatum moet na de startdatum liggen","settings.title":"Instellingen","settings.subtitle":"Configureer je persoonlijke instellingen","settings.map":"Kaart","settings.mapTemplate":"Kaartsjabloon","settings.mapTemplatePlaceholder.select":"Selecteer sjabloon...","settings.mapDefaultHint":"Laat leeg voor OpenStreetMap (standaard)","settings.mapTemplatePlaceholder":"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png","settings.mapHint":"URL-sjabloon voor kaarttegels","settings.latitude":"Breedtegraad","settings.longitude":"Lengtegraad","settings.saveMap":"Kaart opslaan","settings.apiKeys":"API-sleutels","settings.mapsKey":"Google Maps API-sleutel","settings.mapsKeyHint":"Voor plaatsen zoeken. Vereist Places API (New). Verkrijgbaar op console.cloud.google.com","settings.weatherKey":"OpenWeatherMap API-sleutel","settings.weatherKeyHint":"Voor weergegevens. Gratis op openweathermap.org/api","settings.keyPlaceholder":"Sleutel invoeren...","settings.configured":"Geconfigureerd","settings.saveKeys":"Sleutels opslaan","settings.display":"Weergave","settings.colorMode":"Kleurmodus","settings.light":"Licht","settings.dark":"Donker","settings.auto":"Automatisch","settings.language":"Taal","settings.temperature":"Temperatuureenheid","settings.timeFormat":"Tijdnotatie","settings.routeCalculation":"Routeberekening","settings.blurBookingCodes":"Boekingscodes vervagen","settings.notifications":"Meldingen","settings.notifyTripInvite":"Reisuitnodigingen","settings.notifyBookingChange":"Boekingswijzigingen","settings.notifyTripReminder":"Reisherinneringen","settings.notifyVacayInvite":"Vacay-fusieuitnodigingen","settings.notifyPhotosShared":"Gedeelde foto's (Immich)","settings.notifyCollabMessage":"Chatberichten (Collab)","settings.notifyPackingTagged":"Paklijst: toewijzingen","settings.notifyWebhook":"Webhook-meldingen","settings.notificationsDisabled":"Meldingen zijn niet geconfigureerd. Vraag een beheerder om e-mail- of webhookmeldingen in te schakelen.","settings.notificationsActive":"Actief kanaal","settings.notificationsManagedByAdmin":"Meldingsgebeurtenissen worden geconfigureerd door je beheerder.","admin.notifications.title":"Meldingen","admin.notifications.hint":"Kies een meldingskanaal. Er kan er slechts één tegelijk actief zijn.","admin.notifications.none":"Uitgeschakeld","admin.notifications.email":"E-mail (SMTP)","admin.notifications.webhook":"Webhook","admin.notifications.events":"Meldingsgebeurtenissen","admin.notifications.eventsHint":"Kies welke gebeurtenissen meldingen activeren voor alle gebruikers.","admin.notifications.configureFirst":"Configureer eerst de SMTP- of webhook-instellingen hieronder en schakel dan de events in.","admin.notifications.save":"Meldingsinstellingen opslaan","admin.notifications.saved":"Meldingsinstellingen opgeslagen","admin.notifications.testWebhook":"Testwebhook verzenden","admin.notifications.testWebhookSuccess":"Testwebhook succesvol verzonden","admin.notifications.testWebhookFailed":"Testwebhook mislukt","admin.smtp.title":"E-mail en meldingen","admin.smtp.hint":"SMTP-configuratie voor het verzenden van e-mailmeldingen.","admin.smtp.testButton":"Test-e-mail verzenden","admin.webhook.hint":"Meldingen verzenden naar een externe webhook (Discord, Slack, enz.).","admin.smtp.testSuccess":"Test-e-mail succesvol verzonden","admin.smtp.testFailed":"Test-e-mail mislukt","dayplan.icsTooltip":"Kalender exporteren (ICS)","share.linkTitle":"Openbare link","share.linkHint":"Maak een link die iedereen kan gebruiken om deze reis te bekijken zonder in te loggen. Alleen-lezen — bewerken niet mogelijk.","share.createLink":"Link aanmaken","share.deleteLink":"Link verwijderen","share.createError":"Kon link niet aanmaken","common.copy":"Kopiëren","common.copied":"Gekopieerd","share.permMap":"Kaart en plan","share.permBookings":"Boekingen","share.permPacking":"Paklijst","shared.expired":"Link verlopen of ongeldig","shared.expiredHint":"Deze gedeelde reislink is niet meer actief.","shared.readOnly":"Alleen-lezen weergave","shared.tabPlan":"Plan","shared.tabBookings":"Boekingen","shared.tabPacking":"Paklijst","shared.tabBudget":"Budget","shared.tabChat":"Chat","shared.days":"dagen","shared.places":"plaatsen","shared.other":"Overig","shared.totalBudget":"Totaal budget","shared.messages":"berichten","shared.sharedVia":"Gedeeld via","shared.confirmed":"Bevestigd","shared.pending":"In afwachting","share.permBudget":"Budget","share.permCollab":"Chat","settings.on":"Aan","settings.off":"Uit","settings.mcp.title":"MCP-configuratie","settings.mcp.endpoint":"MCP-eindpunt","settings.mcp.clientConfig":"Clientconfiguratie","settings.mcp.clientConfigHint":"Vervang door een API-token uit de onderstaande lijst. Het pad naar npx moet mogelijk worden aangepast voor jouw systeem (bijv. C:\\PROGRA~1\\nodejs\\npx.cmd op Windows).","settings.mcp.copy":"Kopiëren","settings.mcp.copied":"Gekopieerd!","settings.mcp.apiTokens":"API-tokens","settings.mcp.createToken":"Nieuw token aanmaken","settings.mcp.noTokens":"Nog geen tokens. Maak er een aan om MCP-clients te verbinden.","settings.mcp.tokenCreatedAt":"Aangemaakt","settings.mcp.tokenUsedAt":"Gebruikt","settings.mcp.deleteTokenTitle":"Token verwijderen","settings.mcp.deleteTokenMessage":"Dit token werkt onmiddellijk niet meer. Elke MCP-client die het gebruikt verliest de toegang.","settings.mcp.modal.createTitle":"API-token aanmaken","settings.mcp.modal.tokenName":"Tokennaam","settings.mcp.modal.tokenNamePlaceholder":"bijv. Claude Desktop, Werklaptop","settings.mcp.modal.creating":"Aanmaken…","settings.mcp.modal.create":"Token aanmaken","settings.mcp.modal.createdTitle":"Token aangemaakt","settings.mcp.modal.createdWarning":"Dit token wordt slechts één keer getoond. Kopieer en bewaar het nu — het kan niet worden hersteld.","settings.mcp.modal.done":"Klaar","settings.mcp.toast.created":"Token aangemaakt","settings.mcp.toast.createError":"Token aanmaken mislukt","settings.mcp.toast.deleted":"Token verwijderd","settings.mcp.toast.deleteError":"Token verwijderen mislukt","settings.account":"Account","settings.username":"Gebruikersnaam","settings.email":"E-mail","settings.role":"Rol","settings.roleAdmin":"Beheerder","settings.oidcLinked":"Gekoppeld met","settings.changePassword":"Wachtwoord wijzigen","settings.mustChangePassword":"U moet uw wachtwoord wijzigen voordat u kunt doorgaan. Stel hieronder een nieuw wachtwoord in.","settings.currentPassword":"Huidig wachtwoord","settings.currentPasswordRequired":"Huidig wachtwoord is verplicht","settings.newPassword":"Nieuw wachtwoord","settings.confirmPassword":"Bevestig nieuw wachtwoord","settings.updatePassword":"Wachtwoord bijwerken","settings.passwordRequired":"Voer het huidige en nieuwe wachtwoord in","settings.passwordTooShort":"Wachtwoord moet minimaal 8 tekens bevatten","settings.passwordMismatch":"Wachtwoorden komen niet overeen","settings.passwordWeak":"Wachtwoord moet hoofdletters, kleine letters, een cijfer en een speciaal teken bevatten","settings.passwordChanged":"Wachtwoord succesvol gewijzigd","settings.deleteAccount":"Account verwijderen","settings.deleteAccountTitle":"Account verwijderen?","settings.deleteAccountWarning":"Je account en al je reizen, plaatsen en bestanden worden permanent verwijderd. Deze actie kan niet ongedaan worden gemaakt.","settings.deleteAccountConfirm":"Permanent verwijderen","settings.deleteBlockedTitle":"Verwijderen niet mogelijk","settings.deleteBlockedMessage":"Je bent de enige beheerder. Maak eerst een andere gebruiker beheerder voordat je je account verwijdert.","settings.roleUser":"Gebruiker","settings.saveProfile":"Profiel opslaan","settings.mfa.title":"Tweefactorauthenticatie (2FA)","settings.mfa.description":"Voegt een tweede stap toe bij het inloggen. Gebruik een authenticator-app (Google Authenticator, Authy, etc.).","settings.mfa.requiredByPolicy":"Je beheerder vereist tweestapsverificatie. Stel hieronder een authenticator-app in voordat je verdergaat.","settings.mfa.backupTitle":"Back-upcodes","settings.mfa.backupDescription":"Gebruik deze eenmalige codes als je geen toegang meer hebt tot je authenticator-app.","settings.mfa.backupWarning":"Sla deze codes nu op. Elke code kan maar een keer worden gebruikt.","settings.mfa.backupCopy":"Codes kopiëren","settings.mfa.backupDownload":"TXT downloaden","settings.mfa.backupPrint":"Afdrukken / PDF","settings.mfa.backupCopied":"Back-upcodes gekopieerd","settings.mfa.enabled":"2FA is ingeschakeld op je account.","settings.mfa.disabled":"2FA is niet ingeschakeld.","settings.mfa.setup":"Authenticator instellen","settings.mfa.scanQr":"Scan deze QR-code met je app of voer de sleutel handmatig in.","settings.mfa.secretLabel":"Geheime sleutel (handmatige invoer)","settings.mfa.codePlaceholder":"6-cijferige code","settings.mfa.enable":"2FA inschakelen","settings.mfa.cancelSetup":"Annuleren","settings.mfa.disableTitle":"2FA uitschakelen","settings.mfa.disableHint":"Voer je wachtwoord en een huidige code van je authenticator in.","settings.mfa.disable":"2FA uitschakelen","settings.mfa.toastEnabled":"Tweefactorauthenticatie ingeschakeld","settings.mfa.toastDisabled":"Tweefactorauthenticatie uitgeschakeld","settings.mfa.demoBlocked":"Niet beschikbaar in demomodus","settings.toast.mapSaved":"Kaartinstellingen opgeslagen","settings.toast.keysSaved":"API-sleutels opgeslagen","settings.toast.displaySaved":"Weergave-instellingen opgeslagen","settings.toast.profileSaved":"Profiel opgeslagen","settings.uploadAvatar":"Profielfoto uploaden","settings.removeAvatar":"Profielfoto verwijderen","settings.avatarUploaded":"Profielfoto bijgewerkt","settings.avatarRemoved":"Profielfoto verwijderd","settings.avatarError":"Uploaden mislukt","login.error":"Inloggen mislukt. Controleer je inloggegevens.","login.tagline":`Jouw reizen. +所有当前数据将被覆盖。`,"backup.confirm.delete":"删除备份「{name}」?","backup.toast.loadError":"加载备份失败","backup.toast.created":"备份创建成功","backup.toast.createError":"创建备份失败","backup.toast.restored":"备份已恢复。页面即将刷新…","backup.toast.restoreError":"恢复失败","backup.toast.uploadError":"上传失败","backup.toast.deleted":"备份已删除","backup.toast.deleteError":"删除失败","backup.toast.downloadError":"下载失败","backup.toast.settingsSaved":"自动备份设置已保存","backup.toast.settingsError":"保存设置失败","backup.auto.title":"自动备份","backup.auto.subtitle":"按计划自动备份","backup.auto.enable":"启用自动备份","backup.auto.enableHint":"将按所选计划自动创建备份","backup.auto.interval":"间隔","backup.auto.hour":"执行时间","backup.auto.hourHint":"服务器本地时间({format} 格式)","backup.auto.dayOfWeek":"星期几","backup.auto.dayOfMonth":"每月几号","backup.auto.dayOfMonthHint":"限 1–28 以兼容所有月份","backup.auto.scheduleSummary":"计划","backup.auto.summaryDaily":"每天 {hour}:00","backup.auto.summaryWeekly":"每{day} {hour}:00","backup.auto.summaryMonthly":"每月 {day} 号 {hour}:00","backup.auto.envLocked":"Docker","backup.auto.envLockedHint":"自动备份通过 Docker 环境变量配置。要更改设置,请更新 docker-compose.yml 并重启容器。","backup.auto.copyEnv":"复制 Docker 环境变量","backup.auto.envCopied":"Docker 环境变量已复制到剪贴板","backup.auto.keepLabel":"自动删除旧备份","backup.dow.sunday":"周日","backup.dow.monday":"周一","backup.dow.tuesday":"周二","backup.dow.wednesday":"周三","backup.dow.thursday":"周四","backup.dow.friday":"周五","backup.dow.saturday":"周六","backup.interval.hourly":"每小时","backup.interval.daily":"每天","backup.interval.weekly":"每周","backup.interval.monthly":"每月","backup.keep.1day":"1 天","backup.keep.3days":"3 天","backup.keep.7days":"7 天","backup.keep.14days":"14 天","backup.keep.30days":"30 天","backup.keep.forever":"永久保留","photos.allDays":"所有天","photos.noPhotos":"暂无照片","photos.uploadHint":"上传你的旅行照片","photos.clickToSelect":"或点击选择","photos.linkPlace":"关联地点","photos.noPlace":"无地点","photos.uploadN":"上传 {n} 张照片","backup.restoreConfirmTitle":"恢复备份?","backup.restoreWarning":"所有当前数据(旅行、地点、用户、上传文件)将被备份数据永久替换。此操作无法撤销。","backup.restoreTip":"提示:恢复前建议先备份当前状态。","backup.restoreConfirm":"确认恢复","pdf.travelPlan":"旅行计划","pdf.planned":"已规划","pdf.costLabel":"费用 EUR","pdf.preview":"PDF 预览","pdf.saveAsPdf":"保存为 PDF","planner.places":"地点","planner.bookings":"预订","planner.packingList":"行李清单","planner.documents":"文档","planner.dayPlan":"日程计划","planner.reservations":"预订","planner.minTwoPlaces":"至少需要 2 个有坐标的地点","planner.noGeoPlaces":"没有有坐标的地点","planner.routeCalculated":"路线已计算","planner.routeCalcFailed":"无法计算路线","planner.routeError":"路线计算错误","planner.routeOptimized":"路线已优化","planner.reservationUpdated":"预订已更新","planner.reservationAdded":"预订已添加","planner.confirmDeleteReservation":"删除预订?","planner.reservationDeleted":"预订已删除","planner.days":"天","planner.allPlaces":"所有地点","planner.totalPlaces":"共 {n} 个地点","planner.noDaysPlanned":"尚未规划天数","planner.editTrip":"编辑旅行 →","planner.placeOne":"1 个地点","planner.placeN":"{n} 个地点","planner.addNote":"添加备注","planner.noEntries":"当天无条目","planner.addPlace":"添加地点/活动","planner.addPlaceShort":"+ 添加地点/活动","planner.resPending":"预订待确认 · ","planner.resConfirmed":"预订已确认 · ","planner.notePlaceholder":"备注…","planner.noteTimePlaceholder":"时间(可选)","planner.noteExamplePlaceholder":"如:14:30 从中央车站乘 S3,7 号码头渡轮,午餐休息…","planner.totalCost":"总费用","planner.searchPlaces":"搜索地点…","planner.allCategories":"所有分类","planner.noPlacesFound":"未找到地点","planner.addFirstPlace":"添加第一个地点","planner.noReservations":"暂无预订","planner.addFirstReservation":"添加第一个预订","planner.new":"新建","planner.addToDay":"+ 天","planner.calculating":"计算中…","planner.route":"路线","planner.optimize":"优化","planner.openGoogleMaps":"在 Google Maps 中打开","planner.selectDayHint":"从左侧列表选择一天以查看日程计划","planner.noPlacesForDay":"当天暂无地点","planner.addPlacesLink":"添加地点 →","planner.minTotal":"分钟 合计","planner.noReservation":"无预订","planner.removeFromDay":"从当天移除","planner.addToThisDay":"添加到当天","planner.overview":"概览","planner.noDays":"暂无天数","planner.editTripToAddDays":"编辑旅行以添加天数","planner.dayCount":"{n} 天","planner.clickToUnlock":"点击解锁","planner.keepPosition":"路线优化时保持位置","planner.dayDetails":"日程详情","planner.dayN":"第 {n} 天","stats.countries":"国家","stats.cities":"城市","stats.trips":"旅行","stats.places":"地点","stats.worldProgress":"全球进度","stats.visited":"已访问","stats.remaining":"未访问","stats.visitedCountries":"已访问国家","day.precipProb":"降水概率","day.precipitation":"降水量","day.wind":"风速","day.sunrise":"日出","day.sunset":"日落","day.hourlyForecast":"逐小时预报","day.climateHint":"历史平均值——实际预报在该日期前 16 天内可用。","day.noWeather":"无天气数据。请添加有坐标的地点。","day.overview":"每日概览","day.accommodation":"住宿","day.addAccommodation":"添加住宿","day.hotelDayRange":"应用到天数","day.noPlacesForHotel":"请先在旅行中添加地点","day.allDays":"全部","day.checkIn":"入住","day.checkOut":"退房","day.confirmation":"确认号","day.editAccommodation":"编辑住宿","day.reservations":"预订","memories.title":"照片","memories.notConnected":"Immich 未连接","memories.notConnectedHint":"在设置中连接您的 Immich 实例以在此查看旅行照片。","memories.noDates":"为旅行添加日期以加载照片。","memories.noPhotos":"未找到照片","memories.noPhotosHint":"Immich 中未找到此旅行日期范围内的照片。","memories.photosFound":"张照片","memories.fromOthers":"来自他人","memories.sharePhotos":"分享照片","memories.sharing":"分享中","memories.reviewTitle":"审查您的照片","memories.reviewHint":"点击照片以将其从分享中排除。","memories.shareCount":"分享 {count} 张照片","memories.immichUrl":"Immich 服务器地址","memories.immichApiKey":"API 密钥","memories.testConnection":"测试连接","memories.testFirst":"请先测试连接","memories.connected":"已连接","memories.disconnected":"未连接","memories.connectionSuccess":"已连接到 Immich","memories.connectionError":"无法连接到 Immich","memories.saved":"Immich 设置已保存","memories.oldest":"最早优先","memories.newest":"最新优先","memories.allLocations":"所有地点","memories.addPhotos":"添加照片","memories.linkAlbum":"关联相册","memories.selectAlbum":"选择 Immich 相册","memories.noAlbums":"未找到相册","memories.syncAlbum":"同步相册","memories.unlinkAlbum":"取消关联","memories.photos":"张照片","memories.selectPhotos":"从 Immich 选择照片","memories.selectHint":"点击照片以选择。","memories.selected":"已选择","memories.addSelected":"添加 {count} 张照片","memories.alreadyAdded":"已添加","memories.private":"私密","memories.stopSharing":"停止分享","memories.tripDates":"旅行日期","memories.allPhotos":"所有照片","memories.confirmShareTitle":"与旅行成员分享?","memories.confirmShareHint":"{count} 张照片将对本次旅行的所有成员可见。你可以稍后将单张照片设为私密。","memories.confirmShareButton":"分享照片","collab.tabs.chat":"聊天","collab.tabs.notes":"笔记","collab.tabs.polls":"投票","collab.whatsNext.title":"接下来","collab.whatsNext.today":"今天","collab.whatsNext.tomorrow":"明天","collab.whatsNext.empty":"暂无活动","collab.whatsNext.until":"至","collab.whatsNext.emptyHint":"有时间安排的活动将显示在此","collab.chat.send":"发送","collab.chat.placeholder":"输入消息...","collab.chat.empty":"开始对话","collab.chat.emptyHint":"消息对所有旅行成员可见","collab.chat.emptyDesc":"与旅伴分享想法、计划和动态","collab.chat.today":"今天","collab.chat.yesterday":"昨天","collab.chat.deletedMessage":"删除了一条消息","collab.chat.reply":"回复","collab.chat.loadMore":"加载更早的消息","collab.chat.justNow":"刚刚","collab.chat.minutesAgo":"{n} 分钟前","collab.chat.hoursAgo":"{n} 小时前","collab.notes.title":"笔记","collab.notes.new":"新建笔记","collab.notes.empty":"暂无笔记","collab.notes.emptyHint":"开始记录想法和计划","collab.notes.all":"全部","collab.notes.titlePlaceholder":"笔记标题","collab.notes.contentPlaceholder":"写点什么...","collab.notes.categoryPlaceholder":"分类","collab.notes.newCategory":"新建分类...","collab.notes.category":"分类","collab.notes.noCategory":"无分类","collab.notes.color":"颜色","collab.notes.save":"保存","collab.notes.cancel":"取消","collab.notes.edit":"编辑","collab.notes.delete":"删除","collab.notes.pin":"置顶","collab.notes.unpin":"取消置顶","collab.notes.daysAgo":"{n} 天前","collab.notes.categorySettings":"管理分类","collab.notes.create":"创建","collab.notes.website":"网站","collab.notes.websitePlaceholder":"https://...","collab.notes.attachFiles":"附加文件","collab.notes.noCategoriesYet":"暂无分类","collab.notes.emptyDesc":"创建一个笔记开始吧","collab.polls.title":"投票","collab.polls.new":"新建投票","collab.polls.empty":"暂无投票","collab.polls.emptyHint":"向团队提问并一起投票","collab.polls.question":"问题","collab.polls.questionPlaceholder":"我们应该做什么?","collab.polls.addOption":"+ 添加选项","collab.polls.optionPlaceholder":"选项 {n}","collab.polls.create":"创建投票","collab.polls.close":"关闭","collab.polls.closed":"已关闭","collab.polls.votes":"{n} 票","collab.polls.vote":"{n} 票","collab.polls.multipleChoice":"多选","collab.polls.multiChoice":"多选","collab.polls.deadline":"截止时间","collab.polls.option":"选项","collab.polls.options":"选项","collab.polls.delete":"删除","collab.polls.closedSection":"已关闭","admin.tabs.permissions":"权限","perm.title":"权限设置","perm.subtitle":"控制谁可以在应用中执行操作","perm.saved":"权限设置已保存","perm.resetDefaults":"恢复默认","perm.customized":"已自定义","perm.level.admin":"仅管理员","perm.level.tripOwner":"旅行所有者","perm.level.tripMember":"旅行成员","perm.level.everybody":"所有人","perm.cat.trip":"旅行管理","perm.cat.members":"成员管理","perm.cat.files":"文件","perm.cat.content":"内容与日程","perm.cat.extras":"预算、行李与协作","perm.action.trip_create":"创建旅行","perm.action.trip_edit":"编辑旅行详情","perm.action.trip_delete":"删除旅行","perm.action.trip_archive":"归档 / 取消归档旅行","perm.action.trip_cover_upload":"上传封面图片","perm.action.member_manage":"添加 / 移除成员","perm.action.file_upload":"上传文件","perm.action.file_edit":"编辑文件元数据","perm.action.file_delete":"删除文件","perm.action.place_edit":"添加 / 编辑 / 删除地点","perm.action.day_edit":"编辑日程、备注与分配","perm.action.reservation_edit":"管理预订","perm.action.budget_edit":"管理预算","perm.action.packing_edit":"管理行李清单","perm.action.collab_edit":"协作(笔记、投票、聊天)","perm.action.share_manage":"管理分享链接","perm.actionHint.trip_create":"谁可以创建新旅行","perm.actionHint.trip_edit":"谁可以更改旅行名称、日期、描述和货币","perm.actionHint.trip_delete":"谁可以永久删除旅行","perm.actionHint.trip_archive":"谁可以归档或取消归档旅行","perm.actionHint.trip_cover_upload":"谁可以上传或更改封面图片","perm.actionHint.member_manage":"谁可以邀请或移除旅行成员","perm.actionHint.file_upload":"谁可以向旅行上传文件","perm.actionHint.file_edit":"谁可以编辑文件描述和链接","perm.actionHint.file_delete":"谁可以将文件移至回收站或永久删除","perm.actionHint.place_edit":"谁可以添加、编辑或删除地点","perm.actionHint.day_edit":"谁可以编辑日程、日程备注和地点分配","perm.actionHint.reservation_edit":"谁可以创建、编辑或删除预订","perm.actionHint.budget_edit":"谁可以创建、编辑或删除预算项目","perm.actionHint.packing_edit":"谁可以管理行李物品和包袋","perm.actionHint.collab_edit":"谁可以创建笔记、投票和发送消息","perm.actionHint.share_manage":"谁可以创建或删除公开分享链接"},SM={"common.save":"Opslaan","common.cancel":"Annuleren","common.delete":"Verwijderen","common.edit":"Bewerken","common.add":"Toevoegen","common.loading":"Laden...","common.import":"Importeren","common.error":"Fout","common.back":"Terug","common.all":"Alles","common.close":"Sluiten","common.open":"Openen","common.upload":"Uploaden","common.search":"Zoeken","common.confirm":"Bevestigen","common.ok":"OK","common.yes":"Ja","common.no":"Nee","common.or":"of","common.none":"Geen","common.date":"Datum","common.rename":"Hernoemen","common.name":"Naam","common.email":"E-mail","common.password":"Wachtwoord","common.saving":"Opslaan...","common.saved":"Opgeslagen","trips.reminder":"Herinnering","trips.reminderNone":"Geen","trips.reminderDay":"dag","trips.reminderDays":"dagen","trips.reminderCustom":"Aangepast","trips.reminderDaysBefore":"dagen voor vertrek","trips.reminderDisabledHint":"Reisherinneringen zijn uitgeschakeld. Schakel ze in via Admin > Instellingen > Meldingen.","common.update":"Bijwerken","common.change":"Wijzigen","common.uploading":"Uploaden…","common.backToPlanning":"Terug naar planning","common.reset":"Resetten","nav.trip":"Reis","nav.share":"Delen","nav.settings":"Instellingen","nav.admin":"Admin","nav.logout":"Uitloggen","nav.lightMode":"Lichte modus","nav.darkMode":"Donkere modus","nav.autoMode":"Automatisch","nav.administrator":"Beheerder","dashboard.title":"Mijn reizen","dashboard.subtitle.loading":"Reizen laden...","dashboard.subtitle.trips":"{count} reizen ({archived} gearchiveerd)","dashboard.subtitle.empty":"Begin je eerste reis","dashboard.subtitle.activeOne":"{count} actieve reis","dashboard.subtitle.activeMany":"{count} actieve reizen","dashboard.subtitle.archivedSuffix":" · {count} gearchiveerd","dashboard.newTrip":"Nieuwe reis","dashboard.gridView":"Rasterweergave","dashboard.listView":"Lijstweergave","dashboard.currency":"Valuta","dashboard.timezone":"Tijdzones","dashboard.localTime":"Lokaal","dashboard.timezoneCustomTitle":"Aangepaste tijdzone","dashboard.timezoneCustomLabelPlaceholder":"Label (optioneel)","dashboard.timezoneCustomTzPlaceholder":"bijv. America/New_York","dashboard.timezoneCustomAdd":"Toevoegen","dashboard.timezoneCustomErrorEmpty":"Voer een tijdzone-identificatie in","dashboard.timezoneCustomErrorInvalid":"Ongeldige tijdzone. Gebruik een formaat zoals Europe/Berlin","dashboard.timezoneCustomErrorDuplicate":"Al toegevoegd","dashboard.emptyTitle":"Nog geen reizen","dashboard.emptyText":"Maak je eerste reis aan en begin met plannen!","dashboard.emptyButton":"Eerste reis aanmaken","dashboard.nextTrip":"Volgende reis","dashboard.shared":"Gedeeld","dashboard.sharedBy":"Gedeeld door {name}","dashboard.days":"Dagen","dashboard.places":"Plaatsen","dashboard.archive":"Archiveren","dashboard.restore":"Herstellen","dashboard.archived":"Gearchiveerd","dashboard.status.ongoing":"Lopend","dashboard.status.today":"Vandaag","dashboard.status.tomorrow":"Morgen","dashboard.status.past":"Afgelopen","dashboard.status.daysLeft":"nog {count} dagen","dashboard.toast.loadError":"Reizen laden mislukt","dashboard.toast.created":"Reis aangemaakt!","dashboard.toast.createError":"Reis aanmaken mislukt","dashboard.toast.updated":"Reis bijgewerkt!","dashboard.toast.updateError":"Reis bijwerken mislukt","dashboard.toast.deleted":"Reis verwijderd","dashboard.toast.deleteError":"Reis verwijderen mislukt","dashboard.toast.archived":"Reis gearchiveerd","dashboard.toast.archiveError":"Reis archiveren mislukt","dashboard.toast.restored":"Reis hersteld","dashboard.toast.restoreError":"Reis herstellen mislukt","dashboard.confirm.delete":'Reis "{title}" verwijderen? Alle plaatsen en plannen worden permanent verwijderd.',"dashboard.editTrip":"Reis bewerken","dashboard.createTrip":"Nieuwe reis aanmaken","dashboard.tripTitle":"Titel","dashboard.tripTitlePlaceholder":"bijv. Zomer in Japan","dashboard.tripDescription":"Beschrijving","dashboard.tripDescriptionPlaceholder":"Waar gaat deze reis over?","dashboard.startDate":"Startdatum","dashboard.endDate":"Einddatum","dashboard.noDateHint":"Geen datum ingesteld — er worden standaard 7 dagen aangemaakt. Je kunt dit altijd wijzigen.","dashboard.coverImage":"Omslagafbeelding","dashboard.addCoverImage":"Omslagafbeelding toevoegen","dashboard.addMembers":"Reisgenoten","dashboard.addMember":"Lid toevoegen","dashboard.coverSaved":"Omslagafbeelding opgeslagen","dashboard.coverUploadError":"Uploaden mislukt","dashboard.coverRemoveError":"Verwijderen mislukt","dashboard.titleRequired":"Titel is verplicht","dashboard.endDateError":"Einddatum moet na de startdatum liggen","settings.title":"Instellingen","settings.subtitle":"Configureer je persoonlijke instellingen","settings.map":"Kaart","settings.mapTemplate":"Kaartsjabloon","settings.mapTemplatePlaceholder.select":"Selecteer sjabloon...","settings.mapDefaultHint":"Laat leeg voor OpenStreetMap (standaard)","settings.mapTemplatePlaceholder":"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png","settings.mapHint":"URL-sjabloon voor kaarttegels","settings.latitude":"Breedtegraad","settings.longitude":"Lengtegraad","settings.saveMap":"Kaart opslaan","settings.apiKeys":"API-sleutels","settings.mapsKey":"Google Maps API-sleutel","settings.mapsKeyHint":"Voor plaatsen zoeken. Vereist Places API (New). Verkrijgbaar op console.cloud.google.com","settings.weatherKey":"OpenWeatherMap API-sleutel","settings.weatherKeyHint":"Voor weergegevens. Gratis op openweathermap.org/api","settings.keyPlaceholder":"Sleutel invoeren...","settings.configured":"Geconfigureerd","settings.saveKeys":"Sleutels opslaan","settings.display":"Weergave","settings.colorMode":"Kleurmodus","settings.light":"Licht","settings.dark":"Donker","settings.auto":"Automatisch","settings.language":"Taal","settings.temperature":"Temperatuureenheid","settings.timeFormat":"Tijdnotatie","settings.routeCalculation":"Routeberekening","settings.blurBookingCodes":"Boekingscodes vervagen","settings.notifications":"Meldingen","settings.notifyTripInvite":"Reisuitnodigingen","settings.notifyBookingChange":"Boekingswijzigingen","settings.notifyTripReminder":"Reisherinneringen","settings.notifyVacayInvite":"Vacay-fusieuitnodigingen","settings.notifyPhotosShared":"Gedeelde foto's (Immich)","settings.notifyCollabMessage":"Chatberichten (Collab)","settings.notifyPackingTagged":"Paklijst: toewijzingen","settings.notifyWebhook":"Webhook-meldingen","settings.notificationsDisabled":"Meldingen zijn niet geconfigureerd. Vraag een beheerder om e-mail- of webhookmeldingen in te schakelen.","settings.notificationsActive":"Actief kanaal","settings.notificationsManagedByAdmin":"Meldingsgebeurtenissen worden geconfigureerd door je beheerder.","admin.notifications.title":"Meldingen","admin.notifications.hint":"Kies een meldingskanaal. Er kan er slechts één tegelijk actief zijn.","admin.notifications.none":"Uitgeschakeld","admin.notifications.email":"E-mail (SMTP)","admin.notifications.webhook":"Webhook","admin.notifications.events":"Meldingsgebeurtenissen","admin.notifications.eventsHint":"Kies welke gebeurtenissen meldingen activeren voor alle gebruikers.","admin.notifications.configureFirst":"Configureer eerst de SMTP- of webhook-instellingen hieronder en schakel dan de events in.","admin.notifications.save":"Meldingsinstellingen opslaan","admin.notifications.saved":"Meldingsinstellingen opgeslagen","admin.notifications.testWebhook":"Testwebhook verzenden","admin.notifications.testWebhookSuccess":"Testwebhook succesvol verzonden","admin.notifications.testWebhookFailed":"Testwebhook mislukt","admin.smtp.title":"E-mail en meldingen","admin.smtp.hint":"SMTP-configuratie voor het verzenden van e-mailmeldingen.","admin.smtp.testButton":"Test-e-mail verzenden","admin.webhook.hint":"Meldingen verzenden naar een externe webhook (Discord, Slack, enz.).","admin.smtp.testSuccess":"Test-e-mail succesvol verzonden","admin.smtp.testFailed":"Test-e-mail mislukt","dayplan.icsTooltip":"Kalender exporteren (ICS)","share.linkTitle":"Openbare link","share.linkHint":"Maak een link die iedereen kan gebruiken om deze reis te bekijken zonder in te loggen. Alleen-lezen — bewerken niet mogelijk.","share.createLink":"Link aanmaken","share.deleteLink":"Link verwijderen","share.createError":"Kon link niet aanmaken","common.copy":"Kopiëren","common.copied":"Gekopieerd","share.permMap":"Kaart en plan","share.permBookings":"Boekingen","share.permPacking":"Paklijst","shared.expired":"Link verlopen of ongeldig","shared.expiredHint":"Deze gedeelde reislink is niet meer actief.","shared.readOnly":"Alleen-lezen weergave","shared.tabPlan":"Plan","shared.tabBookings":"Boekingen","shared.tabPacking":"Paklijst","shared.tabBudget":"Budget","shared.tabChat":"Chat","shared.days":"dagen","shared.places":"plaatsen","shared.other":"Overig","shared.totalBudget":"Totaal budget","shared.messages":"berichten","shared.sharedVia":"Gedeeld via","shared.confirmed":"Bevestigd","shared.pending":"In afwachting","share.permBudget":"Budget","share.permCollab":"Chat","settings.on":"Aan","settings.off":"Uit","settings.mcp.title":"MCP-configuratie","settings.mcp.endpoint":"MCP-eindpunt","settings.mcp.clientConfig":"Clientconfiguratie","settings.mcp.clientConfigHint":"Vervang door een API-token uit de onderstaande lijst. Het pad naar npx moet mogelijk worden aangepast voor jouw systeem (bijv. C:\\PROGRA~1\\nodejs\\npx.cmd op Windows).","settings.mcp.copy":"Kopiëren","settings.mcp.copied":"Gekopieerd!","settings.mcp.apiTokens":"API-tokens","settings.mcp.createToken":"Nieuw token aanmaken","settings.mcp.noTokens":"Nog geen tokens. Maak er een aan om MCP-clients te verbinden.","settings.mcp.tokenCreatedAt":"Aangemaakt","settings.mcp.tokenUsedAt":"Gebruikt","settings.mcp.deleteTokenTitle":"Token verwijderen","settings.mcp.deleteTokenMessage":"Dit token werkt onmiddellijk niet meer. Elke MCP-client die het gebruikt verliest de toegang.","settings.mcp.modal.createTitle":"API-token aanmaken","settings.mcp.modal.tokenName":"Tokennaam","settings.mcp.modal.tokenNamePlaceholder":"bijv. Claude Desktop, Werklaptop","settings.mcp.modal.creating":"Aanmaken…","settings.mcp.modal.create":"Token aanmaken","settings.mcp.modal.createdTitle":"Token aangemaakt","settings.mcp.modal.createdWarning":"Dit token wordt slechts één keer getoond. Kopieer en bewaar het nu — het kan niet worden hersteld.","settings.mcp.modal.done":"Klaar","settings.mcp.toast.created":"Token aangemaakt","settings.mcp.toast.createError":"Token aanmaken mislukt","settings.mcp.toast.deleted":"Token verwijderd","settings.mcp.toast.deleteError":"Token verwijderen mislukt","settings.account":"Account","settings.username":"Gebruikersnaam","settings.email":"E-mail","settings.role":"Rol","settings.roleAdmin":"Beheerder","settings.oidcLinked":"Gekoppeld met","settings.changePassword":"Wachtwoord wijzigen","settings.mustChangePassword":"U moet uw wachtwoord wijzigen voordat u kunt doorgaan. Stel hieronder een nieuw wachtwoord in.","settings.currentPassword":"Huidig wachtwoord","settings.currentPasswordRequired":"Huidig wachtwoord is verplicht","settings.newPassword":"Nieuw wachtwoord","settings.confirmPassword":"Bevestig nieuw wachtwoord","settings.updatePassword":"Wachtwoord bijwerken","settings.passwordRequired":"Voer het huidige en nieuwe wachtwoord in","settings.passwordTooShort":"Wachtwoord moet minimaal 8 tekens bevatten","settings.passwordMismatch":"Wachtwoorden komen niet overeen","settings.passwordWeak":"Wachtwoord moet hoofdletters, kleine letters, een cijfer en een speciaal teken bevatten","settings.passwordChanged":"Wachtwoord succesvol gewijzigd","settings.deleteAccount":"Account verwijderen","settings.deleteAccountTitle":"Account verwijderen?","settings.deleteAccountWarning":"Je account en al je reizen, plaatsen en bestanden worden permanent verwijderd. Deze actie kan niet ongedaan worden gemaakt.","settings.deleteAccountConfirm":"Permanent verwijderen","settings.deleteBlockedTitle":"Verwijderen niet mogelijk","settings.deleteBlockedMessage":"Je bent de enige beheerder. Maak eerst een andere gebruiker beheerder voordat je je account verwijdert.","settings.roleUser":"Gebruiker","settings.saveProfile":"Profiel opslaan","settings.mfa.title":"Tweefactorauthenticatie (2FA)","settings.mfa.description":"Voegt een tweede stap toe bij het inloggen. Gebruik een authenticator-app (Google Authenticator, Authy, etc.).","settings.mfa.requiredByPolicy":"Je beheerder vereist tweestapsverificatie. Stel hieronder een authenticator-app in voordat je verdergaat.","settings.mfa.backupTitle":"Back-upcodes","settings.mfa.backupDescription":"Gebruik deze eenmalige codes als je geen toegang meer hebt tot je authenticator-app.","settings.mfa.backupWarning":"Sla deze codes nu op. Elke code kan maar een keer worden gebruikt.","settings.mfa.backupCopy":"Codes kopiëren","settings.mfa.backupDownload":"TXT downloaden","settings.mfa.backupPrint":"Afdrukken / PDF","settings.mfa.backupCopied":"Back-upcodes gekopieerd","settings.mfa.enabled":"2FA is ingeschakeld op je account.","settings.mfa.disabled":"2FA is niet ingeschakeld.","settings.mfa.setup":"Authenticator instellen","settings.mfa.scanQr":"Scan deze QR-code met je app of voer de sleutel handmatig in.","settings.mfa.secretLabel":"Geheime sleutel (handmatige invoer)","settings.mfa.codePlaceholder":"6-cijferige code","settings.mfa.enable":"2FA inschakelen","settings.mfa.cancelSetup":"Annuleren","settings.mfa.disableTitle":"2FA uitschakelen","settings.mfa.disableHint":"Voer je wachtwoord en een huidige code van je authenticator in.","settings.mfa.disable":"2FA uitschakelen","settings.mfa.toastEnabled":"Tweefactorauthenticatie ingeschakeld","settings.mfa.toastDisabled":"Tweefactorauthenticatie uitgeschakeld","settings.mfa.demoBlocked":"Niet beschikbaar in demomodus","settings.toast.mapSaved":"Kaartinstellingen opgeslagen","settings.toast.keysSaved":"API-sleutels opgeslagen","settings.toast.displaySaved":"Weergave-instellingen opgeslagen","settings.toast.profileSaved":"Profiel opgeslagen","settings.uploadAvatar":"Profielfoto uploaden","settings.removeAvatar":"Profielfoto verwijderen","settings.avatarUploaded":"Profielfoto bijgewerkt","settings.avatarRemoved":"Profielfoto verwijderd","settings.avatarError":"Uploaden mislukt","login.error":"Inloggen mislukt. Controleer je inloggegevens.","login.tagline":`Jouw reizen. Jouw plan.`,"login.description":"Plan reizen samen met interactieve kaarten, budgetten en realtime synchronisatie.","login.features.maps":"Interactieve kaarten","login.features.mapsDesc":"Google Places, routes en clustering","login.features.realtime":"Realtime synchronisatie","login.features.realtimeDesc":"Plan samen via WebSocket","login.features.budget":"Budgetbeheer","login.features.budgetDesc":"Categorieën, grafieken en kosten per persoon","login.features.collab":"Samenwerking","login.features.collabDesc":"Meerdere gebruikers met gedeelde reizen","login.features.packing":"Paklijsten","login.features.packingDesc":"Categorieën, voortgang en suggesties","login.features.bookings":"Reserveringen","login.features.bookingsDesc":"Vluchten, hotels, restaurants en meer","login.features.files":"Documenten","login.features.filesDesc":"Upload en beheer documenten","login.features.routes":"Slimme routes","login.features.routesDesc":"Automatisch optimaliseren en exporteren naar Google Maps","login.selfHosted":"Zelf gehost · Open Source · Jouw gegevens blijven van jou","login.title":"Inloggen","login.subtitle":"Welkom terug","login.signingIn":"Inloggen…","login.signIn":"Inloggen","login.createAdmin":"Beheerdersaccount aanmaken","login.createAdminHint":"Stel het eerste beheerdersaccount in voor TREK.","login.setNewPassword":"Nieuw wachtwoord instellen","login.setNewPasswordHint":"U moet uw wachtwoord wijzigen voordat u verder kunt gaan.","login.createAccount":"Account aanmaken","login.createAccountHint":"Registreer een nieuw account.","login.creating":"Aanmaken…","login.noAccount":"Nog geen account?","login.hasAccount":"Heb je al een account?","login.register":"Registreren","login.emailPlaceholder":"jouw@email.com","login.username":"Gebruikersnaam","login.oidc.registrationDisabled":"Registratie is uitgeschakeld. Neem contact op met je beheerder.","login.oidc.noEmail":"Geen e-mailadres ontvangen van de provider.","login.mfaTitle":"Tweefactorauthenticatie","login.mfaSubtitle":"Voer de 6-cijferige code van je authenticator-app in.","login.mfaCodeLabel":"Verificatiecode","login.mfaCodeRequired":"Voer de code van je authenticator-app in.","login.mfaHint":"Open Google Authenticator, Authy of een andere TOTP-app.","login.mfaBack":"← Terug naar inloggen","login.mfaVerify":"Verifiëren","login.oidc.tokenFailed":"Authenticatie mislukt.","login.oidc.invalidState":"Ongeldige sessie. Probeer het opnieuw.","login.demoFailed":"Demo-login mislukt","login.oidcSignIn":"Inloggen met {name}","login.oidcOnly":"Wachtwoordauthenticatie is uitgeschakeld. Log in via je SSO-provider.","login.demoHint":"Probeer de demo — geen registratie nodig","register.passwordMismatch":"Wachtwoorden komen niet overeen","register.passwordTooShort":"Wachtwoord moet minimaal 8 tekens bevatten","register.failed":"Registratie mislukt","register.getStarted":"Aan de slag","register.subtitle":"Maak een account aan en begin met het plannen van je droomreizen.","register.feature1":"Onbeperkte reisplannen","register.feature2":"Interactieve kaartweergave","register.feature3":"Beheer plaatsen en categorieën","register.feature4":"Houd reserveringen bij","register.feature5":"Maak paklijsten","register.feature6":"Bewaar foto's en bestanden","register.createAccount":"Account aanmaken","register.startPlanning":"Begin met het plannen van je reis","register.minChars":"Min. 6 tekens","register.confirmPassword":"Bevestig wachtwoord","register.repeatPassword":"Herhaal wachtwoord","register.registering":"Registreren...","register.register":"Registreren","register.hasAccount":"Heb je al een account?","register.signIn":"Inloggen","admin.title":"Beheer","admin.subtitle":"Gebruikersbeheer en systeeminstellingen","admin.tabs.users":"Gebruikers","admin.tabs.categories":"Categorieën","admin.tabs.backup":"Back-up","admin.tabs.audit":"Auditlog","admin.stats.users":"Gebruikers","admin.stats.trips":"Reizen","admin.stats.places":"Plaatsen","admin.stats.photos":"Foto's","admin.stats.files":"Bestanden","admin.table.user":"Gebruiker","admin.table.email":"E-mail","admin.table.role":"Rol","admin.table.created":"Aangemaakt","admin.table.lastLogin":"Laatste login","admin.table.actions":"Acties","admin.you":"(Jij)","admin.editUser":"Gebruiker bewerken","admin.newPassword":"Nieuw wachtwoord","admin.newPasswordHint":"Laat leeg om het huidige wachtwoord te behouden","admin.deleteUser":'Gebruiker "{name}" verwijderen? Alle reizen worden permanent verwijderd.',"admin.deleteUserTitle":"Gebruiker verwijderen","admin.newPasswordPlaceholder":"Nieuw wachtwoord invoeren…","admin.toast.loadError":"Beheergegevens laden mislukt","admin.toast.userUpdated":"Gebruiker bijgewerkt","admin.toast.updateError":"Bijwerken mislukt","admin.toast.userDeleted":"Gebruiker verwijderd","admin.toast.deleteError":"Verwijderen mislukt","admin.toast.cannotDeleteSelf":"Je kunt je eigen account niet verwijderen","admin.toast.userCreated":"Gebruiker aangemaakt","admin.toast.createError":"Gebruiker aanmaken mislukt","admin.toast.fieldsRequired":"Gebruikersnaam, e-mail en wachtwoord zijn verplicht","admin.createUser":"Gebruiker aanmaken","admin.invite.title":"Uitnodigingslinks","admin.invite.subtitle":"Eenmalige registratielinks aanmaken","admin.invite.create":"Link aanmaken","admin.invite.createAndCopy":"Aanmaken en kopiëren","admin.invite.empty":"Nog geen uitnodigingslinks aangemaakt","admin.invite.maxUses":"Max. gebruik","admin.invite.expiry":"Verloopt na","admin.invite.uses":"gebruikt","admin.invite.expiresAt":"verloopt op","admin.invite.createdBy":"door","admin.invite.active":"Actief","admin.invite.expired":"Verlopen","admin.invite.usedUp":"Opgebruikt","admin.invite.copied":"Uitnodigingslink gekopieerd","admin.invite.copyLink":"Link kopiëren","admin.invite.deleted":"Uitnodigingslink verwijderd","admin.invite.createError":"Fout bij aanmaken van link","admin.invite.deleteError":"Fout bij verwijderen van link","admin.tabs.settings":"Instellingen","admin.allowRegistration":"Registratie toestaan","admin.allowRegistrationHint":"Nieuwe gebruikers kunnen zichzelf registreren","admin.requireMfa":"Tweestapsverificatie (2FA) verplicht stellen","admin.requireMfaHint":"Gebruikers zonder 2FA moeten de installatie in Instellingen voltooien voordat ze de app kunnen gebruiken.","admin.apiKeys":"API-sleutels","admin.apiKeysHint":"Optioneel. Schakelt uitgebreide plaatsgegevens in zoals foto's en weer.","admin.mapsKey":"Google Maps API-sleutel","admin.mapsKeyHint":"Vereist voor het zoeken van plaatsen. Verkrijgbaar op console.cloud.google.com","admin.mapsKeyHintLong":"Zonder API-sleutel wordt OpenStreetMap gebruikt voor het zoeken van plaatsen. Met een Google API-sleutel kunnen ook foto's, beoordelingen en openingstijden worden geladen. Verkrijgbaar op console.cloud.google.com.","admin.recommended":"Aanbevolen","admin.weatherKey":"OpenWeatherMap API-sleutel","admin.weatherKeyHint":"Voor weergegevens. Gratis op openweathermap.org","admin.validateKey":"Testen","admin.keyValid":"Verbonden","admin.keyInvalid":"Ongeldig","admin.keySaved":"API-sleutels opgeslagen","admin.oidcTitle":"Single Sign-On (OIDC)","admin.oidcSubtitle":"Sta inloggen toe via externe providers zoals Google, Apple, Authentik of Keycloak.","admin.oidcDisplayName":"Weergavenaam","admin.oidcIssuer":"Issuer-URL","admin.oidcIssuerHint":"De OpenID Connect Issuer-URL van de provider. Bijv. https://accounts.google.com","admin.oidcSaved":"OIDC-configuratie opgeslagen","admin.oidcOnlyMode":"Wachtwoordauthenticatie uitschakelen","admin.oidcOnlyModeHint":"Indien ingeschakeld, is alleen SSO-login toegestaan. Inloggen en registreren met wachtwoord worden geblokkeerd.","admin.fileTypes":"Toegestane bestandstypen","admin.fileTypesHint":"Configureer welke bestandstypen gebruikers kunnen uploaden.","admin.fileTypesFormat":"Kommagescheiden extensies (bijv. jpg,png,pdf,doc). Gebruik * om alle typen toe te staan.","admin.fileTypesSaved":"Bestandstype-instellingen opgeslagen","admin.bagTracking.title":"Bagagetracking","admin.bagTracking.subtitle":"Gewicht en bagagetoewijzing inschakelen voor paklijstitems","admin.tabs.config":"Configuratie","admin.tabs.templates":"Paksjablonen","admin.packingTemplates.title":"Paksjablonen","admin.packingTemplates.subtitle":"Herbruikbare paklijsten maken voor je reizen","admin.packingTemplates.create":"Nieuw sjabloon","admin.packingTemplates.namePlaceholder":"Sjabloonnaam (bijv. Strandvakantie)","admin.packingTemplates.empty":"Nog geen sjablonen aangemaakt","admin.packingTemplates.items":"items","admin.packingTemplates.categories":"categorieën","admin.packingTemplates.itemName":"Itemnaam","admin.packingTemplates.itemCategory":"Categorie","admin.packingTemplates.categoryName":"Categorienaam (bijv. Kleding)","admin.packingTemplates.addCategory":"Categorie toevoegen","admin.packingTemplates.created":"Sjabloon aangemaakt","admin.packingTemplates.deleted":"Sjabloon verwijderd","admin.packingTemplates.loadError":"Fout bij laden van sjablonen","admin.packingTemplates.createError":"Fout bij aanmaken van sjabloon","admin.packingTemplates.deleteError":"Fout bij verwijderen van sjabloon","admin.packingTemplates.saveError":"Fout bij opslaan","admin.tabs.addons":"Add-ons","admin.addons.title":"Add-ons","admin.addons.subtitle":"Schakel functies in of uit om je TREK-ervaring aan te passen.","admin.addons.catalog.memories.name":"Foto's (Immich)","admin.addons.catalog.memories.description":"Deel reisfoto's via je Immich-instantie","admin.addons.catalog.mcp.name":"MCP","admin.addons.catalog.mcp.description":"Model Context Protocol voor AI-assistent integratie","admin.addons.catalog.packing.name":"Inpakken","admin.addons.catalog.packing.description":"Checklists om je bagage voor elke reis voor te bereiden","admin.addons.catalog.budget.name":"Budget","admin.addons.catalog.budget.description":"Houd uitgaven bij en plan je reisbudget","admin.addons.catalog.documents.name":"Documenten","admin.addons.catalog.documents.description":"Bewaar en beheer reisdocumenten","admin.addons.catalog.vacay.name":"Vacay","admin.addons.catalog.vacay.description":"Persoonlijke vakantieplanner met kalenderweergave","admin.addons.catalog.atlas.name":"Atlas","admin.addons.catalog.atlas.description":"Wereldkaart met bezochte landen en reisstatistieken","admin.addons.catalog.collab.name":"Collab","admin.addons.catalog.collab.description":"Realtime notities, polls en chat voor het plannen van reizen","admin.addons.subtitleBefore":"Schakel functies in of uit om je ","admin.addons.subtitleAfter":"-ervaring aan te passen.","admin.addons.enabled":"Ingeschakeld","admin.addons.disabled":"Uitgeschakeld","admin.addons.type.trip":"Reis","admin.addons.type.global":"Globaal","admin.addons.type.integration":"Integratie","admin.addons.tripHint":"Beschikbaar als tabblad binnen elke reis","admin.addons.globalHint":"Beschikbaar als zelfstandig onderdeel in de hoofdnavigatie","admin.addons.integrationHint":"Backenddiensten en API-integraties zonder eigen pagina","admin.addons.toast.updated":"Add-on bijgewerkt","admin.addons.toast.error":"Add-on bijwerken mislukt","admin.addons.noAddons":"Geen add-ons beschikbaar","admin.weather.title":"Weergegevens","admin.weather.badge":"Sinds 24 maart 2026","admin.weather.description":"TREK gebruikt Open-Meteo als weerbron. Open-Meteo is een gratis, open-source weerdienst — geen API-sleutel vereist.","admin.weather.forecast":"16-daagse voorspelling","admin.weather.forecastDesc":"Voorheen 5 dagen (OpenWeatherMap)","admin.weather.climate":"Historische klimaatgegevens","admin.weather.climateDesc":"Gemiddelden over de afgelopen 85 jaar voor dagen buiten de 16-daagse voorspelling","admin.weather.requests":"10.000 verzoeken / dag","admin.weather.requestsDesc":"Gratis, geen API-sleutel vereist","admin.weather.locationHint":"Het weer is gebaseerd op de eerste plaats met coördinaten op elke dag. Als er geen plaats aan een dag is toegewezen, wordt een plaats uit de lijst als referentie gebruikt.","admin.tabs.mcpTokens":"MCP-tokens","admin.mcpTokens.title":"MCP-tokens","admin.mcpTokens.subtitle":"API-tokens van alle gebruikers beheren","admin.mcpTokens.owner":"Eigenaar","admin.mcpTokens.tokenName":"Tokennaam","admin.mcpTokens.created":"Aangemaakt","admin.mcpTokens.lastUsed":"Laatst gebruikt","admin.mcpTokens.never":"Nooit","admin.mcpTokens.empty":"Er zijn nog geen MCP-tokens aangemaakt","admin.mcpTokens.deleteTitle":"Token verwijderen","admin.mcpTokens.deleteMessage":"Dit token wordt onmiddellijk ingetrokken. De gebruiker verliest MCP-toegang via dit token.","admin.mcpTokens.deleteSuccess":"Token verwijderd","admin.mcpTokens.deleteError":"Token kon niet worden verwijderd","admin.mcpTokens.loadError":"Tokens konden niet worden geladen","admin.tabs.github":"GitHub","admin.audit.subtitle":"Beveiligingsgevoelige en beheerdersgebeurtenissen (back-ups, gebruikers, MFA, instellingen).","admin.audit.empty":"Nog geen auditregistraties.","admin.audit.refresh":"Vernieuwen","admin.audit.loadMore":"Meer laden","admin.audit.showing":"{count} geladen · {total} totaal","admin.audit.col.time":"Tijd","admin.audit.col.user":"Gebruiker","admin.audit.col.action":"Actie","admin.audit.col.resource":"Bron","admin.audit.col.ip":"IP","admin.audit.col.details":"Details","admin.github.title":"Release-geschiedenis","admin.github.subtitle":"Laatste updates van {repo}","admin.github.latest":"Nieuwste","admin.github.prerelease":"Pre-release","admin.github.showDetails":"Details tonen","admin.github.hideDetails":"Details verbergen","admin.github.loadMore":"Meer laden","admin.github.loading":"Laden...","admin.github.support":"Helpt mij TREK verder te ontwikkelen","admin.github.error":"Releases laden mislukt","admin.github.by":"door","admin.update.available":"Update beschikbaar","admin.update.text":"TREK {version} is beschikbaar. Je draait {current}.","admin.update.button":"Bekijk op GitHub","admin.update.install":"Update installeren","admin.update.confirmTitle":"Update installeren?","admin.update.confirmText":"TREK wordt bijgewerkt van {current} naar {version}. De server herstart automatisch.","admin.update.dataInfo":"Al je gegevens (reizen, gebruikers, API-sleutels, uploads, Vacay, Atlas, budgetten) worden bewaard.","admin.update.warning":"De app is kort niet beschikbaar tijdens het herstarten.","admin.update.confirm":"Nu bijwerken","admin.update.installing":"Bijwerken…","admin.update.success":"Update geïnstalleerd! Server herstart…","admin.update.failed":"Update mislukt","admin.update.backupHint":"We raden aan een back-up te maken voordat je bijwerkt.","admin.update.backupLink":"Naar back-up","admin.update.howTo":"Hoe bij te werken","admin.update.dockerText":"Je TREK-instantie draait in Docker. Om bij te werken naar {version}, voer de volgende commando's uit op je server:","admin.update.reloadHint":"Herlaad de pagina over een paar seconden.","vacay.subtitle":"Plan en beheer vakantiedagen","vacay.settings":"Instellingen","vacay.year":"Jaar","vacay.addYear":"Jaar toevoegen","vacay.removeYear":"Jaar verwijderen","vacay.removeYearConfirm":"{year} verwijderen?","vacay.removeYearHint":"Alle vakantie-invoeren en bedrijfsvakanties voor dit jaar worden permanent verwijderd.","vacay.remove":"Verwijderen","vacay.persons":"Personen","vacay.noPersons":"Geen personen toegevoegd","vacay.addPerson":"Persoon toevoegen","vacay.editPerson":"Persoon bewerken","vacay.removePerson":"Persoon verwijderen","vacay.removePersonConfirm":"{name} verwijderen?","vacay.removePersonHint":"Alle vakantie-invoeren voor deze persoon worden permanent verwijderd.","vacay.personName":"Naam","vacay.personNamePlaceholder":"Naam invoeren","vacay.color":"Kleur","vacay.add":"Toevoegen","vacay.legend":"Legenda","vacay.publicHoliday":"Feestdag","vacay.companyHoliday":"Bedrijfsvakantie","vacay.weekend":"Weekend","vacay.modeVacation":"Vakantie","vacay.modeCompany":"Bedrijfsvakantie","vacay.entitlement":"Recht","vacay.entitlementDays":"Dagen","vacay.used":"Gebruikt","vacay.remaining":"Resterend","vacay.carriedOver":"van {year}","vacay.blockWeekends":"Weekenden blokkeren","vacay.blockWeekendsHint":"Voorkom vakantie-invoeren op zaterdag en zondag","vacay.weekendDays":"Weekenddagen","vacay.mon":"Ma","vacay.tue":"Di","vacay.wed":"Wo","vacay.thu":"Do","vacay.fri":"Vr","vacay.sat":"Za","vacay.sun":"Zo","vacay.publicHolidays":"Feestdagen","vacay.publicHolidaysHint":"Markeer feestdagen in de kalender","vacay.selectCountry":"Selecteer land","vacay.selectRegion":"Selecteer regio (optioneel)","vacay.companyHolidays":"Bedrijfsvakanties","vacay.companyHolidaysHint":"Sta het markeren van bedrijfsbrede vakantiedagen toe","vacay.companyHolidaysNoDeduct":"Bedrijfsvakanties worden niet afgetrokken van vakantiedagen.","vacay.carryOver":"Overdracht","vacay.carryOverHint":"Draag resterende vakantiedagen automatisch over naar het volgende jaar","vacay.sharing":"Delen","vacay.sharingHint":"Deel je vakantieplan met andere TREK-gebruikers","vacay.owner":"Eigenaar","vacay.shareEmailPlaceholder":"E-mail van TREK-gebruiker","vacay.shareSuccess":"Plan succesvol gedeeld","vacay.shareError":"Plan delen mislukt","vacay.dissolve":"Fusie opheffen","vacay.dissolveHint":"Kalenders weer scheiden. Je invoeren blijven behouden.","vacay.dissolveAction":"Opheffen","vacay.dissolved":"Kalender gescheiden","vacay.fusedWith":"Gefuseerd met","vacay.you":"jij","vacay.noData":"Geen gegevens","vacay.changeColor":"Kleur wijzigen","vacay.inviteUser":"Gebruiker uitnodigen","vacay.inviteHint":"Nodig een andere TREK-gebruiker uit om een gecombineerde vakantiekalender te delen.","vacay.selectUser":"Selecteer gebruiker","vacay.sendInvite":"Uitnodiging verzenden","vacay.inviteSent":"Uitnodiging verzonden","vacay.inviteError":"Uitnodiging verzenden mislukt","vacay.pending":"in behandeling","vacay.noUsersAvailable":"Geen gebruikers beschikbaar","vacay.accept":"Accepteren","vacay.decline":"Afwijzen","vacay.acceptFusion":"Accepteren en fuseren","vacay.inviteTitle":"Fusieverzoek","vacay.inviteWantsToFuse":"wil een vakantiekalender met je delen.","vacay.fuseInfo1":"Jullie zien allebei alle vakantie-invoeren in één gedeelde kalender.","vacay.fuseInfo2":"Beide partijen kunnen invoeren voor elkaar aanmaken en bewerken.","vacay.fuseInfo3":"Beide partijen kunnen invoeren verwijderen en vakantierechten wijzigen.","vacay.fuseInfo4":"Instellingen zoals feestdagen en bedrijfsvakanties worden gedeeld.","vacay.fuseInfo5":"De fusie kan op elk moment door beide partijen worden opgeheven. Je invoeren blijven behouden.","vacay.addCalendar":"Kalender toevoegen","vacay.calendarColor":"Kleur","vacay.calendarLabel":"Label","vacay.noCalendars":"Geen kalenders","nav.myTrips":"Mijn reizen","atlas.subtitle":"Je reisvoetafdruk over de wereld","atlas.countries":"Landen","atlas.trips":"Reizen","atlas.places":"Plaatsen","atlas.days":"Dagen","atlas.visitedCountries":"Bezochte landen","atlas.cities":"Steden","atlas.noData":"Nog geen reisgegevens","atlas.noDataHint":"Maak een reis aan en voeg plaatsen toe om je wereldkaart te zien","atlas.lastTrip":"Laatste reis","atlas.nextTrip":"Volgende reis","atlas.daysLeft":"dagen te gaan","atlas.streak":"Reeks","atlas.year":"jaar","atlas.years":"jaar","atlas.yearInRow":"jaar op rij","atlas.yearsInRow":"jaar op rij","atlas.tripIn":"reis in","atlas.tripsIn":"reizen in","atlas.since":"sinds","atlas.europe":"Europa","atlas.asia":"Azië","atlas.northAmerica":"N.-Amerika","atlas.southAmerica":"Z.-Amerika","atlas.africa":"Afrika","atlas.oceania":"Oceanië","atlas.other":"Overig","atlas.firstVisit":"Eerste reis","atlas.lastVisitLabel":"Laatste reis","atlas.tripSingular":"Reis","atlas.tripPlural":"Reizen","atlas.placeVisited":"Bezochte plaats","atlas.placesVisited":"Bezochte plaatsen","atlas.statsTab":"Statistieken","atlas.bucketTab":"Bucket List","atlas.addBucket":"Toevoegen aan bucket list","atlas.bucketNamePlaceholder":"Plaats of bestemming...","atlas.bucketNotesPlaceholder":"Notities (optioneel)","atlas.bucketEmpty":"Je bucket list is leeg","atlas.bucketEmptyHint":"Voeg plekken toe die je wilt bezoeken","atlas.unmark":"Verwijderen","atlas.confirmMark":"Dit land als bezocht markeren?","atlas.confirmUnmark":"Dit land van je bezochte lijst verwijderen?","atlas.markVisited":"Markeren als bezocht","atlas.markVisitedHint":"Dit land toevoegen aan je bezochte lijst","atlas.addToBucket":"Aan bucket list toevoegen","atlas.addPoi":"Plaats toevoegen","atlas.searchCountry":"Zoek een land...","atlas.month":"Maand","atlas.addToBucketHint":"Opslaan als plek die je wilt bezoeken","atlas.bucketWhen":"Wanneer ben je van plan te gaan?","trip.tabs.plan":"Plan","trip.tabs.reservations":"Boekingen","trip.tabs.reservationsShort":"Boek","trip.tabs.packing":"Paklijst","trip.tabs.packingShort":"Inpakken","trip.tabs.budget":"Budget","trip.tabs.files":"Bestanden","trip.loading":"Reis laden...","trip.loadingPhotos":"Plaatsfoto laden...","trip.mobilePlan":"Plan","trip.mobilePlaces":"Plaatsen","trip.toast.placeUpdated":"Plaats bijgewerkt","trip.toast.placeAdded":"Plaats toegevoegd","trip.toast.placeDeleted":"Plaats verwijderd","trip.toast.selectDay":"Selecteer eerst een dag","trip.toast.assignedToDay":"Plaats toegewezen aan dag","trip.toast.reorderError":"Herordenen mislukt","trip.toast.reservationUpdated":"Reservering bijgewerkt","trip.toast.reservationAdded":"Reservering toegevoegd","trip.toast.deleted":"Verwijderd","trip.confirm.deletePlace":"Weet je zeker dat je deze plaats wilt verwijderen?","dayplan.emptyDay":"Geen plaatsen gepland voor deze dag","dayplan.addNote":"Notitie toevoegen","dayplan.editNote":"Notitie bewerken","dayplan.noteAdd":"Notitie toevoegen","dayplan.noteEdit":"Notitie bewerken","dayplan.noteTitle":"Notitie","dayplan.noteSubtitle":"Dagnotitie","dayplan.totalCost":"Totale kosten","dayplan.days":"Dagen","dayplan.dayN":"Dag {n}","dayplan.calculating":"Berekenen...","dayplan.route":"Route","dayplan.optimize":"Optimaliseren","dayplan.optimized":"Route geoptimaliseerd","dayplan.routeError":"Route berekenen mislukt","dayplan.toast.needTwoPlaces":"Minimaal twee plaatsen nodig voor route-optimalisatie","dayplan.toast.routeOptimized":"Route geoptimaliseerd","dayplan.toast.noGeoPlaces":"Geen plaatsen met coördinaten gevonden voor routeberekening","dayplan.confirmed":"Bevestigd","dayplan.pendingRes":"In behandeling","dayplan.pdf":"PDF","dayplan.pdfTooltip":"Dagplan exporteren als PDF","dayplan.pdfError":"PDF-export mislukt","dayplan.cannotReorderTransport":"Boekingen met een vast tijdstip kunnen niet worden verplaatst","dayplan.confirmRemoveTimeTitle":"Tijd verwijderen?","dayplan.confirmRemoveTimeBody":"Deze plek heeft een vast tijdstip ({time}). Verplaatsen verwijdert het tijdstip en maakt vrije sortering mogelijk.","dayplan.confirmRemoveTimeAction":"Tijd verwijderen en verplaatsen","dayplan.cannotDropOnTimed":"Items kunnen niet tussen tijdgebonden items worden geplaatst","dayplan.cannotBreakChronology":"Dit zou de chronologische volgorde van geplande items en boekingen doorbreken","places.addPlace":"Plaats/activiteit toevoegen","places.importGpx":"GPX","places.gpxImported":"{count} plaatsen geïmporteerd uit GPX","places.gpxError":"GPX-import mislukt","places.importGoogleList":"Google Lijst","places.googleListHint":"Plak een gedeelde Google Maps lijstlink om alle plaatsen te importeren.","places.googleListImported":'{count} plaatsen geimporteerd uit "{list}"',"places.googleListError":"Google Maps lijst importeren mislukt","places.viewDetails":"Details bekijken","places.urlResolved":"Plaats geïmporteerd van URL","places.assignToDay":"Aan welke dag toevoegen?","places.all":"Alle","places.unplanned":"Ongepland","places.search":"Plaatsen zoeken...","places.allCategories":"Alle categorieën","places.categoriesSelected":"categorieën","places.clearFilter":"Filter wissen","places.count":"{count} plaatsen","places.countSingular":"1 plaats","places.allPlanned":"Alle plaatsen zijn gepland","places.noneFound":"Geen plaatsen gevonden","places.editPlace":"Plaats bewerken","places.formName":"Naam","places.formNamePlaceholder":"bijv. Eiffeltoren","places.formDescription":"Beschrijving","places.formDescriptionPlaceholder":"Korte beschrijving...","places.formAddress":"Adres","places.formAddressPlaceholder":"Straat, stad, land","places.formLat":"Breedtegraad (bijv. 48.8566)","places.formLng":"Lengtegraad (bijv. 2.3522)","places.formCategory":"Categorie","places.noCategory":"Geen categorie","places.categoryNamePlaceholder":"Categorienaam","places.formTime":"Tijd","places.startTime":"Start","places.endTime":"Einde","places.endTimeBeforeStart":"Eindtijd is vóór de starttijd","places.timeCollision":"Tijdoverlap met:","places.formWebsite":"Website","places.formNotesPlaceholder":"Persoonlijke notities...","places.formReservation":"Reservering","places.reservationNotesPlaceholder":"Reserveringsnotities, bevestigingsnummer...","places.mapsSearchPlaceholder":"Plaatsen zoeken...","places.mapsSearchError":"Zoeken naar plaatsen mislukt.","places.osmHint":"Zoeken via OpenStreetMap (geen foto's, openingstijden of beoordelingen). Voeg een Google API-sleutel toe in instellingen voor volledige details.","places.osmActive":"Zoeken via OpenStreetMap (geen foto's, beoordelingen of openingstijden). Voeg een Google API-sleutel toe in Instellingen voor uitgebreide gegevens.","places.categoryCreateError":"Categorie aanmaken mislukt","places.nameRequired":"Voer een naam in","places.saveError":"Opslaan mislukt","inspector.opened":"Open","inspector.closed":"Gesloten","inspector.openingHours":"Openingstijden","inspector.showHours":"Openingstijden tonen","inspector.files":"Bestanden","inspector.filesCount":"{count} bestanden","inspector.removeFromDay":"Verwijderen van dag","inspector.addToDay":"Toevoegen aan dag","inspector.confirmedRes":"Bevestigde reservering","inspector.pendingRes":"Reservering in behandeling","inspector.google":"Openen in Google Maps","inspector.website":"Website openen","inspector.addRes":"Reservering","inspector.editRes":"Reservering bewerken","inspector.participants":"Deelnemers","inspector.trackStats":"Routegegevens","reservations.title":"Boekingen","reservations.empty":"Nog geen reserveringen","reservations.emptyHint":"Voeg reserveringen toe voor vluchten, hotels en meer","reservations.add":"Reservering toevoegen","reservations.addManual":"Handmatige boeking","reservations.placeHint":"Tip: Reserveringen kun je het beste direct vanuit een plaats aanmaken om ze te koppelen aan je dagplan.","reservations.confirmed":"Bevestigd","reservations.pending":"In behandeling","reservations.summary":"{confirmed} bevestigd, {pending} in behandeling","reservations.fromPlan":"Vanuit plan","reservations.showFiles":"Bestanden tonen","reservations.editTitle":"Reservering bewerken","reservations.status":"Status","reservations.datetime":"Datum en tijd","reservations.startTime":"Starttijd","reservations.endTime":"Eindtijd","reservations.date":"Datum","reservations.time":"Tijd","reservations.timeAlt":"Tijd (alternatief, bijv. 19:30)","reservations.notes":"Notities","reservations.notesPlaceholder":"Extra notities...","reservations.meta.airline":"Luchtvaartmaatschappij","reservations.meta.flightNumber":"Vluchtnr.","reservations.meta.from":"Van","reservations.meta.to":"Naar","reservations.meta.trainNumber":"Treinnr.","reservations.meta.platform":"Perron","reservations.meta.seat":"Stoel","reservations.meta.checkIn":"Check-in","reservations.meta.checkOut":"Check-out","reservations.meta.linkAccommodation":"Accommodatie","reservations.meta.pickAccommodation":"Koppel aan accommodatie","reservations.meta.noAccommodation":"Geen","reservations.meta.hotelPlace":"Accommodatie","reservations.meta.pickHotel":"Selecteer accommodatie","reservations.meta.fromDay":"Van","reservations.meta.toDay":"Tot","reservations.meta.selectDay":"Selecteer dag","reservations.type.flight":"Vlucht","reservations.type.hotel":"Accommodatie","reservations.type.restaurant":"Restaurant","reservations.type.train":"Trein","reservations.type.car":"Huurauto","reservations.type.cruise":"Cruise","reservations.type.event":"Evenement","reservations.type.tour":"Rondleiding","reservations.type.other":"Overig","reservations.confirm.delete":'Weet je zeker dat je de reservering "{name}" wilt verwijderen?',"reservations.confirm.deleteTitle":"Boeking verwijderen?","reservations.confirm.deleteBody":'"{name}" wordt permanent verwijderd.',"reservations.toast.updated":"Reservering bijgewerkt","reservations.toast.removed":"Reservering verwijderd","reservations.toast.fileUploaded":"Bestand geüpload","reservations.toast.uploadError":"Uploaden mislukt","reservations.newTitle":"Nieuwe reservering","reservations.bookingType":"Boekingstype","reservations.titleLabel":"Titel","reservations.titlePlaceholder":"bijv. Lufthansa LH123, Hotel Adlon, ...","reservations.locationAddress":"Locatie / Adres","reservations.locationPlaceholder":"Adres, luchthaven, hotel...","reservations.confirmationCode":"Boekingscode","reservations.confirmationPlaceholder":"bijv. ABC12345","reservations.day":"Dag","reservations.noDay":"Geen dag","reservations.place":"Plaats","reservations.noPlace":"Geen plaats","reservations.pendingSave":"wordt opgeslagen…","reservations.uploading":"Uploaden...","reservations.attachFile":"Bestand bijvoegen","reservations.linkExisting":"Bestaand bestand koppelen","reservations.toast.saveError":"Opslaan mislukt","reservations.toast.updateError":"Bijwerken mislukt","reservations.toast.deleteError":"Verwijderen mislukt","reservations.confirm.remove":'Reservering voor "{name}" verwijderen?',"reservations.linkAssignment":"Koppelen aan dagtoewijzing","reservations.pickAssignment":"Selecteer een toewijzing uit je plan...","reservations.noAssignment":"Geen koppeling (zelfstandig)","budget.title":"Budget","budget.exportCsv":"CSV exporteren","budget.emptyTitle":"Nog geen budget aangemaakt","budget.emptyText":"Maak categorieën en invoeren aan om je reisbudget te plannen","budget.emptyPlaceholder":"Categorienaam invoeren...","budget.createCategory":"Categorie aanmaken","budget.category":"Categorie","budget.categoryName":"Categorienaam","budget.table.name":"Naam","budget.table.total":"Totaal","budget.table.persons":"Personen","budget.table.days":"Dagen","budget.table.perPerson":"Per persoon","budget.table.perDay":"Per dag","budget.table.perPersonDay":"P. p. / dag","budget.table.note":"Notitie","budget.table.date":"Datum","budget.newEntry":"Nieuwe invoer","budget.defaultEntry":"Nieuwe invoer","budget.defaultCategory":"Nieuwe categorie","budget.total":"Totaal","budget.totalBudget":"Totaal budget","budget.byCategory":"Per categorie","budget.editTooltip":"Klik om te bewerken","budget.confirm.deleteCategory":'Weet je zeker dat je de categorie "{name}" met {count} invoeren wilt verwijderen?',"budget.deleteCategory":"Categorie verwijderen","budget.perPerson":"Per persoon","budget.paid":"Betaald","budget.open":"Open","budget.noMembers":"Geen leden toegewezen","budget.settlement":"Afrekening","budget.settlementInfo":"Klik op de avatar van een lid bij een budgetpost om deze groen te markeren — dit betekent dat diegene heeft betaald. De afrekening toont vervolgens wie wie hoeveel verschuldigd is.","budget.netBalances":"Nettosaldi","files.title":"Bestanden","files.count":"{count} bestanden","files.countSingular":"1 bestand","files.uploaded":"{count} geüpload","files.uploadError":"Uploaden mislukt","files.dropzone":"Sleep bestanden hierheen","files.dropzoneHint":"of klik om te bladeren","files.allowedTypes":"Afbeeldingen, PDF, DOC, DOCX, XLS, XLSX, TXT, CSV · Max 50 MB","files.uploading":"Uploaden...","files.filterAll":"Alle","files.filterPdf":"PDF's","files.filterImages":"Afbeeldingen","files.filterDocs":"Documenten","files.filterCollab":"Collab-notities","files.sourceCollab":"Uit Collab-notities","files.empty":"Nog geen bestanden","files.emptyHint":"Upload bestanden om ze aan je reis toe te voegen","files.openTab":"Openen in nieuw tabblad","files.confirm.delete":"Weet je zeker dat je dit bestand wilt verwijderen?","files.toast.deleted":"Bestand verwijderd","files.toast.deleteError":"Bestand verwijderen mislukt","files.sourcePlan":"Dagplan","files.sourceBooking":"Boeking","files.attach":"Bijvoegen","files.pasteHint":"Je kunt ook afbeeldingen plakken vanuit het klembord (Ctrl+V)","files.trash":"Prullenbak","files.trashEmpty":"Prullenbak is leeg","files.emptyTrash":"Prullenbak legen","files.restore":"Herstellen","files.star":"Ster","files.unstar":"Ster verwijderen","files.assign":"Toewijzen","files.assignTitle":"Bestand toewijzen","files.assignPlace":"Plaats","files.assignBooking":"Boeking","files.unassigned":"Niet toegewezen","files.unlink":"Koppeling verwijderen","files.toast.trashed":"Naar prullenbak verplaatst","files.toast.restored":"Bestand hersteld","files.toast.trashEmptied":"Prullenbak geleegd","files.toast.assigned":"Bestand toegewezen","files.toast.assignError":"Toewijzing mislukt","files.toast.restoreError":"Herstellen mislukt","files.confirm.permanentDelete":"Dit bestand permanent verwijderen? Dit kan niet ongedaan worden gemaakt.","files.confirm.emptyTrash":"Alle bestanden in de prullenbak permanent verwijderen? Dit kan niet ongedaan worden gemaakt.","files.noteLabel":"Notitie","files.notePlaceholder":"Notitie toevoegen...","packing.title":"Paklijst","packing.empty":"Paklijst is leeg","packing.import":"Importeren","packing.importTitle":"Paklijst importeren","packing.importHint":"Eén item per regel. Optioneel categorie en aantal gescheiden door komma, puntkomma of tab: Naam, Categorie, Aantal","packing.importPlaceholder":`Tandenborstel Zonnebrand, Hygiëne T-Shirts, Kleding, 5 @@ -157,7 +157,7 @@ Paspoort, Documenten`,"packing.importCsv":"CSV/TXT laden","packing.importAction" Alle huidige gegevens worden vervangen door de back-up.`,"backup.confirm.uploadRestore":`Back-upbestand "{name}" uploaden en herstellen? -Alle huidige gegevens worden overschreven.`,"backup.confirm.delete":'Back-up "{name}" verwijderen?',"backup.toast.loadError":"Back-ups laden mislukt","backup.toast.created":"Back-up succesvol aangemaakt","backup.toast.createError":"Back-up aanmaken mislukt","backup.toast.restored":"Back-up hersteld. Pagina wordt herladen…","backup.toast.restoreError":"Herstellen mislukt","backup.toast.uploadError":"Uploaden mislukt","backup.toast.deleted":"Back-up verwijderd","backup.toast.deleteError":"Verwijderen mislukt","backup.toast.downloadError":"Downloaden mislukt","backup.toast.settingsSaved":"Auto-back-up-instellingen opgeslagen","backup.toast.settingsError":"Instellingen opslaan mislukt","backup.auto.title":"Auto-back-up","backup.auto.subtitle":"Automatische back-up volgens schema","backup.auto.enable":"Auto-back-up inschakelen","backup.auto.enableHint":"Back-ups worden automatisch aangemaakt volgens het gekozen schema","backup.auto.interval":"Interval","backup.auto.hour":"Uitvoeren om","backup.auto.hourHint":"Lokale servertijd ({format}-notatie)","backup.auto.dayOfWeek":"Dag van de week","backup.auto.dayOfMonth":"Dag van de maand","backup.auto.dayOfMonthHint":"Beperkt tot 1–28 voor compatibiliteit met alle maanden","backup.auto.scheduleSummary":"Planning","backup.auto.summaryDaily":"Elke dag om {hour}:00","backup.auto.summaryWeekly":"Elke {day} om {hour}:00","backup.auto.summaryMonthly":"Dag {day} van elke maand om {hour}:00","backup.auto.envLocked":"Docker","backup.auto.envLockedHint":"Auto-back-up is geconfigureerd via Docker-omgevingsvariabelen. Pas je docker-compose.yml aan en herstart de container om deze instellingen te wijzigen.","backup.auto.copyEnv":"Docker-omgevingsvariabelen kopiëren","backup.auto.envCopied":"Docker-omgevingsvariabelen gekopieerd naar klembord","backup.auto.keepLabel":"Oude back-ups verwijderen na","backup.dow.sunday":"Zo","backup.dow.monday":"Ma","backup.dow.tuesday":"Di","backup.dow.wednesday":"Wo","backup.dow.thursday":"Do","backup.dow.friday":"Vr","backup.dow.saturday":"Za","backup.interval.hourly":"Elk uur","backup.interval.daily":"Dagelijks","backup.interval.weekly":"Wekelijks","backup.interval.monthly":"Maandelijks","backup.keep.1day":"1 dag","backup.keep.3days":"3 dagen","backup.keep.7days":"7 dagen","backup.keep.14days":"14 dagen","backup.keep.30days":"30 dagen","backup.keep.forever":"Voor altijd bewaren","photos.allDays":"Alle dagen","photos.noPhotos":"Nog geen foto's","photos.uploadHint":"Upload je reisfoto's","photos.clickToSelect":"of klik om te selecteren","photos.linkPlace":"Koppel plaats","photos.noPlace":"Geen plaats","photos.uploadN":"{n} foto('s) uploaden","backup.restoreConfirmTitle":"Back-up herstellen?","backup.restoreWarning":"Alle huidige gegevens (reizen, plaatsen, gebruikers, uploads) worden permanent vervangen door de back-up. Deze actie kan niet ongedaan worden gemaakt.","backup.restoreTip":"Tip: Maak een back-up van de huidige status voordat je herstelt.","backup.restoreConfirm":"Ja, herstellen","pdf.travelPlan":"Reisplan","pdf.planned":"Gepland","pdf.costLabel":"Kosten EUR","pdf.preview":"PDF-voorbeeld","pdf.saveAsPdf":"Opslaan als PDF","planner.places":"Plaatsen","planner.bookings":"Boekingen","planner.packingList":"Paklijst","planner.documents":"Documenten","planner.dayPlan":"Dagplan","planner.reservations":"Reserveringen","planner.minTwoPlaces":"Minimaal 2 plaatsen met coördinaten nodig","planner.noGeoPlaces":"Geen plaatsen met coördinaten beschikbaar","planner.routeCalculated":"Route berekend","planner.routeCalcFailed":"Route kon niet worden berekend","planner.routeError":"Fout bij routeberekening","planner.routeOptimized":"Route geoptimaliseerd","planner.reservationUpdated":"Reservering bijgewerkt","planner.reservationAdded":"Reservering toegevoegd","planner.confirmDeleteReservation":"Reservering verwijderen?","planner.reservationDeleted":"Reservering verwijderd","planner.days":"Dagen","planner.allPlaces":"Alle plaatsen","planner.totalPlaces":"{n} plaatsen totaal","planner.noDaysPlanned":"Nog geen dagen gepland","planner.editTrip":"Reis bewerken →","planner.placeOne":"1 plaats","planner.placeN":"{n} plaatsen","planner.addNote":"Notitie toevoegen","planner.noEntries":"Geen invoeren voor deze dag","planner.addPlace":"Plaats/activiteit toevoegen","planner.addPlaceShort":"+ Plaats/activiteit toevoegen","planner.resPending":"Reservering in behandeling · ","planner.resConfirmed":"Reservering bevestigd · ","planner.notePlaceholder":"Notitie…","planner.noteTimePlaceholder":"Tijd (optioneel)","planner.noteExamplePlaceholder":"bijv. S3 om 14:30 vanaf centraal station, veerboot van pier 7, lunchpauze…","planner.totalCost":"Totale kosten","planner.searchPlaces":"Plaatsen zoeken…","planner.allCategories":"Alle categorieën","planner.noPlacesFound":"Geen plaatsen gevonden","planner.addFirstPlace":"Eerste plaats toevoegen","planner.noReservations":"Geen reserveringen","planner.addFirstReservation":"Eerste reservering toevoegen","planner.new":"Nieuw","planner.addToDay":"+ Dag","planner.calculating":"Berekenen…","planner.route":"Route","planner.optimize":"Optimaliseren","planner.openGoogleMaps":"Openen in Google Maps","planner.selectDayHint":"Selecteer een dag uit de lijst links om het dagplan te bekijken","planner.noPlacesForDay":"Nog geen plaatsen voor deze dag","planner.addPlacesLink":"Plaatsen toevoegen →","planner.minTotal":"min. totaal","planner.noReservation":"Geen reservering","planner.removeFromDay":"Verwijderen van dag","planner.addToThisDay":"Toevoegen aan dag","planner.overview":"Overzicht","planner.noDays":"Geen dagen","planner.editTripToAddDays":"Bewerk de reis om dagen toe te voegen","planner.dayCount":"{n} dagen","planner.clickToUnlock":"Klik om te ontgrendelen","planner.keepPosition":"Positie behouden tijdens route-optimalisatie","planner.dayDetails":"Dagdetails","planner.dayN":"Dag {n}","stats.countries":"Landen","stats.cities":"Steden","stats.trips":"Reizen","stats.places":"Plaatsen","stats.worldProgress":"Wereldvoortgang","stats.visited":"bezocht","stats.remaining":"resterend","stats.visitedCountries":"Bezochte landen","day.precipProb":"Regenkans","day.precipitation":"Neerslag","day.wind":"Wind","day.sunrise":"Zonsopgang","day.sunset":"Zonsondergang","day.hourlyForecast":"Uurlijkse voorspelling","day.climateHint":"Historische gemiddelden — echte voorspelling beschikbaar binnen 16 dagen voor deze datum.","day.noWeather":"Geen weergegevens beschikbaar. Voeg een plaats met coördinaten toe.","day.overview":"Dagoverzicht","day.accommodation":"Accommodatie","day.addAccommodation":"Accommodatie toevoegen","day.hotelDayRange":"Toepassen op dagen","day.noPlacesForHotel":"Voeg eerst plaatsen toe aan je reis","day.allDays":"Alle","day.checkIn":"Check-in","day.checkOut":"Check-out","day.confirmation":"Bevestiging","day.editAccommodation":"Accommodatie bewerken","day.reservations":"Reserveringen","memories.title":"Foto's","memories.notConnected":"Immich niet verbonden","memories.notConnectedHint":"Verbind je Immich-instantie in Instellingen om je reisfoto's hier te zien.","memories.noDates":"Voeg data toe aan je reis om foto's te laden.","memories.noPhotos":"Geen foto's gevonden","memories.noPhotosHint":"Geen foto's gevonden in Immich voor de datumreeks van deze reis.","memories.photosFound":"foto's","memories.fromOthers":"van anderen","memories.sharePhotos":"Foto's delen","memories.sharing":"Wordt gedeeld","memories.reviewTitle":"Je foto's bekijken","memories.reviewHint":"Klik op foto's om ze uit te sluiten van delen.","memories.shareCount":"{count} foto's delen","memories.immichUrl":"Immich Server URL","memories.immichApiKey":"API-sleutel","memories.testConnection":"Verbinding testen","memories.testFirst":"Test eerst de verbinding","memories.connected":"Verbonden","memories.disconnected":"Niet verbonden","memories.connectionSuccess":"Verbonden met Immich","memories.connectionError":"Kon niet verbinden met Immich","memories.saved":"Immich-instellingen opgeslagen","memories.oldest":"Oudste eerst","memories.newest":"Nieuwste eerst","memories.allLocations":"Alle locaties","memories.addPhotos":"Foto's toevoegen","memories.linkAlbum":"Album koppelen","memories.selectAlbum":"Immich-album selecteren","memories.noAlbums":"Geen albums gevonden","memories.syncAlbum":"Album synchroniseren","memories.unlinkAlbum":"Ontkoppelen","memories.photos":"fotos","memories.selectPhotos":"Selecteer foto's uit Immich","memories.selectHint":"Tik op foto's om ze te selecteren.","memories.selected":"geselecteerd","memories.addSelected":"{count} foto's toevoegen","memories.alreadyAdded":"Toegevoegd","memories.private":"Privé","memories.stopSharing":"Delen stoppen","memories.tripDates":"Reisdata","memories.allPhotos":"Alle foto's","memories.confirmShareTitle":"Delen met reisgenoten?","memories.confirmShareHint":"{count} foto's worden zichtbaar voor alle leden van deze reis. Je kunt individuele foto's later privé maken.","memories.confirmShareButton":"Foto's delen","collab.tabs.chat":"Chat","collab.tabs.notes":"Notities","collab.tabs.polls":"Polls","collab.whatsNext.title":"Wat komt er","collab.whatsNext.today":"Vandaag","collab.whatsNext.tomorrow":"Morgen","collab.whatsNext.empty":"Geen komende activiteiten","collab.whatsNext.until":"tot","collab.whatsNext.emptyHint":"Activiteiten met tijden verschijnen hier","collab.chat.send":"Verzenden","collab.chat.placeholder":"Typ een bericht...","collab.chat.empty":"Start het gesprek","collab.chat.emptyHint":"Berichten worden gedeeld met alle reisleden","collab.chat.emptyDesc":"Deel ideeën, plannen en updates met je reisgroep","collab.chat.today":"Vandaag","collab.chat.yesterday":"Gisteren","collab.chat.deletedMessage":"heeft een bericht verwijderd","collab.chat.reply":"Beantwoorden","collab.chat.loadMore":"Oudere berichten laden","collab.chat.justNow":"zojuist","collab.chat.minutesAgo":"{n} min. geleden","collab.chat.hoursAgo":"{n} uur geleden","collab.notes.title":"Notities","collab.notes.new":"Nieuwe notitie","collab.notes.empty":"Nog geen notities","collab.notes.emptyHint":"Begin met het vastleggen van ideeën en plannen","collab.notes.all":"Alle","collab.notes.titlePlaceholder":"Notitietitel","collab.notes.contentPlaceholder":"Schrijf iets...","collab.notes.categoryPlaceholder":"Categorie","collab.notes.newCategory":"Nieuwe categorie...","collab.notes.category":"Categorie","collab.notes.noCategory":"Geen categorie","collab.notes.color":"Kleur","collab.notes.save":"Opslaan","collab.notes.cancel":"Annuleren","collab.notes.edit":"Bewerken","collab.notes.delete":"Verwijderen","collab.notes.pin":"Vastpinnen","collab.notes.unpin":"Losmaken","collab.notes.daysAgo":"{n}d geleden","collab.notes.categorySettings":"Categorieën beheren","collab.notes.create":"Aanmaken","collab.notes.website":"Website","collab.notes.websitePlaceholder":"https://...","collab.notes.attachFiles":"Bestanden bijvoegen","collab.notes.noCategoriesYet":"Nog geen categorieën","collab.notes.emptyDesc":"Maak een notitie om te beginnen","collab.polls.title":"Polls","collab.polls.new":"Nieuwe poll","collab.polls.empty":"Nog geen polls","collab.polls.emptyHint":"Stel de groep een vraag en stem samen","collab.polls.question":"Vraag","collab.polls.questionPlaceholder":"Wat zullen we doen?","collab.polls.addOption":"+ Optie toevoegen","collab.polls.optionPlaceholder":"Optie {n}","collab.polls.create":"Poll aanmaken","collab.polls.close":"Sluiten","collab.polls.closed":"Gesloten","collab.polls.votes":"{n} stemmen","collab.polls.vote":"{n} stem","collab.polls.multipleChoice":"Meerkeuze","collab.polls.multiChoice":"Meerkeuze","collab.polls.deadline":"Deadline","collab.polls.option":"Optie","collab.polls.options":"Opties","collab.polls.delete":"Verwijderen","collab.polls.closedSection":"Gesloten","admin.tabs.permissions":"Rechten","perm.title":"Rechtinstellingen","perm.subtitle":"Bepaal wie welke acties mag uitvoeren in de applicatie","perm.saved":"Rechtinstellingen opgeslagen","perm.resetDefaults":"Standaardwaarden herstellen","perm.customized":"aangepast","perm.level.admin":"Alleen beheerder","perm.level.tripOwner":"Reiseigenaar","perm.level.tripMember":"Reisleden","perm.level.everybody":"Iedereen","perm.cat.trip":"Reisbeheer","perm.cat.members":"Ledenbeheer","perm.cat.files":"Bestanden","perm.cat.content":"Inhoud & planning","perm.cat.extras":"Budget, paklijsten & samenwerking","perm.action.trip_create":"Reizen aanmaken","perm.action.trip_edit":"Reisdetails bewerken","perm.action.trip_delete":"Reizen verwijderen","perm.action.trip_archive":"Reizen archiveren / dearchiveren","perm.action.trip_cover_upload":"Omslagfoto uploaden","perm.action.member_manage":"Leden toevoegen / verwijderen","perm.action.file_upload":"Bestanden uploaden","perm.action.file_edit":"Bestandsmetadata bewerken","perm.action.file_delete":"Bestanden verwijderen","perm.action.place_edit":"Plaatsen toevoegen / bewerken / verwijderen","perm.action.day_edit":"Dagen, notities & toewijzingen bewerken","perm.action.reservation_edit":"Reserveringen beheren","perm.action.budget_edit":"Budget beheren","perm.action.packing_edit":"Paklijsten beheren","perm.action.collab_edit":"Samenwerking (notities, polls, chat)","perm.action.share_manage":"Deellinks beheren","perm.actionHint.trip_create":"Wie kan nieuwe reizen aanmaken","perm.actionHint.trip_edit":"Wie kan reisnaam, data, beschrijving en valuta wijzigen","perm.actionHint.trip_delete":"Wie kan een reis permanent verwijderen","perm.actionHint.trip_archive":"Wie kan een reis archiveren of dearchiveren","perm.actionHint.trip_cover_upload":"Wie kan de omslagfoto uploaden of wijzigen","perm.actionHint.member_manage":"Wie kan reisleden uitnodigen of verwijderen","perm.actionHint.file_upload":"Wie kan bestanden uploaden naar een reis","perm.actionHint.file_edit":"Wie kan bestandsbeschrijvingen en links bewerken","perm.actionHint.file_delete":"Wie kan bestanden naar de prullenbak verplaatsen of permanent verwijderen","perm.actionHint.place_edit":"Wie kan plaatsen toevoegen, bewerken of verwijderen","perm.actionHint.day_edit":"Wie kan dagen, dagnotities en plaatstoewijzingen bewerken","perm.actionHint.reservation_edit":"Wie kan reserveringen aanmaken, bewerken of verwijderen","perm.actionHint.budget_edit":"Wie kan budgetposten aanmaken, bewerken of verwijderen","perm.actionHint.packing_edit":"Wie kan pakitems en tassen beheren","perm.actionHint.collab_edit":"Wie kan notities, polls aanmaken en berichten versturen","perm.actionHint.share_manage":"Wie kan openbare deellinks aanmaken of verwijderen"},SM={..._j,"common.save":"حفظ","common.cancel":"إلغاء","common.delete":"حذف","common.edit":"تعديل","common.add":"إضافة","common.loading":"جارٍ التحميل...","common.import":"استيراد","common.error":"خطأ","common.back":"رجوع","common.all":"الكل","common.close":"إغلاق","common.open":"فتح","common.upload":"رفع","common.search":"بحث","common.confirm":"تأكيد","common.ok":"حسنًا","common.yes":"نعم","common.no":"لا","common.or":"أو","common.none":"لا شيء","common.date":"التاريخ","common.rename":"إعادة تسمية","common.name":"الاسم","common.email":"البريد الإلكتروني","common.password":"كلمة المرور","common.saving":"جارٍ الحفظ...","common.saved":"تم الحفظ","trips.reminder":"تذكير","trips.reminderNone":"بدون","trips.reminderDay":"يوم","trips.reminderDays":"أيام","trips.reminderCustom":"مخصص","trips.reminderDaysBefore":"أيام قبل المغادرة","trips.reminderDisabledHint":"تذكيرات الرحلة معطلة. قم بتفعيلها من الإدارة > الإعدادات > الإشعارات.","common.update":"تحديث","common.change":"تغيير","common.uploading":"جارٍ الرفع...","common.backToPlanning":"العودة إلى التخطيط","common.reset":"إعادة تعيين","nav.trip":"الرحلة","nav.share":"مشاركة","nav.settings":"الإعدادات","nav.admin":"الإدارة","nav.logout":"تسجيل الخروج","nav.lightMode":"الوضع الفاتح","nav.darkMode":"الوضع الداكن","nav.autoMode":"الوضع التلقائي","nav.administrator":"المسؤول","nav.myTrips":"رحلاتي","dashboard.title":"رحلاتي","dashboard.subtitle.loading":"جارٍ تحميل الرحلات...","dashboard.subtitle.trips":"{count} رحلة ({archived} مؤرشفة)","dashboard.subtitle.empty":"ابدأ رحلتك الأولى","dashboard.subtitle.activeOne":"{count} رحلة نشطة","dashboard.subtitle.activeMany":"{count} رحلات نشطة","dashboard.subtitle.archivedSuffix":" · {count} مؤرشفة","dashboard.newTrip":"رحلة جديدة","dashboard.gridView":"عرض شبكي","dashboard.listView":"عرض قائمة","dashboard.currency":"العملة","dashboard.timezone":"المناطق الزمنية","dashboard.localTime":"المحلي","dashboard.timezoneCustomTitle":"منطقة زمنية مخصصة","dashboard.timezoneCustomLabelPlaceholder":"الاسم (اختياري)","dashboard.timezoneCustomTzPlaceholder":"مثال: Asia/Riyadh","dashboard.timezoneCustomAdd":"إضافة","dashboard.timezoneCustomErrorEmpty":"أدخل معرّف منطقة زمنية","dashboard.timezoneCustomErrorInvalid":"منطقة زمنية غير صالحة. استخدم صيغة مثل Asia/Riyadh","dashboard.timezoneCustomErrorDuplicate":"مضافة بالفعل","dashboard.emptyTitle":"لا توجد رحلات بعد","dashboard.emptyText":"أنشئ رحلتك الأولى وابدأ التخطيط","dashboard.emptyButton":"إنشاء أول رحلة","dashboard.nextTrip":"الرحلة القادمة","dashboard.shared":"مشتركة","dashboard.sharedBy":"شاركها {name}","dashboard.days":"الأيام","dashboard.places":"الأماكن","dashboard.archive":"أرشفة","dashboard.restore":"استعادة","dashboard.archived":"مؤرشفة","dashboard.status.ongoing":"جارية","dashboard.status.today":"اليوم","dashboard.status.tomorrow":"غدًا","dashboard.status.past":"منتهية","dashboard.status.daysLeft":"متبقي {count} يوم","dashboard.toast.loadError":"فشل تحميل الرحلات","dashboard.toast.created":"تم إنشاء الرحلة بنجاح","dashboard.toast.createError":"فشل إنشاء الرحلة","dashboard.toast.updated":"تم تحديث الرحلة","dashboard.toast.updateError":"فشل تحديث الرحلة","dashboard.toast.deleted":"تم حذف الرحلة","dashboard.toast.deleteError":"فشل حذف الرحلة","dashboard.toast.archived":"تمت أرشفة الرحلة","dashboard.toast.archiveError":"فشل الأرشفة","dashboard.toast.restored":"تمت استعادة الرحلة","dashboard.toast.restoreError":"فشل الاستعادة","dashboard.confirm.delete":'حذف الرحلة "{title}"؟ سيتم حذف جميع الأماكن والخطط نهائيًا.',"dashboard.editTrip":"تعديل الرحلة","dashboard.createTrip":"إنشاء رحلة جديدة","dashboard.tripTitle":"العنوان","dashboard.tripTitlePlaceholder":"مثال: صيف في اليابان","dashboard.tripDescription":"الوصف","dashboard.tripDescriptionPlaceholder":"عمّ تتحدث هذه الرحلة؟","dashboard.startDate":"تاريخ البداية","dashboard.endDate":"تاريخ النهاية","dashboard.noDateHint":"لا يوجد تاريخ محدد. سيتم إنشاء 7 أيام افتراضية ويمكنك تغيير ذلك لاحقًا.","dashboard.coverImage":"صورة الغلاف","dashboard.addCoverImage":"إضافة صورة غلاف","dashboard.addMembers":"رفاق السفر","dashboard.addMember":"إضافة عضو","dashboard.coverSaved":"تم حفظ صورة الغلاف","dashboard.coverUploadError":"فشل الرفع","dashboard.coverRemoveError":"فشل الإزالة","dashboard.titleRequired":"العنوان مطلوب","dashboard.endDateError":"يجب أن يكون تاريخ النهاية بعد البداية","settings.title":"الإعدادات","settings.subtitle":"ضبط إعداداتك الشخصية","settings.map":"الخريطة","settings.mapTemplate":"قالب الخريطة","settings.mapTemplatePlaceholder.select":"اختر قالبًا...","settings.mapDefaultHint":"اتركه فارغًا لاستخدام OpenStreetMap افتراضيًا","settings.mapTemplatePlaceholder":"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png","settings.mapHint":"قالب URL لبلاطات الخريطة","settings.latitude":"خط العرض","settings.longitude":"خط الطول","settings.saveMap":"حفظ الخريطة","settings.apiKeys":"مفاتيح API","settings.mapsKey":"مفتاح Google Maps API","settings.mapsKeyHint":"للبحث عن الأماكن. يتطلب Places API (New).","settings.weatherKey":"مفتاح OpenWeatherMap API","settings.weatherKeyHint":"لبيانات الطقس.","settings.keyPlaceholder":"أدخل المفتاح...","settings.configured":"مُعدّ","settings.saveKeys":"حفظ المفاتيح","settings.display":"العرض","settings.colorMode":"نمط الألوان","settings.light":"فاتح","settings.dark":"داكن","settings.auto":"تلقائي","settings.language":"اللغة","settings.temperature":"وحدة الحرارة","settings.timeFormat":"تنسيق الوقت","settings.routeCalculation":"حساب المسار","settings.blurBookingCodes":"إخفاء رموز الحجز","settings.notifications":"الإشعارات","settings.notifyTripInvite":"دعوات الرحلات","settings.notifyBookingChange":"تغييرات الحجز","settings.notifyTripReminder":"تذكيرات الرحلات","settings.notifyVacayInvite":"دعوات دمج الإجازات","settings.notifyPhotosShared":"صور مشتركة (Immich)","settings.notifyCollabMessage":"رسائل الدردشة (Collab)","settings.notifyPackingTagged":"قائمة الأمتعة: التعيينات","settings.notifyWebhook":"إشعارات Webhook","settings.notificationsDisabled":"الإشعارات غير مكوّنة. اطلب من المسؤول تفعيل إشعارات البريد الإلكتروني أو Webhook.","settings.notificationsActive":"القناة النشطة","settings.notificationsManagedByAdmin":"يتم تكوين أحداث الإشعارات بواسطة المسؤول.","admin.notifications.title":"الإشعارات","admin.notifications.hint":"اختر قناة إشعارات واحدة. يمكن تفعيل واحدة فقط في كل مرة.","admin.notifications.none":"معطّل","admin.notifications.email":"البريد الإلكتروني (SMTP)","admin.notifications.webhook":"Webhook","admin.notifications.events":"أحداث الإشعارات","admin.notifications.eventsHint":"اختر الأحداث التي تُفعّل الإشعارات لجميع المستخدمين.","admin.notifications.configureFirst":"قم بتكوين إعدادات SMTP أو Webhook أدناه أولاً، ثم قم بتفعيل الأحداث.","admin.notifications.save":"حفظ إعدادات الإشعارات","admin.notifications.saved":"تم حفظ إعدادات الإشعارات","admin.notifications.testWebhook":"إرسال webhook تجريبي","admin.notifications.testWebhookSuccess":"تم إرسال webhook التجريبي بنجاح","admin.notifications.testWebhookFailed":"فشل إرسال webhook التجريبي","admin.smtp.title":"البريد والإشعارات","admin.smtp.hint":"تكوين SMTP لإرسال إشعارات البريد الإلكتروني.","admin.smtp.testButton":"إرسال بريد تجريبي","admin.webhook.hint":"إرسال الإشعارات إلى webhook خارجي (Discord، Slack، إلخ).","admin.smtp.testSuccess":"تم إرسال البريد التجريبي بنجاح","admin.smtp.testFailed":"فشل إرسال البريد التجريبي","dayplan.icsTooltip":"تصدير التقويم (ICS)","share.linkTitle":"رابط عام","share.linkHint":"أنشئ رابطًا يمكن لأي شخص استخدامه لعرض هذه الرحلة بدون تسجيل الدخول. للقراءة فقط — لا يمكن التعديل.","share.createLink":"إنشاء رابط","share.deleteLink":"حذف الرابط","share.createError":"تعذر إنشاء الرابط","common.copy":"نسخ","common.copied":"تم النسخ","share.permMap":"الخريطة والخطة","share.permBookings":"الحجوزات","share.permPacking":"الأمتعة","shared.expired":"الرابط منتهي أو غير صالح","shared.expiredHint":"رابط الرحلة المشترك لم يعد نشطًا.","shared.readOnly":"عرض للقراءة فقط","shared.tabPlan":"الخطة","shared.tabBookings":"الحجوزات","shared.tabPacking":"قائمة التعبئة","shared.tabBudget":"الميزانية","shared.tabChat":"الدردشة","shared.days":"أيام","shared.places":"أماكن","shared.other":"أخرى","shared.totalBudget":"إجمالي الميزانية","shared.messages":"رسائل","shared.sharedVia":"تمت المشاركة عبر","shared.confirmed":"مؤكد","shared.pending":"قيد الانتظار","share.permBudget":"الميزانية","share.permCollab":"الدردشة","settings.on":"تشغيل","settings.off":"إيقاف","settings.mcp.title":"إعداد MCP","settings.mcp.endpoint":"نقطة نهاية MCP","settings.mcp.clientConfig":"إعداد العميل","settings.mcp.clientConfigHint":"استبدل برمز API من القائمة أدناه. قد يحتاج مسار npx إلى ضبط وفق نظامك (مثلاً C:\\PROGRA~1\\nodejs\\npx.cmd على Windows).","settings.mcp.copy":"نسخ","settings.mcp.copied":"تم النسخ!","settings.mcp.apiTokens":"رموز API","settings.mcp.createToken":"إنشاء رمز جديد","settings.mcp.noTokens":"لا توجد رموز بعد. أنشئ رمزاً للاتصال بعملاء MCP.","settings.mcp.tokenCreatedAt":"أُنشئ","settings.mcp.tokenUsedAt":"استُخدم","settings.mcp.deleteTokenTitle":"حذف الرمز","settings.mcp.deleteTokenMessage":"سيتوقف هذا الرمز عن العمل فوراً. أي عميل MCP يستخدمه سيفقد الوصول.","settings.mcp.modal.createTitle":"إنشاء رمز API","settings.mcp.modal.tokenName":"اسم الرمز","settings.mcp.modal.tokenNamePlaceholder":"مثال: Claude Desktop، حاسوب العمل","settings.mcp.modal.creating":"جارٍ الإنشاء…","settings.mcp.modal.create":"إنشاء الرمز","settings.mcp.modal.createdTitle":"تم إنشاء الرمز","settings.mcp.modal.createdWarning":"سيُعرض هذا الرمز مرة واحدة فقط. انسخه واحفظه الآن — لا يمكن استرداده.","settings.mcp.modal.done":"تم","settings.mcp.toast.created":"تم إنشاء الرمز","settings.mcp.toast.createError":"فشل إنشاء الرمز","settings.mcp.toast.deleted":"تم حذف الرمز","settings.mcp.toast.deleteError":"فشل حذف الرمز","settings.account":"الحساب","settings.username":"اسم المستخدم","settings.email":"البريد الإلكتروني","settings.role":"الدور","settings.roleAdmin":"مسؤول","settings.oidcLinked":"مرتبط مع","settings.changePassword":"تغيير كلمة المرور","settings.mustChangePassword":"يجب عليك تغيير كلمة المرور قبل المتابعة. يرجى تعيين كلمة مرور جديدة أدناه.","settings.currentPassword":"كلمة المرور الحالية","settings.currentPasswordRequired":"كلمة المرور الحالية مطلوبة","settings.newPassword":"كلمة المرور الجديدة","settings.confirmPassword":"تأكيد كلمة المرور الجديدة","settings.updatePassword":"تحديث كلمة المرور","settings.passwordRequired":"أدخل كلمة المرور الحالية والجديدة","settings.passwordTooShort":"يجب أن تتكون كلمة المرور من 8 أحرف على الأقل","settings.passwordMismatch":"كلمتا المرور غير متطابقتين","settings.passwordWeak":"يجب أن تحتوي كلمة المرور على حرف كبير وحرف صغير ورقم ورمز خاص","settings.passwordChanged":"تم تغيير كلمة المرور بنجاح","settings.deleteAccount":"حذف الحساب","settings.deleteAccountTitle":"هل تريد حذف حسابك؟","settings.deleteAccountWarning":"سيتم حذف حسابك وجميع رحلاتك وأماكنك وملفاتك نهائيًا. لا يمكن التراجع عن ذلك.","settings.deleteAccountConfirm":"حذف نهائي","settings.deleteBlockedTitle":"الحذف غير ممكن","settings.deleteBlockedMessage":"أنت المسؤول الوحيد. قم بترقية مستخدم آخر إلى مسؤول قبل حذف حسابك.","settings.roleUser":"مستخدم","settings.saveProfile":"حفظ الملف الشخصي","settings.toast.mapSaved":"تم حفظ إعدادات الخريطة","settings.toast.keysSaved":"تم حفظ مفاتيح API","settings.toast.displaySaved":"تم حفظ إعدادات العرض","settings.toast.profileSaved":"تم حفظ الملف الشخصي","settings.uploadAvatar":"رفع صورة الملف الشخصي","settings.removeAvatar":"إزالة صورة الملف الشخصي","settings.avatarUploaded":"تم تحديث صورة الملف الشخصي","settings.avatarRemoved":"تمت إزالة صورة الملف الشخصي","settings.avatarError":"فشل الرفع","settings.mfa.title":"المصادقة الثنائية (2FA)","settings.mfa.description":"تضيف خطوة ثانية عند تسجيل الدخول. استخدم تطبيق مصادقة (Google Authenticator، Authy، إلخ).","settings.mfa.requiredByPolicy":"المسؤول يتطلب المصادقة الثنائية. اضبط تطبيق المصادقة أدناه قبل المتابعة.","settings.mfa.backupTitle":"رموز النسخ الاحتياطي","settings.mfa.backupDescription":"استخدم هذه الرموز لمرة واحدة إذا فقدت الوصول إلى تطبيق المصادقة.","settings.mfa.backupWarning":"احفظ هذه الرموز الآن. كل رمز يمكن استخدامه مرة واحدة فقط.","settings.mfa.backupCopy":"نسخ الرموز","settings.mfa.backupDownload":"تنزيل TXT","settings.mfa.backupPrint":"طباعة / PDF","settings.mfa.backupCopied":"تم نسخ رموز النسخ الاحتياطي","settings.mfa.enabled":"المصادقة الثنائية مفعّلة على حسابك.","settings.mfa.disabled":"المصادقة الثنائية غير مفعّلة.","settings.mfa.setup":"إعداد المصادقة","settings.mfa.scanQr":"امسح رمز QR بتطبيقك أو أدخل المفتاح يدويًا.","settings.mfa.secretLabel":"المفتاح السري (إدخال يدوي)","settings.mfa.codePlaceholder":"رمز من 6 أرقام","settings.mfa.enable":"تفعيل 2FA","settings.mfa.cancelSetup":"إلغاء","settings.mfa.disableTitle":"تعطيل 2FA","settings.mfa.disableHint":"أدخل كلمة مرور حسابك ورمزًا حاليًا من المصادقة.","settings.mfa.disable":"تعطيل 2FA","settings.mfa.toastEnabled":"تم تفعيل المصادقة الثنائية","settings.mfa.toastDisabled":"تم تعطيل المصادقة الثنائية","settings.mfa.demoBlocked":"غير متاح في الوضع التجريبي","login.error":"فشل تسجيل الدخول. يرجى التحقق من بياناتك.","login.tagline":`رحلاتك. +Alle huidige gegevens worden overschreven.`,"backup.confirm.delete":'Back-up "{name}" verwijderen?',"backup.toast.loadError":"Back-ups laden mislukt","backup.toast.created":"Back-up succesvol aangemaakt","backup.toast.createError":"Back-up aanmaken mislukt","backup.toast.restored":"Back-up hersteld. Pagina wordt herladen…","backup.toast.restoreError":"Herstellen mislukt","backup.toast.uploadError":"Uploaden mislukt","backup.toast.deleted":"Back-up verwijderd","backup.toast.deleteError":"Verwijderen mislukt","backup.toast.downloadError":"Downloaden mislukt","backup.toast.settingsSaved":"Auto-back-up-instellingen opgeslagen","backup.toast.settingsError":"Instellingen opslaan mislukt","backup.auto.title":"Auto-back-up","backup.auto.subtitle":"Automatische back-up volgens schema","backup.auto.enable":"Auto-back-up inschakelen","backup.auto.enableHint":"Back-ups worden automatisch aangemaakt volgens het gekozen schema","backup.auto.interval":"Interval","backup.auto.hour":"Uitvoeren om","backup.auto.hourHint":"Lokale servertijd ({format}-notatie)","backup.auto.dayOfWeek":"Dag van de week","backup.auto.dayOfMonth":"Dag van de maand","backup.auto.dayOfMonthHint":"Beperkt tot 1–28 voor compatibiliteit met alle maanden","backup.auto.scheduleSummary":"Planning","backup.auto.summaryDaily":"Elke dag om {hour}:00","backup.auto.summaryWeekly":"Elke {day} om {hour}:00","backup.auto.summaryMonthly":"Dag {day} van elke maand om {hour}:00","backup.auto.envLocked":"Docker","backup.auto.envLockedHint":"Auto-back-up is geconfigureerd via Docker-omgevingsvariabelen. Pas je docker-compose.yml aan en herstart de container om deze instellingen te wijzigen.","backup.auto.copyEnv":"Docker-omgevingsvariabelen kopiëren","backup.auto.envCopied":"Docker-omgevingsvariabelen gekopieerd naar klembord","backup.auto.keepLabel":"Oude back-ups verwijderen na","backup.dow.sunday":"Zo","backup.dow.monday":"Ma","backup.dow.tuesday":"Di","backup.dow.wednesday":"Wo","backup.dow.thursday":"Do","backup.dow.friday":"Vr","backup.dow.saturday":"Za","backup.interval.hourly":"Elk uur","backup.interval.daily":"Dagelijks","backup.interval.weekly":"Wekelijks","backup.interval.monthly":"Maandelijks","backup.keep.1day":"1 dag","backup.keep.3days":"3 dagen","backup.keep.7days":"7 dagen","backup.keep.14days":"14 dagen","backup.keep.30days":"30 dagen","backup.keep.forever":"Voor altijd bewaren","photos.allDays":"Alle dagen","photos.noPhotos":"Nog geen foto's","photos.uploadHint":"Upload je reisfoto's","photos.clickToSelect":"of klik om te selecteren","photos.linkPlace":"Koppel plaats","photos.noPlace":"Geen plaats","photos.uploadN":"{n} foto('s) uploaden","backup.restoreConfirmTitle":"Back-up herstellen?","backup.restoreWarning":"Alle huidige gegevens (reizen, plaatsen, gebruikers, uploads) worden permanent vervangen door de back-up. Deze actie kan niet ongedaan worden gemaakt.","backup.restoreTip":"Tip: Maak een back-up van de huidige status voordat je herstelt.","backup.restoreConfirm":"Ja, herstellen","pdf.travelPlan":"Reisplan","pdf.planned":"Gepland","pdf.costLabel":"Kosten EUR","pdf.preview":"PDF-voorbeeld","pdf.saveAsPdf":"Opslaan als PDF","planner.places":"Plaatsen","planner.bookings":"Boekingen","planner.packingList":"Paklijst","planner.documents":"Documenten","planner.dayPlan":"Dagplan","planner.reservations":"Reserveringen","planner.minTwoPlaces":"Minimaal 2 plaatsen met coördinaten nodig","planner.noGeoPlaces":"Geen plaatsen met coördinaten beschikbaar","planner.routeCalculated":"Route berekend","planner.routeCalcFailed":"Route kon niet worden berekend","planner.routeError":"Fout bij routeberekening","planner.routeOptimized":"Route geoptimaliseerd","planner.reservationUpdated":"Reservering bijgewerkt","planner.reservationAdded":"Reservering toegevoegd","planner.confirmDeleteReservation":"Reservering verwijderen?","planner.reservationDeleted":"Reservering verwijderd","planner.days":"Dagen","planner.allPlaces":"Alle plaatsen","planner.totalPlaces":"{n} plaatsen totaal","planner.noDaysPlanned":"Nog geen dagen gepland","planner.editTrip":"Reis bewerken →","planner.placeOne":"1 plaats","planner.placeN":"{n} plaatsen","planner.addNote":"Notitie toevoegen","planner.noEntries":"Geen invoeren voor deze dag","planner.addPlace":"Plaats/activiteit toevoegen","planner.addPlaceShort":"+ Plaats/activiteit toevoegen","planner.resPending":"Reservering in behandeling · ","planner.resConfirmed":"Reservering bevestigd · ","planner.notePlaceholder":"Notitie…","planner.noteTimePlaceholder":"Tijd (optioneel)","planner.noteExamplePlaceholder":"bijv. S3 om 14:30 vanaf centraal station, veerboot van pier 7, lunchpauze…","planner.totalCost":"Totale kosten","planner.searchPlaces":"Plaatsen zoeken…","planner.allCategories":"Alle categorieën","planner.noPlacesFound":"Geen plaatsen gevonden","planner.addFirstPlace":"Eerste plaats toevoegen","planner.noReservations":"Geen reserveringen","planner.addFirstReservation":"Eerste reservering toevoegen","planner.new":"Nieuw","planner.addToDay":"+ Dag","planner.calculating":"Berekenen…","planner.route":"Route","planner.optimize":"Optimaliseren","planner.openGoogleMaps":"Openen in Google Maps","planner.selectDayHint":"Selecteer een dag uit de lijst links om het dagplan te bekijken","planner.noPlacesForDay":"Nog geen plaatsen voor deze dag","planner.addPlacesLink":"Plaatsen toevoegen →","planner.minTotal":"min. totaal","planner.noReservation":"Geen reservering","planner.removeFromDay":"Verwijderen van dag","planner.addToThisDay":"Toevoegen aan dag","planner.overview":"Overzicht","planner.noDays":"Geen dagen","planner.editTripToAddDays":"Bewerk de reis om dagen toe te voegen","planner.dayCount":"{n} dagen","planner.clickToUnlock":"Klik om te ontgrendelen","planner.keepPosition":"Positie behouden tijdens route-optimalisatie","planner.dayDetails":"Dagdetails","planner.dayN":"Dag {n}","stats.countries":"Landen","stats.cities":"Steden","stats.trips":"Reizen","stats.places":"Plaatsen","stats.worldProgress":"Wereldvoortgang","stats.visited":"bezocht","stats.remaining":"resterend","stats.visitedCountries":"Bezochte landen","day.precipProb":"Regenkans","day.precipitation":"Neerslag","day.wind":"Wind","day.sunrise":"Zonsopgang","day.sunset":"Zonsondergang","day.hourlyForecast":"Uurlijkse voorspelling","day.climateHint":"Historische gemiddelden — echte voorspelling beschikbaar binnen 16 dagen voor deze datum.","day.noWeather":"Geen weergegevens beschikbaar. Voeg een plaats met coördinaten toe.","day.overview":"Dagoverzicht","day.accommodation":"Accommodatie","day.addAccommodation":"Accommodatie toevoegen","day.hotelDayRange":"Toepassen op dagen","day.noPlacesForHotel":"Voeg eerst plaatsen toe aan je reis","day.allDays":"Alle","day.checkIn":"Check-in","day.checkOut":"Check-out","day.confirmation":"Bevestiging","day.editAccommodation":"Accommodatie bewerken","day.reservations":"Reserveringen","memories.title":"Foto's","memories.notConnected":"Immich niet verbonden","memories.notConnectedHint":"Verbind je Immich-instantie in Instellingen om je reisfoto's hier te zien.","memories.noDates":"Voeg data toe aan je reis om foto's te laden.","memories.noPhotos":"Geen foto's gevonden","memories.noPhotosHint":"Geen foto's gevonden in Immich voor de datumreeks van deze reis.","memories.photosFound":"foto's","memories.fromOthers":"van anderen","memories.sharePhotos":"Foto's delen","memories.sharing":"Wordt gedeeld","memories.reviewTitle":"Je foto's bekijken","memories.reviewHint":"Klik op foto's om ze uit te sluiten van delen.","memories.shareCount":"{count} foto's delen","memories.immichUrl":"Immich Server URL","memories.immichApiKey":"API-sleutel","memories.testConnection":"Verbinding testen","memories.testFirst":"Test eerst de verbinding","memories.connected":"Verbonden","memories.disconnected":"Niet verbonden","memories.connectionSuccess":"Verbonden met Immich","memories.connectionError":"Kon niet verbinden met Immich","memories.saved":"Immich-instellingen opgeslagen","memories.oldest":"Oudste eerst","memories.newest":"Nieuwste eerst","memories.allLocations":"Alle locaties","memories.addPhotos":"Foto's toevoegen","memories.linkAlbum":"Album koppelen","memories.selectAlbum":"Immich-album selecteren","memories.noAlbums":"Geen albums gevonden","memories.syncAlbum":"Album synchroniseren","memories.unlinkAlbum":"Ontkoppelen","memories.photos":"fotos","memories.selectPhotos":"Selecteer foto's uit Immich","memories.selectHint":"Tik op foto's om ze te selecteren.","memories.selected":"geselecteerd","memories.addSelected":"{count} foto's toevoegen","memories.alreadyAdded":"Toegevoegd","memories.private":"Privé","memories.stopSharing":"Delen stoppen","memories.tripDates":"Reisdata","memories.allPhotos":"Alle foto's","memories.confirmShareTitle":"Delen met reisgenoten?","memories.confirmShareHint":"{count} foto's worden zichtbaar voor alle leden van deze reis. Je kunt individuele foto's later privé maken.","memories.confirmShareButton":"Foto's delen","collab.tabs.chat":"Chat","collab.tabs.notes":"Notities","collab.tabs.polls":"Polls","collab.whatsNext.title":"Wat komt er","collab.whatsNext.today":"Vandaag","collab.whatsNext.tomorrow":"Morgen","collab.whatsNext.empty":"Geen komende activiteiten","collab.whatsNext.until":"tot","collab.whatsNext.emptyHint":"Activiteiten met tijden verschijnen hier","collab.chat.send":"Verzenden","collab.chat.placeholder":"Typ een bericht...","collab.chat.empty":"Start het gesprek","collab.chat.emptyHint":"Berichten worden gedeeld met alle reisleden","collab.chat.emptyDesc":"Deel ideeën, plannen en updates met je reisgroep","collab.chat.today":"Vandaag","collab.chat.yesterday":"Gisteren","collab.chat.deletedMessage":"heeft een bericht verwijderd","collab.chat.reply":"Beantwoorden","collab.chat.loadMore":"Oudere berichten laden","collab.chat.justNow":"zojuist","collab.chat.minutesAgo":"{n} min. geleden","collab.chat.hoursAgo":"{n} uur geleden","collab.notes.title":"Notities","collab.notes.new":"Nieuwe notitie","collab.notes.empty":"Nog geen notities","collab.notes.emptyHint":"Begin met het vastleggen van ideeën en plannen","collab.notes.all":"Alle","collab.notes.titlePlaceholder":"Notitietitel","collab.notes.contentPlaceholder":"Schrijf iets...","collab.notes.categoryPlaceholder":"Categorie","collab.notes.newCategory":"Nieuwe categorie...","collab.notes.category":"Categorie","collab.notes.noCategory":"Geen categorie","collab.notes.color":"Kleur","collab.notes.save":"Opslaan","collab.notes.cancel":"Annuleren","collab.notes.edit":"Bewerken","collab.notes.delete":"Verwijderen","collab.notes.pin":"Vastpinnen","collab.notes.unpin":"Losmaken","collab.notes.daysAgo":"{n}d geleden","collab.notes.categorySettings":"Categorieën beheren","collab.notes.create":"Aanmaken","collab.notes.website":"Website","collab.notes.websitePlaceholder":"https://...","collab.notes.attachFiles":"Bestanden bijvoegen","collab.notes.noCategoriesYet":"Nog geen categorieën","collab.notes.emptyDesc":"Maak een notitie om te beginnen","collab.polls.title":"Polls","collab.polls.new":"Nieuwe poll","collab.polls.empty":"Nog geen polls","collab.polls.emptyHint":"Stel de groep een vraag en stem samen","collab.polls.question":"Vraag","collab.polls.questionPlaceholder":"Wat zullen we doen?","collab.polls.addOption":"+ Optie toevoegen","collab.polls.optionPlaceholder":"Optie {n}","collab.polls.create":"Poll aanmaken","collab.polls.close":"Sluiten","collab.polls.closed":"Gesloten","collab.polls.votes":"{n} stemmen","collab.polls.vote":"{n} stem","collab.polls.multipleChoice":"Meerkeuze","collab.polls.multiChoice":"Meerkeuze","collab.polls.deadline":"Deadline","collab.polls.option":"Optie","collab.polls.options":"Opties","collab.polls.delete":"Verwijderen","collab.polls.closedSection":"Gesloten","admin.tabs.permissions":"Rechten","perm.title":"Rechtinstellingen","perm.subtitle":"Bepaal wie welke acties mag uitvoeren in de applicatie","perm.saved":"Rechtinstellingen opgeslagen","perm.resetDefaults":"Standaardwaarden herstellen","perm.customized":"aangepast","perm.level.admin":"Alleen beheerder","perm.level.tripOwner":"Reiseigenaar","perm.level.tripMember":"Reisleden","perm.level.everybody":"Iedereen","perm.cat.trip":"Reisbeheer","perm.cat.members":"Ledenbeheer","perm.cat.files":"Bestanden","perm.cat.content":"Inhoud & planning","perm.cat.extras":"Budget, paklijsten & samenwerking","perm.action.trip_create":"Reizen aanmaken","perm.action.trip_edit":"Reisdetails bewerken","perm.action.trip_delete":"Reizen verwijderen","perm.action.trip_archive":"Reizen archiveren / dearchiveren","perm.action.trip_cover_upload":"Omslagfoto uploaden","perm.action.member_manage":"Leden toevoegen / verwijderen","perm.action.file_upload":"Bestanden uploaden","perm.action.file_edit":"Bestandsmetadata bewerken","perm.action.file_delete":"Bestanden verwijderen","perm.action.place_edit":"Plaatsen toevoegen / bewerken / verwijderen","perm.action.day_edit":"Dagen, notities & toewijzingen bewerken","perm.action.reservation_edit":"Reserveringen beheren","perm.action.budget_edit":"Budget beheren","perm.action.packing_edit":"Paklijsten beheren","perm.action.collab_edit":"Samenwerking (notities, polls, chat)","perm.action.share_manage":"Deellinks beheren","perm.actionHint.trip_create":"Wie kan nieuwe reizen aanmaken","perm.actionHint.trip_edit":"Wie kan reisnaam, data, beschrijving en valuta wijzigen","perm.actionHint.trip_delete":"Wie kan een reis permanent verwijderen","perm.actionHint.trip_archive":"Wie kan een reis archiveren of dearchiveren","perm.actionHint.trip_cover_upload":"Wie kan de omslagfoto uploaden of wijzigen","perm.actionHint.member_manage":"Wie kan reisleden uitnodigen of verwijderen","perm.actionHint.file_upload":"Wie kan bestanden uploaden naar een reis","perm.actionHint.file_edit":"Wie kan bestandsbeschrijvingen en links bewerken","perm.actionHint.file_delete":"Wie kan bestanden naar de prullenbak verplaatsen of permanent verwijderen","perm.actionHint.place_edit":"Wie kan plaatsen toevoegen, bewerken of verwijderen","perm.actionHint.day_edit":"Wie kan dagen, dagnotities en plaatstoewijzingen bewerken","perm.actionHint.reservation_edit":"Wie kan reserveringen aanmaken, bewerken of verwijderen","perm.actionHint.budget_edit":"Wie kan budgetposten aanmaken, bewerken of verwijderen","perm.actionHint.packing_edit":"Wie kan pakitems en tassen beheren","perm.actionHint.collab_edit":"Wie kan notities, polls aanmaken en berichten versturen","perm.actionHint.share_manage":"Wie kan openbare deellinks aanmaken of verwijderen"},jM={...Sj,"common.save":"حفظ","common.cancel":"إلغاء","common.delete":"حذف","common.edit":"تعديل","common.add":"إضافة","common.loading":"جارٍ التحميل...","common.import":"استيراد","common.error":"خطأ","common.back":"رجوع","common.all":"الكل","common.close":"إغلاق","common.open":"فتح","common.upload":"رفع","common.search":"بحث","common.confirm":"تأكيد","common.ok":"حسنًا","common.yes":"نعم","common.no":"لا","common.or":"أو","common.none":"لا شيء","common.date":"التاريخ","common.rename":"إعادة تسمية","common.name":"الاسم","common.email":"البريد الإلكتروني","common.password":"كلمة المرور","common.saving":"جارٍ الحفظ...","common.saved":"تم الحفظ","trips.reminder":"تذكير","trips.reminderNone":"بدون","trips.reminderDay":"يوم","trips.reminderDays":"أيام","trips.reminderCustom":"مخصص","trips.reminderDaysBefore":"أيام قبل المغادرة","trips.reminderDisabledHint":"تذكيرات الرحلة معطلة. قم بتفعيلها من الإدارة > الإعدادات > الإشعارات.","common.update":"تحديث","common.change":"تغيير","common.uploading":"جارٍ الرفع...","common.backToPlanning":"العودة إلى التخطيط","common.reset":"إعادة تعيين","nav.trip":"الرحلة","nav.share":"مشاركة","nav.settings":"الإعدادات","nav.admin":"الإدارة","nav.logout":"تسجيل الخروج","nav.lightMode":"الوضع الفاتح","nav.darkMode":"الوضع الداكن","nav.autoMode":"الوضع التلقائي","nav.administrator":"المسؤول","nav.myTrips":"رحلاتي","dashboard.title":"رحلاتي","dashboard.subtitle.loading":"جارٍ تحميل الرحلات...","dashboard.subtitle.trips":"{count} رحلة ({archived} مؤرشفة)","dashboard.subtitle.empty":"ابدأ رحلتك الأولى","dashboard.subtitle.activeOne":"{count} رحلة نشطة","dashboard.subtitle.activeMany":"{count} رحلات نشطة","dashboard.subtitle.archivedSuffix":" · {count} مؤرشفة","dashboard.newTrip":"رحلة جديدة","dashboard.gridView":"عرض شبكي","dashboard.listView":"عرض قائمة","dashboard.currency":"العملة","dashboard.timezone":"المناطق الزمنية","dashboard.localTime":"المحلي","dashboard.timezoneCustomTitle":"منطقة زمنية مخصصة","dashboard.timezoneCustomLabelPlaceholder":"الاسم (اختياري)","dashboard.timezoneCustomTzPlaceholder":"مثال: Asia/Riyadh","dashboard.timezoneCustomAdd":"إضافة","dashboard.timezoneCustomErrorEmpty":"أدخل معرّف منطقة زمنية","dashboard.timezoneCustomErrorInvalid":"منطقة زمنية غير صالحة. استخدم صيغة مثل Asia/Riyadh","dashboard.timezoneCustomErrorDuplicate":"مضافة بالفعل","dashboard.emptyTitle":"لا توجد رحلات بعد","dashboard.emptyText":"أنشئ رحلتك الأولى وابدأ التخطيط","dashboard.emptyButton":"إنشاء أول رحلة","dashboard.nextTrip":"الرحلة القادمة","dashboard.shared":"مشتركة","dashboard.sharedBy":"شاركها {name}","dashboard.days":"الأيام","dashboard.places":"الأماكن","dashboard.archive":"أرشفة","dashboard.restore":"استعادة","dashboard.archived":"مؤرشفة","dashboard.status.ongoing":"جارية","dashboard.status.today":"اليوم","dashboard.status.tomorrow":"غدًا","dashboard.status.past":"منتهية","dashboard.status.daysLeft":"متبقي {count} يوم","dashboard.toast.loadError":"فشل تحميل الرحلات","dashboard.toast.created":"تم إنشاء الرحلة بنجاح","dashboard.toast.createError":"فشل إنشاء الرحلة","dashboard.toast.updated":"تم تحديث الرحلة","dashboard.toast.updateError":"فشل تحديث الرحلة","dashboard.toast.deleted":"تم حذف الرحلة","dashboard.toast.deleteError":"فشل حذف الرحلة","dashboard.toast.archived":"تمت أرشفة الرحلة","dashboard.toast.archiveError":"فشل الأرشفة","dashboard.toast.restored":"تمت استعادة الرحلة","dashboard.toast.restoreError":"فشل الاستعادة","dashboard.confirm.delete":'حذف الرحلة "{title}"؟ سيتم حذف جميع الأماكن والخطط نهائيًا.',"dashboard.editTrip":"تعديل الرحلة","dashboard.createTrip":"إنشاء رحلة جديدة","dashboard.tripTitle":"العنوان","dashboard.tripTitlePlaceholder":"مثال: صيف في اليابان","dashboard.tripDescription":"الوصف","dashboard.tripDescriptionPlaceholder":"عمّ تتحدث هذه الرحلة؟","dashboard.startDate":"تاريخ البداية","dashboard.endDate":"تاريخ النهاية","dashboard.noDateHint":"لا يوجد تاريخ محدد. سيتم إنشاء 7 أيام افتراضية ويمكنك تغيير ذلك لاحقًا.","dashboard.coverImage":"صورة الغلاف","dashboard.addCoverImage":"إضافة صورة غلاف","dashboard.addMembers":"رفاق السفر","dashboard.addMember":"إضافة عضو","dashboard.coverSaved":"تم حفظ صورة الغلاف","dashboard.coverUploadError":"فشل الرفع","dashboard.coverRemoveError":"فشل الإزالة","dashboard.titleRequired":"العنوان مطلوب","dashboard.endDateError":"يجب أن يكون تاريخ النهاية بعد البداية","settings.title":"الإعدادات","settings.subtitle":"ضبط إعداداتك الشخصية","settings.map":"الخريطة","settings.mapTemplate":"قالب الخريطة","settings.mapTemplatePlaceholder.select":"اختر قالبًا...","settings.mapDefaultHint":"اتركه فارغًا لاستخدام OpenStreetMap افتراضيًا","settings.mapTemplatePlaceholder":"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png","settings.mapHint":"قالب URL لبلاطات الخريطة","settings.latitude":"خط العرض","settings.longitude":"خط الطول","settings.saveMap":"حفظ الخريطة","settings.apiKeys":"مفاتيح API","settings.mapsKey":"مفتاح Google Maps API","settings.mapsKeyHint":"للبحث عن الأماكن. يتطلب Places API (New).","settings.weatherKey":"مفتاح OpenWeatherMap API","settings.weatherKeyHint":"لبيانات الطقس.","settings.keyPlaceholder":"أدخل المفتاح...","settings.configured":"مُعدّ","settings.saveKeys":"حفظ المفاتيح","settings.display":"العرض","settings.colorMode":"نمط الألوان","settings.light":"فاتح","settings.dark":"داكن","settings.auto":"تلقائي","settings.language":"اللغة","settings.temperature":"وحدة الحرارة","settings.timeFormat":"تنسيق الوقت","settings.routeCalculation":"حساب المسار","settings.blurBookingCodes":"إخفاء رموز الحجز","settings.notifications":"الإشعارات","settings.notifyTripInvite":"دعوات الرحلات","settings.notifyBookingChange":"تغييرات الحجز","settings.notifyTripReminder":"تذكيرات الرحلات","settings.notifyVacayInvite":"دعوات دمج الإجازات","settings.notifyPhotosShared":"صور مشتركة (Immich)","settings.notifyCollabMessage":"رسائل الدردشة (Collab)","settings.notifyPackingTagged":"قائمة الأمتعة: التعيينات","settings.notifyWebhook":"إشعارات Webhook","settings.notificationsDisabled":"الإشعارات غير مكوّنة. اطلب من المسؤول تفعيل إشعارات البريد الإلكتروني أو Webhook.","settings.notificationsActive":"القناة النشطة","settings.notificationsManagedByAdmin":"يتم تكوين أحداث الإشعارات بواسطة المسؤول.","admin.notifications.title":"الإشعارات","admin.notifications.hint":"اختر قناة إشعارات واحدة. يمكن تفعيل واحدة فقط في كل مرة.","admin.notifications.none":"معطّل","admin.notifications.email":"البريد الإلكتروني (SMTP)","admin.notifications.webhook":"Webhook","admin.notifications.events":"أحداث الإشعارات","admin.notifications.eventsHint":"اختر الأحداث التي تُفعّل الإشعارات لجميع المستخدمين.","admin.notifications.configureFirst":"قم بتكوين إعدادات SMTP أو Webhook أدناه أولاً، ثم قم بتفعيل الأحداث.","admin.notifications.save":"حفظ إعدادات الإشعارات","admin.notifications.saved":"تم حفظ إعدادات الإشعارات","admin.notifications.testWebhook":"إرسال webhook تجريبي","admin.notifications.testWebhookSuccess":"تم إرسال webhook التجريبي بنجاح","admin.notifications.testWebhookFailed":"فشل إرسال webhook التجريبي","admin.smtp.title":"البريد والإشعارات","admin.smtp.hint":"تكوين SMTP لإرسال إشعارات البريد الإلكتروني.","admin.smtp.testButton":"إرسال بريد تجريبي","admin.webhook.hint":"إرسال الإشعارات إلى webhook خارجي (Discord، Slack، إلخ).","admin.smtp.testSuccess":"تم إرسال البريد التجريبي بنجاح","admin.smtp.testFailed":"فشل إرسال البريد التجريبي","dayplan.icsTooltip":"تصدير التقويم (ICS)","share.linkTitle":"رابط عام","share.linkHint":"أنشئ رابطًا يمكن لأي شخص استخدامه لعرض هذه الرحلة بدون تسجيل الدخول. للقراءة فقط — لا يمكن التعديل.","share.createLink":"إنشاء رابط","share.deleteLink":"حذف الرابط","share.createError":"تعذر إنشاء الرابط","common.copy":"نسخ","common.copied":"تم النسخ","share.permMap":"الخريطة والخطة","share.permBookings":"الحجوزات","share.permPacking":"الأمتعة","shared.expired":"الرابط منتهي أو غير صالح","shared.expiredHint":"رابط الرحلة المشترك لم يعد نشطًا.","shared.readOnly":"عرض للقراءة فقط","shared.tabPlan":"الخطة","shared.tabBookings":"الحجوزات","shared.tabPacking":"قائمة التعبئة","shared.tabBudget":"الميزانية","shared.tabChat":"الدردشة","shared.days":"أيام","shared.places":"أماكن","shared.other":"أخرى","shared.totalBudget":"إجمالي الميزانية","shared.messages":"رسائل","shared.sharedVia":"تمت المشاركة عبر","shared.confirmed":"مؤكد","shared.pending":"قيد الانتظار","share.permBudget":"الميزانية","share.permCollab":"الدردشة","settings.on":"تشغيل","settings.off":"إيقاف","settings.mcp.title":"إعداد MCP","settings.mcp.endpoint":"نقطة نهاية MCP","settings.mcp.clientConfig":"إعداد العميل","settings.mcp.clientConfigHint":"استبدل برمز API من القائمة أدناه. قد يحتاج مسار npx إلى ضبط وفق نظامك (مثلاً C:\\PROGRA~1\\nodejs\\npx.cmd على Windows).","settings.mcp.copy":"نسخ","settings.mcp.copied":"تم النسخ!","settings.mcp.apiTokens":"رموز API","settings.mcp.createToken":"إنشاء رمز جديد","settings.mcp.noTokens":"لا توجد رموز بعد. أنشئ رمزاً للاتصال بعملاء MCP.","settings.mcp.tokenCreatedAt":"أُنشئ","settings.mcp.tokenUsedAt":"استُخدم","settings.mcp.deleteTokenTitle":"حذف الرمز","settings.mcp.deleteTokenMessage":"سيتوقف هذا الرمز عن العمل فوراً. أي عميل MCP يستخدمه سيفقد الوصول.","settings.mcp.modal.createTitle":"إنشاء رمز API","settings.mcp.modal.tokenName":"اسم الرمز","settings.mcp.modal.tokenNamePlaceholder":"مثال: Claude Desktop، حاسوب العمل","settings.mcp.modal.creating":"جارٍ الإنشاء…","settings.mcp.modal.create":"إنشاء الرمز","settings.mcp.modal.createdTitle":"تم إنشاء الرمز","settings.mcp.modal.createdWarning":"سيُعرض هذا الرمز مرة واحدة فقط. انسخه واحفظه الآن — لا يمكن استرداده.","settings.mcp.modal.done":"تم","settings.mcp.toast.created":"تم إنشاء الرمز","settings.mcp.toast.createError":"فشل إنشاء الرمز","settings.mcp.toast.deleted":"تم حذف الرمز","settings.mcp.toast.deleteError":"فشل حذف الرمز","settings.account":"الحساب","settings.username":"اسم المستخدم","settings.email":"البريد الإلكتروني","settings.role":"الدور","settings.roleAdmin":"مسؤول","settings.oidcLinked":"مرتبط مع","settings.changePassword":"تغيير كلمة المرور","settings.mustChangePassword":"يجب عليك تغيير كلمة المرور قبل المتابعة. يرجى تعيين كلمة مرور جديدة أدناه.","settings.currentPassword":"كلمة المرور الحالية","settings.currentPasswordRequired":"كلمة المرور الحالية مطلوبة","settings.newPassword":"كلمة المرور الجديدة","settings.confirmPassword":"تأكيد كلمة المرور الجديدة","settings.updatePassword":"تحديث كلمة المرور","settings.passwordRequired":"أدخل كلمة المرور الحالية والجديدة","settings.passwordTooShort":"يجب أن تتكون كلمة المرور من 8 أحرف على الأقل","settings.passwordMismatch":"كلمتا المرور غير متطابقتين","settings.passwordWeak":"يجب أن تحتوي كلمة المرور على حرف كبير وحرف صغير ورقم ورمز خاص","settings.passwordChanged":"تم تغيير كلمة المرور بنجاح","settings.deleteAccount":"حذف الحساب","settings.deleteAccountTitle":"هل تريد حذف حسابك؟","settings.deleteAccountWarning":"سيتم حذف حسابك وجميع رحلاتك وأماكنك وملفاتك نهائيًا. لا يمكن التراجع عن ذلك.","settings.deleteAccountConfirm":"حذف نهائي","settings.deleteBlockedTitle":"الحذف غير ممكن","settings.deleteBlockedMessage":"أنت المسؤول الوحيد. قم بترقية مستخدم آخر إلى مسؤول قبل حذف حسابك.","settings.roleUser":"مستخدم","settings.saveProfile":"حفظ الملف الشخصي","settings.toast.mapSaved":"تم حفظ إعدادات الخريطة","settings.toast.keysSaved":"تم حفظ مفاتيح API","settings.toast.displaySaved":"تم حفظ إعدادات العرض","settings.toast.profileSaved":"تم حفظ الملف الشخصي","settings.uploadAvatar":"رفع صورة الملف الشخصي","settings.removeAvatar":"إزالة صورة الملف الشخصي","settings.avatarUploaded":"تم تحديث صورة الملف الشخصي","settings.avatarRemoved":"تمت إزالة صورة الملف الشخصي","settings.avatarError":"فشل الرفع","settings.mfa.title":"المصادقة الثنائية (2FA)","settings.mfa.description":"تضيف خطوة ثانية عند تسجيل الدخول. استخدم تطبيق مصادقة (Google Authenticator، Authy، إلخ).","settings.mfa.requiredByPolicy":"المسؤول يتطلب المصادقة الثنائية. اضبط تطبيق المصادقة أدناه قبل المتابعة.","settings.mfa.backupTitle":"رموز النسخ الاحتياطي","settings.mfa.backupDescription":"استخدم هذه الرموز لمرة واحدة إذا فقدت الوصول إلى تطبيق المصادقة.","settings.mfa.backupWarning":"احفظ هذه الرموز الآن. كل رمز يمكن استخدامه مرة واحدة فقط.","settings.mfa.backupCopy":"نسخ الرموز","settings.mfa.backupDownload":"تنزيل TXT","settings.mfa.backupPrint":"طباعة / PDF","settings.mfa.backupCopied":"تم نسخ رموز النسخ الاحتياطي","settings.mfa.enabled":"المصادقة الثنائية مفعّلة على حسابك.","settings.mfa.disabled":"المصادقة الثنائية غير مفعّلة.","settings.mfa.setup":"إعداد المصادقة","settings.mfa.scanQr":"امسح رمز QR بتطبيقك أو أدخل المفتاح يدويًا.","settings.mfa.secretLabel":"المفتاح السري (إدخال يدوي)","settings.mfa.codePlaceholder":"رمز من 6 أرقام","settings.mfa.enable":"تفعيل 2FA","settings.mfa.cancelSetup":"إلغاء","settings.mfa.disableTitle":"تعطيل 2FA","settings.mfa.disableHint":"أدخل كلمة مرور حسابك ورمزًا حاليًا من المصادقة.","settings.mfa.disable":"تعطيل 2FA","settings.mfa.toastEnabled":"تم تفعيل المصادقة الثنائية","settings.mfa.toastDisabled":"تم تعطيل المصادقة الثنائية","settings.mfa.demoBlocked":"غير متاح في الوضع التجريبي","login.error":"فشل تسجيل الدخول. يرجى التحقق من بياناتك.","login.tagline":`رحلاتك. خطتك.`,"login.description":"خطط لرحلاتك بشكل تعاوني مع خرائط تفاعلية وميزانيات ومزامنة لحظية.","login.features.maps":"خرائط تفاعلية","login.features.mapsDesc":"Google Places ومسارات وتجميع","login.features.realtime":"مزامنة فورية","login.features.realtimeDesc":"خططوا معًا عبر WebSocket","login.features.budget":"تتبع الميزانية","login.features.budgetDesc":"فئات ورسوم وتقسيم لكل شخص","login.features.collab":"تعاون","login.features.collabDesc":"عدة مستخدمين مع رحلات مشتركة","login.features.packing":"قوائم تجهيز","login.features.packingDesc":"فئات وتقدم واقتراحات","login.features.bookings":"الحجوزات","login.features.bookingsDesc":"رحلات وفنادق ومطاعم وغير ذلك","login.features.files":"المستندات","login.features.filesDesc":"رفع الملفات وإدارتها","login.features.routes":"مسارات ذكية","login.features.routesDesc":"تحسين تلقائي وتصدير إلى Google Maps","login.selfHosted":"استضافة ذاتية · مفتوح المصدر · بياناتك تبقى ملكك","login.title":"تسجيل الدخول","login.subtitle":"مرحبًا بعودتك","login.signingIn":"جارٍ تسجيل الدخول…","login.signIn":"دخول","login.createAdmin":"إنشاء حساب مسؤول","login.createAdminHint":"أعد إعداد أول حساب مسؤول لـ TREK.","login.setNewPassword":"تعيين كلمة مرور جديدة","login.setNewPasswordHint":"يجب عليك تغيير كلمة المرور قبل المتابعة.","login.createAccount":"إنشاء حساب","login.createAccountHint":"سجّل حسابًا جديدًا.","login.creating":"جارٍ الإنشاء…","login.noAccount":"ليس لديك حساب؟","login.hasAccount":"لديك حساب بالفعل؟","login.register":"تسجيل","login.emailPlaceholder":"your@email.com","login.username":"اسم المستخدم","login.oidc.registrationDisabled":"التسجيل معطّل. تواصل مع المسؤول.","login.oidc.noEmail":"لم يتم استلام بريد إلكتروني من المزوّد.","login.oidc.tokenFailed":"فشلت المصادقة.","login.oidc.invalidState":"جلسة غير صالحة. حاول مرة أخرى.","login.demoFailed":"فشل الدخول إلى العرض التجريبي","login.oidcSignIn":"تسجيل الدخول عبر {name}","login.oidcOnly":"تم تعطيل المصادقة بكلمة المرور. يرجى تسجيل الدخول عبر مزود SSO.","login.demoHint":"جرّب العرض التجريبي دون الحاجة للتسجيل","login.mfaTitle":"المصادقة الثنائية","login.mfaSubtitle":"أدخل الرمز المكون من 6 أرقام من تطبيق المصادقة.","login.mfaCodeLabel":"رمز التحقق","login.mfaCodeRequired":"أدخل الرمز من تطبيق المصادقة.","login.mfaHint":"افتح Google Authenticator أو Authy أو أي تطبيق TOTP آخر.","login.mfaBack":"← العودة لتسجيل الدخول","login.mfaVerify":"تحقق","register.passwordMismatch":"كلمتا المرور غير متطابقتين","register.passwordTooShort":"يجب أن تتكون كلمة المرور من 8 أحرف على الأقل","register.failed":"فشل التسجيل","register.getStarted":"ابدأ الآن","register.subtitle":"أنشئ حسابًا وابدأ التخطيط لرحلات أحلامك.","register.feature1":"خطط رحلات غير محدودة","register.feature2":"عرض خريطة تفاعلي","register.feature3":"إدارة الأماكن والفئات","register.feature4":"تتبع الحجوزات","register.feature5":"إنشاء قوائم تجهيز","register.feature6":"حفظ الصور والملفات","register.createAccount":"إنشاء حساب","register.startPlanning":"ابدأ تخطيط رحلتك","register.minChars":"6 أحرف على الأقل","register.confirmPassword":"تأكيد كلمة المرور","register.repeatPassword":"إعادة كلمة المرور","register.registering":"جارٍ التسجيل...","register.register":"تسجيل","register.hasAccount":"لديك حساب بالفعل؟","register.signIn":"تسجيل الدخول","admin.title":"الإدارة","admin.subtitle":"إدارة المستخدمين وإعدادات النظام","admin.tabs.users":"المستخدمون","admin.tabs.categories":"الفئات","admin.tabs.backup":"النسخ الاحتياطي","admin.tabs.audit":"سجل التدقيق","admin.tabs.settings":"الإعدادات","admin.tabs.config":"الإعدادات","admin.tabs.templates":"قوالب التعبئة","admin.tabs.addons":"الإضافات","admin.tabs.mcpTokens":"رموز MCP","admin.mcpTokens.title":"رموز MCP","admin.mcpTokens.subtitle":"إدارة رموز API لجميع المستخدمين","admin.mcpTokens.owner":"المالك","admin.mcpTokens.tokenName":"اسم الرمز","admin.mcpTokens.created":"تاريخ الإنشاء","admin.mcpTokens.lastUsed":"آخر استخدام","admin.mcpTokens.never":"أبداً","admin.mcpTokens.empty":"لم يتم إنشاء أي رموز MCP بعد","admin.mcpTokens.deleteTitle":"حذف الرمز","admin.mcpTokens.deleteMessage":"سيتم إلغاء هذا الرمز فوراً. سيفقد المستخدم وصوله إلى MCP عبر هذا الرمز.","admin.mcpTokens.deleteSuccess":"تم حذف الرمز","admin.mcpTokens.deleteError":"فشل حذف الرمز","admin.mcpTokens.loadError":"فشل تحميل الرموز","admin.tabs.github":"GitHub","admin.stats.users":"المستخدمون","admin.stats.trips":"الرحلات","admin.stats.places":"الأماكن","admin.stats.photos":"الصور","admin.stats.files":"الملفات","admin.table.user":"المستخدم","admin.table.email":"البريد الإلكتروني","admin.table.role":"الدور","admin.table.created":"تم الإنشاء","admin.table.lastLogin":"آخر تسجيل دخول","admin.table.actions":"الإجراءات","admin.you":"(أنت)","admin.editUser":"تعديل المستخدم","admin.newPassword":"كلمة مرور جديدة","admin.newPasswordHint":"اتركه فارغًا للاحتفاظ بالحالية","admin.deleteUser":'حذف المستخدم "{name}"؟ سيتم حذف جميع الرحلات نهائيًا.',"admin.deleteUserTitle":"حذف المستخدم","admin.newPasswordPlaceholder":"أدخل كلمة مرور جديدة…","admin.toast.loadError":"فشل تحميل بيانات الإدارة","admin.toast.userUpdated":"تم تحديث المستخدم","admin.toast.updateError":"فشل التحديث","admin.toast.userDeleted":"تم حذف المستخدم","admin.toast.deleteError":"فشل الحذف","admin.toast.cannotDeleteSelf":"لا يمكنك حذف حسابك الخاص","admin.toast.userCreated":"تم إنشاء المستخدم","admin.toast.createError":"فشل إنشاء المستخدم","admin.toast.fieldsRequired":"اسم المستخدم والبريد الإلكتروني وكلمة المرور مطلوبة","admin.createUser":"إنشاء مستخدم","admin.invite.title":"روابط الدعوة","admin.invite.subtitle":"إنشاء روابط تسجيل للاستخدام المحدود","admin.invite.create":"إنشاء رابط","admin.invite.createAndCopy":"إنشاء ونسخ","admin.invite.empty":"لم يتم إنشاء روابط دعوة بعد","admin.invite.maxUses":"الحد الأقصى للاستخدام","admin.invite.expiry":"تنتهي بعد","admin.invite.uses":"مستخدم","admin.invite.expiresAt":"تنتهي في","admin.invite.createdBy":"بواسطة","admin.invite.active":"نشط","admin.invite.expired":"منتهي","admin.invite.usedUp":"مستنفد","admin.invite.copied":"تم نسخ رابط الدعوة","admin.invite.copyLink":"نسخ الرابط","admin.invite.deleted":"تم حذف رابط الدعوة","admin.invite.createError":"فشل إنشاء رابط الدعوة","admin.invite.deleteError":"فشل حذف رابط الدعوة","admin.allowRegistration":"السماح بالتسجيل","admin.allowRegistrationHint":"يمكن للمستخدمين الجدد التسجيل بأنفسهم","admin.requireMfa":"فرض المصادقة الثنائية (2FA)","admin.requireMfaHint":"يجب على المستخدمين الذين لا يملكون 2FA إكمال الإعداد في الإعدادات قبل استخدام التطبيق.","admin.apiKeys":"مفاتيح API","admin.apiKeysHint":"اختياري. يُفعّل بيانات الأماكن الموسعة مثل الصور والطقس.","admin.mapsKey":"مفتاح Google Maps API","admin.mapsKeyHint":"مطلوب للبحث عن الأماكن. احصل عليه من console.cloud.google.com","admin.mapsKeyHintLong":"بدون مفتاح API، يُستخدم OpenStreetMap للبحث. مع مفتاح Google يمكن تحميل الصور والتقييمات وساعات العمل أيضًا. احصل عليه من console.cloud.google.com.","admin.recommended":"مُوصى به","admin.weatherKey":"مفتاح OpenWeatherMap API","admin.weatherKeyHint":"لبيانات الطقس. مجاني من openweathermap.org","admin.validateKey":"اختبار","admin.keyValid":"متصل","admin.keyInvalid":"غير صالح","admin.keySaved":"تم حفظ مفاتيح API","admin.oidcTitle":"تسجيل الدخول الموحد (OIDC)","admin.oidcSubtitle":"السماح بتسجيل الدخول عبر مزودين خارجيين مثل Google أو Apple أو Authentik أو Keycloak.","admin.oidcDisplayName":"الاسم المعروض","admin.oidcIssuer":"عنوان URL للمُصدر","admin.oidcIssuerHint":"عنوان OpenID Connect Issuer URL للمزود. مثال: https://accounts.google.com","admin.oidcSaved":"تم حفظ إعدادات OIDC","admin.oidcOnlyMode":"تعطيل المصادقة بكلمة المرور","admin.oidcOnlyModeHint":"عند التفعيل، يُسمح فقط بتسجيل الدخول عبر SSO. سيتم حظر تسجيل الدخول والتسجيل بكلمة المرور.","admin.fileTypes":"أنواع الملفات المسموح بها","admin.fileTypesHint":"حدد أنواع الملفات التي يمكن للمستخدمين رفعها.","admin.fileTypesFormat":"امتدادات مفصولة بفواصل (مثل jpg,png,pdf,doc). استخدم * للسماح بجميع الأنواع.","admin.fileTypesSaved":"تم حفظ إعدادات أنواع الملفات","admin.bagTracking.title":"تتبع الأمتعة","admin.bagTracking.subtitle":"تفعيل الوزن وتعيين الأمتعة للعناصر","admin.packingTemplates.title":"قوالب التعبئة","admin.packingTemplates.subtitle":"إنشاء قوائم تعبئة قابلة لإعادة الاستخدام","admin.packingTemplates.create":"قالب جديد","admin.packingTemplates.namePlaceholder":"اسم القالب (مثال: عطلة شاطئية)","admin.packingTemplates.empty":"لم يتم إنشاء قوالب بعد","admin.packingTemplates.items":"عناصر","admin.packingTemplates.categories":"فئات","admin.packingTemplates.itemName":"اسم العنصر","admin.packingTemplates.itemCategory":"الفئة","admin.packingTemplates.categoryName":"اسم الفئة (مثال: ملابس)","admin.packingTemplates.addCategory":"إضافة فئة","admin.packingTemplates.created":"تم إنشاء القالب","admin.packingTemplates.deleted":"تم حذف القالب","admin.packingTemplates.loadError":"فشل تحميل القوالب","admin.packingTemplates.createError":"فشل إنشاء القالب","admin.packingTemplates.deleteError":"فشل حذف القالب","admin.packingTemplates.saveError":"فشل الحفظ","admin.addons.title":"الإضافات","admin.addons.subtitle":"فعّل أو عطّل الميزات لتخصيص تجربة TREK.","admin.addons.catalog.memories.name":"صور (Immich)","admin.addons.catalog.memories.description":"شارك صور رحلتك عبر Immich","admin.addons.catalog.mcp.name":"MCP","admin.addons.catalog.mcp.description":"بروتوكول سياق النموذج لتكامل مساعد الذكاء الاصطناعي","admin.addons.catalog.packing.name":"التعبئة","admin.addons.catalog.packing.description":"قوائم تحقق لإعداد أمتعتك لكل رحلة","admin.addons.catalog.budget.name":"الميزانية","admin.addons.catalog.budget.description":"تتبع النفقات وخطط ميزانية الرحلة","admin.addons.catalog.documents.name":"المستندات","admin.addons.catalog.documents.description":"حفظ وإدارة وثائق السفر","admin.addons.catalog.vacay.name":"الإجازة","admin.addons.catalog.vacay.description":"مخطط إجازات شخصي مع عرض تقويم","admin.addons.catalog.atlas.name":"الأطلس","admin.addons.catalog.atlas.description":"خريطة العالم مع الدول التي تمت زيارتها وإحصائيات السفر","admin.addons.catalog.collab.name":"التعاون","admin.addons.catalog.collab.description":"ملاحظات واستطلاعات ودردشة لحظية لتخطيط الرحلة","admin.addons.subtitleBefore":"فعّل أو عطّل الميزات لتخصيص تجربة ","admin.addons.subtitleAfter":".","admin.addons.enabled":"مفعّل","admin.addons.disabled":"معطّل","admin.addons.type.trip":"رحلة","admin.addons.type.global":"عام","admin.addons.type.integration":"تكامل","admin.addons.tripHint":"متاح كعلامة تبويب داخل كل رحلة","admin.addons.globalHint":"متاح كقسم مستقل في التنقل الرئيسي","admin.addons.integrationHint":"خدمات الواجهة الخلفية وتكاملات API بدون صفحة مخصصة","admin.addons.toast.updated":"تم تحديث الإضافة","admin.addons.toast.error":"فشل تحديث الإضافة","admin.addons.noAddons":"لا توجد إضافات متاحة","admin.weather.title":"بيانات الطقس","admin.weather.badge":"منذ 24 مارس 2026","admin.weather.description":"يستخدم TREK خدمة Open-Meteo كمصدر لبيانات الطقس. وهي خدمة مجانية ومفتوحة المصدر ولا تتطلب مفتاح API.","admin.weather.forecast":"توقعات 16 يومًا","admin.weather.forecastDesc":"سابقًا 5 أيام (OpenWeatherMap)","admin.weather.climate":"بيانات المناخ التاريخية","admin.weather.climateDesc":"متوسطات آخر 85 سنة للأيام بعد توقعات الـ 16 يومًا","admin.weather.requests":"10,000 طلب / يوم","admin.weather.requestsDesc":"مجاني، بدون مفتاح API","admin.weather.locationHint":"يعتمد الطقس على أول مكان بإحداثيات في كل يوم. إذا لم يكن هناك مكان مخصص ليوم ما، يُستخدم أي مكان من قائمة الأماكن كمرجع.","admin.audit.subtitle":"أحداث الأمان والإدارة (النسخ الاحتياطية، المستخدمون، المصادقة الثنائية، الإعدادات).","admin.audit.empty":"لا توجد سجلات تدقيق بعد.","admin.audit.refresh":"تحديث","admin.audit.loadMore":"تحميل المزيد","admin.audit.showing":"تم تحميل {count} · الإجمالي {total}","admin.audit.col.time":"الوقت","admin.audit.col.user":"المستخدم","admin.audit.col.action":"الإجراء","admin.audit.col.resource":"المورد","admin.audit.col.ip":"عنوان IP","admin.audit.col.details":"التفاصيل","admin.github.title":"سجل الإصدارات","admin.github.subtitle":"آخر التحديثات من {repo}","admin.github.latest":"الأحدث","admin.github.prerelease":"إصدار تجريبي","admin.github.showDetails":"إظهار التفاصيل","admin.github.hideDetails":"إخفاء التفاصيل","admin.github.loadMore":"تحميل المزيد","admin.github.loading":"جارٍ التحميل...","admin.github.error":"فشل تحميل الإصدارات","admin.github.by":"بواسطة","admin.github.support":"يساعدني في تطوير TREK","admin.update.available":"يتوفر تحديث","admin.update.text":"TREK {version} متوفر. أنت تستخدم {current}.","admin.update.button":"عرض على GitHub","admin.update.install":"تثبيت التحديث","admin.update.confirmTitle":"تثبيت التحديث؟","admin.update.confirmText":"سيتم تحديث TREK من {current} إلى {version}. سيُعاد تشغيل الخادم تلقائيًا بعد ذلك.","admin.update.dataInfo":"جميع بياناتك (الرحلات، المستخدمون، مفاتيح API، المرفوعات، الإجازة، الأطلس، الميزانيات) ستبقى محفوظة.","admin.update.warning":"سيكون التطبيق غير متاح لفترة وجيزة أثناء إعادة التشغيل.","admin.update.confirm":"حدّث الآن","admin.update.installing":"جارٍ التحديث…","admin.update.success":"تم تثبيت التحديث. ستتم إعادة تشغيل الخادم…","admin.update.failed":"فشل التحديث","admin.update.backupHint":"نوصي بإنشاء نسخة احتياطية قبل التحديث.","admin.update.backupLink":"الذهاب إلى النسخ الاحتياطي","admin.update.howTo":"كيفية التحديث","admin.update.dockerText":"يعمل TREK الخاص بك في Docker. للتحديث إلى {version}، نفّذ الأوامر التالية على الخادم:","admin.update.reloadHint":"يرجى إعادة تحميل الصفحة بعد بضع ثوانٍ.","vacay.subtitle":"خطط وأدر أيام الإجازة","vacay.settings":"الإعدادات","vacay.year":"السنة","vacay.addYear":"إضافة سنة","vacay.removeYear":"إزالة السنة","vacay.removeYearConfirm":"إزالة {year}؟","vacay.removeYearHint":"سيتم حذف كل إدخالات الإجازات والعطل الخاصة بهذه السنة نهائيًا.","vacay.remove":"إزالة","vacay.persons":"الأشخاص","vacay.noPersons":"لم تتم إضافة أشخاص بعد","vacay.addPerson":"إضافة شخص","vacay.editPerson":"تعديل الشخص","vacay.removePerson":"إزالة الشخص","vacay.removePersonConfirm":"إزالة {name}؟","vacay.removePersonHint":"سيتم حذف جميع إدخالات الإجازة لهذا الشخص نهائيًا.","vacay.personName":"الاسم","vacay.personNamePlaceholder":"أدخل الاسم","vacay.color":"اللون","vacay.add":"إضافة","vacay.legend":"المفتاح","vacay.publicHoliday":"عطلة رسمية","vacay.companyHoliday":"عطلة شركة","vacay.weekend":"نهاية الأسبوع","vacay.modeVacation":"إجازة","vacay.modeCompany":"عطلة شركة","vacay.entitlement":"الاستحقاق","vacay.entitlementDays":"الأيام","vacay.used":"المستخدم","vacay.remaining":"المتبقي","vacay.carriedOver":"من {year}","vacay.blockWeekends":"حظر عطلة نهاية الأسبوع","vacay.blockWeekendsHint":"منع إدخالات الإجازة يومي السبت والأحد","vacay.weekendDays":"أيام عطلة نهاية الأسبوع","vacay.mon":"الاثنين","vacay.tue":"الثلاثاء","vacay.wed":"الأربعاء","vacay.thu":"الخميس","vacay.fri":"الجمعة","vacay.sat":"السبت","vacay.sun":"الأحد","vacay.publicHolidays":"العطل الرسمية","vacay.publicHolidaysHint":"وضع علامة على العطل الرسمية في التقويم","vacay.selectCountry":"اختر الدولة","vacay.selectRegion":"اختر المنطقة (اختياري)","vacay.addCalendar":"إضافة تقويم","vacay.calendarLabel":"التسمية","vacay.calendarColor":"اللون","vacay.noCalendars":"لا توجد تقويمات","vacay.companyHolidays":"عطل الشركة","vacay.companyHolidaysHint":"السماح بوضع علامة على أيام عطلات الشركة","vacay.companyHolidaysNoDeduct":"لا تُخصم عطل الشركة من أيام الإجازة.","vacay.carryOver":"الترحيل","vacay.carryOverHint":"ترحيل أيام الإجازة المتبقية تلقائيًا إلى السنة التالية","vacay.sharing":"المشاركة","vacay.sharingHint":"شارك خطة إجازاتك مع مستخدمي TREK الآخرين","vacay.owner":"المالك","vacay.shareEmailPlaceholder":"البريد الإلكتروني لمستخدم TREK","vacay.shareSuccess":"تمت مشاركة الخطة بنجاح","vacay.shareError":"تعذرت مشاركة الخطة","vacay.dissolve":"فك الدمج","vacay.dissolveHint":"افصل التقويمات مرة أخرى. سيتم الاحتفاظ بإدخالاتك.","vacay.dissolveAction":"فك","vacay.dissolved":"تم فصل التقويم","vacay.fusedWith":"مُدمج مع","vacay.you":"أنت","vacay.noData":"لا توجد بيانات","vacay.changeColor":"تغيير اللون","vacay.inviteUser":"دعوة مستخدم","vacay.inviteHint":"ادعُ مستخدم TREK آخرًا لمشاركة تقويم إجازة مشترك.","vacay.selectUser":"اختر مستخدمًا","vacay.sendInvite":"إرسال الدعوة","vacay.inviteSent":"تم إرسال الدعوة","vacay.inviteError":"تعذر إرسال الدعوة","vacay.pending":"قيد الانتظار","vacay.noUsersAvailable":"لا يوجد مستخدمون متاحون","vacay.accept":"قبول","vacay.decline":"رفض","vacay.acceptFusion":"قبول ودمج","vacay.inviteTitle":"طلب دمج","vacay.inviteWantsToFuse":"يريد مشاركة تقويم إجازة معك.","vacay.fuseInfo1":"سيرى كلاكما جميع إدخالات الإجازة في تقويم مشترك واحد.","vacay.fuseInfo2":"يمكن لكلا الطرفين إنشاء وتعديل الإدخالات لبعضهما البعض.","vacay.fuseInfo3":"يمكن لكلا الطرفين حذف الإدخالات وتغيير مستحقات الإجازة.","vacay.fuseInfo4":"تتم مشاركة الإعدادات مثل العطل الرسمية وعطل الشركة.","vacay.fuseInfo5":"يمكن فك الدمج في أي وقت من قبل أي طرف. ستبقى إدخالاتك محفوظة.","atlas.subtitle":"بصمتك السفرية حول العالم","atlas.countries":"الدول","atlas.trips":"الرحلات","atlas.places":"الأماكن","atlas.unmark":"إزالة","atlas.confirmMark":"تعيين هذا البلد كمُزار؟","atlas.confirmUnmark":"إزالة هذا البلد من قائمة المُزارة؟","atlas.markVisited":"تعيين كمُزار","atlas.markVisitedHint":"إضافة هذا البلد إلى قائمة المُزارة","atlas.addToBucket":"إضافة إلى قائمة الأمنيات","atlas.addPoi":"إضافة مكان","atlas.searchCountry":"ابحث عن دولة...","atlas.bucketNamePlaceholder":"الاسم (بلد، مدينة، مكان…)","atlas.month":"الشهر","atlas.year":"السنة","atlas.addToBucketHint":"حفظ كمكان تريد زيارته","atlas.bucketWhen":"متى تخطط للزيارة؟","atlas.statsTab":"الإحصائيات","atlas.bucketTab":"قائمة الأمنيات","atlas.addBucket":"إضافة إلى قائمة الأمنيات","atlas.bucketNotesPlaceholder":"ملاحظات (اختياري)","atlas.bucketEmpty":"قائمة أمنياتك فارغة","atlas.bucketEmptyHint":"أضف أماكن تحلم بزيارتها","atlas.days":"الأيام","atlas.visitedCountries":"الدول التي تمت زيارتها","atlas.cities":"المدن","atlas.noData":"لا توجد بيانات سفر بعد","atlas.noDataHint":"أنشئ رحلة وأضف أماكن لرؤية خريطتك العالمية","atlas.lastTrip":"آخر رحلة","atlas.nextTrip":"الرحلة القادمة","atlas.daysLeft":"يوم متبقٍ","atlas.streak":"سلسلة","atlas.years":"سنوات","atlas.yearInRow":"سنة متتالية","atlas.yearsInRow":"سنوات متتالية","atlas.tripIn":"رحلة في","atlas.tripsIn":"رحلات في","atlas.since":"منذ","atlas.europe":"أوروبا","atlas.asia":"آسيا","atlas.northAmerica":"أمريكا الشمالية","atlas.southAmerica":"أمريكا الجنوبية","atlas.africa":"أفريقيا","atlas.oceania":"أوقيانوسيا","atlas.other":"أخرى","atlas.firstVisit":"أول رحلة","atlas.lastVisitLabel":"آخر رحلة","atlas.tripSingular":"رحلة","atlas.tripPlural":"رحلات","atlas.placeVisited":"مكان تمت زيارته","atlas.placesVisited":"أماكن تمت زيارتها","trip.tabs.plan":"الخطة","trip.tabs.reservations":"الحجوزات","trip.tabs.reservationsShort":"حجز","trip.tabs.packing":"قائمة التجهيز","trip.tabs.packingShort":"تجهيز","trip.tabs.budget":"الميزانية","trip.tabs.files":"الملفات","trip.loading":"جارٍ تحميل الرحلة...","trip.loadingPhotos":"جارٍ تحميل صور الأماكن...","trip.mobilePlan":"الخطة","trip.mobilePlaces":"الأماكن","trip.toast.placeUpdated":"تم تحديث المكان","trip.toast.placeAdded":"تمت إضافة المكان","trip.toast.placeDeleted":"تم حذف المكان","trip.toast.selectDay":"يرجى اختيار يوم أولًا","trip.toast.assignedToDay":"تم إسناد المكان إلى اليوم","trip.toast.reorderError":"فشل إعادة الترتيب","trip.toast.reservationUpdated":"تم تحديث الحجز","trip.toast.reservationAdded":"تمت إضافة الحجز","trip.toast.deleted":"تم الحذف","trip.confirm.deletePlace":"هل تريد حذف هذا المكان؟","dayplan.emptyDay":"لا توجد أماكن مخططة لهذا اليوم","dayplan.addNote":"إضافة ملاحظة","dayplan.editNote":"تعديل الملاحظة","dayplan.noteAdd":"إضافة ملاحظة","dayplan.noteEdit":"تعديل الملاحظة","dayplan.noteTitle":"ملاحظة","dayplan.noteSubtitle":"ملاحظة يومية","dayplan.totalCost":"إجمالي التكلفة","dayplan.days":"الأيام","dayplan.dayN":"اليوم {n}","dayplan.calculating":"جارٍ الحساب...","dayplan.route":"المسار","dayplan.optimize":"تحسين","dayplan.optimized":"تم تحسين المسار","dayplan.routeError":"فشل حساب المسار","dayplan.toast.needTwoPlaces":"يلزم مكانان على الأقل لتحسين المسار","dayplan.toast.routeOptimized":"تم تحسين المسار","dayplan.toast.noGeoPlaces":"لم يتم العثور على أماكن بإحداثيات لحساب المسار","dayplan.confirmed":"مؤكد","dayplan.pendingRes":"قيد الانتظار","dayplan.pdf":"PDF","dayplan.pdfTooltip":"تصدير خطة اليوم بصيغة PDF","dayplan.pdfError":"فشل تصدير PDF","dayplan.cannotReorderTransport":"لا يمكن إعادة ترتيب الحجوزات ذات الوقت الثابت","dayplan.confirmRemoveTimeTitle":"إزالة الوقت؟","dayplan.confirmRemoveTimeBody":"هذا المكان له وقت ثابت ({time}). نقله سيزيل الوقت ويسمح بالترتيب الحر.","dayplan.confirmRemoveTimeAction":"إزالة الوقت ونقل","dayplan.cannotDropOnTimed":"لا يمكن وضع العناصر بين الإدخالات المرتبطة بوقت","dayplan.cannotBreakChronology":"سيؤدي هذا إلى كسر الترتيب الزمني للعناصر والحجوزات المجدولة","places.addPlace":"إضافة مكان/نشاط","places.importGpx":"GPX","places.gpxImported":"تم استيراد {count} مكان من GPX","places.gpxError":"فشل استيراد GPX","places.importGoogleList":"قائمة Google","places.googleListHint":"الصق رابط قائمة Google Maps المشتركة لاستيراد جميع الأماكن.","places.googleListImported":'تم استيراد {count} أماكن من "{list}"',"places.googleListError":"فشل استيراد قائمة Google Maps","places.viewDetails":"عرض التفاصيل","places.urlResolved":"تم استيراد المكان من الرابط","places.assignToDay":"إلى أي يوم تريد الإضافة؟","places.all":"الكل","places.unplanned":"غير مخطط","places.search":"ابحث عن أماكن...","places.allCategories":"كل الفئات","places.categoriesSelected":"فئات","places.clearFilter":"مسح الفلتر","places.count":"{count} أماكن","places.countSingular":"مكان واحد","places.allPlanned":"تم تخطيط جميع الأماكن","places.noneFound":"لم يتم العثور على أماكن","places.editPlace":"تعديل المكان","places.formName":"الاسم","places.formNamePlaceholder":"مثال: برج إيفل","places.formDescription":"الوصف","places.formDescriptionPlaceholder":"وصف مختصر...","places.formAddress":"العنوان","places.formAddressPlaceholder":"الشارع، المدينة، البلد","places.formLat":"خط العرض (مثال: 48.8566)","places.formLng":"خط الطول (مثال: 2.3522)","places.formCategory":"الفئة","places.noCategory":"بلا فئة","places.categoryNamePlaceholder":"اسم الفئة","places.formTime":"الوقت","places.startTime":"البداية","places.endTime":"النهاية","places.endTimeBeforeStart":"وقت النهاية قبل وقت البداية","places.timeCollision":"تداخل في الوقت مع:","places.formWebsite":"الموقع الإلكتروني","places.formNotesPlaceholder":"ملاحظات شخصية...","places.formReservation":"حجز","places.reservationNotesPlaceholder":"ملاحظات الحجز، رقم التأكيد...","places.mapsSearchPlaceholder":"ابحث عن أماكن...","places.mapsSearchError":"فشل البحث عن المكان.","places.osmHint":"يتم البحث عبر OpenStreetMap (بدون صور أو ساعات عمل أو تقييمات). أضف مفتاح Google API في الإعدادات للحصول على جميع التفاصيل.","places.osmActive":"البحث عبر OpenStreetMap (بدون صور أو تقييمات أو ساعات عمل). أضف مفتاح Google API في الإعدادات لبيانات موسعة.","places.categoryCreateError":"فشل إنشاء الفئة","places.nameRequired":"يرجى إدخال اسم","places.saveError":"فشل الحفظ","inspector.opened":"مفتوح","inspector.closed":"مغلق","inspector.openingHours":"ساعات العمل","inspector.showHours":"عرض ساعات العمل","inspector.files":"الملفات","inspector.filesCount":"{count} ملفات","inspector.removeFromDay":"إزالة من اليوم","inspector.addToDay":"إضافة إلى اليوم","inspector.confirmedRes":"حجز مؤكد","inspector.pendingRes":"حجز قيد الانتظار","inspector.google":"فتح في Google Maps","inspector.website":"فتح الموقع الإلكتروني","inspector.addRes":"حجز","inspector.editRes":"تعديل الحجز","inspector.participants":"المشاركون","inspector.trackStats":"بيانات المسار","reservations.title":"الحجوزات","reservations.empty":"لا توجد حجوزات بعد","reservations.emptyHint":"أضف حجوزات للرحلات الجوية والفنادق وغير ذلك","reservations.add":"إضافة حجز","reservations.addManual":"حجز يدوي","reservations.placeHint":"نصيحة: يُفضل إنشاء الحجوزات مباشرة من مكان لربطها بخطة اليوم.","reservations.confirmed":"مؤكد","reservations.pending":"قيد الانتظار","reservations.summary":"{confirmed} مؤكدة، {pending} قيد الانتظار","reservations.fromPlan":"من الخطة","reservations.showFiles":"عرض الملفات","reservations.editTitle":"تعديل الحجز","reservations.status":"الحالة","reservations.datetime":"التاريخ والوقت","reservations.startTime":"وقت البداية","reservations.endTime":"وقت النهاية","reservations.date":"التاريخ","reservations.time":"الوقت","reservations.timeAlt":"الوقت (بديل، مثل 19:30)","reservations.notes":"ملاحظات","reservations.notesPlaceholder":"ملاحظات إضافية...","reservations.meta.airline":"شركة الطيران","reservations.meta.flightNumber":"رقم الرحلة","reservations.meta.from":"من","reservations.meta.to":"إلى","reservations.meta.trainNumber":"رقم القطار","reservations.meta.platform":"المنصة","reservations.meta.seat":"المقعد","reservations.meta.checkIn":"تسجيل الوصول","reservations.meta.checkOut":"تسجيل المغادرة","reservations.meta.linkAccommodation":"الإقامة","reservations.meta.pickAccommodation":"ربط بالإقامة","reservations.meta.noAccommodation":"لا يوجد","reservations.meta.hotelPlace":"الإقامة","reservations.meta.pickHotel":"اختر الإقامة","reservations.meta.fromDay":"من","reservations.meta.toDay":"إلى","reservations.meta.selectDay":"اختر يومًا","reservations.type.flight":"رحلة جوية","reservations.type.hotel":"إقامة","reservations.type.restaurant":"مطعم","reservations.type.train":"قطار","reservations.type.car":"سيارة مستأجرة","reservations.type.cruise":"رحلة بحرية","reservations.type.event":"فعالية","reservations.type.tour":"جولة","reservations.type.other":"أخرى","reservations.confirm.delete":'هل تريد حذف الحجز "{name}"؟',"reservations.confirm.deleteTitle":"حذف الحجز؟","reservations.confirm.deleteBody":'سيتم حذف "{name}" نهائيًا.',"reservations.toast.updated":"تم تحديث الحجز","reservations.toast.removed":"تم حذف الحجز","reservations.toast.fileUploaded":"تم رفع الملف","reservations.toast.uploadError":"فشل الرفع","reservations.newTitle":"حجز جديد","reservations.bookingType":"نوع الحجز","reservations.titleLabel":"العنوان","reservations.titlePlaceholder":"مثال: Lufthansa LH123، فندق أدلون، ...","reservations.locationAddress":"الموقع / العنوان","reservations.locationPlaceholder":"العنوان، المطار، الفندق...","reservations.confirmationCode":"رمز الحجز","reservations.confirmationPlaceholder":"مثال: ABC12345","reservations.day":"اليوم","reservations.noDay":"بلا يوم","reservations.place":"المكان","reservations.noPlace":"بلا مكان","reservations.pendingSave":"سيتم الحفظ…","reservations.uploading":"جارٍ الرفع...","reservations.attachFile":"إرفاق ملف","reservations.linkExisting":"ربط ملف موجود","reservations.toast.saveError":"فشل الحفظ","reservations.toast.updateError":"فشل التحديث","reservations.toast.deleteError":"فشل الحذف","reservations.confirm.remove":'إزالة الحجز "{name}"؟',"reservations.linkAssignment":"ربط بخطة اليوم","reservations.pickAssignment":"اختر عنصرًا من خطتك...","reservations.noAssignment":"بلا ربط","budget.title":"الميزانية","budget.exportCsv":"تصدير CSV","budget.emptyTitle":"لم يتم إنشاء ميزانية بعد","budget.emptyText":"أنشئ فئات وإدخالات لتخطيط ميزانية سفرك","budget.emptyPlaceholder":"أدخل اسم الفئة...","budget.createCategory":"إنشاء فئة","budget.category":"الفئة","budget.categoryName":"اسم الفئة","budget.table.name":"الاسم","budget.table.total":"الإجمالي","budget.table.persons":"الأشخاص","budget.table.days":"الأيام","budget.table.perPerson":"لكل شخص","budget.table.perDay":"لكل يوم","budget.table.perPersonDay":"لكل شخص / يوم","budget.table.note":"ملاحظة","budget.table.date":"التاريخ","budget.newEntry":"إدخال جديد","budget.defaultEntry":"إدخال جديد","budget.defaultCategory":"فئة جديدة","budget.total":"الإجمالي","budget.totalBudget":"إجمالي الميزانية","budget.byCategory":"حسب الفئة","budget.editTooltip":"انقر للتعديل","budget.confirm.deleteCategory":'هل تريد حذف الفئة "{name}" مع {count} إدخالات؟',"budget.deleteCategory":"حذف الفئة","budget.perPerson":"لكل شخص","budget.paid":"مدفوع","budget.open":"مفتوح","budget.noMembers":"لا أعضاء معينون","budget.settlement":"التسوية","budget.settlementInfo":"انقر على صورة العضو في بند الميزانية لتحديده باللون الأخضر — وهذا يعني أنه دفع. ثم تُظهر التسوية من يدين لمن وبكم.","budget.netBalances":"الأرصدة الصافية","files.title":"الملفات","files.count":"{count} ملفات","files.countSingular":"ملف واحد","files.uploaded":"تم رفع {count}","files.uploadError":"فشل الرفع","files.dropzone":"أسقط الملفات هنا","files.dropzoneHint":"أو انقر للتصفح","files.allowedTypes":"صور، PDF، DOC، DOCX، XLS، XLSX، TXT، CSV · حد أقصى 50 ميغابايت","files.uploading":"جارٍ الرفع...","files.filterAll":"الكل","files.filterPdf":"ملفات PDF","files.filterImages":"الصور","files.filterDocs":"المستندات","files.filterCollab":"ملاحظات Collab","files.sourceCollab":"من ملاحظات Collab","files.empty":"لا توجد ملفات بعد","files.emptyHint":"ارفع ملفات لإرفاقها برحلتك","files.openTab":"فتح في تبويب جديد","files.confirm.delete":"هل تريد حذف هذا الملف؟","files.toast.deleted":"تم حذف الملف","files.toast.deleteError":"فشل حذف الملف","files.sourcePlan":"خطة اليوم","files.sourceBooking":"الحجز","files.attach":"إرفاق","files.pasteHint":"يمكنك أيضًا لصق الصور من الحافظة (Ctrl+V)","files.trash":"سلة المهملات","files.trashEmpty":"سلة المهملات فارغة","files.emptyTrash":"إفراغ السلة","files.restore":"استعادة","files.star":"تمييز","files.unstar":"إلغاء التمييز","files.assign":"إسناد","files.assignTitle":"إسناد ملف","files.assignPlace":"المكان","files.assignBooking":"الحجز","files.unassigned":"غير مسند","files.unlink":"إزالة الرابط","files.toast.trashed":"تم النقل إلى سلة المهملات","files.toast.restored":"تمت استعادة الملف","files.toast.trashEmptied":"تم إفراغ سلة المهملات","files.toast.assigned":"تم إسناد الملف","files.toast.assignError":"فشل الإسناد","files.toast.restoreError":"فشلت الاستعادة","files.confirm.permanentDelete":"حذف هذا الملف نهائيًا؟ لا يمكن التراجع عن ذلك.","files.confirm.emptyTrash":"حذف جميع ملفات سلة المهملات نهائيًا؟ لا يمكن التراجع عن ذلك.","files.noteLabel":"ملاحظة","files.notePlaceholder":"أضف ملاحظة...","packing.title":"قائمة التجهيز","packing.empty":"قائمة التجهيز فارغة","packing.import":"استيراد","packing.importTitle":"استيراد قائمة التعبئة","packing.importHint":"عنصر واحد لكل سطر. يمكن إضافة الفئة والكمية مفصولة بفاصلة أو فاصلة منقوطة أو علامة تبويب: الاسم، الفئة، الكمية","packing.importPlaceholder":`فرشاة أسنان واقي شمس، نظافة قمصان، ملابس، 5 @@ -165,7 +165,7 @@ Alle huidige gegevens worden overschreven.`,"backup.confirm.delete":'Back-up "{n سيتم استبدال جميع البيانات الحالية بالنسخة.`,"backup.confirm.uploadRestore":`رفع واستعادة النسخة "{name}"؟ -سيتم الكتابة فوق جميع البيانات الحالية.`,"backup.confirm.delete":'حذف النسخة "{name}"؟',"backup.toast.loadError":"فشل تحميل النسخ الاحتياطية","backup.toast.created":"تم إنشاء النسخة الاحتياطية بنجاح","backup.toast.createError":"فشل إنشاء النسخة","backup.toast.restored":"تمت الاستعادة. ستُعاد تحميل الصفحة…","backup.toast.restoreError":"فشلت الاستعادة","backup.toast.uploadError":"فشل الرفع","backup.toast.deleted":"تم حذف النسخة","backup.toast.deleteError":"فشل الحذف","backup.toast.downloadError":"فشل التنزيل","backup.toast.settingsSaved":"تم حفظ إعدادات النسخ الاحتياطي التلقائي","backup.toast.settingsError":"فشل حفظ الإعدادات","backup.auto.title":"النسخ الاحتياطي التلقائي","backup.auto.subtitle":"نسخ احتياطي تلقائي وفق جدول زمني","backup.auto.enable":"تفعيل النسخ التلقائي","backup.auto.enableHint":"سيتم إنشاء نسخ احتياطية تلقائيًا وفق الجدول المختار","backup.auto.interval":"الفترة","backup.auto.hour":"التنفيذ في الساعة","backup.auto.hourHint":"التوقيت المحلي للخادم (تنسيق {format})","backup.auto.dayOfWeek":"يوم الأسبوع","backup.auto.dayOfMonth":"يوم الشهر","backup.auto.dayOfMonthHint":"محدود بين 1–28 للتوافق مع جميع الأشهر","backup.auto.scheduleSummary":"الجدول","backup.auto.summaryDaily":"كل يوم الساعة {hour}:00","backup.auto.summaryWeekly":"كل {day} الساعة {hour}:00","backup.auto.summaryMonthly":"اليوم {day} من كل شهر الساعة {hour}:00","backup.auto.envLocked":"Docker","backup.auto.envLockedHint":"النسخ الاحتياطي التلقائي مُعدّ عبر متغيرات بيئة Docker. لتعديل الإعدادات، حدّث docker-compose.yml وأعد تشغيل الحاوية.","backup.auto.copyEnv":"نسخ متغيرات بيئة Docker","backup.auto.envCopied":"تم نسخ متغيرات بيئة Docker إلى الحافظة","backup.auto.keepLabel":"حذف النسخ القديمة بعد","backup.dow.sunday":"أحد","backup.dow.monday":"إثن","backup.dow.tuesday":"ثلا","backup.dow.wednesday":"أرب","backup.dow.thursday":"خمي","backup.dow.friday":"جمع","backup.dow.saturday":"سبت","backup.interval.hourly":"كل ساعة","backup.interval.daily":"يوميًا","backup.interval.weekly":"أسبوعيًا","backup.interval.monthly":"شهريًا","backup.keep.1day":"يوم واحد","backup.keep.3days":"3 أيام","backup.keep.7days":"7 أيام","backup.keep.14days":"14 يومًا","backup.keep.30days":"30 يومًا","backup.keep.forever":"الاحتفاظ للأبد","photos.allDays":"كل الأيام","photos.noPhotos":"لا توجد صور بعد","photos.uploadHint":"ارفع صور رحلتك","photos.clickToSelect":"أو انقر للاختيار","photos.linkPlace":"ربط بمكان","photos.noPlace":"بلا مكان","photos.uploadN":"رفع {n} صورة","backup.restoreConfirmTitle":"استعادة النسخة الاحتياطية؟","backup.restoreWarning":"سيتم استبدال جميع البيانات الحالية (الرحلات، الأماكن، المستخدمون، المرفوعات) بالنسخة نهائيًا. لا يمكن التراجع عن ذلك.","backup.restoreTip":"نصيحة: أنشئ نسخة احتياطية للحالة الحالية قبل الاستعادة.","backup.restoreConfirm":"نعم، استعادة","pdf.travelPlan":"خطة السفر","pdf.planned":"مخطط","pdf.costLabel":"التكلفة EUR","pdf.preview":"معاينة PDF","pdf.saveAsPdf":"حفظ كـ PDF","planner.places":"الأماكن","planner.bookings":"الحجوزات","planner.packingList":"قائمة التجهيز","planner.documents":"المستندات","planner.dayPlan":"خطة اليوم","planner.reservations":"الحجوزات","planner.minTwoPlaces":"يلزم مكانان على الأقل مع إحداثيات","planner.noGeoPlaces":"لا توجد أماكن بإحداثيات","planner.routeCalculated":"تم حساب المسار","planner.routeCalcFailed":"تعذر حساب المسار","planner.routeError":"خطأ أثناء حساب المسار","planner.routeOptimized":"تم تحسين المسار","planner.reservationUpdated":"تم تحديث الحجز","planner.reservationAdded":"تمت إضافة الحجز","planner.confirmDeleteReservation":"حذف الحجز؟","planner.reservationDeleted":"تم حذف الحجز","planner.days":"الأيام","planner.allPlaces":"كل الأماكن","planner.totalPlaces":"إجمالي {n} أماكن","planner.noDaysPlanned":"لا توجد أيام مخططة بعد","planner.editTrip":"تعديل الرحلة ←","planner.placeOne":"مكان واحد","planner.placeN":"{n} أماكن","planner.addNote":"إضافة ملاحظة","planner.noEntries":"لا توجد عناصر لهذا اليوم","planner.addPlace":"إضافة مكان/نشاط","planner.addPlaceShort":"+ إضافة مكان/نشاط","planner.resPending":"حجز قيد الانتظار · ","planner.resConfirmed":"حجز مؤكد · ","planner.notePlaceholder":"ملاحظة…","planner.noteTimePlaceholder":"الوقت (اختياري)","planner.noteExamplePlaceholder":"مثال: S3 الساعة 14:30 من المحطة المركزية، عبّارة من الرصيف 7، استراحة غداء…","planner.totalCost":"إجمالي التكلفة","planner.searchPlaces":"ابحث عن أماكن…","planner.allCategories":"كل الفئات","planner.noPlacesFound":"لم يتم العثور على أماكن","planner.addFirstPlace":"أضف أول مكان","planner.noReservations":"لا توجد حجوزات","planner.addFirstReservation":"أضف أول حجز","planner.new":"جديد","planner.addToDay":"+ يوم","planner.calculating":"جارٍ الحساب…","planner.route":"المسار","planner.optimize":"تحسين","planner.openGoogleMaps":"فتح في Google Maps","planner.selectDayHint":"اختر يومًا من القائمة اليسرى لعرض خطة اليوم","planner.noPlacesForDay":"لا توجد أماكن لهذا اليوم بعد","planner.addPlacesLink":"إضافة أماكن ←","planner.minTotal":"دقيقة إجمالًا","planner.noReservation":"لا يوجد حجز","planner.removeFromDay":"إزالة من اليوم","planner.addToThisDay":"إضافة إلى اليوم","planner.overview":"نظرة عامة","planner.noDays":"لا توجد أيام بعد","planner.editTripToAddDays":"عدّل الرحلة لإضافة أيام","planner.dayCount":"{n} أيام","planner.clickToUnlock":"انقر لفتح القفل","planner.keepPosition":"الحفاظ على الموضع أثناء تحسين المسار","planner.dayDetails":"تفاصيل اليوم","planner.dayN":"اليوم {n}","stats.countries":"الدول","stats.cities":"المدن","stats.trips":"الرحلات","stats.places":"الأماكن","stats.worldProgress":"التقدم حول العالم","stats.visited":"تمت زيارتها","stats.remaining":"المتبقية","stats.visitedCountries":"الدول التي تمت زيارتها","day.precipProb":"احتمال هطول الأمطار","day.precipitation":"الهطول","day.wind":"الرياح","day.sunrise":"شروق الشمس","day.sunset":"غروب الشمس","day.hourlyForecast":"التوقعات بالساعة","day.climateHint":"متوسطات تاريخية — التوقعات الفعلية متاحة خلال 16 يومًا من هذا التاريخ.","day.noWeather":"لا تتوفر بيانات طقس. أضف مكانًا بإحداثيات.","day.overview":"ملخص اليوم","day.accommodation":"الإقامة","day.addAccommodation":"إضافة إقامة","day.hotelDayRange":"تطبيق على الأيام","day.noPlacesForHotel":"أضف أماكن إلى رحلتك أولًا","day.allDays":"الكل","day.checkIn":"تسجيل الوصول","day.checkOut":"تسجيل المغادرة","day.confirmation":"التأكيد","day.editAccommodation":"تعديل الإقامة","day.reservations":"الحجوزات","memories.title":"صور","memories.notConnected":"Immich غير متصل","memories.notConnectedHint":"قم بتوصيل Immich في الإعدادات لعرض صور رحلتك هنا.","memories.noDates":"أضف تواريخ لرحلتك لتحميل الصور.","memories.noPhotos":"لم يتم العثور على صور","memories.noPhotosHint":"لم يتم العثور على صور في Immich لفترة هذه الرحلة.","memories.photosFound":"صور","memories.fromOthers":"من آخرين","memories.sharePhotos":"مشاركة الصور","memories.sharing":"مشترك","memories.reviewTitle":"مراجعة صورك","memories.reviewHint":"انقر على الصور لاستبعادها من المشاركة.","memories.shareCount":"مشاركة {count} صور","memories.immichUrl":"عنوان خادم Immich","memories.immichApiKey":"مفتاح API","memories.testConnection":"اختبار الاتصال","memories.testFirst":"اختبر الاتصال أولاً","memories.connected":"متصل","memories.disconnected":"غير متصل","memories.connectionSuccess":"تم الاتصال بـ Immich","memories.connectionError":"تعذر الاتصال بـ Immich","memories.saved":"تم حفظ إعدادات Immich","memories.oldest":"الأقدم أولاً","memories.newest":"الأحدث أولاً","memories.allLocations":"جميع المواقع","memories.addPhotos":"إضافة صور","memories.linkAlbum":"ربط ألبوم","memories.selectAlbum":"اختيار ألبوم Immich","memories.noAlbums":"لم يتم العثور على ألبومات","memories.syncAlbum":"مزامنة الألبوم","memories.unlinkAlbum":"إلغاء الربط","memories.photos":"صور","memories.selectPhotos":"اختيار صور من Immich","memories.selectHint":"انقر على الصور لتحديدها.","memories.selected":"محدد","memories.addSelected":"إضافة {count} صور","memories.alreadyAdded":"تمت الإضافة","memories.private":"خاص","memories.stopSharing":"إيقاف المشاركة","memories.tripDates":"تواريخ الرحلة","memories.allPhotos":"جميع الصور","memories.confirmShareTitle":"مشاركة مع أعضاء الرحلة؟","memories.confirmShareHint":"{count} صور ستكون مرئية لجميع أعضاء هذه الرحلة. يمكنك جعل الصور الفردية خاصة لاحقًا.","memories.confirmShareButton":"مشاركة الصور","collab.tabs.chat":"الدردشة","collab.tabs.notes":"الملاحظات","collab.tabs.polls":"الاستطلاعات","collab.whatsNext.title":"ما التالي","collab.whatsNext.today":"اليوم","collab.whatsNext.tomorrow":"غدًا","collab.whatsNext.empty":"لا توجد أنشطة قادمة","collab.whatsNext.until":"إلى","collab.whatsNext.emptyHint":"ستظهر الأنشطة التي لها وقت هنا","collab.chat.send":"إرسال","collab.chat.placeholder":"اكتب رسالة...","collab.chat.empty":"ابدأ المحادثة","collab.chat.emptyHint":"تتم مشاركة الرسائل مع جميع أعضاء الرحلة","collab.chat.emptyDesc":"شارك الأفكار والخطط والتحديثات مع مجموعة السفر","collab.chat.today":"اليوم","collab.chat.yesterday":"أمس","collab.chat.deletedMessage":"حذف رسالة","collab.chat.reply":"رد","collab.chat.loadMore":"تحميل الرسائل الأقدم","collab.chat.justNow":"الآن","collab.chat.minutesAgo":"منذ {n} د","collab.chat.hoursAgo":"منذ {n} س","collab.notes.title":"الملاحظات","collab.notes.new":"ملاحظة جديدة","collab.notes.empty":"لا توجد ملاحظات بعد","collab.notes.emptyHint":"ابدأ بتسجيل الأفكار والخطط","collab.notes.all":"الكل","collab.notes.titlePlaceholder":"عنوان الملاحظة","collab.notes.contentPlaceholder":"اكتب شيئًا...","collab.notes.categoryPlaceholder":"الفئة","collab.notes.newCategory":"فئة جديدة...","collab.notes.category":"الفئة","collab.notes.noCategory":"بلا فئة","collab.notes.color":"اللون","collab.notes.save":"حفظ","collab.notes.cancel":"إلغاء","collab.notes.edit":"تعديل","collab.notes.delete":"حذف","collab.notes.pin":"تثبيت","collab.notes.unpin":"إلغاء التثبيت","collab.notes.daysAgo":"منذ {n} يوم","collab.notes.categorySettings":"إدارة الفئات","collab.notes.create":"إنشاء","collab.notes.website":"الموقع الإلكتروني","collab.notes.websitePlaceholder":"https://...","collab.notes.attachFiles":"إرفاق ملفات","collab.notes.noCategoriesYet":"لا توجد فئات بعد","collab.notes.emptyDesc":"أنشئ ملاحظة للبدء","collab.polls.title":"الاستطلاعات","collab.polls.new":"استطلاع جديد","collab.polls.empty":"لا توجد استطلاعات بعد","collab.polls.emptyHint":"اسأل المجموعة وصوّتوا معًا","collab.polls.question":"السؤال","collab.polls.questionPlaceholder":"ماذا ينبغي أن نفعل؟","collab.polls.addOption":"+ إضافة خيار","collab.polls.optionPlaceholder":"الخيار {n}","collab.polls.create":"إنشاء استطلاع","collab.polls.close":"إغلاق","collab.polls.closed":"مغلق","collab.polls.votes":"{n} أصوات","collab.polls.vote":"{n} صوت","collab.polls.multipleChoice":"اختيار متعدد","collab.polls.multiChoice":"اختيار متعدد","collab.polls.deadline":"الموعد النهائي","collab.polls.option":"خيار","collab.polls.options":"الخيارات","collab.polls.delete":"حذف","collab.polls.closedSection":"مغلق","admin.tabs.permissions":"الصلاحيات","perm.title":"إعدادات الصلاحيات","perm.subtitle":"التحكم في من يمكنه تنفيذ الإجراءات عبر التطبيق","perm.saved":"تم حفظ إعدادات الصلاحيات","perm.resetDefaults":"إعادة التعيين إلى الافتراضي","perm.customized":"مخصص","perm.level.admin":"المسؤول فقط","perm.level.tripOwner":"مالك الرحلة","perm.level.tripMember":"أعضاء الرحلة","perm.level.everybody":"الجميع","perm.cat.trip":"إدارة الرحلات","perm.cat.members":"إدارة الأعضاء","perm.cat.files":"الملفات","perm.cat.content":"المحتوى والجدول الزمني","perm.cat.extras":"الميزانية والتعبئة والتعاون","perm.action.trip_create":"إنشاء رحلات","perm.action.trip_edit":"تعديل تفاصيل الرحلة","perm.action.trip_delete":"حذف الرحلات","perm.action.trip_archive":"أرشفة / إلغاء أرشفة الرحلات","perm.action.trip_cover_upload":"رفع صورة الغلاف","perm.action.member_manage":"إضافة / إزالة الأعضاء","perm.action.file_upload":"رفع الملفات","perm.action.file_edit":"تعديل بيانات الملف","perm.action.file_delete":"حذف الملفات","perm.action.place_edit":"إضافة / تعديل / حذف الأماكن","perm.action.day_edit":"تعديل الأيام والملاحظات والتعيينات","perm.action.reservation_edit":"إدارة الحجوزات","perm.action.budget_edit":"إدارة الميزانية","perm.action.packing_edit":"إدارة قوائم التعبئة","perm.action.collab_edit":"التعاون (ملاحظات، استطلاعات، دردشة)","perm.action.share_manage":"إدارة روابط المشاركة","perm.actionHint.trip_create":"من يمكنه إنشاء رحلات جديدة","perm.actionHint.trip_edit":"من يمكنه تغيير اسم الرحلة والتواريخ والوصف والعملة","perm.actionHint.trip_delete":"من يمكنه حذف رحلة نهائياً","perm.actionHint.trip_archive":"من يمكنه أرشفة أو إلغاء أرشفة رحلة","perm.actionHint.trip_cover_upload":"من يمكنه رفع أو تغيير صورة الغلاف","perm.actionHint.member_manage":"من يمكنه دعوة أو إزالة أعضاء الرحلة","perm.actionHint.file_upload":"من يمكنه رفع ملفات إلى رحلة","perm.actionHint.file_edit":"من يمكنه تعديل أوصاف الملفات والروابط","perm.actionHint.file_delete":"من يمكنه نقل الملفات إلى سلة المهملات أو حذفها نهائياً","perm.actionHint.place_edit":"من يمكنه إضافة أو تعديل أو حذف الأماكن","perm.actionHint.day_edit":"من يمكنه تعديل الأيام وملاحظات الأيام وتعيينات الأماكن","perm.actionHint.reservation_edit":"من يمكنه إنشاء أو تعديل أو حذف الحجوزات","perm.actionHint.budget_edit":"من يمكنه إنشاء أو تعديل أو حذف عناصر الميزانية","perm.actionHint.packing_edit":"من يمكنه إدارة عناصر التعبئة والحقائب","perm.actionHint.collab_edit":"من يمكنه إنشاء ملاحظات واستطلاعات وإرسال رسائل","perm.actionHint.share_manage":"من يمكنه إنشاء أو حذف روابط المشاركة العامة"},jM={"common.save":"Salvar","common.cancel":"Cancelar","common.delete":"Excluir","common.edit":"Editar","common.add":"Adicionar","common.loading":"Carregando...","common.import":"Importar","common.error":"Erro","common.back":"Voltar","common.all":"Todos","common.close":"Fechar","common.open":"Abrir","common.upload":"Enviar","common.search":"Buscar","common.confirm":"Confirmar","common.ok":"OK","common.yes":"Sim","common.no":"Não","common.or":"ou","common.none":"Nenhum","common.date":"Data","common.rename":"Renomear","common.name":"Nome","common.email":"E-mail","common.password":"Senha","common.saving":"Salvando...","common.saved":"Salvo","trips.reminder":"Lembrete","trips.reminderNone":"Nenhum","trips.reminderDay":"dia","trips.reminderDays":"dias","trips.reminderCustom":"Personalizado","trips.reminderDaysBefore":"dias antes da partida","trips.reminderDisabledHint":"Os lembretes de viagem estão desativados. Ative-os em Admin > Configurações > Notificações.","common.update":"Atualizar","common.change":"Alterar","common.uploading":"Enviando…","common.backToPlanning":"Voltar ao planejamento","common.reset":"Redefinir","nav.trip":"Viagem","nav.share":"Compartilhar","nav.settings":"Configurações","nav.admin":"Admin","nav.logout":"Sair","nav.lightMode":"Modo claro","nav.darkMode":"Modo escuro","nav.autoMode":"Automático","nav.administrator":"Administrador","dashboard.title":"Minhas viagens","dashboard.subtitle.loading":"Carregando viagens...","dashboard.subtitle.trips":"{count} viagens ({archived} arquivadas)","dashboard.subtitle.empty":"Comece sua primeira viagem","dashboard.subtitle.activeOne":"{count} viagem ativa","dashboard.subtitle.activeMany":"{count} viagens ativas","dashboard.subtitle.archivedSuffix":" · {count} arquivadas","dashboard.newTrip":"Nova viagem","dashboard.gridView":"Grade","dashboard.listView":"Lista","dashboard.currency":"Moeda","dashboard.timezone":"Fusos horários","dashboard.localTime":"Local","dashboard.timezoneCustomTitle":"Fuso personalizado","dashboard.timezoneCustomLabelPlaceholder":"Rótulo (opcional)","dashboard.timezoneCustomTzPlaceholder":"ex.: America/Sao_Paulo","dashboard.timezoneCustomAdd":"Adicionar","dashboard.timezoneCustomErrorEmpty":"Informe um identificador de fuso","dashboard.timezoneCustomErrorInvalid":"Fuso inválido. Use o formato Europe/Berlin","dashboard.timezoneCustomErrorDuplicate":"Já adicionado","dashboard.emptyTitle":"Nenhuma viagem ainda","dashboard.emptyText":"Crie sua primeira viagem e comece a planejar!","dashboard.emptyButton":"Criar primeira viagem","dashboard.nextTrip":"Próxima viagem","dashboard.shared":"Compartilhada","dashboard.sharedBy":"Compartilhada por {name}","dashboard.days":"Dias","dashboard.places":"Lugares","dashboard.archive":"Arquivar","dashboard.restore":"Restaurar","dashboard.archived":"Arquivada","dashboard.status.ongoing":"Em andamento","dashboard.status.today":"Hoje","dashboard.status.tomorrow":"Amanhã","dashboard.status.past":"Passada","dashboard.status.daysLeft":"Faltam {count} dias","dashboard.toast.loadError":"Não foi possível carregar as viagens","dashboard.toast.created":"Viagem criada com sucesso!","dashboard.toast.createError":"Não foi possível criar a viagem","dashboard.toast.updated":"Viagem atualizada!","dashboard.toast.updateError":"Não foi possível atualizar a viagem","dashboard.toast.deleted":"Viagem excluída","dashboard.toast.deleteError":"Não foi possível excluir a viagem","dashboard.toast.archived":"Viagem arquivada","dashboard.toast.archiveError":"Não foi possível arquivar","dashboard.toast.restored":"Viagem restaurada","dashboard.toast.restoreError":"Não foi possível restaurar","dashboard.confirm.delete":'Excluir a viagem "{title}"? Todos os lugares e planos serão excluídos permanentemente.',"dashboard.editTrip":"Editar viagem","dashboard.createTrip":"Criar nova viagem","dashboard.tripTitle":"Título","dashboard.tripTitlePlaceholder":"ex.: Verão no Japão","dashboard.tripDescription":"Descrição","dashboard.tripDescriptionPlaceholder":"Sobre o que é esta viagem?","dashboard.startDate":"Data de início","dashboard.endDate":"Data de término","dashboard.noDateHint":"Sem datas — serão criados 7 dias padrão. Você pode alterar depois.","dashboard.coverImage":"Imagem de capa","dashboard.addCoverImage":"Adicionar capa (ou arrastar e soltar)","dashboard.addMembers":"Companheiros de viagem","dashboard.addMember":"Adicionar membro","dashboard.coverSaved":"Capa salva","dashboard.coverUploadError":"Falha no envio","dashboard.coverRemoveError":"Falha ao remover","dashboard.titleRequired":"O título é obrigatório","dashboard.endDateError":"A data final deve ser depois da inicial","settings.title":"Configurações","settings.subtitle":"Ajuste suas preferências pessoais","settings.map":"Mapa","settings.mapTemplate":"Modelo de mapa","settings.mapTemplatePlaceholder.select":"Selecione o modelo...","settings.mapDefaultHint":"Deixe vazio para OpenStreetMap (padrão)","settings.mapTemplatePlaceholder":"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png","settings.mapHint":"URL do modelo de blocos do mapa","settings.latitude":"Latitude","settings.longitude":"Longitude","settings.saveMap":"Salvar mapa","settings.apiKeys":"Chaves de API","settings.mapsKey":"Chave da API Google Maps","settings.mapsKeyHint":"Para busca de lugares. Requer Places API (New). Obtenha em console.cloud.google.com","settings.weatherKey":"Chave OpenWeatherMap","settings.weatherKeyHint":"Para dados meteorológicos. Grátis em openweathermap.org/api","settings.keyPlaceholder":"Digite a chave...","settings.configured":"Configurada","settings.saveKeys":"Salvar chaves","settings.display":"Exibição","settings.colorMode":"Tema de cores","settings.light":"Claro","settings.dark":"Escuro","settings.auto":"Automático","settings.language":"Idioma","settings.temperature":"Unidade de temperatura","settings.timeFormat":"Formato de hora","settings.routeCalculation":"Cálculo de rota","settings.blurBookingCodes":"Ocultar códigos de reserva","settings.notifications":"Notificações","settings.notifyTripInvite":"Convites de viagem","settings.notifyBookingChange":"Alterações de reserva","settings.notifyTripReminder":"Lembretes de viagem","settings.notifyVacayInvite":"Convites de fusão Vacay","settings.notifyPhotosShared":"Fotos compartilhadas (Immich)","settings.notifyCollabMessage":"Mensagens de chat (Colab)","settings.notifyPackingTagged":"Lista de mala: atribuições","settings.notifyWebhook":"Notificações webhook","settings.notificationsDisabled":"As notificações não estão configuradas. Peça a um administrador para ativar notificações por e-mail ou webhook.","settings.notificationsActive":"Canal ativo","settings.notificationsManagedByAdmin":"Os eventos de notificação são configurados pelo administrador.","admin.notifications.title":"Notificações","admin.notifications.hint":"Escolha um canal de notificação. Apenas um pode estar ativo por vez.","admin.notifications.none":"Desativado","admin.notifications.email":"E-mail (SMTP)","admin.notifications.webhook":"Webhook","admin.notifications.events":"Eventos de notificação","admin.notifications.eventsHint":"Escolha quais eventos acionam notificações para todos os usuários.","admin.notifications.configureFirst":"Configure primeiro as configurações SMTP ou webhook abaixo, depois ative os eventos.","admin.notifications.save":"Salvar configurações de notificação","admin.notifications.saved":"Configurações de notificação salvas","admin.notifications.testWebhook":"Enviar webhook de teste","admin.notifications.testWebhookSuccess":"Webhook de teste enviado com sucesso","admin.notifications.testWebhookFailed":"Falha ao enviar webhook de teste","admin.smtp.title":"E-mail e notificações","admin.smtp.hint":"Configuração SMTP para envio de notificações por e-mail.","admin.smtp.testButton":"Enviar e-mail de teste","admin.webhook.hint":"Enviar notificações para um webhook externo (Discord, Slack, etc.).","admin.smtp.testSuccess":"E-mail de teste enviado com sucesso","admin.smtp.testFailed":"Falha ao enviar e-mail de teste","dayplan.icsTooltip":"Exportar calendário (ICS)","share.linkTitle":"Link público","share.linkHint":"Crie um link que qualquer pessoa pode usar para ver esta viagem sem fazer login. Somente leitura — sem edição possível.","share.createLink":"Criar link","share.deleteLink":"Excluir link","share.createError":"Não foi possível criar o link","common.copy":"Copiar","common.copied":"Copiado","share.permMap":"Mapa e plano","share.permBookings":"Reservas","share.permPacking":"Mala","shared.expired":"Link expirado ou inválido","shared.expiredHint":"Este link de viagem compartilhado não está mais ativo.","shared.readOnly":"Visualização somente leitura","shared.tabPlan":"Plano","shared.tabBookings":"Reservas","shared.tabPacking":"Bagagem","shared.tabBudget":"Orçamento","shared.tabChat":"Chat","shared.days":"dias","shared.places":"lugares","shared.other":"Outros","shared.totalBudget":"Orçamento total","shared.messages":"mensagens","shared.sharedVia":"Compartilhado via","shared.confirmed":"Confirmado","shared.pending":"Pendente","share.permBudget":"Orçamento","share.permCollab":"Chat","settings.on":"Ligado","settings.off":"Desligado","settings.account":"Conta","settings.username":"Nome de usuário","settings.email":"E-mail","settings.role":"Função","settings.roleAdmin":"Administrador","settings.oidcLinked":"Vinculado a","settings.changePassword":"Alterar senha","settings.currentPassword":"Senha atual","settings.currentPasswordRequired":"A senha atual é obrigatória","settings.newPassword":"Nova senha","settings.confirmPassword":"Confirmar nova senha","settings.updatePassword":"Atualizar senha","settings.passwordRequired":"Informe a senha atual e a nova","settings.passwordTooShort":"A senha deve ter pelo menos 8 caracteres","settings.passwordMismatch":"As senhas não coincidem","settings.passwordWeak":"A senha deve ter maiúscula, minúscula, número e um caractere especial","settings.passwordChanged":"Senha alterada com sucesso","settings.deleteAccount":"Excluir conta","settings.deleteAccountTitle":"Excluir sua conta?","settings.deleteAccountWarning":"Sua conta e todas as viagens, lugares e arquivos serão excluídos permanentemente. Esta ação não pode ser desfeita.","settings.deleteAccountConfirm":"Excluir permanentemente","settings.deleteBlockedTitle":"Exclusão não permitida","settings.deleteBlockedMessage":"Você é o único administrador. Promova outro usuário a administrador antes de excluir sua conta.","settings.roleUser":"Usuário","settings.saveProfile":"Salvar perfil","settings.toast.mapSaved":"Configurações do mapa salvas","settings.toast.keysSaved":"Chaves de API salvas","settings.toast.displaySaved":"Configurações de exibição salvas","settings.toast.profileSaved":"Perfil salvo","settings.uploadAvatar":"Enviar foto do perfil","settings.removeAvatar":"Remover foto do perfil","settings.avatarUploaded":"Foto do perfil atualizada","settings.avatarRemoved":"Foto do perfil removida","settings.avatarError":"Falha no envio","settings.mfa.title":"Autenticação em duas etapas (2FA)","settings.mfa.description":"Adiciona uma segunda etapa ao entrar com e-mail e senha. Use um app autenticador (Google Authenticator, Authy, etc.).","settings.mfa.requiredByPolicy":"O administrador exige autenticação em dois fatores. Configure um app autenticador abaixo antes de continuar.","settings.mfa.backupTitle":"Códigos de backup","settings.mfa.backupDescription":"Use estes códigos únicos se perder acesso ao app autenticador.","settings.mfa.backupWarning":"Salve estes códigos agora. Cada código pode ser usado apenas uma vez.","settings.mfa.backupCopy":"Copiar códigos","settings.mfa.backupDownload":"Baixar TXT","settings.mfa.backupPrint":"Imprimir / PDF","settings.mfa.backupCopied":"Códigos de backup copiados","settings.mfa.enabled":"O 2FA está ativado na sua conta.","settings.mfa.disabled":"O 2FA não está ativado.","settings.mfa.setup":"Configurar autenticador","settings.mfa.scanQr":"Leia este QR code no app ou digite o segredo manualmente.","settings.mfa.secretLabel":"Chave secreta (entrada manual)","settings.mfa.codePlaceholder":"Código de 6 dígitos","settings.mfa.enable":"Ativar 2FA","settings.mfa.cancelSetup":"Cancelar","settings.mfa.disableTitle":"Desativar 2FA","settings.mfa.disableHint":"Digite sua senha e um código atual do autenticador.","settings.mfa.disable":"Desativar 2FA","settings.mfa.toastEnabled":"Autenticação em duas etapas ativada","settings.mfa.toastDisabled":"Autenticação em duas etapas desativada","settings.mfa.demoBlocked":"Indisponível no modo demonstração","settings.mcp.title":"Configuração MCP","settings.mcp.endpoint":"Endpoint MCP","settings.mcp.clientConfig":"Configuração do cliente","settings.mcp.clientConfigHint":"Substitua por um token de API da lista abaixo. O caminho para o npx pode precisar ser ajustado para o seu sistema (ex.: C:\\PROGRA~1\\nodejs\\npx.cmd no Windows).","settings.mcp.copy":"Copiar","settings.mcp.copied":"Copiado!","settings.mcp.apiTokens":"Tokens de API","settings.mcp.createToken":"Criar novo token","settings.mcp.noTokens":"Nenhum token ainda. Crie um para conectar clientes MCP.","settings.mcp.tokenCreatedAt":"Criado em","settings.mcp.tokenUsedAt":"Usado em","settings.mcp.deleteTokenTitle":"Excluir token","settings.mcp.deleteTokenMessage":"Este token deixará de funcionar imediatamente. Qualquer cliente MCP que o utilize perderá o acesso.","settings.mcp.modal.createTitle":"Criar token de API","settings.mcp.modal.tokenName":"Nome do token","settings.mcp.modal.tokenNamePlaceholder":"ex.: Claude Desktop, Notebook do trabalho","settings.mcp.modal.creating":"Criando…","settings.mcp.modal.create":"Criar token","settings.mcp.modal.createdTitle":"Token criado","settings.mcp.modal.createdWarning":"Este token será exibido apenas uma vez. Copie e guarde agora — não poderá ser recuperado.","settings.mcp.modal.done":"Concluído","settings.mcp.toast.created":"Token criado","settings.mcp.toast.createError":"Falha ao criar token","settings.mcp.toast.deleted":"Token excluído","settings.mcp.toast.deleteError":"Falha ao excluir token","settings.mustChangePassword":"Você deve alterar sua senha antes de continuar. Defina uma nova senha abaixo.","login.error":"Falha no login. Verifique suas credenciais.","login.tagline":`Suas viagens. +سيتم الكتابة فوق جميع البيانات الحالية.`,"backup.confirm.delete":'حذف النسخة "{name}"؟',"backup.toast.loadError":"فشل تحميل النسخ الاحتياطية","backup.toast.created":"تم إنشاء النسخة الاحتياطية بنجاح","backup.toast.createError":"فشل إنشاء النسخة","backup.toast.restored":"تمت الاستعادة. ستُعاد تحميل الصفحة…","backup.toast.restoreError":"فشلت الاستعادة","backup.toast.uploadError":"فشل الرفع","backup.toast.deleted":"تم حذف النسخة","backup.toast.deleteError":"فشل الحذف","backup.toast.downloadError":"فشل التنزيل","backup.toast.settingsSaved":"تم حفظ إعدادات النسخ الاحتياطي التلقائي","backup.toast.settingsError":"فشل حفظ الإعدادات","backup.auto.title":"النسخ الاحتياطي التلقائي","backup.auto.subtitle":"نسخ احتياطي تلقائي وفق جدول زمني","backup.auto.enable":"تفعيل النسخ التلقائي","backup.auto.enableHint":"سيتم إنشاء نسخ احتياطية تلقائيًا وفق الجدول المختار","backup.auto.interval":"الفترة","backup.auto.hour":"التنفيذ في الساعة","backup.auto.hourHint":"التوقيت المحلي للخادم (تنسيق {format})","backup.auto.dayOfWeek":"يوم الأسبوع","backup.auto.dayOfMonth":"يوم الشهر","backup.auto.dayOfMonthHint":"محدود بين 1–28 للتوافق مع جميع الأشهر","backup.auto.scheduleSummary":"الجدول","backup.auto.summaryDaily":"كل يوم الساعة {hour}:00","backup.auto.summaryWeekly":"كل {day} الساعة {hour}:00","backup.auto.summaryMonthly":"اليوم {day} من كل شهر الساعة {hour}:00","backup.auto.envLocked":"Docker","backup.auto.envLockedHint":"النسخ الاحتياطي التلقائي مُعدّ عبر متغيرات بيئة Docker. لتعديل الإعدادات، حدّث docker-compose.yml وأعد تشغيل الحاوية.","backup.auto.copyEnv":"نسخ متغيرات بيئة Docker","backup.auto.envCopied":"تم نسخ متغيرات بيئة Docker إلى الحافظة","backup.auto.keepLabel":"حذف النسخ القديمة بعد","backup.dow.sunday":"أحد","backup.dow.monday":"إثن","backup.dow.tuesday":"ثلا","backup.dow.wednesday":"أرب","backup.dow.thursday":"خمي","backup.dow.friday":"جمع","backup.dow.saturday":"سبت","backup.interval.hourly":"كل ساعة","backup.interval.daily":"يوميًا","backup.interval.weekly":"أسبوعيًا","backup.interval.monthly":"شهريًا","backup.keep.1day":"يوم واحد","backup.keep.3days":"3 أيام","backup.keep.7days":"7 أيام","backup.keep.14days":"14 يومًا","backup.keep.30days":"30 يومًا","backup.keep.forever":"الاحتفاظ للأبد","photos.allDays":"كل الأيام","photos.noPhotos":"لا توجد صور بعد","photos.uploadHint":"ارفع صور رحلتك","photos.clickToSelect":"أو انقر للاختيار","photos.linkPlace":"ربط بمكان","photos.noPlace":"بلا مكان","photos.uploadN":"رفع {n} صورة","backup.restoreConfirmTitle":"استعادة النسخة الاحتياطية؟","backup.restoreWarning":"سيتم استبدال جميع البيانات الحالية (الرحلات، الأماكن، المستخدمون، المرفوعات) بالنسخة نهائيًا. لا يمكن التراجع عن ذلك.","backup.restoreTip":"نصيحة: أنشئ نسخة احتياطية للحالة الحالية قبل الاستعادة.","backup.restoreConfirm":"نعم، استعادة","pdf.travelPlan":"خطة السفر","pdf.planned":"مخطط","pdf.costLabel":"التكلفة EUR","pdf.preview":"معاينة PDF","pdf.saveAsPdf":"حفظ كـ PDF","planner.places":"الأماكن","planner.bookings":"الحجوزات","planner.packingList":"قائمة التجهيز","planner.documents":"المستندات","planner.dayPlan":"خطة اليوم","planner.reservations":"الحجوزات","planner.minTwoPlaces":"يلزم مكانان على الأقل مع إحداثيات","planner.noGeoPlaces":"لا توجد أماكن بإحداثيات","planner.routeCalculated":"تم حساب المسار","planner.routeCalcFailed":"تعذر حساب المسار","planner.routeError":"خطأ أثناء حساب المسار","planner.routeOptimized":"تم تحسين المسار","planner.reservationUpdated":"تم تحديث الحجز","planner.reservationAdded":"تمت إضافة الحجز","planner.confirmDeleteReservation":"حذف الحجز؟","planner.reservationDeleted":"تم حذف الحجز","planner.days":"الأيام","planner.allPlaces":"كل الأماكن","planner.totalPlaces":"إجمالي {n} أماكن","planner.noDaysPlanned":"لا توجد أيام مخططة بعد","planner.editTrip":"تعديل الرحلة ←","planner.placeOne":"مكان واحد","planner.placeN":"{n} أماكن","planner.addNote":"إضافة ملاحظة","planner.noEntries":"لا توجد عناصر لهذا اليوم","planner.addPlace":"إضافة مكان/نشاط","planner.addPlaceShort":"+ إضافة مكان/نشاط","planner.resPending":"حجز قيد الانتظار · ","planner.resConfirmed":"حجز مؤكد · ","planner.notePlaceholder":"ملاحظة…","planner.noteTimePlaceholder":"الوقت (اختياري)","planner.noteExamplePlaceholder":"مثال: S3 الساعة 14:30 من المحطة المركزية، عبّارة من الرصيف 7، استراحة غداء…","planner.totalCost":"إجمالي التكلفة","planner.searchPlaces":"ابحث عن أماكن…","planner.allCategories":"كل الفئات","planner.noPlacesFound":"لم يتم العثور على أماكن","planner.addFirstPlace":"أضف أول مكان","planner.noReservations":"لا توجد حجوزات","planner.addFirstReservation":"أضف أول حجز","planner.new":"جديد","planner.addToDay":"+ يوم","planner.calculating":"جارٍ الحساب…","planner.route":"المسار","planner.optimize":"تحسين","planner.openGoogleMaps":"فتح في Google Maps","planner.selectDayHint":"اختر يومًا من القائمة اليسرى لعرض خطة اليوم","planner.noPlacesForDay":"لا توجد أماكن لهذا اليوم بعد","planner.addPlacesLink":"إضافة أماكن ←","planner.minTotal":"دقيقة إجمالًا","planner.noReservation":"لا يوجد حجز","planner.removeFromDay":"إزالة من اليوم","planner.addToThisDay":"إضافة إلى اليوم","planner.overview":"نظرة عامة","planner.noDays":"لا توجد أيام بعد","planner.editTripToAddDays":"عدّل الرحلة لإضافة أيام","planner.dayCount":"{n} أيام","planner.clickToUnlock":"انقر لفتح القفل","planner.keepPosition":"الحفاظ على الموضع أثناء تحسين المسار","planner.dayDetails":"تفاصيل اليوم","planner.dayN":"اليوم {n}","stats.countries":"الدول","stats.cities":"المدن","stats.trips":"الرحلات","stats.places":"الأماكن","stats.worldProgress":"التقدم حول العالم","stats.visited":"تمت زيارتها","stats.remaining":"المتبقية","stats.visitedCountries":"الدول التي تمت زيارتها","day.precipProb":"احتمال هطول الأمطار","day.precipitation":"الهطول","day.wind":"الرياح","day.sunrise":"شروق الشمس","day.sunset":"غروب الشمس","day.hourlyForecast":"التوقعات بالساعة","day.climateHint":"متوسطات تاريخية — التوقعات الفعلية متاحة خلال 16 يومًا من هذا التاريخ.","day.noWeather":"لا تتوفر بيانات طقس. أضف مكانًا بإحداثيات.","day.overview":"ملخص اليوم","day.accommodation":"الإقامة","day.addAccommodation":"إضافة إقامة","day.hotelDayRange":"تطبيق على الأيام","day.noPlacesForHotel":"أضف أماكن إلى رحلتك أولًا","day.allDays":"الكل","day.checkIn":"تسجيل الوصول","day.checkOut":"تسجيل المغادرة","day.confirmation":"التأكيد","day.editAccommodation":"تعديل الإقامة","day.reservations":"الحجوزات","memories.title":"صور","memories.notConnected":"Immich غير متصل","memories.notConnectedHint":"قم بتوصيل Immich في الإعدادات لعرض صور رحلتك هنا.","memories.noDates":"أضف تواريخ لرحلتك لتحميل الصور.","memories.noPhotos":"لم يتم العثور على صور","memories.noPhotosHint":"لم يتم العثور على صور في Immich لفترة هذه الرحلة.","memories.photosFound":"صور","memories.fromOthers":"من آخرين","memories.sharePhotos":"مشاركة الصور","memories.sharing":"مشترك","memories.reviewTitle":"مراجعة صورك","memories.reviewHint":"انقر على الصور لاستبعادها من المشاركة.","memories.shareCount":"مشاركة {count} صور","memories.immichUrl":"عنوان خادم Immich","memories.immichApiKey":"مفتاح API","memories.testConnection":"اختبار الاتصال","memories.testFirst":"اختبر الاتصال أولاً","memories.connected":"متصل","memories.disconnected":"غير متصل","memories.connectionSuccess":"تم الاتصال بـ Immich","memories.connectionError":"تعذر الاتصال بـ Immich","memories.saved":"تم حفظ إعدادات Immich","memories.oldest":"الأقدم أولاً","memories.newest":"الأحدث أولاً","memories.allLocations":"جميع المواقع","memories.addPhotos":"إضافة صور","memories.linkAlbum":"ربط ألبوم","memories.selectAlbum":"اختيار ألبوم Immich","memories.noAlbums":"لم يتم العثور على ألبومات","memories.syncAlbum":"مزامنة الألبوم","memories.unlinkAlbum":"إلغاء الربط","memories.photos":"صور","memories.selectPhotos":"اختيار صور من Immich","memories.selectHint":"انقر على الصور لتحديدها.","memories.selected":"محدد","memories.addSelected":"إضافة {count} صور","memories.alreadyAdded":"تمت الإضافة","memories.private":"خاص","memories.stopSharing":"إيقاف المشاركة","memories.tripDates":"تواريخ الرحلة","memories.allPhotos":"جميع الصور","memories.confirmShareTitle":"مشاركة مع أعضاء الرحلة؟","memories.confirmShareHint":"{count} صور ستكون مرئية لجميع أعضاء هذه الرحلة. يمكنك جعل الصور الفردية خاصة لاحقًا.","memories.confirmShareButton":"مشاركة الصور","collab.tabs.chat":"الدردشة","collab.tabs.notes":"الملاحظات","collab.tabs.polls":"الاستطلاعات","collab.whatsNext.title":"ما التالي","collab.whatsNext.today":"اليوم","collab.whatsNext.tomorrow":"غدًا","collab.whatsNext.empty":"لا توجد أنشطة قادمة","collab.whatsNext.until":"إلى","collab.whatsNext.emptyHint":"ستظهر الأنشطة التي لها وقت هنا","collab.chat.send":"إرسال","collab.chat.placeholder":"اكتب رسالة...","collab.chat.empty":"ابدأ المحادثة","collab.chat.emptyHint":"تتم مشاركة الرسائل مع جميع أعضاء الرحلة","collab.chat.emptyDesc":"شارك الأفكار والخطط والتحديثات مع مجموعة السفر","collab.chat.today":"اليوم","collab.chat.yesterday":"أمس","collab.chat.deletedMessage":"حذف رسالة","collab.chat.reply":"رد","collab.chat.loadMore":"تحميل الرسائل الأقدم","collab.chat.justNow":"الآن","collab.chat.minutesAgo":"منذ {n} د","collab.chat.hoursAgo":"منذ {n} س","collab.notes.title":"الملاحظات","collab.notes.new":"ملاحظة جديدة","collab.notes.empty":"لا توجد ملاحظات بعد","collab.notes.emptyHint":"ابدأ بتسجيل الأفكار والخطط","collab.notes.all":"الكل","collab.notes.titlePlaceholder":"عنوان الملاحظة","collab.notes.contentPlaceholder":"اكتب شيئًا...","collab.notes.categoryPlaceholder":"الفئة","collab.notes.newCategory":"فئة جديدة...","collab.notes.category":"الفئة","collab.notes.noCategory":"بلا فئة","collab.notes.color":"اللون","collab.notes.save":"حفظ","collab.notes.cancel":"إلغاء","collab.notes.edit":"تعديل","collab.notes.delete":"حذف","collab.notes.pin":"تثبيت","collab.notes.unpin":"إلغاء التثبيت","collab.notes.daysAgo":"منذ {n} يوم","collab.notes.categorySettings":"إدارة الفئات","collab.notes.create":"إنشاء","collab.notes.website":"الموقع الإلكتروني","collab.notes.websitePlaceholder":"https://...","collab.notes.attachFiles":"إرفاق ملفات","collab.notes.noCategoriesYet":"لا توجد فئات بعد","collab.notes.emptyDesc":"أنشئ ملاحظة للبدء","collab.polls.title":"الاستطلاعات","collab.polls.new":"استطلاع جديد","collab.polls.empty":"لا توجد استطلاعات بعد","collab.polls.emptyHint":"اسأل المجموعة وصوّتوا معًا","collab.polls.question":"السؤال","collab.polls.questionPlaceholder":"ماذا ينبغي أن نفعل؟","collab.polls.addOption":"+ إضافة خيار","collab.polls.optionPlaceholder":"الخيار {n}","collab.polls.create":"إنشاء استطلاع","collab.polls.close":"إغلاق","collab.polls.closed":"مغلق","collab.polls.votes":"{n} أصوات","collab.polls.vote":"{n} صوت","collab.polls.multipleChoice":"اختيار متعدد","collab.polls.multiChoice":"اختيار متعدد","collab.polls.deadline":"الموعد النهائي","collab.polls.option":"خيار","collab.polls.options":"الخيارات","collab.polls.delete":"حذف","collab.polls.closedSection":"مغلق","admin.tabs.permissions":"الصلاحيات","perm.title":"إعدادات الصلاحيات","perm.subtitle":"التحكم في من يمكنه تنفيذ الإجراءات عبر التطبيق","perm.saved":"تم حفظ إعدادات الصلاحيات","perm.resetDefaults":"إعادة التعيين إلى الافتراضي","perm.customized":"مخصص","perm.level.admin":"المسؤول فقط","perm.level.tripOwner":"مالك الرحلة","perm.level.tripMember":"أعضاء الرحلة","perm.level.everybody":"الجميع","perm.cat.trip":"إدارة الرحلات","perm.cat.members":"إدارة الأعضاء","perm.cat.files":"الملفات","perm.cat.content":"المحتوى والجدول الزمني","perm.cat.extras":"الميزانية والتعبئة والتعاون","perm.action.trip_create":"إنشاء رحلات","perm.action.trip_edit":"تعديل تفاصيل الرحلة","perm.action.trip_delete":"حذف الرحلات","perm.action.trip_archive":"أرشفة / إلغاء أرشفة الرحلات","perm.action.trip_cover_upload":"رفع صورة الغلاف","perm.action.member_manage":"إضافة / إزالة الأعضاء","perm.action.file_upload":"رفع الملفات","perm.action.file_edit":"تعديل بيانات الملف","perm.action.file_delete":"حذف الملفات","perm.action.place_edit":"إضافة / تعديل / حذف الأماكن","perm.action.day_edit":"تعديل الأيام والملاحظات والتعيينات","perm.action.reservation_edit":"إدارة الحجوزات","perm.action.budget_edit":"إدارة الميزانية","perm.action.packing_edit":"إدارة قوائم التعبئة","perm.action.collab_edit":"التعاون (ملاحظات، استطلاعات، دردشة)","perm.action.share_manage":"إدارة روابط المشاركة","perm.actionHint.trip_create":"من يمكنه إنشاء رحلات جديدة","perm.actionHint.trip_edit":"من يمكنه تغيير اسم الرحلة والتواريخ والوصف والعملة","perm.actionHint.trip_delete":"من يمكنه حذف رحلة نهائياً","perm.actionHint.trip_archive":"من يمكنه أرشفة أو إلغاء أرشفة رحلة","perm.actionHint.trip_cover_upload":"من يمكنه رفع أو تغيير صورة الغلاف","perm.actionHint.member_manage":"من يمكنه دعوة أو إزالة أعضاء الرحلة","perm.actionHint.file_upload":"من يمكنه رفع ملفات إلى رحلة","perm.actionHint.file_edit":"من يمكنه تعديل أوصاف الملفات والروابط","perm.actionHint.file_delete":"من يمكنه نقل الملفات إلى سلة المهملات أو حذفها نهائياً","perm.actionHint.place_edit":"من يمكنه إضافة أو تعديل أو حذف الأماكن","perm.actionHint.day_edit":"من يمكنه تعديل الأيام وملاحظات الأيام وتعيينات الأماكن","perm.actionHint.reservation_edit":"من يمكنه إنشاء أو تعديل أو حذف الحجوزات","perm.actionHint.budget_edit":"من يمكنه إنشاء أو تعديل أو حذف عناصر الميزانية","perm.actionHint.packing_edit":"من يمكنه إدارة عناصر التعبئة والحقائب","perm.actionHint.collab_edit":"من يمكنه إنشاء ملاحظات واستطلاعات وإرسال رسائل","perm.actionHint.share_manage":"من يمكنه إنشاء أو حذف روابط المشاركة العامة"},CM={"common.save":"Salvar","common.cancel":"Cancelar","common.delete":"Excluir","common.edit":"Editar","common.add":"Adicionar","common.loading":"Carregando...","common.import":"Importar","common.error":"Erro","common.back":"Voltar","common.all":"Todos","common.close":"Fechar","common.open":"Abrir","common.upload":"Enviar","common.search":"Buscar","common.confirm":"Confirmar","common.ok":"OK","common.yes":"Sim","common.no":"Não","common.or":"ou","common.none":"Nenhum","common.date":"Data","common.rename":"Renomear","common.name":"Nome","common.email":"E-mail","common.password":"Senha","common.saving":"Salvando...","common.saved":"Salvo","trips.reminder":"Lembrete","trips.reminderNone":"Nenhum","trips.reminderDay":"dia","trips.reminderDays":"dias","trips.reminderCustom":"Personalizado","trips.reminderDaysBefore":"dias antes da partida","trips.reminderDisabledHint":"Os lembretes de viagem estão desativados. Ative-os em Admin > Configurações > Notificações.","common.update":"Atualizar","common.change":"Alterar","common.uploading":"Enviando…","common.backToPlanning":"Voltar ao planejamento","common.reset":"Redefinir","nav.trip":"Viagem","nav.share":"Compartilhar","nav.settings":"Configurações","nav.admin":"Admin","nav.logout":"Sair","nav.lightMode":"Modo claro","nav.darkMode":"Modo escuro","nav.autoMode":"Automático","nav.administrator":"Administrador","dashboard.title":"Minhas viagens","dashboard.subtitle.loading":"Carregando viagens...","dashboard.subtitle.trips":"{count} viagens ({archived} arquivadas)","dashboard.subtitle.empty":"Comece sua primeira viagem","dashboard.subtitle.activeOne":"{count} viagem ativa","dashboard.subtitle.activeMany":"{count} viagens ativas","dashboard.subtitle.archivedSuffix":" · {count} arquivadas","dashboard.newTrip":"Nova viagem","dashboard.gridView":"Grade","dashboard.listView":"Lista","dashboard.currency":"Moeda","dashboard.timezone":"Fusos horários","dashboard.localTime":"Local","dashboard.timezoneCustomTitle":"Fuso personalizado","dashboard.timezoneCustomLabelPlaceholder":"Rótulo (opcional)","dashboard.timezoneCustomTzPlaceholder":"ex.: America/Sao_Paulo","dashboard.timezoneCustomAdd":"Adicionar","dashboard.timezoneCustomErrorEmpty":"Informe um identificador de fuso","dashboard.timezoneCustomErrorInvalid":"Fuso inválido. Use o formato Europe/Berlin","dashboard.timezoneCustomErrorDuplicate":"Já adicionado","dashboard.emptyTitle":"Nenhuma viagem ainda","dashboard.emptyText":"Crie sua primeira viagem e comece a planejar!","dashboard.emptyButton":"Criar primeira viagem","dashboard.nextTrip":"Próxima viagem","dashboard.shared":"Compartilhada","dashboard.sharedBy":"Compartilhada por {name}","dashboard.days":"Dias","dashboard.places":"Lugares","dashboard.archive":"Arquivar","dashboard.restore":"Restaurar","dashboard.archived":"Arquivada","dashboard.status.ongoing":"Em andamento","dashboard.status.today":"Hoje","dashboard.status.tomorrow":"Amanhã","dashboard.status.past":"Passada","dashboard.status.daysLeft":"Faltam {count} dias","dashboard.toast.loadError":"Não foi possível carregar as viagens","dashboard.toast.created":"Viagem criada com sucesso!","dashboard.toast.createError":"Não foi possível criar a viagem","dashboard.toast.updated":"Viagem atualizada!","dashboard.toast.updateError":"Não foi possível atualizar a viagem","dashboard.toast.deleted":"Viagem excluída","dashboard.toast.deleteError":"Não foi possível excluir a viagem","dashboard.toast.archived":"Viagem arquivada","dashboard.toast.archiveError":"Não foi possível arquivar","dashboard.toast.restored":"Viagem restaurada","dashboard.toast.restoreError":"Não foi possível restaurar","dashboard.confirm.delete":'Excluir a viagem "{title}"? Todos os lugares e planos serão excluídos permanentemente.',"dashboard.editTrip":"Editar viagem","dashboard.createTrip":"Criar nova viagem","dashboard.tripTitle":"Título","dashboard.tripTitlePlaceholder":"ex.: Verão no Japão","dashboard.tripDescription":"Descrição","dashboard.tripDescriptionPlaceholder":"Sobre o que é esta viagem?","dashboard.startDate":"Data de início","dashboard.endDate":"Data de término","dashboard.noDateHint":"Sem datas — serão criados 7 dias padrão. Você pode alterar depois.","dashboard.coverImage":"Imagem de capa","dashboard.addCoverImage":"Adicionar capa (ou arrastar e soltar)","dashboard.addMembers":"Companheiros de viagem","dashboard.addMember":"Adicionar membro","dashboard.coverSaved":"Capa salva","dashboard.coverUploadError":"Falha no envio","dashboard.coverRemoveError":"Falha ao remover","dashboard.titleRequired":"O título é obrigatório","dashboard.endDateError":"A data final deve ser depois da inicial","settings.title":"Configurações","settings.subtitle":"Ajuste suas preferências pessoais","settings.map":"Mapa","settings.mapTemplate":"Modelo de mapa","settings.mapTemplatePlaceholder.select":"Selecione o modelo...","settings.mapDefaultHint":"Deixe vazio para OpenStreetMap (padrão)","settings.mapTemplatePlaceholder":"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png","settings.mapHint":"URL do modelo de blocos do mapa","settings.latitude":"Latitude","settings.longitude":"Longitude","settings.saveMap":"Salvar mapa","settings.apiKeys":"Chaves de API","settings.mapsKey":"Chave da API Google Maps","settings.mapsKeyHint":"Para busca de lugares. Requer Places API (New). Obtenha em console.cloud.google.com","settings.weatherKey":"Chave OpenWeatherMap","settings.weatherKeyHint":"Para dados meteorológicos. Grátis em openweathermap.org/api","settings.keyPlaceholder":"Digite a chave...","settings.configured":"Configurada","settings.saveKeys":"Salvar chaves","settings.display":"Exibição","settings.colorMode":"Tema de cores","settings.light":"Claro","settings.dark":"Escuro","settings.auto":"Automático","settings.language":"Idioma","settings.temperature":"Unidade de temperatura","settings.timeFormat":"Formato de hora","settings.routeCalculation":"Cálculo de rota","settings.blurBookingCodes":"Ocultar códigos de reserva","settings.notifications":"Notificações","settings.notifyTripInvite":"Convites de viagem","settings.notifyBookingChange":"Alterações de reserva","settings.notifyTripReminder":"Lembretes de viagem","settings.notifyVacayInvite":"Convites de fusão Vacay","settings.notifyPhotosShared":"Fotos compartilhadas (Immich)","settings.notifyCollabMessage":"Mensagens de chat (Colab)","settings.notifyPackingTagged":"Lista de mala: atribuições","settings.notifyWebhook":"Notificações webhook","settings.notificationsDisabled":"As notificações não estão configuradas. Peça a um administrador para ativar notificações por e-mail ou webhook.","settings.notificationsActive":"Canal ativo","settings.notificationsManagedByAdmin":"Os eventos de notificação são configurados pelo administrador.","admin.notifications.title":"Notificações","admin.notifications.hint":"Escolha um canal de notificação. Apenas um pode estar ativo por vez.","admin.notifications.none":"Desativado","admin.notifications.email":"E-mail (SMTP)","admin.notifications.webhook":"Webhook","admin.notifications.events":"Eventos de notificação","admin.notifications.eventsHint":"Escolha quais eventos acionam notificações para todos os usuários.","admin.notifications.configureFirst":"Configure primeiro as configurações SMTP ou webhook abaixo, depois ative os eventos.","admin.notifications.save":"Salvar configurações de notificação","admin.notifications.saved":"Configurações de notificação salvas","admin.notifications.testWebhook":"Enviar webhook de teste","admin.notifications.testWebhookSuccess":"Webhook de teste enviado com sucesso","admin.notifications.testWebhookFailed":"Falha ao enviar webhook de teste","admin.smtp.title":"E-mail e notificações","admin.smtp.hint":"Configuração SMTP para envio de notificações por e-mail.","admin.smtp.testButton":"Enviar e-mail de teste","admin.webhook.hint":"Enviar notificações para um webhook externo (Discord, Slack, etc.).","admin.smtp.testSuccess":"E-mail de teste enviado com sucesso","admin.smtp.testFailed":"Falha ao enviar e-mail de teste","dayplan.icsTooltip":"Exportar calendário (ICS)","share.linkTitle":"Link público","share.linkHint":"Crie um link que qualquer pessoa pode usar para ver esta viagem sem fazer login. Somente leitura — sem edição possível.","share.createLink":"Criar link","share.deleteLink":"Excluir link","share.createError":"Não foi possível criar o link","common.copy":"Copiar","common.copied":"Copiado","share.permMap":"Mapa e plano","share.permBookings":"Reservas","share.permPacking":"Mala","shared.expired":"Link expirado ou inválido","shared.expiredHint":"Este link de viagem compartilhado não está mais ativo.","shared.readOnly":"Visualização somente leitura","shared.tabPlan":"Plano","shared.tabBookings":"Reservas","shared.tabPacking":"Bagagem","shared.tabBudget":"Orçamento","shared.tabChat":"Chat","shared.days":"dias","shared.places":"lugares","shared.other":"Outros","shared.totalBudget":"Orçamento total","shared.messages":"mensagens","shared.sharedVia":"Compartilhado via","shared.confirmed":"Confirmado","shared.pending":"Pendente","share.permBudget":"Orçamento","share.permCollab":"Chat","settings.on":"Ligado","settings.off":"Desligado","settings.account":"Conta","settings.username":"Nome de usuário","settings.email":"E-mail","settings.role":"Função","settings.roleAdmin":"Administrador","settings.oidcLinked":"Vinculado a","settings.changePassword":"Alterar senha","settings.currentPassword":"Senha atual","settings.currentPasswordRequired":"A senha atual é obrigatória","settings.newPassword":"Nova senha","settings.confirmPassword":"Confirmar nova senha","settings.updatePassword":"Atualizar senha","settings.passwordRequired":"Informe a senha atual e a nova","settings.passwordTooShort":"A senha deve ter pelo menos 8 caracteres","settings.passwordMismatch":"As senhas não coincidem","settings.passwordWeak":"A senha deve ter maiúscula, minúscula, número e um caractere especial","settings.passwordChanged":"Senha alterada com sucesso","settings.deleteAccount":"Excluir conta","settings.deleteAccountTitle":"Excluir sua conta?","settings.deleteAccountWarning":"Sua conta e todas as viagens, lugares e arquivos serão excluídos permanentemente. Esta ação não pode ser desfeita.","settings.deleteAccountConfirm":"Excluir permanentemente","settings.deleteBlockedTitle":"Exclusão não permitida","settings.deleteBlockedMessage":"Você é o único administrador. Promova outro usuário a administrador antes de excluir sua conta.","settings.roleUser":"Usuário","settings.saveProfile":"Salvar perfil","settings.toast.mapSaved":"Configurações do mapa salvas","settings.toast.keysSaved":"Chaves de API salvas","settings.toast.displaySaved":"Configurações de exibição salvas","settings.toast.profileSaved":"Perfil salvo","settings.uploadAvatar":"Enviar foto do perfil","settings.removeAvatar":"Remover foto do perfil","settings.avatarUploaded":"Foto do perfil atualizada","settings.avatarRemoved":"Foto do perfil removida","settings.avatarError":"Falha no envio","settings.mfa.title":"Autenticação em duas etapas (2FA)","settings.mfa.description":"Adiciona uma segunda etapa ao entrar com e-mail e senha. Use um app autenticador (Google Authenticator, Authy, etc.).","settings.mfa.requiredByPolicy":"O administrador exige autenticação em dois fatores. Configure um app autenticador abaixo antes de continuar.","settings.mfa.backupTitle":"Códigos de backup","settings.mfa.backupDescription":"Use estes códigos únicos se perder acesso ao app autenticador.","settings.mfa.backupWarning":"Salve estes códigos agora. Cada código pode ser usado apenas uma vez.","settings.mfa.backupCopy":"Copiar códigos","settings.mfa.backupDownload":"Baixar TXT","settings.mfa.backupPrint":"Imprimir / PDF","settings.mfa.backupCopied":"Códigos de backup copiados","settings.mfa.enabled":"O 2FA está ativado na sua conta.","settings.mfa.disabled":"O 2FA não está ativado.","settings.mfa.setup":"Configurar autenticador","settings.mfa.scanQr":"Leia este QR code no app ou digite o segredo manualmente.","settings.mfa.secretLabel":"Chave secreta (entrada manual)","settings.mfa.codePlaceholder":"Código de 6 dígitos","settings.mfa.enable":"Ativar 2FA","settings.mfa.cancelSetup":"Cancelar","settings.mfa.disableTitle":"Desativar 2FA","settings.mfa.disableHint":"Digite sua senha e um código atual do autenticador.","settings.mfa.disable":"Desativar 2FA","settings.mfa.toastEnabled":"Autenticação em duas etapas ativada","settings.mfa.toastDisabled":"Autenticação em duas etapas desativada","settings.mfa.demoBlocked":"Indisponível no modo demonstração","settings.mcp.title":"Configuração MCP","settings.mcp.endpoint":"Endpoint MCP","settings.mcp.clientConfig":"Configuração do cliente","settings.mcp.clientConfigHint":"Substitua por um token de API da lista abaixo. O caminho para o npx pode precisar ser ajustado para o seu sistema (ex.: C:\\PROGRA~1\\nodejs\\npx.cmd no Windows).","settings.mcp.copy":"Copiar","settings.mcp.copied":"Copiado!","settings.mcp.apiTokens":"Tokens de API","settings.mcp.createToken":"Criar novo token","settings.mcp.noTokens":"Nenhum token ainda. Crie um para conectar clientes MCP.","settings.mcp.tokenCreatedAt":"Criado em","settings.mcp.tokenUsedAt":"Usado em","settings.mcp.deleteTokenTitle":"Excluir token","settings.mcp.deleteTokenMessage":"Este token deixará de funcionar imediatamente. Qualquer cliente MCP que o utilize perderá o acesso.","settings.mcp.modal.createTitle":"Criar token de API","settings.mcp.modal.tokenName":"Nome do token","settings.mcp.modal.tokenNamePlaceholder":"ex.: Claude Desktop, Notebook do trabalho","settings.mcp.modal.creating":"Criando…","settings.mcp.modal.create":"Criar token","settings.mcp.modal.createdTitle":"Token criado","settings.mcp.modal.createdWarning":"Este token será exibido apenas uma vez. Copie e guarde agora — não poderá ser recuperado.","settings.mcp.modal.done":"Concluído","settings.mcp.toast.created":"Token criado","settings.mcp.toast.createError":"Falha ao criar token","settings.mcp.toast.deleted":"Token excluído","settings.mcp.toast.deleteError":"Falha ao excluir token","settings.mustChangePassword":"Você deve alterar sua senha antes de continuar. Defina uma nova senha abaixo.","login.error":"Falha no login. Verifique suas credenciais.","login.tagline":`Suas viagens. Seu plano.`,"login.description":"Planeje viagens em equipe com mapas interativos, orçamento e sincronização em tempo real.","login.features.maps":"Mapas interativos","login.features.mapsDesc":"Google Places, rotas e agrupamento","login.features.realtime":"Sincronização em tempo real","login.features.realtimeDesc":"Planejem juntos via WebSocket","login.features.budget":"Controle de orçamento","login.features.budgetDesc":"Categorias, gráficos e custo por pessoa","login.features.collab":"Colaboração","login.features.collabDesc":"Vários usuários com viagens compartilhadas","login.features.packing":"Listas de malas","login.features.packingDesc":"Categorias, progresso e sugestões","login.features.bookings":"Reservas","login.features.bookingsDesc":"Voos, hotéis, restaurantes e mais","login.features.files":"Documentos","login.features.filesDesc":"Envie e gerencie documentos","login.features.routes":"Rotas inteligentes","login.features.routesDesc":"Otimize e exporte para o Google Maps","login.selfHosted":"Auto-hospedado · Código aberto · Seus dados são seus","login.title":"Entrar","login.subtitle":"Bem-vindo de volta","login.signingIn":"Entrando…","login.signIn":"Entrar","login.createAdmin":"Criar conta de administrador","login.createAdminHint":"Configure a primeira conta de administrador do TREK.","login.setNewPassword":"Definir nova senha","login.setNewPasswordHint":"Você deve alterar sua senha antes de continuar.","login.createAccount":"Criar conta","login.createAccountHint":"Cadastre uma nova conta.","login.creating":"Criando…","login.noAccount":"Não tem conta?","login.hasAccount":"Já tem conta?","login.register":"Cadastrar","login.emailPlaceholder":"seu@email.com","login.username":"Nome de usuário","login.oidc.registrationDisabled":"Cadastro desativado. Fale com o administrador.","login.oidc.noEmail":"Nenhum e-mail recebido do provedor.","login.oidc.tokenFailed":"Falha na autenticação.","login.oidc.invalidState":"Sessão inválida. Tente novamente.","login.demoFailed":"Falha no login de demonstração","login.oidcSignIn":"Entrar com {name}","login.oidcOnly":"Login por senha desativado. Use o provedor SSO.","login.demoHint":"Experimente a demonstração — sem cadastro","login.mfaTitle":"Autenticação em duas etapas","login.mfaSubtitle":"Digite o código de 6 dígitos do seu app autenticador.","login.mfaCodeLabel":"Código de verificação","login.mfaCodeRequired":"Digite o código do app autenticador.","login.mfaHint":"Abra o Google Authenticator, Authy ou outro app TOTP.","login.mfaBack":"← Voltar ao login","login.mfaVerify":"Verificar","register.passwordMismatch":"As senhas não coincidem","register.passwordTooShort":"A senha deve ter pelo menos 8 caracteres","register.failed":"Falha no cadastro","register.getStarted":"Começar","register.subtitle":"Crie uma conta e comece a planejar suas viagens.","register.feature1":"Viagens ilimitadas","register.feature2":"Mapa interativo","register.feature3":"Gerencie lugares e categorias","register.feature4":"Acompanhe reservas","register.feature5":"Listas de malas","register.feature6":"Fotos e arquivos","register.createAccount":"Criar conta","register.startPlanning":"Comece a planejar","register.minChars":"Mín. 6 caracteres","register.confirmPassword":"Confirmar senha","register.repeatPassword":"Repita a senha","register.registering":"Cadastrando...","register.register":"Cadastrar","register.hasAccount":"Já tem conta?","register.signIn":"Entrar","admin.title":"Administração","admin.subtitle":"Gestão de usuários e configurações do sistema","admin.tabs.users":"Usuários","admin.tabs.categories":"Categorias","admin.tabs.backup":"Backup","admin.stats.users":"Usuários","admin.stats.trips":"Viagens","admin.stats.places":"Lugares","admin.stats.photos":"Fotos","admin.stats.files":"Arquivos","admin.table.user":"Usuário","admin.table.email":"E-mail","admin.table.role":"Função","admin.table.created":"Criado","admin.table.lastLogin":"Último acesso","admin.table.actions":"Ações","admin.you":"(Você)","admin.editUser":"Editar usuário","admin.newPassword":"Nova senha","admin.newPasswordHint":"Deixe em branco para manter a senha atual","admin.deleteUser":'Excluir o usuário "{name}"? Todas as viagens serão excluídas permanentemente.',"admin.deleteUserTitle":"Excluir usuário","admin.newPasswordPlaceholder":"Digite a nova senha…","admin.toast.loadError":"Falha ao carregar dados do admin","admin.toast.userUpdated":"Usuário atualizado","admin.toast.updateError":"Falha ao atualizar","admin.toast.userDeleted":"Usuário excluído","admin.toast.deleteError":"Falha ao excluir","admin.toast.cannotDeleteSelf":"Não é possível excluir a própria conta","admin.toast.userCreated":"Usuário criado","admin.toast.createError":"Falha ao criar usuário","admin.toast.fieldsRequired":"Nome de usuário, e-mail e senha são obrigatórios","admin.createUser":"Criar usuário","admin.invite.title":"Links de convite","admin.invite.subtitle":"Crie links de cadastro de uso único","admin.invite.create":"Criar link","admin.invite.createAndCopy":"Criar e copiar","admin.invite.empty":"Nenhum link de convite criado ainda","admin.invite.maxUses":"Máx. usos","admin.invite.expiry":"Expira após","admin.invite.uses":"usado(s)","admin.invite.expiresAt":"expira","admin.invite.createdBy":"por","admin.invite.active":"Ativo","admin.invite.expired":"Expirado","admin.invite.usedUp":"Esgotado","admin.invite.copied":"Link de convite copiado para a área de transferência","admin.invite.copyLink":"Copiar link","admin.invite.deleted":"Link de convite excluído","admin.invite.createError":"Falha ao criar link de convite","admin.invite.deleteError":"Falha ao excluir link de convite","admin.tabs.settings":"Configurações","admin.allowRegistration":"Permitir cadastro","admin.allowRegistrationHint":"Novos usuários podem se cadastrar sozinhos","admin.requireMfa":"Exigir autenticação em dois fatores (2FA)","admin.requireMfaHint":"Usuários sem 2FA precisam concluir a configuração em Configurações antes de usar o app.","admin.apiKeys":"Chaves de API","admin.apiKeysHint":"Opcional. Habilita dados estendidos de lugares, como fotos e clima.","admin.mapsKey":"Chave da API Google Maps","admin.mapsKeyHint":"Necessária para busca de lugares. Obtenha em console.cloud.google.com","admin.mapsKeyHintLong":"Sem chave de API, o OpenStreetMap é usado na busca. Com uma chave Google, também podem ser carregadas fotos, avaliações e horários. Obtenha em console.cloud.google.com.","admin.recommended":"Recomendado","admin.weatherKey":"Chave OpenWeatherMap","admin.weatherKeyHint":"Para dados meteorológicos. Grátis em openweathermap.org","admin.validateKey":"Testar","admin.keyValid":"Conectado","admin.keyInvalid":"Inválida","admin.keySaved":"Chaves de API salvas","admin.oidcTitle":"Single Sign-On (OIDC)","admin.oidcSubtitle":"Permitir login via provedores externos como Google, Apple, Authentik ou Keycloak.","admin.oidcDisplayName":"Nome exibido","admin.oidcIssuer":"URL do emissor","admin.oidcIssuerHint":"URL do emissor OpenID Connect do provedor, ex.: https://accounts.google.com","admin.oidcSaved":"Configuração OIDC salva","admin.oidcOnlyMode":"Desativar login por senha","admin.oidcOnlyModeHint":"Quando ativado, só é permitido login SSO. Login e cadastro por senha ficam bloqueados.","admin.fileTypes":"Tipos de arquivo permitidos","admin.fileTypesHint":"Configure quais tipos de arquivo os usuários podem enviar.","admin.fileTypesFormat":"Extensões separadas por vírgula (ex.: jpg,png,pdf,doc). Use * para permitir todos.","admin.fileTypesSaved":"Configurações de tipos de arquivo salvas","admin.bagTracking.title":"Rastreamento de malas","admin.bagTracking.subtitle":"Ativar peso e atribuição de mala para itens da lista","admin.tabs.config":"Configuração","admin.tabs.templates":"Modelos de mala","admin.packingTemplates.title":"Modelos de mala","admin.packingTemplates.subtitle":"Crie listas de mala reutilizáveis para suas viagens","admin.packingTemplates.create":"Novo modelo","admin.packingTemplates.namePlaceholder":"Nome do modelo (ex.: Praia)","admin.packingTemplates.empty":"Nenhum modelo criado ainda","admin.packingTemplates.items":"itens","admin.packingTemplates.categories":"categorias","admin.packingTemplates.itemName":"Nome do item","admin.packingTemplates.itemCategory":"Categoria","admin.packingTemplates.categoryName":"Nome da categoria (ex.: Roupas)","admin.packingTemplates.addCategory":"Adicionar categoria","admin.packingTemplates.created":"Modelo criado","admin.packingTemplates.deleted":"Modelo excluído","admin.packingTemplates.loadError":"Falha ao carregar modelos","admin.packingTemplates.createError":"Falha ao criar modelo","admin.packingTemplates.deleteError":"Falha ao excluir modelo","admin.packingTemplates.saveError":"Falha ao salvar","admin.tabs.addons":"Complementos","admin.addons.title":"Complementos","admin.addons.subtitle":"Ative ou desative recursos para personalizar sua experiência no TREK.","admin.addons.catalog.memories.name":"Memórias","admin.addons.catalog.memories.description":"Álbuns de fotos compartilhados em cada viagem","admin.addons.catalog.packing.name":"Mala","admin.addons.catalog.packing.description":"Listas para preparar a bagagem de cada viagem","admin.addons.catalog.budget.name":"Orçamento","admin.addons.catalog.budget.description":"Acompanhe despesas e planeje o orçamento da viagem","admin.addons.catalog.documents.name":"Documentos","admin.addons.catalog.documents.description":"Armazene e gerencie documentos de viagem","admin.addons.catalog.vacay.name":"Vacay","admin.addons.catalog.vacay.description":"Planejador de férias pessoal com visão em calendário","admin.addons.catalog.atlas.name":"Atlas","admin.addons.catalog.atlas.description":"Mapa mundial com países visitados e estatísticas","admin.addons.catalog.collab.name":"Colab","admin.addons.catalog.collab.description":"Notas, enquetes e chat em tempo real para planejar a viagem","admin.addons.catalog.mcp.name":"MCP","admin.addons.catalog.mcp.description":"Model Context Protocol para integração com assistentes de IA","admin.addons.subtitleBefore":"Ative ou desative recursos para personalizar sua ","admin.addons.subtitleAfter":" experiência.","admin.addons.enabled":"Ativado","admin.addons.disabled":"Desativado","admin.addons.type.trip":"Viagem","admin.addons.type.global":"Global","admin.addons.type.integration":"Integração","admin.addons.tripHint":"Disponível como aba em cada viagem","admin.addons.globalHint":"Disponível como seção própria na navegação principal","admin.addons.toast.updated":"Complemento atualizado","admin.addons.toast.error":"Falha ao atualizar complemento","admin.addons.noAddons":"Nenhum complemento disponível","admin.addons.integrationHint":"Serviços de backend e integrações de API sem página dedicada","admin.weather.title":"Dados meteorológicos","admin.weather.badge":"Desde 24 de março de 2026","admin.weather.description":"O TREK usa Open-Meteo como fonte de clima. Open-Meteo é um serviço gratuito e de código aberto — sem chave de API.","admin.weather.forecast":"Previsão de 16 dias","admin.weather.forecastDesc":"Antes eram 5 dias (OpenWeatherMap)","admin.weather.climate":"Dados climáticos históricos","admin.weather.climateDesc":"Médias dos últimos 85 anos para dias além da previsão de 16 dias","admin.weather.requests":"10.000 requisições / dia","admin.weather.requestsDesc":"Grátis, sem chave de API","admin.weather.locationHint":"O clima usa o primeiro lugar com coordenadas de cada dia. Se nenhum lugar estiver atribuído ao dia, qualquer lugar da lista serve como referência.","admin.tabs.audit":"Log de auditoria","admin.audit.subtitle":"Eventos sensíveis de segurança e administração (backups, usuários, 2FA, configurações).","admin.audit.empty":"Nenhum registro de auditoria.","admin.audit.refresh":"Atualizar","admin.audit.loadMore":"Carregar mais","admin.audit.showing":"{count} carregados · {total} no total","admin.audit.col.time":"Hora","admin.audit.col.user":"Usuário","admin.audit.col.action":"Ação","admin.audit.col.resource":"Recurso","admin.audit.col.ip":"IP","admin.audit.col.details":"Detalhes","admin.tabs.github":"GitHub","admin.github.title":"Histórico de versões","admin.github.subtitle":"Últimas atualizações de {repo}","admin.github.latest":"Mais recente","admin.github.prerelease":"Pré-lançamento","admin.github.showDetails":"Mostrar detalhes","admin.github.hideDetails":"Ocultar detalhes","admin.github.loadMore":"Carregar mais","admin.github.loading":"Carregando...","admin.github.error":"Falha ao carregar versões","admin.github.by":"por","admin.github.support":"Ajuda a continuar desenvolvendo o TREK","admin.update.available":"Atualização disponível","admin.update.text":"O TREK {version} está disponível. Você está na {current}.","admin.update.button":"Ver no GitHub","admin.update.install":"Instalar atualização","admin.update.confirmTitle":"Instalar atualização?","admin.update.confirmText":"O TREK será atualizado de {current} para {version}. O servidor reiniciará automaticamente em seguida.","admin.update.dataInfo":"Todos os seus dados (viagens, usuários, chaves de API, envios, Vacay, Atlas, orçamentos) serão preservados.","admin.update.warning":"O app ficará brevemente indisponível durante o reinício.","admin.update.confirm":"Atualizar agora","admin.update.installing":"Atualizando…","admin.update.success":"Atualização instalada! O servidor está reiniciando…","admin.update.failed":"Falha na atualização","admin.update.backupHint":"Recomendamos criar um backup antes de atualizar.","admin.update.backupLink":"Ir para Backup","admin.update.howTo":"Como atualizar","admin.update.dockerText":"Sua instância TREK roda no Docker. Para atualizar para {version}, execute no servidor:","admin.update.reloadHint":"Recarregue a página em alguns segundos.","vacay.subtitle":"Planeje e gerencie dias de férias","vacay.settings":"Configurações","vacay.year":"Ano","vacay.addYear":"Adicionar ano","vacay.removeYear":"Remover ano","vacay.removeYearConfirm":"Remover {year}?","vacay.removeYearHint":"Todas as entradas de férias e feriados da empresa deste ano serão excluídas permanentemente.","vacay.remove":"Remover","vacay.persons":"Pessoas","vacay.noPersons":"Nenhuma pessoa adicionada","vacay.addPerson":"Adicionar pessoa","vacay.editPerson":"Editar pessoa","vacay.removePerson":"Remover pessoa","vacay.removePersonConfirm":"Remover {name}?","vacay.removePersonHint":"Todas as entradas de férias desta pessoa serão excluídas permanentemente.","vacay.personName":"Nome","vacay.personNamePlaceholder":"Digite o nome","vacay.color":"Cor","vacay.add":"Adicionar","vacay.legend":"Legenda","vacay.publicHoliday":"Feriado nacional","vacay.companyHoliday":"Feriado da empresa","vacay.weekend":"Fim de semana","vacay.modeVacation":"Férias","vacay.modeCompany":"Feriado da empresa","vacay.entitlement":"Direito","vacay.entitlementDays":"Dias","vacay.used":"Usados","vacay.remaining":"Restantes","vacay.carriedOver":"de {year}","vacay.blockWeekends":"Bloquear fins de semana","vacay.weekendDays":"Dias de fim de semana","vacay.mon":"Seg","vacay.tue":"Ter","vacay.wed":"Qua","vacay.thu":"Qui","vacay.fri":"Sex","vacay.sat":"Sáb","vacay.sun":"Dom","vacay.blockWeekendsHint":"Impedir entradas de férias aos sábados e domingos","vacay.publicHolidays":"Feriados nacionais","vacay.publicHolidaysHint":"Marcar feriados nacionais no calendário","vacay.selectCountry":"Selecione o país","vacay.selectRegion":"Selecione a região (opcional)","vacay.addCalendar":"Adicionar calendário","vacay.calendarLabel":"Rótulo (opcional)","vacay.calendarColor":"Cor","vacay.noCalendars":"Nenhum calendário de feriados adicionado ainda","vacay.companyHolidays":"Feriados da empresa","vacay.companyHolidaysHint":"Permitir marcar dias de feriado em toda a empresa","vacay.companyHolidaysNoDeduct":"Feriados da empresa não contam como dias de férias.","vacay.carryOver":"Acúmulo","vacay.carryOverHint":"Levar automaticamente os dias de férias restantes para o ano seguinte","vacay.sharing":"Compartilhamento","vacay.sharingHint":"Compartilhe seu plano de férias com outros usuários do TREK","vacay.owner":"Proprietário","vacay.shareEmailPlaceholder":"E-mail do usuário TREK","vacay.shareSuccess":"Plano compartilhado com sucesso","vacay.shareError":"Não foi possível compartilhar o plano","vacay.dissolve":"Encerrar fusão","vacay.dissolveHint":"Separar os calendários novamente. Suas entradas serão mantidas.","vacay.dissolveAction":"Encerrar","vacay.dissolved":"Calendário separado","vacay.fusedWith":"Fundido com","vacay.you":"você","vacay.noData":"Sem dados","vacay.changeColor":"Alterar cor","vacay.inviteUser":"Convidar usuário","vacay.inviteHint":"Convide outro usuário TREK para compartilhar um calendário de férias combinado.","vacay.selectUser":"Selecionar usuário","vacay.sendInvite":"Enviar convite","vacay.inviteSent":"Convite enviado","vacay.inviteError":"Não foi possível enviar o convite","vacay.pending":"pendente","vacay.noUsersAvailable":"Nenhum usuário disponível","vacay.accept":"Aceitar","vacay.decline":"Recusar","vacay.acceptFusion":"Aceitar e fundir","vacay.inviteTitle":"Pedido de fusão","vacay.inviteWantsToFuse":"quer compartilhar um calendário de férias com você.","vacay.fuseInfo1":"Ambos verão todas as entradas de férias em um calendário compartilhado.","vacay.fuseInfo2":"Ambos podem criar e editar entradas um do outro.","vacay.fuseInfo3":"Ambos podem excluir entradas e alterar direitos de férias.","vacay.fuseInfo4":"Configurações como feriados nacionais e da empresa são compartilhadas.","vacay.fuseInfo5":"A fusão pode ser encerrada a qualquer momento por qualquer parte. Suas entradas serão preservadas.","nav.myTrips":"Minhas viagens","atlas.subtitle":"Sua pegada de viagens pelo mundo","atlas.countries":"Países","atlas.trips":"Viagens","atlas.places":"Lugares","atlas.unmark":"Remover","atlas.confirmMark":"Marcar este país como visitado?","atlas.confirmUnmark":"Remover este país da lista de visitados?","atlas.markVisited":"Marcar como visitado","atlas.markVisitedHint":"Adicionar este país à lista de visitados","atlas.addToBucket":"Adicionar à lista de desejos","atlas.addPoi":"Adicionar lugar","atlas.searchCountry":"Buscar um país...","atlas.bucketNamePlaceholder":"Nome (país, cidade, lugar…)","atlas.month":"Mês","atlas.year":"Ano","atlas.addToBucketHint":"Salvar como lugar que você quer visitar","atlas.bucketWhen":"Quando pretende visitar?","atlas.statsTab":"Estatísticas","atlas.bucketTab":"Lista de desejos","atlas.addBucket":"Adicionar à lista de desejos","atlas.bucketNotesPlaceholder":"Notas (opcional)","atlas.bucketEmpty":"Sua lista de desejos está vazia","atlas.bucketEmptyHint":"Adicione lugares que sonha em visitar","atlas.days":"Dias","atlas.visitedCountries":"Países visitados","atlas.cities":"Cidades","atlas.noData":"Ainda sem dados de viagem","atlas.noDataHint":"Crie uma viagem e adicione lugares para ver o mapa mundial","atlas.lastTrip":"Última viagem","atlas.nextTrip":"Próxima viagem","atlas.daysLeft":"dias restantes","atlas.streak":"Sequência","atlas.years":"anos","atlas.yearInRow":"ano seguido","atlas.yearsInRow":"anos seguidos","atlas.tripIn":"viagem em","atlas.tripsIn":"viagens em","atlas.since":"desde","atlas.europe":"Europa","atlas.asia":"Ásia","atlas.northAmerica":"América do Norte","atlas.southAmerica":"América do Sul","atlas.africa":"África","atlas.oceania":"Oceania","atlas.other":"Outro","atlas.firstVisit":"Primeira viagem","atlas.lastVisitLabel":"Última viagem","atlas.tripSingular":"Viagem","atlas.tripPlural":"Viagens","atlas.placeVisited":"Lugar visitado","atlas.placesVisited":"Lugares visitados","trip.tabs.plan":"Plano","trip.tabs.reservations":"Reservas","trip.tabs.reservationsShort":"Reservas","trip.tabs.packing":"Lista de mala","trip.tabs.packingShort":"Mala","trip.tabs.budget":"Orçamento","trip.tabs.files":"Arquivos","trip.loading":"Carregando viagem...","trip.mobilePlan":"Plano","trip.mobilePlaces":"Lugares","trip.toast.placeUpdated":"Lugar atualizado","trip.toast.placeAdded":"Lugar adicionado","trip.toast.placeDeleted":"Lugar excluído","trip.toast.selectDay":"Selecione um dia primeiro","trip.toast.assignedToDay":"Lugar atribuído ao dia","trip.toast.reorderError":"Falha ao reordenar","trip.toast.reservationUpdated":"Reserva atualizada","trip.toast.reservationAdded":"Reserva adicionada","trip.toast.deleted":"Excluído","trip.confirm.deletePlace":"Tem certeza de que deseja excluir este lugar?","trip.loadingPhotos":"Carregando fotos dos lugares...","dayplan.emptyDay":"Nenhum lugar planejado para este dia","dayplan.addNote":"Adicionar nota","dayplan.editNote":"Editar nota","dayplan.noteAdd":"Adicionar nota","dayplan.noteEdit":"Editar nota","dayplan.noteTitle":"Nota","dayplan.noteSubtitle":"Nota do dia","dayplan.totalCost":"Custo total","dayplan.days":"Dias","dayplan.dayN":"Dia {n}","dayplan.calculating":"Calculando...","dayplan.route":"Rota","dayplan.optimize":"Otimizar","dayplan.optimized":"Rota otimizada","dayplan.routeError":"Falha ao calcular a rota","dayplan.toast.needTwoPlaces":"São necessários pelo menos dois lugares para otimizar a rota","dayplan.toast.routeOptimized":"Rota otimizada","dayplan.toast.noGeoPlaces":"Nenhum lugar com coordenadas para calcular a rota","dayplan.confirmed":"Confirmada","dayplan.pendingRes":"Pendente","dayplan.pdf":"PDF","dayplan.pdfTooltip":"Exportar plano do dia em PDF","dayplan.pdfError":"Falha ao exportar PDF","dayplan.cannotReorderTransport":"Reservas com horário fixo não podem ser reordenadas","dayplan.confirmRemoveTimeTitle":"Remover horário?","dayplan.confirmRemoveTimeBody":"Este lugar tem um horário fixo ({time}). Movê-lo removerá o horário e permitirá ordenação livre.","dayplan.confirmRemoveTimeAction":"Remover horário e mover","dayplan.cannotDropOnTimed":"Itens não podem ser colocados entre entradas com horário fixo","dayplan.cannotBreakChronology":"Isso quebraria a ordem cronológica dos itens e reservas agendados","places.addPlace":"Adicionar lugar/atividade","places.importGpx":"GPX","places.gpxImported":"{count} lugares importados do GPX","places.gpxError":"Falha ao importar GPX","places.importGoogleList":"Lista Google","places.googleListHint":"Cole um link compartilhado de uma lista do Google Maps para importar todos os lugares.","places.googleListImported":'{count} lugares importados de "{list}"',"places.googleListError":"Falha ao importar lista do Google Maps","places.viewDetails":"Ver detalhes","places.urlResolved":"Lugar importado da URL","places.assignToDay":"Adicionar a qual dia?","places.all":"Todos","places.unplanned":"Não planejados","places.search":"Buscar lugares...","places.allCategories":"Todas as categorias","places.categoriesSelected":"categorias","places.clearFilter":"Limpar filtro","places.count":"{count} lugares","places.countSingular":"1 lugar","places.allPlanned":"Todos os lugares estão planejados","places.noneFound":"Nenhum lugar encontrado","places.editPlace":"Editar lugar","places.formName":"Nome","places.formNamePlaceholder":"ex.: Torre Eiffel","places.formDescription":"Descrição","places.formDescriptionPlaceholder":"Breve descrição...","places.formAddress":"Endereço","places.formAddressPlaceholder":"Rua, cidade, país","places.formLat":"Latitude (ex.: -23.5505)","places.formLng":"Longitude (ex.: -46.6333)","places.formCategory":"Categoria","places.noCategory":"Sem categoria","places.categoryNamePlaceholder":"Nome da categoria","places.formTime":"Horário","places.startTime":"Início","places.endTime":"Fim","places.endTimeBeforeStart":"O horário de fim é antes do início","places.timeCollision":"Sobreposição de horário com:","places.formWebsite":"Site","places.formNotesPlaceholder":"Notas pessoais...","places.formReservation":"Reserva","places.reservationNotesPlaceholder":"Notas da reserva, código de confirmação...","places.mapsSearchPlaceholder":"Buscar lugares...","places.mapsSearchError":"Falha na busca de lugares.","places.osmHint":"Busca via OpenStreetMap (sem fotos, horários ou avaliações). Adicione uma chave Google nas configurações para detalhes completos.","places.osmActive":"Busca via OpenStreetMap (sem fotos, avaliações ou horário de funcionamento). Adicione uma chave Google em Configurações para mais dados.","places.categoryCreateError":"Falha ao criar categoria","places.nameRequired":"Digite um nome","places.saveError":"Falha ao salvar","inspector.opened":"Aberto","inspector.closed":"Fechado","inspector.openingHours":"Horário de funcionamento","inspector.showHours":"Mostrar horário de funcionamento","inspector.files":"Arquivos","inspector.filesCount":"{count} arquivos","inspector.removeFromDay":"Remover do dia","inspector.addToDay":"Adicionar ao dia","inspector.confirmedRes":"Reserva confirmada","inspector.pendingRes":"Reserva pendente","inspector.google":"Abrir no Google Maps","inspector.website":"Abrir site","inspector.addRes":"Reserva","inspector.editRes":"Editar reserva","inspector.participants":"Participantes","inspector.trackStats":"Dados da trilha","reservations.title":"Reservas","reservations.empty":"Nenhuma reserva ainda","reservations.emptyHint":"Adicione reservas de voos, hotéis e mais","reservations.add":"Adicionar reserva","reservations.addManual":"Reserva manual","reservations.placeHint":"Dica: o ideal é criar reservas a partir de um lugar para vinculá-las ao plano do dia.","reservations.confirmed":"Confirmada","reservations.pending":"Pendente","reservations.summary":"{confirmed} confirmada(s), {pending} pendente(s)","reservations.fromPlan":"Do plano","reservations.showFiles":"Mostrar arquivos","reservations.editTitle":"Editar reserva","reservations.status":"Status","reservations.datetime":"Data e hora","reservations.startTime":"Horário de início","reservations.endTime":"Horário de término","reservations.date":"Data","reservations.time":"Hora","reservations.timeAlt":"Hora (alternativa, ex.: 19:30)","reservations.notes":"Notas","reservations.notesPlaceholder":"Notas adicionais...","reservations.meta.airline":"Companhia aérea","reservations.meta.flightNumber":"Nº do voo","reservations.meta.from":"De","reservations.meta.to":"Para","reservations.meta.trainNumber":"Nº do trem","reservations.meta.platform":"Plataforma","reservations.meta.seat":"Assento","reservations.meta.checkIn":"Check-in","reservations.meta.checkOut":"Check-out","reservations.meta.linkAccommodation":"Hospedagem","reservations.meta.pickAccommodation":"Vincular à hospedagem","reservations.meta.noAccommodation":"Nenhuma","reservations.meta.hotelPlace":"Hospedagem","reservations.meta.pickHotel":"Selecionar hospedagem","reservations.meta.fromDay":"De","reservations.meta.toDay":"Até","reservations.meta.selectDay":"Selecionar dia","reservations.type.flight":"Voo","reservations.type.hotel":"Hospedagem","reservations.type.restaurant":"Restaurante","reservations.type.train":"Trem","reservations.type.car":"Carro alugado","reservations.type.cruise":"Cruzeiro","reservations.type.event":"Evento","reservations.type.tour":"Passeio","reservations.type.other":"Outro","reservations.confirm.delete":'Tem certeza de que deseja excluir a reserva "{name}"?',"reservations.confirm.deleteTitle":"Excluir reserva?","reservations.confirm.deleteBody":'"{name}" será excluído permanentemente.',"reservations.toast.updated":"Reserva atualizada","reservations.toast.removed":"Reserva excluída","reservations.toast.fileUploaded":"Arquivo enviado","reservations.toast.uploadError":"Falha no envio","reservations.newTitle":"Nova reserva","reservations.bookingType":"Tipo de reserva","reservations.titleLabel":"Título","reservations.titlePlaceholder":"ex.: LATAM LA800, Hotel Copacabana...","reservations.locationAddress":"Local / endereço","reservations.locationPlaceholder":"Endereço, aeroporto, hotel...","reservations.confirmationCode":"Código da reserva","reservations.confirmationPlaceholder":"ex.: ABC12345","reservations.day":"Dia","reservations.noDay":"Sem dia","reservations.place":"Lugar","reservations.noPlace":"Sem lugar","reservations.pendingSave":"será salvo…","reservations.uploading":"Enviando...","reservations.attachFile":"Anexar arquivo","reservations.linkExisting":"Vincular arquivo existente","reservations.toast.saveError":"Falha ao salvar","reservations.toast.updateError":"Falha ao atualizar","reservations.toast.deleteError":"Falha ao excluir","reservations.confirm.remove":'Remover a reserva "{name}"?',"reservations.linkAssignment":"Vincular à atribuição do dia","reservations.pickAssignment":"Selecione uma atribuição do seu plano...","reservations.noAssignment":"Sem vínculo (avulsa)","budget.title":"Orçamento","budget.exportCsv":"Exportar CSV","budget.emptyTitle":"Nenhum orçamento criado ainda","budget.emptyText":"Crie categorias e lançamentos para planejar o orçamento da viagem","budget.emptyPlaceholder":"Nome da categoria...","budget.createCategory":"Criar categoria","budget.category":"Categoria","budget.categoryName":"Nome da categoria","budget.table.name":"Nome","budget.table.total":"Total","budget.table.persons":"Pessoas","budget.table.days":"Dias","budget.table.perPerson":"Por pessoa","budget.table.perDay":"Por dia","budget.table.perPersonDay":"P. p. / dia","budget.table.note":"Obs.","budget.table.date":"Data","budget.newEntry":"Novo lançamento","budget.defaultEntry":"Novo lançamento","budget.defaultCategory":"Nova categoria","budget.total":"Total","budget.totalBudget":"Orçamento total","budget.byCategory":"Por categoria","budget.editTooltip":"Clique para editar","budget.confirm.deleteCategory":'Excluir a categoria "{name}" com {count} lançamento(s)?',"budget.deleteCategory":"Excluir categoria","budget.perPerson":"Por pessoa","budget.paid":"Pago","budget.open":"Em aberto","budget.noMembers":"Nenhum membro atribuído","budget.settlement":"Acerto","budget.settlementInfo":"Clique no avatar de um membro em um item do orçamento para marcá-lo em verde — significa que ele pagou. O acerto mostra quem deve quanto a quem.","budget.netBalances":"Saldos líquidos","files.title":"Arquivos","files.count":"{count} arquivos","files.countSingular":"1 arquivo","files.uploaded":"{count} enviado(s)","files.uploadError":"Falha no envio","files.dropzone":"Solte os arquivos aqui","files.dropzoneHint":"ou clique para escolher","files.allowedTypes":"Imagens, PDF, DOC, DOCX, XLS, XLSX, TXT, CSV · Máx. 50 MB","files.uploading":"Enviando...","files.filterAll":"Todos","files.filterPdf":"PDFs","files.filterImages":"Imagens","files.filterDocs":"Documentos","files.filterCollab":"Notas Colab","files.sourceCollab":"Das notas Colab","files.empty":"Nenhum arquivo ainda","files.emptyHint":"Envie arquivos para anexá-los à viagem","files.openTab":"Abrir em nova aba","files.confirm.delete":"Excluir este arquivo?","files.toast.deleted":"Arquivo excluído","files.toast.deleteError":"Falha ao excluir arquivo","files.sourcePlan":"Plano do dia","files.sourceBooking":"Reserva","files.attach":"Anexar","files.pasteHint":"Você também pode colar imagens da área de transferência (Ctrl+V)","files.trash":"Lixeira","files.trashEmpty":"A lixeira está vazia","files.emptyTrash":"Esvaziar lixeira","files.restore":"Restaurar","files.star":"Favoritar","files.unstar":"Remover favorito","files.assign":"Atribuir","files.assignTitle":"Atribuir arquivo","files.assignPlace":"Lugar","files.assignBooking":"Reserva","files.unassigned":"Não atribuído","files.unlink":"Remover vínculo","files.toast.trashed":"Movido para a lixeira","files.toast.restored":"Arquivo restaurado","files.toast.trashEmptied":"Lixeira esvaziada","files.toast.assigned":"Arquivo atribuído","files.toast.assignError":"Falha na atribuição","files.toast.restoreError":"Falha ao restaurar","files.confirm.permanentDelete":"Excluir permanentemente este arquivo? Não é possível desfazer.","files.confirm.emptyTrash":"Excluir permanentemente todos os arquivos na lixeira? Não é possível desfazer.","files.noteLabel":"Nota","files.notePlaceholder":"Adicione uma nota...","packing.title":"Lista de mala","packing.empty":"A lista de mala está vazia","packing.import":"Importar","packing.importTitle":"Importar lista de bagagem","packing.importHint":"Um item por linha. Formato: Categoria, Nome, Peso (g), Bolsa, checked/unchecked (opcional)","packing.importPlaceholder":`Higiene, Escova de dentes Roupas, Camisetas, 200 Documentos, Passaporte, , Mala de mão @@ -173,7 +173,7 @@ Eletrônicos, Carregador, 50, Mala, checked`,"packing.importCsv":"Carregar CSV/T Todos os dados atuais serão substituídos pelo backup.`,"backup.confirm.uploadRestore":`Enviar e restaurar o arquivo "{name}"? -Todos os dados atuais serão sobrescritos.`,"backup.confirm.delete":'Excluir o backup "{name}"?',"backup.toast.loadError":"Falha ao carregar backups","backup.toast.created":"Backup criado com sucesso","backup.toast.createError":"Falha ao criar backup","backup.toast.restored":"Backup restaurado. A página será recarregada…","backup.toast.restoreError":"Falha ao restaurar","backup.toast.uploadError":"Falha no envio","backup.toast.deleted":"Backup excluído","backup.toast.deleteError":"Falha ao excluir","backup.toast.downloadError":"Falha no download","backup.toast.settingsSaved":"Configurações de backup automático salvas","backup.toast.settingsError":"Falha ao salvar configurações","backup.auto.title":"Backup automático","backup.auto.subtitle":"Backup automático em agenda","backup.auto.enable":"Ativar backup automático","backup.auto.enableHint":"Backups serão criados automaticamente conforme a agenda escolhida","backup.auto.interval":"Intervalo","backup.auto.hour":"Executar no horário","backup.auto.hourHint":"Horário local do servidor (formato {format})","backup.auto.dayOfWeek":"Dia da semana","backup.auto.dayOfMonth":"Dia do mês","backup.auto.dayOfMonthHint":"Limitado a 1–28 para compatibilidade com todos os meses","backup.auto.scheduleSummary":"Agenda","backup.auto.summaryDaily":"Todos os dias às {hour}:00","backup.auto.summaryWeekly":"Toda {day} às {hour}:00","backup.auto.summaryMonthly":"Dia {day} de cada mês às {hour}:00","backup.auto.envLocked":"Docker","backup.auto.envLockedHint":"O backup automático é configurado via variáveis de ambiente Docker. Para alterar essas configurações, atualize o docker-compose.yml e reinicie o contêiner.","backup.auto.copyEnv":"Copiar variáveis de ambiente Docker","backup.auto.envCopied":"Variáveis de ambiente Docker copiadas para a área de transferência","backup.auto.keepLabel":"Excluir backups antigos após","backup.dow.sunday":"Dom","backup.dow.monday":"Seg","backup.dow.tuesday":"Ter","backup.dow.wednesday":"Qua","backup.dow.thursday":"Qui","backup.dow.friday":"Sex","backup.dow.saturday":"Sáb","backup.interval.hourly":"A cada hora","backup.interval.daily":"Diário","backup.interval.weekly":"Semanal","backup.interval.monthly":"Mensal","backup.keep.1day":"1 dia","backup.keep.3days":"3 dias","backup.keep.7days":"7 dias","backup.keep.14days":"14 dias","backup.keep.30days":"30 dias","backup.keep.forever":"Manter para sempre","photos.allDays":"Todos os dias","photos.noPhotos":"Nenhuma foto ainda","photos.uploadHint":"Envie suas fotos de viagem","photos.clickToSelect":"ou clique para selecionar","photos.linkPlace":"Vincular lugar","photos.noPlace":"Sem lugar","photos.uploadN":"Enviar {n} foto(s)","backup.restoreConfirmTitle":"Restaurar backup?","backup.restoreWarning":"Todos os dados atuais (viagens, lugares, usuários, envios) serão permanentemente substituídos pelo backup. Esta ação não pode ser desfeita.","backup.restoreTip":"Dica: crie um backup do estado atual antes de restaurar.","backup.restoreConfirm":"Sim, restaurar","pdf.travelPlan":"Plano de viagem","pdf.planned":"Planejado","pdf.costLabel":"Custo (EUR)","pdf.preview":"Pré-visualização do PDF","pdf.saveAsPdf":"Salvar como PDF","planner.places":"Lugares","planner.bookings":"Reservas","planner.packingList":"Lista de mala","planner.documents":"Documentos","planner.dayPlan":"Plano do dia","planner.reservations":"Reservas","planner.minTwoPlaces":"São necessários pelo menos 2 lugares com coordenadas","planner.noGeoPlaces":"Nenhum lugar com coordenadas disponível","planner.routeCalculated":"Rota calculada","planner.routeCalcFailed":"Não foi possível calcular a rota","planner.routeError":"Erro ao calcular a rota","planner.routeOptimized":"Rota otimizada","planner.reservationUpdated":"Reserva atualizada","planner.reservationAdded":"Reserva adicionada","planner.confirmDeleteReservation":"Excluir reserva?","planner.reservationDeleted":"Reserva excluída","planner.days":"Dias","planner.allPlaces":"Todos os lugares","planner.totalPlaces":"{n} lugares no total","planner.noDaysPlanned":"Nenhum dia planejado ainda","planner.editTrip":"Editar viagem →","planner.placeOne":"1 lugar","planner.placeN":"{n} lugares","planner.addNote":"Adicionar nota","planner.noEntries":"Nenhuma entrada neste dia","planner.addPlace":"Adicionar lugar/atividade","planner.addPlaceShort":"+ Adicionar lugar/atividade","planner.resPending":"Reserva pendente · ","planner.resConfirmed":"Reserva confirmada · ","planner.notePlaceholder":"Nota…","planner.noteTimePlaceholder":"Horário (opcional)","planner.noteExamplePlaceholder":"ex.: metrô às 14:30 da estação central, barco do cais 7, pausa para almoço…","planner.totalCost":"Custo total","planner.searchPlaces":"Buscar lugares…","planner.allCategories":"Todas as categorias","planner.noPlacesFound":"Nenhum lugar encontrado","planner.addFirstPlace":"Adicionar primeiro lugar","planner.noReservations":"Nenhuma reserva","planner.addFirstReservation":"Adicionar primeira reserva","planner.new":"Novo","planner.addToDay":"+ Dia","planner.calculating":"Calculando…","planner.route":"Rota","planner.optimize":"Otimizar","planner.openGoogleMaps":"Abrir no Google Maps","planner.selectDayHint":"Selecione um dia na lista à esquerda para ver o plano do dia","planner.noPlacesForDay":"Nenhum lugar neste dia ainda","planner.addPlacesLink":"Adicionar lugares →","planner.minTotal":"mín. total","planner.noReservation":"Sem reserva","planner.removeFromDay":"Remover do dia","planner.addToThisDay":"Adicionar ao dia","planner.overview":"Visão geral","planner.noDays":"Nenhum dia ainda","planner.editTripToAddDays":"Edite a viagem para adicionar dias","planner.dayCount":"{n} dias","planner.clickToUnlock":"Clique para desbloquear","planner.keepPosition":"Manter posição durante a otimização da rota","planner.dayDetails":"Detalhes do dia","planner.dayN":"Dia {n}","stats.countries":"Países","stats.cities":"Cidades","stats.trips":"Viagens","stats.places":"Lugares","stats.worldProgress":"Progresso no mundo","stats.visited":"visitados","stats.remaining":"restantes","stats.visitedCountries":"Países visitados","day.precipProb":"Probabilidade de chuva","day.precipitation":"Precipitação","day.wind":"Vento","day.sunrise":"Nascer do sol","day.sunset":"Pôr do sol","day.hourlyForecast":"Previsão por hora","day.climateHint":"Médias históricas — previsão real disponível até 16 dias desta data.","day.noWeather":"Sem dados meteorológicos. Adicione um lugar com coordenadas.","day.overview":"Resumo do dia","day.accommodation":"Hospedagem","day.addAccommodation":"Adicionar hospedagem","day.hotelDayRange":"Aplicar aos dias","day.noPlacesForHotel":"Adicione lugares à viagem primeiro","day.allDays":"Todos","day.checkIn":"Check-in","day.checkOut":"Check-out","day.confirmation":"Confirmação","day.editAccommodation":"Editar hospedagem","day.reservations":"Reservas","collab.tabs.chat":"Chat","collab.tabs.notes":"Notas","collab.tabs.polls":"Enquetes","collab.whatsNext.title":"Próximos passos","collab.whatsNext.today":"Hoje","collab.whatsNext.tomorrow":"Amanhã","collab.whatsNext.empty":"Nenhuma atividade próxima","collab.whatsNext.until":"até","collab.whatsNext.emptyHint":"Atividades com horário aparecerão aqui","collab.chat.send":"Enviar","collab.chat.placeholder":"Digite uma mensagem...","collab.chat.empty":"Inicie a conversa","collab.chat.emptyHint":"As mensagens são compartilhadas com todos os membros da viagem","collab.chat.emptyDesc":"Compartilhe ideias, planos e atualizações com o grupo","collab.chat.today":"Hoje","collab.chat.yesterday":"Ontem","collab.chat.deletedMessage":"apagou uma mensagem","collab.chat.reply":"Responder","collab.chat.loadMore":"Carregar mensagens antigas","collab.chat.justNow":"agora mesmo","collab.chat.minutesAgo":"há {n} min","collab.chat.hoursAgo":"há {n} h","collab.notes.title":"Notas","collab.notes.new":"Nova nota","collab.notes.empty":"Nenhuma nota ainda","collab.notes.emptyHint":"Comece a registrar ideias e planos","collab.notes.all":"Todas","collab.notes.titlePlaceholder":"Título da nota","collab.notes.contentPlaceholder":"Escreva algo...","collab.notes.categoryPlaceholder":"Categoria","collab.notes.newCategory":"Nova categoria...","collab.notes.category":"Categoria","collab.notes.noCategory":"Sem categoria","collab.notes.color":"Cor","collab.notes.save":"Salvar","collab.notes.cancel":"Cancelar","collab.notes.edit":"Editar","collab.notes.delete":"Excluir","collab.notes.pin":"Fixar","collab.notes.unpin":"Desafixar","collab.notes.daysAgo":"há {n} d","collab.notes.categorySettings":"Gerenciar categorias","collab.notes.create":"Criar","collab.notes.website":"Site","collab.notes.websitePlaceholder":"https://...","collab.notes.attachFiles":"Anexar arquivos","collab.notes.noCategoriesYet":"Nenhuma categoria ainda","collab.notes.emptyDesc":"Crie uma nota para começar","collab.polls.title":"Enquetes","collab.polls.new":"Nova enquete","collab.polls.empty":"Nenhuma enquete ainda","collab.polls.emptyHint":"Pergunte ao grupo e votem juntos","collab.polls.question":"Pergunta","collab.polls.questionPlaceholder":"O que vamos fazer?","collab.polls.addOption":"+ Adicionar opção","collab.polls.optionPlaceholder":"Opção {n}","collab.polls.create":"Criar enquete","collab.polls.close":"Encerrar","collab.polls.closed":"Encerrada","collab.polls.votes":"{n} votos","collab.polls.vote":"{n} voto","collab.polls.multipleChoice":"Múltipla escolha","collab.polls.multiChoice":"Múltipla escolha","collab.polls.deadline":"Prazo","collab.polls.option":"Opção","collab.polls.options":"Opções","collab.polls.delete":"Excluir","collab.polls.closedSection":"Encerradas","memories.title":"Fotos","memories.notConnected":"Immich não conectado","memories.notConnectedHint":"Conecte sua instância Immich nas Configurações para ver suas fotos de viagem aqui.","memories.noDates":"Adicione datas à sua viagem para carregar fotos.","memories.noPhotos":"Nenhuma foto encontrada","memories.noPhotosHint":"Nenhuma foto encontrada no Immich para o período desta viagem.","memories.photosFound":"fotos","memories.fromOthers":"de outros","memories.sharePhotos":"Compartilhar fotos","memories.sharing":"Compartilhando","memories.reviewTitle":"Revise suas fotos","memories.reviewHint":"Clique nas fotos para excluí-las do compartilhamento.","memories.shareCount":"Compartilhar {count} fotos","memories.immichUrl":"URL do servidor Immich","memories.immichApiKey":"Chave da API","memories.testConnection":"Testar conexão","memories.testFirst":"Teste a conexão primeiro","memories.connected":"Conectado","memories.disconnected":"Não conectado","memories.connectionSuccess":"Conectado ao Immich","memories.connectionError":"Não foi possível conectar ao Immich","memories.saved":"Configurações do Immich salvas","memories.addPhotos":"Adicionar fotos","memories.linkAlbum":"Vincular álbum","memories.selectAlbum":"Selecionar álbum do Immich","memories.noAlbums":"Nenhum álbum encontrado","memories.syncAlbum":"Sincronizar álbum","memories.unlinkAlbum":"Desvincular","memories.photos":"fotos","memories.selectPhotos":"Selecionar fotos do Immich","memories.selectHint":"Toque nas fotos para selecioná-las.","memories.selected":"selecionadas","memories.addSelected":"Adicionar {count} fotos","memories.alreadyAdded":"Já adicionada","memories.private":"Privado","memories.stopSharing":"Parar de compartilhar","memories.oldest":"Mais antigas","memories.newest":"Mais recentes","memories.allLocations":"Todos os locais","memories.tripDates":"Datas da viagem","memories.allPhotos":"Todas as fotos","memories.confirmShareTitle":"Compartilhar com membros da viagem?","memories.confirmShareHint":"{count} fotos serão visíveis para todos os membros desta viagem. Você pode tornar fotos individuais privadas depois.","memories.confirmShareButton":"Compartilhar fotos","admin.tabs.permissions":"Permissões","admin.tabs.mcpTokens":"Tokens MCP","admin.mcpTokens.title":"Tokens MCP","admin.mcpTokens.subtitle":"Gerenciar tokens de API de todos os usuários","admin.mcpTokens.owner":"Proprietário","admin.mcpTokens.tokenName":"Nome do Token","admin.mcpTokens.created":"Criado","admin.mcpTokens.lastUsed":"Último uso","admin.mcpTokens.never":"Nunca","admin.mcpTokens.empty":"Nenhum token MCP foi criado ainda","admin.mcpTokens.deleteTitle":"Excluir Token","admin.mcpTokens.deleteMessage":"Isso revogará o token imediatamente. O usuário perderá o acesso MCP por este token.","admin.mcpTokens.deleteSuccess":"Token excluído","admin.mcpTokens.deleteError":"Falha ao excluir token","admin.mcpTokens.loadError":"Falha ao carregar tokens","perm.title":"Configurações de Permissões","perm.subtitle":"Controle quem pode realizar ações no aplicativo","perm.saved":"Configurações de permissões salvas","perm.resetDefaults":"Restaurar padrões","perm.customized":"personalizado","perm.level.admin":"Apenas administrador","perm.level.tripOwner":"Dono da viagem","perm.level.tripMember":"Membros da viagem","perm.level.everybody":"Todos","perm.cat.trip":"Gerenciamento de Viagens","perm.cat.members":"Gerenciamento de Membros","perm.cat.files":"Arquivos","perm.cat.content":"Conteúdo e Cronograma","perm.cat.extras":"Orçamento, Bagagem e Colaboração","perm.action.trip_create":"Criar viagens","perm.action.trip_edit":"Editar detalhes da viagem","perm.action.trip_delete":"Excluir viagens","perm.action.trip_archive":"Arquivar / desarquivar viagens","perm.action.trip_cover_upload":"Enviar imagem de capa","perm.action.member_manage":"Adicionar / remover membros","perm.action.file_upload":"Enviar arquivos","perm.action.file_edit":"Editar metadados do arquivo","perm.action.file_delete":"Excluir arquivos","perm.action.place_edit":"Adicionar / editar / excluir lugares","perm.action.day_edit":"Editar dias, notas e atribuições","perm.action.reservation_edit":"Gerenciar reservas","perm.action.budget_edit":"Gerenciar orçamento","perm.action.packing_edit":"Gerenciar listas de bagagem","perm.action.collab_edit":"Colaboração (notas, enquetes, chat)","perm.action.share_manage":"Gerenciar links de compartilhamento","perm.actionHint.trip_create":"Quem pode criar novas viagens","perm.actionHint.trip_edit":"Quem pode alterar nome, datas, descrição e moeda da viagem","perm.actionHint.trip_delete":"Quem pode excluir permanentemente uma viagem","perm.actionHint.trip_archive":"Quem pode arquivar ou desarquivar uma viagem","perm.actionHint.trip_cover_upload":"Quem pode enviar ou alterar a imagem de capa","perm.actionHint.member_manage":"Quem pode convidar ou remover membros da viagem","perm.actionHint.file_upload":"Quem pode enviar arquivos para uma viagem","perm.actionHint.file_edit":"Quem pode editar descrições e links dos arquivos","perm.actionHint.file_delete":"Quem pode mover arquivos para a lixeira ou excluí-los permanentemente","perm.actionHint.place_edit":"Quem pode adicionar, editar ou excluir lugares","perm.actionHint.day_edit":"Quem pode editar dias, notas dos dias e atribuições de lugares","perm.actionHint.reservation_edit":"Quem pode criar, editar ou excluir reservas","perm.actionHint.budget_edit":"Quem pode criar, editar ou excluir itens do orçamento","perm.actionHint.packing_edit":"Quem pode gerenciar itens de bagagem e malas","perm.actionHint.collab_edit":"Quem pode criar notas, enquetes e enviar mensagens","perm.actionHint.share_manage":"Quem pode criar ou excluir links de compartilhamento públicos"},CM={"common.save":"Uložit","common.cancel":"Zrušit","common.delete":"Smazat","common.edit":"Upravit","common.add":"Přidat","common.loading":"Načítání...","common.import":"Importovat","common.error":"Chyba","common.back":"Zpět","common.all":"Vše","common.close":"Zavřít","common.open":"Otevřít","common.upload":"Nahrát","common.search":"Hledat","common.confirm":"Potvrdit","common.ok":"OK","common.yes":"Ano","common.no":"Ne","common.or":"nebo","common.none":"Žádné","common.date":"Datum","common.rename":"Přejmenovat","common.name":"Jméno","common.email":"E-mail","common.password":"Heslo","common.saving":"Ukládání...","common.saved":"Uloženo","trips.reminder":"Připomínka","trips.reminderNone":"Žádná","trips.reminderDay":"den","trips.reminderDays":"dní","trips.reminderCustom":"Vlastní","trips.reminderDaysBefore":"dní před odjezdem","trips.reminderDisabledHint":"Připomínky výletů jsou zakázány. Povolte je v Správa > Nastavení > Oznámení.","common.update":"Aktualizovat","common.change":"Změnit","common.uploading":"Nahrávání…","common.backToPlanning":"Zpět k plánování","common.reset":"Resetovat","nav.trip":"Cesta","nav.share":"Sdílet","nav.settings":"Nastavení","nav.admin":"Administrace","nav.logout":"Odhlásit se","nav.lightMode":"Světlý režim","nav.darkMode":"Tmavý režim","nav.autoMode":"Automatický režim","nav.administrator":"Administrátor","nav.myTrips":"Moje cesty","dashboard.title":"Moje cesty","dashboard.subtitle.loading":"Načítání cest...","dashboard.subtitle.trips":"{count} cest ({archived} archivováno)","dashboard.subtitle.empty":"Začněte svou první cestu","dashboard.subtitle.activeOne":"{count} aktivní cesta","dashboard.subtitle.activeMany":"{count} aktivních cest","dashboard.subtitle.archivedSuffix":" · {count} archivováno","dashboard.newTrip":"Nová cesta","dashboard.gridView":"Mřížka","dashboard.listView":"Seznam","dashboard.currency":"Měna","dashboard.timezone":"Časová pásma","dashboard.localTime":"Místní čas","dashboard.timezoneCustomTitle":"Vlastní pásmo","dashboard.timezoneCustomLabelPlaceholder":"Popisek (volitelné)","dashboard.timezoneCustomTzPlaceholder":"např. America/New_York","dashboard.timezoneCustomAdd":"Přidat","dashboard.timezoneCustomErrorEmpty":"Zadejte identifikátor pásma","dashboard.timezoneCustomErrorInvalid":"Neplatné pásmo. Použijte formát jako např. Europe/Prague","dashboard.timezoneCustomErrorDuplicate":"Již bylo přidáno","dashboard.emptyTitle":"Zatím žádné cesty","dashboard.emptyText":"Vytvořte svou první cestu a začněte plánovat!","dashboard.emptyButton":"Vytvořit první cestu","dashboard.nextTrip":"Další cesta","dashboard.shared":"Sdílené","dashboard.sharedBy":"Sdílí {name}","dashboard.days":"Dní","dashboard.places":"Míst","dashboard.archive":"Archivovat","dashboard.restore":"Obnovit","dashboard.archived":"Archivováno","dashboard.status.ongoing":"Probíhající","dashboard.status.today":"Dnes","dashboard.status.tomorrow":"Zítra","dashboard.status.past":"Proběhlé","dashboard.status.daysLeft":"zbývá {count} dní","dashboard.toast.loadError":"Nepodařilo se načíst cesty","dashboard.toast.created":"Cesta byla úspěšně vytvořena!","dashboard.toast.createError":"Nepodařilo se vytvořit cestu","dashboard.toast.updated":"Cesta byla aktualizována!","dashboard.toast.updateError":"Nepodařilo se aktualizovat cestu","dashboard.toast.deleted":"Cesta byla smazána","dashboard.toast.deleteError":"Nepodařilo se smazat cestu","dashboard.toast.archived":"Cesta byla archivována","dashboard.toast.archiveError":"Nepodařilo se archivovat cestu","dashboard.toast.restored":"Cesta byla obnovena","dashboard.toast.restoreError":"Nepodařilo se obnovit cestu","dashboard.confirm.delete":"Smazat cestu „{title}“? Všechna místa a plány budou trvale smazány.","dashboard.editTrip":"Upravit cestu","dashboard.createTrip":"Vytvořit novou cestu","dashboard.tripTitle":"Název","dashboard.tripTitlePlaceholder":"např. Léto v Japonsku","dashboard.tripDescription":"Popis","dashboard.tripDescriptionPlaceholder":"O čem je tato cesta?","dashboard.startDate":"Datum začátku","dashboard.endDate":"Datum konce","dashboard.noDateHint":"Datum nezadáno – výchozí délka nastavena na 7 dní. Toto lze kdykoli změnit.","dashboard.coverImage":"Úvodní obrázek","dashboard.addCoverImage":"Vybrat úvodní obrázek (nebo přetáhnout sem)","dashboard.addMembers":"Spolucestující","dashboard.addMember":"Přidat člena","dashboard.coverSaved":"Úvodní obrázek uložen","dashboard.coverUploadError":"Nahrávání se nezdařilo","dashboard.coverRemoveError":"Odstranění se nezdařilo","dashboard.titleRequired":"Název je povinný","dashboard.endDateError":"Datum konce musí být po datu začátku","settings.title":"Nastavení","settings.subtitle":"Upravte své osobní nastavení","settings.map":"Mapy","settings.mapTemplate":"Šablona mapy","settings.mapTemplatePlaceholder.select":"Vyberte šablonu...","settings.mapDefaultHint":"Ponechte prázdné pro OpenStreetMap (výchozí)","settings.mapTemplatePlaceholder":"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png","settings.mapHint":"URL šablony pro mapové dlaždice","settings.latitude":"Zeměpisná šířka","settings.longitude":"Zeměpisná délka","settings.saveMap":"Uložit nastavení mapy","settings.apiKeys":"API klíče","settings.mapsKey":"Google Maps API klíč","settings.mapsKeyHint":"Pro vyhledávání míst. Vyžaduje Places API (New). Získáte na console.cloud.google.com","settings.weatherKey":"OpenWeatherMap API klíč","settings.weatherKeyHint":"Pro předpověď počasí. Zdarma na openweathermap.org/api","settings.keyPlaceholder":"Vložte klíč...","settings.configured":"Nastaveno","settings.saveKeys":"Uložit klíče","settings.display":"Zobrazení","settings.colorMode":"Barevné schéma","settings.light":"Světlé","settings.dark":"Tmavé","settings.auto":"Automatické","settings.language":"Jazyk","settings.temperature":"Jednotky teploty","settings.timeFormat":"Formát času","settings.routeCalculation":"Výpočet trasy","settings.blurBookingCodes":"Skrýt rezervační kódy","settings.notifications":"Oznámení","settings.notifyTripInvite":"Pozvánky na cesty","settings.notifyBookingChange":"Změny rezervací","settings.notifyTripReminder":"Připomínky cest","settings.notifyVacayInvite":"Pozvánky k propojení Vacay","settings.notifyPhotosShared":"Sdílené fotky (Immich)","settings.notifyCollabMessage":"Zprávy v chatu (Collab)","settings.notifyPackingTagged":"Seznam balení: přiřazení","settings.notifyWebhook":"Webhook oznámení","settings.notificationsDisabled":"Oznámení nejsou nakonfigurována. Požádejte správce o aktivaci e-mailových nebo webhookových oznámení.","settings.notificationsActive":"Aktivní kanál","settings.notificationsManagedByAdmin":"Události oznámení jsou konfigurovány administrátorem.","settings.on":"Zapnuto","settings.off":"Vypnuto","settings.mcp.title":"Konfigurace MCP","settings.mcp.endpoint":"MCP endpoint","settings.mcp.clientConfig":"Konfigurace klienta","settings.mcp.clientConfigHint":"Nahraďte API tokenem ze seznamu níže. Cestu k npx může být nutné upravit pro váš systém (např. C:\\PROGRA~1\\nodejs\\npx.cmd ve Windows).","settings.mcp.copy":"Kopírovat","settings.mcp.copied":"Zkopírováno!","settings.mcp.apiTokens":"API tokeny","settings.mcp.createToken":"Vytvořit nový token","settings.mcp.noTokens":"Zatím žádné tokeny. Vytvořte jeden pro připojení MCP klientů.","settings.mcp.tokenCreatedAt":"Vytvořen","settings.mcp.tokenUsedAt":"Použit","settings.mcp.deleteTokenTitle":"Smazat token","settings.mcp.deleteTokenMessage":"Tento token přestane okamžitě fungovat. Všichni MCP klienti, kteří ho používají, ztratí přístup.","settings.mcp.modal.createTitle":"Vytvořit API token","settings.mcp.modal.tokenName":"Název tokenu","settings.mcp.modal.tokenNamePlaceholder":"např. Claude Desktop, Pracovní notebook","settings.mcp.modal.creating":"Vytváření…","settings.mcp.modal.create":"Vytvořit token","settings.mcp.modal.createdTitle":"Token vytvořen","settings.mcp.modal.createdWarning":"Tento token bude zobrazen pouze jednou. Zkopírujte a uložte ho nyní — nelze ho obnovit.","settings.mcp.modal.done":"Hotovo","settings.mcp.toast.created":"Token vytvořen","settings.mcp.toast.createError":"Nepodařilo se vytvořit token","settings.mcp.toast.deleted":"Token smazán","settings.mcp.toast.deleteError":"Nepodařilo se smazat token","settings.account":"Účet","settings.username":"Uživatelské jméno","settings.email":"E-mail","settings.role":"Role","settings.roleAdmin":"Administrátor","settings.oidcLinked":"Propojeno přes","settings.changePassword":"Změnit heslo","settings.currentPassword":"Současné heslo","settings.currentPasswordRequired":"Současné heslo je vyžadováno","settings.newPassword":"Nové heslo","settings.confirmPassword":"Potvrdit nové heslo","settings.updatePassword":"Aktualizovat heslo","settings.passwordRequired":"Zadejte prosím současné i nové heslo","settings.passwordTooShort":"Heslo musí mít alespoň 8 znaků","settings.passwordMismatch":"Hesla se neshodují","settings.passwordWeak":"Heslo musí obsahovat velké a malé písmeno, číslici a speciální znak","settings.passwordChanged":"Heslo bylo úspěšně změněno","settings.deleteAccount":"Smazat účet","settings.deleteAccountTitle":"Smazat váš účet?","settings.deleteAccountWarning":"Váš účet a všechny vaše cesty, místa a soubory budou trvale smazány. Tuto akci nelze vrátit.","settings.deleteAccountConfirm":"Smazat natrvalo","settings.deleteBlockedTitle":"Účet nelze smazat","settings.deleteBlockedMessage":"Jste jediným administrátorem. Před smazáním svého účtu předejte roli administrátora jinému uživateli.","settings.roleUser":"Uživatel","settings.saveProfile":"Uložit profil","settings.toast.mapSaved":"Nastavení map uloženo","settings.toast.keysSaved":"API klíče uloženy","settings.toast.displaySaved":"Nastavení zobrazení uloženo","settings.toast.profileSaved":"Profil byl uložen","settings.uploadAvatar":"Nahrát profilový obrázek","settings.removeAvatar":"Odebrat profilový obrázek","settings.avatarUploaded":"Profilový obrázek byl aktualizován","settings.avatarRemoved":"Profilový obrázek byl odstraněn","settings.avatarError":"Nahrávání se nezdařilo","settings.mfa.title":"Dvoufaktorové ověření (2FA)","settings.mfa.description":"Přidá druhý stupeň zabezpečení při přihlašování e-mailem a heslem. Použijte aplikaci (Google Authenticator, Authy apod.).","settings.mfa.requiredByPolicy":"Správce vyžaduje dvoufázové ověření. Nejdřív níže nastavte aplikaci autentikátoru.","settings.mfa.backupTitle":"Záložní kódy","settings.mfa.backupDescription":"Použijte tyto jednorázové kódy, pokud ztratíte přístup k autentizační aplikaci.","settings.mfa.backupWarning":"Uložte si je hned. Každý kód lze použít pouze jednou.","settings.mfa.backupCopy":"Kopírovat kódy","settings.mfa.backupDownload":"Stáhnout TXT","settings.mfa.backupPrint":"Tisk / PDF","settings.mfa.backupCopied":"Záložní kódy zkopírovány","settings.mfa.enabled":"2FA je pro váš účet aktivní.","settings.mfa.disabled":"2FA není aktivní.","settings.mfa.setup":"Nastavit autentizační aplikaci","settings.mfa.scanQr":"Naskenujte tento QR kód ve vaší aplikaci nebo zadejte kód ručně.","settings.mfa.secretLabel":"Tajný klíč (pro ruční zadání)","settings.mfa.codePlaceholder":"6místný kód","settings.mfa.enable":"Zapnout 2FA","settings.mfa.cancelSetup":"Zrušit","settings.mfa.disableTitle":"Vypnout 2FA","settings.mfa.disableHint":"Zadejte své heslo k účtu a aktuální kód z aplikace.","settings.mfa.disable":"Vypnout 2FA","settings.mfa.toastEnabled":"Dvoufaktorové ověření bylo zapnuto","settings.mfa.toastDisabled":"Dvoufaktorové ověření bylo vypnuto","settings.mfa.demoBlocked":"Není k dispozici v demo režimu","admin.notifications.title":"Oznámení","admin.notifications.hint":"Vyberte kanál oznámení. Současně může být aktivní pouze jeden.","admin.notifications.none":"Vypnuto","admin.notifications.email":"E-mail (SMTP)","admin.notifications.webhook":"Webhook","admin.notifications.events":"Události oznámení","admin.notifications.eventsHint":"Vyberte, které události spouštějí oznámení pro všechny uživatele.","admin.notifications.configureFirst":"Nejprve nakonfigurujte nastavení SMTP nebo webhooku níže, poté povolte události.","admin.notifications.save":"Uložit nastavení oznámení","admin.notifications.saved":"Nastavení oznámení uloženo","admin.notifications.testWebhook":"Odeslat testovací webhook","admin.notifications.testWebhookSuccess":"Testovací webhook úspěšně odeslán","admin.notifications.testWebhookFailed":"Odeslání testovacího webhooku se nezdařilo","admin.smtp.title":"E-mail a oznámení","admin.smtp.hint":"Konfigurace SMTP pro odesílání e-mailových oznámení.","admin.smtp.testButton":"Odeslat testovací e-mail","admin.webhook.hint":"Odesílat oznámení na externí webhook (Discord, Slack atd.).","admin.smtp.testSuccess":"Testovací e-mail byl úspěšně odeslán","admin.smtp.testFailed":"Odeslání testovacího e-mailu se nezdařilo","dayplan.icsTooltip":"Exportovat kalendář (ICS)","share.linkTitle":"Veřejný odkaz","share.linkHint":"Vytvořte odkaz, kterým si může kdokoli prohlédnout tuto cestu bez přihlášení. Pouze pro čtení — úpravy nejsou možné.","share.createLink":"Vytvořit odkaz","share.deleteLink":"Smazat odkaz","share.createError":"Nepodařilo se vytvořit odkaz","common.copy":"Kopírovat","common.copied":"Zkopírováno","share.permMap":"Mapa a plán","share.permBookings":"Rezervace","share.permPacking":"Balení","shared.expired":"Odkaz vypršel nebo je neplatný","shared.expiredHint":"Tento sdílený odkaz na cestu již není aktivní.","shared.readOnly":"Sdílené zobrazení – pouze pro čtení","shared.tabPlan":"Plán","shared.tabBookings":"Rezervace","shared.tabPacking":"Balení","shared.tabBudget":"Rozpočet","shared.tabChat":"Chat","shared.days":"dní","shared.places":"míst","shared.other":"Ostatní","shared.totalBudget":"Celkový rozpočet","shared.messages":"zpráv","shared.sharedVia":"Sdíleno přes","shared.confirmed":"Potvrzeno","shared.pending":"Čeká na potvrzení","share.permBudget":"Rozpočet","share.permCollab":"Chat","login.error":"Přihlášení se nezdařilo. Zkontrolujte prosím své údaje.","login.tagline":`Vaše cesty. +Todos os dados atuais serão sobrescritos.`,"backup.confirm.delete":'Excluir o backup "{name}"?',"backup.toast.loadError":"Falha ao carregar backups","backup.toast.created":"Backup criado com sucesso","backup.toast.createError":"Falha ao criar backup","backup.toast.restored":"Backup restaurado. A página será recarregada…","backup.toast.restoreError":"Falha ao restaurar","backup.toast.uploadError":"Falha no envio","backup.toast.deleted":"Backup excluído","backup.toast.deleteError":"Falha ao excluir","backup.toast.downloadError":"Falha no download","backup.toast.settingsSaved":"Configurações de backup automático salvas","backup.toast.settingsError":"Falha ao salvar configurações","backup.auto.title":"Backup automático","backup.auto.subtitle":"Backup automático em agenda","backup.auto.enable":"Ativar backup automático","backup.auto.enableHint":"Backups serão criados automaticamente conforme a agenda escolhida","backup.auto.interval":"Intervalo","backup.auto.hour":"Executar no horário","backup.auto.hourHint":"Horário local do servidor (formato {format})","backup.auto.dayOfWeek":"Dia da semana","backup.auto.dayOfMonth":"Dia do mês","backup.auto.dayOfMonthHint":"Limitado a 1–28 para compatibilidade com todos os meses","backup.auto.scheduleSummary":"Agenda","backup.auto.summaryDaily":"Todos os dias às {hour}:00","backup.auto.summaryWeekly":"Toda {day} às {hour}:00","backup.auto.summaryMonthly":"Dia {day} de cada mês às {hour}:00","backup.auto.envLocked":"Docker","backup.auto.envLockedHint":"O backup automático é configurado via variáveis de ambiente Docker. Para alterar essas configurações, atualize o docker-compose.yml e reinicie o contêiner.","backup.auto.copyEnv":"Copiar variáveis de ambiente Docker","backup.auto.envCopied":"Variáveis de ambiente Docker copiadas para a área de transferência","backup.auto.keepLabel":"Excluir backups antigos após","backup.dow.sunday":"Dom","backup.dow.monday":"Seg","backup.dow.tuesday":"Ter","backup.dow.wednesday":"Qua","backup.dow.thursday":"Qui","backup.dow.friday":"Sex","backup.dow.saturday":"Sáb","backup.interval.hourly":"A cada hora","backup.interval.daily":"Diário","backup.interval.weekly":"Semanal","backup.interval.monthly":"Mensal","backup.keep.1day":"1 dia","backup.keep.3days":"3 dias","backup.keep.7days":"7 dias","backup.keep.14days":"14 dias","backup.keep.30days":"30 dias","backup.keep.forever":"Manter para sempre","photos.allDays":"Todos os dias","photos.noPhotos":"Nenhuma foto ainda","photos.uploadHint":"Envie suas fotos de viagem","photos.clickToSelect":"ou clique para selecionar","photos.linkPlace":"Vincular lugar","photos.noPlace":"Sem lugar","photos.uploadN":"Enviar {n} foto(s)","backup.restoreConfirmTitle":"Restaurar backup?","backup.restoreWarning":"Todos os dados atuais (viagens, lugares, usuários, envios) serão permanentemente substituídos pelo backup. Esta ação não pode ser desfeita.","backup.restoreTip":"Dica: crie um backup do estado atual antes de restaurar.","backup.restoreConfirm":"Sim, restaurar","pdf.travelPlan":"Plano de viagem","pdf.planned":"Planejado","pdf.costLabel":"Custo (EUR)","pdf.preview":"Pré-visualização do PDF","pdf.saveAsPdf":"Salvar como PDF","planner.places":"Lugares","planner.bookings":"Reservas","planner.packingList":"Lista de mala","planner.documents":"Documentos","planner.dayPlan":"Plano do dia","planner.reservations":"Reservas","planner.minTwoPlaces":"São necessários pelo menos 2 lugares com coordenadas","planner.noGeoPlaces":"Nenhum lugar com coordenadas disponível","planner.routeCalculated":"Rota calculada","planner.routeCalcFailed":"Não foi possível calcular a rota","planner.routeError":"Erro ao calcular a rota","planner.routeOptimized":"Rota otimizada","planner.reservationUpdated":"Reserva atualizada","planner.reservationAdded":"Reserva adicionada","planner.confirmDeleteReservation":"Excluir reserva?","planner.reservationDeleted":"Reserva excluída","planner.days":"Dias","planner.allPlaces":"Todos os lugares","planner.totalPlaces":"{n} lugares no total","planner.noDaysPlanned":"Nenhum dia planejado ainda","planner.editTrip":"Editar viagem →","planner.placeOne":"1 lugar","planner.placeN":"{n} lugares","planner.addNote":"Adicionar nota","planner.noEntries":"Nenhuma entrada neste dia","planner.addPlace":"Adicionar lugar/atividade","planner.addPlaceShort":"+ Adicionar lugar/atividade","planner.resPending":"Reserva pendente · ","planner.resConfirmed":"Reserva confirmada · ","planner.notePlaceholder":"Nota…","planner.noteTimePlaceholder":"Horário (opcional)","planner.noteExamplePlaceholder":"ex.: metrô às 14:30 da estação central, barco do cais 7, pausa para almoço…","planner.totalCost":"Custo total","planner.searchPlaces":"Buscar lugares…","planner.allCategories":"Todas as categorias","planner.noPlacesFound":"Nenhum lugar encontrado","planner.addFirstPlace":"Adicionar primeiro lugar","planner.noReservations":"Nenhuma reserva","planner.addFirstReservation":"Adicionar primeira reserva","planner.new":"Novo","planner.addToDay":"+ Dia","planner.calculating":"Calculando…","planner.route":"Rota","planner.optimize":"Otimizar","planner.openGoogleMaps":"Abrir no Google Maps","planner.selectDayHint":"Selecione um dia na lista à esquerda para ver o plano do dia","planner.noPlacesForDay":"Nenhum lugar neste dia ainda","planner.addPlacesLink":"Adicionar lugares →","planner.minTotal":"mín. total","planner.noReservation":"Sem reserva","planner.removeFromDay":"Remover do dia","planner.addToThisDay":"Adicionar ao dia","planner.overview":"Visão geral","planner.noDays":"Nenhum dia ainda","planner.editTripToAddDays":"Edite a viagem para adicionar dias","planner.dayCount":"{n} dias","planner.clickToUnlock":"Clique para desbloquear","planner.keepPosition":"Manter posição durante a otimização da rota","planner.dayDetails":"Detalhes do dia","planner.dayN":"Dia {n}","stats.countries":"Países","stats.cities":"Cidades","stats.trips":"Viagens","stats.places":"Lugares","stats.worldProgress":"Progresso no mundo","stats.visited":"visitados","stats.remaining":"restantes","stats.visitedCountries":"Países visitados","day.precipProb":"Probabilidade de chuva","day.precipitation":"Precipitação","day.wind":"Vento","day.sunrise":"Nascer do sol","day.sunset":"Pôr do sol","day.hourlyForecast":"Previsão por hora","day.climateHint":"Médias históricas — previsão real disponível até 16 dias desta data.","day.noWeather":"Sem dados meteorológicos. Adicione um lugar com coordenadas.","day.overview":"Resumo do dia","day.accommodation":"Hospedagem","day.addAccommodation":"Adicionar hospedagem","day.hotelDayRange":"Aplicar aos dias","day.noPlacesForHotel":"Adicione lugares à viagem primeiro","day.allDays":"Todos","day.checkIn":"Check-in","day.checkOut":"Check-out","day.confirmation":"Confirmação","day.editAccommodation":"Editar hospedagem","day.reservations":"Reservas","collab.tabs.chat":"Chat","collab.tabs.notes":"Notas","collab.tabs.polls":"Enquetes","collab.whatsNext.title":"Próximos passos","collab.whatsNext.today":"Hoje","collab.whatsNext.tomorrow":"Amanhã","collab.whatsNext.empty":"Nenhuma atividade próxima","collab.whatsNext.until":"até","collab.whatsNext.emptyHint":"Atividades com horário aparecerão aqui","collab.chat.send":"Enviar","collab.chat.placeholder":"Digite uma mensagem...","collab.chat.empty":"Inicie a conversa","collab.chat.emptyHint":"As mensagens são compartilhadas com todos os membros da viagem","collab.chat.emptyDesc":"Compartilhe ideias, planos e atualizações com o grupo","collab.chat.today":"Hoje","collab.chat.yesterday":"Ontem","collab.chat.deletedMessage":"apagou uma mensagem","collab.chat.reply":"Responder","collab.chat.loadMore":"Carregar mensagens antigas","collab.chat.justNow":"agora mesmo","collab.chat.minutesAgo":"há {n} min","collab.chat.hoursAgo":"há {n} h","collab.notes.title":"Notas","collab.notes.new":"Nova nota","collab.notes.empty":"Nenhuma nota ainda","collab.notes.emptyHint":"Comece a registrar ideias e planos","collab.notes.all":"Todas","collab.notes.titlePlaceholder":"Título da nota","collab.notes.contentPlaceholder":"Escreva algo...","collab.notes.categoryPlaceholder":"Categoria","collab.notes.newCategory":"Nova categoria...","collab.notes.category":"Categoria","collab.notes.noCategory":"Sem categoria","collab.notes.color":"Cor","collab.notes.save":"Salvar","collab.notes.cancel":"Cancelar","collab.notes.edit":"Editar","collab.notes.delete":"Excluir","collab.notes.pin":"Fixar","collab.notes.unpin":"Desafixar","collab.notes.daysAgo":"há {n} d","collab.notes.categorySettings":"Gerenciar categorias","collab.notes.create":"Criar","collab.notes.website":"Site","collab.notes.websitePlaceholder":"https://...","collab.notes.attachFiles":"Anexar arquivos","collab.notes.noCategoriesYet":"Nenhuma categoria ainda","collab.notes.emptyDesc":"Crie uma nota para começar","collab.polls.title":"Enquetes","collab.polls.new":"Nova enquete","collab.polls.empty":"Nenhuma enquete ainda","collab.polls.emptyHint":"Pergunte ao grupo e votem juntos","collab.polls.question":"Pergunta","collab.polls.questionPlaceholder":"O que vamos fazer?","collab.polls.addOption":"+ Adicionar opção","collab.polls.optionPlaceholder":"Opção {n}","collab.polls.create":"Criar enquete","collab.polls.close":"Encerrar","collab.polls.closed":"Encerrada","collab.polls.votes":"{n} votos","collab.polls.vote":"{n} voto","collab.polls.multipleChoice":"Múltipla escolha","collab.polls.multiChoice":"Múltipla escolha","collab.polls.deadline":"Prazo","collab.polls.option":"Opção","collab.polls.options":"Opções","collab.polls.delete":"Excluir","collab.polls.closedSection":"Encerradas","memories.title":"Fotos","memories.notConnected":"Immich não conectado","memories.notConnectedHint":"Conecte sua instância Immich nas Configurações para ver suas fotos de viagem aqui.","memories.noDates":"Adicione datas à sua viagem para carregar fotos.","memories.noPhotos":"Nenhuma foto encontrada","memories.noPhotosHint":"Nenhuma foto encontrada no Immich para o período desta viagem.","memories.photosFound":"fotos","memories.fromOthers":"de outros","memories.sharePhotos":"Compartilhar fotos","memories.sharing":"Compartilhando","memories.reviewTitle":"Revise suas fotos","memories.reviewHint":"Clique nas fotos para excluí-las do compartilhamento.","memories.shareCount":"Compartilhar {count} fotos","memories.immichUrl":"URL do servidor Immich","memories.immichApiKey":"Chave da API","memories.testConnection":"Testar conexão","memories.testFirst":"Teste a conexão primeiro","memories.connected":"Conectado","memories.disconnected":"Não conectado","memories.connectionSuccess":"Conectado ao Immich","memories.connectionError":"Não foi possível conectar ao Immich","memories.saved":"Configurações do Immich salvas","memories.addPhotos":"Adicionar fotos","memories.linkAlbum":"Vincular álbum","memories.selectAlbum":"Selecionar álbum do Immich","memories.noAlbums":"Nenhum álbum encontrado","memories.syncAlbum":"Sincronizar álbum","memories.unlinkAlbum":"Desvincular","memories.photos":"fotos","memories.selectPhotos":"Selecionar fotos do Immich","memories.selectHint":"Toque nas fotos para selecioná-las.","memories.selected":"selecionadas","memories.addSelected":"Adicionar {count} fotos","memories.alreadyAdded":"Já adicionada","memories.private":"Privado","memories.stopSharing":"Parar de compartilhar","memories.oldest":"Mais antigas","memories.newest":"Mais recentes","memories.allLocations":"Todos os locais","memories.tripDates":"Datas da viagem","memories.allPhotos":"Todas as fotos","memories.confirmShareTitle":"Compartilhar com membros da viagem?","memories.confirmShareHint":"{count} fotos serão visíveis para todos os membros desta viagem. Você pode tornar fotos individuais privadas depois.","memories.confirmShareButton":"Compartilhar fotos","admin.tabs.permissions":"Permissões","admin.tabs.mcpTokens":"Tokens MCP","admin.mcpTokens.title":"Tokens MCP","admin.mcpTokens.subtitle":"Gerenciar tokens de API de todos os usuários","admin.mcpTokens.owner":"Proprietário","admin.mcpTokens.tokenName":"Nome do Token","admin.mcpTokens.created":"Criado","admin.mcpTokens.lastUsed":"Último uso","admin.mcpTokens.never":"Nunca","admin.mcpTokens.empty":"Nenhum token MCP foi criado ainda","admin.mcpTokens.deleteTitle":"Excluir Token","admin.mcpTokens.deleteMessage":"Isso revogará o token imediatamente. O usuário perderá o acesso MCP por este token.","admin.mcpTokens.deleteSuccess":"Token excluído","admin.mcpTokens.deleteError":"Falha ao excluir token","admin.mcpTokens.loadError":"Falha ao carregar tokens","perm.title":"Configurações de Permissões","perm.subtitle":"Controle quem pode realizar ações no aplicativo","perm.saved":"Configurações de permissões salvas","perm.resetDefaults":"Restaurar padrões","perm.customized":"personalizado","perm.level.admin":"Apenas administrador","perm.level.tripOwner":"Dono da viagem","perm.level.tripMember":"Membros da viagem","perm.level.everybody":"Todos","perm.cat.trip":"Gerenciamento de Viagens","perm.cat.members":"Gerenciamento de Membros","perm.cat.files":"Arquivos","perm.cat.content":"Conteúdo e Cronograma","perm.cat.extras":"Orçamento, Bagagem e Colaboração","perm.action.trip_create":"Criar viagens","perm.action.trip_edit":"Editar detalhes da viagem","perm.action.trip_delete":"Excluir viagens","perm.action.trip_archive":"Arquivar / desarquivar viagens","perm.action.trip_cover_upload":"Enviar imagem de capa","perm.action.member_manage":"Adicionar / remover membros","perm.action.file_upload":"Enviar arquivos","perm.action.file_edit":"Editar metadados do arquivo","perm.action.file_delete":"Excluir arquivos","perm.action.place_edit":"Adicionar / editar / excluir lugares","perm.action.day_edit":"Editar dias, notas e atribuições","perm.action.reservation_edit":"Gerenciar reservas","perm.action.budget_edit":"Gerenciar orçamento","perm.action.packing_edit":"Gerenciar listas de bagagem","perm.action.collab_edit":"Colaboração (notas, enquetes, chat)","perm.action.share_manage":"Gerenciar links de compartilhamento","perm.actionHint.trip_create":"Quem pode criar novas viagens","perm.actionHint.trip_edit":"Quem pode alterar nome, datas, descrição e moeda da viagem","perm.actionHint.trip_delete":"Quem pode excluir permanentemente uma viagem","perm.actionHint.trip_archive":"Quem pode arquivar ou desarquivar uma viagem","perm.actionHint.trip_cover_upload":"Quem pode enviar ou alterar a imagem de capa","perm.actionHint.member_manage":"Quem pode convidar ou remover membros da viagem","perm.actionHint.file_upload":"Quem pode enviar arquivos para uma viagem","perm.actionHint.file_edit":"Quem pode editar descrições e links dos arquivos","perm.actionHint.file_delete":"Quem pode mover arquivos para a lixeira ou excluí-los permanentemente","perm.actionHint.place_edit":"Quem pode adicionar, editar ou excluir lugares","perm.actionHint.day_edit":"Quem pode editar dias, notas dos dias e atribuições de lugares","perm.actionHint.reservation_edit":"Quem pode criar, editar ou excluir reservas","perm.actionHint.budget_edit":"Quem pode criar, editar ou excluir itens do orçamento","perm.actionHint.packing_edit":"Quem pode gerenciar itens de bagagem e malas","perm.actionHint.collab_edit":"Quem pode criar notas, enquetes e enviar mensagens","perm.actionHint.share_manage":"Quem pode criar ou excluir links de compartilhamento públicos"},zM={"common.save":"Uložit","common.cancel":"Zrušit","common.delete":"Smazat","common.edit":"Upravit","common.add":"Přidat","common.loading":"Načítání...","common.import":"Importovat","common.error":"Chyba","common.back":"Zpět","common.all":"Vše","common.close":"Zavřít","common.open":"Otevřít","common.upload":"Nahrát","common.search":"Hledat","common.confirm":"Potvrdit","common.ok":"OK","common.yes":"Ano","common.no":"Ne","common.or":"nebo","common.none":"Žádné","common.date":"Datum","common.rename":"Přejmenovat","common.name":"Jméno","common.email":"E-mail","common.password":"Heslo","common.saving":"Ukládání...","common.saved":"Uloženo","trips.reminder":"Připomínka","trips.reminderNone":"Žádná","trips.reminderDay":"den","trips.reminderDays":"dní","trips.reminderCustom":"Vlastní","trips.reminderDaysBefore":"dní před odjezdem","trips.reminderDisabledHint":"Připomínky výletů jsou zakázány. Povolte je v Správa > Nastavení > Oznámení.","common.update":"Aktualizovat","common.change":"Změnit","common.uploading":"Nahrávání…","common.backToPlanning":"Zpět k plánování","common.reset":"Resetovat","nav.trip":"Cesta","nav.share":"Sdílet","nav.settings":"Nastavení","nav.admin":"Administrace","nav.logout":"Odhlásit se","nav.lightMode":"Světlý režim","nav.darkMode":"Tmavý režim","nav.autoMode":"Automatický režim","nav.administrator":"Administrátor","nav.myTrips":"Moje cesty","dashboard.title":"Moje cesty","dashboard.subtitle.loading":"Načítání cest...","dashboard.subtitle.trips":"{count} cest ({archived} archivováno)","dashboard.subtitle.empty":"Začněte svou první cestu","dashboard.subtitle.activeOne":"{count} aktivní cesta","dashboard.subtitle.activeMany":"{count} aktivních cest","dashboard.subtitle.archivedSuffix":" · {count} archivováno","dashboard.newTrip":"Nová cesta","dashboard.gridView":"Mřížka","dashboard.listView":"Seznam","dashboard.currency":"Měna","dashboard.timezone":"Časová pásma","dashboard.localTime":"Místní čas","dashboard.timezoneCustomTitle":"Vlastní pásmo","dashboard.timezoneCustomLabelPlaceholder":"Popisek (volitelné)","dashboard.timezoneCustomTzPlaceholder":"např. America/New_York","dashboard.timezoneCustomAdd":"Přidat","dashboard.timezoneCustomErrorEmpty":"Zadejte identifikátor pásma","dashboard.timezoneCustomErrorInvalid":"Neplatné pásmo. Použijte formát jako např. Europe/Prague","dashboard.timezoneCustomErrorDuplicate":"Již bylo přidáno","dashboard.emptyTitle":"Zatím žádné cesty","dashboard.emptyText":"Vytvořte svou první cestu a začněte plánovat!","dashboard.emptyButton":"Vytvořit první cestu","dashboard.nextTrip":"Další cesta","dashboard.shared":"Sdílené","dashboard.sharedBy":"Sdílí {name}","dashboard.days":"Dní","dashboard.places":"Míst","dashboard.archive":"Archivovat","dashboard.restore":"Obnovit","dashboard.archived":"Archivováno","dashboard.status.ongoing":"Probíhající","dashboard.status.today":"Dnes","dashboard.status.tomorrow":"Zítra","dashboard.status.past":"Proběhlé","dashboard.status.daysLeft":"zbývá {count} dní","dashboard.toast.loadError":"Nepodařilo se načíst cesty","dashboard.toast.created":"Cesta byla úspěšně vytvořena!","dashboard.toast.createError":"Nepodařilo se vytvořit cestu","dashboard.toast.updated":"Cesta byla aktualizována!","dashboard.toast.updateError":"Nepodařilo se aktualizovat cestu","dashboard.toast.deleted":"Cesta byla smazána","dashboard.toast.deleteError":"Nepodařilo se smazat cestu","dashboard.toast.archived":"Cesta byla archivována","dashboard.toast.archiveError":"Nepodařilo se archivovat cestu","dashboard.toast.restored":"Cesta byla obnovena","dashboard.toast.restoreError":"Nepodařilo se obnovit cestu","dashboard.confirm.delete":"Smazat cestu „{title}“? Všechna místa a plány budou trvale smazány.","dashboard.editTrip":"Upravit cestu","dashboard.createTrip":"Vytvořit novou cestu","dashboard.tripTitle":"Název","dashboard.tripTitlePlaceholder":"např. Léto v Japonsku","dashboard.tripDescription":"Popis","dashboard.tripDescriptionPlaceholder":"O čem je tato cesta?","dashboard.startDate":"Datum začátku","dashboard.endDate":"Datum konce","dashboard.noDateHint":"Datum nezadáno – výchozí délka nastavena na 7 dní. Toto lze kdykoli změnit.","dashboard.coverImage":"Úvodní obrázek","dashboard.addCoverImage":"Vybrat úvodní obrázek (nebo přetáhnout sem)","dashboard.addMembers":"Spolucestující","dashboard.addMember":"Přidat člena","dashboard.coverSaved":"Úvodní obrázek uložen","dashboard.coverUploadError":"Nahrávání se nezdařilo","dashboard.coverRemoveError":"Odstranění se nezdařilo","dashboard.titleRequired":"Název je povinný","dashboard.endDateError":"Datum konce musí být po datu začátku","settings.title":"Nastavení","settings.subtitle":"Upravte své osobní nastavení","settings.map":"Mapy","settings.mapTemplate":"Šablona mapy","settings.mapTemplatePlaceholder.select":"Vyberte šablonu...","settings.mapDefaultHint":"Ponechte prázdné pro OpenStreetMap (výchozí)","settings.mapTemplatePlaceholder":"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png","settings.mapHint":"URL šablony pro mapové dlaždice","settings.latitude":"Zeměpisná šířka","settings.longitude":"Zeměpisná délka","settings.saveMap":"Uložit nastavení mapy","settings.apiKeys":"API klíče","settings.mapsKey":"Google Maps API klíč","settings.mapsKeyHint":"Pro vyhledávání míst. Vyžaduje Places API (New). Získáte na console.cloud.google.com","settings.weatherKey":"OpenWeatherMap API klíč","settings.weatherKeyHint":"Pro předpověď počasí. Zdarma na openweathermap.org/api","settings.keyPlaceholder":"Vložte klíč...","settings.configured":"Nastaveno","settings.saveKeys":"Uložit klíče","settings.display":"Zobrazení","settings.colorMode":"Barevné schéma","settings.light":"Světlé","settings.dark":"Tmavé","settings.auto":"Automatické","settings.language":"Jazyk","settings.temperature":"Jednotky teploty","settings.timeFormat":"Formát času","settings.routeCalculation":"Výpočet trasy","settings.blurBookingCodes":"Skrýt rezervační kódy","settings.notifications":"Oznámení","settings.notifyTripInvite":"Pozvánky na cesty","settings.notifyBookingChange":"Změny rezervací","settings.notifyTripReminder":"Připomínky cest","settings.notifyVacayInvite":"Pozvánky k propojení Vacay","settings.notifyPhotosShared":"Sdílené fotky (Immich)","settings.notifyCollabMessage":"Zprávy v chatu (Collab)","settings.notifyPackingTagged":"Seznam balení: přiřazení","settings.notifyWebhook":"Webhook oznámení","settings.notificationsDisabled":"Oznámení nejsou nakonfigurována. Požádejte správce o aktivaci e-mailových nebo webhookových oznámení.","settings.notificationsActive":"Aktivní kanál","settings.notificationsManagedByAdmin":"Události oznámení jsou konfigurovány administrátorem.","settings.on":"Zapnuto","settings.off":"Vypnuto","settings.mcp.title":"Konfigurace MCP","settings.mcp.endpoint":"MCP endpoint","settings.mcp.clientConfig":"Konfigurace klienta","settings.mcp.clientConfigHint":"Nahraďte API tokenem ze seznamu níže. Cestu k npx může být nutné upravit pro váš systém (např. C:\\PROGRA~1\\nodejs\\npx.cmd ve Windows).","settings.mcp.copy":"Kopírovat","settings.mcp.copied":"Zkopírováno!","settings.mcp.apiTokens":"API tokeny","settings.mcp.createToken":"Vytvořit nový token","settings.mcp.noTokens":"Zatím žádné tokeny. Vytvořte jeden pro připojení MCP klientů.","settings.mcp.tokenCreatedAt":"Vytvořen","settings.mcp.tokenUsedAt":"Použit","settings.mcp.deleteTokenTitle":"Smazat token","settings.mcp.deleteTokenMessage":"Tento token přestane okamžitě fungovat. Všichni MCP klienti, kteří ho používají, ztratí přístup.","settings.mcp.modal.createTitle":"Vytvořit API token","settings.mcp.modal.tokenName":"Název tokenu","settings.mcp.modal.tokenNamePlaceholder":"např. Claude Desktop, Pracovní notebook","settings.mcp.modal.creating":"Vytváření…","settings.mcp.modal.create":"Vytvořit token","settings.mcp.modal.createdTitle":"Token vytvořen","settings.mcp.modal.createdWarning":"Tento token bude zobrazen pouze jednou. Zkopírujte a uložte ho nyní — nelze ho obnovit.","settings.mcp.modal.done":"Hotovo","settings.mcp.toast.created":"Token vytvořen","settings.mcp.toast.createError":"Nepodařilo se vytvořit token","settings.mcp.toast.deleted":"Token smazán","settings.mcp.toast.deleteError":"Nepodařilo se smazat token","settings.account":"Účet","settings.username":"Uživatelské jméno","settings.email":"E-mail","settings.role":"Role","settings.roleAdmin":"Administrátor","settings.oidcLinked":"Propojeno přes","settings.changePassword":"Změnit heslo","settings.currentPassword":"Současné heslo","settings.currentPasswordRequired":"Současné heslo je vyžadováno","settings.newPassword":"Nové heslo","settings.confirmPassword":"Potvrdit nové heslo","settings.updatePassword":"Aktualizovat heslo","settings.passwordRequired":"Zadejte prosím současné i nové heslo","settings.passwordTooShort":"Heslo musí mít alespoň 8 znaků","settings.passwordMismatch":"Hesla se neshodují","settings.passwordWeak":"Heslo musí obsahovat velké a malé písmeno, číslici a speciální znak","settings.passwordChanged":"Heslo bylo úspěšně změněno","settings.deleteAccount":"Smazat účet","settings.deleteAccountTitle":"Smazat váš účet?","settings.deleteAccountWarning":"Váš účet a všechny vaše cesty, místa a soubory budou trvale smazány. Tuto akci nelze vrátit.","settings.deleteAccountConfirm":"Smazat natrvalo","settings.deleteBlockedTitle":"Účet nelze smazat","settings.deleteBlockedMessage":"Jste jediným administrátorem. Před smazáním svého účtu předejte roli administrátora jinému uživateli.","settings.roleUser":"Uživatel","settings.saveProfile":"Uložit profil","settings.toast.mapSaved":"Nastavení map uloženo","settings.toast.keysSaved":"API klíče uloženy","settings.toast.displaySaved":"Nastavení zobrazení uloženo","settings.toast.profileSaved":"Profil byl uložen","settings.uploadAvatar":"Nahrát profilový obrázek","settings.removeAvatar":"Odebrat profilový obrázek","settings.avatarUploaded":"Profilový obrázek byl aktualizován","settings.avatarRemoved":"Profilový obrázek byl odstraněn","settings.avatarError":"Nahrávání se nezdařilo","settings.mfa.title":"Dvoufaktorové ověření (2FA)","settings.mfa.description":"Přidá druhý stupeň zabezpečení při přihlašování e-mailem a heslem. Použijte aplikaci (Google Authenticator, Authy apod.).","settings.mfa.requiredByPolicy":"Správce vyžaduje dvoufázové ověření. Nejdřív níže nastavte aplikaci autentikátoru.","settings.mfa.backupTitle":"Záložní kódy","settings.mfa.backupDescription":"Použijte tyto jednorázové kódy, pokud ztratíte přístup k autentizační aplikaci.","settings.mfa.backupWarning":"Uložte si je hned. Každý kód lze použít pouze jednou.","settings.mfa.backupCopy":"Kopírovat kódy","settings.mfa.backupDownload":"Stáhnout TXT","settings.mfa.backupPrint":"Tisk / PDF","settings.mfa.backupCopied":"Záložní kódy zkopírovány","settings.mfa.enabled":"2FA je pro váš účet aktivní.","settings.mfa.disabled":"2FA není aktivní.","settings.mfa.setup":"Nastavit autentizační aplikaci","settings.mfa.scanQr":"Naskenujte tento QR kód ve vaší aplikaci nebo zadejte kód ručně.","settings.mfa.secretLabel":"Tajný klíč (pro ruční zadání)","settings.mfa.codePlaceholder":"6místný kód","settings.mfa.enable":"Zapnout 2FA","settings.mfa.cancelSetup":"Zrušit","settings.mfa.disableTitle":"Vypnout 2FA","settings.mfa.disableHint":"Zadejte své heslo k účtu a aktuální kód z aplikace.","settings.mfa.disable":"Vypnout 2FA","settings.mfa.toastEnabled":"Dvoufaktorové ověření bylo zapnuto","settings.mfa.toastDisabled":"Dvoufaktorové ověření bylo vypnuto","settings.mfa.demoBlocked":"Není k dispozici v demo režimu","admin.notifications.title":"Oznámení","admin.notifications.hint":"Vyberte kanál oznámení. Současně může být aktivní pouze jeden.","admin.notifications.none":"Vypnuto","admin.notifications.email":"E-mail (SMTP)","admin.notifications.webhook":"Webhook","admin.notifications.events":"Události oznámení","admin.notifications.eventsHint":"Vyberte, které události spouštějí oznámení pro všechny uživatele.","admin.notifications.configureFirst":"Nejprve nakonfigurujte nastavení SMTP nebo webhooku níže, poté povolte události.","admin.notifications.save":"Uložit nastavení oznámení","admin.notifications.saved":"Nastavení oznámení uloženo","admin.notifications.testWebhook":"Odeslat testovací webhook","admin.notifications.testWebhookSuccess":"Testovací webhook úspěšně odeslán","admin.notifications.testWebhookFailed":"Odeslání testovacího webhooku se nezdařilo","admin.smtp.title":"E-mail a oznámení","admin.smtp.hint":"Konfigurace SMTP pro odesílání e-mailových oznámení.","admin.smtp.testButton":"Odeslat testovací e-mail","admin.webhook.hint":"Odesílat oznámení na externí webhook (Discord, Slack atd.).","admin.smtp.testSuccess":"Testovací e-mail byl úspěšně odeslán","admin.smtp.testFailed":"Odeslání testovacího e-mailu se nezdařilo","dayplan.icsTooltip":"Exportovat kalendář (ICS)","share.linkTitle":"Veřejný odkaz","share.linkHint":"Vytvořte odkaz, kterým si může kdokoli prohlédnout tuto cestu bez přihlášení. Pouze pro čtení — úpravy nejsou možné.","share.createLink":"Vytvořit odkaz","share.deleteLink":"Smazat odkaz","share.createError":"Nepodařilo se vytvořit odkaz","common.copy":"Kopírovat","common.copied":"Zkopírováno","share.permMap":"Mapa a plán","share.permBookings":"Rezervace","share.permPacking":"Balení","shared.expired":"Odkaz vypršel nebo je neplatný","shared.expiredHint":"Tento sdílený odkaz na cestu již není aktivní.","shared.readOnly":"Sdílené zobrazení – pouze pro čtení","shared.tabPlan":"Plán","shared.tabBookings":"Rezervace","shared.tabPacking":"Balení","shared.tabBudget":"Rozpočet","shared.tabChat":"Chat","shared.days":"dní","shared.places":"míst","shared.other":"Ostatní","shared.totalBudget":"Celkový rozpočet","shared.messages":"zpráv","shared.sharedVia":"Sdíleno přes","shared.confirmed":"Potvrzeno","shared.pending":"Čeká na potvrzení","share.permBudget":"Rozpočet","share.permCollab":"Chat","login.error":"Přihlášení se nezdařilo. Zkontrolujte prosím své údaje.","login.tagline":`Vaše cesty. Váš plán.`,"login.description":"Plánujte cesty společně s interaktivními mapami, rozpočty a synchronizací v reálném čase.","login.features.maps":"Interaktivní mapy","login.features.mapsDesc":"Google Places, trasy a shlukování bodů","login.features.realtime":"Synchronizace v reálném čase","login.features.realtimeDesc":"Plánujte společně přes WebSocket","login.features.budget":"Sledování rozpočtu","login.features.budgetDesc":"Kategorie, grafy a náklady na osobu","login.features.collab":"Spolupráce","login.features.collabDesc":"Více uživatelů se sdílenými cestami","login.features.packing":"Seznamy věcí","login.features.packingDesc":"Kategorie, pokrok v balení a návrhy","login.features.bookings":"Rezervace","login.features.bookingsDesc":"Lety, hotely, restaurace a další","login.features.files":"Dokumenty","login.features.filesDesc":"Nahrávejte a spravujte dokumenty","login.features.routes":"Chytré trasy","login.features.routesDesc":"Automatická optimalizace a export do Google Maps","login.selfHosted":"Self-hosted · Open Source · Vaše data zůstávají u vás","login.title":"Přihlásit se","login.subtitle":"Vítejte zpět","login.signingIn":"Přihlašování…","login.signIn":"Přihlásit se","login.createAdmin":"Vytvořit účet administrátora","login.createAdminHint":"Nastavte první administrátorský účet pro TREK.","login.setNewPassword":"Nastavit nové heslo","login.setNewPasswordHint":"Před pokračováním musíte změnit heslo.","login.createAccount":"Vytvořit účet","login.createAccountHint":"Zaregistrujte si nový účet.","login.creating":"Vytváření…","login.noAccount":"Nemáte účet?","login.hasAccount":"Již máte účet?","login.register":"Registrovat se","login.emailPlaceholder":"vas@email.cz","login.username":"Uživatelské jméno","login.oidc.registrationDisabled":"Registrace je zakázána. Kontaktujte svého administrátora.","login.oidc.noEmail":"Od poskytovatele nebyl přijat žádný e-mail.","login.oidc.tokenFailed":"Ověření se nezdařilo.","login.oidc.invalidState":"Neplatná relace. Zkuste to prosím znovu.","login.demoFailed":"Přihlášení do dema se nezdařilo","login.oidcSignIn":"Přihlásit se přes {name}","login.oidcOnly":"Ověřování heslem je zakázáno. Přihlaste se prosím přes SSO poskytovatele.","login.demoHint":"Vyzkoušejte demo – registrace není nutná","login.mfaTitle":"Dvoufaktorové ověření","login.mfaSubtitle":"Zadejte 6místný kód z vaší autentizační aplikace.","login.mfaCodeLabel":"Ověřovací kód","login.mfaCodeRequired":"Zadejte kód z aplikace.","login.mfaHint":"Otevřete Google Authenticator, Authy nebo jinou TOTP aplikaci.","login.mfaBack":"← Zpět k přihlášení","login.mfaVerify":"Ověřit","register.passwordMismatch":"Hesla se neshodují","register.passwordTooShort":"Heslo musí mít alespoň 8 znaků","register.failed":"Registrace se nezdařila","register.getStarted":"Začínáme","register.subtitle":"Vytvořte si účet a začněte plánovat svou vysněnou cestu.","register.feature1":"Neomezené plány cest","register.feature2":"Zobrazení na interaktivní mapě","register.feature3":"Správa míst a kategorií","register.feature4":"Sledování rezervací","register.feature5":"Vytváření seznamů věcí","register.feature6":"Ukládání fotek a souborů","register.createAccount":"Vytvořit účet","register.startPlanning":"Začít plánovat","register.minChars":"Min. 6 znaků","register.confirmPassword":"Potvrdit heslo","register.repeatPassword":"Heslo znovu","register.registering":"Registrace...","register.register":"Registrovat se","register.hasAccount":"Již máte účet?","register.signIn":"Přihlásit se","admin.title":"Administrace","admin.subtitle":"Správa uživatelů a systémová nastavení","admin.tabs.users":"Uživatelé","admin.tabs.categories":"Kategorie","admin.tabs.backup":"Zálohování","admin.stats.users":"Uživatelé","admin.stats.trips":"Cesty","admin.stats.places":"Místa","admin.stats.photos":"Fotky","admin.stats.files":"Soubory","admin.table.user":"Uživatel","admin.table.email":"E-mail","admin.table.role":"Role","admin.table.created":"Vytvořeno","admin.table.lastLogin":"Poslední přihlášení","admin.table.actions":"Akce","admin.you":"(Vy)","admin.editUser":"Upravit uživatele","admin.newPassword":"Nové heslo","admin.newPasswordHint":"Ponechte prázdné pro zachování současného hesla","admin.deleteUser":"Smazat uživatele „{name}“? Všechny jeho cesty budou trvale smazány.","admin.deleteUserTitle":"Smazat uživatele","admin.newPasswordPlaceholder":"Zadejte nové heslo…","admin.toast.loadError":"Nepodařilo se načíst data administrace","admin.toast.userUpdated":"Uživatel byl aktualizován","admin.toast.updateError":"Aktualizace se nezdařila","admin.toast.userDeleted":"Uživatel byl smazán","admin.toast.deleteError":"Smazání se nezdařilo","admin.toast.cannotDeleteSelf":"Nemůžete smazat svůj vlastní účet","admin.toast.userCreated":"Uživatel byl vytvořen","admin.toast.createError":"Nepodařilo se vytvořit uživatele","admin.toast.fieldsRequired":"Uživatelské jméno, e-mail a heslo jsou povinné","admin.createUser":"Vytvořit uživatele","admin.invite.title":"Pozvánky","admin.invite.subtitle":"Vytvářejte jednorázové registrační odkazy","admin.invite.create":"Vytvořit odkaz","admin.invite.createAndCopy":"Vytvořit a zkopírovat","admin.invite.empty":"Zatím nebyly vytvořeny žádné pozvánky","admin.invite.maxUses":"Max. použití","admin.invite.expiry":"Vyprší za","admin.invite.uses":"použito","admin.invite.expiresAt":"vyprší","admin.invite.createdBy":"vytvořil","admin.invite.active":"Aktivní","admin.invite.expired":"Expirované","admin.invite.usedUp":"Využito","admin.invite.copied":"Odkaz byl zkopírován do schránky","admin.invite.copyLink":"Kopírovat odkaz","admin.invite.deleted":"Pozvánka smazána","admin.invite.createError":"Nepodařilo se vytvořit pozvánku","admin.invite.deleteError":"Nepodařilo se smazat pozvánku","admin.tabs.settings":"Nastavení","admin.allowRegistration":"Povolit registraci","admin.allowRegistrationHint":"Noví uživatelé se mohou sami registrovat","admin.requireMfa":"Vyžadovat dvoufázové ověření (2FA)","admin.requireMfaHint":"Uživatelé bez 2FA musí dokončit nastavení v Nastavení před použitím aplikace.","admin.apiKeys":"API klíče","admin.apiKeysHint":"Volitelné. Povoluje rozšířená data o místech (fotky, počasí).","admin.mapsKey":"Google Maps API klíč","admin.mapsKeyHint":"Povinné pro hledání míst. Získáte na console.cloud.google.com","admin.mapsKeyHintLong":"Bez API klíče se pro hledání používá OpenStreetMap. S Google klíčem lze načítat fotky, hodnocení a otevírací dobu.","admin.recommended":"Doporučeno","admin.weatherKey":"OpenWeatherMap API klíč","admin.weatherKeyHint":"Pro data o počasí. Zdarma na openweathermap.org","admin.validateKey":"Testovat","admin.keyValid":"Připojeno","admin.keyInvalid":"Neplatný","admin.keySaved":"API klíče byly uloženy","admin.oidcTitle":"Jednotné přihlášení (OIDC)","admin.oidcSubtitle":"Povolit přihlášení přes externí poskytovatele (Google, Apple, Authentik, Keycloak).","admin.oidcDisplayName":"Zobrazované jméno","admin.oidcIssuer":"URL vydavatele (Issuer)","admin.oidcIssuerHint":"OpenID Connect Issuer URL, např. https://accounts.google.com","admin.oidcSaved":"Konfigurace OIDC uložena","admin.oidcOnlyMode":"Zakázat ověřování heslem","admin.oidcOnlyModeHint":"Pokud je zapnuto, je povolen pouze SSO login. Registrace i přihlášení heslem budou zablokovány.","admin.fileTypes":"Povolené typy souborů","admin.fileTypesHint":"Nastavte, které typy souborů mohou uživatelé nahrávat.","admin.fileTypesFormat":"Přípony oddělené čárkou (např. jpg,png,pdf,doc). Použijte * pro všechny typy.","admin.fileTypesSaved":"Nastavení souborů uloženo","admin.bagTracking.title":"Sledování zavazadel","admin.bagTracking.subtitle":"Povolit váhu a přiřazení k zavazadlům u položek balení","admin.tabs.config":"Konfigurace","admin.tabs.templates":"Šablony seznamů","admin.packingTemplates.title":"Šablony pro balení","admin.packingTemplates.subtitle":"Vytvářejte opakovaně použitelné seznamy pro své cesty","admin.packingTemplates.create":"Nová šablona","admin.packingTemplates.namePlaceholder":"Název šablony (např. Dovolená u moře)","admin.packingTemplates.empty":"Zatím nejsou vytvořeny žádné šablony","admin.packingTemplates.items":"položek","admin.packingTemplates.categories":"kategorií","admin.packingTemplates.itemName":"Název položky","admin.packingTemplates.itemCategory":"Kategorie","admin.packingTemplates.categoryName":"Název kategorie (např. Oblečení)","admin.packingTemplates.addCategory":"Přidat kategorii","admin.packingTemplates.created":"Šablona vytvořena","admin.packingTemplates.deleted":"Šablona smazána","admin.packingTemplates.loadError":"Nepodařilo se načíst šablony","admin.packingTemplates.createError":"Nepodařilo se vytvořit šablonu","admin.packingTemplates.deleteError":"Nepodařilo se smazat šablonu","admin.packingTemplates.saveError":"Uložení se nezdařilo","admin.tabs.addons":"Doplňky","admin.addons.title":"Doplňky","admin.addons.subtitle":"Zapněte nebo vypněte funkce a přizpůsobte si TREK.","admin.addons.catalog.memories.name":"Fotky (Immich)","admin.addons.catalog.memories.description":"Sdílejte cestovní fotky přes vaši instanci Immich","admin.addons.catalog.packing.name":"Balení","admin.addons.catalog.packing.description":"Seznamy věcí pro přípravu na cestu","admin.addons.catalog.budget.name":"Rozpočet","admin.addons.catalog.budget.description":"Sledování výdajů a plánování rozpočtu cesty","admin.addons.catalog.documents.name":"Dokumenty","admin.addons.catalog.documents.description":"Ukládání a správa cestovních dokladů","admin.addons.catalog.vacay.name":"Dovolená (Vacay)","admin.addons.catalog.vacay.description":"Osobní plánovač dovolené s kalendářem","admin.addons.catalog.atlas.name":"Atlas","admin.addons.catalog.atlas.description":"Mapa světa s navštívenými zeměmi a statistikami","admin.addons.catalog.collab.name":"Spolupráce","admin.addons.catalog.collab.description":"Poznámky v reálném čase, hlasování a chat pro plánování","admin.addons.enabled":"Povoleno","admin.addons.disabled":"Zakázáno","admin.addons.type.trip":"Cesta","admin.addons.type.global":"Globální","admin.addons.type.integration":"Integrace","admin.addons.tripHint":"Dostupné jako karta v rámci každé cesty","admin.addons.globalHint":"Dostupné jako samostatná sekce v hlavní navigaci","admin.addons.integrationHint":"Backendové služby a API integrace bez vlastní stránky","admin.addons.toast.updated":"Doplněk byl aktualizován","admin.addons.toast.error":"Aktualizace doplňku se nezdařila","admin.addons.noAddons":"Žádné doplňky nejsou k dispozici","admin.addons.catalog.memories.name":"Fotky (Immich)","admin.addons.catalog.memories.description":"Sdílejte cestovní fotky přes vaši instanci Immich","admin.addons.catalog.mcp.name":"MCP","admin.addons.catalog.mcp.description":"Model Context Protocol pro integraci AI asistentů","admin.addons.subtitleBefore":"Zapněte nebo vypněte funkce a přizpůsobte si ","admin.addons.subtitleAfter":".","admin.tabs.audit":"Auditní protokol","admin.audit.subtitle":"Bezpečnostní a administrátorské události (zálohy, uživatelé, 2FA, nastavení).","admin.audit.empty":"Zatím žádné záznamy auditu.","admin.audit.refresh":"Obnovit","admin.audit.loadMore":"Načíst další","admin.audit.showing":"{count} načteno · {total} celkem","admin.audit.col.time":"Čas","admin.audit.col.user":"Uživatel","admin.audit.col.action":"Akce","admin.audit.col.resource":"Zdroj","admin.audit.col.ip":"IP","admin.audit.col.details":"Detaily","admin.tabs.mcpTokens":"MCP tokeny","admin.mcpTokens.title":"MCP tokeny","admin.mcpTokens.subtitle":"Správa API tokenů všech uživatelů","admin.mcpTokens.owner":"Vlastník","admin.mcpTokens.tokenName":"Název tokenu","admin.mcpTokens.created":"Vytvořen","admin.mcpTokens.lastUsed":"Naposledy použit","admin.mcpTokens.never":"Nikdy","admin.mcpTokens.empty":"Zatím nebyly vytvořeny žádné MCP tokeny","admin.mcpTokens.deleteTitle":"Smazat token","admin.mcpTokens.deleteMessage":"Tento token bude okamžitě zneplatněn. Uživatel ztratí MCP přístup přes tento token.","admin.mcpTokens.deleteSuccess":"Token smazán","admin.mcpTokens.deleteError":"Nepodařilo se smazat token","admin.mcpTokens.loadError":"Nepodařilo se načíst tokeny","admin.tabs.github":"GitHub","admin.github.title":"Historie verzí","admin.github.subtitle":"Nejnovější aktualizace z {repo}","admin.github.latest":"Nejnovější","admin.github.prerelease":"Předběžná verze","admin.github.showDetails":"Zobrazit podrobnosti","admin.github.hideDetails":"Skrýt podrobnosti","admin.github.loadMore":"Načíst další","admin.github.loading":"Načítání...","admin.github.error":"Nepodařilo se načíst verze","admin.github.by":"od","admin.github.support":"Pomáhá udržovat vývoj TREK","admin.weather.title":"Data o počasí","admin.weather.badge":"Od 24. března 2026","admin.weather.description":"TREK používá Open-Meteo jako zdroj dat. Je to bezplatná open-source služba – není vyžadován API klíč.","admin.weather.forecast":"Předpověď na 16 dní","admin.weather.forecastDesc":"Dříve 5 dní (OpenWeatherMap)","admin.weather.climate":"Historická klimatická data","admin.weather.climateDesc":"Průměry za posledních 85 let pro dny mimo 16denní předpověď","admin.weather.requests":"10 000 požadavků denně","admin.weather.requestsDesc":"Zdarma, bez nutnosti klíče","admin.weather.locationHint":"Počasí se určuje podle prvního místa se souřadnicemi v daném dni.","admin.update.available":"Dostupná aktualizace","admin.update.text":"TREK {version} je k dispozici. Aktuálně používáte verzi {current}.","admin.update.button":"Zobrazit na GitHubu","admin.update.install":"Instalovat aktualizaci","admin.update.confirmTitle":"Instalovat aktualizaci?","admin.update.confirmText":"TREK bude aktualizován z verze {current} na {version}. Server se poté automaticky restartuje.","admin.update.dataInfo":"Všechna vaše data (cesty, uživatelé, API klíče, soubory) budou zachována.","admin.update.warning":"Aplikace bude během restartu krátce nedostupná.","admin.update.confirm":"Aktualizovat nyní","admin.update.installing":"Aktualizace probíhá…","admin.update.success":"Aktualizace byla nainstalována! Server se restartuje…","admin.update.failed":"Aktualizace se nezdařila","admin.update.backupHint":"Před aktualizací doporučujeme vytvořit zálohu.","admin.update.backupLink":"Přejít na zálohování","admin.update.howTo":"Jak aktualizovat","admin.update.dockerText":"Váš TREK běží v Dockeru. Pro aktualizaci na verzi {version} spusťte na svém serveru tyto příkazy:","admin.update.reloadHint":"Prosím obnovte stránku za několik sekund.","vacay.subtitle":"Plánování a správa dovolené","vacay.settings":"Nastavení","vacay.year":"Rok","vacay.addYear":"Přidat rok","vacay.removeYear":"Odebrat rok","vacay.removeYearConfirm":"Odebrat rok {year}?","vacay.removeYearHint":"Všechny záznamy o dovolené a firemní svátky pro tento rok budou trvale smazány.","vacay.remove":"Odebrat","vacay.persons":"Osoby","vacay.noPersons":"Žádné osoby nebyly přidány","vacay.addPerson":"Přidat osobu","vacay.editPerson":"Upravit osobu","vacay.removePerson":"Odebrat osobu","vacay.removePersonConfirm":"Odebrat osobu {name}?","vacay.removePersonHint":"Všechny záznamy dovolené pro tuto osobu budou trvale smazány.","vacay.personName":"Jméno","vacay.personNamePlaceholder":"Zadejte jméno","vacay.color":"Barva","vacay.add":"Přidat","vacay.legend":"Legenda","vacay.publicHoliday":"Státní svátek","vacay.companyHoliday":"Firemní volno","vacay.weekend":"Víkend","vacay.modeVacation":"Dovolená","vacay.modeCompany":"Firemní volno","vacay.entitlement":"Nárok","vacay.entitlementDays":"Dní","vacay.used":"Vyčerpáno","vacay.remaining":"Zbývá","vacay.carriedOver":"z roku {year}","vacay.blockWeekends":"Blokovat víkendy","vacay.blockWeekendsHint":"Zamezit zadávání dovolené na víkendové dny","vacay.mon":"Po","vacay.tue":"Út","vacay.wed":"St","vacay.thu":"Čt","vacay.fri":"Pá","vacay.sat":"So","vacay.sun":"Ne","vacay.weekendDays":"Víkendové dny","vacay.publicHolidays":"Státní svátky","vacay.publicHolidaysHint":"Zobrazit státní svátky v kalendáři","vacay.selectCountry":"Vyberte zemi","vacay.selectRegion":"Vyberte region (volitelné)","vacay.addCalendar":"Přidat kalendář","vacay.calendarLabel":"Popisek (volitelné)","vacay.calendarColor":"Barva","vacay.noCalendars":"Zatím nebyly přidány žádné svátkové kalendáře","vacay.companyHolidays":"Firemní volno","vacay.companyHolidaysHint":"Povolit označování dnů celofiremního volna","vacay.companyHolidaysNoDeduct":"Firemní volno se nezapočítává do nároku na dovolenou.","vacay.carryOver":"Převod dovolené","vacay.carryOverHint":"Automaticky převádět zbývající dny do dalšího roku","vacay.sharing":"Sdílení","vacay.sharingHint":"Sdílejte svůj plán dovolené s ostatními uživateli TREK","vacay.owner":"Vlastník","vacay.shareEmailPlaceholder":"E-mail uživatele TREK","vacay.shareSuccess":"Plán byl úspěšně sdílen","vacay.shareError":"Nepodařilo se sdílet plán","vacay.dissolve":"Zrušit propojení","vacay.dissolveHint":"Znovu oddělit kalendáře. Vaše záznamy zůstanou zachovány.","vacay.dissolveAction":"Oddělit","vacay.dissolved":"Kalendáře byly odděleny","vacay.fusedWith":"Propojeno s","vacay.you":"vy","vacay.noData":"Žádná data","vacay.changeColor":"Změnit barvu","vacay.inviteUser":"Pozvat uživatele","vacay.inviteHint":"Pozvěte jiného uživatele TREK ke sdílení společného kalendáře dovolených.","vacay.selectUser":"Vyberte uživatele","vacay.sendInvite":"Odeslat pozvánku","vacay.inviteSent":"Pozvánka odeslána","vacay.inviteError":"Nepodařilo se odeslat pozvánku","vacay.pending":"čeká na vyřízení","vacay.noUsersAvailable":"Žádní uživatelé nejsou k dispozici","vacay.accept":"Přijmout","vacay.decline":"Odmítnout","vacay.acceptFusion":"Přijmout a propojit","vacay.inviteTitle":"Žádost o propojení","vacay.inviteWantsToFuse":"vás zve ke sdílení kalendáře dovolených.","vacay.fuseInfo1":"Oba uvidíte všechny záznamy v jednom sdíleném kalendáři.","vacay.fuseInfo2":"Obě strany mohou vytvářet a upravovat záznamy tomu druhému.","vacay.fuseInfo3":"Obě strany mohou měnit nároky na dovolenou.","vacay.fuseInfo4":"Nastavení (svátky, firemní volno) jsou sdílená.","vacay.fuseInfo5":"Propojení lze kdykoli zrušit bez ztráty dat.","atlas.subtitle":"Vaše stopa ve světě","atlas.countries":"Země","atlas.trips":"Cesty","atlas.places":"Místa","atlas.unmark":"Odebrat","atlas.confirmMark":"Označit tuto zemi jako navštívenou?","atlas.confirmUnmark":"Odebrat tuto zemi ze seznamu navštívených?","atlas.markVisited":"Označit jako navštívené","atlas.markVisitedHint":"Přidat tuto zemi do seznamu navštívených","atlas.addToBucket":"Přidat do seznamu přání (Bucket list)","atlas.addPoi":"Přidat místo","atlas.bucketNamePlaceholder":"Název (země, město, místo...)","atlas.month":"Měsíc","atlas.addToBucketHint":"Uložit jako místo, které chcete navštívit","atlas.bucketWhen":"Kdy plánujete návštěvu?","atlas.statsTab":"Statistiky","atlas.bucketTab":"Bucket List","atlas.addBucket":"Přidat na Bucket List","atlas.bucketNotesPlaceholder":"Poznámky (volitelné)","atlas.bucketEmpty":"Váš seznam přání je prázdný","atlas.bucketEmptyHint":"Přidejte místa, která sníte navštívit","atlas.days":"Dní","atlas.visitedCountries":"Navštívené země","atlas.cities":"Města","atlas.noData":"Zatím žádná cestovatelská data","atlas.noDataHint":"Vytvořte cestu a přidejte místa, abyste viděli svou mapu světa","atlas.lastTrip":"Poslední cesta","atlas.nextTrip":"Další cesta","atlas.daysLeft":"dní zbývá","atlas.streak":"Série","atlas.year":"rok","atlas.years":"roky/let","atlas.yearInRow":"rok v řadě","atlas.yearsInRow":"let v řadě","atlas.tripIn":"cesta v roce","atlas.tripsIn":"cest v roce","atlas.since":"od","atlas.europe":"Evropa","atlas.asia":"Asie","atlas.northAmerica":"S. Amerika","atlas.southAmerica":"J. Amerika","atlas.africa":"Afrika","atlas.oceania":"Oceánie","atlas.other":"Ostatní","atlas.firstVisit":"První cesta","atlas.lastVisitLabel":"Poslední cesta","atlas.tripSingular":"Cesta","atlas.tripPlural":"Cesty","atlas.placeVisited":"Navštívené místo","atlas.placesVisited":"Navštívená místa","trip.tabs.plan":"Plán","trip.tabs.reservations":"Rezervace","trip.tabs.reservationsShort":"Rez.","trip.tabs.packing":"Seznam věcí","trip.tabs.packingShort":"Balení","trip.tabs.budget":"Rozpočet","trip.tabs.files":"Soubory","trip.loading":"Načítání cesty...","trip.loadingPhotos":"Načítání fotek míst...","trip.mobilePlan":"Plán","trip.mobilePlaces":"Místa","trip.toast.placeUpdated":"Místo bylo aktualizováno","trip.toast.placeAdded":"Místo bylo přidáno","trip.toast.placeDeleted":"Místo bylo smazáno","trip.toast.selectDay":"Prosím nejdříve vyberte den","trip.toast.assignedToDay":"Místo bylo přiřazeno ke dni","trip.toast.reorderError":"Nepodařilo se změnit pořadí","trip.toast.reservationUpdated":"Rezervace aktualizována","trip.toast.reservationAdded":"Rezervace přidána","trip.toast.deleted":"Smazáno","trip.confirm.deletePlace":"Opravdu chcete toto místo smazat?","dayplan.emptyDay":"Na tento den nejsou naplánována žádná místa","dayplan.addNote":"Přidat poznámku","dayplan.editNote":"Upravit poznámku","dayplan.noteAdd":"Přidat poznámku","dayplan.noteEdit":"Upravit poznámku","dayplan.noteTitle":"Poznámka","dayplan.noteSubtitle":"Poznámka ke dni","dayplan.totalCost":"Celkové náklady","dayplan.days":"Dny","dayplan.dayN":"Den {n}","dayplan.calculating":"Počítání...","dayplan.route":"Trasa","dayplan.optimize":"Optimalizovat","dayplan.optimized":"Trasa optimalizována","dayplan.routeError":"Nepodařilo se vypočítat trasu","dayplan.toast.needTwoPlaces":"Pro optimalizaci trasy jsou potřeba alespoň dvě místa","dayplan.toast.routeOptimized":"Trasa byla optimalizována","dayplan.toast.noGeoPlaces":"Nebyla nalezena žádná místa se souřadnicemi pro výpočet trasy","dayplan.confirmed":"Potvrzeno","dayplan.pendingRes":"Čeká na potvrzení","dayplan.pdf":"PDF","dayplan.pdfTooltip":"Exportovat denní plán do PDF","dayplan.pdfError":"Export do PDF se nezdařil","dayplan.cannotReorderTransport":"Rezervace s pevným časem nelze přeuspořádat","dayplan.confirmRemoveTimeTitle":"Odebrat čas?","dayplan.confirmRemoveTimeBody":"Toto místo má pevný čas ({time}). Přesunutím se čas odebere a povolí se volné řazení.","dayplan.confirmRemoveTimeAction":"Odebrat čas a přesunout","dayplan.cannotDropOnTimed":"Položky nelze umístit mezi záznamy s pevným časem","dayplan.cannotBreakChronology":"Toto by porušilo chronologické pořadí naplánovaných položek a rezervací","places.addPlace":"Přidat místo/aktivitu","places.importGpx":"GPX","places.gpxImported":"{count} míst importováno z GPX","places.urlResolved":"Místo importováno z URL","places.gpxError":"Import GPX se nezdařil","places.importGoogleList":"Google Seznam","places.googleListHint":"Vložte sdílený odkaz na seznam Google Maps pro import všech míst.","places.googleListImported":'{count} míst importováno ze seznamu "{list}"',"places.googleListError":"Import seznamu Google Maps se nezdařil","places.viewDetails":"Zobrazit detaily","places.assignToDay":"Přidat do kterého dne?","places.all":"Vše","places.unplanned":"Nezařazené","places.search":"Hledat místa...","places.allCategories":"Všechny kategorie","places.categoriesSelected":"kategorií","places.clearFilter":"Vymazat filtr","places.count":"{count} míst","places.countSingular":"1 místo","places.allPlanned":"Všechna místa jsou naplánována","places.noneFound":"Žádná místa nebyla nalezena","places.editPlace":"Upravit místo","places.formName":"Název","places.formNamePlaceholder":"např. Eiffelova věž","places.formDescription":"Popis","places.formDescriptionPlaceholder":"Krátký popis...","places.formAddress":"Adresa","places.formAddressPlaceholder":"Ulice, město, země","places.formLat":"Zeměpisná šířka","places.formLng":"Zeměpisná délka","places.formCategory":"Kategorie","places.noCategory":"Bez kategorie","places.categoryNamePlaceholder":"Název kategorie","places.formTime":"Čas","places.startTime":"Od","places.endTime":"Do","places.endTimeBeforeStart":"Čas konce je před časem začátku","places.timeCollision":"Časový překryv s:","places.formWebsite":"Webové stránky","places.formNotesPlaceholder":"Osobní poznámky...","places.formReservation":"Rezervace","places.reservationNotesPlaceholder":"Poznámky k rezervaci, potvrzovací kód...","places.mapsSearchPlaceholder":"Hledat místa...","places.mapsSearchError":"Hledání místa se nezdařilo.","places.osmHint":"Používáte hledání přes OpenStreetMap (bez fotek a hodnocení). Pro plné detaily přidejte Google API klíč v nastavení.","places.osmActive":"Hledání přes OpenStreetMap.","places.categoryCreateError":"Nepodařilo se vytvořit kategorii","places.nameRequired":"Prosím zadejte název","places.saveError":"Uložení se nezdařilo","inspector.opened":"Otevřeno","inspector.closed":"Zavřeno","inspector.openingHours":"Otevírací doba","inspector.showHours":"Zobrazit otevírací dobu","inspector.files":"Soubory","inspector.filesCount":"{count} souborů","inspector.removeFromDay":"Odebrat ze dne","inspector.addToDay":"Přidat ke dni","inspector.confirmedRes":"Potvrzená rezervace","inspector.pendingRes":"Čekající rezervace","inspector.google":"Otevřít v Google Mapách","inspector.website":"Otevřít webové stránky","inspector.addRes":"Rezervace","inspector.editRes":"Upravit rezervaci","inspector.participants":"Účastníci","inspector.trackStats":"Data trasy","reservations.title":"Rezervace","reservations.empty":"Zatím žádné rezervace","reservations.emptyHint":"Přidejte rezervace letů, hotelů a dalších","reservations.add":"Přidat rezervaci","reservations.addManual":"Ruční rezervace","reservations.placeHint":"Tip: Rezervace je nejlepší vytvářet přímo z místa – propojí se tak s denním plánem.","reservations.confirmed":"Potvrzeno","reservations.pending":"Čeká na potvrzení","reservations.summary":"{confirmed} potvrzených, {pending} čekajících","reservations.fromPlan":"Z plánu","reservations.showFiles":"Zobrazit soubory","reservations.editTitle":"Upravit rezervaci","reservations.status":"Stav","reservations.datetime":"Datum a čas","reservations.startTime":"Čas začátku","reservations.endTime":"Čas konce","reservations.date":"Datum","reservations.time":"Čas","reservations.timeAlt":"Čas (alternativní, např. 19:30)","reservations.notes":"Poznámky","reservations.notesPlaceholder":"Další poznámky...","reservations.meta.airline":"Letecká společnost","reservations.meta.flightNumber":"Číslo letu","reservations.meta.from":"Z","reservations.meta.to":"Do","reservations.meta.trainNumber":"Číslo vlaku","reservations.meta.platform":"Nástupiště","reservations.meta.seat":"Sedadlo","reservations.meta.checkIn":"Check-in","reservations.meta.checkOut":"Check-out","reservations.meta.linkAccommodation":"Ubytování","reservations.meta.pickAccommodation":"Propojit s ubytováním","reservations.meta.noAccommodation":"Nic","reservations.meta.hotelPlace":"Ubytování","reservations.meta.pickHotel":"Vybrat ubytování","reservations.meta.fromDay":"Od dne","reservations.meta.toDay":"Do dne","reservations.meta.selectDay":"Vyberte den","reservations.type.flight":"Let","reservations.type.hotel":"Ubytování","reservations.type.restaurant":"Restaurace","reservations.type.train":"Vlak","reservations.type.car":"Pronájem auta","reservations.type.cruise":"Plavba","reservations.type.event":"Událost","reservations.type.tour":"Prohlídka","reservations.type.other":"Jiné","reservations.confirm.delete":"Opravdu chcete smazat rezervaci „{name}”?","reservations.confirm.deleteTitle":"Smazat rezervaci?","reservations.confirm.deleteBody":"„{name}” bude trvale smazána.","reservations.toast.updated":"Rezervace aktualizována","reservations.toast.removed":"Rezervace smazána","reservations.toast.fileUploaded":"Soubor byl nahrán","reservations.toast.uploadError":"Nahrávání se nezdařilo","reservations.newTitle":"Nová rezervace","reservations.bookingType":"Typ rezervace","reservations.titleLabel":"Název","reservations.titlePlaceholder":"např. Let LH123, Hotel Adlon...","reservations.locationAddress":"Místo / Adresa","reservations.locationPlaceholder":"Adresa, letiště, hotel...","reservations.confirmationCode":"Rezervační kód","reservations.confirmationPlaceholder":"např. ABC12345","reservations.day":"Den","reservations.noDay":"Žádný den","reservations.place":"Místo","reservations.noPlace":"Žádné místo","reservations.pendingSave":"bude uloženo…","reservations.uploading":"Nahrávání...","reservations.attachFile":"Přiložit soubor","reservations.linkExisting":"Propojit stávající soubor","reservations.toast.saveError":"Uložení se nezdařilo","reservations.toast.updateError":"Aktualizace se nezdařila","reservations.toast.deleteError":"Smazání se nezdařilo","reservations.confirm.remove":"Odstranit rezervaci pro „{name}”?","reservations.linkAssignment":"Propojit s přiřazením dne","reservations.pickAssignment":"Vyberte přiřazení z vašeho plánu...","reservations.noAssignment":"Bez propojení (samostatné)","budget.title":"Rozpočet","budget.exportCsv":"Exportovat CSV","budget.emptyTitle":"Zatím nebyl vytvořen žádný rozpočet","budget.emptyText":"Vytvořte kategorie a položky pro plánování cestovního rozpočtu","budget.emptyPlaceholder":"Zadejte název kategorie...","budget.createCategory":"Vytvořit kategorii","budget.category":"Kategorie","budget.categoryName":"Název kategorie","budget.table.name":"Název","budget.table.total":"Celkem","budget.table.persons":"Osoby","budget.table.days":"Dní","budget.table.perPerson":"Na osobu","budget.table.perDay":"Za den","budget.table.perPersonDay":"Os. / den","budget.table.note":"Poznámka","budget.table.date":"Datum","budget.newEntry":"Nová položka","budget.defaultEntry":"Nová položka","budget.defaultCategory":"Nová kategorie","budget.total":"Celkem","budget.totalBudget":"Celkový rozpočet","budget.byCategory":"Podle kategorie","budget.editTooltip":"Klikněte pro úpravu","budget.confirm.deleteCategory":"Opravdu chcete smazat kategorii „{name}” s {count} položkami?","budget.deleteCategory":"Smazat kategorii","budget.perPerson":"Na osobu","budget.paid":"Zaplaceno","budget.open":"Nezaplaceno","budget.noMembers":"Žádní členové nebyli přiřazeni","budget.settlement":"Vyúčtování","budget.settlementInfo":"Klikněte na avatar člena u rozpočtové položky pro zelené označení – to znamená, že zaplatil. Vyúčtování pak ukazuje, kdo komu a kolik dluží.","budget.netBalances":"Čisté zůstatky","files.title":"Soubory","files.count":"{count} souborů","files.countSingular":"1 soubor","files.uploaded":"{count} nahráno","files.uploadError":"Nahrávání se nezdařilo","files.dropzone":"Přetáhněte soubory sem","files.dropzoneHint":"nebo klikněte pro výběr","files.allowedTypes":"Obrázky, PDF, DOC, DOCX, XLS, XLSX, TXT, CSV · Max 50 MB","files.uploading":"Nahrávání...","files.filterAll":"Vše","files.filterPdf":"PDF","files.filterImages":"Obrázky","files.filterDocs":"Dokumenty","files.filterCollab":"Poznámky spolupráce","files.sourceCollab":"Z poznámek spolupráce","files.empty":"Zatím žádné soubory","files.emptyHint":"Nahrajte soubory k vaší cestě","files.openTab":"Otevřít v nové kartě","files.confirm.delete":"Opravdu chcete smazat tento soubor?","files.toast.deleted":"Soubor byl smazán","files.toast.deleteError":"Nepodařilo se smazat soubor","files.sourcePlan":"Denní plán","files.sourceBooking":"Rezervace","files.attach":"Přiložit","files.pasteHint":"Můžete také vložit obrázek ze schránky (Ctrl+V)","files.trash":"Koš","files.trashEmpty":"Koš je prázdný","files.emptyTrash":"Vysypat koš","files.restore":"Obnovit","files.star":"Označit hvězdičkou","files.unstar":"Odebrat hvězdičku","files.assign":"Přiřadit","files.assignTitle":"Přiřadit soubor","files.assignPlace":"Místo","files.assignBooking":"Rezervace","files.unassigned":"Nepřiřazeno","files.unlink":"Zrušit propojení","files.toast.trashed":"Přesunuto do koše","files.toast.restored":"Soubor byl obnoven","files.toast.trashEmptied":"Koš byl vysypán","files.toast.assigned":"Soubor byl přiřazen","files.toast.assignError":"Přiřazení se nezdařilo","files.toast.restoreError":"Obnovení se nezdařilo","files.confirm.permanentDelete":"Trvale smazat tento soubor? Tuto akci nelze vrátit.","files.confirm.emptyTrash":"Trvale smazat všechny soubory v koši? Tuto akci nelze vrátit.","files.noteLabel":"Poznámka","files.notePlaceholder":"Přidat poznámku...","packing.title":"Seznam věcí","packing.empty":"Seznam věcí je prázdný","packing.import":"Importovat","packing.importTitle":"Importovat seznam","packing.importHint":"Jedna položka na řádek. Formát: Kategorie, Název, Váha v g (volitelné), Zavazadlo (volitelné), checked/unchecked (volitelné)","packing.importPlaceholder":`Hygiena, Zubní kartáček Oblečení, Trička, 200 Dokumenty, Pas, , Příruční zavazadlo @@ -181,27 +181,27 @@ Elektronika, Nabíječka, 50, Kufr, checked`,"packing.importCsv":"Načíst CSV/T Všechna aktuální data budou nahrazena zálohou.`,"backup.confirm.uploadRestore":`Nahrát a obnovit zálohu „{name}"? -Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zálohu „{name}"?',"backup.toast.loadError":"Nepodařilo se načíst zálohy","backup.toast.created":"Záloha byla úspěšně vytvořena","backup.toast.createError":"Nepodařilo se vytvořit zálohu","backup.toast.restored":"Záloha obnovena. Stránka se znovu načte…","backup.toast.restoreError":"Obnovení se nezdařilo","backup.toast.uploadError":"Nahrávání se nezdařilo","backup.toast.deleted":"Záloha smazána","backup.toast.deleteError":"Smazání se nezdařilo","backup.toast.downloadError":"Stahování se nezdařilo","backup.toast.settingsSaved":"Nastavení automatického zálohování uloženo","backup.toast.settingsError":"Nepodařilo se uložit nastavení","backup.auto.title":"Automatické zálohování","backup.auto.subtitle":"Automatické zálohování podle plánu","backup.auto.enable":"Povolit automatické zálohování","backup.auto.enableHint":"Zálohy budou vytvářeny automaticky podle zvoleného plánu","backup.auto.interval":"Interval","backup.auto.hour":"Spustit v hodinu","backup.auto.hourHint":"Místní čas serveru (formát {format})","backup.auto.dayOfWeek":"Den v týdnu","backup.auto.dayOfMonth":"Den v měsíci","backup.auto.dayOfMonthHint":"Omezeno na 1–28 pro kompatibilitu se všemi měsíci","backup.auto.scheduleSummary":"Plán","backup.auto.summaryDaily":"Každý den v {hour}:00","backup.auto.summaryWeekly":"Každý {day} v {hour}:00","backup.auto.summaryMonthly":"{day}. každého měsíce v {hour}:00","backup.auto.envLocked":"Docker","backup.auto.envLockedHint":"Automatické zálohování je konfigurováno přes Docker proměnné prostředí. Pro změnu nastavení aktualizujte docker-compose.yml a restartujte kontejner.","backup.auto.copyEnv":"Zkopírovat Docker proměnné","backup.auto.envCopied":"Docker proměnné prostředí zkopírovány do schránky","backup.auto.keepLabel":"Smazat staré zálohy po","backup.dow.sunday":"Ne","backup.dow.monday":"Po","backup.dow.tuesday":"Út","backup.dow.wednesday":"St","backup.dow.thursday":"Čt","backup.dow.friday":"Pá","backup.dow.saturday":"So","backup.interval.hourly":"Každou hodinu","backup.interval.daily":"Denně","backup.interval.weekly":"Týdně","backup.interval.monthly":"Měsíčně","backup.keep.1day":"1 den","backup.keep.3days":"3 dny","backup.keep.7days":"7 dní","backup.keep.14days":"14 dní","backup.keep.30days":"30 dní","backup.keep.forever":"Uchovávat navždy","photos.allDays":"Všechny dny","photos.noPhotos":"Zatím žádné fotky","photos.uploadHint":"Nahrajte své cestovní fotky","photos.clickToSelect":"nebo klikněte pro výběr","photos.linkPlace":"Propojit s místem","photos.noPlace":"Žádné místo","photos.uploadN":"Nahrát {n} fotek","backup.restoreConfirmTitle":"Obnovit zálohu?","backup.restoreWarning":"Všechna aktuální data (cesty, místa, uživatelé, nahrané soubory) budou trvale nahrazena zálohou. Tuto akci nelze vrátit.","backup.restoreTip":"Tip: Před obnovením vytvořte zálohu aktuálního stavu.","backup.restoreConfirm":"Ano, obnovit","pdf.travelPlan":"Cestovní plán","pdf.planned":"Naplánováno","pdf.costLabel":"Náklady EUR","pdf.preview":"Náhled PDF","pdf.saveAsPdf":"Uložit jako PDF","planner.places":"Místa","planner.bookings":"Rezervace","planner.packingList":"Seznam věcí","planner.documents":"Dokumenty","planner.dayPlan":"Denní plán","planner.reservations":"Rezervace","planner.minTwoPlaces":"Potřebujete alespoň 2 místa se souřadnicemi","planner.noGeoPlaces":"Žádná místa se souřadnicemi nejsou k dispozici","planner.routeCalculated":"Trasa vypočtena","planner.routeCalcFailed":"Trasu se nepodařilo vypočítat","planner.routeError":"Chyba při výpočtu trasy","planner.routeOptimized":"Trasa optimalizována","planner.reservationUpdated":"Rezervace aktualizována","planner.reservationAdded":"Rezervace přidána","planner.confirmDeleteReservation":"Smazat rezervaci?","planner.reservationDeleted":"Rezervace smazána","planner.days":"Dny","planner.allPlaces":"Všechna místa","planner.totalPlaces":"Celkem {n} míst","planner.noDaysPlanned":"Zatím nejsou naplánovány žádné dny","planner.editTrip":"Upravit cestu →","planner.placeOne":"1 místo","planner.placeN":"{n} míst","planner.addNote":"Přidat poznámku","planner.noEntries":"Pro tento den nejsou žádné záznamy","planner.addPlace":"Přidat místo/aktivitu","planner.addPlaceShort":"+ Přidat místo/aktivitu","planner.resPending":"Rezervace čeká · ","planner.resConfirmed":"Rezervace potvrzena · ","planner.notePlaceholder":"Poznámka…","planner.noteTimePlaceholder":"Čas (volitelné)","planner.noteExamplePlaceholder":"např. S3 ve 14:30 z hlavního nádraží, trajekt z přístaviště 7, přestávka na oběd…","planner.totalCost":"Celkové náklady","planner.searchPlaces":"Hledat místa…","planner.allCategories":"Všechny kategorie","planner.noPlacesFound":"Žádná místa nenalezena","planner.addFirstPlace":"Přidat první místo","planner.noReservations":"Žádné rezervace","planner.addFirstReservation":"Přidat první rezervaci","planner.new":"Nový","planner.addToDay":"+ Den","planner.calculating":"Počítání…","planner.route":"Trasa","planner.optimize":"Optimalizovat","planner.openGoogleMaps":"Otevřít v Google Mapách","planner.selectDayHint":"Vyberte den ze seznamu vlevo pro zobrazení denního plánu","planner.noPlacesForDay":"Zatím žádná místa pro tento den","planner.addPlacesLink":"Přidat místa →","planner.minTotal":"min. celkem","planner.noReservation":"Žádná rezervace","planner.removeFromDay":"Odebrat ze dne","planner.addToThisDay":"Přidat ke dni","planner.overview":"Přehled","planner.noDays":"Zatím žádné dny","planner.editTripToAddDays":"Upravte cestu pro přidání dnů","planner.dayCount":"{n} dní","planner.clickToUnlock":"Klikněte pro odemčení","planner.keepPosition":"Zachovat pozici při optimalizaci trasy","planner.dayDetails":"Podrobnosti dne","planner.dayN":"Den {n}","stats.countries":"Země","stats.cities":"Města","stats.trips":"Cesty","stats.places":"Místa","stats.worldProgress":"Průzkum světa","stats.visited":"navštíveno","stats.remaining":"zbývá","stats.visitedCountries":"Navštívené země","day.precipProb":"Pravděpodobnost srážek","day.precipitation":"Srážky","day.wind":"Vítr","day.sunrise":"Východ slunce","day.sunset":"Západ slunce","day.hourlyForecast":"Hodinová předpověď","day.climateHint":"Historické průměry — reálná předpověď je k dispozici do 16 dnů od tohoto data.","day.noWeather":"Nejsou k dispozici žádná data o počasí. Přidejte místo se souřadnicemi.","day.overview":"Denní přehled","day.accommodation":"Ubytování","day.addAccommodation":"Přidat ubytování","day.hotelDayRange":"Použít na dny","day.noPlacesForHotel":"Nejprve přidejte místa ke své cestě","day.allDays":"Vše","day.checkIn":"Check-in","day.checkOut":"Check-out","day.confirmation":"Potvrzení","day.editAccommodation":"Upravit ubytování","day.reservations":"Rezervace","memories.title":"Fotky","memories.notConnected":"Immich není připojen","memories.notConnectedHint":"Připojte svoji instanci Immich v Nastavení, abyste zde viděli fotky z cest.","memories.noDates":"Přidejte data k cestě pro načtení fotek.","memories.noPhotos":"Nenalezeny žádné fotky","memories.noPhotosHint":"V Immich nebyly nalezeny žádné fotky pro období této cesty.","memories.photosFound":"fotek","memories.fromOthers":"od ostatních","memories.sharePhotos":"Sdílet fotky","memories.sharing":"Sdílení","memories.reviewTitle":"Zkontrolujte své fotky","memories.reviewHint":"Klikněte na fotky pro vyloučení ze sdílení.","memories.shareCount":"Sdílet {count} fotek","memories.immichUrl":"URL serveru Immich","memories.immichApiKey":"API klíč","memories.testConnection":"Otestovat připojení","memories.testFirst":"Nejprve otestujte připojení","memories.connected":"Připojeno","memories.disconnected":"Nepřipojeno","memories.connectionSuccess":"Připojeno k Immich","memories.connectionError":"Nepodařilo se připojit k Immich","memories.saved":"Nastavení Immich uloženo","memories.addPhotos":"Přidat fotky","memories.linkAlbum":"Propojit album","memories.selectAlbum":"Vybrat album z Immich","memories.noAlbums":"Žádná alba nenalezena","memories.syncAlbum":"Synchronizovat album","memories.unlinkAlbum":"Odpojit","memories.photos":"fotek","memories.selectPhotos":"Vybrat fotky z Immich","memories.selectHint":"Klepněte na fotky pro jejich výběr.","memories.selected":"vybráno","memories.addSelected":"Přidat {count} fotek","memories.alreadyAdded":"Přidáno","memories.private":"Soukromé","memories.stopSharing":"Zastavit sdílení","memories.oldest":"Nejstarší","memories.newest":"Nejnovější","memories.allLocations":"Všechna místa","memories.tripDates":"Data cesty","memories.allPhotos":"Všechny fotky","memories.confirmShareTitle":"Sdílet se členy cesty?","memories.confirmShareHint":"{count} fotek bude viditelných pro všechny členy této cesty. Jednotlivé fotky můžete později nastavit jako soukromé.","memories.confirmShareButton":"Sdílet fotky","collab.tabs.chat":"Chat","collab.tabs.notes":"Poznámky","collab.tabs.polls":"Hlasování","collab.whatsNext.title":"Co následuje","collab.whatsNext.today":"Dnes","collab.whatsNext.tomorrow":"Zítra","collab.whatsNext.empty":"Žádné nadcházející aktivity","collab.whatsNext.until":"do","collab.whatsNext.emptyHint":"Aktivity s časem se zde zobrazí","collab.chat.send":"Odeslat","collab.chat.placeholder":"Napište zprávu...","collab.chat.empty":"Začněte konverzaci","collab.chat.emptyHint":"Zprávy jsou sdíleny se všemi členy cesty","collab.chat.emptyDesc":"Sdílejte nápady, plány a novinky se svou cestovatelskou skupinou","collab.chat.today":"Dnes","collab.chat.yesterday":"Včera","collab.chat.deletedMessage":"smazal zprávu","collab.chat.reply":"Odpovědět","collab.chat.loadMore":"Načíst starší zprávy","collab.chat.justNow":"právě teď","collab.chat.minutesAgo":"před {n} min","collab.chat.hoursAgo":"před {n} h","collab.notes.title":"Poznámky","collab.notes.new":"Nová poznámka","collab.notes.empty":"Zatím žádné poznámky","collab.notes.emptyHint":"Začněte zapisovat nápady a plány","collab.notes.all":"Vše","collab.notes.titlePlaceholder":"Poznámka...","collab.notes.noCategory":"Bez kategorie","collab.notes.color":"Barva","collab.notes.save":"Uložit","collab.notes.cancel":"Zrušit","collab.notes.edit":"Upravit","collab.notes.delete":"Smazat","collab.notes.pin":"Připnout","collab.notes.unpin":"Odepnout","collab.notes.daysAgo":"před {n} dny","collab.notes.categorySettings":"Spravovat kategorie","collab.notes.create":"Vytvořit","collab.notes.website":"Webové stránky","collab.notes.websitePlaceholder":"https://...","collab.notes.attachFiles":"Přiložit soubory","collab.notes.noCategoriesYet":"Zatím žádné kategorie","collab.notes.emptyDesc":"Vytvořte poznámku a začněte","collab.notes.contentPlaceholder":"Napište něco...","collab.notes.categoryPlaceholder":"Kategorie","collab.notes.newCategory":"Nová kategorie...","collab.notes.category":"Kategorie","collab.polls.title":"Hlasování","collab.polls.new":"Nové hlasování","collab.polls.empty":"Zatím žádná hlasování","collab.polls.emptyHint":"Zeptejte se skupiny a hlasujte společně","collab.polls.question":"Otázka","collab.polls.questionPlaceholder":"Co bychom měli dělat?","collab.polls.addOption":"+ Přidat možnost","collab.polls.optionPlaceholder":"Možnost {n}","collab.polls.create":"Vytvořit hlasování","collab.polls.close":"Uzavřít","collab.polls.closed":"Uzavřeno","collab.polls.votes":"{n} hlasů","collab.polls.vote":"{n} hlas","collab.polls.multipleChoice":"Více možností","collab.polls.multiChoice":"Více možností","collab.polls.deadline":"Termín","collab.polls.option":"Možnost","collab.polls.options":"Možnosti","collab.polls.delete":"Smazat","collab.polls.closedSection":"Uzavřené","admin.tabs.permissions":"Oprávnění","perm.title":"Nastavení oprávnění","perm.subtitle":"Určete, kdo může provádět akce v aplikaci","perm.saved":"Nastavení oprávnění uloženo","perm.resetDefaults":"Obnovit výchozí","perm.customized":"upraveno","perm.level.admin":"Pouze administrátor","perm.level.tripOwner":"Vlastník výletu","perm.level.tripMember":"Členové výletu","perm.level.everybody":"Všichni","perm.cat.trip":"Správa výletů","perm.cat.members":"Správa členů","perm.cat.files":"Soubory","perm.cat.content":"Obsah a plán","perm.cat.extras":"Rozpočet, balení a spolupráce","perm.action.trip_create":"Vytvářet výlety","perm.action.trip_edit":"Upravit detaily výletu","perm.action.trip_delete":"Smazat výlety","perm.action.trip_archive":"Archivovat / odarchivovat výlety","perm.action.trip_cover_upload":"Nahrát titulní obrázek","perm.action.member_manage":"Přidat / odebrat členy","perm.action.file_upload":"Nahrát soubory","perm.action.file_edit":"Upravit metadata souborů","perm.action.file_delete":"Smazat soubory","perm.action.place_edit":"Přidat / upravit / smazat místa","perm.action.day_edit":"Upravit dny, poznámky a přiřazení","perm.action.reservation_edit":"Spravovat rezervace","perm.action.budget_edit":"Spravovat rozpočet","perm.action.packing_edit":"Spravovat seznamy balení","perm.action.collab_edit":"Spolupráce (poznámky, hlasování, chat)","perm.action.share_manage":"Spravovat odkazy ke sdílení","perm.actionHint.trip_create":"Kdo může vytvářet nové výlety","perm.actionHint.trip_edit":"Kdo může měnit název, data, popis a měnu výletu","perm.actionHint.trip_delete":"Kdo může trvale smazat výlet","perm.actionHint.trip_archive":"Kdo může archivovat nebo odarchivovat výlet","perm.actionHint.trip_cover_upload":"Kdo může nahrát nebo změnit titulní obrázek","perm.actionHint.member_manage":"Kdo může pozvat nebo odebrat členy výletu","perm.actionHint.file_upload":"Kdo může nahrávat soubory k výletu","perm.actionHint.file_edit":"Kdo může upravovat popisy a odkazy souborů","perm.actionHint.file_delete":"Kdo může přesunout soubory do koše nebo je trvale smazat","perm.actionHint.place_edit":"Kdo může přidávat, upravovat nebo mazat místa","perm.actionHint.day_edit":"Kdo může upravovat dny, poznámky ke dnům a přiřazení míst","perm.actionHint.reservation_edit":"Kdo může vytvářet, upravovat nebo mazat rezervace","perm.actionHint.budget_edit":"Kdo může vytvářet, upravovat nebo mazat položky rozpočtu","perm.actionHint.packing_edit":"Kdo může spravovat položky balení a tašky","perm.actionHint.collab_edit":"Kdo může vytvářet poznámky, hlasování a posílat zprávy","perm.actionHint.share_manage":"Kdo může vytvářet nebo mazat veřejné odkazy ke sdílení"},$p=[{value:"de",label:"Deutsch"},{value:"en",label:"English"},{value:"es",label:"Español"},{value:"fr",label:"Français"},{value:"hu",label:"Magyar"},{value:"nl",label:"Nederlands"},{value:"br",label:"Português (Brasil)"},{value:"cs",label:"Česky"},{value:"ru",label:"Русский"},{value:"zh",label:"中文"},{value:"it",label:"Italiano"},{value:"ar",label:"العربية"}],lh={de:fM,en:_j,es:vM,fr:yM,hu:bM,it:xM,ru:kM,zh:wM,nl:_M,ar:SM,br:jM,cs:CM},S0={de:"de-DE",en:"en-US",es:"es-ES",fr:"fr-FR",hu:"hu-HU",it:"it-IT",ru:"ru-RU",zh:"zh-CN",nl:"nl-NL",ar:"ar-SA",br:"pt-BR",cs:"cs-CZ"},zM=new Set(["ar"]);function Om(e){return S0[e]||S0.en}function Sj(e){return e==="br"?"pt-BR":["de","es","fr","hu","it","ru","zh","nl","ar","cs"].includes(e)?e:"en"}function TM(e){return zM.has(e)}const jj=y.createContext({t:e=>e,language:"en",locale:"en-US"});function PM({children:e}){const t=na(n=>n.settings.language)||"en";y.useEffect(()=>{document.documentElement.lang=t,document.documentElement.dir=TM(t)?"rtl":"ltr"},[t]);const a=y.useMemo(()=>{const n=lh[t]||lh.en,r=lh.en;function o(s,d){let c=n[s]??r[s]??s;return d&&Object.entries(d).forEach(([p,m])=>{c=c.replace(new RegExp(`\\{${p}\\}`,"g"),String(m))}),c}return{t:o,language:t,locale:Om(t)}},[t]);return i.jsx(jj.Provider,{value:a,children:e})}function lt(){return y.useContext(jj)}/** +Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zálohu „{name}"?',"backup.toast.loadError":"Nepodařilo se načíst zálohy","backup.toast.created":"Záloha byla úspěšně vytvořena","backup.toast.createError":"Nepodařilo se vytvořit zálohu","backup.toast.restored":"Záloha obnovena. Stránka se znovu načte…","backup.toast.restoreError":"Obnovení se nezdařilo","backup.toast.uploadError":"Nahrávání se nezdařilo","backup.toast.deleted":"Záloha smazána","backup.toast.deleteError":"Smazání se nezdařilo","backup.toast.downloadError":"Stahování se nezdařilo","backup.toast.settingsSaved":"Nastavení automatického zálohování uloženo","backup.toast.settingsError":"Nepodařilo se uložit nastavení","backup.auto.title":"Automatické zálohování","backup.auto.subtitle":"Automatické zálohování podle plánu","backup.auto.enable":"Povolit automatické zálohování","backup.auto.enableHint":"Zálohy budou vytvářeny automaticky podle zvoleného plánu","backup.auto.interval":"Interval","backup.auto.hour":"Spustit v hodinu","backup.auto.hourHint":"Místní čas serveru (formát {format})","backup.auto.dayOfWeek":"Den v týdnu","backup.auto.dayOfMonth":"Den v měsíci","backup.auto.dayOfMonthHint":"Omezeno na 1–28 pro kompatibilitu se všemi měsíci","backup.auto.scheduleSummary":"Plán","backup.auto.summaryDaily":"Každý den v {hour}:00","backup.auto.summaryWeekly":"Každý {day} v {hour}:00","backup.auto.summaryMonthly":"{day}. každého měsíce v {hour}:00","backup.auto.envLocked":"Docker","backup.auto.envLockedHint":"Automatické zálohování je konfigurováno přes Docker proměnné prostředí. Pro změnu nastavení aktualizujte docker-compose.yml a restartujte kontejner.","backup.auto.copyEnv":"Zkopírovat Docker proměnné","backup.auto.envCopied":"Docker proměnné prostředí zkopírovány do schránky","backup.auto.keepLabel":"Smazat staré zálohy po","backup.dow.sunday":"Ne","backup.dow.monday":"Po","backup.dow.tuesday":"Út","backup.dow.wednesday":"St","backup.dow.thursday":"Čt","backup.dow.friday":"Pá","backup.dow.saturday":"So","backup.interval.hourly":"Každou hodinu","backup.interval.daily":"Denně","backup.interval.weekly":"Týdně","backup.interval.monthly":"Měsíčně","backup.keep.1day":"1 den","backup.keep.3days":"3 dny","backup.keep.7days":"7 dní","backup.keep.14days":"14 dní","backup.keep.30days":"30 dní","backup.keep.forever":"Uchovávat navždy","photos.allDays":"Všechny dny","photos.noPhotos":"Zatím žádné fotky","photos.uploadHint":"Nahrajte své cestovní fotky","photos.clickToSelect":"nebo klikněte pro výběr","photos.linkPlace":"Propojit s místem","photos.noPlace":"Žádné místo","photos.uploadN":"Nahrát {n} fotek","backup.restoreConfirmTitle":"Obnovit zálohu?","backup.restoreWarning":"Všechna aktuální data (cesty, místa, uživatelé, nahrané soubory) budou trvale nahrazena zálohou. Tuto akci nelze vrátit.","backup.restoreTip":"Tip: Před obnovením vytvořte zálohu aktuálního stavu.","backup.restoreConfirm":"Ano, obnovit","pdf.travelPlan":"Cestovní plán","pdf.planned":"Naplánováno","pdf.costLabel":"Náklady EUR","pdf.preview":"Náhled PDF","pdf.saveAsPdf":"Uložit jako PDF","planner.places":"Místa","planner.bookings":"Rezervace","planner.packingList":"Seznam věcí","planner.documents":"Dokumenty","planner.dayPlan":"Denní plán","planner.reservations":"Rezervace","planner.minTwoPlaces":"Potřebujete alespoň 2 místa se souřadnicemi","planner.noGeoPlaces":"Žádná místa se souřadnicemi nejsou k dispozici","planner.routeCalculated":"Trasa vypočtena","planner.routeCalcFailed":"Trasu se nepodařilo vypočítat","planner.routeError":"Chyba při výpočtu trasy","planner.routeOptimized":"Trasa optimalizována","planner.reservationUpdated":"Rezervace aktualizována","planner.reservationAdded":"Rezervace přidána","planner.confirmDeleteReservation":"Smazat rezervaci?","planner.reservationDeleted":"Rezervace smazána","planner.days":"Dny","planner.allPlaces":"Všechna místa","planner.totalPlaces":"Celkem {n} míst","planner.noDaysPlanned":"Zatím nejsou naplánovány žádné dny","planner.editTrip":"Upravit cestu →","planner.placeOne":"1 místo","planner.placeN":"{n} míst","planner.addNote":"Přidat poznámku","planner.noEntries":"Pro tento den nejsou žádné záznamy","planner.addPlace":"Přidat místo/aktivitu","planner.addPlaceShort":"+ Přidat místo/aktivitu","planner.resPending":"Rezervace čeká · ","planner.resConfirmed":"Rezervace potvrzena · ","planner.notePlaceholder":"Poznámka…","planner.noteTimePlaceholder":"Čas (volitelné)","planner.noteExamplePlaceholder":"např. S3 ve 14:30 z hlavního nádraží, trajekt z přístaviště 7, přestávka na oběd…","planner.totalCost":"Celkové náklady","planner.searchPlaces":"Hledat místa…","planner.allCategories":"Všechny kategorie","planner.noPlacesFound":"Žádná místa nenalezena","planner.addFirstPlace":"Přidat první místo","planner.noReservations":"Žádné rezervace","planner.addFirstReservation":"Přidat první rezervaci","planner.new":"Nový","planner.addToDay":"+ Den","planner.calculating":"Počítání…","planner.route":"Trasa","planner.optimize":"Optimalizovat","planner.openGoogleMaps":"Otevřít v Google Mapách","planner.selectDayHint":"Vyberte den ze seznamu vlevo pro zobrazení denního plánu","planner.noPlacesForDay":"Zatím žádná místa pro tento den","planner.addPlacesLink":"Přidat místa →","planner.minTotal":"min. celkem","planner.noReservation":"Žádná rezervace","planner.removeFromDay":"Odebrat ze dne","planner.addToThisDay":"Přidat ke dni","planner.overview":"Přehled","planner.noDays":"Zatím žádné dny","planner.editTripToAddDays":"Upravte cestu pro přidání dnů","planner.dayCount":"{n} dní","planner.clickToUnlock":"Klikněte pro odemčení","planner.keepPosition":"Zachovat pozici při optimalizaci trasy","planner.dayDetails":"Podrobnosti dne","planner.dayN":"Den {n}","stats.countries":"Země","stats.cities":"Města","stats.trips":"Cesty","stats.places":"Místa","stats.worldProgress":"Průzkum světa","stats.visited":"navštíveno","stats.remaining":"zbývá","stats.visitedCountries":"Navštívené země","day.precipProb":"Pravděpodobnost srážek","day.precipitation":"Srážky","day.wind":"Vítr","day.sunrise":"Východ slunce","day.sunset":"Západ slunce","day.hourlyForecast":"Hodinová předpověď","day.climateHint":"Historické průměry — reálná předpověď je k dispozici do 16 dnů od tohoto data.","day.noWeather":"Nejsou k dispozici žádná data o počasí. Přidejte místo se souřadnicemi.","day.overview":"Denní přehled","day.accommodation":"Ubytování","day.addAccommodation":"Přidat ubytování","day.hotelDayRange":"Použít na dny","day.noPlacesForHotel":"Nejprve přidejte místa ke své cestě","day.allDays":"Vše","day.checkIn":"Check-in","day.checkOut":"Check-out","day.confirmation":"Potvrzení","day.editAccommodation":"Upravit ubytování","day.reservations":"Rezervace","memories.title":"Fotky","memories.notConnected":"Immich není připojen","memories.notConnectedHint":"Připojte svoji instanci Immich v Nastavení, abyste zde viděli fotky z cest.","memories.noDates":"Přidejte data k cestě pro načtení fotek.","memories.noPhotos":"Nenalezeny žádné fotky","memories.noPhotosHint":"V Immich nebyly nalezeny žádné fotky pro období této cesty.","memories.photosFound":"fotek","memories.fromOthers":"od ostatních","memories.sharePhotos":"Sdílet fotky","memories.sharing":"Sdílení","memories.reviewTitle":"Zkontrolujte své fotky","memories.reviewHint":"Klikněte na fotky pro vyloučení ze sdílení.","memories.shareCount":"Sdílet {count} fotek","memories.immichUrl":"URL serveru Immich","memories.immichApiKey":"API klíč","memories.testConnection":"Otestovat připojení","memories.testFirst":"Nejprve otestujte připojení","memories.connected":"Připojeno","memories.disconnected":"Nepřipojeno","memories.connectionSuccess":"Připojeno k Immich","memories.connectionError":"Nepodařilo se připojit k Immich","memories.saved":"Nastavení Immich uloženo","memories.addPhotos":"Přidat fotky","memories.linkAlbum":"Propojit album","memories.selectAlbum":"Vybrat album z Immich","memories.noAlbums":"Žádná alba nenalezena","memories.syncAlbum":"Synchronizovat album","memories.unlinkAlbum":"Odpojit","memories.photos":"fotek","memories.selectPhotos":"Vybrat fotky z Immich","memories.selectHint":"Klepněte na fotky pro jejich výběr.","memories.selected":"vybráno","memories.addSelected":"Přidat {count} fotek","memories.alreadyAdded":"Přidáno","memories.private":"Soukromé","memories.stopSharing":"Zastavit sdílení","memories.oldest":"Nejstarší","memories.newest":"Nejnovější","memories.allLocations":"Všechna místa","memories.tripDates":"Data cesty","memories.allPhotos":"Všechny fotky","memories.confirmShareTitle":"Sdílet se členy cesty?","memories.confirmShareHint":"{count} fotek bude viditelných pro všechny členy této cesty. Jednotlivé fotky můžete později nastavit jako soukromé.","memories.confirmShareButton":"Sdílet fotky","collab.tabs.chat":"Chat","collab.tabs.notes":"Poznámky","collab.tabs.polls":"Hlasování","collab.whatsNext.title":"Co následuje","collab.whatsNext.today":"Dnes","collab.whatsNext.tomorrow":"Zítra","collab.whatsNext.empty":"Žádné nadcházející aktivity","collab.whatsNext.until":"do","collab.whatsNext.emptyHint":"Aktivity s časem se zde zobrazí","collab.chat.send":"Odeslat","collab.chat.placeholder":"Napište zprávu...","collab.chat.empty":"Začněte konverzaci","collab.chat.emptyHint":"Zprávy jsou sdíleny se všemi členy cesty","collab.chat.emptyDesc":"Sdílejte nápady, plány a novinky se svou cestovatelskou skupinou","collab.chat.today":"Dnes","collab.chat.yesterday":"Včera","collab.chat.deletedMessage":"smazal zprávu","collab.chat.reply":"Odpovědět","collab.chat.loadMore":"Načíst starší zprávy","collab.chat.justNow":"právě teď","collab.chat.minutesAgo":"před {n} min","collab.chat.hoursAgo":"před {n} h","collab.notes.title":"Poznámky","collab.notes.new":"Nová poznámka","collab.notes.empty":"Zatím žádné poznámky","collab.notes.emptyHint":"Začněte zapisovat nápady a plány","collab.notes.all":"Vše","collab.notes.titlePlaceholder":"Poznámka...","collab.notes.noCategory":"Bez kategorie","collab.notes.color":"Barva","collab.notes.save":"Uložit","collab.notes.cancel":"Zrušit","collab.notes.edit":"Upravit","collab.notes.delete":"Smazat","collab.notes.pin":"Připnout","collab.notes.unpin":"Odepnout","collab.notes.daysAgo":"před {n} dny","collab.notes.categorySettings":"Spravovat kategorie","collab.notes.create":"Vytvořit","collab.notes.website":"Webové stránky","collab.notes.websitePlaceholder":"https://...","collab.notes.attachFiles":"Přiložit soubory","collab.notes.noCategoriesYet":"Zatím žádné kategorie","collab.notes.emptyDesc":"Vytvořte poznámku a začněte","collab.notes.contentPlaceholder":"Napište něco...","collab.notes.categoryPlaceholder":"Kategorie","collab.notes.newCategory":"Nová kategorie...","collab.notes.category":"Kategorie","collab.polls.title":"Hlasování","collab.polls.new":"Nové hlasování","collab.polls.empty":"Zatím žádná hlasování","collab.polls.emptyHint":"Zeptejte se skupiny a hlasujte společně","collab.polls.question":"Otázka","collab.polls.questionPlaceholder":"Co bychom měli dělat?","collab.polls.addOption":"+ Přidat možnost","collab.polls.optionPlaceholder":"Možnost {n}","collab.polls.create":"Vytvořit hlasování","collab.polls.close":"Uzavřít","collab.polls.closed":"Uzavřeno","collab.polls.votes":"{n} hlasů","collab.polls.vote":"{n} hlas","collab.polls.multipleChoice":"Více možností","collab.polls.multiChoice":"Více možností","collab.polls.deadline":"Termín","collab.polls.option":"Možnost","collab.polls.options":"Možnosti","collab.polls.delete":"Smazat","collab.polls.closedSection":"Uzavřené","admin.tabs.permissions":"Oprávnění","perm.title":"Nastavení oprávnění","perm.subtitle":"Určete, kdo může provádět akce v aplikaci","perm.saved":"Nastavení oprávnění uloženo","perm.resetDefaults":"Obnovit výchozí","perm.customized":"upraveno","perm.level.admin":"Pouze administrátor","perm.level.tripOwner":"Vlastník výletu","perm.level.tripMember":"Členové výletu","perm.level.everybody":"Všichni","perm.cat.trip":"Správa výletů","perm.cat.members":"Správa členů","perm.cat.files":"Soubory","perm.cat.content":"Obsah a plán","perm.cat.extras":"Rozpočet, balení a spolupráce","perm.action.trip_create":"Vytvářet výlety","perm.action.trip_edit":"Upravit detaily výletu","perm.action.trip_delete":"Smazat výlety","perm.action.trip_archive":"Archivovat / odarchivovat výlety","perm.action.trip_cover_upload":"Nahrát titulní obrázek","perm.action.member_manage":"Přidat / odebrat členy","perm.action.file_upload":"Nahrát soubory","perm.action.file_edit":"Upravit metadata souborů","perm.action.file_delete":"Smazat soubory","perm.action.place_edit":"Přidat / upravit / smazat místa","perm.action.day_edit":"Upravit dny, poznámky a přiřazení","perm.action.reservation_edit":"Spravovat rezervace","perm.action.budget_edit":"Spravovat rozpočet","perm.action.packing_edit":"Spravovat seznamy balení","perm.action.collab_edit":"Spolupráce (poznámky, hlasování, chat)","perm.action.share_manage":"Spravovat odkazy ke sdílení","perm.actionHint.trip_create":"Kdo může vytvářet nové výlety","perm.actionHint.trip_edit":"Kdo může měnit název, data, popis a měnu výletu","perm.actionHint.trip_delete":"Kdo může trvale smazat výlet","perm.actionHint.trip_archive":"Kdo může archivovat nebo odarchivovat výlet","perm.actionHint.trip_cover_upload":"Kdo může nahrát nebo změnit titulní obrázek","perm.actionHint.member_manage":"Kdo může pozvat nebo odebrat členy výletu","perm.actionHint.file_upload":"Kdo může nahrávat soubory k výletu","perm.actionHint.file_edit":"Kdo může upravovat popisy a odkazy souborů","perm.actionHint.file_delete":"Kdo může přesunout soubory do koše nebo je trvale smazat","perm.actionHint.place_edit":"Kdo může přidávat, upravovat nebo mazat místa","perm.actionHint.day_edit":"Kdo může upravovat dny, poznámky ke dnům a přiřazení míst","perm.actionHint.reservation_edit":"Kdo může vytvářet, upravovat nebo mazat rezervace","perm.actionHint.budget_edit":"Kdo může vytvářet, upravovat nebo mazat položky rozpočtu","perm.actionHint.packing_edit":"Kdo může spravovat položky balení a tašky","perm.actionHint.collab_edit":"Kdo může vytvářet poznámky, hlasování a posílat zprávy","perm.actionHint.share_manage":"Kdo může vytvářet nebo mazat veřejné odkazy ke sdílení"},$p=[{value:"de",label:"Deutsch"},{value:"en",label:"English"},{value:"es",label:"Español"},{value:"fr",label:"Français"},{value:"hu",label:"Magyar"},{value:"nl",label:"Nederlands"},{value:"br",label:"Português (Brasil)"},{value:"cs",label:"Česky"},{value:"ru",label:"Русский"},{value:"zh",label:"中文"},{value:"it",label:"Italiano"},{value:"ar",label:"العربية"}],lh={de:vM,en:Sj,es:yM,fr:bM,hu:xM,it:kM,ru:wM,zh:_M,nl:SM,ar:jM,br:CM,cs:zM},j0={de:"de-DE",en:"en-US",es:"es-ES",fr:"fr-FR",hu:"hu-HU",it:"it-IT",ru:"ru-RU",zh:"zh-CN",nl:"nl-NL",ar:"ar-SA",br:"pt-BR",cs:"cs-CZ"},TM=new Set(["ar"]);function Om(e){return j0[e]||j0.en}function jj(e){return e==="br"?"pt-BR":["de","es","fr","hu","it","ru","zh","nl","ar","cs"].includes(e)?e:"en"}function PM(e){return TM.has(e)}const Cj=y.createContext({t:e=>e,language:"en",locale:"en-US"});function EM({children:e}){const t=na(n=>n.settings.language)||"en";y.useEffect(()=>{document.documentElement.lang=t,document.documentElement.dir=PM(t)?"rtl":"ltr"},[t]);const a=y.useMemo(()=>{const n=lh[t]||lh.en,r=lh.en;function o(s,d){let c=n[s]??r[s]??s;return d&&Object.entries(d).forEach(([p,m])=>{c=c.replace(new RegExp(`\\{${p}\\}`,"g"),String(m))}),c}return{t:o,language:t,locale:Om(t)}},[t]);return i.jsx(Cj.Provider,{value:a,children:e})}function lt(){return y.useContext(Cj)}/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */var EM={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/** + */var AM={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const AM=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase().trim(),ye=(e,t)=>{const a=y.forwardRef(({color:n="currentColor",size:r=24,strokeWidth:o=2,absoluteStrokeWidth:s,className:d="",children:c,...p},m)=>y.createElement("svg",{ref:m,...EM,width:r,height:r,stroke:n,strokeWidth:s?Number(o)*24/Number(r):o,className:["lucide",`lucide-${AM(e)}`,d].join(" "),...p},[...t.map(([g,f])=>y.createElement(g,f)),...Array.isArray(c)?c:[c]]));return a.displayName=`${e}`,a};/** + */const NM=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase().trim(),ye=(e,t)=>{const a=y.forwardRef(({color:n="currentColor",size:r=24,strokeWidth:o=2,absoluteStrokeWidth:s,className:d="",children:c,...p},m)=>y.createElement("svg",{ref:m,...AM,width:r,height:r,stroke:n,strokeWidth:s?Number(o)*24/Number(r):o,className:["lucide",`lucide-${NM(e)}`,d].join(" "),...p},[...t.map(([g,f])=>y.createElement(g,f)),...Array.isArray(c)?c:[c]]));return a.displayName=`${e}`,a};/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const NM=ye("Activity",[["path",{d:"M22 12h-4l-3 9L9 3l-3 9H2",key:"d5dnw9"}]]);/** + */const DM=ye("Activity",[["path",{d:"M22 12h-4l-3 9L9 3l-3 9H2",key:"d5dnw9"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Cj=ye("AlertCircle",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);/** + */const zj=ye("AlertCircle",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -211,12 +211,12 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const DM=ye("Anchor",[["path",{d:"M12 22V8",key:"qkxhtm"}],["path",{d:"M5 12H2a10 10 0 0 0 20 0h-3",key:"1hv3nh"}],["circle",{cx:"12",cy:"5",r:"3",key:"rqqgnr"}]]);/** + */const MM=ye("Anchor",[["path",{d:"M12 22V8",key:"qkxhtm"}],["path",{d:"M5 12H2a10 10 0 0 0 20 0h-3",key:"1hv3nh"}],["circle",{cx:"12",cy:"5",r:"3",key:"rqqgnr"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const MM=ye("ArchiveRestore",[["rect",{width:"20",height:"5",x:"2",y:"3",rx:"1",key:"1wp1u1"}],["path",{d:"M4 8v11a2 2 0 0 0 2 2h2",key:"tvwodi"}],["path",{d:"M20 8v11a2 2 0 0 1-2 2h-2",key:"1gkqxj"}],["path",{d:"m9 15 3-3 3 3",key:"1pd0qc"}],["path",{d:"M12 12v9",key:"192myk"}]]);/** + */const RM=ye("ArchiveRestore",[["rect",{width:"20",height:"5",x:"2",y:"3",rx:"1",key:"1wp1u1"}],["path",{d:"M4 8v11a2 2 0 0 0 2 2h2",key:"tvwodi"}],["path",{d:"M20 8v11a2 2 0 0 1-2 2h-2",key:"1gkqxj"}],["path",{d:"m9 15 3-3 3 3",key:"1pd0qc"}],["path",{d:"M12 12v9",key:"192myk"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -226,7 +226,7 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const zj=ye("ArrowLeft",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]);/** + */const Tj=ye("ArrowLeft",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -236,22 +236,22 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const j0=ye("ArrowUpCircle",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m16 12-4-4-4 4",key:"177agl"}],["path",{d:"M12 16V8",key:"1sbj14"}]]);/** + */const C0=ye("ArrowUpCircle",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m16 12-4-4-4 4",key:"177agl"}],["path",{d:"M12 16V8",key:"1sbj14"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const RM=ye("ArrowUpDown",[["path",{d:"m21 16-4 4-4-4",key:"f6ql7i"}],["path",{d:"M17 20V4",key:"1ejh1v"}],["path",{d:"m3 8 4-4 4 4",key:"11wl7u"}],["path",{d:"M7 4v16",key:"1glfcx"}]]);/** + */const IM=ye("ArrowUpDown",[["path",{d:"m21 16-4 4-4-4",key:"f6ql7i"}],["path",{d:"M17 20V4",key:"1ejh1v"}],["path",{d:"m3 8 4-4 4 4",key:"11wl7u"}],["path",{d:"M7 4v16",key:"1glfcx"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const IM=ye("ArrowUp",[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]]);/** + */const LM=ye("ArrowUp",[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const LM=ye("Backpack",[["path",{d:"M4 10a4 4 0 0 1 4-4h8a4 4 0 0 1 4 4v10a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2Z",key:"wvr1b5"}],["path",{d:"M9 6V4a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2",key:"donm21"}],["path",{d:"M8 21v-5a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v5",key:"xk3gvk"}],["path",{d:"M8 10h8",key:"c7uz4u"}],["path",{d:"M8 18h8",key:"1no2b1"}]]);/** + */const FM=ye("Backpack",[["path",{d:"M4 10a4 4 0 0 1 4-4h8a4 4 0 0 1 4 4v10a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2Z",key:"wvr1b5"}],["path",{d:"M9 6V4a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2",key:"donm21"}],["path",{d:"M8 21v-5a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v5",key:"xk3gvk"}],["path",{d:"M8 10h8",key:"c7uz4u"}],["path",{d:"M8 18h8",key:"1no2b1"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -261,32 +261,32 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const FM=ye("BedDouble",[["path",{d:"M2 20v-8a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v8",key:"1k78r4"}],["path",{d:"M4 10V6a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v4",key:"fb3tl2"}],["path",{d:"M12 4v6",key:"1dcgq2"}],["path",{d:"M2 18h20",key:"ajqnye"}]]);/** + */const OM=ye("BedDouble",[["path",{d:"M2 20v-8a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v8",key:"1k78r4"}],["path",{d:"M4 10V6a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v4",key:"fb3tl2"}],["path",{d:"M12 4v6",key:"1dcgq2"}],["path",{d:"M2 18h20",key:"ajqnye"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const OM=ye("Beer",[["path",{d:"M17 11h1a3 3 0 0 1 0 6h-1",key:"1yp76v"}],["path",{d:"M9 12v6",key:"1u1cab"}],["path",{d:"M13 12v6",key:"1sugkk"}],["path",{d:"M14 7.5c-1 0-1.44.5-3 .5s-2-.5-3-.5-1.72.5-2.5.5a2.5 2.5 0 0 1 0-5c.78 0 1.57.5 2.5.5S9.44 2 11 2s2 1.5 3 1.5 1.72-.5 2.5-.5a2.5 2.5 0 0 1 0 5c-.78 0-1.5-.5-2.5-.5Z",key:"1510fo"}],["path",{d:"M5 8v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V8",key:"19jb7n"}]]);/** + */const BM=ye("Beer",[["path",{d:"M17 11h1a3 3 0 0 1 0 6h-1",key:"1yp76v"}],["path",{d:"M9 12v6",key:"1u1cab"}],["path",{d:"M13 12v6",key:"1sugkk"}],["path",{d:"M14 7.5c-1 0-1.44.5-3 .5s-2-.5-3-.5-1.72.5-2.5.5a2.5 2.5 0 0 1 0-5c.78 0 1.57.5 2.5.5S9.44 2 11 2s2 1.5 3 1.5 1.72-.5 2.5-.5a2.5 2.5 0 0 1 0 5c-.78 0-1.5-.5-2.5-.5Z",key:"1510fo"}],["path",{d:"M5 8v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V8",key:"19jb7n"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const BM=ye("Bell",[["path",{d:"M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9",key:"1qo2s2"}],["path",{d:"M10.3 21a1.94 1.94 0 0 0 3.4 0",key:"qgo35s"}]]);/** + */const HM=ye("Bell",[["path",{d:"M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9",key:"1qo2s2"}],["path",{d:"M10.3 21a1.94 1.94 0 0 0 3.4 0",key:"qgo35s"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const HM=ye("Bike",[["circle",{cx:"18.5",cy:"17.5",r:"3.5",key:"15x4ox"}],["circle",{cx:"5.5",cy:"17.5",r:"3.5",key:"1noe27"}],["circle",{cx:"15",cy:"5",r:"1",key:"19l28e"}],["path",{d:"M12 17.5V14l-3-3 4-3 2 3h2",key:"1npguv"}]]);/** + */const WM=ye("Bike",[["circle",{cx:"18.5",cy:"17.5",r:"3.5",key:"15x4ox"}],["circle",{cx:"5.5",cy:"17.5",r:"3.5",key:"1noe27"}],["circle",{cx:"15",cy:"5",r:"1",key:"19l28e"}],["path",{d:"M12 17.5V14l-3-3 4-3 2 3h2",key:"1npguv"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Tj=ye("BookMarked",[["path",{d:"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H20v20H6.5a2.5 2.5 0 0 1 0-5H20",key:"t4utmx"}],["polyline",{points:"10 2 10 10 13 7 16 10 16 2",key:"13o6vz"}]]);/** + */const Pj=ye("BookMarked",[["path",{d:"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H20v20H6.5a2.5 2.5 0 0 1 0-5H20",key:"t4utmx"}],["polyline",{points:"10 2 10 10 13 7 16 10 16 2",key:"13o6vz"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Pj=ye("Bookmark",[["path",{d:"m19 21-7-4-7 4V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v16z",key:"1fy3hk"}]]);/** + */const Ej=ye("Bookmark",[["path",{d:"m19 21-7-4-7 4V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v16z",key:"1fy3hk"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -296,7 +296,7 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const qy=ye("Building2",[["path",{d:"M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z",key:"1b4qmf"}],["path",{d:"M6 12H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2",key:"i71pzd"}],["path",{d:"M18 9h2a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2h-2",key:"10jefs"}],["path",{d:"M10 6h4",key:"1itunk"}],["path",{d:"M10 10h4",key:"tcdvrf"}],["path",{d:"M10 14h4",key:"kelpxr"}],["path",{d:"M10 18h4",key:"1ulq68"}]]);/** + */const Gy=ye("Building2",[["path",{d:"M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z",key:"1b4qmf"}],["path",{d:"M6 12H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2",key:"i71pzd"}],["path",{d:"M18 9h2a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2h-2",key:"10jefs"}],["path",{d:"M10 6h4",key:"1itunk"}],["path",{d:"M10 10h4",key:"tcdvrf"}],["path",{d:"M10 14h4",key:"kelpxr"}],["path",{d:"M10 18h4",key:"1ulq68"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -306,7 +306,7 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const C0=ye("Calculator",[["rect",{width:"16",height:"20",x:"4",y:"2",rx:"2",key:"1nb95v"}],["line",{x1:"8",x2:"16",y1:"6",y2:"6",key:"x4nwl0"}],["line",{x1:"16",x2:"16",y1:"14",y2:"18",key:"wjye3r"}],["path",{d:"M16 10h.01",key:"1m94wz"}],["path",{d:"M12 10h.01",key:"1nrarc"}],["path",{d:"M8 10h.01",key:"19clt8"}],["path",{d:"M12 14h.01",key:"1etili"}],["path",{d:"M8 14h.01",key:"6423bh"}],["path",{d:"M12 18h.01",key:"mhygvu"}],["path",{d:"M8 18h.01",key:"lrp35t"}]]);/** + */const z0=ye("Calculator",[["rect",{width:"16",height:"20",x:"4",y:"2",rx:"2",key:"1nb95v"}],["line",{x1:"8",x2:"16",y1:"6",y2:"6",key:"x4nwl0"}],["line",{x1:"16",x2:"16",y1:"14",y2:"18",key:"wjye3r"}],["path",{d:"M16 10h.01",key:"1m94wz"}],["path",{d:"M12 10h.01",key:"1nrarc"}],["path",{d:"M8 10h.01",key:"19clt8"}],["path",{d:"M12 14h.01",key:"1etili"}],["path",{d:"M8 14h.01",key:"6423bh"}],["path",{d:"M12 18h.01",key:"mhygvu"}],["path",{d:"M8 18h.01",key:"lrp35t"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -316,7 +316,7 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const WM=ye("CalendarOff",[["path",{d:"M4.2 4.2A2 2 0 0 0 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 1.82-1.18",key:"16swn3"}],["path",{d:"M21 15.5V6a2 2 0 0 0-2-2H9.5",key:"yhw86o"}],["path",{d:"M16 2v4",key:"4m81vk"}],["path",{d:"M3 10h7",key:"1wap6i"}],["path",{d:"M21 10h-5.5",key:"quycpq"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]);/** + */const UM=ye("CalendarOff",[["path",{d:"M4.2 4.2A2 2 0 0 0 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 1.82-1.18",key:"16swn3"}],["path",{d:"M21 15.5V6a2 2 0 0 0-2-2H9.5",key:"yhw86o"}],["path",{d:"M16 2v4",key:"4m81vk"}],["path",{d:"M3 10h7",key:"1wap6i"}],["path",{d:"M21 10h-5.5",key:"quycpq"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -336,7 +336,7 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const UM=ye("CheckCheck",[["path",{d:"M18 6 7 17l-5-5",key:"116fxf"}],["path",{d:"m22 10-7.5 7.5L13 16",key:"ke71qq"}]]);/** + */const $M=ye("CheckCheck",[["path",{d:"M18 6 7 17l-5-5",key:"116fxf"}],["path",{d:"m22 10-7.5 7.5L13 16",key:"ke71qq"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -346,7 +346,7 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Ej=ye("CheckSquare",[["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}],["path",{d:"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11",key:"1jnkn4"}]]);/** + */const Aj=ye("CheckSquare",[["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}],["path",{d:"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11",key:"1jnkn4"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -361,7 +361,7 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Aj=ye("ChevronLeft",[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]]);/** + */const Nj=ye("ChevronLeft",[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -376,12 +376,12 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const $M=ye("Church",[["path",{d:"m18 7 4 2v11a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9l4-2",key:"gy5gyo"}],["path",{d:"M14 22v-4a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v4",key:"cpkuc4"}],["path",{d:"M18 22V5l-6-3-6 3v17",key:"1hsnhq"}],["path",{d:"M12 7v5",key:"ma6bk"}],["path",{d:"M10 9h4",key:"u4k05v"}]]);/** + */const VM=ye("Church",[["path",{d:"m18 7 4 2v11a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9l4-2",key:"gy5gyo"}],["path",{d:"M14 22v-4a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v4",key:"cpkuc4"}],["path",{d:"M18 22V5l-6-3-6 3v17",key:"1hsnhq"}],["path",{d:"M12 7v5",key:"ma6bk"}],["path",{d:"M10 9h4",key:"u4k05v"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const VM=ye("ClipboardList",[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2",key:"116196"}],["path",{d:"M12 11h4",key:"1jrz19"}],["path",{d:"M12 16h4",key:"n85exb"}],["path",{d:"M8 11h.01",key:"1dfujw"}],["path",{d:"M8 16h.01",key:"18s6g9"}]]);/** + */const KM=ye("ClipboardList",[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2",key:"116196"}],["path",{d:"M12 11h4",key:"1jrz19"}],["path",{d:"M12 16h4",key:"n85exb"}],["path",{d:"M8 11h.01",key:"1dfujw"}],["path",{d:"M8 16h.01",key:"18s6g9"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -391,22 +391,22 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Nj=ye("CloudDrizzle",[["path",{d:"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242",key:"1pljnt"}],["path",{d:"M8 19v1",key:"1dk2by"}],["path",{d:"M8 14v1",key:"84yxot"}],["path",{d:"M16 19v1",key:"v220m7"}],["path",{d:"M16 14v1",key:"g12gj6"}],["path",{d:"M12 21v1",key:"q8vafk"}],["path",{d:"M12 16v1",key:"1mx6rx"}]]);/** + */const Dj=ye("CloudDrizzle",[["path",{d:"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242",key:"1pljnt"}],["path",{d:"M8 19v1",key:"1dk2by"}],["path",{d:"M8 14v1",key:"84yxot"}],["path",{d:"M16 19v1",key:"v220m7"}],["path",{d:"M16 14v1",key:"g12gj6"}],["path",{d:"M12 21v1",key:"q8vafk"}],["path",{d:"M12 16v1",key:"1mx6rx"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Dj=ye("CloudLightning",[["path",{d:"M6 16.326A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 .5 8.973",key:"1cez44"}],["path",{d:"m13 12-3 5h4l-3 5",key:"1t22er"}]]);/** + */const Mj=ye("CloudLightning",[["path",{d:"M6 16.326A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 .5 8.973",key:"1cez44"}],["path",{d:"m13 12-3 5h4l-3 5",key:"1t22er"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Gy=ye("CloudRain",[["path",{d:"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242",key:"1pljnt"}],["path",{d:"M16 14v6",key:"1j4efv"}],["path",{d:"M8 14v6",key:"17c4r9"}],["path",{d:"M12 16v6",key:"c8a4gj"}]]);/** + */const Zy=ye("CloudRain",[["path",{d:"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242",key:"1pljnt"}],["path",{d:"M16 14v6",key:"1j4efv"}],["path",{d:"M8 14v6",key:"17c4r9"}],["path",{d:"M12 16v6",key:"c8a4gj"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Mj=ye("CloudSnow",[["path",{d:"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242",key:"1pljnt"}],["path",{d:"M8 15h.01",key:"a7atzg"}],["path",{d:"M8 19h.01",key:"puxtts"}],["path",{d:"M12 17h.01",key:"p32p05"}],["path",{d:"M12 21h.01",key:"h35vbk"}],["path",{d:"M16 15h.01",key:"rnfrdf"}],["path",{d:"M16 19h.01",key:"1vcnzz"}]]);/** + */const Rj=ye("CloudSnow",[["path",{d:"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242",key:"1pljnt"}],["path",{d:"M8 15h.01",key:"a7atzg"}],["path",{d:"M8 19h.01",key:"puxtts"}],["path",{d:"M12 17h.01",key:"p32p05"}],["path",{d:"M12 21h.01",key:"h35vbk"}],["path",{d:"M16 15h.01",key:"rnfrdf"}],["path",{d:"M16 19h.01",key:"1vcnzz"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -421,7 +421,7 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const KM=ye("Compass",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polygon",{points:"16.24 7.76 14.12 14.12 7.76 16.24 9.88 9.88 16.24 7.76",key:"m9r19z"}]]);/** + */const qM=ye("Compass",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polygon",{points:"16.24 7.76 14.12 14.12 7.76 16.24 9.88 9.88 16.24 7.76",key:"m9r19z"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -431,22 +431,22 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const qM=ye("CreditCard",[["rect",{width:"20",height:"14",x:"2",y:"5",rx:"2",key:"ynyp8z"}],["line",{x1:"2",x2:"22",y1:"10",y2:"10",key:"1b3vmo"}]]);/** + */const GM=ye("CreditCard",[["rect",{width:"20",height:"14",x:"2",y:"5",rx:"2",key:"ynyp8z"}],["line",{x1:"2",x2:"22",y1:"10",y2:"10",key:"1b3vmo"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const GM=ye("Cross",[["path",{d:"M11 2a2 2 0 0 0-2 2v5H4a2 2 0 0 0-2 2v2c0 1.1.9 2 2 2h5v5c0 1.1.9 2 2 2h2a2 2 0 0 0 2-2v-5h5a2 2 0 0 0 2-2v-2a2 2 0 0 0-2-2h-5V4a2 2 0 0 0-2-2h-2z",key:"1t5g7j"}]]);/** + */const ZM=ye("Cross",[["path",{d:"M11 2a2 2 0 0 0-2 2v5H4a2 2 0 0 0-2 2v2c0 1.1.9 2 2 2h5v5c0 1.1.9 2 2 2h2a2 2 0 0 0 2-2v-5h5a2 2 0 0 0 2-2v-2a2 2 0 0 0-2-2h-5V4a2 2 0 0 0-2-2h-2z",key:"1t5g7j"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const ZM=ye("Crown",[["path",{d:"m2 4 3 12h14l3-12-6 7-4-7-4 7-6-7zm3 16h14",key:"zkxr6b"}]]);/** + */const YM=ye("Crown",[["path",{d:"m2 4 3 12h14l3-12-6 7-4-7-4 7-6-7zm3 16h14",key:"zkxr6b"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const YM=ye("Database",[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]]);/** + */const XM=ye("Database",[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -456,17 +456,17 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const XM=ye("Droplets",[["path",{d:"M7 16.3c2.2 0 4-1.83 4-4.05 0-1.16-.57-2.26-1.71-3.19S7.29 6.75 7 5.3c-.29 1.45-1.14 2.84-2.29 3.76S3 11.1 3 12.25c0 2.22 1.8 4.05 4 4.05z",key:"1ptgy4"}],["path",{d:"M12.56 6.6A10.97 10.97 0 0 0 14 3.02c.5 2.5 2 4.9 4 6.5s3 3.5 3 5.5a6.98 6.98 0 0 1-11.91 4.97",key:"1sl1rz"}]]);/** + */const JM=ye("Droplets",[["path",{d:"M7 16.3c2.2 0 4-1.83 4-4.05 0-1.16-.57-2.26-1.71-3.19S7.29 6.75 7 5.3c-.29 1.45-1.14 2.84-2.29 3.76S3 11.1 3 12.25c0 2.22 1.8 4.05 4 4.05z",key:"1ptgy4"}],["path",{d:"M12.56 6.6A10.97 10.97 0 0 0 14 3.02c.5 2.5 2 4.9 4 6.5s3 3.5 3 5.5a6.98 6.98 0 0 1-11.91 4.97",key:"1sl1rz"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const JM=ye("Dumbbell",[["path",{d:"m6.5 6.5 11 11",key:"f7oqzb"}],["path",{d:"m21 21-1-1",key:"cpc6if"}],["path",{d:"m3 3 1 1",key:"d3rpuf"}],["path",{d:"m18 22 4-4",key:"1e32o6"}],["path",{d:"m2 6 4-4",key:"189tqz"}],["path",{d:"m3 10 7-7",key:"1bxui2"}],["path",{d:"m14 21 7-7",key:"16x78n"}]]);/** + */const QM=ye("Dumbbell",[["path",{d:"m6.5 6.5 11 11",key:"f7oqzb"}],["path",{d:"m21 21-1-1",key:"cpc6if"}],["path",{d:"m3 3 1 1",key:"d3rpuf"}],["path",{d:"m18 22 4-4",key:"1e32o6"}],["path",{d:"m2 6 4-4",key:"189tqz"}],["path",{d:"m3 10 7-7",key:"1bxui2"}],["path",{d:"m14 21 7-7",key:"16x78n"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const QM=ye("Euro",[["path",{d:"M4 10h12",key:"1y6xl8"}],["path",{d:"M4 14h9",key:"1loblj"}],["path",{d:"M19 6a7.7 7.7 0 0 0-5.2-2A7.9 7.9 0 0 0 6 12c0 4.4 3.5 8 7.8 8 2 0 3.8-.8 5.2-2",key:"1j6lzo"}]]);/** + */const eR=ye("Euro",[["path",{d:"M4 10h12",key:"1y6xl8"}],["path",{d:"M4 14h9",key:"1loblj"}],["path",{d:"M19 6a7.7 7.7 0 0 0-5.2-2A7.9 7.9 0 0 0 6 12c0 4.4 3.5 8 7.8 8 2 0 3.8-.8 5.2-2",key:"1j6lzo"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -486,12 +486,12 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const z0=ye("FileDown",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M12 18v-6",key:"17g6i2"}],["path",{d:"m9 15 3 3 3-3",key:"1npd3o"}]]);/** + */const T0=ye("FileDown",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M12 18v-6",key:"17g6i2"}],["path",{d:"m9 15 3 3 3-3",key:"1npd3o"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Rj=ye("FileImage",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["circle",{cx:"10",cy:"12",r:"2",key:"737tya"}],["path",{d:"m20 17-1.296-1.296a2.41 2.41 0 0 0-3.408 0L9 22",key:"wt3hpn"}]]);/** + */const Ij=ye("FileImage",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["circle",{cx:"10",cy:"12",r:"2",key:"737tya"}],["path",{d:"m20 17-1.296-1.296a2.41 2.41 0 0 0-3.408 0L9 22",key:"wt3hpn"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -506,12 +506,12 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Zy=ye("Flag",[["path",{d:"M4 15s1-1 4-1 5 2 8 2 4-1 4-1V3s-1 1-4 1-5-2-8-2-4 1-4 1z",key:"i9b6wo"}],["line",{x1:"4",x2:"4",y1:"22",y2:"15",key:"1cm3nv"}]]);/** + */const Yy=ye("Flag",[["path",{d:"M4 15s1-1 4-1 5 2 8 2 4-1 4-1V3s-1 1-4 1-5-2-8-2-4 1-4 1z",key:"i9b6wo"}],["line",{x1:"4",x2:"4",y1:"22",y2:"15",key:"1cm3nv"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const eR=ye("Flower2",[["path",{d:"M12 5a3 3 0 1 1 3 3m-3-3a3 3 0 1 0-3 3m3-3v1M9 8a3 3 0 1 0 3 3M9 8h1m5 0a3 3 0 1 1-3 3m3-3h-1m-2 3v-1",key:"3pnvol"}],["circle",{cx:"12",cy:"8",r:"2",key:"1822b1"}],["path",{d:"M12 10v12",key:"6ubwww"}],["path",{d:"M12 22c4.2 0 7-1.667 7-5-4.2 0-7 1.667-7 5Z",key:"9hd38g"}],["path",{d:"M12 22c-4.2 0-7-1.667-7-5 4.2 0 7 1.667 7 5Z",key:"ufn41s"}]]);/** + */const tR=ye("Flower2",[["path",{d:"M12 5a3 3 0 1 1 3 3m-3-3a3 3 0 1 0-3 3m3-3v1M9 8a3 3 0 1 0 3 3M9 8h1m5 0a3 3 0 1 1-3 3m3-3h-1m-2 3v-1",key:"3pnvol"}],["circle",{cx:"12",cy:"8",r:"2",key:"1822b1"}],["path",{d:"M12 10v12",key:"6ubwww"}],["path",{d:"M12 22c4.2 0 7-1.667 7-5-4.2 0-7 1.667-7 5Z",key:"9hd38g"}],["path",{d:"M12 22c-4.2 0-7-1.667-7-5 4.2 0 7 1.667 7 5Z",key:"ufn41s"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -521,12 +521,12 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Ij=ye("FolderPlus",[["path",{d:"M12 10v6",key:"1bos4e"}],["path",{d:"M9 13h6",key:"1uhe8q"}],["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]]);/** + */const Lj=ye("FolderPlus",[["path",{d:"M12 10v6",key:"1bos4e"}],["path",{d:"M9 13h6",key:"1uhe8q"}],["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const tR=ye("Github",[["path",{d:"M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4",key:"tonef"}],["path",{d:"M9 18c-4.51 2-5-2-7-2",key:"9comsn"}]]);/** + */const aR=ye("Github",[["path",{d:"M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4",key:"tonef"}],["path",{d:"M9 18c-4.51 2-5-2-7-2",key:"9comsn"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -536,7 +536,7 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const T0=ye("GripVertical",[["circle",{cx:"9",cy:"12",r:"1",key:"1vctgf"}],["circle",{cx:"9",cy:"5",r:"1",key:"hp0tcf"}],["circle",{cx:"9",cy:"19",r:"1",key:"fkjjf6"}],["circle",{cx:"15",cy:"12",r:"1",key:"1tmaij"}],["circle",{cx:"15",cy:"5",r:"1",key:"19l28e"}],["circle",{cx:"15",cy:"19",r:"1",key:"f4zoj3"}]]);/** + */const P0=ye("GripVertical",[["circle",{cx:"9",cy:"12",r:"1",key:"1vctgf"}],["circle",{cx:"9",cy:"5",r:"1",key:"hp0tcf"}],["circle",{cx:"9",cy:"19",r:"1",key:"fkjjf6"}],["circle",{cx:"15",cy:"12",r:"1",key:"1tmaij"}],["circle",{cx:"15",cy:"5",r:"1",key:"19l28e"}],["circle",{cx:"15",cy:"19",r:"1",key:"f4zoj3"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -546,7 +546,7 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const aR=ye("Hash",[["line",{x1:"4",x2:"20",y1:"9",y2:"9",key:"4lhtct"}],["line",{x1:"4",x2:"20",y1:"15",y2:"15",key:"vyu0kd"}],["line",{x1:"10",x2:"8",y1:"3",y2:"21",key:"1ggp8o"}],["line",{x1:"16",x2:"14",y1:"3",y2:"21",key:"weycgp"}]]);/** + */const nR=ye("Hash",[["line",{x1:"4",x2:"20",y1:"9",y2:"9",key:"4lhtct"}],["line",{x1:"4",x2:"20",y1:"15",y2:"15",key:"vyu0kd"}],["line",{x1:"10",x2:"8",y1:"3",y2:"21",key:"1ggp8o"}],["line",{x1:"16",x2:"14",y1:"3",y2:"21",key:"weycgp"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -556,7 +556,7 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const nR=ye("Home",[["path",{d:"m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z",key:"y5dka4"}],["polyline",{points:"9 22 9 12 15 12 15 22",key:"e2us08"}]]);/** + */const iR=ye("Home",[["path",{d:"m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z",key:"y5dka4"}],["polyline",{points:"9 22 9 12 15 12 15 22",key:"e2us08"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -566,7 +566,7 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const iR=ye("Image",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]]);/** + */const rR=ye("Image",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -581,32 +581,32 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Lj=ye("Key",[["circle",{cx:"7.5",cy:"15.5",r:"5.5",key:"yqb3hr"}],["path",{d:"m21 2-9.6 9.6",key:"1j0ho8"}],["path",{d:"m15.5 7.5 3 3L22 7l-3-3",key:"1rn1fs"}]]);/** + */const Fj=ye("Key",[["circle",{cx:"7.5",cy:"15.5",r:"5.5",key:"yqb3hr"}],["path",{d:"m21 2-9.6 9.6",key:"1j0ho8"}],["path",{d:"m15.5 7.5 3 3L22 7l-3-3",key:"1rn1fs"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const rR=ye("Landmark",[["line",{x1:"3",x2:"21",y1:"22",y2:"22",key:"j8o0r"}],["line",{x1:"6",x2:"6",y1:"18",y2:"11",key:"10tf0k"}],["line",{x1:"10",x2:"10",y1:"18",y2:"11",key:"54lgf6"}],["line",{x1:"14",x2:"14",y1:"18",y2:"11",key:"380y"}],["line",{x1:"18",x2:"18",y1:"18",y2:"11",key:"1kevvc"}],["polygon",{points:"12 2 20 7 4 7",key:"jkujk7"}]]);/** + */const oR=ye("Landmark",[["line",{x1:"3",x2:"21",y1:"22",y2:"22",key:"j8o0r"}],["line",{x1:"6",x2:"6",y1:"18",y2:"11",key:"10tf0k"}],["line",{x1:"10",x2:"10",y1:"18",y2:"11",key:"54lgf6"}],["line",{x1:"14",x2:"14",y1:"18",y2:"11",key:"380y"}],["line",{x1:"18",x2:"18",y1:"18",y2:"11",key:"1kevvc"}],["polygon",{points:"12 2 20 7 4 7",key:"jkujk7"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const oR=ye("LayoutGrid",[["rect",{width:"7",height:"7",x:"3",y:"3",rx:"1",key:"1g98yp"}],["rect",{width:"7",height:"7",x:"14",y:"3",rx:"1",key:"6d4xhi"}],["rect",{width:"7",height:"7",x:"14",y:"14",rx:"1",key:"nxv5o0"}],["rect",{width:"7",height:"7",x:"3",y:"14",rx:"1",key:"1bb6yr"}]]);/** + */const sR=ye("LayoutGrid",[["rect",{width:"7",height:"7",x:"3",y:"3",rx:"1",key:"1g98yp"}],["rect",{width:"7",height:"7",x:"14",y:"3",rx:"1",key:"6d4xhi"}],["rect",{width:"7",height:"7",x:"14",y:"14",rx:"1",key:"nxv5o0"}],["rect",{width:"7",height:"7",x:"3",y:"14",rx:"1",key:"1bb6yr"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const sR=ye("Leaf",[["path",{d:"M11 20A7 7 0 0 1 9.8 6.1C15.5 5 17 4.48 19 2c1 2 2 4.18 2 8 0 5.5-4.78 10-10 10Z",key:"nnexq3"}],["path",{d:"M2 21c0-3 1.85-5.36 5.08-6C9.5 14.52 12 13 13 12",key:"mt58a7"}]]);/** + */const lR=ye("Leaf",[["path",{d:"M11 20A7 7 0 0 1 9.8 6.1C15.5 5 17 4.48 19 2c1 2 2 4.18 2 8 0 5.5-4.78 10-10 10Z",key:"nnexq3"}],["path",{d:"M2 21c0-3 1.85-5.36 5.08-6C9.5 14.52 12 13 13 12",key:"mt58a7"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const lR=ye("Library",[["path",{d:"m16 6 4 14",key:"ji33uf"}],["path",{d:"M12 6v14",key:"1n7gus"}],["path",{d:"M8 8v12",key:"1gg7y9"}],["path",{d:"M4 4v16",key:"6qkkli"}]]);/** + */const dR=ye("Library",[["path",{d:"m16 6 4 14",key:"ji33uf"}],["path",{d:"M12 6v14",key:"1n7gus"}],["path",{d:"M8 8v12",key:"1gg7y9"}],["path",{d:"M4 4v16",key:"6qkkli"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Fj=ye("Lightbulb",[["path",{d:"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5",key:"1gvzjb"}],["path",{d:"M9 18h6",key:"x1upvd"}],["path",{d:"M10 22h4",key:"ceow96"}]]);/** + */const Oj=ye("Lightbulb",[["path",{d:"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5",key:"1gvzjb"}],["path",{d:"M9 18h6",key:"x1upvd"}],["path",{d:"M10 22h4",key:"ceow96"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -616,12 +616,12 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Oj=ye("ListChecks",[["path",{d:"m3 17 2 2 4-4",key:"1jhpwq"}],["path",{d:"m3 7 2 2 4-4",key:"1obspn"}],["path",{d:"M13 6h8",key:"15sg57"}],["path",{d:"M13 12h8",key:"h98zly"}],["path",{d:"M13 18h8",key:"oe0vm4"}]]);/** + */const Bj=ye("ListChecks",[["path",{d:"m3 17 2 2 4-4",key:"1jhpwq"}],["path",{d:"m3 7 2 2 4-4",key:"1obspn"}],["path",{d:"M13 6h8",key:"15sg57"}],["path",{d:"M13 12h8",key:"h98zly"}],["path",{d:"M13 18h8",key:"oe0vm4"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const dR=ye("List",[["line",{x1:"8",x2:"21",y1:"6",y2:"6",key:"7ey8pc"}],["line",{x1:"8",x2:"21",y1:"12",y2:"12",key:"rjfblc"}],["line",{x1:"8",x2:"21",y1:"18",y2:"18",key:"c3b1m8"}],["line",{x1:"3",x2:"3.01",y1:"6",y2:"6",key:"1g7gq3"}],["line",{x1:"3",x2:"3.01",y1:"12",y2:"12",key:"1pjlvk"}],["line",{x1:"3",x2:"3.01",y1:"18",y2:"18",key:"28t2mc"}]]);/** + */const cR=ye("List",[["line",{x1:"8",x2:"21",y1:"6",y2:"6",key:"7ey8pc"}],["line",{x1:"8",x2:"21",y1:"12",y2:"12",key:"rjfblc"}],["line",{x1:"8",x2:"21",y1:"18",y2:"18",key:"c3b1m8"}],["line",{x1:"3",x2:"3.01",y1:"6",y2:"6",key:"1g7gq3"}],["line",{x1:"3",x2:"3.01",y1:"12",y2:"12",key:"1pjlvk"}],["line",{x1:"3",x2:"3.01",y1:"18",y2:"18",key:"28t2mc"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -636,7 +636,7 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const P0=ye("LogIn",[["path",{d:"M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4",key:"u53s6r"}],["polyline",{points:"10 17 15 12 10 7",key:"1ail0h"}],["line",{x1:"15",x2:"3",y1:"12",y2:"12",key:"v6grx8"}]]);/** + */const E0=ye("LogIn",[["path",{d:"M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4",key:"u53s6r"}],["polyline",{points:"10 17 15 12 10 7",key:"1ail0h"}],["line",{x1:"15",x2:"3",y1:"12",y2:"12",key:"v6grx8"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -651,7 +651,7 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const cR=ye("Mail",[["rect",{width:"20",height:"16",x:"2",y:"4",rx:"2",key:"18n3k1"}],["path",{d:"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7",key:"1ocrg3"}]]);/** + */const uR=ye("Mail",[["rect",{width:"20",height:"16",x:"2",y:"4",rx:"2",key:"18n3k1"}],["path",{d:"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7",key:"1ocrg3"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -666,7 +666,7 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const uR=ye("Maximize2",[["polyline",{points:"15 3 21 3 21 9",key:"mznyad"}],["polyline",{points:"9 21 3 21 3 15",key:"1avn1i"}],["line",{x1:"21",x2:"14",y1:"3",y2:"10",key:"ota7mn"}],["line",{x1:"3",x2:"10",y1:"21",y2:"14",key:"1atl0r"}]]);/** + */const pR=ye("Maximize2",[["polyline",{points:"15 3 21 3 21 9",key:"mznyad"}],["polyline",{points:"9 21 3 21 3 15",key:"1avn1i"}],["line",{x1:"21",x2:"14",y1:"3",y2:"10",key:"ota7mn"}],["line",{x1:"3",x2:"10",y1:"21",y2:"14",key:"1atl0r"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -676,22 +676,22 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Bj=ye("Minus",[["path",{d:"M5 12h14",key:"1ays0h"}]]);/** + */const Hj=ye("Minus",[["path",{d:"M5 12h14",key:"1ays0h"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const pR=ye("Monitor",[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]]);/** + */const mR=ye("Monitor",[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Hj=ye("Moon",[["path",{d:"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z",key:"a7tn18"}]]);/** + */const Wj=ye("Moon",[["path",{d:"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z",key:"a7tn18"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const mR=ye("MoreHorizontal",[["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}],["circle",{cx:"19",cy:"12",r:"1",key:"1wjl8i"}],["circle",{cx:"5",cy:"12",r:"1",key:"1pcz8c"}]]);/** + */const gR=ye("MoreHorizontal",[["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}],["circle",{cx:"19",cy:"12",r:"1",key:"1wjl8i"}],["circle",{cx:"5",cy:"12",r:"1",key:"1pcz8c"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -701,12 +701,12 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const gR=ye("MousePointer2",[["path",{d:"m4 4 7.07 17 2.51-7.39L21 11.07z",key:"1vqm48"}]]);/** + */const hR=ye("MousePointer2",[["path",{d:"m4 4 7.07 17 2.51-7.39L21 11.07z",key:"1vqm48"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const hR=ye("Music",[["path",{d:"M9 18V5l12-2v13",key:"1jmyc2"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["circle",{cx:"18",cy:"16",r:"3",key:"1hluhg"}]]);/** + */const fR=ye("Music",[["path",{d:"M9 18V5l12-2v13",key:"1jmyc2"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["circle",{cx:"18",cy:"16",r:"3",key:"1hluhg"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -721,27 +721,27 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const fR=ye("Palette",[["circle",{cx:"13.5",cy:"6.5",r:".5",fill:"currentColor",key:"1okk4w"}],["circle",{cx:"17.5",cy:"10.5",r:".5",fill:"currentColor",key:"f64h9f"}],["circle",{cx:"8.5",cy:"7.5",r:".5",fill:"currentColor",key:"fotxhn"}],["circle",{cx:"6.5",cy:"12.5",r:".5",fill:"currentColor",key:"qy21gx"}],["path",{d:"M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10c.926 0 1.648-.746 1.648-1.688 0-.437-.18-.835-.437-1.125-.29-.289-.438-.652-.438-1.125a1.64 1.64 0 0 1 1.668-1.668h1.996c3.051 0 5.555-2.503 5.555-5.554C21.965 6.012 17.461 2 12 2z",key:"12rzf8"}]]);/** + */const vR=ye("Palette",[["circle",{cx:"13.5",cy:"6.5",r:".5",fill:"currentColor",key:"1okk4w"}],["circle",{cx:"17.5",cy:"10.5",r:".5",fill:"currentColor",key:"f64h9f"}],["circle",{cx:"8.5",cy:"7.5",r:".5",fill:"currentColor",key:"fotxhn"}],["circle",{cx:"6.5",cy:"12.5",r:".5",fill:"currentColor",key:"qy21gx"}],["path",{d:"M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10c.926 0 1.648-.746 1.648-1.688 0-.437-.18-.835-.437-1.125-.29-.289-.438-.652-.438-1.125a1.64 1.64 0 0 1 1.668-1.668h1.996c3.051 0 5.555-2.503 5.555-5.554C21.965 6.012 17.461 2 12 2z",key:"12rzf8"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const vR=ye("PanelLeftClose",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M9 3v18",key:"fh3hqa"}],["path",{d:"m16 15-3-3 3-3",key:"14y99z"}]]);/** + */const yR=ye("PanelLeftClose",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M9 3v18",key:"fh3hqa"}],["path",{d:"m16 15-3-3 3-3",key:"14y99z"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const yR=ye("PanelLeftOpen",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M9 3v18",key:"fh3hqa"}],["path",{d:"m14 9 3 3-3 3",key:"8010ee"}]]);/** + */const bR=ye("PanelLeftOpen",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M9 3v18",key:"fh3hqa"}],["path",{d:"m14 9 3 3-3 3",key:"8010ee"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const bR=ye("PanelRightClose",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M15 3v18",key:"14nvp0"}],["path",{d:"m8 9 3 3-3 3",key:"12hl5m"}]]);/** + */const xR=ye("PanelRightClose",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M15 3v18",key:"14nvp0"}],["path",{d:"m8 9 3 3-3 3",key:"12hl5m"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const xR=ye("PanelRightOpen",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M15 3v18",key:"14nvp0"}],["path",{d:"m10 15-3-3 3-3",key:"1pgupc"}]]);/** + */const kR=ye("PanelRightOpen",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M15 3v18",key:"14nvp0"}],["path",{d:"m10 15-3-3 3-3",key:"1pgupc"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -761,22 +761,22 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const kR=ye("Phone",[["path",{d:"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z",key:"foiqr5"}]]);/** + */const wR=ye("Phone",[["path",{d:"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z",key:"foiqr5"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const wR=ye("PinOff",[["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}],["line",{x1:"12",x2:"12",y1:"17",y2:"22",key:"1jrz49"}],["path",{d:"M9 9v1.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V17h12",key:"13x2n8"}],["path",{d:"M15 9.34V6h1a2 2 0 0 0 0-4H7.89",key:"reo3ki"}]]);/** + */const _R=ye("PinOff",[["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}],["line",{x1:"12",x2:"12",y1:"17",y2:"22",key:"1jrz49"}],["path",{d:"M9 9v1.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V17h12",key:"13x2n8"}],["path",{d:"M15 9.34V6h1a2 2 0 0 0 0-4H7.89",key:"reo3ki"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const E0=ye("Pin",[["line",{x1:"12",x2:"12",y1:"17",y2:"22",key:"1jrz49"}],["path",{d:"M5 17h14v-1.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V6h1a2 2 0 0 0 0-4H8a2 2 0 0 0 0 4h1v4.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24Z",key:"13yl11"}]]);/** + */const A0=ye("Pin",[["line",{x1:"12",x2:"12",y1:"17",y2:"22",key:"1jrz49"}],["path",{d:"M5 17h14v-1.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V6h1a2 2 0 0 0 0-4H8a2 2 0 0 0 0 4h1v4.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24Z",key:"13yl11"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const _R=ye("Pipette",[["path",{d:"m2 22 1-1h3l9-9",key:"1sre89"}],["path",{d:"M3 21v-3l9-9",key:"hpe2y6"}],["path",{d:"m15 6 3.4-3.4a2.1 2.1 0 1 1 3 3L18 9l.4.4a2.1 2.1 0 1 1-3 3l-3.8-3.8a2.1 2.1 0 1 1 3-3l.4.4Z",key:"196du1"}]]);/** + */const SR=ye("Pipette",[["path",{d:"m2 22 1-1h3l9-9",key:"1sre89"}],["path",{d:"M3 21v-3l9-9",key:"hpe2y6"}],["path",{d:"m15 6 3.4-3.4a2.1 2.1 0 1 1 3 3L18 9l.4.4a2.1 2.1 0 1 1-3 3l-3.8-3.8a2.1 2.1 0 1 1 3-3l.4.4Z",key:"196du1"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -791,7 +791,7 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const SR=ye("Printer",[["polyline",{points:"6 9 6 2 18 2 18 9",key:"1306q4"}],["path",{d:"M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2",key:"143wyd"}],["rect",{width:"12",height:"8",x:"6",y:"14",key:"5ipwut"}]]);/** + */const jR=ye("Printer",[["polyline",{points:"6 9 6 2 18 2 18 9",key:"1306q4"}],["path",{d:"M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2",key:"143wyd"}],["rect",{width:"12",height:"8",x:"6",y:"14",key:"5ipwut"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -806,7 +806,7 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const A0=ye("Reply",[["polyline",{points:"9 17 4 12 9 7",key:"hvgpf2"}],["path",{d:"M20 18v-2a4 4 0 0 0-4-4H4",key:"5vmcpk"}]]);/** + */const N0=ye("Reply",[["polyline",{points:"9 17 4 12 9 7",key:"hvgpf2"}],["path",{d:"M20 18v-2a4 4 0 0 0-4-4H4",key:"5vmcpk"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -816,7 +816,7 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const jR=ye("Route",[["circle",{cx:"6",cy:"19",r:"3",key:"1kj8tv"}],["path",{d:"M9 19h8.5a3.5 3.5 0 0 0 0-7h-11a3.5 3.5 0 0 1 0-7H15",key:"1d8sl"}],["circle",{cx:"18",cy:"5",r:"3",key:"gq8acd"}]]);/** + */const CR=ye("Route",[["circle",{cx:"6",cy:"19",r:"3",key:"1kj8tv"}],["path",{d:"M9 19h8.5a3.5 3.5 0 0 0 0-7h-11a3.5 3.5 0 0 1 0-7H15",key:"1d8sl"}],["circle",{cx:"18",cy:"5",r:"3",key:"gq8acd"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -836,12 +836,12 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const N0=ye("Share2",[["circle",{cx:"18",cy:"5",r:"3",key:"gq8acd"}],["circle",{cx:"6",cy:"12",r:"3",key:"w7nqdw"}],["circle",{cx:"18",cy:"19",r:"3",key:"1xt0gg"}],["line",{x1:"8.59",x2:"15.42",y1:"13.51",y2:"17.49",key:"47mynk"}],["line",{x1:"15.41",x2:"8.59",y1:"6.51",y2:"10.49",key:"1n3mei"}]]);/** + */const D0=ye("Share2",[["circle",{cx:"18",cy:"5",r:"3",key:"gq8acd"}],["circle",{cx:"6",cy:"12",r:"3",key:"w7nqdw"}],["circle",{cx:"18",cy:"19",r:"3",key:"1xt0gg"}],["line",{x1:"8.59",x2:"15.42",y1:"13.51",y2:"17.49",key:"47mynk"}],["line",{x1:"15.41",x2:"8.59",y1:"6.51",y2:"10.49",key:"1n3mei"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const CR=ye("ShieldCheck",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);/** + */const zR=ye("ShieldCheck",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -856,27 +856,27 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Yy=ye("ShoppingBag",[["path",{d:"M6 2 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4Z",key:"hou9p0"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M16 10a4 4 0 0 1-8 0",key:"1ltviw"}]]);/** + */const Xy=ye("ShoppingBag",[["path",{d:"M6 2 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4Z",key:"hou9p0"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M16 10a4 4 0 0 1-8 0",key:"1ltviw"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const zR=ye("SlidersHorizontal",[["line",{x1:"21",x2:"14",y1:"4",y2:"4",key:"obuewd"}],["line",{x1:"10",x2:"3",y1:"4",y2:"4",key:"1q6298"}],["line",{x1:"21",x2:"12",y1:"12",y2:"12",key:"1iu8h1"}],["line",{x1:"8",x2:"3",y1:"12",y2:"12",key:"ntss68"}],["line",{x1:"21",x2:"16",y1:"20",y2:"20",key:"14d8ph"}],["line",{x1:"12",x2:"3",y1:"20",y2:"20",key:"m0wm8r"}],["line",{x1:"14",x2:"14",y1:"2",y2:"6",key:"14e1ph"}],["line",{x1:"8",x2:"8",y1:"10",y2:"14",key:"1i6ji0"}],["line",{x1:"16",x2:"16",y1:"18",y2:"22",key:"1lctlv"}]]);/** + */const TR=ye("SlidersHorizontal",[["line",{x1:"21",x2:"14",y1:"4",y2:"4",key:"obuewd"}],["line",{x1:"10",x2:"3",y1:"4",y2:"4",key:"1q6298"}],["line",{x1:"21",x2:"12",y1:"12",y2:"12",key:"1iu8h1"}],["line",{x1:"8",x2:"3",y1:"12",y2:"12",key:"ntss68"}],["line",{x1:"21",x2:"16",y1:"20",y2:"20",key:"14d8ph"}],["line",{x1:"12",x2:"3",y1:"20",y2:"20",key:"m0wm8r"}],["line",{x1:"14",x2:"14",y1:"2",y2:"6",key:"14e1ph"}],["line",{x1:"8",x2:"8",y1:"10",y2:"14",key:"1i6ji0"}],["line",{x1:"16",x2:"16",y1:"18",y2:"22",key:"1lctlv"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const TR=ye("Smile",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M8 14s1.5 2 4 2 4-2 4-2",key:"1y1vjs"}],["line",{x1:"9",x2:"9.01",y1:"9",y2:"9",key:"yxxnd0"}],["line",{x1:"15",x2:"15.01",y1:"9",y2:"9",key:"1p4y9e"}]]);/** + */const PR=ye("Smile",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M8 14s1.5 2 4 2 4-2 4-2",key:"1y1vjs"}],["line",{x1:"9",x2:"9.01",y1:"9",y2:"9",key:"yxxnd0"}],["line",{x1:"15",x2:"15.01",y1:"9",y2:"9",key:"1p4y9e"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Wj=ye("Sparkles",[["path",{d:"m12 3-1.912 5.813a2 2 0 0 1-1.275 1.275L3 12l5.813 1.912a2 2 0 0 1 1.275 1.275L12 21l1.912-5.813a2 2 0 0 1 1.275-1.275L21 12l-5.813-1.912a2 2 0 0 1-1.275-1.275L12 3Z",key:"17u4zn"}],["path",{d:"M5 3v4",key:"bklmnn"}],["path",{d:"M19 17v4",key:"iiml17"}],["path",{d:"M3 5h4",key:"nem4j1"}],["path",{d:"M17 19h4",key:"lbex7p"}]]);/** + */const Uj=ye("Sparkles",[["path",{d:"m12 3-1.912 5.813a2 2 0 0 1-1.275 1.275L3 12l5.813 1.912a2 2 0 0 1 1.275 1.275L12 21l1.912-5.813a2 2 0 0 1 1.275-1.275L21 12l-5.813-1.912a2 2 0 0 1-1.275-1.275L12 3Z",key:"17u4zn"}],["path",{d:"M5 3v4",key:"bklmnn"}],["path",{d:"M19 17v4",key:"iiml17"}],["path",{d:"M3 5h4",key:"nem4j1"}],["path",{d:"M17 19h4",key:"lbex7p"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const PR=ye("Square",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]]);/** + */const ER=ye("Square",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -886,12 +886,12 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Xy=ye("StickyNote",[["path",{d:"M16 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V8Z",key:"qazsjp"}],["path",{d:"M15 3v4a2 2 0 0 0 2 2h4",key:"40519r"}]]);/** + */const Jy=ye("StickyNote",[["path",{d:"M16 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V8Z",key:"qazsjp"}],["path",{d:"M15 3v4a2 2 0 0 0 2 2h4",key:"40519r"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const ER=ye("Store",[["path",{d:"m2 7 4.41-4.41A2 2 0 0 1 7.83 2h8.34a2 2 0 0 1 1.42.59L22 7",key:"ztvudi"}],["path",{d:"M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8",key:"1b2hhj"}],["path",{d:"M15 22v-4a2 2 0 0 0-2-2h-2a2 2 0 0 0-2 2v4",key:"2ebpfo"}],["path",{d:"M2 7h20",key:"1fcdvo"}],["path",{d:"M22 7v3a2 2 0 0 1-2 2v0a2.7 2.7 0 0 1-1.59-.63.7.7 0 0 0-.82 0A2.7 2.7 0 0 1 16 12a2.7 2.7 0 0 1-1.59-.63.7.7 0 0 0-.82 0A2.7 2.7 0 0 1 12 12a2.7 2.7 0 0 1-1.59-.63.7.7 0 0 0-.82 0A2.7 2.7 0 0 1 8 12a2.7 2.7 0 0 1-1.59-.63.7.7 0 0 0-.82 0A2.7 2.7 0 0 1 4 12v0a2 2 0 0 1-2-2V7",key:"jon5kx"}]]);/** + */const AR=ye("Store",[["path",{d:"m2 7 4.41-4.41A2 2 0 0 1 7.83 2h8.34a2 2 0 0 1 1.42.59L22 7",key:"ztvudi"}],["path",{d:"M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8",key:"1b2hhj"}],["path",{d:"M15 22v-4a2 2 0 0 0-2-2h-2a2 2 0 0 0-2 2v4",key:"2ebpfo"}],["path",{d:"M2 7h20",key:"1fcdvo"}],["path",{d:"M22 7v3a2 2 0 0 1-2 2v0a2.7 2.7 0 0 1-1.59-.63.7.7 0 0 0-.82 0A2.7 2.7 0 0 1 16 12a2.7 2.7 0 0 1-1.59-.63.7.7 0 0 0-.82 0A2.7 2.7 0 0 1 12 12a2.7 2.7 0 0 1-1.59-.63.7.7 0 0 0-.82 0A2.7 2.7 0 0 1 8 12a2.7 2.7 0 0 1-1.59-.63.7.7 0 0 0-.82 0A2.7 2.7 0 0 1 4 12v0a2 2 0 0 1-2-2V7",key:"jon5kx"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -901,32 +901,32 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const AR=ye("Sunrise",[["path",{d:"M12 2v8",key:"1q4o3n"}],["path",{d:"m4.93 10.93 1.41 1.41",key:"2a7f42"}],["path",{d:"M2 18h2",key:"j10viu"}],["path",{d:"M20 18h2",key:"wocana"}],["path",{d:"m19.07 10.93-1.41 1.41",key:"15zs5n"}],["path",{d:"M22 22H2",key:"19qnx5"}],["path",{d:"m8 6 4-4 4 4",key:"ybng9g"}],["path",{d:"M16 18a4 4 0 0 0-8 0",key:"1lzouq"}]]);/** + */const NR=ye("Sunrise",[["path",{d:"M12 2v8",key:"1q4o3n"}],["path",{d:"m4.93 10.93 1.41 1.41",key:"2a7f42"}],["path",{d:"M2 18h2",key:"j10viu"}],["path",{d:"M20 18h2",key:"wocana"}],["path",{d:"m19.07 10.93-1.41 1.41",key:"15zs5n"}],["path",{d:"M22 22H2",key:"19qnx5"}],["path",{d:"m8 6 4-4 4 4",key:"ybng9g"}],["path",{d:"M16 18a4 4 0 0 0-8 0",key:"1lzouq"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const NR=ye("Sunset",[["path",{d:"M12 10V2",key:"16sf7g"}],["path",{d:"m4.93 10.93 1.41 1.41",key:"2a7f42"}],["path",{d:"M2 18h2",key:"j10viu"}],["path",{d:"M20 18h2",key:"wocana"}],["path",{d:"m19.07 10.93-1.41 1.41",key:"15zs5n"}],["path",{d:"M22 22H2",key:"19qnx5"}],["path",{d:"m16 6-4 4-4-4",key:"6wukr"}],["path",{d:"M16 18a4 4 0 0 0-8 0",key:"1lzouq"}]]);/** + */const DR=ye("Sunset",[["path",{d:"M12 10V2",key:"16sf7g"}],["path",{d:"m4.93 10.93 1.41 1.41",key:"2a7f42"}],["path",{d:"M2 18h2",key:"j10viu"}],["path",{d:"M20 18h2",key:"wocana"}],["path",{d:"m19.07 10.93-1.41 1.41",key:"15zs5n"}],["path",{d:"M22 22H2",key:"19qnx5"}],["path",{d:"m16 6-4 4-4-4",key:"6wukr"}],["path",{d:"M16 18a4 4 0 0 0-8 0",key:"1lzouq"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const DR=ye("Tag",[["path",{d:"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z",key:"vktsd0"}],["circle",{cx:"7.5",cy:"7.5",r:".5",fill:"currentColor",key:"kqv944"}]]);/** + */const MR=ye("Tag",[["path",{d:"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z",key:"vktsd0"}],["circle",{cx:"7.5",cy:"7.5",r:".5",fill:"currentColor",key:"kqv944"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const MR=ye("Tent",[["path",{d:"M3.5 21 14 3",key:"1szst5"}],["path",{d:"M20.5 21 10 3",key:"1310c3"}],["path",{d:"M15.5 21 12 15l-3.5 6",key:"1ddtfw"}],["path",{d:"M2 21h20",key:"1nyx9w"}]]);/** + */const RR=ye("Tent",[["path",{d:"M3.5 21 14 3",key:"1szst5"}],["path",{d:"M20.5 21 10 3",key:"1310c3"}],["path",{d:"M15.5 21 12 15l-3.5 6",key:"1ddtfw"}],["path",{d:"M2 21h20",key:"1nyx9w"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Uj=ye("Terminal",[["polyline",{points:"4 17 10 11 4 5",key:"akl6gq"}],["line",{x1:"12",x2:"20",y1:"19",y2:"19",key:"q2wloq"}]]);/** + */const $j=ye("Terminal",[["polyline",{points:"4 17 10 11 4 5",key:"akl6gq"}],["line",{x1:"12",x2:"20",y1:"19",y2:"19",key:"q2wloq"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const RR=ye("Theater",[["path",{d:"M2 10s3-3 3-8",key:"3xiif0"}],["path",{d:"M22 10s-3-3-3-8",key:"ioaa5q"}],["path",{d:"M10 2c0 4.4-3.6 8-8 8",key:"16fkpi"}],["path",{d:"M14 2c0 4.4 3.6 8 8 8",key:"b9eulq"}],["path",{d:"M2 10s2 2 2 5",key:"1au1lb"}],["path",{d:"M22 10s-2 2-2 5",key:"qi2y5e"}],["path",{d:"M8 15h8",key:"45n4r"}],["path",{d:"M2 22v-1a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v1",key:"1vsc2m"}],["path",{d:"M14 22v-1a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v1",key:"hrha4u"}]]);/** + */const IR=ye("Theater",[["path",{d:"M2 10s3-3 3-8",key:"3xiif0"}],["path",{d:"M22 10s-3-3-3-8",key:"ioaa5q"}],["path",{d:"M10 2c0 4.4-3.6 8-8 8",key:"16fkpi"}],["path",{d:"M14 2c0 4.4 3.6 8 8 8",key:"b9eulq"}],["path",{d:"M2 10s2 2 2 5",key:"1au1lb"}],["path",{d:"M22 10s-2 2-2 5",key:"qi2y5e"}],["path",{d:"M8 15h8",key:"45n4r"}],["path",{d:"M2 22v-1a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v1",key:"1vsc2m"}],["path",{d:"M14 22v-1a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v1",key:"hrha4u"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -946,17 +946,17 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const IR=ye("TreePine",[["path",{d:"m17 14 3 3.3a1 1 0 0 1-.7 1.7H4.7a1 1 0 0 1-.7-1.7L7 14h-.3a1 1 0 0 1-.7-1.7L9 9h-.2A1 1 0 0 1 8 7.3L12 3l4 4.3a1 1 0 0 1-.8 1.7H15l3 3.3a1 1 0 0 1-.7 1.7H17Z",key:"cpyugq"}],["path",{d:"M12 22v-3",key:"kmzjlo"}]]);/** + */const LR=ye("TreePine",[["path",{d:"m17 14 3 3.3a1 1 0 0 1-.7 1.7H4.7a1 1 0 0 1-.7-1.7L7 14h-.3a1 1 0 0 1-.7-1.7L9 9h-.2A1 1 0 0 1 8 7.3L12 3l4 4.3a1 1 0 0 1-.8 1.7H15l3 3.3a1 1 0 0 1-.7 1.7H17Z",key:"cpyugq"}],["path",{d:"M12 22v-3",key:"kmzjlo"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const LR=ye("TrendingUp",[["polyline",{points:"22 7 13.5 15.5 8.5 10.5 2 17",key:"126l90"}],["polyline",{points:"16 7 22 7 22 13",key:"kwv8wd"}]]);/** + */const FR=ye("TrendingUp",[["polyline",{points:"22 7 13.5 15.5 8.5 10.5 2 17",key:"126l90"}],["polyline",{points:"16 7 22 7 22 13",key:"kwv8wd"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const $j=ye("Unlink",[["path",{d:"m18.84 12.25 1.72-1.71h-.02a5.004 5.004 0 0 0-.12-7.07 5.006 5.006 0 0 0-6.95 0l-1.72 1.71",key:"yqzxt4"}],["path",{d:"m5.17 11.75-1.71 1.71a5.004 5.004 0 0 0 .12 7.07 5.006 5.006 0 0 0 6.95 0l1.71-1.71",key:"4qinb0"}],["line",{x1:"8",x2:"8",y1:"2",y2:"5",key:"1041cp"}],["line",{x1:"2",x2:"5",y1:"8",y2:"8",key:"14m1p5"}],["line",{x1:"16",x2:"16",y1:"19",y2:"22",key:"rzdirn"}],["line",{x1:"19",x2:"22",y1:"16",y2:"16",key:"ox905f"}]]);/** + */const Vj=ye("Unlink",[["path",{d:"m18.84 12.25 1.72-1.71h-.02a5.004 5.004 0 0 0-.12-7.07 5.006 5.006 0 0 0-6.95 0l-1.72 1.71",key:"yqzxt4"}],["path",{d:"m5.17 11.75-1.71 1.71a5.004 5.004 0 0 0 .12 7.07 5.006 5.006 0 0 0 6.95 0l1.71-1.71",key:"4qinb0"}],["line",{x1:"8",x2:"8",y1:"2",y2:"5",key:"1041cp"}],["line",{x1:"2",x2:"5",y1:"8",y2:"8",key:"14m1p5"}],["line",{x1:"16",x2:"16",y1:"19",y2:"22",key:"rzdirn"}],["line",{x1:"19",x2:"22",y1:"16",y2:"16",key:"ox905f"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -966,7 +966,7 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const FR=ye("UserMinus",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["line",{x1:"22",x2:"16",y1:"11",y2:"11",key:"1shjgl"}]]);/** + */const OR=ye("UserMinus",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["line",{x1:"22",x2:"16",y1:"11",y2:"11",key:"1shjgl"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -976,7 +976,7 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Jy=ye("User",[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]]);/** + */const Qy=ye("User",[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -986,7 +986,7 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const OR=ye("UtensilsCrossed",[["path",{d:"m16 2-2.3 2.3a3 3 0 0 0 0 4.2l1.8 1.8a3 3 0 0 0 4.2 0L22 8",key:"n7qcjb"}],["path",{d:"M15 15 3.3 3.3a4.2 4.2 0 0 0 0 6l7.3 7.3c.7.7 2 .7 2.8 0L15 15Zm0 0 7 7",key:"d0u48b"}],["path",{d:"m2.1 21.8 6.4-6.3",key:"yn04lh"}],["path",{d:"m19 5-7 7",key:"194lzd"}]]);/** + */const BR=ye("UtensilsCrossed",[["path",{d:"m16 2-2.3 2.3a3 3 0 0 0 0 4.2l1.8 1.8a3 3 0 0 0 4.2 0L22 8",key:"n7qcjb"}],["path",{d:"M15 15 3.3 3.3a4.2 4.2 0 0 0 0 6l7.3 7.3c.7.7 2 .7 2.8 0L15 15Zm0 0 7 7",key:"d0u48b"}],["path",{d:"m2.1 21.8 6.4-6.3",key:"yn04lh"}],["path",{d:"m19 5-7 7",key:"194lzd"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -1001,12 +1001,12 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const BR=ye("Waves",[["path",{d:"M2 6c.6.5 1.2 1 2.5 1C7 7 7 5 9.5 5c2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1",key:"knzxuh"}],["path",{d:"M2 12c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1",key:"2jd2cc"}],["path",{d:"M2 18c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1",key:"rd2r6e"}]]);/** + */const HR=ye("Waves",[["path",{d:"M2 6c.6.5 1.2 1 2.5 1C7 7 7 5 9.5 5c2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1",key:"knzxuh"}],["path",{d:"M2 12c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1",key:"2jd2cc"}],["path",{d:"M2 18c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1",key:"rd2r6e"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const HR=ye("Wifi",[["path",{d:"M12 20h.01",key:"zekei9"}],["path",{d:"M2 8.82a15 15 0 0 1 20 0",key:"dnpr2z"}],["path",{d:"M5 12.859a10 10 0 0 1 14 0",key:"1x1e6c"}],["path",{d:"M8.5 16.429a5 5 0 0 1 7 0",key:"1bycff"}]]);/** + */const WR=ye("Wifi",[["path",{d:"M12 20h.01",key:"zekei9"}],["path",{d:"M2 8.82a15 15 0 0 1 20 0",key:"dnpr2z"}],["path",{d:"M5 12.859a10 10 0 0 1 14 0",key:"1x1e6c"}],["path",{d:"M8.5 16.429a5 5 0 0 1 7 0",key:"1bycff"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -1016,12 +1016,12 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const WR=ye("Wine",[["path",{d:"M8 22h8",key:"rmew8v"}],["path",{d:"M7 10h10",key:"1101jm"}],["path",{d:"M12 15v7",key:"t2xh3l"}],["path",{d:"M12 15a5 5 0 0 0 5-5c0-2-.5-4-2-8H9c-1.5 4-2 6-2 8a5 5 0 0 0 5 5Z",key:"10ffi3"}]]);/** + */const UR=ye("Wine",[["path",{d:"M8 22h8",key:"rmew8v"}],["path",{d:"M7 10h10",key:"1101jm"}],["path",{d:"M12 15v7",key:"t2xh3l"}],["path",{d:"M12 15a5 5 0 0 0 5-5c0-2-.5-4-2-8H9c-1.5 4-2 6-2 8a5 5 0 0 0 5 5Z",key:"10ffi3"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Vj=ye("XCircle",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]]);/** + */const Kj=ye("XCircle",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]]);/** * @license lucide-react v0.344.0 - ISC * * This source code is licensed under the ISC license. @@ -1031,7 +1031,7 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Kj=ye("Zap",[["polygon",{points:"13 2 3 14 12 14 11 22 21 10 12 10 13 2",key:"45s27k"}]]);function D0(){const{t:e,language:t}=lt(),[a,n]=y.useState("login"),[r,o]=y.useState(""),[s,d]=y.useState(""),[c,p]=y.useState(""),[m,g]=y.useState(!1),[f,v]=y.useState(!1),[k,x]=y.useState(""),[S,b]=y.useState(null),[w,j]=y.useState(""),[P,M]=y.useState(!1),{login:N,register:D,demoLogin:F,completeMfaLogin:R,loadUser:A}=Na(),{setLanguageLocal:ae}=na(),B=Vi();y.useEffect(()=>{var te;const J=new URLSearchParams(window.location.search),xe=J.get("invite"),ue=J.get("oidc_code"),fe=J.get("oidc_error");if(xe){j(xe),n("register"),kt.validateInvite(xe).then(()=>{M(!0)}).catch(()=>{x("Invalid or expired invite link")}),window.history.replaceState({},"",window.location.pathname);return}if(ue){v(!0),window.history.replaceState({},"","/login"),fetch("/api/auth/oidc/exchange?code="+encodeURIComponent(ue),{credentials:"include"}).then(ze=>ze.json()).then(async ze=>{ze.token?(await A(),B("/dashboard",{replace:!0})):x(ze.error||"OIDC login failed")}).catch(()=>x("OIDC login failed")).finally(()=>v(!1));return}if(fe){const ze={registration_disabled:e("login.oidc.registrationDisabled"),no_email:e("login.oidc.noEmail"),token_failed:e("login.oidc.tokenFailed"),invalid_state:e("login.oidc.invalidState")};x(ze[fe]||fe),window.history.replaceState({},"","/login");return}(te=kt.getAppConfig)==null||te.call(kt).catch(()=>null).then(ze=>{ze&&(b(ze),ze.has_users||n("register"),ze.oidc_only_mode&&ze.oidc_configured&&ze.has_users&&(window.location.href="/api/auth/oidc/login"))})},[B,e]);const q=async()=>{x(""),v(!0);try{await F(),de(!0),setTimeout(()=>B("/dashboard"),2600)}catch(J){x(J instanceof Error?J.message:e("login.demoFailed"))}finally{v(!1)}},[le,de]=y.useState(!1),[me,O]=y.useState(!1),[$,U]=y.useState(""),[T,ce]=y.useState(""),[K,E]=y.useState(!1),[I,ee]=y.useState(""),[pe,H]=y.useState(""),[ne,ge]=y.useState(""),oe=async J=>{var xe,ue;J.preventDefault(),x(""),v(!0);try{if(K){if(!pe){x(e("settings.passwordRequired")),v(!1);return}if(pe.length<8){x(e("settings.passwordTooShort")),v(!1);return}if(pe!==ne){x(e("settings.passwordMismatch")),v(!1);return}await kt.changePassword({current_password:I,new_password:pe}),await A({silent:!0}),de(!0),setTimeout(()=>B("/dashboard"),2600);return}if(a==="login"&&me){if(!T.trim()){x(e("login.mfaCodeRequired")),v(!1);return}const fe=await R($,T);if("user"in fe&&((xe=fe.user)!=null&&xe.must_change_password)){ee(c),E(!0),v(!1);return}de(!0),setTimeout(()=>B("/dashboard"),2600);return}if(a==="register"){if(!r.trim()){x("Username is required"),v(!1);return}if(c.length<8){x("Password must be at least 8 characters"),v(!1);return}await D(r,s,c,w||void 0)}else{const fe=await N(s,c);if("mfa_required"in fe&&fe.mfa_required&&"mfa_token"in fe){U(fe.mfa_token),O(!0),ce(""),v(!1);return}if("user"in fe&&((ue=fe.user)!=null&&ue.must_change_password)){ee(c),E(!0),v(!1);return}}de(!0),setTimeout(()=>B("/dashboard"),2600)}catch(fe){x(fe instanceof Error?fe.message:e("login.error")),v(!1)}},Y=((S==null?void 0:S.allow_registration)||!(S!=null&&S.has_users)||P)&&!(S!=null&&S.oidc_only_mode)&&((S==null?void 0:S.setup_complete)!==!1||!(S!=null&&S.has_users)),X=(S==null?void 0:S.oidc_only_mode)&&(S==null?void 0:S.oidc_configured),he={width:"100%",padding:"11px 12px 11px 40px",border:"1px solid #e5e7eb",borderRadius:12,fontSize:14,fontFamily:"inherit",outline:"none",color:"#111827",background:"white",boxSizing:"border-box",transition:"border-color 0.15s"};return le?i.jsxs("div",{className:"takeoff-overlay",style:{position:"fixed",inset:0,zIndex:99999,overflow:"hidden"},children:[i.jsx("div",{className:"takeoff-sky",style:{position:"absolute",inset:0}}),Array.from({length:60},(J,xe)=>i.jsx("div",{className:"takeoff-star",style:{position:"absolute",width:Math.random()>.7?3:1.5,height:Math.random()>.7?3:1.5,borderRadius:"50%",background:"white",top:`${Math.random()*100}%`,left:`${Math.random()*100}%`,animationDelay:`${.3+Math.random()*.5}s, ${Math.random()*1}s`}},xe)),[0,1,2,3,4].map(J=>i.jsx("div",{className:"takeoff-cloud",style:{position:"absolute",width:120+J*40,height:40+J*10,borderRadius:"50%",background:"rgba(255,255,255,0.15)",filter:"blur(8px)",right:-200,top:`${25+J*12}%`,animationDelay:`${.3+J*.25}s`}},J)),Array.from({length:12},(J,xe)=>i.jsx("div",{className:"takeoff-speedline",style:{position:"absolute",width:80+Math.random()*120,height:1.5,background:"linear-gradient(90deg, transparent, rgba(255,255,255,0.3), transparent)",top:`${10+Math.random()*80}%`,right:-200,animationDelay:`${.5+xe*.12}s`}},xe)),i.jsx("div",{className:"takeoff-plane",style:{position:"absolute",left:"50%",bottom:"10%",transform:"translate(-50%, 0)"},children:i.jsx("svg",{viewBox:"0 0 480 120",style:{width:200,filter:"drop-shadow(0 0 20px rgba(255,255,255,0.3))"},children:i.jsxs("g",{fill:"white",transform:"translate(240,60) rotate(-12)",children:[i.jsx("ellipse",{cx:"0",cy:"0",rx:"120",ry:"12"}),i.jsx("path",{d:"M-20,-10 L-60,-55 L-40,-55 L0,-15 Z"}),i.jsx("path",{d:"M-20,10 L-60,55 L-40,55 L0,15 Z"}),i.jsx("path",{d:"M-100,-5 L-120,-30 L-108,-30 L-90,-8 Z"}),i.jsx("path",{d:"M-100,5 L-120,30 L-108,30 L-90,8 Z"}),i.jsx("ellipse",{cx:"60",cy:"0",rx:"18",ry:"8"})]})})}),i.jsx("div",{className:"takeoff-trail",style:{position:"absolute",left:"50%",bottom:"8%",width:3,height:0,background:"linear-gradient(to top, transparent, rgba(255,255,255,0.5))",transformOrigin:"bottom center"}}),i.jsxs("div",{className:"takeoff-logo",style:{position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",display:"flex",flexDirection:"column",alignItems:"center",gap:8},children:[i.jsx("img",{src:"/logo-light.svg",alt:"TREK",style:{height:72}}),i.jsx("p",{style:{margin:0,fontSize:20,color:"rgba(255,255,255,0.6)",fontFamily:"'MuseoModerno', sans-serif",textTransform:"lowercase",whiteSpace:"nowrap"},children:e("login.tagline")})]}),i.jsx("style",{children:` + */const qj=ye("Zap",[["polygon",{points:"13 2 3 14 12 14 11 22 21 10 12 10 13 2",key:"45s27k"}]]);function M0(){const{t:e,language:t}=lt(),[a,n]=y.useState("login"),[r,o]=y.useState(""),[s,d]=y.useState(""),[c,p]=y.useState(""),[m,g]=y.useState(!1),[f,v]=y.useState(!1),[k,x]=y.useState(""),[S,b]=y.useState(null),[w,j]=y.useState(""),[P,M]=y.useState(!1),{login:N,register:D,demoLogin:F,completeMfaLogin:R,loadUser:E}=Na(),{setLanguageLocal:ae}=na(),B=Vi();y.useEffect(()=>{var te;const J=new URLSearchParams(window.location.search),xe=J.get("invite"),ue=J.get("oidc_code"),fe=J.get("oidc_error");if(xe){j(xe),n("register"),kt.validateInvite(xe).then(()=>{M(!0)}).catch(()=>{x("Invalid or expired invite link")}),window.history.replaceState({},"",window.location.pathname);return}if(ue){v(!0),window.history.replaceState({},"","/login"),fetch("/api/auth/oidc/exchange?code="+encodeURIComponent(ue),{credentials:"include"}).then(ze=>ze.json()).then(async ze=>{ze.token?(await E(),B("/dashboard",{replace:!0})):x(ze.error||"OIDC login failed")}).catch(()=>x("OIDC login failed")).finally(()=>v(!1));return}if(fe){const ze={registration_disabled:e("login.oidc.registrationDisabled"),no_email:e("login.oidc.noEmail"),token_failed:e("login.oidc.tokenFailed"),invalid_state:e("login.oidc.invalidState")};x(ze[fe]||fe),window.history.replaceState({},"","/login");return}(te=kt.getAppConfig)==null||te.call(kt).catch(()=>null).then(ze=>{ze&&(b(ze),ze.has_users||n("register"),ze.oidc_only_mode&&ze.oidc_configured&&ze.has_users&&(window.location.href="/api/auth/oidc/login"))})},[B,e]);const K=async()=>{x(""),v(!0);try{await F(),de(!0),setTimeout(()=>B("/dashboard"),2600)}catch(J){x(J instanceof Error?J.message:e("login.demoFailed"))}finally{v(!1)}},[le,de]=y.useState(!1),[me,O]=y.useState(!1),[$,U]=y.useState(""),[T,ce]=y.useState(""),[q,A]=y.useState(!1),[I,ee]=y.useState(""),[pe,H]=y.useState(""),[ne,ge]=y.useState(""),oe=async J=>{var xe,ue;J.preventDefault(),x(""),v(!0);try{if(q){if(!pe){x(e("settings.passwordRequired")),v(!1);return}if(pe.length<8){x(e("settings.passwordTooShort")),v(!1);return}if(pe!==ne){x(e("settings.passwordMismatch")),v(!1);return}await kt.changePassword({current_password:I,new_password:pe}),await E({silent:!0}),de(!0),setTimeout(()=>B("/dashboard"),2600);return}if(a==="login"&&me){if(!T.trim()){x(e("login.mfaCodeRequired")),v(!1);return}const fe=await R($,T);if("user"in fe&&((xe=fe.user)!=null&&xe.must_change_password)){ee(c),A(!0),v(!1);return}de(!0),setTimeout(()=>B("/dashboard"),2600);return}if(a==="register"){if(!r.trim()){x("Username is required"),v(!1);return}if(c.length<8){x("Password must be at least 8 characters"),v(!1);return}await D(r,s,c,w||void 0)}else{const fe=await N(s,c);if("mfa_required"in fe&&fe.mfa_required&&"mfa_token"in fe){U(fe.mfa_token),O(!0),ce(""),v(!1);return}if("user"in fe&&((ue=fe.user)!=null&&ue.must_change_password)){ee(c),A(!0),v(!1);return}}de(!0),setTimeout(()=>B("/dashboard"),2600)}catch(fe){x(fe instanceof Error?fe.message:e("login.error")),v(!1)}},Y=((S==null?void 0:S.allow_registration)||!(S!=null&&S.has_users)||P)&&!(S!=null&&S.oidc_only_mode)&&((S==null?void 0:S.setup_complete)!==!1||!(S!=null&&S.has_users)),X=(S==null?void 0:S.oidc_only_mode)&&(S==null?void 0:S.oidc_configured),he={width:"100%",padding:"11px 12px 11px 40px",border:"1px solid #e5e7eb",borderRadius:12,fontSize:14,fontFamily:"inherit",outline:"none",color:"#111827",background:"white",boxSizing:"border-box",transition:"border-color 0.15s"};return le?i.jsxs("div",{className:"takeoff-overlay",style:{position:"fixed",inset:0,zIndex:99999,overflow:"hidden"},children:[i.jsx("div",{className:"takeoff-sky",style:{position:"absolute",inset:0}}),Array.from({length:60},(J,xe)=>i.jsx("div",{className:"takeoff-star",style:{position:"absolute",width:Math.random()>.7?3:1.5,height:Math.random()>.7?3:1.5,borderRadius:"50%",background:"white",top:`${Math.random()*100}%`,left:`${Math.random()*100}%`,animationDelay:`${.3+Math.random()*.5}s, ${Math.random()*1}s`}},xe)),[0,1,2,3,4].map(J=>i.jsx("div",{className:"takeoff-cloud",style:{position:"absolute",width:120+J*40,height:40+J*10,borderRadius:"50%",background:"rgba(255,255,255,0.15)",filter:"blur(8px)",right:-200,top:`${25+J*12}%`,animationDelay:`${.3+J*.25}s`}},J)),Array.from({length:12},(J,xe)=>i.jsx("div",{className:"takeoff-speedline",style:{position:"absolute",width:80+Math.random()*120,height:1.5,background:"linear-gradient(90deg, transparent, rgba(255,255,255,0.3), transparent)",top:`${10+Math.random()*80}%`,right:-200,animationDelay:`${.5+xe*.12}s`}},xe)),i.jsx("div",{className:"takeoff-plane",style:{position:"absolute",left:"50%",bottom:"10%",transform:"translate(-50%, 0)"},children:i.jsx("svg",{viewBox:"0 0 480 120",style:{width:200,filter:"drop-shadow(0 0 20px rgba(255,255,255,0.3))"},children:i.jsxs("g",{fill:"white",transform:"translate(240,60) rotate(-12)",children:[i.jsx("ellipse",{cx:"0",cy:"0",rx:"120",ry:"12"}),i.jsx("path",{d:"M-20,-10 L-60,-55 L-40,-55 L0,-15 Z"}),i.jsx("path",{d:"M-20,10 L-60,55 L-40,55 L0,15 Z"}),i.jsx("path",{d:"M-100,-5 L-120,-30 L-108,-30 L-90,-8 Z"}),i.jsx("path",{d:"M-100,5 L-120,30 L-108,30 L-90,8 Z"}),i.jsx("ellipse",{cx:"60",cy:"0",rx:"18",ry:"8"})]})})}),i.jsx("div",{className:"takeoff-trail",style:{position:"absolute",left:"50%",bottom:"8%",width:3,height:0,background:"linear-gradient(to top, transparent, rgba(255,255,255,0.5))",transformOrigin:"bottom center"}}),i.jsxs("div",{className:"takeoff-logo",style:{position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",display:"flex",flexDirection:"column",alignItems:"center",gap:8},children:[i.jsx("img",{src:"/logo-light.svg",alt:"TREK",style:{height:72}}),i.jsx("p",{style:{margin:0,fontSize:20,color:"rgba(255,255,255,0.6)",fontFamily:"'MuseoModerno', sans-serif",textTransform:"lowercase",whiteSpace:"nowrap"},children:e("login.tagline")})]}),i.jsx("style",{children:` .takeoff-sky { background: linear-gradient(to top, #1a1a2e 0%, #16213e 30%, #0f3460 60%, #0a0a23 100%); animation: skyShift 2.6s ease-in-out forwards; @@ -1098,7 +1098,7 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál 0% { opacity: 0; transform: translate(-50%, -40%) scale(0.9); } 100% { opacity: 1; transform: translate(-50%, -50%) scale(1); } } - `})]}):i.jsxs("div",{style:{minHeight:"100vh",display:"flex",fontFamily:"-apple-system, BlinkMacSystemFont, 'SF Pro Text', system-ui, sans-serif",position:"relative"},children:[i.jsxs("button",{onClick:()=>{const J=$p.map(({value:fe})=>fe),xe=J.findIndex(fe=>fe===t),ue=J[(xe+1)%J.length];ae(ue)},style:{position:"absolute",top:16,right:16,zIndex:10,display:"flex",alignItems:"center",gap:6,padding:"6px 12px",borderRadius:99,background:"rgba(0,0,0,0.06)",border:"none",fontSize:13,fontWeight:500,color:"#374151",cursor:"pointer",fontFamily:"inherit",transition:"background 0.15s"},onMouseEnter:J=>J.currentTarget.style.background="rgba(0,0,0,0.1)",onMouseLeave:J=>J.currentTarget.style.background="rgba(0,0,0,0.06)",children:[i.jsx(Br,{size:14}),t.toUpperCase()]}),i.jsxs("div",{style:{display:"none",width:"55%",background:"linear-gradient(135deg, #0f172a 0%, #1e293b 50%, #0f172a 100%)",flexDirection:"column",justifyContent:"center",alignItems:"center",padding:"60px 48px",position:"relative",overflow:"hidden"},className:"lg-panel",children:[i.jsx("style",{children:"@media(min-width:1024px){.lg-panel{display:flex!important}}"}),i.jsx("div",{style:{position:"absolute",inset:0,overflow:"hidden"},children:Array.from({length:40},(J,xe)=>i.jsx("div",{className:"login-star",style:{position:"absolute",width:Math.random()>.7?2:1,height:Math.random()>.7?2:1,borderRadius:"50%",background:"white",opacity:.15+Math.random()*.25,top:`${Math.random()*70}%`,left:`${Math.random()*100}%`,animationDelay:`${Math.random()*4}s`}},xe))}),i.jsx("div",{className:"login-orb1",style:{position:"absolute",width:500,height:500,borderRadius:"50%",background:"radial-gradient(circle, rgba(99,102,241,0.1) 0%, transparent 70%)",filter:"blur(80px)"}}),i.jsx("div",{className:"login-orb2",style:{position:"absolute",width:350,height:350,borderRadius:"50%",background:"radial-gradient(circle, rgba(14,165,233,0.08) 0%, transparent 70%)",filter:"blur(60px)"}}),i.jsxs("div",{style:{position:"absolute",inset:0,overflow:"hidden",pointerEvents:"none"},children:[i.jsx("svg",{className:"login-plane1",viewBox:"0 0 480 120",style:{position:"absolute",width:48,opacity:.12},children:i.jsxs("g",{fill:"white",transform:"translate(240,60) rotate(-12)",children:[i.jsx("ellipse",{cx:"0",cy:"0",rx:"120",ry:"12"}),i.jsx("path",{d:"M-20,-10 L-60,-55 L-40,-55 L0,-15 Z"}),i.jsx("path",{d:"M-20,10 L-60,55 L-40,55 L0,15 Z"}),i.jsx("path",{d:"M-100,-5 L-120,-30 L-108,-30 L-90,-8 Z"}),i.jsx("path",{d:"M-100,5 L-120,30 L-108,30 L-90,8 Z"}),i.jsx("ellipse",{cx:"60",cy:"0",rx:"18",ry:"8"})]})}),i.jsx("svg",{className:"login-plane2",viewBox:"0 0 480 120",style:{position:"absolute",width:24,opacity:.08},children:i.jsxs("g",{fill:"white",transform:"translate(240,60) rotate(-12)",children:[i.jsx("ellipse",{cx:"0",cy:"0",rx:"120",ry:"12"}),i.jsx("path",{d:"M-20,-10 L-60,-55 L-40,-55 L0,-15 Z"}),i.jsx("path",{d:"M-20,10 L-60,55 L-40,55 L0,15 Z"}),i.jsx("ellipse",{cx:"60",cy:"0",rx:"18",ry:"8"})]})}),i.jsx("svg",{className:"login-plane3",viewBox:"0 0 480 120",style:{position:"absolute",width:32,opacity:.06},children:i.jsxs("g",{fill:"white",transform:"translate(240,60) rotate(-5)",children:[i.jsx("ellipse",{cx:"0",cy:"0",rx:"120",ry:"12"}),i.jsx("path",{d:"M-20,-10 L-60,-55 L-40,-55 L0,-15 Z"}),i.jsx("path",{d:"M-20,10 L-60,55 L-40,55 L0,15 Z"}),i.jsx("path",{d:"M-100,-5 L-120,-30 L-108,-30 L-90,-8 Z"}),i.jsx("path",{d:"M-100,5 L-120,30 L-108,30 L-90,8 Z"}),i.jsx("ellipse",{cx:"60",cy:"0",rx:"18",ry:"8"})]})}),i.jsx("svg",{className:"login-plane4",viewBox:"0 0 480 120",style:{position:"absolute",width:16,opacity:.07},children:i.jsxs("g",{fill:"white",transform:"translate(240,60) rotate(-10)",children:[i.jsx("ellipse",{cx:"0",cy:"0",rx:"120",ry:"12"}),i.jsx("path",{d:"M-20,-10 L-60,-55 L-40,-55 L0,-15 Z"}),i.jsx("path",{d:"M-20,10 L-60,55 L-40,55 L0,15 Z"}),i.jsx("ellipse",{cx:"60",cy:"0",rx:"18",ry:"8"})]})}),i.jsx("svg",{className:"login-plane5",viewBox:"0 0 480 120",style:{position:"absolute",width:28,opacity:.05},children:i.jsxs("g",{fill:"white",transform:"translate(240,60) rotate(8) scale(-1,1)",children:[i.jsx("ellipse",{cx:"0",cy:"0",rx:"120",ry:"12"}),i.jsx("path",{d:"M-20,-10 L-60,-55 L-40,-55 L0,-15 Z"}),i.jsx("path",{d:"M-20,10 L-60,55 L-40,55 L0,15 Z"}),i.jsx("path",{d:"M-100,-5 L-120,-30 L-108,-30 L-90,-8 Z"}),i.jsx("path",{d:"M-100,5 L-120,30 L-108,30 L-90,8 Z"}),i.jsx("ellipse",{cx:"60",cy:"0",rx:"18",ry:"8"})]})}),i.jsx("svg",{className:"login-plane6",viewBox:"0 0 480 120",style:{position:"absolute",width:12,opacity:.04},children:i.jsxs("g",{fill:"white",transform:"translate(240,60) rotate(-15)",children:[i.jsx("ellipse",{cx:"0",cy:"0",rx:"120",ry:"12"}),i.jsx("path",{d:"M-20,-10 L-60,-55 L-40,-55 L0,-15 Z"}),i.jsx("path",{d:"M-20,10 L-60,55 L-40,55 L0,15 Z"}),i.jsx("ellipse",{cx:"60",cy:"0",rx:"18",ry:"8"})]})})]}),i.jsxs("div",{style:{position:"relative",zIndex:1,maxWidth:560,textAlign:"center"},children:[i.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",marginBottom:48},children:i.jsx("img",{src:"/logo-light.svg",alt:"TREK",style:{height:64}})}),i.jsx("h2",{style:{margin:"0 0 12px",fontSize:36,fontWeight:700,color:"white",lineHeight:1.15,letterSpacing:"-0.02em",fontFamily:"'MuseoModerno', sans-serif",textTransform:"lowercase"},children:e("login.tagline")}),i.jsx("p",{style:{margin:"0 0 44px",fontSize:15,color:"rgba(255,255,255,0.5)",lineHeight:1.7},children:e("login.description")}),i.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(4, 1fr)",gap:8},children:[{Icon:As,label:e("login.features.maps"),desc:e("login.features.mapsDesc")},{Icon:Kj,label:e("login.features.realtime"),desc:e("login.features.realtimeDesc")},{Icon:Vl,label:e("login.features.budget"),desc:e("login.features.budgetDesc")},{Icon:qi,label:e("login.features.collab"),desc:e("login.features.collabDesc")},{Icon:Ej,label:e("login.features.packing"),desc:e("login.features.packingDesc")},{Icon:Tj,label:e("login.features.bookings"),desc:e("login.features.bookingsDesc")},{Icon:Xf,label:e("login.features.files"),desc:e("login.features.filesDesc")},{Icon:jR,label:e("login.features.routes"),desc:e("login.features.routesDesc")}].map(({Icon:J,label:xe,desc:ue})=>i.jsxs("div",{style:{background:"rgba(255,255,255,0.04)",borderRadius:14,padding:"14px 12px",border:"1px solid rgba(255,255,255,0.06)",textAlign:"left",transition:"all 0.2s"},onMouseEnter:fe=>{fe.currentTarget.style.background="rgba(255,255,255,0.08)",fe.currentTarget.style.borderColor="rgba(255,255,255,0.12)"},onMouseLeave:fe=>{fe.currentTarget.style.background="rgba(255,255,255,0.04)",fe.currentTarget.style.borderColor="rgba(255,255,255,0.06)"},children:[i.jsx(J,{size:17,style:{color:"rgba(255,255,255,0.7)",marginBottom:7}}),i.jsx("div",{style:{fontSize:12.5,color:"white",fontWeight:600,marginBottom:2},children:xe}),i.jsx("div",{style:{fontSize:11,color:"rgba(255,255,255,0.35)",lineHeight:1.4},children:ue})]},xe))}),i.jsx("p",{style:{marginTop:36,fontSize:11.5,color:"rgba(255,255,255,0.25)",letterSpacing:"0.03em"},children:e("login.selfHosted")})]})]}),i.jsx("div",{style:{flex:1,display:"flex",alignItems:"center",justifyContent:"center",padding:"32px 24px",background:"#f9fafb"},children:i.jsxs("div",{style:{width:"100%",maxWidth:400},children:[i.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",gap:6,marginBottom:36},className:"mobile-logo",children:[i.jsx("style",{children:"@media(min-width:1024px){.mobile-logo{display:none!important}}"}),i.jsx("img",{src:"/logo-dark.svg",alt:"TREK",style:{height:48}}),i.jsx("p",{style:{margin:0,fontSize:16,color:"#9ca3af",fontFamily:"'MuseoModerno', sans-serif",textTransform:"lowercase",whiteSpace:"nowrap"},children:e("login.tagline")})]}),i.jsx("div",{style:{background:"white",borderRadius:20,border:"1px solid #e5e7eb",padding:"36px 32px",boxShadow:"0 2px 16px rgba(0,0,0,0.06)"},children:X?i.jsxs(i.Fragment,{children:[i.jsx("h2",{style:{margin:"0 0 4px",fontSize:22,fontWeight:800,color:"#111827"},children:e("login.title")}),i.jsx("p",{style:{margin:"0 0 24px",fontSize:13.5,color:"#9ca3af"},children:e("login.oidcOnly")}),k&&i.jsx("div",{style:{padding:"10px 14px",background:"#fef2f2",border:"1px solid #fecaca",borderRadius:10,fontSize:13,color:"#dc2626",marginBottom:16},children:k}),i.jsxs("a",{href:`/api/auth/oidc/login${w?"?invite="+encodeURIComponent(w):""}`,style:{width:"100%",padding:"12px",background:"#111827",color:"white",border:"none",borderRadius:12,fontSize:14,fontWeight:700,cursor:"pointer",fontFamily:"inherit",display:"flex",alignItems:"center",justifyContent:"center",gap:8,textDecoration:"none",transition:"all 0.15s",boxSizing:"border-box"},onMouseEnter:J=>{J.currentTarget.style.background="#1f2937"},onMouseLeave:J=>{J.currentTarget.style.background="#111827"},children:[i.jsx(mr,{size:16}),e("login.oidcSignIn",{name:(S==null?void 0:S.oidc_display_name)||"SSO"})]})]}):i.jsxs(i.Fragment,{children:[i.jsx("h2",{style:{margin:"0 0 4px",fontSize:22,fontWeight:800,color:"#111827"},children:K?e("login.setNewPassword"):a==="login"&&me?e("login.mfaTitle"):a==="register"?S!=null&&S.has_users?e("login.createAccount"):e("login.createAdmin"):e("login.title")}),i.jsx("p",{style:{margin:"0 0 28px",fontSize:13.5,color:"#9ca3af"},children:K?e("login.setNewPasswordHint"):a==="login"&&me?e("login.mfaSubtitle"):a==="register"?S!=null&&S.has_users?e("login.createAccountHint"):e("login.createAdminHint"):e("login.subtitle")}),i.jsxs("form",{onSubmit:oe,style:{display:"flex",flexDirection:"column",gap:16},children:[k&&i.jsx("div",{style:{padding:"10px 14px",background:"#fef2f2",border:"1px solid #fecaca",borderRadius:10,fontSize:13,color:"#dc2626"},children:k}),K&&i.jsxs(i.Fragment,{children:[i.jsx("div",{style:{padding:"10px 14px",background:"#fefce8",border:"1px solid #fde68a",borderRadius:10,fontSize:13,color:"#92400e"},children:e("settings.mustChangePassword")}),i.jsxs("div",{children:[i.jsx("label",{style:{display:"block",fontSize:12.5,fontWeight:600,color:"#374151",marginBottom:6},children:e("settings.newPassword")}),i.jsxs("div",{style:{position:"relative"},children:[i.jsx(zo,{size:15,style:{position:"absolute",left:13,top:"50%",transform:"translateY(-50%)",color:"#9ca3af",pointerEvents:"none"}}),i.jsx("input",{type:"password",value:pe,onChange:J=>H(J.target.value),required:!0,placeholder:e("settings.newPassword"),style:he,onFocus:J=>J.target.style.borderColor="#111827",onBlur:J=>J.target.style.borderColor="#e5e7eb"})]})]}),i.jsxs("div",{children:[i.jsx("label",{style:{display:"block",fontSize:12.5,fontWeight:600,color:"#374151",marginBottom:6},children:e("settings.confirmPassword")}),i.jsxs("div",{style:{position:"relative"},children:[i.jsx(zo,{size:15,style:{position:"absolute",left:13,top:"50%",transform:"translateY(-50%)",color:"#9ca3af",pointerEvents:"none"}}),i.jsx("input",{type:"password",value:ne,onChange:J=>ge(J.target.value),required:!0,placeholder:e("settings.confirmPassword"),style:he,onFocus:J=>J.target.style.borderColor="#111827",onBlur:J=>J.target.style.borderColor="#e5e7eb"})]})]})]}),a==="login"&&me&&!K&&i.jsxs("div",{children:[i.jsx("label",{style:{display:"block",fontSize:12.5,fontWeight:600,color:"#374151",marginBottom:6},children:e("login.mfaCodeLabel")}),i.jsxs("div",{style:{position:"relative"},children:[i.jsx(Jf,{size:15,style:{position:"absolute",left:13,top:"50%",transform:"translateY(-50%)",color:"#9ca3af",pointerEvents:"none"}}),i.jsx("input",{type:"text",inputMode:"text",autoComplete:"one-time-code",value:T,onChange:J=>ce(J.target.value.toUpperCase().slice(0,24)),placeholder:"000000 or XXXX-XXXX",required:!0,style:he,onFocus:J=>J.target.style.borderColor="#111827",onBlur:J=>J.target.style.borderColor="#e5e7eb"})]}),i.jsx("p",{style:{fontSize:12,color:"#9ca3af",marginTop:8},children:e("login.mfaHint")}),i.jsx("button",{type:"button",onClick:()=>{O(!1),U(""),ce(""),x("")},style:{marginTop:8,background:"none",border:"none",color:"#6b7280",fontSize:13,cursor:"pointer",padding:0,fontFamily:"inherit"},children:e("login.mfaBack")})]}),a==="register"&&!K&&i.jsxs("div",{children:[i.jsx("label",{style:{display:"block",fontSize:12.5,fontWeight:600,color:"#374151",marginBottom:6},children:e("login.username")}),i.jsxs("div",{style:{position:"relative"},children:[i.jsx(Jy,{size:15,style:{position:"absolute",left:13,top:"50%",transform:"translateY(-50%)",color:"#9ca3af",pointerEvents:"none"}}),i.jsx("input",{type:"text",value:r,onChange:J=>o(J.target.value),required:!0,placeholder:"admin",style:he,onFocus:J=>J.target.style.borderColor="#111827",onBlur:J=>J.target.style.borderColor="#e5e7eb"})]})]}),!(a==="login"&&me)&&!K&&i.jsxs("div",{children:[i.jsx("label",{style:{display:"block",fontSize:12.5,fontWeight:600,color:"#374151",marginBottom:6},children:e("common.email")}),i.jsxs("div",{style:{position:"relative"},children:[i.jsx(cR,{size:15,style:{position:"absolute",left:13,top:"50%",transform:"translateY(-50%)",color:"#9ca3af",pointerEvents:"none"}}),i.jsx("input",{type:"email",value:s,onChange:J=>d(J.target.value),required:!0,placeholder:e("login.emailPlaceholder"),style:he,onFocus:J=>J.target.style.borderColor="#111827",onBlur:J=>J.target.style.borderColor="#e5e7eb"})]})]}),!(a==="login"&&me)&&!K&&i.jsxs("div",{children:[i.jsx("label",{style:{display:"block",fontSize:12.5,fontWeight:600,color:"#374151",marginBottom:6},children:e("common.password")}),i.jsxs("div",{style:{position:"relative"},children:[i.jsx(zo,{size:15,style:{position:"absolute",left:13,top:"50%",transform:"translateY(-50%)",color:"#9ca3af",pointerEvents:"none"}}),i.jsx("input",{type:m?"text":"password",value:c,onChange:J=>p(J.target.value),required:!0,placeholder:"••••••••",style:{...he,paddingRight:44},onFocus:J=>J.target.style.borderColor="#111827",onBlur:J=>J.target.style.borderColor="#e5e7eb"}),i.jsx("button",{type:"button",onClick:()=>g(J=>!J),style:{position:"absolute",right:12,top:"50%",transform:"translateY(-50%)",background:"none",border:"none",cursor:"pointer",padding:2,display:"flex",color:"#9ca3af"},children:m?i.jsx(Vp,{size:16}):i.jsx(Dc,{size:16})})]})]}),i.jsx("button",{type:"submit",disabled:f,style:{marginTop:4,width:"100%",padding:"12px",background:"#111827",color:"white",border:"none",borderRadius:12,fontSize:14,fontWeight:700,cursor:f?"default":"pointer",fontFamily:"inherit",display:"flex",alignItems:"center",justifyContent:"center",gap:8,opacity:f?.7:1,transition:"opacity 0.15s"},onMouseEnter:J=>{f||(J.currentTarget.style.background="#1f2937")},onMouseLeave:J=>J.currentTarget.style.background="#111827",children:f?i.jsxs(i.Fragment,{children:[i.jsx("div",{style:{width:15,height:15,border:"2px solid rgba(255,255,255,0.3)",borderTopColor:"white",borderRadius:"50%",animation:"spin 0.7s linear infinite"}}),e(K?"settings.updatePassword":a==="register"?"login.creating":a==="login"&&me?"login.mfaVerify":"login.signingIn")]}):i.jsxs(i.Fragment,{children:[i.jsx($i,{size:16}),e(K?"settings.updatePassword":a==="register"?"login.createAccount":a==="login"&&me?"login.mfaVerify":"login.signIn")]})})]}),Y&&(S==null?void 0:S.has_users)&&!(S!=null&&S.demo_mode)&&!K&&i.jsxs("p",{style:{textAlign:"center",marginTop:16,fontSize:13,color:"#9ca3af"},children:[a==="login"?e("login.noAccount")+" ":e("login.hasAccount")+" ",i.jsx("button",{onClick:()=>{n(J=>J==="login"?"register":"login"),x(""),O(!1),U(""),ce("")},style:{background:"none",border:"none",color:"#111827",fontWeight:600,cursor:"pointer",fontFamily:"inherit",fontSize:13},children:e(a==="login"?"login.register":"login.signIn")})]})]})}),(S==null?void 0:S.oidc_configured)&&!X&&i.jsxs(i.Fragment,{children:[i.jsxs("div",{style:{display:"flex",alignItems:"center",gap:12,marginTop:16},children:[i.jsx("div",{style:{flex:1,height:1,background:"#e5e7eb"}}),i.jsx("span",{style:{fontSize:12,color:"#9ca3af"},children:e("common.or")}),i.jsx("div",{style:{flex:1,height:1,background:"#e5e7eb"}})]}),i.jsxs("a",{href:`/api/auth/oidc/login${w?"?invite="+encodeURIComponent(w):""}`,style:{marginTop:12,width:"100%",padding:"12px",background:"white",color:"#374151",border:"1px solid #d1d5db",borderRadius:12,fontSize:14,fontWeight:600,cursor:"pointer",fontFamily:"inherit",display:"flex",alignItems:"center",justifyContent:"center",gap:8,textDecoration:"none",transition:"all 0.15s",boxSizing:"border-box"},onMouseEnter:J=>{J.currentTarget.style.background="#f9fafb",J.currentTarget.style.borderColor="#9ca3af"},onMouseLeave:J=>{J.currentTarget.style.background="white",J.currentTarget.style.borderColor="#d1d5db"},children:[i.jsx(mr,{size:16}),e("login.oidcSignIn",{name:S.oidc_display_name})]})]}),(S==null?void 0:S.demo_mode)&&i.jsxs("button",{onClick:q,disabled:f,style:{marginTop:16,width:"100%",padding:"14px",background:"linear-gradient(135deg, #f59e0b, #d97706)",color:"#451a03",border:"none",borderRadius:14,fontSize:15,fontWeight:700,cursor:f?"default":"pointer",fontFamily:"inherit",display:"flex",alignItems:"center",justifyContent:"center",gap:10,opacity:f?.7:1,transition:"all 0.2s",boxShadow:"0 2px 12px rgba(245, 158, 11, 0.3)"},onMouseEnter:J=>{f||(J.currentTarget.style.transform="translateY(-1px)"),J.currentTarget.style.boxShadow="0 4px 16px rgba(245, 158, 11, 0.4)"},onMouseLeave:J=>{J.currentTarget.style.transform="translateY(0)",J.currentTarget.style.boxShadow="0 2px 12px rgba(245, 158, 11, 0.3)"},children:[i.jsx($i,{size:18}),e("login.demoHint")]})]})}),i.jsx("style",{children:` + `})]}):i.jsxs("div",{style:{minHeight:"100vh",display:"flex",fontFamily:"-apple-system, BlinkMacSystemFont, 'SF Pro Text', system-ui, sans-serif",position:"relative"},children:[i.jsxs("button",{onClick:()=>{const J=$p.map(({value:fe})=>fe),xe=J.findIndex(fe=>fe===t),ue=J[(xe+1)%J.length];ae(ue)},style:{position:"absolute",top:16,right:16,zIndex:10,display:"flex",alignItems:"center",gap:6,padding:"6px 12px",borderRadius:99,background:"rgba(0,0,0,0.06)",border:"none",fontSize:13,fontWeight:500,color:"#374151",cursor:"pointer",fontFamily:"inherit",transition:"background 0.15s"},onMouseEnter:J=>J.currentTarget.style.background="rgba(0,0,0,0.1)",onMouseLeave:J=>J.currentTarget.style.background="rgba(0,0,0,0.06)",children:[i.jsx(Br,{size:14}),t.toUpperCase()]}),i.jsxs("div",{style:{display:"none",width:"55%",background:"linear-gradient(135deg, #0f172a 0%, #1e293b 50%, #0f172a 100%)",flexDirection:"column",justifyContent:"center",alignItems:"center",padding:"60px 48px",position:"relative",overflow:"hidden"},className:"lg-panel",children:[i.jsx("style",{children:"@media(min-width:1024px){.lg-panel{display:flex!important}}"}),i.jsx("div",{style:{position:"absolute",inset:0,overflow:"hidden"},children:Array.from({length:40},(J,xe)=>i.jsx("div",{className:"login-star",style:{position:"absolute",width:Math.random()>.7?2:1,height:Math.random()>.7?2:1,borderRadius:"50%",background:"white",opacity:.15+Math.random()*.25,top:`${Math.random()*70}%`,left:`${Math.random()*100}%`,animationDelay:`${Math.random()*4}s`}},xe))}),i.jsx("div",{className:"login-orb1",style:{position:"absolute",width:500,height:500,borderRadius:"50%",background:"radial-gradient(circle, rgba(99,102,241,0.1) 0%, transparent 70%)",filter:"blur(80px)"}}),i.jsx("div",{className:"login-orb2",style:{position:"absolute",width:350,height:350,borderRadius:"50%",background:"radial-gradient(circle, rgba(14,165,233,0.08) 0%, transparent 70%)",filter:"blur(60px)"}}),i.jsxs("div",{style:{position:"absolute",inset:0,overflow:"hidden",pointerEvents:"none"},children:[i.jsx("svg",{className:"login-plane1",viewBox:"0 0 480 120",style:{position:"absolute",width:48,opacity:.12},children:i.jsxs("g",{fill:"white",transform:"translate(240,60) rotate(-12)",children:[i.jsx("ellipse",{cx:"0",cy:"0",rx:"120",ry:"12"}),i.jsx("path",{d:"M-20,-10 L-60,-55 L-40,-55 L0,-15 Z"}),i.jsx("path",{d:"M-20,10 L-60,55 L-40,55 L0,15 Z"}),i.jsx("path",{d:"M-100,-5 L-120,-30 L-108,-30 L-90,-8 Z"}),i.jsx("path",{d:"M-100,5 L-120,30 L-108,30 L-90,8 Z"}),i.jsx("ellipse",{cx:"60",cy:"0",rx:"18",ry:"8"})]})}),i.jsx("svg",{className:"login-plane2",viewBox:"0 0 480 120",style:{position:"absolute",width:24,opacity:.08},children:i.jsxs("g",{fill:"white",transform:"translate(240,60) rotate(-12)",children:[i.jsx("ellipse",{cx:"0",cy:"0",rx:"120",ry:"12"}),i.jsx("path",{d:"M-20,-10 L-60,-55 L-40,-55 L0,-15 Z"}),i.jsx("path",{d:"M-20,10 L-60,55 L-40,55 L0,15 Z"}),i.jsx("ellipse",{cx:"60",cy:"0",rx:"18",ry:"8"})]})}),i.jsx("svg",{className:"login-plane3",viewBox:"0 0 480 120",style:{position:"absolute",width:32,opacity:.06},children:i.jsxs("g",{fill:"white",transform:"translate(240,60) rotate(-5)",children:[i.jsx("ellipse",{cx:"0",cy:"0",rx:"120",ry:"12"}),i.jsx("path",{d:"M-20,-10 L-60,-55 L-40,-55 L0,-15 Z"}),i.jsx("path",{d:"M-20,10 L-60,55 L-40,55 L0,15 Z"}),i.jsx("path",{d:"M-100,-5 L-120,-30 L-108,-30 L-90,-8 Z"}),i.jsx("path",{d:"M-100,5 L-120,30 L-108,30 L-90,8 Z"}),i.jsx("ellipse",{cx:"60",cy:"0",rx:"18",ry:"8"})]})}),i.jsx("svg",{className:"login-plane4",viewBox:"0 0 480 120",style:{position:"absolute",width:16,opacity:.07},children:i.jsxs("g",{fill:"white",transform:"translate(240,60) rotate(-10)",children:[i.jsx("ellipse",{cx:"0",cy:"0",rx:"120",ry:"12"}),i.jsx("path",{d:"M-20,-10 L-60,-55 L-40,-55 L0,-15 Z"}),i.jsx("path",{d:"M-20,10 L-60,55 L-40,55 L0,15 Z"}),i.jsx("ellipse",{cx:"60",cy:"0",rx:"18",ry:"8"})]})}),i.jsx("svg",{className:"login-plane5",viewBox:"0 0 480 120",style:{position:"absolute",width:28,opacity:.05},children:i.jsxs("g",{fill:"white",transform:"translate(240,60) rotate(8) scale(-1,1)",children:[i.jsx("ellipse",{cx:"0",cy:"0",rx:"120",ry:"12"}),i.jsx("path",{d:"M-20,-10 L-60,-55 L-40,-55 L0,-15 Z"}),i.jsx("path",{d:"M-20,10 L-60,55 L-40,55 L0,15 Z"}),i.jsx("path",{d:"M-100,-5 L-120,-30 L-108,-30 L-90,-8 Z"}),i.jsx("path",{d:"M-100,5 L-120,30 L-108,30 L-90,8 Z"}),i.jsx("ellipse",{cx:"60",cy:"0",rx:"18",ry:"8"})]})}),i.jsx("svg",{className:"login-plane6",viewBox:"0 0 480 120",style:{position:"absolute",width:12,opacity:.04},children:i.jsxs("g",{fill:"white",transform:"translate(240,60) rotate(-15)",children:[i.jsx("ellipse",{cx:"0",cy:"0",rx:"120",ry:"12"}),i.jsx("path",{d:"M-20,-10 L-60,-55 L-40,-55 L0,-15 Z"}),i.jsx("path",{d:"M-20,10 L-60,55 L-40,55 L0,15 Z"}),i.jsx("ellipse",{cx:"60",cy:"0",rx:"18",ry:"8"})]})})]}),i.jsxs("div",{style:{position:"relative",zIndex:1,maxWidth:560,textAlign:"center"},children:[i.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",marginBottom:48},children:i.jsx("img",{src:"/logo-light.svg",alt:"TREK",style:{height:64}})}),i.jsx("h2",{style:{margin:"0 0 12px",fontSize:36,fontWeight:700,color:"white",lineHeight:1.15,letterSpacing:"-0.02em",fontFamily:"'MuseoModerno', sans-serif",textTransform:"lowercase"},children:e("login.tagline")}),i.jsx("p",{style:{margin:"0 0 44px",fontSize:15,color:"rgba(255,255,255,0.5)",lineHeight:1.7},children:e("login.description")}),i.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(4, 1fr)",gap:8},children:[{Icon:As,label:e("login.features.maps"),desc:e("login.features.mapsDesc")},{Icon:qj,label:e("login.features.realtime"),desc:e("login.features.realtimeDesc")},{Icon:Vl,label:e("login.features.budget"),desc:e("login.features.budgetDesc")},{Icon:qi,label:e("login.features.collab"),desc:e("login.features.collabDesc")},{Icon:Aj,label:e("login.features.packing"),desc:e("login.features.packingDesc")},{Icon:Pj,label:e("login.features.bookings"),desc:e("login.features.bookingsDesc")},{Icon:Xf,label:e("login.features.files"),desc:e("login.features.filesDesc")},{Icon:CR,label:e("login.features.routes"),desc:e("login.features.routesDesc")}].map(({Icon:J,label:xe,desc:ue})=>i.jsxs("div",{style:{background:"rgba(255,255,255,0.04)",borderRadius:14,padding:"14px 12px",border:"1px solid rgba(255,255,255,0.06)",textAlign:"left",transition:"all 0.2s"},onMouseEnter:fe=>{fe.currentTarget.style.background="rgba(255,255,255,0.08)",fe.currentTarget.style.borderColor="rgba(255,255,255,0.12)"},onMouseLeave:fe=>{fe.currentTarget.style.background="rgba(255,255,255,0.04)",fe.currentTarget.style.borderColor="rgba(255,255,255,0.06)"},children:[i.jsx(J,{size:17,style:{color:"rgba(255,255,255,0.7)",marginBottom:7}}),i.jsx("div",{style:{fontSize:12.5,color:"white",fontWeight:600,marginBottom:2},children:xe}),i.jsx("div",{style:{fontSize:11,color:"rgba(255,255,255,0.35)",lineHeight:1.4},children:ue})]},xe))}),i.jsx("p",{style:{marginTop:36,fontSize:11.5,color:"rgba(255,255,255,0.25)",letterSpacing:"0.03em"},children:e("login.selfHosted")})]})]}),i.jsx("div",{style:{flex:1,display:"flex",alignItems:"center",justifyContent:"center",padding:"32px 24px",background:"#f9fafb"},children:i.jsxs("div",{style:{width:"100%",maxWidth:400},children:[i.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",gap:6,marginBottom:36},className:"mobile-logo",children:[i.jsx("style",{children:"@media(min-width:1024px){.mobile-logo{display:none!important}}"}),i.jsx("img",{src:"/logo-dark.svg",alt:"TREK",style:{height:48}}),i.jsx("p",{style:{margin:0,fontSize:16,color:"#9ca3af",fontFamily:"'MuseoModerno', sans-serif",textTransform:"lowercase",whiteSpace:"nowrap"},children:e("login.tagline")})]}),i.jsx("div",{style:{background:"white",borderRadius:20,border:"1px solid #e5e7eb",padding:"36px 32px",boxShadow:"0 2px 16px rgba(0,0,0,0.06)"},children:X?i.jsxs(i.Fragment,{children:[i.jsx("h2",{style:{margin:"0 0 4px",fontSize:22,fontWeight:800,color:"#111827"},children:e("login.title")}),i.jsx("p",{style:{margin:"0 0 24px",fontSize:13.5,color:"#9ca3af"},children:e("login.oidcOnly")}),k&&i.jsx("div",{style:{padding:"10px 14px",background:"#fef2f2",border:"1px solid #fecaca",borderRadius:10,fontSize:13,color:"#dc2626",marginBottom:16},children:k}),i.jsxs("a",{href:`/api/auth/oidc/login${w?"?invite="+encodeURIComponent(w):""}`,style:{width:"100%",padding:"12px",background:"#111827",color:"white",border:"none",borderRadius:12,fontSize:14,fontWeight:700,cursor:"pointer",fontFamily:"inherit",display:"flex",alignItems:"center",justifyContent:"center",gap:8,textDecoration:"none",transition:"all 0.15s",boxSizing:"border-box"},onMouseEnter:J=>{J.currentTarget.style.background="#1f2937"},onMouseLeave:J=>{J.currentTarget.style.background="#111827"},children:[i.jsx(mr,{size:16}),e("login.oidcSignIn",{name:(S==null?void 0:S.oidc_display_name)||"SSO"})]})]}):i.jsxs(i.Fragment,{children:[i.jsx("h2",{style:{margin:"0 0 4px",fontSize:22,fontWeight:800,color:"#111827"},children:q?e("login.setNewPassword"):a==="login"&&me?e("login.mfaTitle"):a==="register"?S!=null&&S.has_users?e("login.createAccount"):e("login.createAdmin"):e("login.title")}),i.jsx("p",{style:{margin:"0 0 28px",fontSize:13.5,color:"#9ca3af"},children:q?e("login.setNewPasswordHint"):a==="login"&&me?e("login.mfaSubtitle"):a==="register"?S!=null&&S.has_users?e("login.createAccountHint"):e("login.createAdminHint"):e("login.subtitle")}),i.jsxs("form",{onSubmit:oe,style:{display:"flex",flexDirection:"column",gap:16},children:[k&&i.jsx("div",{style:{padding:"10px 14px",background:"#fef2f2",border:"1px solid #fecaca",borderRadius:10,fontSize:13,color:"#dc2626"},children:k}),q&&i.jsxs(i.Fragment,{children:[i.jsx("div",{style:{padding:"10px 14px",background:"#fefce8",border:"1px solid #fde68a",borderRadius:10,fontSize:13,color:"#92400e"},children:e("settings.mustChangePassword")}),i.jsxs("div",{children:[i.jsx("label",{style:{display:"block",fontSize:12.5,fontWeight:600,color:"#374151",marginBottom:6},children:e("settings.newPassword")}),i.jsxs("div",{style:{position:"relative"},children:[i.jsx(zo,{size:15,style:{position:"absolute",left:13,top:"50%",transform:"translateY(-50%)",color:"#9ca3af",pointerEvents:"none"}}),i.jsx("input",{type:"password",value:pe,onChange:J=>H(J.target.value),required:!0,placeholder:e("settings.newPassword"),style:he,onFocus:J=>J.target.style.borderColor="#111827",onBlur:J=>J.target.style.borderColor="#e5e7eb"})]})]}),i.jsxs("div",{children:[i.jsx("label",{style:{display:"block",fontSize:12.5,fontWeight:600,color:"#374151",marginBottom:6},children:e("settings.confirmPassword")}),i.jsxs("div",{style:{position:"relative"},children:[i.jsx(zo,{size:15,style:{position:"absolute",left:13,top:"50%",transform:"translateY(-50%)",color:"#9ca3af",pointerEvents:"none"}}),i.jsx("input",{type:"password",value:ne,onChange:J=>ge(J.target.value),required:!0,placeholder:e("settings.confirmPassword"),style:he,onFocus:J=>J.target.style.borderColor="#111827",onBlur:J=>J.target.style.borderColor="#e5e7eb"})]})]})]}),a==="login"&&me&&!q&&i.jsxs("div",{children:[i.jsx("label",{style:{display:"block",fontSize:12.5,fontWeight:600,color:"#374151",marginBottom:6},children:e("login.mfaCodeLabel")}),i.jsxs("div",{style:{position:"relative"},children:[i.jsx(Jf,{size:15,style:{position:"absolute",left:13,top:"50%",transform:"translateY(-50%)",color:"#9ca3af",pointerEvents:"none"}}),i.jsx("input",{type:"text",inputMode:"text",autoComplete:"one-time-code",value:T,onChange:J=>ce(J.target.value.toUpperCase().slice(0,24)),placeholder:"000000 or XXXX-XXXX",required:!0,style:he,onFocus:J=>J.target.style.borderColor="#111827",onBlur:J=>J.target.style.borderColor="#e5e7eb"})]}),i.jsx("p",{style:{fontSize:12,color:"#9ca3af",marginTop:8},children:e("login.mfaHint")}),i.jsx("button",{type:"button",onClick:()=>{O(!1),U(""),ce(""),x("")},style:{marginTop:8,background:"none",border:"none",color:"#6b7280",fontSize:13,cursor:"pointer",padding:0,fontFamily:"inherit"},children:e("login.mfaBack")})]}),a==="register"&&!q&&i.jsxs("div",{children:[i.jsx("label",{style:{display:"block",fontSize:12.5,fontWeight:600,color:"#374151",marginBottom:6},children:e("login.username")}),i.jsxs("div",{style:{position:"relative"},children:[i.jsx(Qy,{size:15,style:{position:"absolute",left:13,top:"50%",transform:"translateY(-50%)",color:"#9ca3af",pointerEvents:"none"}}),i.jsx("input",{type:"text",value:r,onChange:J=>o(J.target.value),required:!0,placeholder:"admin",style:he,onFocus:J=>J.target.style.borderColor="#111827",onBlur:J=>J.target.style.borderColor="#e5e7eb"})]})]}),!(a==="login"&&me)&&!q&&i.jsxs("div",{children:[i.jsx("label",{style:{display:"block",fontSize:12.5,fontWeight:600,color:"#374151",marginBottom:6},children:e("common.email")}),i.jsxs("div",{style:{position:"relative"},children:[i.jsx(uR,{size:15,style:{position:"absolute",left:13,top:"50%",transform:"translateY(-50%)",color:"#9ca3af",pointerEvents:"none"}}),i.jsx("input",{type:"email",value:s,onChange:J=>d(J.target.value),required:!0,placeholder:e("login.emailPlaceholder"),style:he,onFocus:J=>J.target.style.borderColor="#111827",onBlur:J=>J.target.style.borderColor="#e5e7eb"})]})]}),!(a==="login"&&me)&&!q&&i.jsxs("div",{children:[i.jsx("label",{style:{display:"block",fontSize:12.5,fontWeight:600,color:"#374151",marginBottom:6},children:e("common.password")}),i.jsxs("div",{style:{position:"relative"},children:[i.jsx(zo,{size:15,style:{position:"absolute",left:13,top:"50%",transform:"translateY(-50%)",color:"#9ca3af",pointerEvents:"none"}}),i.jsx("input",{type:m?"text":"password",value:c,onChange:J=>p(J.target.value),required:!0,placeholder:"••••••••",style:{...he,paddingRight:44},onFocus:J=>J.target.style.borderColor="#111827",onBlur:J=>J.target.style.borderColor="#e5e7eb"}),i.jsx("button",{type:"button",onClick:()=>g(J=>!J),style:{position:"absolute",right:12,top:"50%",transform:"translateY(-50%)",background:"none",border:"none",cursor:"pointer",padding:2,display:"flex",color:"#9ca3af"},children:m?i.jsx(Vp,{size:16}):i.jsx(Dc,{size:16})})]})]}),i.jsx("button",{type:"submit",disabled:f,style:{marginTop:4,width:"100%",padding:"12px",background:"#111827",color:"white",border:"none",borderRadius:12,fontSize:14,fontWeight:700,cursor:f?"default":"pointer",fontFamily:"inherit",display:"flex",alignItems:"center",justifyContent:"center",gap:8,opacity:f?.7:1,transition:"opacity 0.15s"},onMouseEnter:J=>{f||(J.currentTarget.style.background="#1f2937")},onMouseLeave:J=>J.currentTarget.style.background="#111827",children:f?i.jsxs(i.Fragment,{children:[i.jsx("div",{style:{width:15,height:15,border:"2px solid rgba(255,255,255,0.3)",borderTopColor:"white",borderRadius:"50%",animation:"spin 0.7s linear infinite"}}),e(q?"settings.updatePassword":a==="register"?"login.creating":a==="login"&&me?"login.mfaVerify":"login.signingIn")]}):i.jsxs(i.Fragment,{children:[i.jsx($i,{size:16}),e(q?"settings.updatePassword":a==="register"?"login.createAccount":a==="login"&&me?"login.mfaVerify":"login.signIn")]})})]}),Y&&(S==null?void 0:S.has_users)&&!(S!=null&&S.demo_mode)&&!q&&i.jsxs("p",{style:{textAlign:"center",marginTop:16,fontSize:13,color:"#9ca3af"},children:[a==="login"?e("login.noAccount")+" ":e("login.hasAccount")+" ",i.jsx("button",{onClick:()=>{n(J=>J==="login"?"register":"login"),x(""),O(!1),U(""),ce("")},style:{background:"none",border:"none",color:"#111827",fontWeight:600,cursor:"pointer",fontFamily:"inherit",fontSize:13},children:e(a==="login"?"login.register":"login.signIn")})]})]})}),(S==null?void 0:S.oidc_configured)&&!X&&i.jsxs(i.Fragment,{children:[i.jsxs("div",{style:{display:"flex",alignItems:"center",gap:12,marginTop:16},children:[i.jsx("div",{style:{flex:1,height:1,background:"#e5e7eb"}}),i.jsx("span",{style:{fontSize:12,color:"#9ca3af"},children:e("common.or")}),i.jsx("div",{style:{flex:1,height:1,background:"#e5e7eb"}})]}),i.jsxs("a",{href:`/api/auth/oidc/login${w?"?invite="+encodeURIComponent(w):""}`,style:{marginTop:12,width:"100%",padding:"12px",background:"white",color:"#374151",border:"1px solid #d1d5db",borderRadius:12,fontSize:14,fontWeight:600,cursor:"pointer",fontFamily:"inherit",display:"flex",alignItems:"center",justifyContent:"center",gap:8,textDecoration:"none",transition:"all 0.15s",boxSizing:"border-box"},onMouseEnter:J=>{J.currentTarget.style.background="#f9fafb",J.currentTarget.style.borderColor="#9ca3af"},onMouseLeave:J=>{J.currentTarget.style.background="white",J.currentTarget.style.borderColor="#d1d5db"},children:[i.jsx(mr,{size:16}),e("login.oidcSignIn",{name:S.oidc_display_name})]})]}),(S==null?void 0:S.demo_mode)&&i.jsxs("button",{onClick:K,disabled:f,style:{marginTop:16,width:"100%",padding:"14px",background:"linear-gradient(135deg, #f59e0b, #d97706)",color:"#451a03",border:"none",borderRadius:14,fontSize:15,fontWeight:700,cursor:f?"default":"pointer",fontFamily:"inherit",display:"flex",alignItems:"center",justifyContent:"center",gap:10,opacity:f?.7:1,transition:"all 0.2s",boxShadow:"0 2px 12px rgba(245, 158, 11, 0.3)"},onMouseEnter:J=>{f||(J.currentTarget.style.transform="translateY(-1px)"),J.currentTarget.style.boxShadow="0 4px 16px rgba(245, 158, 11, 0.4)"},onMouseLeave:J=>{J.currentTarget.style.transform="translateY(0)",J.currentTarget.style.boxShadow="0 2px 12px rgba(245, 158, 11, 0.3)"},children:[i.jsx($i,{size:18}),e("login.demoHint")]})]})}),i.jsx("style",{children:` @keyframes spin { to { transform: rotate(360deg) } } @keyframes orbFloat1 { 0%, 100% { top: 15%; left: 30%; } @@ -1152,13 +1152,13 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál .login-plane5 { animation: plane5Move 22s ease-in-out infinite; animation-delay: 9s; } .login-plane6 { animation: plane6Move 32s ease-in-out infinite; animation-delay: 16s; } - `})]})}const UR="modulepreload",$R=function(e){return"/"+e},M0={},Qy=function(t,a,n){let r=Promise.resolve();if(a&&a.length>0){document.getElementsByTagName("link");const s=document.querySelector("meta[property=csp-nonce]"),d=(s==null?void 0:s.nonce)||(s==null?void 0:s.getAttribute("nonce"));r=Promise.allSettled(a.map(c=>{if(c=$R(c),c in M0)return;M0[c]=!0;const p=c.endsWith(".css"),m=p?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${m}`))return;const g=document.createElement("link");if(g.rel=p?"stylesheet":UR,p||(g.as="script"),g.crossOrigin="",g.href=c,d&&g.setAttribute("nonce",d),document.head.appendChild(g),p)return new Promise((f,v)=>{g.addEventListener("load",f),g.addEventListener("error",()=>v(new Error(`Unable to preload CSS for ${c}`)))})}))}function o(s){const d=new Event("vite:preloadError",{cancelable:!0});if(d.payload=s,window.dispatchEvent(d),!d.defaultPrevented)throw s}return r.then(s=>{for(const d of s||[])d.status==="rejected"&&o(d.reason);return t().catch(o)})},Ym=Wl((e,t)=>({addons:[],loaded:!1,loadAddons:async()=>{try{const a=await Ky.enabled();e({addons:a.addons||[],loaded:!0})}catch{e({loaded:!0})}},isEnabled:a=>t().addons.some(n=>n.id===a&&n.enabled)})),VR={CalendarDays:_s,Briefcase:Es,Globe:Br};function Hr({tripTitle:e,tripId:t,onBack:a,showBack:n,onShare:r}){var R;const{user:o,logout:s}=Na(),{settings:d,updateSetting:c}=na(),{addons:p,loadAddons:m}=Ym(),{t:g,locale:f}=lt(),v=Vi(),k=Kr(),[x,S]=y.useState(!1),[b,w]=y.useState(null),j=d.dark_mode,P=j===!0||j==="dark"||j==="auto"&&window.matchMedia("(prefers-color-scheme: dark)").matches,M=p.filter(A=>A.type==="global"&&A.enabled);y.useEffect(()=>{o&&m()},[o,k.pathname]),y.useEffect(()=>{Qy(async()=>{const{authApi:A}=await Promise.resolve().then(()=>wj);return{authApi:A}},void 0).then(({authApi:A})=>{var ae;(ae=A.getAppConfig)==null||ae.call(A).then(B=>w(B==null?void 0:B.version)).catch(()=>{})})},[]);const N=()=>{s(),v("/login")},D=()=>{c("dark_mode",P?"light":"dark").catch(()=>{})},F=A=>{const ae=`admin.addons.catalog.${A.id}.name`,B=g(ae);return B!==ae?B:A.name};return i.jsxs("nav",{style:{background:P?"rgba(9,9,11,0.95)":"rgba(255,255,255,0.95)",backdropFilter:"blur(20px)",WebkitBackdropFilter:"blur(20px)",borderBottom:`1px solid ${P?"rgba(255,255,255,0.07)":"rgba(0,0,0,0.07)"}`,boxShadow:P?"0 1px 12px rgba(0,0,0,0.2)":"0 1px 12px rgba(0,0,0,0.05)",touchAction:"manipulation",paddingTop:"env(safe-area-inset-top, 0px)",height:"var(--nav-h)"},className:"flex items-center px-4 gap-4 fixed top-0 left-0 right-0 z-[200]",children:[i.jsxs("div",{className:"flex items-center gap-3 min-w-0",children:[n&&i.jsxs("button",{onClick:a,className:"p-1.5 rounded-lg transition-colors flex items-center gap-1.5 text-sm flex-shrink-0",style:{color:"var(--text-muted)"},onMouseEnter:A=>A.currentTarget.style.background="var(--bg-hover)",onMouseLeave:A=>A.currentTarget.style.background="transparent",children:[i.jsx(zj,{className:"w-4 h-4"}),i.jsx("span",{className:"hidden sm:inline",children:g("common.back")})]}),i.jsxs(Vs,{to:"/dashboard",className:"flex items-center transition-colors flex-shrink-0",children:[i.jsx("img",{src:P?"/icons/icon-white.svg":"/icons/icon-dark.svg",alt:"TREK",className:"sm:hidden",style:{height:22,width:22}}),i.jsx("img",{src:P?"/logo-light.svg":"/logo-dark.svg",alt:"TREK",className:"hidden sm:block",style:{height:28}})]}),M.length>0&&!e&&i.jsxs(i.Fragment,{children:[i.jsx("span",{style:{color:"var(--text-faint)"},children:"|"}),i.jsxs(Vs,{to:"/dashboard",className:"flex items-center gap-1.5 px-2.5 py-1 rounded-lg text-xs font-medium transition-colors flex-shrink-0",style:{color:k.pathname==="/dashboard"?"var(--text-primary)":"var(--text-muted)",background:k.pathname==="/dashboard"?"var(--bg-hover)":"transparent"},onMouseEnter:A=>A.currentTarget.style.background="var(--bg-hover)",onMouseLeave:A=>{k.pathname!=="/dashboard"&&(A.currentTarget.style.background="transparent")},children:[i.jsx(Es,{className:"w-3.5 h-3.5"}),i.jsx("span",{className:"hidden md:inline",children:g("nav.myTrips")})]}),M.map(A=>{const ae=VR[A.icon]||_s,B=`/${A.id}`,q=k.pathname===B;return i.jsxs(Vs,{to:B,className:"flex items-center gap-1.5 px-2.5 py-1 rounded-lg text-xs font-medium transition-colors flex-shrink-0",style:{color:q?"var(--text-primary)":"var(--text-muted)",background:q?"var(--bg-hover)":"transparent"},onMouseEnter:le=>le.currentTarget.style.background="var(--bg-hover)",onMouseLeave:le=>{q||(le.currentTarget.style.background="transparent")},children:[i.jsx(ae,{className:"w-3.5 h-3.5"}),i.jsx("span",{className:"hidden md:inline",children:F(A)})]},A.id)})]}),e&&i.jsxs(i.Fragment,{children:[i.jsx("span",{className:"hidden sm:inline",style:{color:"var(--text-faint)"},children:"/"}),i.jsx("span",{className:"text-sm font-medium truncate max-w-48",style:{color:"var(--text-muted)"},children:e})]})]}),i.jsx("div",{className:"flex-1"}),r&&i.jsxs("button",{onClick:r,className:"flex items-center gap-1.5 py-1.5 px-3 rounded-lg border transition-colors text-sm font-medium flex-shrink-0",style:{borderColor:"var(--border-primary)",color:"var(--text-secondary)",background:"var(--bg-card)"},onMouseEnter:A=>A.currentTarget.style.background="var(--bg-hover)",onMouseLeave:A=>A.currentTarget.style.background="var(--bg-card)",children:[i.jsx(qi,{className:"w-4 h-4"}),i.jsx("span",{className:"hidden sm:inline",children:g("nav.share")})]}),i.jsx("button",{onClick:D,title:g(P?"nav.lightMode":"nav.darkMode"),className:"p-2 rounded-lg transition-colors flex-shrink-0",style:{color:"var(--text-muted)"},onMouseEnter:A=>A.currentTarget.style.background="var(--bg-hover)",onMouseLeave:A=>A.currentTarget.style.background="transparent",children:P?i.jsx($l,{className:"w-4 h-4"}):i.jsx(Hj,{className:"w-4 h-4"})}),o&&i.jsxs("div",{className:"relative",children:[i.jsxs("button",{onClick:()=>S(!x),className:"flex items-center gap-2 py-1.5 px-3 rounded-lg transition-colors",onMouseEnter:A=>A.currentTarget.style.background="var(--bg-hover)",onMouseLeave:A=>A.currentTarget.style.background="transparent",children:[o.avatar_url?i.jsx("img",{src:o.avatar_url,alt:"",style:{width:28,height:28,borderRadius:"50%",objectFit:"cover"}}):i.jsx("div",{className:"w-7 h-7 rounded-full flex items-center justify-center text-xs font-bold",style:{background:P?"#e2e8f0":"#111827",color:P?"#0f172a":"#ffffff"},children:(R=o.username)==null?void 0:R.charAt(0).toUpperCase()}),i.jsx("span",{className:"text-sm hidden sm:inline max-w-24 truncate",style:{color:"var(--text-secondary)"},children:o.username}),i.jsx(Ja,{className:"w-4 h-4",style:{color:"var(--text-faint)"}})]}),x&&Ut.createPortal(i.jsxs(i.Fragment,{children:[i.jsx("div",{style:{position:"fixed",inset:0,zIndex:9998},onClick:()=>S(!1)}),i.jsxs("div",{className:"w-52 rounded-xl shadow-xl border overflow-hidden",style:{position:"fixed",top:"var(--nav-h)",right:8,zIndex:9999,background:"var(--bg-card)",borderColor:"var(--border-primary)"},children:[i.jsxs("div",{className:"px-4 py-3 border-b",style:{borderColor:"var(--border-secondary)"},children:[i.jsx("p",{className:"text-sm font-medium",style:{color:"var(--text-primary)"},children:o.username}),i.jsx("p",{className:"text-xs truncate",style:{color:"var(--text-muted)"},children:o.email}),o.role==="admin"&&i.jsxs("span",{className:"inline-flex items-center gap-1 text-xs font-medium mt-1",style:{color:"var(--text-secondary)"},children:[i.jsx(mr,{className:"w-3 h-3"})," ",g("nav.administrator")]})]}),i.jsxs("div",{className:"py-1",children:[i.jsxs(Vs,{to:"/settings",onClick:()=>S(!1),className:"flex items-center gap-2 px-4 py-2 text-sm transition-colors",style:{color:"var(--text-secondary)"},onMouseEnter:A=>A.currentTarget.style.background="var(--bg-hover)",onMouseLeave:A=>A.currentTarget.style.background="transparent",children:[i.jsx(Zm,{className:"w-4 h-4"}),g("nav.settings")]}),o.role==="admin"&&i.jsxs(Vs,{to:"/admin",onClick:()=>S(!1),className:"flex items-center gap-2 px-4 py-2 text-sm transition-colors",style:{color:"var(--text-secondary)"},onMouseEnter:A=>A.currentTarget.style.background="var(--bg-hover)",onMouseLeave:A=>A.currentTarget.style.background="transparent",children:[i.jsx(mr,{className:"w-4 h-4"}),g("nav.admin")]})]}),i.jsxs("div",{className:"py-1 border-t",style:{borderColor:"var(--border-secondary)"},children:[i.jsxs("button",{onClick:N,className:"flex items-center gap-2 w-full px-4 py-2 text-sm text-red-500 hover:bg-red-500/10 transition-colors",children:[i.jsx(Kp,{className:"w-4 h-4"}),g("nav.logout")]}),b&&i.jsx("div",{className:"px-4 pt-2 pb-2.5 text-center",style:{marginTop:4,borderTop:"1px solid var(--border-secondary)"},children:i.jsxs("div",{style:{display:"inline-flex",alignItems:"center",gap:5,background:"var(--bg-tertiary)",borderRadius:99,padding:"4px 12px"},children:[i.jsx("img",{src:P?"/text-light.svg":"/text-dark.svg",alt:"TREK",style:{height:10,opacity:.5}}),i.jsxs("span",{style:{fontSize:10,fontWeight:600,color:"var(--text-faint)"},children:["v",b]})]})})]})]})]}),document.body)]})]})}const R0={de:{titleBefore:"Willkommen bei ",titleAfter:"",title:"Willkommen zur TREK Demo",description:"Du kannst Reisen ansehen, bearbeiten und eigene erstellen. Alle Aenderungen werden jede Stunde automatisch zurueckgesetzt.",resetIn:"Naechster Reset in",minutes:"Minuten",uploadNote:"Datei-Uploads (Fotos, Dokumente, Cover) sind in der Demo deaktiviert.",fullVersionTitle:"In der Vollversion zusaetzlich:",features:["Datei-Uploads (Fotos, Dokumente, Cover)","API-Schluessel (Google Maps, Wetter)","Benutzer- & Rechteverwaltung","Automatische Backups","Addon-Verwaltung (aktivieren/deaktivieren)","OIDC / SSO Single Sign-On"],addonsTitle:"Modulare Addons (in der Vollversion deaktivierbar)",addons:[["Vacay","Urlaubsplaner mit Kalender, Feiertagen & Fusion"],["Atlas","Weltkarte mit besuchten Laendern & Reisestatistiken"],["Packliste","Checklisten pro Reise"],["Budget","Kostenplanung mit Splitting"],["Dokumente","Dateien an Reisen anhaengen"],["Widgets","Waehrungsrechner & Zeitzonen"]],whatIs:"Was ist TREK?",whatIsDesc:"Ein selbst-gehosteter Reiseplaner mit Echtzeit-Kollaboration, interaktiver Karte, OIDC Login und Dark Mode.",selfHost:"Open Source — ",selfHostLink:"selbst hosten",close:"Verstanden"},en:{titleBefore:"Welcome to ",titleAfter:"",title:"Welcome to the TREK Demo",description:"You can view, edit and create trips. All changes are automatically reset every hour.",resetIn:"Next reset in",minutes:"minutes",uploadNote:"File uploads (photos, documents, covers) are disabled in demo mode.",fullVersionTitle:"Additionally in the full version:",features:["File uploads (photos, documents, covers)","API key management (Google Maps, Weather)","User & permission management","Automatic backups","Addon management (enable/disable)","OIDC / SSO single sign-on"],addonsTitle:"Modular Addons (can be deactivated in full version)",addons:[["Vacay","Vacation planner with calendar, holidays & user fusion"],["Atlas","World map with visited countries & travel stats"],["Packing","Checklists per trip"],["Budget","Expense tracking with splitting"],["Documents","Attach files to trips"],["Widgets","Currency converter & timezones"]],whatIs:"What is TREK?",whatIsDesc:"A self-hosted travel planner with real-time collaboration, interactive maps, OIDC login and dark mode.",selfHost:"Open source — ",selfHostLink:"self-host it",close:"Got it"},es:{titleBefore:"Bienvenido a ",titleAfter:"",title:"Bienvenido a la demo de TREK",description:"Puedes ver, editar y crear viajes. Todos los cambios se restablecen automáticamente cada hora.",resetIn:"Próximo reinicio en",minutes:"minutos",uploadNote:"Las subidas de archivos (fotos, documentos, portadas) están desactivadas en el modo demo.",fullVersionTitle:"Además, en la versión completa:",features:["Subida de archivos (fotos, documentos, portadas)","Gestión de claves API (Google Maps, tiempo)","Gestión de usuarios y permisos","Copias de seguridad automáticas","Gestión de addons (activar/desactivar)","Inicio de sesión único OIDC / SSO"],addonsTitle:"Complementos modulares (se pueden desactivar en la versión completa)",addons:[["Vacaciones","Planificador de vacaciones con calendario, festivos y fusión de usuarios"],["Atlas","Mapa del mundo con países visitados y estadísticas de viaje"],["Equipaje","Listas de comprobación para cada viaje"],["Presupuesto","Control de gastos con reparto"],["Documentos","Adjunta archivos a los viajes"],["Widgets","Conversor de divisas y zonas horarias"]],whatIs:"¿Qué es TREK?",whatIsDesc:"Un planificador de viajes autohospedado con colaboración en tiempo real, mapas interactivos, inicio de sesión OIDC y modo oscuro.",selfHost:"Código abierto — ",selfHostLink:"alójalo tú mismo",close:"Entendido"},ar:{titleBefore:"مرحبًا بك في ",titleAfter:"",title:"مرحبًا بك في النسخة التجريبية من TREK",description:"يمكنك عرض الرحلات وتعديلها وإنشاء رحلات جديدة. تتم إعادة ضبط جميع التغييرات تلقائيًا كل ساعة.",resetIn:"إعادة الضبط التالية خلال",minutes:"دقيقة",uploadNote:"رفع الملفات (الصور والمستندات وصور الغلاف) معطّل في وضع العرض التجريبي.",fullVersionTitle:"وفي النسخة الكاملة أيضًا:",features:["رفع الملفات (الصور والمستندات وصور الغلاف)","إدارة مفاتيح API (خرائط Google والطقس)","إدارة المستخدمين والصلاحيات","نسخ احتياطية تلقائية","إدارة الإضافات (تفعيل/تعطيل)","تسجيل دخول موحد OIDC / SSO"],addonsTitle:"إضافات مرنة (يمكن تعطيلها في النسخة الكاملة)",addons:[["Vacay","مخطط إجازات مع تقويم وعطل ودمج مستخدمين"],["Atlas","خريطة عالمية مع الدول التي تمت زيارتها وإحصاءات السفر"],["Packing","قوائم تجهيز لكل رحلة"],["Budget","تتبع المصروفات مع التقسيم"],["Documents","إرفاق الملفات بالرحلات"],["Widgets","محول عملات ومناطق زمنية"]],whatIs:"ما هو TREK؟",whatIsDesc:"مخطط رحلات مستضاف ذاتيًا مع تعاون لحظي وخرائط تفاعلية وتسجيل دخول OIDC ووضع داكن.",selfHost:"مفتوح المصدر — ",selfHostLink:"استضفه بنفسك",close:"فهمت"}},KR=[Eo,Lj,qi,YM,qm,mr],qR=[_s,Br,Oj,Vl,Da,Hm];function GR(){const[e,t]=y.useState(!1),[a,n]=y.useState(59-new Date().getMinutes()),{language:r}=lt(),o=R0[r]||R0.en;return y.useEffect(()=>{const s=setInterval(()=>n(59-new Date().getMinutes()),1e4);return()=>clearInterval(s)},[]),e?null:i.jsx("div",{style:{position:"fixed",inset:0,zIndex:9999,background:"rgba(0,0,0,0.6)",backdropFilter:"blur(8px)",display:"flex",alignItems:"center",justifyContent:"center",padding:16,overflow:"auto",fontFamily:"-apple-system, BlinkMacSystemFont, 'SF Pro Text', system-ui, sans-serif"},onClick:()=>t(!0),children:i.jsxs("div",{style:{background:"white",borderRadius:20,padding:"28px 24px 20px",maxWidth:480,width:"100%",boxShadow:"0 20px 60px rgba(0,0,0,0.3)",maxHeight:"90vh",overflow:"auto"},onClick:s=>s.stopPropagation(),children:[i.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10,marginBottom:14},children:[i.jsx("img",{src:"/icons/icon-dark.svg",alt:"",style:{width:36,height:36,borderRadius:10}}),i.jsxs("h2",{style:{margin:0,fontSize:17,fontWeight:700,color:"#111827",display:"flex",alignItems:"center",gap:5},children:[o.titleBefore,i.jsx("img",{src:"/text-dark.svg",alt:"TREK",style:{height:18}}),o.titleAfter]})]}),i.jsx("p",{style:{fontSize:13,color:"#6b7280",lineHeight:1.6,margin:"0 0 12px"},children:o.description}),i.jsxs("div",{style:{display:"flex",gap:8,marginBottom:16},children:[i.jsxs("div",{style:{flex:1,display:"flex",alignItems:"center",gap:6,background:"#f0f9ff",border:"1px solid #bae6fd",borderRadius:10,padding:"8px 10px"},children:[i.jsx(In,{size:13,style:{flexShrink:0,color:"#0284c7"}}),i.jsxs("span",{style:{fontSize:11,color:"#0369a1",fontWeight:600},children:[o.resetIn," ",a," ",o.minutes]})]}),i.jsxs("div",{style:{flex:1,display:"flex",alignItems:"center",gap:6,background:"#fffbeb",border:"1px solid #fde68a",borderRadius:10,padding:"8px 10px"},children:[i.jsx(Eo,{size:13,style:{flexShrink:0,color:"#b45309"}}),i.jsx("span",{style:{fontSize:11,color:"#b45309"},children:o.uploadNote})]})]}),i.jsxs("div",{style:{background:"#f8fafc",borderRadius:12,padding:"12px 14px",marginBottom:16,border:"1px solid #e2e8f0"},children:[i.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,marginBottom:6},children:[i.jsx(As,{size:14,style:{color:"#111827"}}),i.jsx("span",{style:{fontSize:12,fontWeight:700,color:"#111827",display:"flex",alignItems:"center",gap:4},children:o.whatIs})]}),i.jsx("p",{style:{fontSize:12,color:"#64748b",lineHeight:1.5,margin:0},children:o.whatIsDesc})]}),i.jsxs("p",{style:{fontSize:10,fontWeight:700,color:"#374151",margin:"0 0 8px",textTransform:"uppercase",letterSpacing:"0.08em",display:"flex",alignItems:"center",gap:6},children:[i.jsx(qm,{size:12}),o.addonsTitle]}),i.jsx("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:6,marginBottom:16},children:o.addons.map(([s,d],c)=>{const p=qR[c];return i.jsxs("div",{style:{background:"#f8fafc",borderRadius:10,padding:"8px 10px",border:"1px solid #f1f5f9"},children:[i.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,marginBottom:2},children:[i.jsx(p,{size:12,style:{flexShrink:0,color:"#111827"}}),i.jsx("span",{style:{fontSize:11,fontWeight:700,color:"#111827"},children:s})]}),i.jsx("p",{style:{fontSize:10,color:"#94a3b8",margin:0,lineHeight:1.3,paddingLeft:18},children:d})]},s)})}),i.jsxs("p",{style:{fontSize:10,fontWeight:700,color:"#374151",margin:"0 0 8px",textTransform:"uppercase",letterSpacing:"0.08em",display:"flex",alignItems:"center",gap:6},children:[i.jsx(mr,{size:12}),o.fullVersionTitle]}),i.jsx("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:6,marginBottom:16},children:o.features.map((s,d)=>{const c=KR[d];return i.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,fontSize:11,color:"#4b5563",padding:"4px 0"},children:[i.jsx(c,{size:13,style:{flexShrink:0,color:"#9ca3af"}}),i.jsx("span",{children:s})]},s)})}),i.jsxs("div",{style:{paddingTop:14,borderTop:"1px solid #e5e7eb",display:"flex",alignItems:"center",justifyContent:"space-between"},children:[i.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,fontSize:11,color:"#9ca3af"},children:[i.jsx(tR,{size:13}),i.jsx("span",{children:o.selfHost}),i.jsx("a",{href:"https://github.com/mauriceboe/TREK",target:"_blank",rel:"noopener noreferrer",style:{color:"#111827",fontWeight:600,textDecoration:"none"},children:o.selfHostLink})]}),i.jsx("button",{onClick:()=>t(!0),style:{background:"#111827",color:"white",border:"none",borderRadius:10,padding:"8px 20px",fontSize:12,fontWeight:600,cursor:"pointer",fontFamily:"inherit"},children:o.close})]})]})})}function Qt({value:e,onChange:t,options:a=[],placeholder:n="",searchable:r=!1,style:o={},size:s="md",disabled:d=!1}){const[c,p]=y.useState(!1),[m,g]=y.useState(""),f=y.useRef(null),v=y.useRef(null),k=y.useRef(null);y.useEffect(()=>{c&&r&&k.current&&k.current.focus()},[c,r]),y.useEffect(()=>{const w=j=>{var P,M;(P=f.current)!=null&&P.contains(j.target)||(M=v.current)!=null&&M.contains(j.target)||p(!1)};return c&&document.addEventListener("mousedown",w),()=>document.removeEventListener("mousedown",w)},[c]);const x=a.find(w=>w.value===e),S=r&&m?(()=>{const w=m.toLowerCase(),j=[];let P=null,M=!1;for(const N of a){if(N.isHeader){P=N,M=!1;continue}[N.label,N.searchLabel,N.groupLabel].filter(Boolean).join(" ").toLowerCase().includes(w)&&(P&&!M&&(j.push(P),M=!0),j.push(N))}return j})():a,b=s==="sm";return i.jsxs("div",{ref:f,style:{position:"relative",...o},children:[i.jsxs("button",{type:"button",disabled:d,onClick:()=>{d||(p(w=>!w),g(""))},style:{width:"100%",display:"flex",alignItems:"center",gap:8,padding:b?"8px 12px":"8px 14px",borderRadius:10,border:"1px solid var(--border-primary)",background:"var(--bg-input)",color:"var(--text-primary)",fontSize:13,fontWeight:500,fontFamily:"inherit",cursor:d?"default":"pointer",outline:"none",textAlign:"left",transition:"border-color 0.15s",overflow:"hidden",minWidth:0,opacity:d?.5:1},onMouseEnter:w=>{d||(w.currentTarget.style.borderColor="var(--text-faint)")},onMouseLeave:w=>{c||(w.currentTarget.style.borderColor="var(--border-primary)")},children:[(x==null?void 0:x.icon)&&i.jsx("span",{style:{display:"flex",flexShrink:0},children:x.icon}),i.jsx("span",{style:{flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",color:x?"var(--text-primary)":"var(--text-faint)"},children:x?x.label:n}),i.jsx(Ja,{size:b?12:14,style:{flexShrink:0,color:"var(--text-faint)",transition:"transform 0.2s",transform:c?"rotate(180deg)":"none"}})]}),c&&Ut.createPortal(i.jsxs("div",{ref:v,style:{position:"fixed",...(()=>{var M;const w=(M=f.current)==null?void 0:M.getBoundingClientRect();if(!w)return{top:0,left:0,width:200};const j=window.innerHeight-w.bottom;return j<220&&w.top>j?{bottom:window.innerHeight-w.top+4,left:w.left,width:w.width}:{top:w.bottom+4,left:w.left,width:w.width}})(),zIndex:99999,background:"var(--bg-card)",backdropFilter:"blur(24px) saturate(180%)",WebkitBackdropFilter:"blur(24px) saturate(180%)",border:"1px solid var(--border-primary)",borderRadius:10,boxShadow:"0 8px 32px rgba(0,0,0,0.12)",overflow:"hidden",animation:"selectIn 0.15s ease-out"},children:[r&&i.jsx("div",{style:{padding:"6px 6px 2px"},children:i.jsx("input",{ref:k,type:"text",value:m,onChange:w=>g(w.target.value),placeholder:"...",style:{width:"100%",border:"1px solid var(--border-secondary)",borderRadius:6,padding:"5px 8px",fontSize:12,outline:"none",fontFamily:"inherit",background:"var(--bg-secondary)",color:"var(--text-primary)",boxSizing:"border-box"}})}),i.jsx("div",{style:{maxHeight:220,overflowY:"auto",padding:"4px"},children:S.length===0?i.jsx("div",{style:{padding:"10px 12px",fontSize:12,color:"var(--text-faint)",textAlign:"center"},children:"—"}):S.map(w=>{if(w.isHeader)return i.jsx("div",{style:{padding:"5px 10px",fontSize:10,fontWeight:700,color:"var(--text-faint)",textTransform:"uppercase",letterSpacing:"0.03em",background:"var(--bg-tertiary)",borderRadius:4,margin:"2px 0"},children:w.label},w.value);const j=w.value===e;return i.jsxs("button",{type:"button",onClick:()=>{t(w.value),p(!1),g("")},style:{width:"100%",display:"flex",alignItems:"center",gap:8,padding:"7px 10px",borderRadius:6,border:"none",background:j?"var(--bg-hover)":"transparent",color:"var(--text-primary)",fontSize:13,fontFamily:"inherit",cursor:"pointer",textAlign:"left",transition:"background 0.1s"},onMouseEnter:P=>P.currentTarget.style.background="var(--bg-hover)",onMouseLeave:P=>P.currentTarget.style.background=j?"var(--bg-hover)":"transparent",children:[w.icon&&i.jsx("span",{style:{display:"flex",flexShrink:0},children:w.icon}),i.jsx("span",{style:{flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:w.label}),j&&i.jsx(Ba,{size:13,style:{flexShrink:0,color:"var(--text-muted)"}})]},w.value)})})]}),document.body),i.jsx("style",{children:` + `})]})}const $R="modulepreload",VR=function(e){return"/"+e},R0={},eb=function(t,a,n){let r=Promise.resolve();if(a&&a.length>0){document.getElementsByTagName("link");const s=document.querySelector("meta[property=csp-nonce]"),d=(s==null?void 0:s.nonce)||(s==null?void 0:s.getAttribute("nonce"));r=Promise.allSettled(a.map(c=>{if(c=VR(c),c in R0)return;R0[c]=!0;const p=c.endsWith(".css"),m=p?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${m}`))return;const g=document.createElement("link");if(g.rel=p?"stylesheet":$R,p||(g.as="script"),g.crossOrigin="",g.href=c,d&&g.setAttribute("nonce",d),document.head.appendChild(g),p)return new Promise((f,v)=>{g.addEventListener("load",f),g.addEventListener("error",()=>v(new Error(`Unable to preload CSS for ${c}`)))})}))}function o(s){const d=new Event("vite:preloadError",{cancelable:!0});if(d.payload=s,window.dispatchEvent(d),!d.defaultPrevented)throw s}return r.then(s=>{for(const d of s||[])d.status==="rejected"&&o(d.reason);return t().catch(o)})},Ym=Wl((e,t)=>({addons:[],loaded:!1,loadAddons:async()=>{try{const a=await qy.enabled();e({addons:a.addons||[],loaded:!0})}catch{e({loaded:!0})}},isEnabled:a=>t().addons.some(n=>n.id===a&&n.enabled)})),KR={CalendarDays:_s,Briefcase:Es,Globe:Br};function Hr({tripTitle:e,tripId:t,onBack:a,showBack:n,onShare:r}){var R;const{user:o,logout:s}=Na(),{settings:d,updateSetting:c}=na(),{addons:p,loadAddons:m}=Ym(),{t:g,locale:f}=lt(),v=Vi(),k=Kr(),[x,S]=y.useState(!1),[b,w]=y.useState(null),j=d.dark_mode,P=j===!0||j==="dark"||j==="auto"&&window.matchMedia("(prefers-color-scheme: dark)").matches,M=p.filter(E=>E.type==="global"&&E.enabled);y.useEffect(()=>{o&&m()},[o,k.pathname]),y.useEffect(()=>{eb(async()=>{const{authApi:E}=await Promise.resolve().then(()=>_j);return{authApi:E}},void 0).then(({authApi:E})=>{var ae;(ae=E.getAppConfig)==null||ae.call(E).then(B=>w(B==null?void 0:B.version)).catch(()=>{})})},[]);const N=()=>{s(),v("/login")},D=()=>{c("dark_mode",P?"light":"dark").catch(()=>{})},F=E=>{const ae=`admin.addons.catalog.${E.id}.name`,B=g(ae);return B!==ae?B:E.name};return i.jsxs("nav",{style:{background:P?"rgba(9,9,11,0.95)":"rgba(255,255,255,0.95)",backdropFilter:"blur(20px)",WebkitBackdropFilter:"blur(20px)",borderBottom:`1px solid ${P?"rgba(255,255,255,0.07)":"rgba(0,0,0,0.07)"}`,boxShadow:P?"0 1px 12px rgba(0,0,0,0.2)":"0 1px 12px rgba(0,0,0,0.05)",touchAction:"manipulation",paddingTop:"env(safe-area-inset-top, 0px)",height:"var(--nav-h)"},className:"flex items-center px-4 gap-4 fixed top-0 left-0 right-0 z-[200]",children:[i.jsxs("div",{className:"flex items-center gap-3 min-w-0",children:[n&&i.jsxs("button",{onClick:a,className:"p-1.5 rounded-lg transition-colors flex items-center gap-1.5 text-sm flex-shrink-0",style:{color:"var(--text-muted)"},onMouseEnter:E=>E.currentTarget.style.background="var(--bg-hover)",onMouseLeave:E=>E.currentTarget.style.background="transparent",children:[i.jsx(Tj,{className:"w-4 h-4"}),i.jsx("span",{className:"hidden sm:inline",children:g("common.back")})]}),i.jsxs(Vs,{to:"/dashboard",className:"flex items-center transition-colors flex-shrink-0",children:[i.jsx("img",{src:P?"/icons/icon-white.svg":"/icons/icon-dark.svg",alt:"TREK",className:"sm:hidden",style:{height:22,width:22}}),i.jsx("img",{src:P?"/logo-light.svg":"/logo-dark.svg",alt:"TREK",className:"hidden sm:block",style:{height:28}})]}),M.length>0&&!e&&i.jsxs(i.Fragment,{children:[i.jsx("span",{style:{color:"var(--text-faint)"},children:"|"}),i.jsxs(Vs,{to:"/dashboard",className:"flex items-center gap-1.5 px-2.5 py-1 rounded-lg text-xs font-medium transition-colors flex-shrink-0",style:{color:k.pathname==="/dashboard"?"var(--text-primary)":"var(--text-muted)",background:k.pathname==="/dashboard"?"var(--bg-hover)":"transparent"},onMouseEnter:E=>E.currentTarget.style.background="var(--bg-hover)",onMouseLeave:E=>{k.pathname!=="/dashboard"&&(E.currentTarget.style.background="transparent")},children:[i.jsx(Es,{className:"w-3.5 h-3.5"}),i.jsx("span",{className:"hidden md:inline",children:g("nav.myTrips")})]}),M.map(E=>{const ae=KR[E.icon]||_s,B=`/${E.id}`,K=k.pathname===B;return i.jsxs(Vs,{to:B,className:"flex items-center gap-1.5 px-2.5 py-1 rounded-lg text-xs font-medium transition-colors flex-shrink-0",style:{color:K?"var(--text-primary)":"var(--text-muted)",background:K?"var(--bg-hover)":"transparent"},onMouseEnter:le=>le.currentTarget.style.background="var(--bg-hover)",onMouseLeave:le=>{K||(le.currentTarget.style.background="transparent")},children:[i.jsx(ae,{className:"w-3.5 h-3.5"}),i.jsx("span",{className:"hidden md:inline",children:F(E)})]},E.id)})]}),e&&i.jsxs(i.Fragment,{children:[i.jsx("span",{className:"hidden sm:inline",style:{color:"var(--text-faint)"},children:"/"}),i.jsx("span",{className:"text-sm font-medium truncate max-w-48",style:{color:"var(--text-muted)"},children:e})]})]}),i.jsx("div",{className:"flex-1"}),r&&i.jsxs("button",{onClick:r,className:"flex items-center gap-1.5 py-1.5 px-3 rounded-lg border transition-colors text-sm font-medium flex-shrink-0",style:{borderColor:"var(--border-primary)",color:"var(--text-secondary)",background:"var(--bg-card)"},onMouseEnter:E=>E.currentTarget.style.background="var(--bg-hover)",onMouseLeave:E=>E.currentTarget.style.background="var(--bg-card)",children:[i.jsx(qi,{className:"w-4 h-4"}),i.jsx("span",{className:"hidden sm:inline",children:g("nav.share")})]}),i.jsx("button",{onClick:D,title:g(P?"nav.lightMode":"nav.darkMode"),className:"p-2 rounded-lg transition-colors flex-shrink-0",style:{color:"var(--text-muted)"},onMouseEnter:E=>E.currentTarget.style.background="var(--bg-hover)",onMouseLeave:E=>E.currentTarget.style.background="transparent",children:P?i.jsx($l,{className:"w-4 h-4"}):i.jsx(Wj,{className:"w-4 h-4"})}),o&&i.jsxs("div",{className:"relative",children:[i.jsxs("button",{onClick:()=>S(!x),className:"flex items-center gap-2 py-1.5 px-3 rounded-lg transition-colors",onMouseEnter:E=>E.currentTarget.style.background="var(--bg-hover)",onMouseLeave:E=>E.currentTarget.style.background="transparent",children:[o.avatar_url?i.jsx("img",{src:o.avatar_url,alt:"",style:{width:28,height:28,borderRadius:"50%",objectFit:"cover"}}):i.jsx("div",{className:"w-7 h-7 rounded-full flex items-center justify-center text-xs font-bold",style:{background:P?"#e2e8f0":"#111827",color:P?"#0f172a":"#ffffff"},children:(R=o.username)==null?void 0:R.charAt(0).toUpperCase()}),i.jsx("span",{className:"text-sm hidden sm:inline max-w-24 truncate",style:{color:"var(--text-secondary)"},children:o.username}),i.jsx(Ja,{className:"w-4 h-4",style:{color:"var(--text-faint)"}})]}),x&&Ut.createPortal(i.jsxs(i.Fragment,{children:[i.jsx("div",{style:{position:"fixed",inset:0,zIndex:9998},onClick:()=>S(!1)}),i.jsxs("div",{className:"w-52 rounded-xl shadow-xl border overflow-hidden",style:{position:"fixed",top:"var(--nav-h)",right:8,zIndex:9999,background:"var(--bg-card)",borderColor:"var(--border-primary)"},children:[i.jsxs("div",{className:"px-4 py-3 border-b",style:{borderColor:"var(--border-secondary)"},children:[i.jsx("p",{className:"text-sm font-medium",style:{color:"var(--text-primary)"},children:o.username}),i.jsx("p",{className:"text-xs truncate",style:{color:"var(--text-muted)"},children:o.email}),o.role==="admin"&&i.jsxs("span",{className:"inline-flex items-center gap-1 text-xs font-medium mt-1",style:{color:"var(--text-secondary)"},children:[i.jsx(mr,{className:"w-3 h-3"})," ",g("nav.administrator")]})]}),i.jsxs("div",{className:"py-1",children:[i.jsxs(Vs,{to:"/settings",onClick:()=>S(!1),className:"flex items-center gap-2 px-4 py-2 text-sm transition-colors",style:{color:"var(--text-secondary)"},onMouseEnter:E=>E.currentTarget.style.background="var(--bg-hover)",onMouseLeave:E=>E.currentTarget.style.background="transparent",children:[i.jsx(Zm,{className:"w-4 h-4"}),g("nav.settings")]}),o.role==="admin"&&i.jsxs(Vs,{to:"/admin",onClick:()=>S(!1),className:"flex items-center gap-2 px-4 py-2 text-sm transition-colors",style:{color:"var(--text-secondary)"},onMouseEnter:E=>E.currentTarget.style.background="var(--bg-hover)",onMouseLeave:E=>E.currentTarget.style.background="transparent",children:[i.jsx(mr,{className:"w-4 h-4"}),g("nav.admin")]})]}),i.jsxs("div",{className:"py-1 border-t",style:{borderColor:"var(--border-secondary)"},children:[i.jsxs("button",{onClick:N,className:"flex items-center gap-2 w-full px-4 py-2 text-sm text-red-500 hover:bg-red-500/10 transition-colors",children:[i.jsx(Kp,{className:"w-4 h-4"}),g("nav.logout")]}),b&&i.jsx("div",{className:"px-4 pt-2 pb-2.5 text-center",style:{marginTop:4,borderTop:"1px solid var(--border-secondary)"},children:i.jsxs("div",{style:{display:"inline-flex",alignItems:"center",gap:5,background:"var(--bg-tertiary)",borderRadius:99,padding:"4px 12px"},children:[i.jsx("img",{src:P?"/text-light.svg":"/text-dark.svg",alt:"TREK",style:{height:10,opacity:.5}}),i.jsxs("span",{style:{fontSize:10,fontWeight:600,color:"var(--text-faint)"},children:["v",b]})]})})]})]})]}),document.body)]})]})}const I0={de:{titleBefore:"Willkommen bei ",titleAfter:"",title:"Willkommen zur TREK Demo",description:"Du kannst Reisen ansehen, bearbeiten und eigene erstellen. Alle Aenderungen werden jede Stunde automatisch zurueckgesetzt.",resetIn:"Naechster Reset in",minutes:"Minuten",uploadNote:"Datei-Uploads (Fotos, Dokumente, Cover) sind in der Demo deaktiviert.",fullVersionTitle:"In der Vollversion zusaetzlich:",features:["Datei-Uploads (Fotos, Dokumente, Cover)","API-Schluessel (Google Maps, Wetter)","Benutzer- & Rechteverwaltung","Automatische Backups","Addon-Verwaltung (aktivieren/deaktivieren)","OIDC / SSO Single Sign-On"],addonsTitle:"Modulare Addons (in der Vollversion deaktivierbar)",addons:[["Vacay","Urlaubsplaner mit Kalender, Feiertagen & Fusion"],["Atlas","Weltkarte mit besuchten Laendern & Reisestatistiken"],["Packliste","Checklisten pro Reise"],["Budget","Kostenplanung mit Splitting"],["Dokumente","Dateien an Reisen anhaengen"],["Widgets","Waehrungsrechner & Zeitzonen"]],whatIs:"Was ist TREK?",whatIsDesc:"Ein selbst-gehosteter Reiseplaner mit Echtzeit-Kollaboration, interaktiver Karte, OIDC Login und Dark Mode.",selfHost:"Open Source — ",selfHostLink:"selbst hosten",close:"Verstanden"},en:{titleBefore:"Welcome to ",titleAfter:"",title:"Welcome to the TREK Demo",description:"You can view, edit and create trips. All changes are automatically reset every hour.",resetIn:"Next reset in",minutes:"minutes",uploadNote:"File uploads (photos, documents, covers) are disabled in demo mode.",fullVersionTitle:"Additionally in the full version:",features:["File uploads (photos, documents, covers)","API key management (Google Maps, Weather)","User & permission management","Automatic backups","Addon management (enable/disable)","OIDC / SSO single sign-on"],addonsTitle:"Modular Addons (can be deactivated in full version)",addons:[["Vacay","Vacation planner with calendar, holidays & user fusion"],["Atlas","World map with visited countries & travel stats"],["Packing","Checklists per trip"],["Budget","Expense tracking with splitting"],["Documents","Attach files to trips"],["Widgets","Currency converter & timezones"]],whatIs:"What is TREK?",whatIsDesc:"A self-hosted travel planner with real-time collaboration, interactive maps, OIDC login and dark mode.",selfHost:"Open source — ",selfHostLink:"self-host it",close:"Got it"},es:{titleBefore:"Bienvenido a ",titleAfter:"",title:"Bienvenido a la demo de TREK",description:"Puedes ver, editar y crear viajes. Todos los cambios se restablecen automáticamente cada hora.",resetIn:"Próximo reinicio en",minutes:"minutos",uploadNote:"Las subidas de archivos (fotos, documentos, portadas) están desactivadas en el modo demo.",fullVersionTitle:"Además, en la versión completa:",features:["Subida de archivos (fotos, documentos, portadas)","Gestión de claves API (Google Maps, tiempo)","Gestión de usuarios y permisos","Copias de seguridad automáticas","Gestión de addons (activar/desactivar)","Inicio de sesión único OIDC / SSO"],addonsTitle:"Complementos modulares (se pueden desactivar en la versión completa)",addons:[["Vacaciones","Planificador de vacaciones con calendario, festivos y fusión de usuarios"],["Atlas","Mapa del mundo con países visitados y estadísticas de viaje"],["Equipaje","Listas de comprobación para cada viaje"],["Presupuesto","Control de gastos con reparto"],["Documentos","Adjunta archivos a los viajes"],["Widgets","Conversor de divisas y zonas horarias"]],whatIs:"¿Qué es TREK?",whatIsDesc:"Un planificador de viajes autohospedado con colaboración en tiempo real, mapas interactivos, inicio de sesión OIDC y modo oscuro.",selfHost:"Código abierto — ",selfHostLink:"alójalo tú mismo",close:"Entendido"},ar:{titleBefore:"مرحبًا بك في ",titleAfter:"",title:"مرحبًا بك في النسخة التجريبية من TREK",description:"يمكنك عرض الرحلات وتعديلها وإنشاء رحلات جديدة. تتم إعادة ضبط جميع التغييرات تلقائيًا كل ساعة.",resetIn:"إعادة الضبط التالية خلال",minutes:"دقيقة",uploadNote:"رفع الملفات (الصور والمستندات وصور الغلاف) معطّل في وضع العرض التجريبي.",fullVersionTitle:"وفي النسخة الكاملة أيضًا:",features:["رفع الملفات (الصور والمستندات وصور الغلاف)","إدارة مفاتيح API (خرائط Google والطقس)","إدارة المستخدمين والصلاحيات","نسخ احتياطية تلقائية","إدارة الإضافات (تفعيل/تعطيل)","تسجيل دخول موحد OIDC / SSO"],addonsTitle:"إضافات مرنة (يمكن تعطيلها في النسخة الكاملة)",addons:[["Vacay","مخطط إجازات مع تقويم وعطل ودمج مستخدمين"],["Atlas","خريطة عالمية مع الدول التي تمت زيارتها وإحصاءات السفر"],["Packing","قوائم تجهيز لكل رحلة"],["Budget","تتبع المصروفات مع التقسيم"],["Documents","إرفاق الملفات بالرحلات"],["Widgets","محول عملات ومناطق زمنية"]],whatIs:"ما هو TREK؟",whatIsDesc:"مخطط رحلات مستضاف ذاتيًا مع تعاون لحظي وخرائط تفاعلية وتسجيل دخول OIDC ووضع داكن.",selfHost:"مفتوح المصدر — ",selfHostLink:"استضفه بنفسك",close:"فهمت"}},qR=[Eo,Fj,qi,XM,qm,mr],GR=[_s,Br,Bj,Vl,Da,Hm];function ZR(){const[e,t]=y.useState(!1),[a,n]=y.useState(59-new Date().getMinutes()),{language:r}=lt(),o=I0[r]||I0.en;return y.useEffect(()=>{const s=setInterval(()=>n(59-new Date().getMinutes()),1e4);return()=>clearInterval(s)},[]),e?null:i.jsx("div",{style:{position:"fixed",inset:0,zIndex:9999,background:"rgba(0,0,0,0.6)",backdropFilter:"blur(8px)",display:"flex",alignItems:"center",justifyContent:"center",padding:16,overflow:"auto",fontFamily:"-apple-system, BlinkMacSystemFont, 'SF Pro Text', system-ui, sans-serif"},onClick:()=>t(!0),children:i.jsxs("div",{style:{background:"white",borderRadius:20,padding:"28px 24px 20px",maxWidth:480,width:"100%",boxShadow:"0 20px 60px rgba(0,0,0,0.3)",maxHeight:"90vh",overflow:"auto"},onClick:s=>s.stopPropagation(),children:[i.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10,marginBottom:14},children:[i.jsx("img",{src:"/icons/icon-dark.svg",alt:"",style:{width:36,height:36,borderRadius:10}}),i.jsxs("h2",{style:{margin:0,fontSize:17,fontWeight:700,color:"#111827",display:"flex",alignItems:"center",gap:5},children:[o.titleBefore,i.jsx("img",{src:"/text-dark.svg",alt:"TREK",style:{height:18}}),o.titleAfter]})]}),i.jsx("p",{style:{fontSize:13,color:"#6b7280",lineHeight:1.6,margin:"0 0 12px"},children:o.description}),i.jsxs("div",{style:{display:"flex",gap:8,marginBottom:16},children:[i.jsxs("div",{style:{flex:1,display:"flex",alignItems:"center",gap:6,background:"#f0f9ff",border:"1px solid #bae6fd",borderRadius:10,padding:"8px 10px"},children:[i.jsx(In,{size:13,style:{flexShrink:0,color:"#0284c7"}}),i.jsxs("span",{style:{fontSize:11,color:"#0369a1",fontWeight:600},children:[o.resetIn," ",a," ",o.minutes]})]}),i.jsxs("div",{style:{flex:1,display:"flex",alignItems:"center",gap:6,background:"#fffbeb",border:"1px solid #fde68a",borderRadius:10,padding:"8px 10px"},children:[i.jsx(Eo,{size:13,style:{flexShrink:0,color:"#b45309"}}),i.jsx("span",{style:{fontSize:11,color:"#b45309"},children:o.uploadNote})]})]}),i.jsxs("div",{style:{background:"#f8fafc",borderRadius:12,padding:"12px 14px",marginBottom:16,border:"1px solid #e2e8f0"},children:[i.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,marginBottom:6},children:[i.jsx(As,{size:14,style:{color:"#111827"}}),i.jsx("span",{style:{fontSize:12,fontWeight:700,color:"#111827",display:"flex",alignItems:"center",gap:4},children:o.whatIs})]}),i.jsx("p",{style:{fontSize:12,color:"#64748b",lineHeight:1.5,margin:0},children:o.whatIsDesc})]}),i.jsxs("p",{style:{fontSize:10,fontWeight:700,color:"#374151",margin:"0 0 8px",textTransform:"uppercase",letterSpacing:"0.08em",display:"flex",alignItems:"center",gap:6},children:[i.jsx(qm,{size:12}),o.addonsTitle]}),i.jsx("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:6,marginBottom:16},children:o.addons.map(([s,d],c)=>{const p=GR[c];return i.jsxs("div",{style:{background:"#f8fafc",borderRadius:10,padding:"8px 10px",border:"1px solid #f1f5f9"},children:[i.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,marginBottom:2},children:[i.jsx(p,{size:12,style:{flexShrink:0,color:"#111827"}}),i.jsx("span",{style:{fontSize:11,fontWeight:700,color:"#111827"},children:s})]}),i.jsx("p",{style:{fontSize:10,color:"#94a3b8",margin:0,lineHeight:1.3,paddingLeft:18},children:d})]},s)})}),i.jsxs("p",{style:{fontSize:10,fontWeight:700,color:"#374151",margin:"0 0 8px",textTransform:"uppercase",letterSpacing:"0.08em",display:"flex",alignItems:"center",gap:6},children:[i.jsx(mr,{size:12}),o.fullVersionTitle]}),i.jsx("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:6,marginBottom:16},children:o.features.map((s,d)=>{const c=qR[d];return i.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,fontSize:11,color:"#4b5563",padding:"4px 0"},children:[i.jsx(c,{size:13,style:{flexShrink:0,color:"#9ca3af"}}),i.jsx("span",{children:s})]},s)})}),i.jsxs("div",{style:{paddingTop:14,borderTop:"1px solid #e5e7eb",display:"flex",alignItems:"center",justifyContent:"space-between"},children:[i.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,fontSize:11,color:"#9ca3af"},children:[i.jsx(aR,{size:13}),i.jsx("span",{children:o.selfHost}),i.jsx("a",{href:"https://github.com/mauriceboe/TREK",target:"_blank",rel:"noopener noreferrer",style:{color:"#111827",fontWeight:600,textDecoration:"none"},children:o.selfHostLink})]}),i.jsx("button",{onClick:()=>t(!0),style:{background:"#111827",color:"white",border:"none",borderRadius:10,padding:"8px 20px",fontSize:12,fontWeight:600,cursor:"pointer",fontFamily:"inherit"},children:o.close})]})]})})}function Qt({value:e,onChange:t,options:a=[],placeholder:n="",searchable:r=!1,style:o={},size:s="md",disabled:d=!1}){const[c,p]=y.useState(!1),[m,g]=y.useState(""),f=y.useRef(null),v=y.useRef(null),k=y.useRef(null);y.useEffect(()=>{c&&r&&k.current&&k.current.focus()},[c,r]),y.useEffect(()=>{const w=j=>{var P,M;(P=f.current)!=null&&P.contains(j.target)||(M=v.current)!=null&&M.contains(j.target)||p(!1)};return c&&document.addEventListener("mousedown",w),()=>document.removeEventListener("mousedown",w)},[c]);const x=a.find(w=>w.value===e),S=r&&m?(()=>{const w=m.toLowerCase(),j=[];let P=null,M=!1;for(const N of a){if(N.isHeader){P=N,M=!1;continue}[N.label,N.searchLabel,N.groupLabel].filter(Boolean).join(" ").toLowerCase().includes(w)&&(P&&!M&&(j.push(P),M=!0),j.push(N))}return j})():a,b=s==="sm";return i.jsxs("div",{ref:f,style:{position:"relative",...o},children:[i.jsxs("button",{type:"button",disabled:d,onClick:()=>{d||(p(w=>!w),g(""))},style:{width:"100%",display:"flex",alignItems:"center",gap:8,padding:b?"8px 12px":"8px 14px",borderRadius:10,border:"1px solid var(--border-primary)",background:"var(--bg-input)",color:"var(--text-primary)",fontSize:13,fontWeight:500,fontFamily:"inherit",cursor:d?"default":"pointer",outline:"none",textAlign:"left",transition:"border-color 0.15s",overflow:"hidden",minWidth:0,opacity:d?.5:1},onMouseEnter:w=>{d||(w.currentTarget.style.borderColor="var(--text-faint)")},onMouseLeave:w=>{c||(w.currentTarget.style.borderColor="var(--border-primary)")},children:[(x==null?void 0:x.icon)&&i.jsx("span",{style:{display:"flex",flexShrink:0},children:x.icon}),i.jsx("span",{style:{flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",color:x?"var(--text-primary)":"var(--text-faint)"},children:x?x.label:n}),i.jsx(Ja,{size:b?12:14,style:{flexShrink:0,color:"var(--text-faint)",transition:"transform 0.2s",transform:c?"rotate(180deg)":"none"}})]}),c&&Ut.createPortal(i.jsxs("div",{ref:v,style:{position:"fixed",...(()=>{var M;const w=(M=f.current)==null?void 0:M.getBoundingClientRect();if(!w)return{top:0,left:0,width:200};const j=window.innerHeight-w.bottom;return j<220&&w.top>j?{bottom:window.innerHeight-w.top+4,left:w.left,width:w.width}:{top:w.bottom+4,left:w.left,width:w.width}})(),zIndex:99999,background:"var(--bg-card)",backdropFilter:"blur(24px) saturate(180%)",WebkitBackdropFilter:"blur(24px) saturate(180%)",border:"1px solid var(--border-primary)",borderRadius:10,boxShadow:"0 8px 32px rgba(0,0,0,0.12)",overflow:"hidden",animation:"selectIn 0.15s ease-out"},children:[r&&i.jsx("div",{style:{padding:"6px 6px 2px"},children:i.jsx("input",{ref:k,type:"text",value:m,onChange:w=>g(w.target.value),placeholder:"...",style:{width:"100%",border:"1px solid var(--border-secondary)",borderRadius:6,padding:"5px 8px",fontSize:12,outline:"none",fontFamily:"inherit",background:"var(--bg-secondary)",color:"var(--text-primary)",boxSizing:"border-box"}})}),i.jsx("div",{style:{maxHeight:220,overflowY:"auto",padding:"4px"},children:S.length===0?i.jsx("div",{style:{padding:"10px 12px",fontSize:12,color:"var(--text-faint)",textAlign:"center"},children:"—"}):S.map(w=>{if(w.isHeader)return i.jsx("div",{style:{padding:"5px 10px",fontSize:10,fontWeight:700,color:"var(--text-faint)",textTransform:"uppercase",letterSpacing:"0.03em",background:"var(--bg-tertiary)",borderRadius:4,margin:"2px 0"},children:w.label},w.value);const j=w.value===e;return i.jsxs("button",{type:"button",onClick:()=>{t(w.value),p(!1),g("")},style:{width:"100%",display:"flex",alignItems:"center",gap:8,padding:"7px 10px",borderRadius:6,border:"none",background:j?"var(--bg-hover)":"transparent",color:"var(--text-primary)",fontSize:13,fontFamily:"inherit",cursor:"pointer",textAlign:"left",transition:"background 0.1s"},onMouseEnter:P=>P.currentTarget.style.background="var(--bg-hover)",onMouseLeave:P=>P.currentTarget.style.background=j?"var(--bg-hover)":"transparent",children:[w.icon&&i.jsx("span",{style:{display:"flex",flexShrink:0},children:w.icon}),i.jsx("span",{style:{flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:w.label}),j&&i.jsx(Ba,{size:13,style:{flexShrink:0,color:"var(--text-muted)"}})]},w.value)})})]}),document.body),i.jsx("style",{children:` @keyframes selectIn { from { opacity: 0; transform: translateY(-4px); } to { opacity: 1; transform: translateY(0); } } - `})]})}const ZR=["AED","AFN","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BYN","BZD","CAD","CDF","CHF","CLF","CLP","CNH","CNY","COP","CRC","CUP","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","FOK","GBP","GEL","GGP","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HRK","HTG","HUF","IDR","ILS","IMP","INR","IQD","ISK","JEP","JMD","JOD","JPY","KES","KGS","KHR","KID","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MMK","MNT","MOP","MRU","MUR","MVR","MWK","MXN","MYR","MZN","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RUB","RWF","SAR","SBD","SCR","SDG","SEK","SGD","SHP","SLE","SOS","SRD","SSP","STN","SYP","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TVD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VES","VND","VUV","WST","XAF","XCD","XDR","XOF","XPF","YER","ZAR","ZMW","ZWL"],I0=ZR.map(e=>({value:e,label:e}));function L0(){const{t:e,locale:t}=lt(),[a,n]=y.useState(()=>localStorage.getItem("currency_from")||"EUR"),[r,o]=y.useState(()=>localStorage.getItem("currency_to")||"USD"),[s,d]=y.useState("100"),[c,p]=y.useState(null),[m,g]=y.useState(!1),f=y.useCallback(async()=>{var b;if(a===r){p(1);return}g(!0);try{const j=await(await fetch(`https://api.exchangerate-api.com/v4/latest/${a}`)).json();p(((b=j.rates)==null?void 0:b[r])||null)}catch{p(null)}finally{g(!1)}},[a,r]);y.useEffect(()=>{f()},[f]),y.useEffect(()=>{localStorage.setItem("currency_from",a)},[a]),y.useEffect(()=>{localStorage.setItem("currency_to",r)},[r]);const v=()=>{n(r),o(a)},k=c&&s?(parseFloat(s)*c).toFixed(2):null,x=b=>!b||b==="—"?"—":parseFloat(b).toLocaleString(t,{minimumFractionDigits:2,maximumFractionDigits:2}),S=k;return i.jsxs("div",{className:"rounded-2xl border p-4",style:{background:"var(--bg-card)",borderColor:"var(--border-primary)"},children:[i.jsxs("div",{className:"flex items-center justify-between mb-3",children:[i.jsx("span",{className:"text-xs font-semibold uppercase tracking-wide",style:{color:"var(--text-faint)"},children:e("dashboard.currency")}),i.jsx("button",{onClick:f,className:"p-1 rounded-md transition-colors",style:{color:"var(--text-faint)"},children:i.jsx(js,{size:12,className:m?"animate-spin":""})})]}),i.jsx("div",{className:"rounded-xl px-4 py-3 mb-3",style:{background:"var(--bg-secondary)",border:"1px solid var(--border-primary)"},children:i.jsx("input",{type:"number",value:s,onChange:b=>d(b.target.value),className:"w-full text-2xl font-black tabular-nums outline-none [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none",style:{color:"var(--text-primary)",background:"transparent",border:"none"}})}),i.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[i.jsx("div",{className:"flex-1",style:{"--bg-input":"transparent","--border-primary":"transparent"},children:i.jsx(Qt,{value:a,onChange:n,options:I0,searchable:!0,size:"sm"})}),i.jsx("button",{onClick:v,className:"p-1.5 rounded-lg shrink-0 transition-colors",style:{color:"var(--text-muted)"},children:i.jsx(Hm,{size:13})}),i.jsx("div",{className:"flex-1",style:{"--bg-input":"transparent","--border-primary":"transparent"},children:i.jsx(Qt,{value:r,onChange:o,options:I0,searchable:!0,size:"sm"})})]}),i.jsxs("div",{className:"rounded-xl p-3",style:{background:"var(--bg-secondary)"},children:[i.jsxs("p",{className:"text-xl font-black tabular-nums",style:{color:"var(--text-primary)"},children:[x(S)," ",i.jsx("span",{className:"text-sm font-semibold",style:{color:"var(--text-muted)"},children:r})]}),c&&i.jsxs("p",{className:"text-[10px] mt-0.5",style:{color:"var(--text-faint)"},children:["1 ",a," = ",c.toFixed(4)," ",r]})]})]})}const YR=[{label:"New York",tz:"America/New_York"},{label:"London",tz:"Europe/London"},{label:"Berlin",tz:"Europe/Berlin"},{label:"Paris",tz:"Europe/Paris"},{label:"Dubai",tz:"Asia/Dubai"},{label:"Mumbai",tz:"Asia/Kolkata"},{label:"Bangkok",tz:"Asia/Bangkok"},{label:"Tokyo",tz:"Asia/Tokyo"},{label:"Sydney",tz:"Australia/Sydney"},{label:"Los Angeles",tz:"America/Los_Angeles"},{label:"Chicago",tz:"America/Chicago"},{label:"São Paulo",tz:"America/Sao_Paulo"},{label:"Istanbul",tz:"Europe/Istanbul"},{label:"Singapore",tz:"Asia/Singapore"},{label:"Hong Kong",tz:"Asia/Hong_Kong"},{label:"Seoul",tz:"Asia/Seoul"},{label:"Moscow",tz:"Europe/Moscow"},{label:"Cairo",tz:"Africa/Cairo"}];function F0(e,t,a){try{return new Date().toLocaleTimeString(t,{timeZone:e,hour:"2-digit",minute:"2-digit",hour12:a})}catch{return"—"}}function XR(e){try{const t=new Date,a=new Date(t.toLocaleString("en-US",{timeZone:Intl.DateTimeFormat().resolvedOptions().timeZone})),r=(new Date(t.toLocaleString("en-US",{timeZone:e}))-a)/36e5;return`${r>=0?"+":""}${r}h`}catch{return""}}function O0(){const{t:e,locale:t}=lt(),a=na(D=>D.settings.time_format)==="12h",[n,r]=y.useState(()=>{const D=localStorage.getItem("dashboard_timezones");return D?JSON.parse(D):[{label:"New York",tz:"America/New_York"},{label:"Tokyo",tz:"Asia/Tokyo"}]}),[o,s]=y.useState(Date.now()),[d,c]=y.useState(!1),[p,m]=y.useState(""),[g,f]=y.useState(""),[v,k]=y.useState("");y.useEffect(()=>{const D=setInterval(()=>s(Date.now()),1e4);return()=>clearInterval(D)},[]),y.useEffect(()=>{localStorage.setItem("dashboard_timezones",JSON.stringify(n))},[n]);const x=D=>{try{return Intl.DateTimeFormat("en-US",{timeZone:D}).format(new Date),!0}catch{return!1}},S=()=>{var R;const D=g.trim();if(!D){k(e("dashboard.timezoneCustomErrorEmpty"));return}if(!x(D)){k(e("dashboard.timezoneCustomErrorInvalid"));return}if(n.find(A=>A.tz===D)){k(e("dashboard.timezoneCustomErrorDuplicate"));return}const F=p.trim()||((R=D.split("/").pop())==null?void 0:R.replace(/_/g," "))||D;r([...n,{label:F,tz:D}]),m(""),f(""),k(""),c(!1)},b=D=>{n.find(F=>F.tz===D.tz)||r([...n,D]),c(!1)},w=D=>r(n.filter(F=>F.tz!==D)),j=new Date().toLocaleTimeString(t,{hour:"2-digit",minute:"2-digit",hour12:a}),M=Intl.DateTimeFormat().resolvedOptions().timeZone.split("/").pop().replace(/_/g," "),N=new Date().toLocaleTimeString("en-US",{timeZoneName:"short"}).split(" ").pop();return i.jsxs("div",{className:"rounded-2xl border p-4",style:{background:"var(--bg-card)",borderColor:"var(--border-primary)"},children:[i.jsxs("div",{className:"flex items-center justify-between mb-3",children:[i.jsx("span",{className:"text-xs font-semibold uppercase tracking-wide",style:{color:"var(--text-faint)"},children:e("dashboard.timezone")}),i.jsx("button",{onClick:()=>c(!d),className:"p-1 rounded-md transition-colors",style:{color:"var(--text-faint)"},children:i.jsx(Ft,{size:12})})]}),i.jsxs("div",{className:"mb-3 pb-3",style:{borderBottom:"1px solid var(--border-secondary)"},children:[i.jsx("p",{className:"text-2xl font-black tabular-nums",style:{color:"var(--text-primary)"},children:j}),i.jsxs("p",{className:"text-[10px] font-semibold uppercase tracking-wide",style:{color:"var(--text-faint)"},children:[M," (",N,") · ",e("dashboard.localTime")]})]}),i.jsx("div",{className:"space-y-2",children:n.map(D=>i.jsxs("div",{className:"flex items-center justify-between group",children:[i.jsxs("div",{children:[i.jsx("p",{className:"text-lg font-bold tabular-nums",style:{color:"var(--text-primary)"},children:F0(D.tz,t,a)}),i.jsxs("p",{className:"text-[10px]",style:{color:"var(--text-faint)"},children:[D.label," ",i.jsx("span",{style:{color:"var(--text-muted)"},children:XR(D.tz)})]})]}),i.jsx("button",{onClick:()=>w(D.tz),className:"opacity-0 group-hover:opacity-100 p-1 rounded transition-all",style:{color:"var(--text-faint)"},children:i.jsx(bt,{size:11})})]},D.tz))}),d&&i.jsxs("div",{className:"mt-2 rounded-xl p-2 max-h-[280px] overflow-auto",style:{background:"var(--bg-secondary)"},children:[i.jsxs("div",{className:"px-2 py-2 mb-2 rounded-lg",style:{background:"var(--bg-card)"},children:[i.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-wide mb-2",style:{color:"var(--text-faint)"},children:e("dashboard.timezoneCustomTitle")}),i.jsxs("div",{className:"space-y-1.5",children:[i.jsx("input",{value:p,onChange:D=>m(D.target.value),placeholder:e("dashboard.timezoneCustomLabelPlaceholder"),className:"w-full px-2 py-1.5 rounded-lg text-xs outline-none",style:{background:"var(--bg-secondary)",color:"var(--text-primary)",border:"1px solid var(--border-secondary)"}}),i.jsx("input",{value:g,onChange:D=>{f(D.target.value),k("")},placeholder:e("dashboard.timezoneCustomTzPlaceholder"),className:"w-full px-2 py-1.5 rounded-lg text-xs outline-none",style:{background:"var(--bg-secondary)",color:"var(--text-primary)",border:`1px solid ${v?"#ef4444":"var(--border-secondary)"}`},onKeyDown:D=>{D.key==="Enter"&&S()}}),v&&i.jsx("p",{className:"text-[10px]",style:{color:"#ef4444"},children:v}),i.jsx("button",{onClick:S,className:"w-full py-1.5 rounded-lg text-xs font-medium transition-colors",style:{background:"var(--text-primary)",color:"var(--bg-primary)"},children:e("dashboard.timezoneCustomAdd")})]})]}),YR.filter(D=>!n.find(F=>F.tz===D.tz)).map(D=>i.jsxs("button",{onClick:()=>b(D),className:"w-full flex items-center justify-between px-2 py-1.5 rounded-lg text-xs text-left transition-colors",style:{color:"var(--text-primary)"},onMouseEnter:F=>F.currentTarget.style.background="var(--bg-hover)",onMouseLeave:F=>F.currentTarget.style.background="transparent",children:[i.jsx("span",{className:"font-medium",children:D.label}),i.jsx("span",{className:"text-[10px]",style:{color:"var(--text-faint)"},children:F0(D.tz,t,a)})]},D.tz))]})]})}const B0={sm:"max-w-sm",md:"max-w-md",lg:"max-w-lg",xl:"max-w-2xl","2xl":"max-w-4xl","3xl":"max-w-5xl"};function or({isOpen:e,onClose:t,title:a,children:n,size:r="md",footer:o,hideCloseButton:s=!1}){const d=y.useCallback(p=>{p.key==="Escape"&&t()},[t]);y.useEffect(()=>(e&&(document.addEventListener("keydown",d),document.body.style.overflow="hidden"),()=>{document.removeEventListener("keydown",d),document.body.style.overflow=""}),[e,d]);const c=y.useRef(null);return e?i.jsxs("div",{className:"fixed inset-0 z-50 flex items-start sm:items-center justify-center px-4 modal-backdrop",style:{backgroundColor:"rgba(15, 23, 42, 0.5)",paddingTop:70,paddingBottom:20,overflow:"hidden"},onMouseDown:p=>{c.current=p.target},onClick:p=>{p.target===p.currentTarget&&c.current===p.currentTarget&&t(),c.current=null},children:[i.jsxs("div",{className:` - rounded-2xl shadow-2xl w-full ${B0[r]||B0.md} + `})]})}const YR=["AED","AFN","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BYN","BZD","CAD","CDF","CHF","CLF","CLP","CNH","CNY","COP","CRC","CUP","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","FOK","GBP","GEL","GGP","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HRK","HTG","HUF","IDR","ILS","IMP","INR","IQD","ISK","JEP","JMD","JOD","JPY","KES","KGS","KHR","KID","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MMK","MNT","MOP","MRU","MUR","MVR","MWK","MXN","MYR","MZN","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RUB","RWF","SAR","SBD","SCR","SDG","SEK","SGD","SHP","SLE","SOS","SRD","SSP","STN","SYP","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TVD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VES","VND","VUV","WST","XAF","XCD","XDR","XOF","XPF","YER","ZAR","ZMW","ZWL"],L0=YR.map(e=>({value:e,label:e}));function F0(){const{t:e,locale:t}=lt(),[a,n]=y.useState(()=>localStorage.getItem("currency_from")||"EUR"),[r,o]=y.useState(()=>localStorage.getItem("currency_to")||"USD"),[s,d]=y.useState("100"),[c,p]=y.useState(null),[m,g]=y.useState(!1),f=y.useCallback(async()=>{var b;if(a===r){p(1);return}g(!0);try{const j=await(await fetch(`https://api.exchangerate-api.com/v4/latest/${a}`)).json();p(((b=j.rates)==null?void 0:b[r])||null)}catch{p(null)}finally{g(!1)}},[a,r]);y.useEffect(()=>{f()},[f]),y.useEffect(()=>{localStorage.setItem("currency_from",a)},[a]),y.useEffect(()=>{localStorage.setItem("currency_to",r)},[r]);const v=()=>{n(r),o(a)},k=c&&s?(parseFloat(s)*c).toFixed(2):null,x=b=>!b||b==="—"?"—":parseFloat(b).toLocaleString(t,{minimumFractionDigits:2,maximumFractionDigits:2}),S=k;return i.jsxs("div",{className:"rounded-2xl border p-4",style:{background:"var(--bg-card)",borderColor:"var(--border-primary)"},children:[i.jsxs("div",{className:"flex items-center justify-between mb-3",children:[i.jsx("span",{className:"text-xs font-semibold uppercase tracking-wide",style:{color:"var(--text-faint)"},children:e("dashboard.currency")}),i.jsx("button",{onClick:f,className:"p-1 rounded-md transition-colors",style:{color:"var(--text-faint)"},children:i.jsx(js,{size:12,className:m?"animate-spin":""})})]}),i.jsx("div",{className:"rounded-xl px-4 py-3 mb-3",style:{background:"var(--bg-secondary)",border:"1px solid var(--border-primary)"},children:i.jsx("input",{type:"number",value:s,onChange:b=>d(b.target.value),className:"w-full text-2xl font-black tabular-nums outline-none [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none",style:{color:"var(--text-primary)",background:"transparent",border:"none"}})}),i.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[i.jsx("div",{className:"flex-1",style:{"--bg-input":"transparent","--border-primary":"transparent"},children:i.jsx(Qt,{value:a,onChange:n,options:L0,searchable:!0,size:"sm"})}),i.jsx("button",{onClick:v,className:"p-1.5 rounded-lg shrink-0 transition-colors",style:{color:"var(--text-muted)"},children:i.jsx(Hm,{size:13})}),i.jsx("div",{className:"flex-1",style:{"--bg-input":"transparent","--border-primary":"transparent"},children:i.jsx(Qt,{value:r,onChange:o,options:L0,searchable:!0,size:"sm"})})]}),i.jsxs("div",{className:"rounded-xl p-3",style:{background:"var(--bg-secondary)"},children:[i.jsxs("p",{className:"text-xl font-black tabular-nums",style:{color:"var(--text-primary)"},children:[x(S)," ",i.jsx("span",{className:"text-sm font-semibold",style:{color:"var(--text-muted)"},children:r})]}),c&&i.jsxs("p",{className:"text-[10px] mt-0.5",style:{color:"var(--text-faint)"},children:["1 ",a," = ",c.toFixed(4)," ",r]})]})]})}const XR=[{label:"New York",tz:"America/New_York"},{label:"London",tz:"Europe/London"},{label:"Berlin",tz:"Europe/Berlin"},{label:"Paris",tz:"Europe/Paris"},{label:"Dubai",tz:"Asia/Dubai"},{label:"Mumbai",tz:"Asia/Kolkata"},{label:"Bangkok",tz:"Asia/Bangkok"},{label:"Tokyo",tz:"Asia/Tokyo"},{label:"Sydney",tz:"Australia/Sydney"},{label:"Los Angeles",tz:"America/Los_Angeles"},{label:"Chicago",tz:"America/Chicago"},{label:"São Paulo",tz:"America/Sao_Paulo"},{label:"Istanbul",tz:"Europe/Istanbul"},{label:"Singapore",tz:"Asia/Singapore"},{label:"Hong Kong",tz:"Asia/Hong_Kong"},{label:"Seoul",tz:"Asia/Seoul"},{label:"Moscow",tz:"Europe/Moscow"},{label:"Cairo",tz:"Africa/Cairo"}];function O0(e,t,a){try{return new Date().toLocaleTimeString(t,{timeZone:e,hour:"2-digit",minute:"2-digit",hour12:a})}catch{return"—"}}function JR(e){try{const t=new Date,a=new Date(t.toLocaleString("en-US",{timeZone:Intl.DateTimeFormat().resolvedOptions().timeZone})),r=(new Date(t.toLocaleString("en-US",{timeZone:e}))-a)/36e5;return`${r>=0?"+":""}${r}h`}catch{return""}}function B0(){const{t:e,locale:t}=lt(),a=na(D=>D.settings.time_format)==="12h",[n,r]=y.useState(()=>{const D=localStorage.getItem("dashboard_timezones");return D?JSON.parse(D):[{label:"New York",tz:"America/New_York"},{label:"Tokyo",tz:"Asia/Tokyo"}]}),[o,s]=y.useState(Date.now()),[d,c]=y.useState(!1),[p,m]=y.useState(""),[g,f]=y.useState(""),[v,k]=y.useState("");y.useEffect(()=>{const D=setInterval(()=>s(Date.now()),1e4);return()=>clearInterval(D)},[]),y.useEffect(()=>{localStorage.setItem("dashboard_timezones",JSON.stringify(n))},[n]);const x=D=>{try{return Intl.DateTimeFormat("en-US",{timeZone:D}).format(new Date),!0}catch{return!1}},S=()=>{var R;const D=g.trim();if(!D){k(e("dashboard.timezoneCustomErrorEmpty"));return}if(!x(D)){k(e("dashboard.timezoneCustomErrorInvalid"));return}if(n.find(E=>E.tz===D)){k(e("dashboard.timezoneCustomErrorDuplicate"));return}const F=p.trim()||((R=D.split("/").pop())==null?void 0:R.replace(/_/g," "))||D;r([...n,{label:F,tz:D}]),m(""),f(""),k(""),c(!1)},b=D=>{n.find(F=>F.tz===D.tz)||r([...n,D]),c(!1)},w=D=>r(n.filter(F=>F.tz!==D)),j=new Date().toLocaleTimeString(t,{hour:"2-digit",minute:"2-digit",hour12:a}),M=Intl.DateTimeFormat().resolvedOptions().timeZone.split("/").pop().replace(/_/g," "),N=new Date().toLocaleTimeString("en-US",{timeZoneName:"short"}).split(" ").pop();return i.jsxs("div",{className:"rounded-2xl border p-4",style:{background:"var(--bg-card)",borderColor:"var(--border-primary)"},children:[i.jsxs("div",{className:"flex items-center justify-between mb-3",children:[i.jsx("span",{className:"text-xs font-semibold uppercase tracking-wide",style:{color:"var(--text-faint)"},children:e("dashboard.timezone")}),i.jsx("button",{onClick:()=>c(!d),className:"p-1 rounded-md transition-colors",style:{color:"var(--text-faint)"},children:i.jsx(Ft,{size:12})})]}),i.jsxs("div",{className:"mb-3 pb-3",style:{borderBottom:"1px solid var(--border-secondary)"},children:[i.jsx("p",{className:"text-2xl font-black tabular-nums",style:{color:"var(--text-primary)"},children:j}),i.jsxs("p",{className:"text-[10px] font-semibold uppercase tracking-wide",style:{color:"var(--text-faint)"},children:[M," (",N,") · ",e("dashboard.localTime")]})]}),i.jsx("div",{className:"space-y-2",children:n.map(D=>i.jsxs("div",{className:"flex items-center justify-between group",children:[i.jsxs("div",{children:[i.jsx("p",{className:"text-lg font-bold tabular-nums",style:{color:"var(--text-primary)"},children:O0(D.tz,t,a)}),i.jsxs("p",{className:"text-[10px]",style:{color:"var(--text-faint)"},children:[D.label," ",i.jsx("span",{style:{color:"var(--text-muted)"},children:JR(D.tz)})]})]}),i.jsx("button",{onClick:()=>w(D.tz),className:"opacity-0 group-hover:opacity-100 p-1 rounded transition-all",style:{color:"var(--text-faint)"},children:i.jsx(bt,{size:11})})]},D.tz))}),d&&i.jsxs("div",{className:"mt-2 rounded-xl p-2 max-h-[280px] overflow-auto",style:{background:"var(--bg-secondary)"},children:[i.jsxs("div",{className:"px-2 py-2 mb-2 rounded-lg",style:{background:"var(--bg-card)"},children:[i.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-wide mb-2",style:{color:"var(--text-faint)"},children:e("dashboard.timezoneCustomTitle")}),i.jsxs("div",{className:"space-y-1.5",children:[i.jsx("input",{value:p,onChange:D=>m(D.target.value),placeholder:e("dashboard.timezoneCustomLabelPlaceholder"),className:"w-full px-2 py-1.5 rounded-lg text-xs outline-none",style:{background:"var(--bg-secondary)",color:"var(--text-primary)",border:"1px solid var(--border-secondary)"}}),i.jsx("input",{value:g,onChange:D=>{f(D.target.value),k("")},placeholder:e("dashboard.timezoneCustomTzPlaceholder"),className:"w-full px-2 py-1.5 rounded-lg text-xs outline-none",style:{background:"var(--bg-secondary)",color:"var(--text-primary)",border:`1px solid ${v?"#ef4444":"var(--border-secondary)"}`},onKeyDown:D=>{D.key==="Enter"&&S()}}),v&&i.jsx("p",{className:"text-[10px]",style:{color:"#ef4444"},children:v}),i.jsx("button",{onClick:S,className:"w-full py-1.5 rounded-lg text-xs font-medium transition-colors",style:{background:"var(--text-primary)",color:"var(--bg-primary)"},children:e("dashboard.timezoneCustomAdd")})]})]}),XR.filter(D=>!n.find(F=>F.tz===D.tz)).map(D=>i.jsxs("button",{onClick:()=>b(D),className:"w-full flex items-center justify-between px-2 py-1.5 rounded-lg text-xs text-left transition-colors",style:{color:"var(--text-primary)"},onMouseEnter:F=>F.currentTarget.style.background="var(--bg-hover)",onMouseLeave:F=>F.currentTarget.style.background="transparent",children:[i.jsx("span",{className:"font-medium",children:D.label}),i.jsx("span",{className:"text-[10px]",style:{color:"var(--text-faint)"},children:O0(D.tz,t,a)})]},D.tz))]})]})}const H0={sm:"max-w-sm",md:"max-w-md",lg:"max-w-lg",xl:"max-w-2xl","2xl":"max-w-4xl","3xl":"max-w-5xl"};function or({isOpen:e,onClose:t,title:a,children:n,size:r="md",footer:o,hideCloseButton:s=!1}){const d=y.useCallback(p=>{p.key==="Escape"&&t()},[t]);y.useEffect(()=>(e&&(document.addEventListener("keydown",d),document.body.style.overflow="hidden"),()=>{document.removeEventListener("keydown",d),document.body.style.overflow=""}),[e,d]);const c=y.useRef(null);return e?i.jsxs("div",{className:"fixed inset-0 z-50 flex items-start sm:items-center justify-center px-4 modal-backdrop",style:{backgroundColor:"rgba(15, 23, 42, 0.5)",paddingTop:70,paddingBottom:20,overflow:"hidden"},onMouseDown:p=>{c.current=p.target},onClick:p=>{p.target===p.currentTarget&&c.current===p.currentTarget&&t(),c.current=null},children:[i.jsxs("div",{className:` + rounded-2xl shadow-2xl w-full ${H0[r]||H0.md} flex flex-col max-h-[calc(100vh-90px)] animate-in fade-in zoom-in-95 duration-200 `,style:{animation:"modalIn 0.2s ease-out forwards",background:"var(--bg-card)"},onClick:p=>p.stopPropagation(),children:[i.jsxs("div",{className:"flex items-center justify-between p-6",style:{borderBottom:"1px solid var(--border-secondary)"},children:[i.jsx("h2",{className:"text-lg font-semibold",style:{color:"var(--text-primary)"},children:a}),!s&&i.jsx("button",{onClick:t,className:"p-2 rounded-lg text-slate-400 hover:text-slate-600 hover:bg-slate-100 transition-colors",children:i.jsx(bt,{className:"w-5 h-5"})})]}),i.jsx("div",{className:"flex-1 overflow-y-auto p-6",children:n}),o&&i.jsx("div",{className:"p-6",style:{borderTop:"1px solid var(--border-secondary)"},children:o})]}),i.jsx("style",{children:` @@ -1166,7 +1166,7 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál from { opacity: 0; transform: scale(0.95) translateY(-10px); } to { opacity: 1; transform: scale(1) translateY(0); } } - `})]}):null}const eb=Wl(e=>({permissions:{},setPermissions:t=>e({permissions:t})}));function zn(){const e=eb(a=>a.permissions),t=Na(a=>a.user);return function(n,r){if(!t)return!1;if(t.role==="admin")return!0;const o=e[n];if(!o)return!0;const s=(r==null?void 0:r.user_id)??(r==null?void 0:r.owner_id)??null,c=(r==null?void 0:r.is_owner)===!0||(r==null?void 0:r.is_owner)===1||s!==null&&s===t.id,p=!c&&r!=null;switch(o){case"admin":return!1;case"trip_owner":return c;case"trip_member":return c||p;case"everybody":return!0;default:return!1}}}let JR=0;const xu={success:"#22c55e",error:"#ef4444",warning:"#f59e0b",info:"#6366f1"};function QR(){const[e,t]=y.useState([]),a=y.useCallback((o,s="info",d=3e3)=>{const c=++JR;return t(p=>[...p,{id:c,message:o,type:s,duration:d,removing:!1}]),d>0&&setTimeout(()=>{t(p=>p.map(m=>m.id===c?{...m,removing:!0}:m)),setTimeout(()=>{t(p=>p.filter(m=>m.id!==c))},400)},d),c},[]),n=y.useCallback(o=>{t(s=>s.map(d=>d.id===o?{...d,removing:!0}:d)),setTimeout(()=>{t(s=>s.filter(d=>d.id!==o))},400)},[]);y.useEffect(()=>(window.__addToast=a,()=>{delete window.__addToast}),[a]);const r={success:i.jsx(Zf,{size:18,style:{color:xu.success,flexShrink:0}}),error:i.jsx(Vj,{size:18,style:{color:xu.error,flexShrink:0}}),warning:i.jsx(Cj,{size:18,style:{color:xu.warning,flexShrink:0}}),info:i.jsx(Km,{size:18,style:{color:xu.info,flexShrink:0}})};return i.jsxs(i.Fragment,{children:[i.jsx("style",{children:` + `})]}):null}const tb=Wl(e=>({permissions:{},setPermissions:t=>e({permissions:t})}));function zn(){const e=tb(a=>a.permissions),t=Na(a=>a.user);return function(n,r){if(!t)return!1;if(t.role==="admin")return!0;const o=e[n];if(!o)return!0;const s=(r==null?void 0:r.user_id)??(r==null?void 0:r.owner_id)??null,c=(r==null?void 0:r.is_owner)===!0||(r==null?void 0:r.is_owner)===1||s!==null&&s===t.id,p=!c&&r!=null;switch(o){case"admin":return!1;case"trip_owner":return c;case"trip_member":return c||p;case"everybody":return!0;default:return!1}}}let QR=0;const xu={success:"#22c55e",error:"#ef4444",warning:"#f59e0b",info:"#6366f1"};function eI(){const[e,t]=y.useState([]),a=y.useCallback((o,s="info",d=3e3)=>{const c=++QR;return t(p=>[...p,{id:c,message:o,type:s,duration:d,removing:!1}]),d>0&&setTimeout(()=>{t(p=>p.map(m=>m.id===c?{...m,removing:!0}:m)),setTimeout(()=>{t(p=>p.filter(m=>m.id!==c))},400)},d),c},[]),n=y.useCallback(o=>{t(s=>s.map(d=>d.id===o?{...d,removing:!0}:d)),setTimeout(()=>{t(s=>s.filter(d=>d.id!==o))},400)},[]);y.useEffect(()=>(window.__addToast=a,()=>{delete window.__addToast}),[a]);const r={success:i.jsx(Zf,{size:18,style:{color:xu.success,flexShrink:0}}),error:i.jsx(Kj,{size:18,style:{color:xu.error,flexShrink:0}}),warning:i.jsx(zj,{size:18,style:{color:xu.warning,flexShrink:0}}),info:i.jsx(Km,{size:18,style:{color:xu.info,flexShrink:0}})};return i.jsxs(i.Fragment,{children:[i.jsx("style",{children:` @keyframes toast-in { from { opacity: 0; transform: translateY(16px) scale(0.95); } to { opacity: 1; transform: translateY(0) scale(1); } @@ -1189,12 +1189,12 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál .dark .nomad-toast span { color: rgba(255, 255, 255, 0.9) !important; } .nomad-toast-close { color: rgba(0, 0, 0, 0.4); } .dark .nomad-toast-close { color: rgba(255, 255, 255, 0.4); } - `}),i.jsx("div",{style:{position:"fixed",bottom:24,left:"50%",transform:"translateX(-50%)",zIndex:9999,display:"flex",flexDirection:"column-reverse",gap:8,pointerEvents:"none",maxWidth:420,width:"100%",padding:"0 16px"},children:e.map(o=>i.jsxs("div",{className:"nomad-toast",style:{display:"flex",alignItems:"center",gap:10,padding:"10px 14px",borderRadius:14,backdropFilter:"blur(24px) saturate(180%)",WebkitBackdropFilter:"blur(24px) saturate(180%)",pointerEvents:"auto",animation:o.removing?"toast-out 0.35s ease forwards":"toast-in 0.35s cubic-bezier(0.16,1,0.3,1) forwards"},children:[r[o.type]||r.info,i.jsx("span",{style:{flex:1,fontSize:13,fontWeight:500,color:"rgba(255, 255, 255, 0.9)",lineHeight:1.4,fontFamily:"-apple-system, BlinkMacSystemFont, 'SF Pro Text', system-ui, sans-serif"},children:o.message}),i.jsx("button",{onClick:()=>n(o.id),className:"nomad-toast-close",style:{background:"none",border:"none",cursor:"pointer",display:"flex",padding:2,flexShrink:0,borderRadius:6,transition:"opacity 0.15s",opacity:.35},onMouseEnter:s=>s.currentTarget.style.opacity="0.7",onMouseLeave:s=>s.currentTarget.style.opacity="0.35",children:i.jsx(bt,{size:14})})]},o.id))})]})}const ba=()=>{const e=y.useCallback((t,a,n)=>{window.__addToast&&window.__addToast(t,a,n)},[]);return{success:(t,a)=>e(t,"success",a),error:(t,a)=>e(t,"error",a),warning:(t,a)=>e(t,"warning",a),info:(t,a)=>e(t,"info",a)}};function eI(e,t){if(!e)return"";const[a,n]=e.split(":").map(Number);if(isNaN(a)||isNaN(n)||!t)return e;const r=a>=12?"PM":"AM";return`${a===0?12:a>12?a-12:a}:${String(n).padStart(2,"0")} ${r}`}function ho({value:e,onChange:t,placeholder:a="00:00",style:n={}}){const r=na(D=>D.settings.time_format)==="12h",[o,s]=y.useState(!1),[d,c]=y.useState(!1),p=y.useRef(null),m=y.useRef(null),[g,f]=(e||"").split(":").map(Number),v=isNaN(g)?null:g,k=isNaN(f)?null:f;y.useEffect(()=>{const D=F=>{var R,A;(R=p.current)!=null&&R.contains(F.target)||(A=m.current)!=null&&A.contains(F.target)||s(!1)};return o&&document.addEventListener("mousedown",D),()=>document.removeEventListener("mousedown",D)},[o]);const x=(D,F)=>{const R=String(Math.max(0,Math.min(23,D))).padStart(2,"0"),A=String(Math.max(0,Math.min(59,F))).padStart(2,"0");t(`${R}:${A}`)},S=()=>x(((v??-1)+1)%24,k??0),b=()=>x(((v??1)-1+24)%24,k??0),w=()=>{const D=((k??-5)+5)%60,F=D<(k??0)?((v??0)+1)%24:v??0;x(F,D)},j=()=>{const D=((k??5)-5+60)%60,F=D>(k??0)?((v??0)-1+24)%24:v??0;x(F,D)},P={background:"none",border:"none",cursor:"pointer",padding:2,color:"var(--text-faint)",display:"flex",borderRadius:4,transition:"color 0.15s"},M=D=>{const F=D.target.value;if(t(F),r)return;const R=F.replace(/[^0-9:]/g,"");if(/^\d{2}:\d{2}$/.test(R))t(R);else if(/^\d{4}$/.test(R))t(R.slice(0,2)+":"+R.slice(2));else if(/^\d{1,2}:\d{2}$/.test(R)){const[A,ae]=R.split(":");t(A.padStart(2,"0")+":"+ae)}},N=()=>{if(!e)return;const D=e.trim();if(r){const R=D.match(/^(\d{1,2}):?(\d{2})?\s*(am|pm)$/i);if(R){let A=parseInt(R[1]);const ae=R[2]?parseInt(R[2]):0,B=R[3].toLowerCase()==="pm";A===12?A=B?12:0:B&&(A+=12),t(String(Math.min(23,A)).padStart(2,"0")+":"+String(Math.min(59,ae)).padStart(2,"0"));return}}const F=D.replace(/[^0-9:]/g,"");if(/^\d{1,2}:\d{2}$/.test(F)){const[R,A]=F.split(":"),ae=Math.min(23,Math.max(0,parseInt(R))),B=Math.min(59,Math.max(0,parseInt(A)));t(String(ae).padStart(2,"0")+":"+String(B).padStart(2,"0"))}else if(/^\d{3,4}$/.test(F)){const R=F.padStart(4,"0"),A=Math.min(23,Math.max(0,parseInt(R.slice(0,2)))),ae=Math.min(59,Math.max(0,parseInt(R.slice(2))));t(String(A).padStart(2,"0")+":"+String(ae).padStart(2,"0"))}else if(/^\d{1,2}$/.test(F)){const R=Math.min(23,Math.max(0,parseInt(F)));t(String(R).padStart(2,"0")+":00")}};return i.jsxs("div",{ref:p,style:{position:"relative",...n},children:[i.jsxs("div",{style:{width:"100%",display:"flex",alignItems:"center",gap:0,borderRadius:10,border:"1px solid var(--border-primary)",background:"var(--bg-input)",overflow:"hidden",transition:"border-color 0.15s"},children:[i.jsx("input",{type:"text",value:d?e:eI(e,r),onChange:M,onFocus:()=>c(!0),onBlur:()=>{c(!1),N()},placeholder:r?"2:30 PM":a,style:{flex:1,border:"none",outline:"none",background:"transparent",padding:"8px 10px 8px 14px",fontSize:13,fontFamily:"inherit",color:e?"var(--text-primary)":"var(--text-faint)",minWidth:0}}),i.jsx("button",{type:"button",onClick:()=>s(D=>!D),style:{background:"none",border:"none",cursor:"pointer",padding:"8px 10px",display:"flex",alignItems:"center",color:"var(--text-faint)",transition:"color 0.15s",flexShrink:0},onMouseEnter:D=>D.currentTarget.style.color="var(--text-primary)",onMouseLeave:D=>D.currentTarget.style.color="var(--text-faint)",children:i.jsx(In,{size:14})})]}),o&&Ut.createPortal(i.jsxs("div",{ref:m,style:{position:"fixed",top:(()=>{var F;const D=(F=p.current)==null?void 0:F.getBoundingClientRect();return D?D.bottom+4:0})(),left:(()=>{var F;const D=(F=p.current)==null?void 0:F.getBoundingClientRect();return D?D.left:0})(),zIndex:99999,background:"var(--bg-card)",border:"1px solid var(--border-primary)",borderRadius:12,boxShadow:"0 8px 32px rgba(0,0,0,0.12)",padding:12,display:"flex",alignItems:"center",gap:6,animation:"selectIn 0.15s ease-out",backdropFilter:"blur(24px)",WebkitBackdropFilter:"blur(24px)"},children:[i.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",gap:2},children:[i.jsx("button",{type:"button",onClick:S,style:P,onMouseEnter:D=>D.currentTarget.style.color="var(--text-primary)",onMouseLeave:D=>D.currentTarget.style.color="var(--text-faint)",children:i.jsx(dr,{size:16})}),i.jsx("div",{style:{width:44,height:40,display:"flex",alignItems:"center",justifyContent:"center",fontSize:22,fontWeight:700,color:"var(--text-primary)",background:"var(--bg-hover)",borderRadius:8,fontVariantNumeric:"tabular-nums"},children:v!==null?r?String(v===0?12:v>12?v-12:v):String(v).padStart(2,"0"):"--"}),i.jsx("button",{type:"button",onClick:b,style:P,onMouseEnter:D=>D.currentTarget.style.color="var(--text-primary)",onMouseLeave:D=>D.currentTarget.style.color="var(--text-faint)",children:i.jsx(Ja,{size:16})})]}),i.jsx("span",{style:{fontSize:22,fontWeight:700,color:"var(--text-faint)",marginTop:-2},children:":"}),i.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",gap:2},children:[i.jsx("button",{type:"button",onClick:w,style:P,onMouseEnter:D=>D.currentTarget.style.color="var(--text-primary)",onMouseLeave:D=>D.currentTarget.style.color="var(--text-faint)",children:i.jsx(dr,{size:16})}),i.jsx("div",{style:{width:44,height:40,display:"flex",alignItems:"center",justifyContent:"center",fontSize:22,fontWeight:700,color:"var(--text-primary)",background:"var(--bg-hover)",borderRadius:8,fontVariantNumeric:"tabular-nums"},children:k!==null?String(k).padStart(2,"0"):"--"}),i.jsx("button",{type:"button",onClick:j,style:P,onMouseEnter:D=>D.currentTarget.style.color="var(--text-primary)",onMouseLeave:D=>D.currentTarget.style.color="var(--text-faint)",children:i.jsx(Ja,{size:16})})]}),r&&v!==null&&i.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",gap:2,marginLeft:4},children:[i.jsx("button",{type:"button",onClick:()=>{v<12?x(v+12,k??0):x(v-12,k??0)},style:P,onMouseEnter:D=>D.currentTarget.style.color="var(--text-primary)",onMouseLeave:D=>D.currentTarget.style.color="var(--text-faint)",children:i.jsx(dr,{size:16})}),i.jsx("div",{style:{width:36,height:40,display:"flex",alignItems:"center",justifyContent:"center",fontSize:14,fontWeight:700,color:"var(--text-primary)",background:"var(--bg-hover)",borderRadius:8},children:v>=12?"PM":"AM"}),i.jsx("button",{type:"button",onClick:()=>{v<12?x(v+12,k??0):x(v-12,k??0)},style:P,onMouseEnter:D=>D.currentTarget.style.color="var(--text-primary)",onMouseLeave:D=>D.currentTarget.style.color="var(--text-faint)",children:i.jsx(Ja,{size:16})})]}),e&&i.jsx("button",{type:"button",onClick:()=>{t(""),s(!1)},style:{...P,marginLeft:4,fontSize:11,color:"var(--text-faint)",padding:"4px 6px"},onMouseEnter:D=>D.currentTarget.style.color="#ef4444",onMouseLeave:D=>D.currentTarget.style.color="var(--text-faint)",children:"✕"})]}),document.body),i.jsx("style",{children:"@keyframes selectIn { from { opacity: 0; transform: translateY(-4px); } to { opacity: 1; transform: translateY(0); } }"})]})}function tI(e,t){return new Date(e,t+1,0).getDate()}function aI(e,t,a){return new Date(e,t,a).getDay()}function mc({value:e,onChange:t,placeholder:a,style:n={},compact:r=!1,borderless:o=!1}){const{locale:s,t:d}=lt(),[c,p]=y.useState(!1),m=y.useRef(null),g=y.useRef(null),f=e?new Date(e+"T00:00:00"):null,[v,k]=y.useState((f==null?void 0:f.getFullYear())||new Date().getFullYear()),[x,S]=y.useState((f==null?void 0:f.getMonth())??new Date().getMonth());y.useEffect(()=>{const O=$=>{var U,T;(U=m.current)!=null&&U.contains($.target)||(T=g.current)!=null&&T.contains($.target)||p(!1)};return c&&document.addEventListener("mousedown",O),()=>document.removeEventListener("mousedown",O)},[c]),y.useEffect(()=>{c&&f&&(k(f.getFullYear()),S(f.getMonth()))},[c]);const b=()=>{x===0?(S(11),k(O=>O-1)):S(O=>O-1)},w=()=>{x===11?(S(0),k(O=>O+1)):S(O=>O+1)},j=new Date(v,x).toLocaleDateString(s,{month:"long",year:"numeric"}),P=tI(v,x),M=(aI(v,x,1)+6)%7,N=Array.from({length:7},(O,$)=>new Date(2024,0,$+1).toLocaleDateString(s,{weekday:"narrow"})),D=f?f.toLocaleDateString(s,r?{day:"2-digit",month:"2-digit",year:"2-digit"}:{day:"numeric",month:"short",year:"numeric"}):null,F=O=>{const $=String(v),U=String(x+1).padStart(2,"0"),T=String(O).padStart(2,"0");t(`${$}-${U}-${T}`),p(!1)},R=f&&f.getFullYear()===v&&f.getMonth()===x?f.getDate():null,A=new Date,ae=O=>A.getFullYear()===v&&A.getMonth()===x&&A.getDate()===O,[B,q]=y.useState(""),[le,de]=y.useState(!1),me=()=>{if(de(!1),!B.trim())return;const O=B.trim();if(/^\d{4}-\d{2}-\d{2}$/.test(O)){t(O);return}const $=O.match(/^(\d{1,2})[./](\d{1,2})[./](\d{2,4})$/);if($){const T=$[3].length===2?2e3+parseInt($[3]):parseInt($[3]);t(`${T}-${String($[2]).padStart(2,"0")}-${String($[1]).padStart(2,"0")}`);return}const U=new Date(O);isNaN(U.getTime())||t(`${U.getFullYear()}-${String(U.getMonth()+1).padStart(2,"0")}-${String(U.getDate()).padStart(2,"0")}`)};return i.jsxs("div",{ref:m,style:{position:"relative",...n},children:[le?i.jsx("input",{autoFocus:!0,type:"text",value:B,onChange:O=>q(O.target.value),onKeyDown:O=>{O.key==="Enter"&&me(),O.key==="Escape"&&de(!1)},onBlur:me,placeholder:"DD.MM.YYYY",style:{width:"100%",padding:"8px 14px",borderRadius:10,border:"1px solid var(--text-faint)",background:"var(--bg-input)",color:"var(--text-primary)",fontSize:13,fontFamily:"inherit",outline:"none"}}):i.jsxs("button",{type:"button",onClick:()=>p(O=>!O),onDoubleClick:()=>{q(e||""),de(!0)},style:{width:"100%",display:"flex",alignItems:"center",justifyContent:"center",gap:r?4:8,padding:r?"4px 6px":"8px 14px",borderRadius:r?4:10,border:o?"none":"1px solid var(--border-primary)",background:o?"transparent":"var(--bg-input)",color:D?"var(--text-primary)":"var(--text-faint)",fontSize:13,fontFamily:"inherit",cursor:"pointer",outline:"none",transition:"border-color 0.15s"},onMouseEnter:O=>O.currentTarget.style.borderColor="var(--text-faint)",onMouseLeave:O=>{c||(O.currentTarget.style.borderColor="var(--border-primary)")},children:[!r&&i.jsx(Or,{size:14,style:{color:"var(--text-faint)",flexShrink:0}}),i.jsx("span",{style:{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:D||a||d("common.date")})]}),c&&Ut.createPortal(i.jsxs("div",{ref:g,style:{position:"fixed",...(()=>{var I;const O=(I=m.current)==null?void 0:I.getBoundingClientRect();if(!O)return{top:0,left:0};const $=268,U=8,T=window.innerWidth,ce=window.innerHeight;let K=O.left,E=O.bottom+4;return K+$>T-U&&(K=Math.max(U,T-$-U)),E+320>ce&&(E=Math.max(U,O.top-320)),T<360&&(K=Math.max(U,(T-$)/2)),{top:E,left:K}})(),zIndex:99999,background:"var(--bg-card)",border:"1px solid var(--border-primary)",borderRadius:14,boxShadow:"0 8px 32px rgba(0,0,0,0.12)",padding:12,width:268,maxWidth:"calc(100vw - 16px)",animation:"selectIn 0.15s ease-out",backdropFilter:"blur(24px)",WebkitBackdropFilter:"blur(24px)"},children:[i.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:10},children:[i.jsx("button",{type:"button",onClick:b,style:{background:"none",border:"none",cursor:"pointer",padding:4,borderRadius:6,display:"flex",color:"var(--text-faint)"},onMouseEnter:O=>O.currentTarget.style.color="var(--text-primary)",onMouseLeave:O=>O.currentTarget.style.color="var(--text-faint)",children:i.jsx(Aj,{size:16})}),i.jsx("span",{style:{fontSize:13,fontWeight:600,color:"var(--text-primary)"},children:j}),i.jsx("button",{type:"button",onClick:w,style:{background:"none",border:"none",cursor:"pointer",padding:4,borderRadius:6,display:"flex",color:"var(--text-faint)"},onMouseEnter:O=>O.currentTarget.style.color="var(--text-primary)",onMouseLeave:O=>O.currentTarget.style.color="var(--text-faint)",children:i.jsx(Fo,{size:16})})]}),i.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(7, 1fr)",gap:2,marginBottom:4},children:N.map((O,$)=>i.jsx("div",{style:{textAlign:"center",fontSize:10,fontWeight:600,color:"var(--text-faint)",padding:"2px 0"},children:O},$))}),i.jsxs("div",{style:{display:"grid",gridTemplateColumns:"repeat(7, 1fr)",gap:2},children:[Array.from({length:M},(O,$)=>i.jsx("div",{},`e-${$}`)),Array.from({length:P},(O,$)=>{const U=$+1,T=U===R,ce=ae(U);return i.jsx("button",{type:"button",onClick:()=>F(U),style:{width:32,height:32,borderRadius:8,border:"none",background:T?"var(--accent)":"transparent",color:T?"var(--accent-text)":"var(--text-primary)",fontSize:12,fontWeight:T?700:ce?600:400,cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",outline:ce&&!T?"2px solid var(--border-primary)":"none",outlineOffset:-2,transition:"background 0.1s"},onMouseEnter:K=>{T||(K.currentTarget.style.background="var(--bg-hover)")},onMouseLeave:K=>{T||(K.currentTarget.style.background="transparent")},children:U},U)})]}),e&&i.jsx("div",{style:{marginTop:8,display:"flex",justifyContent:"center"},children:i.jsx("button",{type:"button",onClick:()=>{t(""),p(!1)},style:{background:"none",border:"none",cursor:"pointer",fontSize:11,color:"var(--text-faint)",padding:"3px 8px",borderRadius:6},onMouseEnter:O=>O.currentTarget.style.color="#ef4444",onMouseLeave:O=>O.currentTarget.style.color="var(--text-faint)",children:"✕"})})]}),document.body),i.jsx("style",{children:"@keyframes selectIn { from { opacity: 0; transform: translateY(-4px); } to { opacity: 1; transform: translateY(0); } }"})]})}function qj({isOpen:e,onClose:t,onSave:a,trip:n,onCoverUpdate:r}){const o=!!n,s=y.useRef(null),d=ba(),{t:c}=lt(),p=Na(H=>H.user),m=Na(H=>H.tripRemindersEnabled),g=Na(H=>H.setTripRemindersEnabled),f=zn(),v=!o||f("trip_cover_upload",n),k=!o||f("trip_edit",n),[x,S]=y.useState({title:"",description:"",start_date:"",end_date:"",reminder_days:0}),[b,w]=y.useState(!1),[j,P]=y.useState(""),[M,N]=y.useState(!1),[D,F]=y.useState(null),[R,A]=y.useState(null),[ae,B]=y.useState(!1),[q,le]=y.useState([]),[de,me]=y.useState([]),[O,$]=y.useState("");y.useEffect(()=>{if(n){const H=n.reminder_days??3;S({title:n.title||"",description:n.description||"",start_date:n.start_date||"",end_date:n.end_date||"",reminder_days:H}),w(![0,1,3,9].includes(H)),F(n.cover_image||null)}else S({title:"",description:"",start_date:"",end_date:"",reminder_days:m?3:0}),w(!1),F(null);A(null),me([]),P(""),e&&kt.getAppConfig().then(H=>{(H==null?void 0:H.trip_reminders_enabled)!==void 0&&g(H.trip_reminders_enabled)}).catch(()=>{}),n||kt.listUsers().then(H=>le(H.users||[])).catch(()=>{})},[n,e]),y.useEffect(()=>{!n&&e&&S(H=>({...H,reminder_days:m?3:0}))},[m]);const U=async H=>{var ne,ge;if(H.preventDefault(),P(""),!x.title.trim()){P(c("dashboard.titleRequired"));return}if(x.start_date&&x.end_date&&new Date(x.end_date)0&&((ne=oe==null?void 0:oe.trip)!=null&&ne.id))for(const Y of de){const X=q.find(he=>he.id===Y);if(X)try{await Va.addMember(oe.trip.id,X.username)}catch{}}if(R&&((ge=oe==null?void 0:oe.trip)!=null&&ge.id))try{const Y=new FormData;Y.append("cover",R);const X=await Va.uploadCover(oe.trip.id,Y);r==null||r(oe.trip.id,X.cover_image)}catch{}t()}catch(oe){P(oe instanceof Error?oe.message:c("places.saveError"))}finally{N(!1)}},T=H=>{H&&(o&&(n!=null&&n.id)?K(H):(A(H),F(URL.createObjectURL(H))))},ce=H=>{var ne;T((ne=H.target.files)==null?void 0:ne[0]),H.target.value=""},K=async H=>{B(!0);try{const ne=new FormData;ne.append("cover",H);const ge=await Va.uploadCover(n.id,ne);F(ge.cover_image),r==null||r(n.id,ge.cover_image),d.success(c("dashboard.coverSaved"))}catch{d.error(c("dashboard.coverUploadError"))}finally{B(!1)}},E=async()=>{if(R){A(null),F(null);return}if(n!=null&&n.id)try{await Va.update(n.id,{cover_image:null}),F(null),r==null||r(n.id,null)}catch{d.error(c("dashboard.coverRemoveError"))}},I=H=>{var ge;if(!v)return;const ne=(ge=H.clipboardData)==null?void 0:ge.items;if(ne){for(const oe of Array.from(ne))if(oe.type.startsWith("image/")){H.preventDefault();const Y=oe.getAsFile();Y&&T(Y);return}}},ee=(H,ne)=>S(ge=>{const oe={...ge,[H]:ne};if(H==="start_date"&&ne){if(!ge.end_date||ge.end_date{var H;return(H=s.current)==null?void 0:H.click()},disabled:ae,style:{display:"flex",alignItems:"center",gap:4,padding:"5px 10px",borderRadius:8,background:"rgba(0,0,0,0.55)",border:"none",color:"white",fontSize:11.5,fontWeight:600,cursor:"pointer",backdropFilter:"blur(4px)"},children:[i.jsx(Hi,{size:12})," ",c(ae?"common.uploading":"common.change")]}),i.jsx("button",{type:"button",onClick:E,style:{display:"flex",alignItems:"center",padding:"5px 8px",borderRadius:8,background:"rgba(0,0,0,0.55)",border:"none",color:"white",cursor:"pointer",backdropFilter:"blur(4px)"},children:i.jsx(bt,{size:12})})]})]}):i.jsxs("button",{type:"button",onClick:()=>{var H;return(H=s.current)==null?void 0:H.click()},disabled:ae,onDragOver:H=>{H.preventDefault(),H.currentTarget.style.borderColor="#6366f1",H.currentTarget.style.background="rgba(99,102,241,0.04)"},onDragLeave:H=>{H.currentTarget.style.borderColor="#e5e7eb",H.currentTarget.style.background="none"},onDrop:H=>{var ge;H.preventDefault(),H.currentTarget.style.borderColor="#e5e7eb",H.currentTarget.style.background="none";const ne=(ge=H.dataTransfer.files)==null?void 0:ge[0];ne!=null&&ne.type.startsWith("image/")&&T(ne)},style:{width:"100%",padding:"18px",border:"2px dashed #e5e7eb",borderRadius:10,background:"none",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",gap:6,fontSize:13,color:"#9ca3af",fontFamily:"inherit",transition:"all 0.15s"},onMouseEnter:H=>{H.currentTarget.style.borderColor="#d1d5db",H.currentTarget.style.color="#6b7280"},onMouseLeave:H=>{H.currentTarget.style.borderColor="#e5e7eb",H.currentTarget.style.color="#9ca3af"},children:[i.jsx(Hi,{size:15})," ",c(ae?"common.uploading":"dashboard.addCoverImage")]})]}),i.jsxs("div",{children:[i.jsxs("label",{className:"block text-sm font-medium text-slate-700 mb-1.5",children:[c("dashboard.tripTitle")," ",i.jsx("span",{className:"text-red-500",children:"*"})]}),i.jsx("input",{type:"text",value:x.title,onChange:H=>k&&ee("title",H.target.value),required:!0,readOnly:!k,placeholder:c("dashboard.tripTitlePlaceholder"),className:pe})]}),i.jsxs("div",{children:[i.jsx("label",{className:"block text-sm font-medium text-slate-700 mb-1.5",children:c("dashboard.tripDescription")}),i.jsx("textarea",{value:x.description,onChange:H=>k&&ee("description",H.target.value),readOnly:!k,placeholder:c("dashboard.tripDescriptionPlaceholder"),rows:3,className:`${pe} resize-none`})]}),i.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[i.jsxs("div",{children:[i.jsxs("label",{className:"block text-sm font-medium text-slate-700 mb-1.5",children:[i.jsx(Or,{className:"inline w-4 h-4 mr-1"}),c("dashboard.startDate")]}),i.jsx(mc,{value:x.start_date,onChange:H=>ee("start_date",H),placeholder:c("dashboard.startDate")})]}),i.jsxs("div",{children:[i.jsxs("label",{className:"block text-sm font-medium text-slate-700 mb-1.5",children:[i.jsx(Or,{className:"inline w-4 h-4 mr-1"}),c("dashboard.endDate")]}),i.jsx(mc,{value:x.end_date,onChange:H=>ee("end_date",H),placeholder:c("dashboard.endDate")})]})]}),(!o||(n==null?void 0:n.user_id)===(p==null?void 0:p.id)||(p==null?void 0:p.role)==="admin")&&i.jsxs("div",{className:m?"":"opacity-50",children:[i.jsxs("label",{className:"block text-sm font-medium text-slate-700 mb-1.5",children:[i.jsx(BM,{className:"inline w-4 h-4 mr-1"}),c("trips.reminder")]}),m?i.jsxs(i.Fragment,{children:[i.jsxs("div",{className:"flex flex-wrap gap-2",children:[[{value:0,label:c("trips.reminderNone")},{value:1,label:`1 ${c("trips.reminderDay")}`},{value:3,label:`3 ${c("trips.reminderDays")}`},{value:9,label:`9 ${c("trips.reminderDays")}`}].map(H=>i.jsx("button",{type:"button",onClick:()=>{ee("reminder_days",H.value),w(!1)},className:`px-3 py-1.5 text-xs font-medium rounded-lg border transition-colors ${!b&&x.reminder_days===H.value?"bg-slate-900 text-white border-slate-900":"bg-white text-slate-600 border-slate-200 hover:border-slate-300"}`,children:H.label},H.value)),i.jsx("button",{type:"button",onClick:()=>{w(!0),[0,1,3,9].includes(x.reminder_days)&&ee("reminder_days",7)},className:`px-3 py-1.5 text-xs font-medium rounded-lg border transition-colors ${b?"bg-slate-900 text-white border-slate-900":"bg-white text-slate-600 border-slate-200 hover:border-slate-300"}`,children:c("trips.reminderCustom")})]}),b&&i.jsxs("div",{className:"flex items-center gap-2 mt-2",children:[i.jsx("input",{type:"number",min:1,max:30,value:x.reminder_days,onChange:H=>ee("reminder_days",Math.max(1,Math.min(30,Number(H.target.value)||1))),className:"w-20 px-3 py-1.5 border border-slate-200 rounded-lg text-sm text-slate-900 focus:outline-none focus:ring-2 focus:ring-slate-300"}),i.jsx("span",{className:"text-xs text-slate-500",children:c("trips.reminderDaysBefore")})]})]}):i.jsx("p",{className:"text-xs text-slate-400 bg-slate-50 rounded-lg p-3",children:c("trips.reminderDisabledHint")})]}),!o&&q.filter(H=>H.id!==(p==null?void 0:p.id)).length>0&&i.jsxs("div",{children:[i.jsxs("label",{className:"block text-sm font-medium text-slate-700 mb-1.5",children:[i.jsx(Rc,{className:"inline w-4 h-4 mr-1"}),c("dashboard.addMembers")]}),de.length>0&&i.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:6,marginBottom:8},children:de.map(H=>{const ne=q.find(ge=>ge.id===H);return ne?i.jsxs("span",{onClick:()=>me(ge=>ge.filter(oe=>oe!==H)),style:{display:"flex",alignItems:"center",gap:5,padding:"4px 10px",borderRadius:99,background:"var(--bg-secondary)",fontSize:12,fontWeight:500,color:"var(--text-primary)",cursor:"pointer",border:"1px solid var(--border-primary)"},children:[ne.username,i.jsx(bt,{size:11,style:{color:"var(--text-faint)"}})]},H):null})}),i.jsx("div",{style:{display:"flex",gap:8},children:i.jsx(Qt,{value:O,onChange:H=>{H&&(me(ne=>ne.includes(Number(H))?ne:[...ne,Number(H)]),$(""))},placeholder:c("dashboard.addMember"),options:q.filter(H=>H.id!==(p==null?void 0:p.id)&&!de.includes(H.id)).map(H=>({value:H.id,label:H.username})),searchable:!0,size:"sm"})})]})]})})}function Gj({isOpen:e,onClose:t,onConfirm:a,title:n,message:r,confirmLabel:o,cancelLabel:s,danger:d=!0}){const{t:c}=lt(),p=y.useCallback(m=>{m.key==="Escape"&&t()},[t]);return y.useEffect(()=>(e&&document.addEventListener("keydown",p),()=>document.removeEventListener("keydown",p)),[e,p]),e?i.jsxs("div",{className:"fixed inset-0 z-[60] flex items-center justify-center px-4",style:{backgroundColor:"rgba(15, 23, 42, 0.5)"},onClick:t,children:[i.jsxs("div",{className:"rounded-2xl shadow-2xl w-full max-w-sm p-6",style:{animation:"modalIn 0.2s ease-out forwards",background:"var(--bg-card)"},onClick:m=>m.stopPropagation(),children:[i.jsxs("div",{className:"flex items-start gap-4",children:[d&&i.jsx("div",{className:"flex-shrink-0 w-10 h-10 rounded-full bg-red-100 flex items-center justify-center",children:i.jsx(ur,{className:"w-5 h-5 text-red-600"})}),i.jsxs("div",{className:"flex-1",children:[i.jsx("h3",{className:"text-base font-semibold",style:{color:"var(--text-primary)"},children:n||c("common.confirm")}),i.jsx("p",{className:"mt-1 text-sm",style:{color:"var(--text-secondary)"},children:r})]})]}),i.jsxs("div",{className:"flex justify-end gap-3 mt-6",children:[i.jsx("button",{onClick:t,className:"px-4 py-2 text-sm font-medium rounded-lg transition-colors",style:{color:"var(--text-secondary)",border:"1px solid var(--border-secondary)"},children:s||c("common.cancel")}),i.jsx("button",{onClick:()=>{a(),t()},className:`px-4 py-2 text-sm font-medium rounded-lg transition-colors text-white ${d?"bg-red-600 hover:bg-red-700":"bg-blue-600 hover:bg-blue-700"}`,children:o||c("common.delete")})]})]}),i.jsx("style",{children:` + `}),i.jsx("div",{style:{position:"fixed",bottom:24,left:"50%",transform:"translateX(-50%)",zIndex:9999,display:"flex",flexDirection:"column-reverse",gap:8,pointerEvents:"none",maxWidth:420,width:"100%",padding:"0 16px"},children:e.map(o=>i.jsxs("div",{className:"nomad-toast",style:{display:"flex",alignItems:"center",gap:10,padding:"10px 14px",borderRadius:14,backdropFilter:"blur(24px) saturate(180%)",WebkitBackdropFilter:"blur(24px) saturate(180%)",pointerEvents:"auto",animation:o.removing?"toast-out 0.35s ease forwards":"toast-in 0.35s cubic-bezier(0.16,1,0.3,1) forwards"},children:[r[o.type]||r.info,i.jsx("span",{style:{flex:1,fontSize:13,fontWeight:500,color:"rgba(255, 255, 255, 0.9)",lineHeight:1.4,fontFamily:"-apple-system, BlinkMacSystemFont, 'SF Pro Text', system-ui, sans-serif"},children:o.message}),i.jsx("button",{onClick:()=>n(o.id),className:"nomad-toast-close",style:{background:"none",border:"none",cursor:"pointer",display:"flex",padding:2,flexShrink:0,borderRadius:6,transition:"opacity 0.15s",opacity:.35},onMouseEnter:s=>s.currentTarget.style.opacity="0.7",onMouseLeave:s=>s.currentTarget.style.opacity="0.35",children:i.jsx(bt,{size:14})})]},o.id))})]})}const ba=()=>{const e=y.useCallback((t,a,n)=>{window.__addToast&&window.__addToast(t,a,n)},[]);return{success:(t,a)=>e(t,"success",a),error:(t,a)=>e(t,"error",a),warning:(t,a)=>e(t,"warning",a),info:(t,a)=>e(t,"info",a)}};function tI(e,t){if(!e)return"";const[a,n]=e.split(":").map(Number);if(isNaN(a)||isNaN(n)||!t)return e;const r=a>=12?"PM":"AM";return`${a===0?12:a>12?a-12:a}:${String(n).padStart(2,"0")} ${r}`}function ho({value:e,onChange:t,placeholder:a="00:00",style:n={}}){const r=na(D=>D.settings.time_format)==="12h",[o,s]=y.useState(!1),[d,c]=y.useState(!1),p=y.useRef(null),m=y.useRef(null),[g,f]=(e||"").split(":").map(Number),v=isNaN(g)?null:g,k=isNaN(f)?null:f;y.useEffect(()=>{const D=F=>{var R,E;(R=p.current)!=null&&R.contains(F.target)||(E=m.current)!=null&&E.contains(F.target)||s(!1)};return o&&document.addEventListener("mousedown",D),()=>document.removeEventListener("mousedown",D)},[o]);const x=(D,F)=>{const R=String(Math.max(0,Math.min(23,D))).padStart(2,"0"),E=String(Math.max(0,Math.min(59,F))).padStart(2,"0");t(`${R}:${E}`)},S=()=>x(((v??-1)+1)%24,k??0),b=()=>x(((v??1)-1+24)%24,k??0),w=()=>{const D=((k??-5)+5)%60,F=D<(k??0)?((v??0)+1)%24:v??0;x(F,D)},j=()=>{const D=((k??5)-5+60)%60,F=D>(k??0)?((v??0)-1+24)%24:v??0;x(F,D)},P={background:"none",border:"none",cursor:"pointer",padding:2,color:"var(--text-faint)",display:"flex",borderRadius:4,transition:"color 0.15s"},M=D=>{const F=D.target.value;if(t(F),r)return;const R=F.replace(/[^0-9:]/g,"");if(/^\d{2}:\d{2}$/.test(R))t(R);else if(/^\d{4}$/.test(R))t(R.slice(0,2)+":"+R.slice(2));else if(/^\d{1,2}:\d{2}$/.test(R)){const[E,ae]=R.split(":");t(E.padStart(2,"0")+":"+ae)}},N=()=>{if(!e)return;const D=e.trim();if(r){const R=D.match(/^(\d{1,2}):?(\d{2})?\s*(am|pm)$/i);if(R){let E=parseInt(R[1]);const ae=R[2]?parseInt(R[2]):0,B=R[3].toLowerCase()==="pm";E===12?E=B?12:0:B&&(E+=12),t(String(Math.min(23,E)).padStart(2,"0")+":"+String(Math.min(59,ae)).padStart(2,"0"));return}}const F=D.replace(/[^0-9:]/g,"");if(/^\d{1,2}:\d{2}$/.test(F)){const[R,E]=F.split(":"),ae=Math.min(23,Math.max(0,parseInt(R))),B=Math.min(59,Math.max(0,parseInt(E)));t(String(ae).padStart(2,"0")+":"+String(B).padStart(2,"0"))}else if(/^\d{3,4}$/.test(F)){const R=F.padStart(4,"0"),E=Math.min(23,Math.max(0,parseInt(R.slice(0,2)))),ae=Math.min(59,Math.max(0,parseInt(R.slice(2))));t(String(E).padStart(2,"0")+":"+String(ae).padStart(2,"0"))}else if(/^\d{1,2}$/.test(F)){const R=Math.min(23,Math.max(0,parseInt(F)));t(String(R).padStart(2,"0")+":00")}};return i.jsxs("div",{ref:p,style:{position:"relative",...n},children:[i.jsxs("div",{style:{width:"100%",display:"flex",alignItems:"center",gap:0,borderRadius:10,border:"1px solid var(--border-primary)",background:"var(--bg-input)",overflow:"hidden",transition:"border-color 0.15s"},children:[i.jsx("input",{type:"text",value:d?e:tI(e,r),onChange:M,onFocus:()=>c(!0),onBlur:()=>{c(!1),N()},placeholder:r?"2:30 PM":a,style:{flex:1,border:"none",outline:"none",background:"transparent",padding:"8px 10px 8px 14px",fontSize:13,fontFamily:"inherit",color:e?"var(--text-primary)":"var(--text-faint)",minWidth:0}}),i.jsx("button",{type:"button",onClick:()=>s(D=>!D),style:{background:"none",border:"none",cursor:"pointer",padding:"8px 10px",display:"flex",alignItems:"center",color:"var(--text-faint)",transition:"color 0.15s",flexShrink:0},onMouseEnter:D=>D.currentTarget.style.color="var(--text-primary)",onMouseLeave:D=>D.currentTarget.style.color="var(--text-faint)",children:i.jsx(In,{size:14})})]}),o&&Ut.createPortal(i.jsxs("div",{ref:m,style:{position:"fixed",top:(()=>{var F;const D=(F=p.current)==null?void 0:F.getBoundingClientRect();return D?D.bottom+4:0})(),left:(()=>{var F;const D=(F=p.current)==null?void 0:F.getBoundingClientRect();return D?D.left:0})(),zIndex:99999,background:"var(--bg-card)",border:"1px solid var(--border-primary)",borderRadius:12,boxShadow:"0 8px 32px rgba(0,0,0,0.12)",padding:12,display:"flex",alignItems:"center",gap:6,animation:"selectIn 0.15s ease-out",backdropFilter:"blur(24px)",WebkitBackdropFilter:"blur(24px)"},children:[i.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",gap:2},children:[i.jsx("button",{type:"button",onClick:S,style:P,onMouseEnter:D=>D.currentTarget.style.color="var(--text-primary)",onMouseLeave:D=>D.currentTarget.style.color="var(--text-faint)",children:i.jsx(dr,{size:16})}),i.jsx("div",{style:{width:44,height:40,display:"flex",alignItems:"center",justifyContent:"center",fontSize:22,fontWeight:700,color:"var(--text-primary)",background:"var(--bg-hover)",borderRadius:8,fontVariantNumeric:"tabular-nums"},children:v!==null?r?String(v===0?12:v>12?v-12:v):String(v).padStart(2,"0"):"--"}),i.jsx("button",{type:"button",onClick:b,style:P,onMouseEnter:D=>D.currentTarget.style.color="var(--text-primary)",onMouseLeave:D=>D.currentTarget.style.color="var(--text-faint)",children:i.jsx(Ja,{size:16})})]}),i.jsx("span",{style:{fontSize:22,fontWeight:700,color:"var(--text-faint)",marginTop:-2},children:":"}),i.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",gap:2},children:[i.jsx("button",{type:"button",onClick:w,style:P,onMouseEnter:D=>D.currentTarget.style.color="var(--text-primary)",onMouseLeave:D=>D.currentTarget.style.color="var(--text-faint)",children:i.jsx(dr,{size:16})}),i.jsx("div",{style:{width:44,height:40,display:"flex",alignItems:"center",justifyContent:"center",fontSize:22,fontWeight:700,color:"var(--text-primary)",background:"var(--bg-hover)",borderRadius:8,fontVariantNumeric:"tabular-nums"},children:k!==null?String(k).padStart(2,"0"):"--"}),i.jsx("button",{type:"button",onClick:j,style:P,onMouseEnter:D=>D.currentTarget.style.color="var(--text-primary)",onMouseLeave:D=>D.currentTarget.style.color="var(--text-faint)",children:i.jsx(Ja,{size:16})})]}),r&&v!==null&&i.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",gap:2,marginLeft:4},children:[i.jsx("button",{type:"button",onClick:()=>{v<12?x(v+12,k??0):x(v-12,k??0)},style:P,onMouseEnter:D=>D.currentTarget.style.color="var(--text-primary)",onMouseLeave:D=>D.currentTarget.style.color="var(--text-faint)",children:i.jsx(dr,{size:16})}),i.jsx("div",{style:{width:36,height:40,display:"flex",alignItems:"center",justifyContent:"center",fontSize:14,fontWeight:700,color:"var(--text-primary)",background:"var(--bg-hover)",borderRadius:8},children:v>=12?"PM":"AM"}),i.jsx("button",{type:"button",onClick:()=>{v<12?x(v+12,k??0):x(v-12,k??0)},style:P,onMouseEnter:D=>D.currentTarget.style.color="var(--text-primary)",onMouseLeave:D=>D.currentTarget.style.color="var(--text-faint)",children:i.jsx(Ja,{size:16})})]}),e&&i.jsx("button",{type:"button",onClick:()=>{t(""),s(!1)},style:{...P,marginLeft:4,fontSize:11,color:"var(--text-faint)",padding:"4px 6px"},onMouseEnter:D=>D.currentTarget.style.color="#ef4444",onMouseLeave:D=>D.currentTarget.style.color="var(--text-faint)",children:"✕"})]}),document.body),i.jsx("style",{children:"@keyframes selectIn { from { opacity: 0; transform: translateY(-4px); } to { opacity: 1; transform: translateY(0); } }"})]})}function aI(e,t){return new Date(e,t+1,0).getDate()}function nI(e,t,a){return new Date(e,t,a).getDay()}function mc({value:e,onChange:t,placeholder:a,style:n={},compact:r=!1,borderless:o=!1}){const{locale:s,t:d}=lt(),[c,p]=y.useState(!1),m=y.useRef(null),g=y.useRef(null),f=e?new Date(e+"T00:00:00"):null,[v,k]=y.useState((f==null?void 0:f.getFullYear())||new Date().getFullYear()),[x,S]=y.useState((f==null?void 0:f.getMonth())??new Date().getMonth());y.useEffect(()=>{const O=$=>{var U,T;(U=m.current)!=null&&U.contains($.target)||(T=g.current)!=null&&T.contains($.target)||p(!1)};return c&&document.addEventListener("mousedown",O),()=>document.removeEventListener("mousedown",O)},[c]),y.useEffect(()=>{c&&f&&(k(f.getFullYear()),S(f.getMonth()))},[c]);const b=()=>{x===0?(S(11),k(O=>O-1)):S(O=>O-1)},w=()=>{x===11?(S(0),k(O=>O+1)):S(O=>O+1)},j=new Date(v,x).toLocaleDateString(s,{month:"long",year:"numeric"}),P=aI(v,x),M=(nI(v,x,1)+6)%7,N=Array.from({length:7},(O,$)=>new Date(2024,0,$+1).toLocaleDateString(s,{weekday:"narrow"})),D=f?f.toLocaleDateString(s,r?{day:"2-digit",month:"2-digit",year:"2-digit"}:{day:"numeric",month:"short",year:"numeric"}):null,F=O=>{const $=String(v),U=String(x+1).padStart(2,"0"),T=String(O).padStart(2,"0");t(`${$}-${U}-${T}`),p(!1)},R=f&&f.getFullYear()===v&&f.getMonth()===x?f.getDate():null,E=new Date,ae=O=>E.getFullYear()===v&&E.getMonth()===x&&E.getDate()===O,[B,K]=y.useState(""),[le,de]=y.useState(!1),me=()=>{if(de(!1),!B.trim())return;const O=B.trim();if(/^\d{4}-\d{2}-\d{2}$/.test(O)){t(O);return}const $=O.match(/^(\d{1,2})[./](\d{1,2})[./](\d{2,4})$/);if($){const T=$[3].length===2?2e3+parseInt($[3]):parseInt($[3]);t(`${T}-${String($[2]).padStart(2,"0")}-${String($[1]).padStart(2,"0")}`);return}const U=new Date(O);isNaN(U.getTime())||t(`${U.getFullYear()}-${String(U.getMonth()+1).padStart(2,"0")}-${String(U.getDate()).padStart(2,"0")}`)};return i.jsxs("div",{ref:m,style:{position:"relative",...n},children:[le?i.jsx("input",{autoFocus:!0,type:"text",value:B,onChange:O=>K(O.target.value),onKeyDown:O=>{O.key==="Enter"&&me(),O.key==="Escape"&&de(!1)},onBlur:me,placeholder:"DD.MM.YYYY",style:{width:"100%",padding:"8px 14px",borderRadius:10,border:"1px solid var(--text-faint)",background:"var(--bg-input)",color:"var(--text-primary)",fontSize:13,fontFamily:"inherit",outline:"none"}}):i.jsxs("button",{type:"button",onClick:()=>p(O=>!O),onDoubleClick:()=>{K(e||""),de(!0)},style:{width:"100%",display:"flex",alignItems:"center",justifyContent:"center",gap:r?4:8,padding:r?"4px 6px":"8px 14px",borderRadius:r?4:10,border:o?"none":"1px solid var(--border-primary)",background:o?"transparent":"var(--bg-input)",color:D?"var(--text-primary)":"var(--text-faint)",fontSize:13,fontFamily:"inherit",cursor:"pointer",outline:"none",transition:"border-color 0.15s"},onMouseEnter:O=>O.currentTarget.style.borderColor="var(--text-faint)",onMouseLeave:O=>{c||(O.currentTarget.style.borderColor="var(--border-primary)")},children:[!r&&i.jsx(Or,{size:14,style:{color:"var(--text-faint)",flexShrink:0}}),i.jsx("span",{style:{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:D||a||d("common.date")})]}),c&&Ut.createPortal(i.jsxs("div",{ref:g,style:{position:"fixed",...(()=>{var I;const O=(I=m.current)==null?void 0:I.getBoundingClientRect();if(!O)return{top:0,left:0};const $=268,U=8,T=window.innerWidth,ce=window.innerHeight;let q=O.left,A=O.bottom+4;return q+$>T-U&&(q=Math.max(U,T-$-U)),A+320>ce&&(A=Math.max(U,O.top-320)),T<360&&(q=Math.max(U,(T-$)/2)),{top:A,left:q}})(),zIndex:99999,background:"var(--bg-card)",border:"1px solid var(--border-primary)",borderRadius:14,boxShadow:"0 8px 32px rgba(0,0,0,0.12)",padding:12,width:268,maxWidth:"calc(100vw - 16px)",animation:"selectIn 0.15s ease-out",backdropFilter:"blur(24px)",WebkitBackdropFilter:"blur(24px)"},children:[i.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:10},children:[i.jsx("button",{type:"button",onClick:b,style:{background:"none",border:"none",cursor:"pointer",padding:4,borderRadius:6,display:"flex",color:"var(--text-faint)"},onMouseEnter:O=>O.currentTarget.style.color="var(--text-primary)",onMouseLeave:O=>O.currentTarget.style.color="var(--text-faint)",children:i.jsx(Nj,{size:16})}),i.jsx("span",{style:{fontSize:13,fontWeight:600,color:"var(--text-primary)"},children:j}),i.jsx("button",{type:"button",onClick:w,style:{background:"none",border:"none",cursor:"pointer",padding:4,borderRadius:6,display:"flex",color:"var(--text-faint)"},onMouseEnter:O=>O.currentTarget.style.color="var(--text-primary)",onMouseLeave:O=>O.currentTarget.style.color="var(--text-faint)",children:i.jsx(Fo,{size:16})})]}),i.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(7, 1fr)",gap:2,marginBottom:4},children:N.map((O,$)=>i.jsx("div",{style:{textAlign:"center",fontSize:10,fontWeight:600,color:"var(--text-faint)",padding:"2px 0"},children:O},$))}),i.jsxs("div",{style:{display:"grid",gridTemplateColumns:"repeat(7, 1fr)",gap:2},children:[Array.from({length:M},(O,$)=>i.jsx("div",{},`e-${$}`)),Array.from({length:P},(O,$)=>{const U=$+1,T=U===R,ce=ae(U);return i.jsx("button",{type:"button",onClick:()=>F(U),style:{width:32,height:32,borderRadius:8,border:"none",background:T?"var(--accent)":"transparent",color:T?"var(--accent-text)":"var(--text-primary)",fontSize:12,fontWeight:T?700:ce?600:400,cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",outline:ce&&!T?"2px solid var(--border-primary)":"none",outlineOffset:-2,transition:"background 0.1s"},onMouseEnter:q=>{T||(q.currentTarget.style.background="var(--bg-hover)")},onMouseLeave:q=>{T||(q.currentTarget.style.background="transparent")},children:U},U)})]}),e&&i.jsx("div",{style:{marginTop:8,display:"flex",justifyContent:"center"},children:i.jsx("button",{type:"button",onClick:()=>{t(""),p(!1)},style:{background:"none",border:"none",cursor:"pointer",fontSize:11,color:"var(--text-faint)",padding:"3px 8px",borderRadius:6},onMouseEnter:O=>O.currentTarget.style.color="#ef4444",onMouseLeave:O=>O.currentTarget.style.color="var(--text-faint)",children:"✕"})})]}),document.body),i.jsx("style",{children:"@keyframes selectIn { from { opacity: 0; transform: translateY(-4px); } to { opacity: 1; transform: translateY(0); } }"})]})}function Gj({isOpen:e,onClose:t,onSave:a,trip:n,onCoverUpdate:r}){const o=!!n,s=y.useRef(null),d=ba(),{t:c}=lt(),p=Na(H=>H.user),m=Na(H=>H.tripRemindersEnabled),g=Na(H=>H.setTripRemindersEnabled),f=zn(),v=!o||f("trip_cover_upload",n),k=!o||f("trip_edit",n),[x,S]=y.useState({title:"",description:"",start_date:"",end_date:"",reminder_days:0}),[b,w]=y.useState(!1),[j,P]=y.useState(""),[M,N]=y.useState(!1),[D,F]=y.useState(null),[R,E]=y.useState(null),[ae,B]=y.useState(!1),[K,le]=y.useState([]),[de,me]=y.useState([]),[O,$]=y.useState("");y.useEffect(()=>{if(n){const H=n.reminder_days??3;S({title:n.title||"",description:n.description||"",start_date:n.start_date||"",end_date:n.end_date||"",reminder_days:H}),w(![0,1,3,9].includes(H)),F(n.cover_image||null)}else S({title:"",description:"",start_date:"",end_date:"",reminder_days:m?3:0}),w(!1),F(null);E(null),me([]),P(""),e&&kt.getAppConfig().then(H=>{(H==null?void 0:H.trip_reminders_enabled)!==void 0&&g(H.trip_reminders_enabled)}).catch(()=>{}),n||kt.listUsers().then(H=>le(H.users||[])).catch(()=>{})},[n,e]),y.useEffect(()=>{!n&&e&&S(H=>({...H,reminder_days:m?3:0}))},[m]);const U=async H=>{var ne,ge;if(H.preventDefault(),P(""),!x.title.trim()){P(c("dashboard.titleRequired"));return}if(x.start_date&&x.end_date&&new Date(x.end_date)0&&((ne=oe==null?void 0:oe.trip)!=null&&ne.id))for(const Y of de){const X=K.find(he=>he.id===Y);if(X)try{await Va.addMember(oe.trip.id,X.username)}catch{}}if(R&&((ge=oe==null?void 0:oe.trip)!=null&&ge.id))try{const Y=new FormData;Y.append("cover",R);const X=await Va.uploadCover(oe.trip.id,Y);r==null||r(oe.trip.id,X.cover_image)}catch{}t()}catch(oe){P(oe instanceof Error?oe.message:c("places.saveError"))}finally{N(!1)}},T=H=>{H&&(o&&(n!=null&&n.id)?q(H):(E(H),F(URL.createObjectURL(H))))},ce=H=>{var ne;T((ne=H.target.files)==null?void 0:ne[0]),H.target.value=""},q=async H=>{B(!0);try{const ne=new FormData;ne.append("cover",H);const ge=await Va.uploadCover(n.id,ne);F(ge.cover_image),r==null||r(n.id,ge.cover_image),d.success(c("dashboard.coverSaved"))}catch{d.error(c("dashboard.coverUploadError"))}finally{B(!1)}},A=async()=>{if(R){E(null),F(null);return}if(n!=null&&n.id)try{await Va.update(n.id,{cover_image:null}),F(null),r==null||r(n.id,null)}catch{d.error(c("dashboard.coverRemoveError"))}},I=H=>{var ge;if(!v)return;const ne=(ge=H.clipboardData)==null?void 0:ge.items;if(ne){for(const oe of Array.from(ne))if(oe.type.startsWith("image/")){H.preventDefault();const Y=oe.getAsFile();Y&&T(Y);return}}},ee=(H,ne)=>S(ge=>{const oe={...ge,[H]:ne};if(H==="start_date"&&ne){if(!ge.end_date||ge.end_date{var H;return(H=s.current)==null?void 0:H.click()},disabled:ae,style:{display:"flex",alignItems:"center",gap:4,padding:"5px 10px",borderRadius:8,background:"rgba(0,0,0,0.55)",border:"none",color:"white",fontSize:11.5,fontWeight:600,cursor:"pointer",backdropFilter:"blur(4px)"},children:[i.jsx(Hi,{size:12})," ",c(ae?"common.uploading":"common.change")]}),i.jsx("button",{type:"button",onClick:A,style:{display:"flex",alignItems:"center",padding:"5px 8px",borderRadius:8,background:"rgba(0,0,0,0.55)",border:"none",color:"white",cursor:"pointer",backdropFilter:"blur(4px)"},children:i.jsx(bt,{size:12})})]})]}):i.jsxs("button",{type:"button",onClick:()=>{var H;return(H=s.current)==null?void 0:H.click()},disabled:ae,onDragOver:H=>{H.preventDefault(),H.currentTarget.style.borderColor="#6366f1",H.currentTarget.style.background="rgba(99,102,241,0.04)"},onDragLeave:H=>{H.currentTarget.style.borderColor="#e5e7eb",H.currentTarget.style.background="none"},onDrop:H=>{var ge;H.preventDefault(),H.currentTarget.style.borderColor="#e5e7eb",H.currentTarget.style.background="none";const ne=(ge=H.dataTransfer.files)==null?void 0:ge[0];ne!=null&&ne.type.startsWith("image/")&&T(ne)},style:{width:"100%",padding:"18px",border:"2px dashed #e5e7eb",borderRadius:10,background:"none",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",gap:6,fontSize:13,color:"#9ca3af",fontFamily:"inherit",transition:"all 0.15s"},onMouseEnter:H=>{H.currentTarget.style.borderColor="#d1d5db",H.currentTarget.style.color="#6b7280"},onMouseLeave:H=>{H.currentTarget.style.borderColor="#e5e7eb",H.currentTarget.style.color="#9ca3af"},children:[i.jsx(Hi,{size:15})," ",c(ae?"common.uploading":"dashboard.addCoverImage")]})]}),i.jsxs("div",{children:[i.jsxs("label",{className:"block text-sm font-medium text-slate-700 mb-1.5",children:[c("dashboard.tripTitle")," ",i.jsx("span",{className:"text-red-500",children:"*"})]}),i.jsx("input",{type:"text",value:x.title,onChange:H=>k&&ee("title",H.target.value),required:!0,readOnly:!k,placeholder:c("dashboard.tripTitlePlaceholder"),className:pe})]}),i.jsxs("div",{children:[i.jsx("label",{className:"block text-sm font-medium text-slate-700 mb-1.5",children:c("dashboard.tripDescription")}),i.jsx("textarea",{value:x.description,onChange:H=>k&&ee("description",H.target.value),readOnly:!k,placeholder:c("dashboard.tripDescriptionPlaceholder"),rows:3,className:`${pe} resize-none`})]}),i.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[i.jsxs("div",{children:[i.jsxs("label",{className:"block text-sm font-medium text-slate-700 mb-1.5",children:[i.jsx(Or,{className:"inline w-4 h-4 mr-1"}),c("dashboard.startDate")]}),i.jsx(mc,{value:x.start_date,onChange:H=>ee("start_date",H),placeholder:c("dashboard.startDate")})]}),i.jsxs("div",{children:[i.jsxs("label",{className:"block text-sm font-medium text-slate-700 mb-1.5",children:[i.jsx(Or,{className:"inline w-4 h-4 mr-1"}),c("dashboard.endDate")]}),i.jsx(mc,{value:x.end_date,onChange:H=>ee("end_date",H),placeholder:c("dashboard.endDate")})]})]}),(!o||(n==null?void 0:n.user_id)===(p==null?void 0:p.id)||(p==null?void 0:p.role)==="admin")&&i.jsxs("div",{className:m?"":"opacity-50",children:[i.jsxs("label",{className:"block text-sm font-medium text-slate-700 mb-1.5",children:[i.jsx(HM,{className:"inline w-4 h-4 mr-1"}),c("trips.reminder")]}),m?i.jsxs(i.Fragment,{children:[i.jsxs("div",{className:"flex flex-wrap gap-2",children:[[{value:0,label:c("trips.reminderNone")},{value:1,label:`1 ${c("trips.reminderDay")}`},{value:3,label:`3 ${c("trips.reminderDays")}`},{value:9,label:`9 ${c("trips.reminderDays")}`}].map(H=>i.jsx("button",{type:"button",onClick:()=>{ee("reminder_days",H.value),w(!1)},className:`px-3 py-1.5 text-xs font-medium rounded-lg border transition-colors ${!b&&x.reminder_days===H.value?"bg-slate-900 text-white border-slate-900":"bg-white text-slate-600 border-slate-200 hover:border-slate-300"}`,children:H.label},H.value)),i.jsx("button",{type:"button",onClick:()=>{w(!0),[0,1,3,9].includes(x.reminder_days)&&ee("reminder_days",7)},className:`px-3 py-1.5 text-xs font-medium rounded-lg border transition-colors ${b?"bg-slate-900 text-white border-slate-900":"bg-white text-slate-600 border-slate-200 hover:border-slate-300"}`,children:c("trips.reminderCustom")})]}),b&&i.jsxs("div",{className:"flex items-center gap-2 mt-2",children:[i.jsx("input",{type:"number",min:1,max:30,value:x.reminder_days,onChange:H=>ee("reminder_days",Math.max(1,Math.min(30,Number(H.target.value)||1))),className:"w-20 px-3 py-1.5 border border-slate-200 rounded-lg text-sm text-slate-900 focus:outline-none focus:ring-2 focus:ring-slate-300"}),i.jsx("span",{className:"text-xs text-slate-500",children:c("trips.reminderDaysBefore")})]})]}):i.jsx("p",{className:"text-xs text-slate-400 bg-slate-50 rounded-lg p-3",children:c("trips.reminderDisabledHint")})]}),!o&&K.filter(H=>H.id!==(p==null?void 0:p.id)).length>0&&i.jsxs("div",{children:[i.jsxs("label",{className:"block text-sm font-medium text-slate-700 mb-1.5",children:[i.jsx(Rc,{className:"inline w-4 h-4 mr-1"}),c("dashboard.addMembers")]}),de.length>0&&i.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:6,marginBottom:8},children:de.map(H=>{const ne=K.find(ge=>ge.id===H);return ne?i.jsxs("span",{onClick:()=>me(ge=>ge.filter(oe=>oe!==H)),style:{display:"flex",alignItems:"center",gap:5,padding:"4px 10px",borderRadius:99,background:"var(--bg-secondary)",fontSize:12,fontWeight:500,color:"var(--text-primary)",cursor:"pointer",border:"1px solid var(--border-primary)"},children:[ne.username,i.jsx(bt,{size:11,style:{color:"var(--text-faint)"}})]},H):null})}),i.jsx("div",{style:{display:"flex",gap:8},children:i.jsx(Qt,{value:O,onChange:H=>{H&&(me(ne=>ne.includes(Number(H))?ne:[...ne,Number(H)]),$(""))},placeholder:c("dashboard.addMember"),options:K.filter(H=>H.id!==(p==null?void 0:p.id)&&!de.includes(H.id)).map(H=>({value:H.id,label:H.username})),searchable:!0,size:"sm"})})]})]})})}function Zj({isOpen:e,onClose:t,onConfirm:a,title:n,message:r,confirmLabel:o,cancelLabel:s,danger:d=!0}){const{t:c}=lt(),p=y.useCallback(m=>{m.key==="Escape"&&t()},[t]);return y.useEffect(()=>(e&&document.addEventListener("keydown",p),()=>document.removeEventListener("keydown",p)),[e,p]),e?i.jsxs("div",{className:"fixed inset-0 z-[60] flex items-center justify-center px-4",style:{backgroundColor:"rgba(15, 23, 42, 0.5)"},onClick:t,children:[i.jsxs("div",{className:"rounded-2xl shadow-2xl w-full max-w-sm p-6",style:{animation:"modalIn 0.2s ease-out forwards",background:"var(--bg-card)"},onClick:m=>m.stopPropagation(),children:[i.jsxs("div",{className:"flex items-start gap-4",children:[d&&i.jsx("div",{className:"flex-shrink-0 w-10 h-10 rounded-full bg-red-100 flex items-center justify-center",children:i.jsx(ur,{className:"w-5 h-5 text-red-600"})}),i.jsxs("div",{className:"flex-1",children:[i.jsx("h3",{className:"text-base font-semibold",style:{color:"var(--text-primary)"},children:n||c("common.confirm")}),i.jsx("p",{className:"mt-1 text-sm",style:{color:"var(--text-secondary)"},children:r})]})]}),i.jsxs("div",{className:"flex justify-end gap-3 mt-6",children:[i.jsx("button",{onClick:t,className:"px-4 py-2 text-sm font-medium rounded-lg transition-colors",style:{color:"var(--text-secondary)",border:"1px solid var(--border-secondary)"},children:s||c("common.cancel")}),i.jsx("button",{onClick:()=>{a(),t()},className:`px-4 py-2 text-sm font-medium rounded-lg transition-colors text-white ${d?"bg-red-600 hover:bg-red-700":"bg-blue-600 hover:bg-blue-700"}`,children:o||c("common.delete")})]})]}),i.jsx("style",{children:` @keyframes modalIn { from { opacity: 0; transform: scale(0.95) translateY(-10px); } to { opacity: 1; transform: scale(1) translateY(0); } } - `})]}):null}const nI={fontFamily:"-apple-system, BlinkMacSystemFont, 'SF Pro Text', system-ui, sans-serif"},iI=864e5;function Xm(e){if(!e)return null;const t=new Date;t.setHours(0,0,0,0);const a=new Date(e+"T00:00:00");return a.setHours(0,0,0,0),Math.round((a-t)/iI)}function tb(e){const t=new Date().toISOString().split("T")[0];if(e.start_date&&e.end_date&&e.start_date<=t&&e.end_date>=t)return"ongoing";const a=Xm(e.start_date);return a===null?null:a===0?"today":a===1?"tomorrow":a>1?"future":"past"}function rI(e,t="en-US"){return e?new Date(e+"T00:00:00").toLocaleDateString(t,{day:"numeric",month:"short",year:"numeric"}):null}function Ao(e,t="en-US"){return e?new Date(e+"T00:00:00").toLocaleDateString(t,{day:"numeric",month:"short"}):null}function Ws(e){const t=new Date().toISOString().split("T")[0];function a(n){return n.start_date&&n.end_date&&n.start_date<=t&&n.end_date>=t?0:n.start_date&&n.start_date>=t?1:2}return[...e].sort((n,r)=>{const o=a(n),s=a(r);if(o!==s)return o-s;const d=n.start_date||"",c=r.start_date||"";return o<=1?d.localeCompare(c):c.localeCompare(d)})}const H0=["linear-gradient(135deg, #667eea 0%, #764ba2 100%)","linear-gradient(135deg, #f093fb 0%, #f5576c 100%)","linear-gradient(135deg, #4facfe 0%, #00f2fe 100%)","linear-gradient(135deg, #43e97b 0%, #38f9d7 100%)","linear-gradient(135deg, #fa709a 0%, #fee140 100%)","linear-gradient(135deg, #a18cd1 0%, #fbc2eb 100%)","linear-gradient(135deg, #ffecd2 0%, #fcb69f 100%)","linear-gradient(135deg, #96fbc4 0%, #f9f586 100%)"];function Jm(e){return H0[e%H0.length]}function tv({children:e,dark:t,style:a,className:n="",onClick:r}){const o=y.useRef(null),s=y.useRef(null),d=y.useRef(null),c=m=>{if(!o.current||!s.current||!d.current)return;const g=o.current.getBoundingClientRect(),f=m.clientX-g.left,v=m.clientY-g.top;s.current.style.background=`radial-gradient(circle 250px at ${f}px ${v}px, ${t?"rgba(255,255,255,0.04)":"rgba(0,0,0,0.03)"} 0%, transparent 70%)`,s.current.style.opacity="1",d.current.style.opacity="1",d.current.style.maskImage=`radial-gradient(circle 120px at ${f}px ${v}px, black 0%, transparent 100%)`,d.current.style.WebkitMaskImage=`radial-gradient(circle 120px at ${f}px ${v}px, black 0%, transparent 100%)`},p=()=>{s.current&&(s.current.style.opacity="0"),d.current&&(d.current.style.opacity="0")};return i.jsxs("div",{ref:o,onMouseMove:c,onMouseLeave:p,onClick:r,className:n,style:{position:"relative",overflow:"hidden",...a},children:[i.jsx("div",{ref:s,style:{position:"absolute",inset:0,pointerEvents:"none",opacity:0,transition:"opacity 0.3s",borderRadius:"inherit",zIndex:1}}),i.jsx("div",{ref:d,style:{position:"absolute",inset:0,pointerEvents:"none",opacity:0,transition:"opacity 0.3s",borderRadius:"inherit",zIndex:1,border:t?"1.5px solid rgba(255,255,255,0.4)":"1.5px solid rgba(0,0,0,0.12)"}}),e]})}function oI({trip:e,onEdit:t,onDelete:a,onArchive:n,onClick:r,t:o,locale:s,dark:d}){const c=tb(e),p=e.cover_image?`url(${e.cover_image}) center/cover no-repeat`:Jm(e.id);return i.jsx(tv,{dark:d,style:{marginBottom:32,borderRadius:20,boxShadow:"0 8px 40px rgba(0,0,0,0.13)",cursor:"pointer"},onClick:()=>r(e),children:i.jsxs("div",{style:{height:300,background:p,position:"relative"},children:[i.jsx("div",{style:{position:"absolute",inset:0,background:"linear-gradient(to top, rgba(0,0,0,0.78) 0%, rgba(0,0,0,0.25) 50%, rgba(0,0,0,0.1) 100%)"}}),i.jsx("div",{style:{position:"absolute",top:16,left:16,display:"flex",gap:8},children:c&&i.jsxs("span",{style:{background:"rgba(255,255,255,0.15)",backdropFilter:"blur(8px)",color:"white",fontSize:12,fontWeight:700,padding:"5px 12px",borderRadius:99,border:"1px solid rgba(255,255,255,0.25)",display:"flex",alignItems:"center",gap:6},children:[c==="ongoing"&&i.jsx("span",{style:{width:7,height:7,borderRadius:"50%",background:"#ef4444",animation:"blink 1s ease-in-out infinite",display:"inline-block",flexShrink:0}}),c==="ongoing"?o("dashboard.status.ongoing"):c==="today"?o("dashboard.status.today"):c==="tomorrow"?o("dashboard.status.tomorrow"):c==="future"?o("dashboard.status.daysLeft",{count:Xm(e.start_date)}):o("dashboard.status.past")]})}),(t||n||a)&&i.jsxs("div",{style:{position:"absolute",top:16,right:16,display:"flex",gap:6},onClick:m=>m.stopPropagation(),children:[t&&i.jsx(ch,{onClick:()=>t(e),title:o("common.edit"),children:i.jsx(Dr,{size:14})}),n&&i.jsx(ch,{onClick:()=>n(e.id),title:o("dashboard.archive"),children:i.jsx(Bm,{size:14})}),a&&i.jsx(ch,{onClick:()=>a(e),title:o("common.delete"),danger:!0,children:i.jsx(Ct,{size:14})})]}),i.jsxs("div",{style:{position:"absolute",bottom:0,left:0,right:0,padding:"20px 24px"},children:[i.jsx("div",{style:{fontSize:11,fontWeight:600,color:"rgba(255,255,255,0.65)",textTransform:"uppercase",letterSpacing:"0.08em",marginBottom:6},children:e.is_owner?o("dashboard.nextTrip"):o("dashboard.sharedBy",{name:e.owner_username})}),i.jsx("h2",{style:{margin:0,fontSize:26,fontWeight:800,color:"white",lineHeight:1.2,textShadow:"0 1px 4px rgba(0,0,0,0.3)"},children:e.title}),e.description&&i.jsx("p",{style:{margin:"6px 0 0",fontSize:13.5,color:"rgba(255,255,255,0.75)",lineHeight:1.4,overflow:"hidden",display:"-webkit-box",WebkitLineClamp:2,WebkitBoxOrient:"vertical"},children:e.description}),i.jsxs("div",{style:{display:"flex",alignItems:"center",gap:16,marginTop:12},children:[e.start_date&&i.jsxs("div",{style:{display:"flex",alignItems:"center",gap:5,color:"rgba(255,255,255,0.8)",fontSize:13},children:[i.jsx(Or,{size:13}),Ao(e.start_date,s),e.end_date&&i.jsxs(i.Fragment,{children:[" — ",Ao(e.end_date,s)]})]}),i.jsxs("div",{style:{display:"flex",alignItems:"center",gap:5,color:"rgba(255,255,255,0.8)",fontSize:13},children:[i.jsx(In,{size:13})," ",e.day_count||0," ",o("dashboard.days")]}),i.jsxs("div",{style:{display:"flex",alignItems:"center",gap:5,color:"rgba(255,255,255,0.8)",fontSize:13},children:[i.jsx(Qa,{size:13})," ",e.place_count||0," ",o("dashboard.places")]})]})]})]})})}function sI({trip:e,onEdit:t,onDelete:a,onArchive:n,onClick:r,t:o,locale:s}){const d=tb(e),[c,p]=y.useState(!1),m=e.cover_image?`url(${e.cover_image}) center/cover no-repeat`:Jm(e.id);return i.jsxs("div",{onMouseEnter:()=>p(!0),onMouseLeave:()=>p(!1),onClick:()=>r(e),style:{background:c?"var(--bg-tertiary)":"var(--bg-card)",borderRadius:16,overflow:"hidden",cursor:"pointer",border:`1px solid ${c?"var(--text-faint)":"var(--border-primary)"}`,transition:"all 0.18s",boxShadow:c?"0 8px 28px rgba(0,0,0,0.15)":"0 1px 4px rgba(0,0,0,0.04)",transform:c?"translateY(-2px)":"none"},children:[i.jsxs("div",{style:{height:120,background:m,position:"relative",overflow:"hidden"},children:[e.cover_image&&i.jsx("div",{style:{position:"absolute",inset:0,background:"linear-gradient(to top, rgba(0,0,0,0.35) 0%, transparent 60%)"}}),d&&i.jsx("div",{style:{position:"absolute",top:8,left:8},children:i.jsxs("span",{style:{fontSize:10.5,fontWeight:700,padding:"2px 8px",borderRadius:99,background:"rgba(0,0,0,0.4)",color:"white",backdropFilter:"blur(4px)",display:"flex",alignItems:"center",gap:5},children:[d==="ongoing"&&i.jsx("span",{style:{width:6,height:6,borderRadius:"50%",background:"#ef4444",animation:"blink 1s ease-in-out infinite",display:"inline-block",flexShrink:0}}),d==="ongoing"?o("dashboard.status.ongoing"):d==="today"?o("dashboard.status.today"):d==="tomorrow"?o("dashboard.status.tomorrow"):d==="future"?o("dashboard.status.daysLeft",{count:Xm(e.start_date)}):o("dashboard.status.past")]})})]}),i.jsxs("div",{style:{padding:"12px 14px 14px"},children:[i.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,overflow:"hidden",marginBottom:3},children:[i.jsx("span",{style:{fontWeight:700,fontSize:14,color:"var(--text-primary)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.title}),!e.is_owner&&i.jsx("span",{style:{fontSize:10,fontWeight:600,color:"var(--text-muted)",background:"var(--bg-tertiary)",padding:"1px 6px",borderRadius:99,whiteSpace:"nowrap",flexShrink:0},children:o("dashboard.shared")})]}),e.description&&i.jsx("p",{style:{fontSize:12,color:"var(--text-faint)",margin:"0 0 8px",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.description}),(e.start_date||e.end_date)&&i.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4,fontSize:12,color:"var(--text-muted)",marginBottom:10},children:[i.jsx(Or,{size:11,style:{flexShrink:0}}),e.start_date&&e.end_date?`${Ao(e.start_date,s)} — ${Ao(e.end_date,s)}`:rI(e.start_date||e.end_date,s)]}),i.jsxs("div",{style:{display:"flex",gap:8,marginBottom:10},children:[i.jsx(W0,{label:o("dashboard.days"),value:e.day_count||0}),i.jsx(W0,{label:o("dashboard.places"),value:e.place_count||0})]}),(t||n||a)&&i.jsxs("div",{style:{display:"flex",gap:6,borderTop:"1px solid #f3f4f6",paddingTop:10},onClick:g=>g.stopPropagation(),children:[t&&i.jsx(xl,{onClick:()=>t(e),icon:i.jsx(Dr,{size:12}),label:o("common.edit")}),n&&i.jsx(xl,{onClick:()=>n(e.id),icon:i.jsx(Bm,{size:12}),label:o("dashboard.archive")}),a&&i.jsx(xl,{onClick:()=>a(e),icon:i.jsx(Ct,{size:12}),label:o("common.delete"),danger:!0})]})]})]})}function lI({trip:e,onEdit:t,onDelete:a,onArchive:n,onClick:r,t:o,locale:s}){const d=tb(e),[c,p]=y.useState(!1),m=e.cover_image?`url(${e.cover_image}) center/cover no-repeat`:Jm(e.id);return i.jsxs("div",{onMouseEnter:()=>p(!0),onMouseLeave:()=>p(!1),onClick:()=>r(e),style:{display:"flex",alignItems:"center",gap:14,padding:"10px 16px",background:c?"var(--bg-tertiary)":"var(--bg-card)",borderRadius:14,border:`1px solid ${c?"var(--text-faint)":"var(--border-primary)"}`,cursor:"pointer",transition:"all 0.15s",boxShadow:c?"0 4px 16px rgba(0,0,0,0.08)":"0 1px 3px rgba(0,0,0,0.03)"},children:[i.jsx("div",{style:{width:52,height:52,borderRadius:12,flexShrink:0,background:m,position:"relative",overflow:"hidden"},children:d==="ongoing"&&i.jsx("span",{style:{position:"absolute",top:4,left:4,width:7,height:7,borderRadius:"50%",background:"#ef4444",animation:"blink 1s ease-in-out infinite"}})}),i.jsxs("div",{style:{flex:1,minWidth:0},children:[i.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[i.jsx("span",{style:{fontWeight:700,fontSize:14,color:"var(--text-primary)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.title}),!e.is_owner&&i.jsx("span",{style:{fontSize:10,fontWeight:600,color:"var(--text-muted)",background:"var(--bg-tertiary)",padding:"1px 6px",borderRadius:99,whiteSpace:"nowrap",flexShrink:0},children:o("dashboard.shared")}),d&&i.jsx("span",{style:{fontSize:10,fontWeight:700,padding:"1px 8px",borderRadius:99,background:d==="ongoing"?"rgba(239,68,68,0.1)":"var(--bg-tertiary)",color:d==="ongoing"?"#ef4444":"var(--text-muted)",whiteSpace:"nowrap",flexShrink:0},children:d==="ongoing"?o("dashboard.status.ongoing"):d==="today"?o("dashboard.status.today"):d==="tomorrow"?o("dashboard.status.tomorrow"):d==="future"?o("dashboard.status.daysLeft",{count:Xm(e.start_date)}):o("dashboard.status.past")})]}),e.description&&i.jsx("p",{style:{fontSize:12,color:"var(--text-faint)",margin:"2px 0 0",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.description})]}),i.jsxs("div",{style:{display:"flex",alignItems:"center",gap:16,flexShrink:0},children:[e.start_date&&i.jsxs("div",{className:"hidden sm:flex",style:{alignItems:"center",gap:4,fontSize:12,color:"var(--text-muted)"},children:[i.jsx(Or,{size:11}),Ao(e.start_date,s),e.end_date&&i.jsxs(i.Fragment,{children:[" — ",Ao(e.end_date,s)]})]}),i.jsxs("div",{className:"hidden md:flex",style:{alignItems:"center",gap:4,fontSize:12,color:"var(--text-muted)"},children:[i.jsx(In,{size:11})," ",e.day_count||0]}),i.jsxs("div",{className:"hidden md:flex",style:{alignItems:"center",gap:4,fontSize:12,color:"var(--text-muted)"},children:[i.jsx(Qa,{size:11})," ",e.place_count||0]})]}),(t||n||a)&&i.jsxs("div",{style:{display:"flex",gap:4,flexShrink:0},onClick:g=>g.stopPropagation(),children:[t&&i.jsx(xl,{onClick:()=>t(e),icon:i.jsx(Dr,{size:12}),label:""}),n&&i.jsx(xl,{onClick:()=>n(e.id),icon:i.jsx(Bm,{size:12}),label:""}),a&&i.jsx(xl,{onClick:()=>a(e),icon:i.jsx(Ct,{size:12}),label:"",danger:!0})]})]})}function dI({trip:e,onEdit:t,onUnarchive:a,onDelete:n,onClick:r,t:o,locale:s}){return i.jsxs("div",{onClick:()=>r(e),style:{display:"flex",alignItems:"center",gap:12,padding:"10px 16px",borderRadius:12,border:"1px solid var(--border-faint)",background:"var(--bg-card)",cursor:"pointer",transition:"border-color 0.12s"},onMouseEnter:d=>d.currentTarget.style.borderColor="var(--border-primary)",onMouseLeave:d=>d.currentTarget.style.borderColor="var(--border-faint)",children:[i.jsx("div",{style:{width:40,height:40,borderRadius:10,flexShrink:0,background:e.cover_image?`url(${e.cover_image}) center/cover no-repeat`:Jm(e.id),opacity:.7}}),i.jsxs("div",{style:{flex:1,minWidth:0},children:[i.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[i.jsx("span",{style:{fontSize:13,fontWeight:600,color:"var(--text-muted)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.title}),!e.is_owner&&i.jsx("span",{style:{fontSize:10,color:"var(--text-faint)",background:"var(--bg-tertiary)",padding:"1px 6px",borderRadius:99,flexShrink:0},children:o("dashboard.shared")})]}),e.start_date&&i.jsxs("div",{style:{fontSize:11,color:"#9ca3af",marginTop:1},children:[Ao(e.start_date,s),e.end_date?` — ${Ao(e.end_date,s)}`:""]})]}),(t||a||n)&&i.jsxs("div",{style:{display:"flex",gap:4,flexShrink:0},onClick:d=>d.stopPropagation(),children:[a&&i.jsxs("button",{onClick:()=>a(e.id),title:o("dashboard.restore"),style:{padding:"4px 8px",borderRadius:8,border:"1px solid var(--border-primary)",background:"var(--bg-card)",cursor:"pointer",display:"flex",alignItems:"center",gap:4,fontSize:11,color:"var(--text-muted)"},onMouseEnter:d=>{d.currentTarget.style.borderColor="var(--text-faint)",d.currentTarget.style.color="var(--text-primary)"},onMouseLeave:d=>{d.currentTarget.style.borderColor="var(--border-primary)",d.currentTarget.style.color="var(--text-muted)"},children:[i.jsx(MM,{size:12})," ",o("dashboard.restore")]}),n&&i.jsx("button",{onClick:()=>n(e),title:o("common.delete"),style:{padding:"4px 8px",borderRadius:8,border:"1px solid var(--border-primary)",background:"var(--bg-card)",cursor:"pointer",display:"flex",alignItems:"center",gap:4,fontSize:11,color:"var(--text-faint)"},onMouseEnter:d=>{d.currentTarget.style.borderColor="#fecaca",d.currentTarget.style.color="#ef4444"},onMouseLeave:d=>{d.currentTarget.style.borderColor="var(--border-primary)",d.currentTarget.style.color="var(--text-faint)"},children:i.jsx(Ct,{size:12})})]})]})}function W0({value:e,label:t}){return i.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4},children:[i.jsx("span",{style:{fontSize:12,fontWeight:700,color:"#374151"},children:e}),i.jsx("span",{style:{fontSize:11,color:"#9ca3af"},children:t})]})}function xl({onClick:e,icon:t,label:a,danger:n}){return i.jsxs("button",{onClick:e,style:{display:"flex",alignItems:"center",gap:4,padding:"4px 8px",borderRadius:8,border:"none",background:"none",cursor:"pointer",fontSize:11,color:"#9ca3af",fontFamily:"inherit"},onMouseEnter:r=>{r.currentTarget.style.background=n?"#fef2f2":"#f3f4f6",r.currentTarget.style.color=n?"#ef4444":"#374151"},onMouseLeave:r=>{r.currentTarget.style.background="none",r.currentTarget.style.color="#9ca3af"},children:[t,a]})}function ch({onClick:e,title:t,danger:a,loading:n,children:r}){return i.jsx("button",{onClick:e,title:t,disabled:n,style:{width:32,height:32,borderRadius:99,border:"1px solid rgba(255,255,255,0.25)",background:"rgba(0,0,0,0.3)",backdropFilter:"blur(8px)",display:"flex",alignItems:"center",justifyContent:"center",cursor:"pointer",color:a?"#fca5a5":"white",transition:"background 0.12s"},onMouseEnter:o=>o.currentTarget.style.background=a?"rgba(239,68,68,0.5)":"rgba(255,255,255,0.25)",onMouseLeave:o=>o.currentTarget.style.background="rgba(0,0,0,0.3)",children:r})}function cI(){return i.jsxs("div",{style:{background:"white",borderRadius:16,overflow:"hidden",border:"1px solid #f3f4f6"},children:[i.jsx("div",{style:{height:120,background:"#f3f4f6",animation:"pulse 1.5s ease-in-out infinite"}}),i.jsxs("div",{style:{padding:"12px 14px 14px"},children:[i.jsx("div",{style:{height:14,background:"#f3f4f6",borderRadius:6,marginBottom:8,width:"70%"}}),i.jsx("div",{style:{height:11,background:"#f3f4f6",borderRadius:6,width:"50%"}})]})]})}function uI(){const[e,t]=y.useState([]),[a,n]=y.useState([]),[r,o]=y.useState(!0),[s,d]=y.useState(!1),[c,p]=y.useState(null),[m,g]=y.useState(!1),[f,v]=y.useState(!1),[k,x]=y.useState(()=>localStorage.getItem("trek_dashboard_view")||"grid"),[S,b]=y.useState(null),w=()=>{x(H=>{const ne=H==="grid"?"list":"grid";return localStorage.setItem("trek_dashboard_view",ne),ne})},j=Vi(),P=ba(),{t:M,locale:N}=lt(),{demoMode:D}=Na(),{settings:F,updateSetting:R}=na(),A=zn(),ae=F.dark_mode,B=ae===!0||ae==="dark"||ae==="auto"&&window.matchMedia("(prefers-color-scheme: dark)").matches,q=F.dashboard_currency!=="off",le=F.dashboard_timezone!=="off",de=q||le;y.useEffect(()=>(f==="mobile"?document.body.style.overflow="hidden":document.body.style.overflow="",()=>{document.body.style.overflow=""}),[f]),y.useEffect(()=>{me()},[]);const me=async()=>{o(!0);try{const[H,ne]=await Promise.all([Va.list(),Va.list({archived:1})]);t(Ws(H.trips)),n(Ws(ne.trips))}catch{P.error(M("dashboard.toast.loadError"))}finally{o(!1)}},O=async H=>{try{const ne=await Va.create(H);return t(ge=>Ws([ne.trip,...ge])),P.success(M("dashboard.toast.created")),ne}catch(ne){throw new Error(st(ne,M("dashboard.toast.createError")))}},$=async H=>{try{const ne=await Va.update(c.id,H);t(ge=>Ws(ge.map(oe=>oe.id===c.id?ne.trip:oe))),P.success(M("dashboard.toast.updated"))}catch(ne){throw new Error(st(ne,M("dashboard.toast.updateError")))}},U=H=>b(H),T=async()=>{if(S){try{await Va.delete(S.id),t(H=>H.filter(ne=>ne.id!==S.id)),n(H=>H.filter(ne=>ne.id!==S.id)),P.success(M("dashboard.toast.deleted"))}catch{P.error(M("dashboard.toast.deleteError"))}b(null)}},ce=async H=>{try{const ne=await Va.archive(H);t(ge=>ge.filter(oe=>oe.id!==H)),n(ge=>Ws([ne.trip,...ge])),P.success(M("dashboard.toast.archived"))}catch{P.error(M("dashboard.toast.archiveError"))}},K=async H=>{try{const ne=await Va.unarchive(H);n(ge=>ge.filter(oe=>oe.id!==H)),t(ge=>Ws([ne.trip,...ge])),P.success(M("dashboard.toast.restored"))}catch{P.error(M("dashboard.toast.restoreError"))}},E=(H,ne)=>{const ge=oe=>oe.id===H?{...oe,cover_image:ne}:oe;t(oe=>oe.map(ge)),n(oe=>oe.map(ge))},I=new Date().toISOString().split("T")[0],ee=e.find(H=>H.start_date&&H.end_date&&H.start_date<=I&&H.end_date>=I)||e.find(H=>H.start_date&&H.start_date>=I)||e[0]||null,pe=ee?e.filter(H=>H.id!==ee.id):e;return i.jsxs("div",{style:{position:"fixed",inset:0,display:"flex",flexDirection:"column",background:"var(--bg-secondary)",...nI},children:[i.jsx(Hr,{}),D&&i.jsx(GR,{}),i.jsx("div",{style:{flex:1,overflow:"auto",overscrollBehavior:"contain",marginTop:"var(--nav-h)"},children:i.jsxs("div",{style:{maxWidth:1300,margin:"0 auto",padding:"32px 20px 60px"},children:[i.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:28},children:[i.jsxs("div",{children:[i.jsx("h1",{style:{margin:0,fontSize:24,fontWeight:800,color:"var(--text-primary)"},children:M("dashboard.title")}),i.jsx("p",{style:{margin:"3px 0 0",fontSize:13,color:"#9ca3af"},children:r?M("common.loading"):e.length>0?`${M(e.length!==1?"dashboard.subtitle.activeMany":"dashboard.subtitle.activeOne",{count:e.length})}${a.length>0?M("dashboard.subtitle.archivedSuffix",{count:a.length}):""}`:M("dashboard.subtitle.empty")})]}),i.jsxs("div",{style:{display:"flex",gap:8,alignItems:"stretch"},children:[i.jsx("button",{onClick:w,title:M(k==="grid"?"dashboard.listView":"dashboard.gridView"),style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"0 14px",height:37,background:"var(--bg-card)",border:"1px solid var(--border-primary)",borderRadius:12,cursor:"pointer",color:"var(--text-faint)",fontFamily:"inherit",transition:"background 0.15s, border-color 0.15s"},onMouseEnter:H=>{H.currentTarget.style.background="var(--bg-hover)",H.currentTarget.style.borderColor="var(--text-faint)"},onMouseLeave:H=>{H.currentTarget.style.background="var(--bg-card)",H.currentTarget.style.borderColor="var(--border-primary)"},children:k==="grid"?i.jsx(dR,{size:15}):i.jsx(oR,{size:15})}),i.jsx("button",{onClick:()=>v(H=>!H),style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"0 14px",height:37,background:"var(--bg-card)",border:"1px solid var(--border-primary)",borderRadius:12,cursor:"pointer",color:"var(--text-faint)",fontFamily:"inherit",transition:"background 0.15s, border-color 0.15s"},onMouseEnter:H=>{H.currentTarget.style.background="var(--bg-hover)",H.currentTarget.style.borderColor="var(--text-faint)"},onMouseLeave:H=>{H.currentTarget.style.background="var(--bg-card)",H.currentTarget.style.borderColor="var(--border-primary)"},children:i.jsx(Zm,{size:15})}),A("trip_create")&&i.jsxs("button",{onClick:()=>{p(null),d(!0)},style:{display:"flex",alignItems:"center",gap:7,padding:"9px 18px",background:"var(--accent)",color:"var(--accent-text)",border:"none",borderRadius:12,fontSize:13,fontWeight:600,cursor:"pointer",fontFamily:"inherit",boxShadow:"0 2px 8px rgba(0,0,0,0.15)"},onMouseEnter:H=>H.currentTarget.style.opacity="0.85",onMouseLeave:H=>H.currentTarget.style.opacity="1",children:[i.jsx(Ft,{size:15})," ",M("dashboard.newTrip")]})]})]}),f&&i.jsxs("div",{className:"rounded-xl border p-3 mb-4 flex items-center gap-4",style:{background:"var(--bg-card)",borderColor:"var(--border-primary)"},children:[i.jsx("span",{className:"text-xs font-semibold",style:{color:"var(--text-muted)"},children:"Widgets:"}),i.jsxs("label",{className:"flex items-center gap-2 cursor-pointer",children:[i.jsx("button",{onClick:()=>R("dashboard_currency",q?"off":"on"),className:"relative inline-flex h-5 w-9 items-center rounded-full transition-colors",style:{background:q?"var(--text-primary)":"var(--border-primary)"},children:i.jsx("span",{className:"absolute left-0.5 h-4 w-4 rounded-full transition-transform duration-200",style:{background:"var(--bg-card)",transform:q?"translateX(16px)":"translateX(0)"}})}),i.jsx("span",{className:"text-xs",style:{color:"var(--text-primary)"},children:M("dashboard.currency")})]}),i.jsxs("label",{className:"flex items-center gap-2 cursor-pointer",children:[i.jsx("button",{onClick:()=>R("dashboard_timezone",le?"off":"on"),className:"relative inline-flex h-5 w-9 items-center rounded-full transition-colors",style:{background:le?"var(--text-primary)":"var(--border-primary)"},children:i.jsx("span",{className:"absolute left-0.5 h-4 w-4 rounded-full transition-transform duration-200",style:{background:"var(--bg-card)",transform:le?"translateX(16px)":"translateX(0)"}})}),i.jsx("span",{className:"text-xs",style:{color:"var(--text-primary)"},children:M("dashboard.timezone")})]})]}),de&&i.jsxs("button",{onClick:()=>v("mobile"),className:"lg:hidden flex items-center justify-center gap-2 w-full py-2.5 rounded-xl text-xs font-semibold mb-4",style:{background:"var(--bg-card)",border:"1px solid var(--border-primary)",color:"var(--text-primary)"},children:[i.jsx(Hm,{size:13,style:{color:"var(--text-faint)"}}),q&&le?`${M("dashboard.currency")} & ${M("dashboard.timezone")}`:M(q?"dashboard.currency":"dashboard.timezone")]}),i.jsxs("div",{style:{display:"flex",gap:24,alignItems:"flex-start"},children:[i.jsxs("div",{style:{flex:1,minWidth:0},children:[r&&i.jsxs(i.Fragment,{children:[i.jsx("div",{style:{height:260,background:"#e5e7eb",borderRadius:20,marginBottom:32,animation:"pulse 1.5s ease-in-out infinite"}}),i.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(280px, 1fr))",gap:16},children:[1,2,3].map(H=>i.jsx(cI,{},H))})]}),!r&&e.length===0&&i.jsxs("div",{style:{textAlign:"center",padding:"80px 20px"},children:[i.jsx("div",{style:{width:80,height:80,background:"#f3f4f6",borderRadius:"50%",display:"flex",alignItems:"center",justifyContent:"center",margin:"0 auto 20px"},children:i.jsx(As,{size:36,style:{color:"#d1d5db"}})}),i.jsx("h3",{style:{margin:"0 0 8px",fontSize:18,fontWeight:700,color:"var(--text-primary)"},children:M("dashboard.emptyTitle")}),i.jsx("p",{style:{margin:"0 0 24px",fontSize:14,color:"#9ca3af",maxWidth:340,marginLeft:"auto",marginRight:"auto"},children:M("dashboard.emptyText")}),A("trip_create")&&i.jsxs("button",{onClick:()=>{p(null),d(!0)},style:{display:"inline-flex",alignItems:"center",gap:7,padding:"10px 22px",background:"var(--accent)",color:"var(--accent-text)",border:"none",borderRadius:12,fontSize:14,fontWeight:600,cursor:"pointer",fontFamily:"inherit"},children:[i.jsx(Ft,{size:16})," ",M("dashboard.emptyButton")]})]}),!r&&ee&&k==="grid"&&i.jsx(oI,{trip:ee,t:M,locale:N,dark:B,onEdit:A("trip_edit",ee)||A("trip_cover_upload",ee)?H=>{p(H),d(!0)}:void 0,onDelete:A("trip_delete",ee)?U:void 0,onArchive:A("trip_archive",ee)?ce:void 0,onClick:H=>j(`/trips/${H.id}`)}),!r&&(k==="grid"?pe:e).length>0&&(k==="grid"?i.jsx("div",{className:"trip-grid",style:{display:"grid",gap:16,marginBottom:40},children:pe.map(H=>i.jsx(sI,{trip:H,t:M,locale:N,onEdit:A("trip_edit",H)||A("trip_cover_upload",H)?ne=>{p(ne),d(!0)}:void 0,onDelete:A("trip_delete",H)?U:void 0,onArchive:A("trip_archive",H)?ce:void 0,onClick:ne=>j(`/trips/${ne.id}`)},H.id))}):i.jsx("div",{style:{display:"flex",flexDirection:"column",gap:8,marginBottom:40},children:e.map(H=>i.jsx(lI,{trip:H,t:M,locale:N,onEdit:A("trip_edit",H)||A("trip_cover_upload",H)?ne=>{p(ne),d(!0)}:void 0,onDelete:A("trip_delete",H)?U:void 0,onArchive:A("trip_archive",H)?ce:void 0,onClick:ne=>j(`/trips/${ne.id}`)},H.id))})),!r&&a.length>0&&i.jsxs("div",{style:{borderTop:"1px solid #f3f4f6",paddingTop:24},children:[i.jsxs("button",{onClick:()=>g(H=>!H),style:{display:"flex",alignItems:"center",gap:8,background:"none",border:"none",cursor:"pointer",padding:"4px 0",marginBottom:m?16:0,fontFamily:"inherit"},children:[i.jsx(Bm,{size:15,style:{color:"#9ca3af"}}),i.jsxs("span",{style:{fontSize:13,fontWeight:600,color:"#6b7280"},children:[M("dashboard.archived")," (",a.length,")"]}),m?i.jsx(dr,{size:14,style:{color:"#9ca3af"}}):i.jsx(Ja,{size:14,style:{color:"#9ca3af"}})]}),m&&i.jsx("div",{style:{display:"flex",flexDirection:"column",gap:8},children:a.map(H=>i.jsx(dI,{trip:H,t:M,locale:N,onEdit:A("trip_edit",H)||A("trip_cover_upload",H)?ne=>{p(ne),d(!0)}:void 0,onUnarchive:A("trip_archive",H)?K:void 0,onDelete:A("trip_delete",H)?U:void 0,onClick:ne=>j(`/trips/${ne.id}`)},H.id))})]})]}),de&&i.jsxs("div",{className:"hidden lg:flex flex-col gap-4",style:{position:"sticky",top:80,flexShrink:0,width:280},children:[q&&i.jsx(tv,{dark:B,style:{borderRadius:16},children:i.jsx(L0,{})}),le&&i.jsx(tv,{dark:B,style:{borderRadius:16},children:i.jsx(O0,{})})]})]})]})}),f==="mobile"&&i.jsx("div",{className:"lg:hidden fixed inset-0 z-50",style:{background:"rgba(0,0,0,0.3)",touchAction:"none"},onClick:()=>v(!1),children:i.jsxs("div",{className:"absolute bottom-0 left-0 right-0 flex flex-col overflow-hidden",style:{maxHeight:"80vh",background:"var(--bg-card)",borderRadius:"20px 20px 0 0",overscrollBehavior:"contain"},onClick:H=>H.stopPropagation(),children:[i.jsxs("div",{className:"flex items-center justify-between px-4 py-3",style:{borderBottom:"1px solid var(--border-secondary)"},children:[i.jsx("span",{className:"text-sm font-semibold",style:{color:"var(--text-primary)"},children:"Widgets"}),i.jsx("button",{onClick:()=>v(!1),className:"w-7 h-7 rounded-full flex items-center justify-center",style:{background:"var(--bg-secondary)"},children:i.jsx(bt,{size:14,style:{color:"var(--text-primary)"}})})]}),i.jsxs("div",{className:"flex-1 overflow-auto p-4 space-y-4",children:[q&&i.jsx(L0,{}),le&&i.jsx(O0,{})]})]})}),i.jsx(qj,{isOpen:s,onClose:()=>{d(!1),p(null)},onSave:c?$:O,trip:c,onCoverUpdate:E}),i.jsx(Gj,{isOpen:!!S,onClose:()=>b(null),onConfirm:T,title:M("common.delete"),message:M("dashboard.confirm.delete",{title:(S==null?void 0:S.title)||""})}),i.jsx("style",{children:` + `})]}):null}const iI={fontFamily:"-apple-system, BlinkMacSystemFont, 'SF Pro Text', system-ui, sans-serif"},rI=864e5;function Xm(e){if(!e)return null;const t=new Date;t.setHours(0,0,0,0);const a=new Date(e+"T00:00:00");return a.setHours(0,0,0,0),Math.round((a-t)/rI)}function ab(e){const t=new Date().toISOString().split("T")[0];if(e.start_date&&e.end_date&&e.start_date<=t&&e.end_date>=t)return"ongoing";const a=Xm(e.start_date);return a===null?null:a===0?"today":a===1?"tomorrow":a>1?"future":"past"}function oI(e,t="en-US"){return e?new Date(e+"T00:00:00").toLocaleDateString(t,{day:"numeric",month:"short",year:"numeric"}):null}function Ao(e,t="en-US"){return e?new Date(e+"T00:00:00").toLocaleDateString(t,{day:"numeric",month:"short"}):null}function Ws(e){const t=new Date().toISOString().split("T")[0];function a(n){return n.start_date&&n.end_date&&n.start_date<=t&&n.end_date>=t?0:n.start_date&&n.start_date>=t?1:2}return[...e].sort((n,r)=>{const o=a(n),s=a(r);if(o!==s)return o-s;const d=n.start_date||"",c=r.start_date||"";return o<=1?d.localeCompare(c):c.localeCompare(d)})}const W0=["linear-gradient(135deg, #667eea 0%, #764ba2 100%)","linear-gradient(135deg, #f093fb 0%, #f5576c 100%)","linear-gradient(135deg, #4facfe 0%, #00f2fe 100%)","linear-gradient(135deg, #43e97b 0%, #38f9d7 100%)","linear-gradient(135deg, #fa709a 0%, #fee140 100%)","linear-gradient(135deg, #a18cd1 0%, #fbc2eb 100%)","linear-gradient(135deg, #ffecd2 0%, #fcb69f 100%)","linear-gradient(135deg, #96fbc4 0%, #f9f586 100%)"];function Jm(e){return W0[e%W0.length]}function tv({children:e,dark:t,style:a,className:n="",onClick:r}){const o=y.useRef(null),s=y.useRef(null),d=y.useRef(null),c=m=>{if(!o.current||!s.current||!d.current)return;const g=o.current.getBoundingClientRect(),f=m.clientX-g.left,v=m.clientY-g.top;s.current.style.background=`radial-gradient(circle 250px at ${f}px ${v}px, ${t?"rgba(255,255,255,0.04)":"rgba(0,0,0,0.03)"} 0%, transparent 70%)`,s.current.style.opacity="1",d.current.style.opacity="1",d.current.style.maskImage=`radial-gradient(circle 120px at ${f}px ${v}px, black 0%, transparent 100%)`,d.current.style.WebkitMaskImage=`radial-gradient(circle 120px at ${f}px ${v}px, black 0%, transparent 100%)`},p=()=>{s.current&&(s.current.style.opacity="0"),d.current&&(d.current.style.opacity="0")};return i.jsxs("div",{ref:o,onMouseMove:c,onMouseLeave:p,onClick:r,className:n,style:{position:"relative",overflow:"hidden",...a},children:[i.jsx("div",{ref:s,style:{position:"absolute",inset:0,pointerEvents:"none",opacity:0,transition:"opacity 0.3s",borderRadius:"inherit",zIndex:1}}),i.jsx("div",{ref:d,style:{position:"absolute",inset:0,pointerEvents:"none",opacity:0,transition:"opacity 0.3s",borderRadius:"inherit",zIndex:1,border:t?"1.5px solid rgba(255,255,255,0.4)":"1.5px solid rgba(0,0,0,0.12)"}}),e]})}function sI({trip:e,onEdit:t,onDelete:a,onArchive:n,onClick:r,t:o,locale:s,dark:d}){const c=ab(e),p=e.cover_image?`url(${e.cover_image}) center/cover no-repeat`:Jm(e.id);return i.jsx(tv,{dark:d,style:{marginBottom:32,borderRadius:20,boxShadow:"0 8px 40px rgba(0,0,0,0.13)",cursor:"pointer"},onClick:()=>r(e),children:i.jsxs("div",{style:{height:300,background:p,position:"relative"},children:[i.jsx("div",{style:{position:"absolute",inset:0,background:"linear-gradient(to top, rgba(0,0,0,0.78) 0%, rgba(0,0,0,0.25) 50%, rgba(0,0,0,0.1) 100%)"}}),i.jsx("div",{style:{position:"absolute",top:16,left:16,display:"flex",gap:8},children:c&&i.jsxs("span",{style:{background:"rgba(255,255,255,0.15)",backdropFilter:"blur(8px)",color:"white",fontSize:12,fontWeight:700,padding:"5px 12px",borderRadius:99,border:"1px solid rgba(255,255,255,0.25)",display:"flex",alignItems:"center",gap:6},children:[c==="ongoing"&&i.jsx("span",{style:{width:7,height:7,borderRadius:"50%",background:"#ef4444",animation:"blink 1s ease-in-out infinite",display:"inline-block",flexShrink:0}}),c==="ongoing"?o("dashboard.status.ongoing"):c==="today"?o("dashboard.status.today"):c==="tomorrow"?o("dashboard.status.tomorrow"):c==="future"?o("dashboard.status.daysLeft",{count:Xm(e.start_date)}):o("dashboard.status.past")]})}),(t||n||a)&&i.jsxs("div",{style:{position:"absolute",top:16,right:16,display:"flex",gap:6},onClick:m=>m.stopPropagation(),children:[t&&i.jsx(ch,{onClick:()=>t(e),title:o("common.edit"),children:i.jsx(Dr,{size:14})}),n&&i.jsx(ch,{onClick:()=>n(e.id),title:o("dashboard.archive"),children:i.jsx(Bm,{size:14})}),a&&i.jsx(ch,{onClick:()=>a(e),title:o("common.delete"),danger:!0,children:i.jsx(Ct,{size:14})})]}),i.jsxs("div",{style:{position:"absolute",bottom:0,left:0,right:0,padding:"20px 24px"},children:[i.jsx("div",{style:{fontSize:11,fontWeight:600,color:"rgba(255,255,255,0.65)",textTransform:"uppercase",letterSpacing:"0.08em",marginBottom:6},children:e.is_owner?o("dashboard.nextTrip"):o("dashboard.sharedBy",{name:e.owner_username})}),i.jsx("h2",{style:{margin:0,fontSize:26,fontWeight:800,color:"white",lineHeight:1.2,textShadow:"0 1px 4px rgba(0,0,0,0.3)"},children:e.title}),e.description&&i.jsx("p",{style:{margin:"6px 0 0",fontSize:13.5,color:"rgba(255,255,255,0.75)",lineHeight:1.4,overflow:"hidden",display:"-webkit-box",WebkitLineClamp:2,WebkitBoxOrient:"vertical"},children:e.description}),i.jsxs("div",{style:{display:"flex",alignItems:"center",gap:16,marginTop:12},children:[e.start_date&&i.jsxs("div",{style:{display:"flex",alignItems:"center",gap:5,color:"rgba(255,255,255,0.8)",fontSize:13},children:[i.jsx(Or,{size:13}),Ao(e.start_date,s),e.end_date&&i.jsxs(i.Fragment,{children:[" — ",Ao(e.end_date,s)]})]}),i.jsxs("div",{style:{display:"flex",alignItems:"center",gap:5,color:"rgba(255,255,255,0.8)",fontSize:13},children:[i.jsx(In,{size:13})," ",e.day_count||0," ",o("dashboard.days")]}),i.jsxs("div",{style:{display:"flex",alignItems:"center",gap:5,color:"rgba(255,255,255,0.8)",fontSize:13},children:[i.jsx(Qa,{size:13})," ",e.place_count||0," ",o("dashboard.places")]})]})]})]})})}function lI({trip:e,onEdit:t,onDelete:a,onArchive:n,onClick:r,t:o,locale:s}){const d=ab(e),[c,p]=y.useState(!1),m=e.cover_image?`url(${e.cover_image}) center/cover no-repeat`:Jm(e.id);return i.jsxs("div",{onMouseEnter:()=>p(!0),onMouseLeave:()=>p(!1),onClick:()=>r(e),style:{background:c?"var(--bg-tertiary)":"var(--bg-card)",borderRadius:16,overflow:"hidden",cursor:"pointer",border:`1px solid ${c?"var(--text-faint)":"var(--border-primary)"}`,transition:"all 0.18s",boxShadow:c?"0 8px 28px rgba(0,0,0,0.15)":"0 1px 4px rgba(0,0,0,0.04)",transform:c?"translateY(-2px)":"none"},children:[i.jsxs("div",{style:{height:120,background:m,position:"relative",overflow:"hidden"},children:[e.cover_image&&i.jsx("div",{style:{position:"absolute",inset:0,background:"linear-gradient(to top, rgba(0,0,0,0.35) 0%, transparent 60%)"}}),d&&i.jsx("div",{style:{position:"absolute",top:8,left:8},children:i.jsxs("span",{style:{fontSize:10.5,fontWeight:700,padding:"2px 8px",borderRadius:99,background:"rgba(0,0,0,0.4)",color:"white",backdropFilter:"blur(4px)",display:"flex",alignItems:"center",gap:5},children:[d==="ongoing"&&i.jsx("span",{style:{width:6,height:6,borderRadius:"50%",background:"#ef4444",animation:"blink 1s ease-in-out infinite",display:"inline-block",flexShrink:0}}),d==="ongoing"?o("dashboard.status.ongoing"):d==="today"?o("dashboard.status.today"):d==="tomorrow"?o("dashboard.status.tomorrow"):d==="future"?o("dashboard.status.daysLeft",{count:Xm(e.start_date)}):o("dashboard.status.past")]})})]}),i.jsxs("div",{style:{padding:"12px 14px 14px"},children:[i.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,overflow:"hidden",marginBottom:3},children:[i.jsx("span",{style:{fontWeight:700,fontSize:14,color:"var(--text-primary)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.title}),!e.is_owner&&i.jsx("span",{style:{fontSize:10,fontWeight:600,color:"var(--text-muted)",background:"var(--bg-tertiary)",padding:"1px 6px",borderRadius:99,whiteSpace:"nowrap",flexShrink:0},children:o("dashboard.shared")})]}),e.description&&i.jsx("p",{style:{fontSize:12,color:"var(--text-faint)",margin:"0 0 8px",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.description}),(e.start_date||e.end_date)&&i.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4,fontSize:12,color:"var(--text-muted)",marginBottom:10},children:[i.jsx(Or,{size:11,style:{flexShrink:0}}),e.start_date&&e.end_date?`${Ao(e.start_date,s)} — ${Ao(e.end_date,s)}`:oI(e.start_date||e.end_date,s)]}),i.jsxs("div",{style:{display:"flex",gap:8,marginBottom:10},children:[i.jsx(U0,{label:o("dashboard.days"),value:e.day_count||0}),i.jsx(U0,{label:o("dashboard.places"),value:e.place_count||0})]}),(t||n||a)&&i.jsxs("div",{style:{display:"flex",gap:6,borderTop:"1px solid #f3f4f6",paddingTop:10},onClick:g=>g.stopPropagation(),children:[t&&i.jsx(xl,{onClick:()=>t(e),icon:i.jsx(Dr,{size:12}),label:o("common.edit")}),n&&i.jsx(xl,{onClick:()=>n(e.id),icon:i.jsx(Bm,{size:12}),label:o("dashboard.archive")}),a&&i.jsx(xl,{onClick:()=>a(e),icon:i.jsx(Ct,{size:12}),label:o("common.delete"),danger:!0})]})]})]})}function dI({trip:e,onEdit:t,onDelete:a,onArchive:n,onClick:r,t:o,locale:s}){const d=ab(e),[c,p]=y.useState(!1),m=e.cover_image?`url(${e.cover_image}) center/cover no-repeat`:Jm(e.id);return i.jsxs("div",{onMouseEnter:()=>p(!0),onMouseLeave:()=>p(!1),onClick:()=>r(e),style:{display:"flex",alignItems:"center",gap:14,padding:"10px 16px",background:c?"var(--bg-tertiary)":"var(--bg-card)",borderRadius:14,border:`1px solid ${c?"var(--text-faint)":"var(--border-primary)"}`,cursor:"pointer",transition:"all 0.15s",boxShadow:c?"0 4px 16px rgba(0,0,0,0.08)":"0 1px 3px rgba(0,0,0,0.03)"},children:[i.jsx("div",{style:{width:52,height:52,borderRadius:12,flexShrink:0,background:m,position:"relative",overflow:"hidden"},children:d==="ongoing"&&i.jsx("span",{style:{position:"absolute",top:4,left:4,width:7,height:7,borderRadius:"50%",background:"#ef4444",animation:"blink 1s ease-in-out infinite"}})}),i.jsxs("div",{style:{flex:1,minWidth:0},children:[i.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[i.jsx("span",{style:{fontWeight:700,fontSize:14,color:"var(--text-primary)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.title}),!e.is_owner&&i.jsx("span",{style:{fontSize:10,fontWeight:600,color:"var(--text-muted)",background:"var(--bg-tertiary)",padding:"1px 6px",borderRadius:99,whiteSpace:"nowrap",flexShrink:0},children:o("dashboard.shared")}),d&&i.jsx("span",{style:{fontSize:10,fontWeight:700,padding:"1px 8px",borderRadius:99,background:d==="ongoing"?"rgba(239,68,68,0.1)":"var(--bg-tertiary)",color:d==="ongoing"?"#ef4444":"var(--text-muted)",whiteSpace:"nowrap",flexShrink:0},children:d==="ongoing"?o("dashboard.status.ongoing"):d==="today"?o("dashboard.status.today"):d==="tomorrow"?o("dashboard.status.tomorrow"):d==="future"?o("dashboard.status.daysLeft",{count:Xm(e.start_date)}):o("dashboard.status.past")})]}),e.description&&i.jsx("p",{style:{fontSize:12,color:"var(--text-faint)",margin:"2px 0 0",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.description})]}),i.jsxs("div",{style:{display:"flex",alignItems:"center",gap:16,flexShrink:0},children:[e.start_date&&i.jsxs("div",{className:"hidden sm:flex",style:{alignItems:"center",gap:4,fontSize:12,color:"var(--text-muted)"},children:[i.jsx(Or,{size:11}),Ao(e.start_date,s),e.end_date&&i.jsxs(i.Fragment,{children:[" — ",Ao(e.end_date,s)]})]}),i.jsxs("div",{className:"hidden md:flex",style:{alignItems:"center",gap:4,fontSize:12,color:"var(--text-muted)"},children:[i.jsx(In,{size:11})," ",e.day_count||0]}),i.jsxs("div",{className:"hidden md:flex",style:{alignItems:"center",gap:4,fontSize:12,color:"var(--text-muted)"},children:[i.jsx(Qa,{size:11})," ",e.place_count||0]})]}),(t||n||a)&&i.jsxs("div",{style:{display:"flex",gap:4,flexShrink:0},onClick:g=>g.stopPropagation(),children:[t&&i.jsx(xl,{onClick:()=>t(e),icon:i.jsx(Dr,{size:12}),label:""}),n&&i.jsx(xl,{onClick:()=>n(e.id),icon:i.jsx(Bm,{size:12}),label:""}),a&&i.jsx(xl,{onClick:()=>a(e),icon:i.jsx(Ct,{size:12}),label:"",danger:!0})]})]})}function cI({trip:e,onEdit:t,onUnarchive:a,onDelete:n,onClick:r,t:o,locale:s}){return i.jsxs("div",{onClick:()=>r(e),style:{display:"flex",alignItems:"center",gap:12,padding:"10px 16px",borderRadius:12,border:"1px solid var(--border-faint)",background:"var(--bg-card)",cursor:"pointer",transition:"border-color 0.12s"},onMouseEnter:d=>d.currentTarget.style.borderColor="var(--border-primary)",onMouseLeave:d=>d.currentTarget.style.borderColor="var(--border-faint)",children:[i.jsx("div",{style:{width:40,height:40,borderRadius:10,flexShrink:0,background:e.cover_image?`url(${e.cover_image}) center/cover no-repeat`:Jm(e.id),opacity:.7}}),i.jsxs("div",{style:{flex:1,minWidth:0},children:[i.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[i.jsx("span",{style:{fontSize:13,fontWeight:600,color:"var(--text-muted)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.title}),!e.is_owner&&i.jsx("span",{style:{fontSize:10,color:"var(--text-faint)",background:"var(--bg-tertiary)",padding:"1px 6px",borderRadius:99,flexShrink:0},children:o("dashboard.shared")})]}),e.start_date&&i.jsxs("div",{style:{fontSize:11,color:"#9ca3af",marginTop:1},children:[Ao(e.start_date,s),e.end_date?` — ${Ao(e.end_date,s)}`:""]})]}),(t||a||n)&&i.jsxs("div",{style:{display:"flex",gap:4,flexShrink:0},onClick:d=>d.stopPropagation(),children:[a&&i.jsxs("button",{onClick:()=>a(e.id),title:o("dashboard.restore"),style:{padding:"4px 8px",borderRadius:8,border:"1px solid var(--border-primary)",background:"var(--bg-card)",cursor:"pointer",display:"flex",alignItems:"center",gap:4,fontSize:11,color:"var(--text-muted)"},onMouseEnter:d=>{d.currentTarget.style.borderColor="var(--text-faint)",d.currentTarget.style.color="var(--text-primary)"},onMouseLeave:d=>{d.currentTarget.style.borderColor="var(--border-primary)",d.currentTarget.style.color="var(--text-muted)"},children:[i.jsx(RM,{size:12})," ",o("dashboard.restore")]}),n&&i.jsx("button",{onClick:()=>n(e),title:o("common.delete"),style:{padding:"4px 8px",borderRadius:8,border:"1px solid var(--border-primary)",background:"var(--bg-card)",cursor:"pointer",display:"flex",alignItems:"center",gap:4,fontSize:11,color:"var(--text-faint)"},onMouseEnter:d=>{d.currentTarget.style.borderColor="#fecaca",d.currentTarget.style.color="#ef4444"},onMouseLeave:d=>{d.currentTarget.style.borderColor="var(--border-primary)",d.currentTarget.style.color="var(--text-faint)"},children:i.jsx(Ct,{size:12})})]})]})}function U0({value:e,label:t}){return i.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4},children:[i.jsx("span",{style:{fontSize:12,fontWeight:700,color:"#374151"},children:e}),i.jsx("span",{style:{fontSize:11,color:"#9ca3af"},children:t})]})}function xl({onClick:e,icon:t,label:a,danger:n}){return i.jsxs("button",{onClick:e,style:{display:"flex",alignItems:"center",gap:4,padding:"4px 8px",borderRadius:8,border:"none",background:"none",cursor:"pointer",fontSize:11,color:"#9ca3af",fontFamily:"inherit"},onMouseEnter:r=>{r.currentTarget.style.background=n?"#fef2f2":"#f3f4f6",r.currentTarget.style.color=n?"#ef4444":"#374151"},onMouseLeave:r=>{r.currentTarget.style.background="none",r.currentTarget.style.color="#9ca3af"},children:[t,a]})}function ch({onClick:e,title:t,danger:a,loading:n,children:r}){return i.jsx("button",{onClick:e,title:t,disabled:n,style:{width:32,height:32,borderRadius:99,border:"1px solid rgba(255,255,255,0.25)",background:"rgba(0,0,0,0.3)",backdropFilter:"blur(8px)",display:"flex",alignItems:"center",justifyContent:"center",cursor:"pointer",color:a?"#fca5a5":"white",transition:"background 0.12s"},onMouseEnter:o=>o.currentTarget.style.background=a?"rgba(239,68,68,0.5)":"rgba(255,255,255,0.25)",onMouseLeave:o=>o.currentTarget.style.background="rgba(0,0,0,0.3)",children:r})}function uI(){return i.jsxs("div",{style:{background:"white",borderRadius:16,overflow:"hidden",border:"1px solid #f3f4f6"},children:[i.jsx("div",{style:{height:120,background:"#f3f4f6",animation:"pulse 1.5s ease-in-out infinite"}}),i.jsxs("div",{style:{padding:"12px 14px 14px"},children:[i.jsx("div",{style:{height:14,background:"#f3f4f6",borderRadius:6,marginBottom:8,width:"70%"}}),i.jsx("div",{style:{height:11,background:"#f3f4f6",borderRadius:6,width:"50%"}})]})]})}function pI(){const[e,t]=y.useState([]),[a,n]=y.useState([]),[r,o]=y.useState(!0),[s,d]=y.useState(!1),[c,p]=y.useState(null),[m,g]=y.useState(!1),[f,v]=y.useState(!1),[k,x]=y.useState(()=>localStorage.getItem("trek_dashboard_view")||"grid"),[S,b]=y.useState(null),w=()=>{x(H=>{const ne=H==="grid"?"list":"grid";return localStorage.setItem("trek_dashboard_view",ne),ne})},j=Vi(),P=ba(),{t:M,locale:N}=lt(),{demoMode:D}=Na(),{settings:F,updateSetting:R}=na(),E=zn(),ae=F.dark_mode,B=ae===!0||ae==="dark"||ae==="auto"&&window.matchMedia("(prefers-color-scheme: dark)").matches,K=F.dashboard_currency!=="off",le=F.dashboard_timezone!=="off",de=K||le;y.useEffect(()=>(f==="mobile"?document.body.style.overflow="hidden":document.body.style.overflow="",()=>{document.body.style.overflow=""}),[f]),y.useEffect(()=>{me()},[]);const me=async()=>{o(!0);try{const[H,ne]=await Promise.all([Va.list(),Va.list({archived:1})]);t(Ws(H.trips)),n(Ws(ne.trips))}catch{P.error(M("dashboard.toast.loadError"))}finally{o(!1)}},O=async H=>{try{const ne=await Va.create(H);return t(ge=>Ws([ne.trip,...ge])),P.success(M("dashboard.toast.created")),ne}catch(ne){throw new Error(st(ne,M("dashboard.toast.createError")))}},$=async H=>{try{const ne=await Va.update(c.id,H);t(ge=>Ws(ge.map(oe=>oe.id===c.id?ne.trip:oe))),P.success(M("dashboard.toast.updated"))}catch(ne){throw new Error(st(ne,M("dashboard.toast.updateError")))}},U=H=>b(H),T=async()=>{if(S){try{await Va.delete(S.id),t(H=>H.filter(ne=>ne.id!==S.id)),n(H=>H.filter(ne=>ne.id!==S.id)),P.success(M("dashboard.toast.deleted"))}catch{P.error(M("dashboard.toast.deleteError"))}b(null)}},ce=async H=>{try{const ne=await Va.archive(H);t(ge=>ge.filter(oe=>oe.id!==H)),n(ge=>Ws([ne.trip,...ge])),P.success(M("dashboard.toast.archived"))}catch{P.error(M("dashboard.toast.archiveError"))}},q=async H=>{try{const ne=await Va.unarchive(H);n(ge=>ge.filter(oe=>oe.id!==H)),t(ge=>Ws([ne.trip,...ge])),P.success(M("dashboard.toast.restored"))}catch{P.error(M("dashboard.toast.restoreError"))}},A=(H,ne)=>{const ge=oe=>oe.id===H?{...oe,cover_image:ne}:oe;t(oe=>oe.map(ge)),n(oe=>oe.map(ge))},I=new Date().toISOString().split("T")[0],ee=e.find(H=>H.start_date&&H.end_date&&H.start_date<=I&&H.end_date>=I)||e.find(H=>H.start_date&&H.start_date>=I)||e[0]||null,pe=ee?e.filter(H=>H.id!==ee.id):e;return i.jsxs("div",{style:{position:"fixed",inset:0,display:"flex",flexDirection:"column",background:"var(--bg-secondary)",...iI},children:[i.jsx(Hr,{}),D&&i.jsx(ZR,{}),i.jsx("div",{style:{flex:1,overflow:"auto",overscrollBehavior:"contain",marginTop:"var(--nav-h)"},children:i.jsxs("div",{style:{maxWidth:1300,margin:"0 auto",padding:"32px 20px 60px"},children:[i.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:28},children:[i.jsxs("div",{children:[i.jsx("h1",{style:{margin:0,fontSize:24,fontWeight:800,color:"var(--text-primary)"},children:M("dashboard.title")}),i.jsx("p",{style:{margin:"3px 0 0",fontSize:13,color:"#9ca3af"},children:r?M("common.loading"):e.length>0?`${M(e.length!==1?"dashboard.subtitle.activeMany":"dashboard.subtitle.activeOne",{count:e.length})}${a.length>0?M("dashboard.subtitle.archivedSuffix",{count:a.length}):""}`:M("dashboard.subtitle.empty")})]}),i.jsxs("div",{style:{display:"flex",gap:8,alignItems:"stretch"},children:[i.jsx("button",{onClick:w,title:M(k==="grid"?"dashboard.listView":"dashboard.gridView"),style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"0 14px",height:37,background:"var(--bg-card)",border:"1px solid var(--border-primary)",borderRadius:12,cursor:"pointer",color:"var(--text-faint)",fontFamily:"inherit",transition:"background 0.15s, border-color 0.15s"},onMouseEnter:H=>{H.currentTarget.style.background="var(--bg-hover)",H.currentTarget.style.borderColor="var(--text-faint)"},onMouseLeave:H=>{H.currentTarget.style.background="var(--bg-card)",H.currentTarget.style.borderColor="var(--border-primary)"},children:k==="grid"?i.jsx(cR,{size:15}):i.jsx(sR,{size:15})}),i.jsx("button",{onClick:()=>v(H=>!H),style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"0 14px",height:37,background:"var(--bg-card)",border:"1px solid var(--border-primary)",borderRadius:12,cursor:"pointer",color:"var(--text-faint)",fontFamily:"inherit",transition:"background 0.15s, border-color 0.15s"},onMouseEnter:H=>{H.currentTarget.style.background="var(--bg-hover)",H.currentTarget.style.borderColor="var(--text-faint)"},onMouseLeave:H=>{H.currentTarget.style.background="var(--bg-card)",H.currentTarget.style.borderColor="var(--border-primary)"},children:i.jsx(Zm,{size:15})}),E("trip_create")&&i.jsxs("button",{onClick:()=>{p(null),d(!0)},style:{display:"flex",alignItems:"center",gap:7,padding:"9px 18px",background:"var(--accent)",color:"var(--accent-text)",border:"none",borderRadius:12,fontSize:13,fontWeight:600,cursor:"pointer",fontFamily:"inherit",boxShadow:"0 2px 8px rgba(0,0,0,0.15)"},onMouseEnter:H=>H.currentTarget.style.opacity="0.85",onMouseLeave:H=>H.currentTarget.style.opacity="1",children:[i.jsx(Ft,{size:15})," ",M("dashboard.newTrip")]})]})]}),f&&i.jsxs("div",{className:"rounded-xl border p-3 mb-4 flex items-center gap-4",style:{background:"var(--bg-card)",borderColor:"var(--border-primary)"},children:[i.jsx("span",{className:"text-xs font-semibold",style:{color:"var(--text-muted)"},children:"Widgets:"}),i.jsxs("label",{className:"flex items-center gap-2 cursor-pointer",children:[i.jsx("button",{onClick:()=>R("dashboard_currency",K?"off":"on"),className:"relative inline-flex h-5 w-9 items-center rounded-full transition-colors",style:{background:K?"var(--text-primary)":"var(--border-primary)"},children:i.jsx("span",{className:"absolute left-0.5 h-4 w-4 rounded-full transition-transform duration-200",style:{background:"var(--bg-card)",transform:K?"translateX(16px)":"translateX(0)"}})}),i.jsx("span",{className:"text-xs",style:{color:"var(--text-primary)"},children:M("dashboard.currency")})]}),i.jsxs("label",{className:"flex items-center gap-2 cursor-pointer",children:[i.jsx("button",{onClick:()=>R("dashboard_timezone",le?"off":"on"),className:"relative inline-flex h-5 w-9 items-center rounded-full transition-colors",style:{background:le?"var(--text-primary)":"var(--border-primary)"},children:i.jsx("span",{className:"absolute left-0.5 h-4 w-4 rounded-full transition-transform duration-200",style:{background:"var(--bg-card)",transform:le?"translateX(16px)":"translateX(0)"}})}),i.jsx("span",{className:"text-xs",style:{color:"var(--text-primary)"},children:M("dashboard.timezone")})]})]}),de&&i.jsxs("button",{onClick:()=>v("mobile"),className:"lg:hidden flex items-center justify-center gap-2 w-full py-2.5 rounded-xl text-xs font-semibold mb-4",style:{background:"var(--bg-card)",border:"1px solid var(--border-primary)",color:"var(--text-primary)"},children:[i.jsx(Hm,{size:13,style:{color:"var(--text-faint)"}}),K&&le?`${M("dashboard.currency")} & ${M("dashboard.timezone")}`:M(K?"dashboard.currency":"dashboard.timezone")]}),i.jsxs("div",{style:{display:"flex",gap:24,alignItems:"flex-start"},children:[i.jsxs("div",{style:{flex:1,minWidth:0},children:[r&&i.jsxs(i.Fragment,{children:[i.jsx("div",{style:{height:260,background:"#e5e7eb",borderRadius:20,marginBottom:32,animation:"pulse 1.5s ease-in-out infinite"}}),i.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(280px, 1fr))",gap:16},children:[1,2,3].map(H=>i.jsx(uI,{},H))})]}),!r&&e.length===0&&i.jsxs("div",{style:{textAlign:"center",padding:"80px 20px"},children:[i.jsx("div",{style:{width:80,height:80,background:"#f3f4f6",borderRadius:"50%",display:"flex",alignItems:"center",justifyContent:"center",margin:"0 auto 20px"},children:i.jsx(As,{size:36,style:{color:"#d1d5db"}})}),i.jsx("h3",{style:{margin:"0 0 8px",fontSize:18,fontWeight:700,color:"var(--text-primary)"},children:M("dashboard.emptyTitle")}),i.jsx("p",{style:{margin:"0 0 24px",fontSize:14,color:"#9ca3af",maxWidth:340,marginLeft:"auto",marginRight:"auto"},children:M("dashboard.emptyText")}),E("trip_create")&&i.jsxs("button",{onClick:()=>{p(null),d(!0)},style:{display:"inline-flex",alignItems:"center",gap:7,padding:"10px 22px",background:"var(--accent)",color:"var(--accent-text)",border:"none",borderRadius:12,fontSize:14,fontWeight:600,cursor:"pointer",fontFamily:"inherit"},children:[i.jsx(Ft,{size:16})," ",M("dashboard.emptyButton")]})]}),!r&&ee&&k==="grid"&&i.jsx(sI,{trip:ee,t:M,locale:N,dark:B,onEdit:E("trip_edit",ee)||E("trip_cover_upload",ee)?H=>{p(H),d(!0)}:void 0,onDelete:E("trip_delete",ee)?U:void 0,onArchive:E("trip_archive",ee)?ce:void 0,onClick:H=>j(`/trips/${H.id}`)}),!r&&(k==="grid"?pe:e).length>0&&(k==="grid"?i.jsx("div",{className:"trip-grid",style:{display:"grid",gap:16,marginBottom:40},children:pe.map(H=>i.jsx(lI,{trip:H,t:M,locale:N,onEdit:E("trip_edit",H)||E("trip_cover_upload",H)?ne=>{p(ne),d(!0)}:void 0,onDelete:E("trip_delete",H)?U:void 0,onArchive:E("trip_archive",H)?ce:void 0,onClick:ne=>j(`/trips/${ne.id}`)},H.id))}):i.jsx("div",{style:{display:"flex",flexDirection:"column",gap:8,marginBottom:40},children:e.map(H=>i.jsx(dI,{trip:H,t:M,locale:N,onEdit:E("trip_edit",H)||E("trip_cover_upload",H)?ne=>{p(ne),d(!0)}:void 0,onDelete:E("trip_delete",H)?U:void 0,onArchive:E("trip_archive",H)?ce:void 0,onClick:ne=>j(`/trips/${ne.id}`)},H.id))})),!r&&a.length>0&&i.jsxs("div",{style:{borderTop:"1px solid #f3f4f6",paddingTop:24},children:[i.jsxs("button",{onClick:()=>g(H=>!H),style:{display:"flex",alignItems:"center",gap:8,background:"none",border:"none",cursor:"pointer",padding:"4px 0",marginBottom:m?16:0,fontFamily:"inherit"},children:[i.jsx(Bm,{size:15,style:{color:"#9ca3af"}}),i.jsxs("span",{style:{fontSize:13,fontWeight:600,color:"#6b7280"},children:[M("dashboard.archived")," (",a.length,")"]}),m?i.jsx(dr,{size:14,style:{color:"#9ca3af"}}):i.jsx(Ja,{size:14,style:{color:"#9ca3af"}})]}),m&&i.jsx("div",{style:{display:"flex",flexDirection:"column",gap:8},children:a.map(H=>i.jsx(cI,{trip:H,t:M,locale:N,onEdit:E("trip_edit",H)||E("trip_cover_upload",H)?ne=>{p(ne),d(!0)}:void 0,onUnarchive:E("trip_archive",H)?q:void 0,onDelete:E("trip_delete",H)?U:void 0,onClick:ne=>j(`/trips/${ne.id}`)},H.id))})]})]}),de&&i.jsxs("div",{className:"hidden lg:flex flex-col gap-4",style:{position:"sticky",top:80,flexShrink:0,width:280},children:[K&&i.jsx(tv,{dark:B,style:{borderRadius:16},children:i.jsx(F0,{})}),le&&i.jsx(tv,{dark:B,style:{borderRadius:16},children:i.jsx(B0,{})})]})]})]})}),f==="mobile"&&i.jsx("div",{className:"lg:hidden fixed inset-0 z-50",style:{background:"rgba(0,0,0,0.3)",touchAction:"none"},onClick:()=>v(!1),children:i.jsxs("div",{className:"absolute bottom-0 left-0 right-0 flex flex-col overflow-hidden",style:{maxHeight:"80vh",background:"var(--bg-card)",borderRadius:"20px 20px 0 0",overscrollBehavior:"contain"},onClick:H=>H.stopPropagation(),children:[i.jsxs("div",{className:"flex items-center justify-between px-4 py-3",style:{borderBottom:"1px solid var(--border-secondary)"},children:[i.jsx("span",{className:"text-sm font-semibold",style:{color:"var(--text-primary)"},children:"Widgets"}),i.jsx("button",{onClick:()=>v(!1),className:"w-7 h-7 rounded-full flex items-center justify-center",style:{background:"var(--bg-secondary)"},children:i.jsx(bt,{size:14,style:{color:"var(--text-primary)"}})})]}),i.jsxs("div",{className:"flex-1 overflow-auto p-4 space-y-4",children:[K&&i.jsx(F0,{}),le&&i.jsx(B0,{})]})]})}),i.jsx(Gj,{isOpen:s,onClose:()=>{d(!1),p(null)},onSave:c?$:O,trip:c,onCoverUpdate:A}),i.jsx(Zj,{isOpen:!!S,onClose:()=>b(null),onConfirm:T,title:M("common.delete"),message:M("dashboard.confirm.delete",{title:(S==null?void 0:S.title)||""})}),i.jsx("style",{children:` @keyframes pulse { 0%, 100% { opacity: 1 } 50% { opacity: 0.5 } @@ -1206,7 +1206,7 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál .trip-grid { grid-template-columns: repeat(3, 1fr); } @media(max-width: 1024px) { .trip-grid { grid-template-columns: repeat(2, 1fr); } } @media(max-width: 640px) { .trip-grid { grid-template-columns: 1fr; } } - `})]})}const pI=(e,t)=>({refreshPlaces:async a=>{try{const n=await Pr.list(a);e({places:n.places})}catch(n){console.error("Failed to refresh places:",n)}},addPlace:async(a,n)=>{try{const r=await Pr.create(a,n);return e(o=>({places:[r.place,...o.places]})),r.place}catch(r){throw new Error(st(r,"Error adding place"))}},updatePlace:async(a,n,r)=>{try{const o=await Pr.update(a,n,r);return e(s=>{const d={...s.assignments};let c=!1;for(const[p,m]of Object.entries(s.assignments))m.some(g=>{var f;return((f=g.place)==null?void 0:f.id)===n})&&(d[p]=m.map(g=>{var f;return((f=g.place)==null?void 0:f.id)===n?{...g,place:{...o.place,place_time:g.place.place_time,end_time:g.place.end_time}}:g}),c=!0);return{places:s.places.map(p=>p.id===n?o.place:p),...c?{assignments:d}:{}}}),o.place}catch(o){throw new Error(st(o,"Error updating place"))}},deletePlace:async(a,n)=>{try{await Pr.delete(a,n),e(r=>{const o={...r.assignments};let s=!1;for(const[d,c]of Object.entries(r.assignments))c.some(p=>{var m;return((m=p.place)==null?void 0:m.id)===n})&&(o[d]=c.filter(p=>{var m;return((m=p.place)==null?void 0:m.id)!==n}),s=!0);return{places:r.places.filter(d=>d.id!==n),...s?{assignments:o}:{}}})}catch(r){throw new Error(st(r,"Error deleting place"))}}}),mI=(e,t)=>({assignPlaceToDay:async(a,n,r,o)=>{const s=t(),d=s.places.find(f=>f.id===parseInt(String(r)));if(!d)return;const c=Date.now()*-1,p=[...s.assignments[String(n)]||[]],m=o??p.length,g={id:c,day_id:parseInt(String(n)),order_index:m,notes:null,place:d};p.splice(m,0,g),e(f=>({assignments:{...f.assignments,[String(n)]:p}}));try{const f=await Li.create(a,n,{place_id:r}),v={...f.assignment,place:f.assignment.place||d,order_index:o!=null?m:f.assignment.order_index};if(e(k=>({assignments:{...k.assignments,[String(n)]:k.assignments[String(n)].map(x=>x.id===c?v:x)}})),o!=null){const x=(t().assignments[String(n)]||[]).map(S=>S.id).filter(S=>S>0);if(x.length>0)try{await Li.reorder(a,n,x),e(S=>{const b=S.assignments[String(n)]||[],w=x.map((j,P)=>{const M=b.find(N=>N.id===j);return M?{...M,order_index:P}:null}).filter(j=>j!==null);return{assignments:{...S.assignments,[String(n)]:w}}})}catch{}}return f.assignment}catch(f){throw e(v=>({assignments:{...v.assignments,[String(n)]:v.assignments[String(n)].filter(k=>k.id!==c)}})),new Error(st(f,"Error assigning place"))}},removeAssignment:async(a,n,r)=>{const o=t().assignments;e(s=>({assignments:{...s.assignments,[String(n)]:s.assignments[String(n)].filter(d=>d.id!==r)}}));try{await Li.delete(a,n,r)}catch(s){throw e({assignments:o}),new Error(st(s,"Error removing assignment"))}},reorderAssignments:async(a,n,r)=>{const o=t().assignments,s=t().assignments[String(n)]||[],d=r.map((c,p)=>{const m=s.find(g=>g.id===c);return m?{...m,order_index:p}:null}).filter(c=>c!==null);e(c=>({assignments:{...c.assignments,[String(n)]:d}}));try{await Li.reorder(a,n,r)}catch(c){throw e({assignments:o}),new Error(st(c,"Error reordering"))}},moveAssignment:async(a,n,r,o,s=null)=>{const d=t(),c=d.assignments,p=(d.assignments[String(r)]||[]).find(v=>v.id===n);if(!p)return;const m=(d.assignments[String(o)]||[]).slice().sort((v,k)=>v.order_index-k.order_index),g=s!==null?s:m.length,f=[...m];f.splice(g,0,{...p,day_id:parseInt(String(o))}),f.forEach((v,k)=>{v.order_index=k}),e(v=>({assignments:{...v.assignments,[String(r)]:v.assignments[String(r)].filter(k=>k.id!==n),[String(o)]:f}}));try{await Li.move(a,n,o,g),f.length>1&&await Li.reorder(a,o,f.map(v=>v.id))}catch(v){throw e({assignments:c}),new Error(st(v,"Error moving assignment"))}},setAssignments:a=>{e({assignments:a})}}),gI=(e,t)=>({updateDayNotes:async(a,n,r)=>{try{await bl.update(a,n,{notes:r}),e(o=>({days:o.days.map(s=>s.id===parseInt(String(n))?{...s,notes:r}:s)}))}catch(o){throw new Error(st(o,"Error updating notes"))}},updateDayTitle:async(a,n,r)=>{try{await bl.update(a,n,{title:r}),e(o=>({days:o.days.map(s=>s.id===parseInt(String(n))?{...s,title:r}:s)}))}catch(o){throw new Error(st(o,"Error updating day name"))}},addDayNote:async(a,n,r)=>{const o=Date.now()*-1,s={id:o,day_id:n,...r,created_at:new Date().toISOString()};e(d=>({dayNotes:{...d.dayNotes,[String(n)]:[...d.dayNotes[String(n)]||[],s]}}));try{const d=await Ks.create(a,n,r);return e(c=>({dayNotes:{...c.dayNotes,[String(n)]:(c.dayNotes[String(n)]||[]).map(p=>p.id===o?d.note:p)}})),d.note}catch(d){throw e(c=>({dayNotes:{...c.dayNotes,[String(n)]:(c.dayNotes[String(n)]||[]).filter(p=>p.id!==o)}})),new Error(st(d,"Error adding note"))}},updateDayNote:async(a,n,r,o)=>{try{const s=await Ks.update(a,n,r,o);return e(d=>({dayNotes:{...d.dayNotes,[String(n)]:(d.dayNotes[String(n)]||[]).map(c=>c.id===r?s.note:c)}})),s.note}catch(s){throw new Error(st(s,"Error updating note"))}},deleteDayNote:async(a,n,r)=>{const o=t().dayNotes;e(s=>({dayNotes:{...s.dayNotes,[String(n)]:(s.dayNotes[String(n)]||[]).filter(d=>d.id!==r)}}));try{await Ks.delete(a,n,r)}catch(s){throw e({dayNotes:o}),new Error(st(s,"Error deleting note"))}},moveDayNote:async(a,n,r,o,s=9999)=>{const c=(t().dayNotes[String(n)]||[]).find(p=>p.id===o);if(c){e(p=>({dayNotes:{...p.dayNotes,[String(n)]:(p.dayNotes[String(n)]||[]).filter(m=>m.id!==o)}}));try{await Ks.delete(a,n,o);const p=await Ks.create(a,r,{text:c.text,time:c.time,icon:c.icon,sort_order:s});e(m=>({dayNotes:{...m.dayNotes,[String(r)]:[...m.dayNotes[String(r)]||[],p.note]}}))}catch(p){throw e(m=>({dayNotes:{...m.dayNotes,[String(n)]:[...m.dayNotes[String(n)]||[],c]}})),new Error(st(p,"Error moving note"))}}}}),hI=(e,t)=>({addPackingItem:async(a,n)=>{try{const r=await qn.create(a,n);return e(o=>({packingItems:[...o.packingItems,r.item]})),r.item}catch(r){throw new Error(st(r,"Error adding item"))}},updatePackingItem:async(a,n,r)=>{try{const o=await qn.update(a,n,r);return e(s=>({packingItems:s.packingItems.map(d=>d.id===n?o.item:d)})),o.item}catch(o){throw new Error(st(o,"Error updating item"))}},deletePackingItem:async(a,n)=>{const r=t().packingItems;e(o=>({packingItems:o.packingItems.filter(s=>s.id!==n)}));try{await qn.delete(a,n)}catch(o){throw e({packingItems:r}),new Error(st(o,"Error deleting item"))}},togglePackingItem:async(a,n,r)=>{e(o=>({packingItems:o.packingItems.map(s=>s.id===n?{...s,checked:r?1:0}:s)}));try{await qn.update(a,n,{checked:r})}catch{e(o=>({packingItems:o.packingItems.map(s=>s.id===n?{...s,checked:r?0:1}:s)}))}}}),fI=(e,t)=>({loadBudgetItems:async a=>{try{const n=await Cr.list(a);e({budgetItems:n.items})}catch(n){console.error("Failed to load budget items:",n)}},addBudgetItem:async(a,n)=>{try{const r=await Cr.create(a,n);return e(o=>({budgetItems:[...o.budgetItems,r.item]})),r.item}catch(r){throw new Error(st(r,"Error adding budget item"))}},updateBudgetItem:async(a,n,r)=>{try{const o=await Cr.update(a,n,r);return e(s=>({budgetItems:s.budgetItems.map(d=>d.id===n?o.item:d)})),o.item}catch(o){throw new Error(st(o,"Error updating budget item"))}},deleteBudgetItem:async(a,n)=>{const r=t().budgetItems;e(o=>({budgetItems:o.budgetItems.filter(s=>s.id!==n)}));try{await Cr.delete(a,n)}catch(o){throw e({budgetItems:r}),new Error(st(o,"Error deleting budget item"))}},setBudgetItemMembers:async(a,n,r)=>{const o=await Cr.setMembers(a,n,r);return e(s=>({budgetItems:s.budgetItems.map(d=>d.id===n?{...d,members:o.members,persons:o.item.persons}:d)})),o},toggleBudgetMemberPaid:async(a,n,r,o)=>{await Cr.togglePaid(a,n,r,o),e(s=>({budgetItems:s.budgetItems.map(d=>d.id===n?{...d,members:(d.members||[]).map(c=>c.user_id===r?{...c,paid:o}:c)}:d)}))}}),vI=(e,t)=>({loadReservations:async a=>{try{const n=await lo.list(a);e({reservations:n.reservations})}catch(n){console.error("Failed to load reservations:",n)}},addReservation:async(a,n)=>{try{const r=await lo.create(a,n);return e(o=>({reservations:[r.reservation,...o.reservations]})),r.reservation}catch(r){throw new Error(st(r,"Error creating reservation"))}},updateReservation:async(a,n,r)=>{try{const o=await lo.update(a,n,r);return e(s=>({reservations:s.reservations.map(d=>d.id===n?o.reservation:d)})),o.reservation}catch(o){throw new Error(st(o,"Error updating reservation"))}},toggleReservationStatus:async(a,n)=>{const r=t().reservations,o=r.find(d=>d.id===n);if(!o)return;const s=o.status==="confirmed"?"pending":"confirmed";e(d=>({reservations:d.reservations.map(c=>c.id===n?{...c,status:s}:c)}));try{await lo.update(a,n,{status:s})}catch{e({reservations:r})}},deleteReservation:async(a,n)=>{try{await lo.delete(a,n),e(r=>({reservations:r.reservations.filter(o=>o.id!==n)}))}catch(r){throw new Error(st(r,"Error deleting reservation"))}}}),yI=(e,t)=>({loadFiles:async a=>{try{const n=await kn.list(a);e({files:n.files})}catch(n){console.error("Failed to load files:",n)}},addFile:async(a,n)=>{try{const r=await kn.upload(a,n);return e(o=>({files:[r.file,...o.files]})),r.file}catch(r){throw new Error(st(r,"Error uploading file"))}},deleteFile:async(a,n)=>{try{await kn.delete(a,n),e(r=>({files:r.files.filter(o=>o.id!==n)}))}catch(r){throw new Error(st(r,"Error deleting file"))}}});function bI(e,t){const{type:a,...n}=t;e(r=>{var o;switch(a){case"place:created":return r.places.some(s=>s.id===n.place.id)?{}:{places:[n.place,...r.places]};case"place:updated":return{places:r.places.map(s=>s.id===n.place.id?n.place:s),assignments:Object.fromEntries(Object.entries(r.assignments).map(([s,d])=>[s,d.map(c=>{var p;return((p=c.place)==null?void 0:p.id)===n.place.id?{...c,place:n.place}:c})]))};case"place:deleted":return{places:r.places.filter(s=>s.id!==n.placeId),assignments:Object.fromEntries(Object.entries(r.assignments).map(([s,d])=>[s,d.filter(c=>{var p;return((p=c.place)==null?void 0:p.id)!==n.placeId})]))};case"assignment:created":{const s=String(n.assignment.day_id),d=r.assignments[s]||[],c=((o=n.assignment.place)==null?void 0:o.id)||n.assignment.place_id;return d.some(p=>{var m;return p.id===n.assignment.id||c&&((m=p.place)==null?void 0:m.id)===c})?d.some(m=>{var g;return m.id<0&&((g=m.place)==null?void 0:g.id)===c})?{assignments:{...r.assignments,[s]:d.map(m=>{var g;return m.id<0&&((g=m.place)==null?void 0:g.id)===c?n.assignment:m})}}:{}:{assignments:{...r.assignments,[s]:[...d,n.assignment]}}}case"assignment:updated":{const s=String(n.assignment.day_id);return{assignments:{...r.assignments,[s]:(r.assignments[s]||[]).map(d=>d.id===n.assignment.id?{...d,...n.assignment}:d)}}}case"assignment:deleted":{const s=String(n.dayId);return{assignments:{...r.assignments,[s]:(r.assignments[s]||[]).filter(d=>d.id!==n.assignmentId)}}}case"assignment:moved":{const s=String(n.oldDayId),d=String(n.newDayId),c=n.assignment;return{assignments:{...r.assignments,[s]:(r.assignments[s]||[]).filter(p=>p.id!==c.id),[d]:[...(r.assignments[d]||[]).filter(p=>p.id!==c.id),c]}}}case"assignment:reordered":{const s=String(n.dayId),d=r.assignments[s]||[],p=(n.orderedIds||[]).map((m,g)=>{const f=d.find(v=>v.id===m);return f?{...f,order_index:g}:null}).filter(m=>m!==null);return{assignments:{...r.assignments,[s]:p}}}case"day:created":return r.days.some(s=>s.id===n.day.id)?{}:{days:[...r.days,n.day]};case"day:updated":return{days:r.days.map(s=>s.id===n.day.id?n.day:s)};case"day:deleted":{const s=String(n.dayId),d={...r.assignments};delete d[s];const c={...r.dayNotes};return delete c[s],{days:r.days.filter(p=>p.id!==n.dayId),assignments:d,dayNotes:c}}case"dayNote:created":{const s=String(n.dayId),d=r.dayNotes[s]||[];return d.some(c=>c.id===n.note.id)?{}:{dayNotes:{...r.dayNotes,[s]:[...d,n.note]}}}case"dayNote:updated":{const s=String(n.dayId);return{dayNotes:{...r.dayNotes,[s]:(r.dayNotes[s]||[]).map(d=>d.id===n.note.id?n.note:d)}}}case"dayNote:deleted":{const s=String(n.dayId);return{dayNotes:{...r.dayNotes,[s]:(r.dayNotes[s]||[]).filter(d=>d.id!==n.noteId)}}}case"packing:created":return r.packingItems.some(s=>s.id===n.item.id)?{}:{packingItems:[...r.packingItems,n.item]};case"packing:updated":return{packingItems:r.packingItems.map(s=>s.id===n.item.id?n.item:s)};case"packing:deleted":return{packingItems:r.packingItems.filter(s=>s.id!==n.itemId)};case"budget:created":return r.budgetItems.some(s=>s.id===n.item.id)?{}:{budgetItems:[...r.budgetItems,n.item]};case"budget:updated":return{budgetItems:r.budgetItems.map(s=>s.id===n.item.id?n.item:s)};case"budget:deleted":return{budgetItems:r.budgetItems.filter(s=>s.id!==n.itemId)};case"budget:members-updated":return{budgetItems:r.budgetItems.map(s=>s.id===n.itemId?{...s,members:n.members,persons:n.persons}:s)};case"budget:member-paid-updated":return{budgetItems:r.budgetItems.map(s=>s.id===n.itemId?{...s,members:(s.members||[]).map(d=>d.user_id===n.userId?{...d,paid:n.paid}:d)}:s)};case"reservation:created":return r.reservations.some(s=>s.id===n.reservation.id)?{}:{reservations:[n.reservation,...r.reservations]};case"reservation:updated":return{reservations:r.reservations.map(s=>s.id===n.reservation.id?n.reservation:s)};case"reservation:deleted":return{reservations:r.reservations.filter(s=>s.id!==n.reservationId)};case"trip:updated":return{trip:n.trip};case"file:created":return r.files.some(s=>s.id===n.file.id)?{}:{files:[n.file,...r.files]};case"file:updated":return{files:r.files.map(s=>s.id===n.file.id?n.file:s)};case"file:deleted":return{files:r.files.filter(s=>s.id!==n.fileId)};case"memories:updated":return window.dispatchEvent(new CustomEvent("memories:updated",{detail:n})),{};default:return{}}})}const zt=Wl((e,t)=>({trip:null,days:[],places:[],assignments:{},dayNotes:{},packingItems:[],tags:[],categories:[],budgetItems:[],files:[],reservations:[],selectedDayId:null,isLoading:!1,error:null,setSelectedDay:a=>e({selectedDayId:a}),handleRemoteEvent:a=>bI(e,a),loadTrip:async a=>{e({isLoading:!0,error:null});try{const[n,r,o,s,d,c]=await Promise.all([Va.get(a),bl.list(a),Pr.list(a),qn.list(a),Kf.list(),ss.list()]),p={},m={};for(const g of r.days)p[String(g.id)]=g.assignments||[],m[String(g.id)]=g.notes_items||[];e({trip:n.trip,days:r.days,places:o.places,assignments:p,dayNotes:m,packingItems:s.items,tags:d.tags,categories:c.categories,isLoading:!1})}catch(n){const r=n instanceof Error?n.message:"Unknown error";throw e({isLoading:!1,error:r}),n}},refreshDays:async a=>{try{const n=await bl.list(a),r={},o={};for(const s of n.days)r[String(s.id)]=s.assignments||[],o[String(s.id)]=s.notes_items||[];e({days:n.days,assignments:r,dayNotes:o})}catch(n){console.error("Failed to refresh days:",n)}},updateTrip:async(a,n)=>{try{const r=await Va.update(a,n);e({trip:r.trip});const o=await bl.list(a),s={},d={};for(const c of o.days)s[String(c.id)]=c.assignments||[],d[String(c.id)]=c.notes_items||[];return e({days:o.days,assignments:s,dayNotes:d}),r.trip}catch(r){throw new Error(st(r,"Error updating trip"))}},addTag:async a=>{try{const n=await Kf.create(a);return e(r=>({tags:[...r.tags,n.tag]})),n.tag}catch(n){throw new Error(st(n,"Error creating tag"))}},addCategory:async a=>{try{const n=await ss.create(a);return e(r=>({categories:[...r.categories,n.category]})),n.category}catch(n){throw new Error(st(n,"Error creating category"))}},...pI(e),...mI(e,t),...gI(e,t),...hI(e,t),...fI(e,t),...vI(e,t),...yI(e)}));var No={},Kl={};/** + `})]})}const mI=(e,t)=>({refreshPlaces:async a=>{try{const n=await Pr.list(a);e({places:n.places})}catch(n){console.error("Failed to refresh places:",n)}},addPlace:async(a,n)=>{try{const r=await Pr.create(a,n);return e(o=>({places:[r.place,...o.places]})),r.place}catch(r){throw new Error(st(r,"Error adding place"))}},updatePlace:async(a,n,r)=>{try{const o=await Pr.update(a,n,r);return e(s=>{const d={...s.assignments};let c=!1;for(const[p,m]of Object.entries(s.assignments))m.some(g=>{var f;return((f=g.place)==null?void 0:f.id)===n})&&(d[p]=m.map(g=>{var f;return((f=g.place)==null?void 0:f.id)===n?{...g,place:{...o.place,place_time:g.place.place_time,end_time:g.place.end_time}}:g}),c=!0);return{places:s.places.map(p=>p.id===n?o.place:p),...c?{assignments:d}:{}}}),o.place}catch(o){throw new Error(st(o,"Error updating place"))}},deletePlace:async(a,n)=>{try{await Pr.delete(a,n),e(r=>{const o={...r.assignments};let s=!1;for(const[d,c]of Object.entries(r.assignments))c.some(p=>{var m;return((m=p.place)==null?void 0:m.id)===n})&&(o[d]=c.filter(p=>{var m;return((m=p.place)==null?void 0:m.id)!==n}),s=!0);return{places:r.places.filter(d=>d.id!==n),...s?{assignments:o}:{}}})}catch(r){throw new Error(st(r,"Error deleting place"))}}}),gI=(e,t)=>({assignPlaceToDay:async(a,n,r,o)=>{const s=t(),d=s.places.find(f=>f.id===parseInt(String(r)));if(!d)return;const c=Date.now()*-1,p=[...s.assignments[String(n)]||[]],m=o??p.length,g={id:c,day_id:parseInt(String(n)),order_index:m,notes:null,place:d};p.splice(m,0,g),e(f=>({assignments:{...f.assignments,[String(n)]:p}}));try{const f=await Li.create(a,n,{place_id:r}),v={...f.assignment,place:f.assignment.place||d,order_index:o!=null?m:f.assignment.order_index};if(e(k=>({assignments:{...k.assignments,[String(n)]:k.assignments[String(n)].map(x=>x.id===c?v:x)}})),o!=null){const x=(t().assignments[String(n)]||[]).map(S=>S.id).filter(S=>S>0);if(x.length>0)try{await Li.reorder(a,n,x),e(S=>{const b=S.assignments[String(n)]||[],w=x.map((j,P)=>{const M=b.find(N=>N.id===j);return M?{...M,order_index:P}:null}).filter(j=>j!==null);return{assignments:{...S.assignments,[String(n)]:w}}})}catch{}}return f.assignment}catch(f){throw e(v=>({assignments:{...v.assignments,[String(n)]:v.assignments[String(n)].filter(k=>k.id!==c)}})),new Error(st(f,"Error assigning place"))}},removeAssignment:async(a,n,r)=>{const o=t().assignments;e(s=>({assignments:{...s.assignments,[String(n)]:s.assignments[String(n)].filter(d=>d.id!==r)}}));try{await Li.delete(a,n,r)}catch(s){throw e({assignments:o}),new Error(st(s,"Error removing assignment"))}},reorderAssignments:async(a,n,r)=>{const o=t().assignments,s=t().assignments[String(n)]||[],d=r.map((c,p)=>{const m=s.find(g=>g.id===c);return m?{...m,order_index:p}:null}).filter(c=>c!==null);e(c=>({assignments:{...c.assignments,[String(n)]:d}}));try{await Li.reorder(a,n,r)}catch(c){throw e({assignments:o}),new Error(st(c,"Error reordering"))}},moveAssignment:async(a,n,r,o,s=null)=>{const d=t(),c=d.assignments,p=(d.assignments[String(r)]||[]).find(v=>v.id===n);if(!p)return;const m=(d.assignments[String(o)]||[]).slice().sort((v,k)=>v.order_index-k.order_index),g=s!==null?s:m.length,f=[...m];f.splice(g,0,{...p,day_id:parseInt(String(o))}),f.forEach((v,k)=>{v.order_index=k}),e(v=>({assignments:{...v.assignments,[String(r)]:v.assignments[String(r)].filter(k=>k.id!==n),[String(o)]:f}}));try{await Li.move(a,n,o,g),f.length>1&&await Li.reorder(a,o,f.map(v=>v.id))}catch(v){throw e({assignments:c}),new Error(st(v,"Error moving assignment"))}},setAssignments:a=>{e({assignments:a})}}),hI=(e,t)=>({updateDayNotes:async(a,n,r)=>{try{await bl.update(a,n,{notes:r}),e(o=>({days:o.days.map(s=>s.id===parseInt(String(n))?{...s,notes:r}:s)}))}catch(o){throw new Error(st(o,"Error updating notes"))}},updateDayTitle:async(a,n,r)=>{try{await bl.update(a,n,{title:r}),e(o=>({days:o.days.map(s=>s.id===parseInt(String(n))?{...s,title:r}:s)}))}catch(o){throw new Error(st(o,"Error updating day name"))}},addDayNote:async(a,n,r)=>{const o=Date.now()*-1,s={id:o,day_id:n,...r,created_at:new Date().toISOString()};e(d=>({dayNotes:{...d.dayNotes,[String(n)]:[...d.dayNotes[String(n)]||[],s]}}));try{const d=await Ks.create(a,n,r);return e(c=>({dayNotes:{...c.dayNotes,[String(n)]:(c.dayNotes[String(n)]||[]).map(p=>p.id===o?d.note:p)}})),d.note}catch(d){throw e(c=>({dayNotes:{...c.dayNotes,[String(n)]:(c.dayNotes[String(n)]||[]).filter(p=>p.id!==o)}})),new Error(st(d,"Error adding note"))}},updateDayNote:async(a,n,r,o)=>{try{const s=await Ks.update(a,n,r,o);return e(d=>({dayNotes:{...d.dayNotes,[String(n)]:(d.dayNotes[String(n)]||[]).map(c=>c.id===r?s.note:c)}})),s.note}catch(s){throw new Error(st(s,"Error updating note"))}},deleteDayNote:async(a,n,r)=>{const o=t().dayNotes;e(s=>({dayNotes:{...s.dayNotes,[String(n)]:(s.dayNotes[String(n)]||[]).filter(d=>d.id!==r)}}));try{await Ks.delete(a,n,r)}catch(s){throw e({dayNotes:o}),new Error(st(s,"Error deleting note"))}},moveDayNote:async(a,n,r,o,s=9999)=>{const c=(t().dayNotes[String(n)]||[]).find(p=>p.id===o);if(c){e(p=>({dayNotes:{...p.dayNotes,[String(n)]:(p.dayNotes[String(n)]||[]).filter(m=>m.id!==o)}}));try{await Ks.delete(a,n,o);const p=await Ks.create(a,r,{text:c.text,time:c.time,icon:c.icon,sort_order:s});e(m=>({dayNotes:{...m.dayNotes,[String(r)]:[...m.dayNotes[String(r)]||[],p.note]}}))}catch(p){throw e(m=>({dayNotes:{...m.dayNotes,[String(n)]:[...m.dayNotes[String(n)]||[],c]}})),new Error(st(p,"Error moving note"))}}}}),fI=(e,t)=>({addPackingItem:async(a,n)=>{try{const r=await qn.create(a,n);return e(o=>({packingItems:[...o.packingItems,r.item]})),r.item}catch(r){throw new Error(st(r,"Error adding item"))}},updatePackingItem:async(a,n,r)=>{try{const o=await qn.update(a,n,r);return e(s=>({packingItems:s.packingItems.map(d=>d.id===n?o.item:d)})),o.item}catch(o){throw new Error(st(o,"Error updating item"))}},deletePackingItem:async(a,n)=>{const r=t().packingItems;e(o=>({packingItems:o.packingItems.filter(s=>s.id!==n)}));try{await qn.delete(a,n)}catch(o){throw e({packingItems:r}),new Error(st(o,"Error deleting item"))}},togglePackingItem:async(a,n,r)=>{e(o=>({packingItems:o.packingItems.map(s=>s.id===n?{...s,checked:r?1:0}:s)}));try{await qn.update(a,n,{checked:r})}catch{e(o=>({packingItems:o.packingItems.map(s=>s.id===n?{...s,checked:r?0:1}:s)}))}}}),vI=(e,t)=>({loadBudgetItems:async a=>{try{const n=await Cr.list(a);e({budgetItems:n.items})}catch(n){console.error("Failed to load budget items:",n)}},addBudgetItem:async(a,n)=>{try{const r=await Cr.create(a,n);return e(o=>({budgetItems:[...o.budgetItems,r.item]})),r.item}catch(r){throw new Error(st(r,"Error adding budget item"))}},updateBudgetItem:async(a,n,r)=>{try{const o=await Cr.update(a,n,r);return e(s=>({budgetItems:s.budgetItems.map(d=>d.id===n?o.item:d)})),o.item}catch(o){throw new Error(st(o,"Error updating budget item"))}},deleteBudgetItem:async(a,n)=>{const r=t().budgetItems;e(o=>({budgetItems:o.budgetItems.filter(s=>s.id!==n)}));try{await Cr.delete(a,n)}catch(o){throw e({budgetItems:r}),new Error(st(o,"Error deleting budget item"))}},setBudgetItemMembers:async(a,n,r)=>{const o=await Cr.setMembers(a,n,r);return e(s=>({budgetItems:s.budgetItems.map(d=>d.id===n?{...d,members:o.members,persons:o.item.persons}:d)})),o},toggleBudgetMemberPaid:async(a,n,r,o)=>{await Cr.togglePaid(a,n,r,o),e(s=>({budgetItems:s.budgetItems.map(d=>d.id===n?{...d,members:(d.members||[]).map(c=>c.user_id===r?{...c,paid:o}:c)}:d)}))}}),yI=(e,t)=>({loadReservations:async a=>{try{const n=await lo.list(a);e({reservations:n.reservations})}catch(n){console.error("Failed to load reservations:",n)}},addReservation:async(a,n)=>{try{const r=await lo.create(a,n);return e(o=>({reservations:[r.reservation,...o.reservations]})),r.reservation}catch(r){throw new Error(st(r,"Error creating reservation"))}},updateReservation:async(a,n,r)=>{try{const o=await lo.update(a,n,r);return e(s=>({reservations:s.reservations.map(d=>d.id===n?o.reservation:d)})),o.reservation}catch(o){throw new Error(st(o,"Error updating reservation"))}},toggleReservationStatus:async(a,n)=>{const r=t().reservations,o=r.find(d=>d.id===n);if(!o)return;const s=o.status==="confirmed"?"pending":"confirmed";e(d=>({reservations:d.reservations.map(c=>c.id===n?{...c,status:s}:c)}));try{await lo.update(a,n,{status:s})}catch{e({reservations:r})}},deleteReservation:async(a,n)=>{try{await lo.delete(a,n),e(r=>({reservations:r.reservations.filter(o=>o.id!==n)}))}catch(r){throw new Error(st(r,"Error deleting reservation"))}}}),bI=(e,t)=>({loadFiles:async a=>{try{const n=await kn.list(a);e({files:n.files})}catch(n){console.error("Failed to load files:",n)}},addFile:async(a,n)=>{try{const r=await kn.upload(a,n);return e(o=>({files:[r.file,...o.files]})),r.file}catch(r){throw new Error(st(r,"Error uploading file"))}},deleteFile:async(a,n)=>{try{await kn.delete(a,n),e(r=>({files:r.files.filter(o=>o.id!==n)}))}catch(r){throw new Error(st(r,"Error deleting file"))}}});function xI(e,t){const{type:a,...n}=t;e(r=>{var o;switch(a){case"place:created":return r.places.some(s=>s.id===n.place.id)?{}:{places:[n.place,...r.places]};case"place:updated":return{places:r.places.map(s=>s.id===n.place.id?n.place:s),assignments:Object.fromEntries(Object.entries(r.assignments).map(([s,d])=>[s,d.map(c=>{var p;return((p=c.place)==null?void 0:p.id)===n.place.id?{...c,place:n.place}:c})]))};case"place:deleted":return{places:r.places.filter(s=>s.id!==n.placeId),assignments:Object.fromEntries(Object.entries(r.assignments).map(([s,d])=>[s,d.filter(c=>{var p;return((p=c.place)==null?void 0:p.id)!==n.placeId})]))};case"assignment:created":{const s=String(n.assignment.day_id),d=r.assignments[s]||[],c=((o=n.assignment.place)==null?void 0:o.id)||n.assignment.place_id;return d.some(p=>{var m;return p.id===n.assignment.id||c&&((m=p.place)==null?void 0:m.id)===c})?d.some(m=>{var g;return m.id<0&&((g=m.place)==null?void 0:g.id)===c})?{assignments:{...r.assignments,[s]:d.map(m=>{var g;return m.id<0&&((g=m.place)==null?void 0:g.id)===c?n.assignment:m})}}:{}:{assignments:{...r.assignments,[s]:[...d,n.assignment]}}}case"assignment:updated":{const s=String(n.assignment.day_id);return{assignments:{...r.assignments,[s]:(r.assignments[s]||[]).map(d=>d.id===n.assignment.id?{...d,...n.assignment}:d)}}}case"assignment:deleted":{const s=String(n.dayId);return{assignments:{...r.assignments,[s]:(r.assignments[s]||[]).filter(d=>d.id!==n.assignmentId)}}}case"assignment:moved":{const s=String(n.oldDayId),d=String(n.newDayId),c=n.assignment;return{assignments:{...r.assignments,[s]:(r.assignments[s]||[]).filter(p=>p.id!==c.id),[d]:[...(r.assignments[d]||[]).filter(p=>p.id!==c.id),c]}}}case"assignment:reordered":{const s=String(n.dayId),d=r.assignments[s]||[],p=(n.orderedIds||[]).map((m,g)=>{const f=d.find(v=>v.id===m);return f?{...f,order_index:g}:null}).filter(m=>m!==null);return{assignments:{...r.assignments,[s]:p}}}case"day:created":return r.days.some(s=>s.id===n.day.id)?{}:{days:[...r.days,n.day]};case"day:updated":return{days:r.days.map(s=>s.id===n.day.id?n.day:s)};case"day:deleted":{const s=String(n.dayId),d={...r.assignments};delete d[s];const c={...r.dayNotes};return delete c[s],{days:r.days.filter(p=>p.id!==n.dayId),assignments:d,dayNotes:c}}case"dayNote:created":{const s=String(n.dayId),d=r.dayNotes[s]||[];return d.some(c=>c.id===n.note.id)?{}:{dayNotes:{...r.dayNotes,[s]:[...d,n.note]}}}case"dayNote:updated":{const s=String(n.dayId);return{dayNotes:{...r.dayNotes,[s]:(r.dayNotes[s]||[]).map(d=>d.id===n.note.id?n.note:d)}}}case"dayNote:deleted":{const s=String(n.dayId);return{dayNotes:{...r.dayNotes,[s]:(r.dayNotes[s]||[]).filter(d=>d.id!==n.noteId)}}}case"packing:created":return r.packingItems.some(s=>s.id===n.item.id)?{}:{packingItems:[...r.packingItems,n.item]};case"packing:updated":return{packingItems:r.packingItems.map(s=>s.id===n.item.id?n.item:s)};case"packing:deleted":return{packingItems:r.packingItems.filter(s=>s.id!==n.itemId)};case"budget:created":return r.budgetItems.some(s=>s.id===n.item.id)?{}:{budgetItems:[...r.budgetItems,n.item]};case"budget:updated":return{budgetItems:r.budgetItems.map(s=>s.id===n.item.id?n.item:s)};case"budget:deleted":return{budgetItems:r.budgetItems.filter(s=>s.id!==n.itemId)};case"budget:members-updated":return{budgetItems:r.budgetItems.map(s=>s.id===n.itemId?{...s,members:n.members,persons:n.persons}:s)};case"budget:member-paid-updated":return{budgetItems:r.budgetItems.map(s=>s.id===n.itemId?{...s,members:(s.members||[]).map(d=>d.user_id===n.userId?{...d,paid:n.paid}:d)}:s)};case"reservation:created":return r.reservations.some(s=>s.id===n.reservation.id)?{}:{reservations:[n.reservation,...r.reservations]};case"reservation:updated":return{reservations:r.reservations.map(s=>s.id===n.reservation.id?n.reservation:s)};case"reservation:deleted":return{reservations:r.reservations.filter(s=>s.id!==n.reservationId)};case"trip:updated":return{trip:n.trip};case"file:created":return r.files.some(s=>s.id===n.file.id)?{}:{files:[n.file,...r.files]};case"file:updated":return{files:r.files.map(s=>s.id===n.file.id?n.file:s)};case"file:deleted":return{files:r.files.filter(s=>s.id!==n.fileId)};case"memories:updated":return window.dispatchEvent(new CustomEvent("memories:updated",{detail:n})),{};default:return{}}})}const zt=Wl((e,t)=>({trip:null,days:[],places:[],assignments:{},dayNotes:{},packingItems:[],tags:[],categories:[],budgetItems:[],files:[],reservations:[],selectedDayId:null,isLoading:!1,error:null,setSelectedDay:a=>e({selectedDayId:a}),handleRemoteEvent:a=>xI(e,a),loadTrip:async a=>{e({isLoading:!0,error:null});try{const[n,r,o,s,d,c]=await Promise.all([Va.get(a),bl.list(a),Pr.list(a),qn.list(a),Kf.list(),ss.list()]),p={},m={};for(const g of r.days)p[String(g.id)]=g.assignments||[],m[String(g.id)]=g.notes_items||[];e({trip:n.trip,days:r.days,places:o.places,assignments:p,dayNotes:m,packingItems:s.items,tags:d.tags,categories:c.categories,isLoading:!1})}catch(n){const r=n instanceof Error?n.message:"Unknown error";throw e({isLoading:!1,error:r}),n}},refreshDays:async a=>{try{const n=await bl.list(a),r={},o={};for(const s of n.days)r[String(s.id)]=s.assignments||[],o[String(s.id)]=s.notes_items||[];e({days:n.days,assignments:r,dayNotes:o})}catch(n){console.error("Failed to refresh days:",n)}},updateTrip:async(a,n)=>{try{const r=await Va.update(a,n);e({trip:r.trip});const o=await bl.list(a),s={},d={};for(const c of o.days)s[String(c.id)]=c.assignments||[],d[String(c.id)]=c.notes_items||[];return e({days:o.days,assignments:s,dayNotes:d}),r.trip}catch(r){throw new Error(st(r,"Error updating trip"))}},addTag:async a=>{try{const n=await Kf.create(a);return e(r=>({tags:[...r.tags,n.tag]})),n.tag}catch(n){throw new Error(st(n,"Error creating tag"))}},addCategory:async a=>{try{const n=await ss.create(a);return e(r=>({categories:[...r.categories,n.category]})),n.category}catch(n){throw new Error(st(n,"Error creating category"))}},...mI(e),...gI(e,t),...hI(e,t),...fI(e,t),...vI(e,t),...yI(e,t),...bI(e)}));var No={},Kl={};/** * @license React * react-dom-server-legacy.browser.production.min.js * @@ -1214,13 +1214,13 @@ Všechna aktuální data budou přepsána.`,"backup.confirm.delete":'Smazat zál * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var Zj=y;function _t(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,a=1;a