<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <link rel="icon" type="image/svg+xml" href="/neolodge.svg" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link rel="manifest" href="/manifest.json" />
    <title>Ferienhaus</title>
    <script>
      (function () {
        var DEFAULT_TITLE = "Ferienhaus";
        var DEFAULT_TENANT = "default";
        var TENANT_PARAM = "tenant";
        var TENANT_OVERRIDE_STORAGE_KEY = "fjoro_tenant_override";
        var LANGUAGE_STORAGE_KEY = "fjoro-language";
        var TENANT_LANG_CACHE_PREFIX = "fjoro-tenant-lang-cache:";
        var APP_BASE_PATH = "/";
        var TENANT_MAP = {
          "cala-d-or-mallorca.de": "cal-mallorca",
          "www.cala-d-or-mallorca.de": "cal-mallorca",
          "faszination-bayern.de": "fh-bayern",
          "www.faszination-bayern.de": "fh-bayern",
          "ferienhaus-albanien.de": "fh-albanien",
          "www.ferienhaus-albanien.de": "fh-albanien",
          "ferienhaus-am-see.de": "fh-am-see",
          "www.ferienhaus-am-see.de": "fh-am-see",
          "ferienhaus-belgien.de": "fh-belgien",
          "www.ferienhaus-belgien.de": "fh-belgien",
          "ferienhaus-daenemark.com": "fh-daenemark",
          "www.ferienhaus-daenemark.com": "fh-daenemark",
          "ferienhaus-deutschland.com": "fh-deutschland",
          "www.ferienhaus-deutschland.com": "fh-deutschland",
          "ferienhaus-england.de": "fh-england",
          "www.ferienhaus-england.de": "fh-england",
          "ferienhaus-finnland.com": "fh-finnland",
          "www.ferienhaus-finnland.com": "fh-finnland",
          "ferienhaus-frankreich.de": "fh-frankreich",
          "www.ferienhaus-frankreich.de": "fh-frankreich",
          "ferienhaus-gardasee.de": "fh-gardasee",
          "www.ferienhaus-gardasee.de": "fh-gardasee",
          "ferienhaus-gran-canaria.de": "fh-gran-canaria",
          "www.ferienhaus-gran-canaria.de": "fh-gran-canaria",
          "ferienhaus-griechenland.de": "fh-griechenland",
          "www.ferienhaus-griechenland.de": "fh-griechenland",
          "ferienhaus-holland.com": "fh-holland",
          "www.ferienhaus-holland.com": "fh-holland",
          "ferienhaus-hund.de": "fh-hund",
          "www.ferienhaus-hund.de": "fh-hund",
          "ferienhaus-italien.de": "fh-italien",
          "www.ferienhaus-italien.de": "fh-italien",
          "ferienhaus-korsika.de": "fh-korsika",
          "www.ferienhaus-korsika.de": "fh-korsika",
          "ferienhaus-kroatien.de": "fh-kroatien",
          "www.ferienhaus-kroatien.de": "fh-kroatien",
          "ferienhaus-lanzarote.de": "fh-lanzarote",
          "www.ferienhaus-lanzarote.de": "fh-lanzarote",
          "ferienhaus-mecklenburg.de": "fh-mecklenburg",
          "www.ferienhaus-mecklenburg.de": "fh-mecklenburg",
          "ferienhaus-mosel.de": "fh-mosel",
          "www.ferienhaus-mosel.de": "fh-mosel",
          "ferienhaus-nordsee.online": "fh-nordsee",
          "www.ferienhaus-nordsee.online": "fh-nordsee",
          "ferienhaus-norwegen.com": "fh-norwegen",
          "www.ferienhaus-norwegen.com": "fh-norwegen",
          "xn--ferienhaus-sterreich-ebc.de": "fh-oesterreich",
          "www.xn--ferienhaus-sterreich-ebc.de": "fh-oesterreich",
          "ferienhaus-österreich.de": "fh-oesterreich",
          "www.ferienhaus-österreich.de": "fh-oesterreich",
          "ferienhaus-ostsee.de": "fh-ostsee",
          "www.ferienhaus-ostsee.de": "fh-ostsee",
          "ferienhaus-polen.de": "fh-polen",
          "www.ferienhaus-polen.de": "fh-polen",
          "ferienhaus-portugal.de": "fh-portugal",
          "www.ferienhaus-portugal.de": "fh-portugal",
          "ferienhaus-smaland.de": "fh-smaland",
          "www.ferienhaus-smaland.de": "fh-smaland",
          "ferienhaus-spanien.de": "fh-spanien",
          "www.ferienhaus-spanien.de": "fh-spanien",
          "ferienhaus-sylt.eu": "fh-sylt",
          "www.ferienhaus-sylt.eu": "fh-sylt",
          "ferienhaus-teneriffa.de": "fh-teneriffa",
          "www.ferienhaus-teneriffa.de": "fh-teneriffa",
          "ferienhaus-zypern.de": "fh-zypern",
          "www.ferienhaus-zypern.de": "fh-zypern",
          "ferienhaus.ki": "fh-ki",
          "www.ferienhaus.ki": "fh-ki",
          "xn--ferienhuser-mallorca-hzb.de": "fh-mallorca",
          "www.xn--ferienhuser-mallorca-hzb.de": "fh-mallorca",
          "ferienhäuser-mallorca.de": "fh-mallorca",
          "www.ferienhäuser-mallorca.de": "fh-mallorca",
          "xn--ferienhuser-schweiz-82b.de": "fh-schweiz",
          "www.xn--ferienhuser-schweiz-82b.de": "fh-schweiz",
          "ferienhäuser-schweiz.de": "fh-schweiz",
          "www.ferienhäuser-schweiz.de": "fh-schweiz",
          "ferienhausurlaub.com": "fh-urlaub",
          "www.ferienhausurlaub.com": "fh-urlaub",
          "ferienwohnung-bodensee.de": "fh-bodensee",
          "www.ferienwohnung-bodensee.de": "fh-bodensee",
          "ferienwohnung-schwarzwald.de": "fh-schwarzwald",
          "www.ferienwohnung-schwarzwald.de": "fh-schwarzwald"
        };
        var TENANT_MATOMO_SITE_IDS = {
          "default": 0,
          "cal-mallorca": 0,
          "fh-albanien": 16,
          "fh-am-see": 17,
          "fh-bayern": 5,
          "fh-belgien": 18,
          "fh-bodensee": 6,
          "fh-daenemark": 19,
          "fh-deutschland": 8,
          "fh-england": 20,
          "fh-finnland": 21,
          "fh-frankreich": 22,
          "fh-gardasee": 23,
          "fh-gran-canaria": 24,
          "fh-griechenland": 25,
          "fh-holland": 26,
          "fh-hund": 27,
          "fh-italien": 3,
          "fh-ki": 0,
          "fh-korsika": 28,
          "fh-kroatien": 29,
          "fh-lanzarote": 30,
          "fh-mallorca": 31,
          "fh-mecklenburg": 9,
          "fh-mosel": 10,
          "fh-nordsee": 11,
          "fh-norwegen": 4,
          "fh-oesterreich": 15,
          "fh-ostsee": 12,
          "fh-polen": 32,
          "fh-portugal": 33,
          "fh-schwarzwald": 13,
          "fh-schweiz": 34,
          "fh-smaland": 35,
          "fh-spanien": 2,
          "fh-sylt": 14,
          "fh-teneriffa": 36,
          "fh-urlaub": 37,
          "fh-zypern": 38
        };
        var META_SELECTORS = {
          description: { type: "name", value: "description" },
          keywords: { type: "name", value: "keywords" },
          robots: { type: "name", value: "robots" },
          ogTitle: { type: "property", value: "og:title" },
          ogDescription: { type: "property", value: "og:description" },
          ogType: { type: "property", value: "og:type" },
          ogUrl: { type: "property", value: "og:url" },
          ogImage: { type: "property", value: "og:image" },
          ogSiteName: { type: "property", value: "og:site_name" },
          twitterCard: { type: "name", value: "twitter:card" },
          twitterTitle: { type: "name", value: "twitter:title" },
          twitterDescription: { type: "name", value: "twitter:description" },
          twitterImage: { type: "name", value: "twitter:image" }
        };

        function normalizeTenantValue(value) {
          return String(value || "").trim();
        }

        function getStoredTenantOverride() {
          try {
            return normalizeTenantValue(window.sessionStorage.getItem(TENANT_OVERRIDE_STORAGE_KEY));
          } catch {
            return "";
          }
        }

        function getTenantId() {
          var params = new URLSearchParams(window.location.search);
          var paramOverride = normalizeTenantValue(params.get(TENANT_PARAM));

          if (paramOverride) {
            if (paramOverride === "auto" || paramOverride === DEFAULT_TENANT) {
              try {
                window.sessionStorage.removeItem(TENANT_OVERRIDE_STORAGE_KEY);
              } catch {}
            } else {
              try {
                window.sessionStorage.setItem(TENANT_OVERRIDE_STORAGE_KEY, paramOverride);
              } catch {}
              return paramOverride;
            }
          }

          var storedOverride = getStoredTenantOverride();
          if (storedOverride) return storedOverride;

          return TENANT_MAP[window.location.hostname] || DEFAULT_TENANT;
        }

        function getMatomoSiteId() {
          var tenantId = getTenantId();
          return TENANT_MATOMO_SITE_IDS[tenantId] || TENANT_MATOMO_SITE_IDS.default || DEFAULT_MATOMO_SITE_ID;
        }

        function getCurrentLanguage() {
          var languageFromUrl = getLanguageFromPath(window.location.pathname);
          if (languageFromUrl) {
            return languageFromUrl;
          }
          return "de";
        }

        function getLanguageFromPath(pathname) {
          var normalizedPath = String(pathname || "/");
          var basePath = normalizeBasePath(APP_BASE_PATH);

          if (basePath !== "/" && normalizedPath.indexOf(basePath) === 0) {
            normalizedPath = normalizedPath.slice(basePath.length - 1) || "/";
          }

          var segments = normalizedPath.split("/").filter(Boolean);
          var firstSegment = segments[0] || "";
          return ["de", "en", "nl", "fr", "it", "pl", "es", "da", "sv", "tr", "ru"].indexOf(firstSegment) >= 0
            ? firstSegment
            : null;
        }

        function normalizeBasePath(path) {
          if (!path || path === "/") return "/";
          return path.endsWith("/") ? path : path + "/";
        }

        function getRoutePageName() {
          var basePath = normalizeBasePath(APP_BASE_PATH);
          var pathname = window.location.pathname || "/";

          if (basePath !== "/" && pathname.indexOf(basePath) === 0) {
            pathname = pathname.slice(basePath.length - 1) || "/";
          }

          if (pathname === "/" || pathname === "") {
            return "Home";
          }

          var segments = pathname.replace(/^\/+/, "").split("/").filter(Boolean);
          if (segments.length === 0) {
            return "Home";
          }

          var firstSegment = segments[0];
          var routeSegment = ["de", "en", "nl", "fr", "it", "pl", "es", "da", "sv", "tr", "ru"].indexOf(firstSegment) >= 0
            ? (segments[1] || "")
            : firstSegment;
          return routeSegment || "Home";
        }

        function buildMetaKeys(routeName) {
          var keys = [];
          if (!routeName) return keys;

          keys.push(routeName);
          keys.push(String(routeName).toLowerCase());

          var contentPage = new URLSearchParams(window.location.search).get("page");
          if (contentPage && (routeName === "Content" || routeName === "Legal")) {
            keys.unshift(contentPage);
            keys.unshift(String(routeName).toLowerCase() + "." + contentPage);
            keys.unshift(routeName + "." + contentPage);
          }

          return keys;
        }

        function resolveMeta(data) {
          var meta = data && data.meta;
          if (!meta || typeof meta !== "object") return null;

          var keys = buildMetaKeys(getRoutePageName());
          for (var i = 0; i < keys.length; i += 1) {
            var key = keys[i];
            if (meta[key] && typeof meta[key] === "object") {
              return meta[key];
            }
          }
          return null;
        }

        function setMetaTag(selector, value) {
          if (!value) return;
          var query = selector.type === "name"
            ? 'meta[name="' + selector.value + '"]'
            : 'meta[property="' + selector.value + '"]';
          var tag = document.head.querySelector(query);
          if (!tag) {
            tag = document.createElement("meta");
            tag.setAttribute(selector.type, selector.value);
            document.head.appendChild(tag);
          }
          tag.setAttribute("content", value);
        }

        function applyMeta(meta) {
          if (!meta || typeof meta !== "object") return;

          if (typeof meta.title === "string" && meta.title.trim()) {
            document.title = meta.title.trim();
          } else if (!document.title || document.title === "Ferienhaus") {
            document.title = DEFAULT_TITLE;
          }

          Object.keys(META_SELECTORS).forEach(function (key) {
            if (typeof meta[key] === "string" && meta[key].trim()) {
              setMetaTag(META_SELECTORS[key], meta[key].trim());
            }
          });
        }

        function readCachedTenantLang(tenantId, lang) {
          try {
            var raw = sessionStorage.getItem(TENANT_LANG_CACHE_PREFIX + tenantId + ":" + lang);
            return raw ? JSON.parse(raw) : null;
          } catch {
            return null;
          }
        }

        function cacheTenantLang(tenantId, lang, data) {
          try {
            sessionStorage.setItem(TENANT_LANG_CACHE_PREFIX + tenantId + ":" + lang, JSON.stringify(data));
          } catch {}
        }

        var tenantId = getTenantId();
        window.__FJORO_MATOMO_SITE_ID__ = getMatomoSiteId();
        if (tenantId === DEFAULT_TENANT) {
          document.title = DEFAULT_TITLE;
          return;
        }

        var lang = getCurrentLanguage();
        var cachedData = readCachedTenantLang(tenantId, lang);
        if (cachedData) {
          applyMeta(resolveMeta(cachedData));
        } else {
          document.title = DEFAULT_TITLE;
        }

        var tenantAssetBase = normalizeBasePath(APP_BASE_PATH) + "assets/" + tenantId;
        var assetUrl = tenantAssetBase + "/lang/" + lang + ".json";
        fetch(assetUrl)
          .then(function (response) {
            if (!response.ok) throw new Error("Failed to load tenant lang");
            return response.json();
          })
          .then(function (data) {
            cacheTenantLang(tenantId, lang, data);
            applyMeta(resolveMeta(data));
          })
          .catch(function () {
            if (!document.title || document.title === "Base44 APP") {
              document.title = DEFAULT_TITLE;
            }
          });
      })();
    </script>
    <script>
      var _paq = window._paq = window._paq || [];
      /* tracker methods like "setCustomDimension" should be called before "trackPageView" */
      _paq.push(["setExcludedQueryParams", ["account","accountnum","address","address1","address2","address3","addressline1","addressline2","adres","adresse","adresse1","adresse2","adresse3","adresse_email","adresseemail","adressepostale","age","alter","auth","authpw","bic","billingaddress","billingaddress1","billingaddress2","calle","cardnumber","carte","cartebancaire","carteidentite","cb","cc","ccc","cccsc","cccvc","cccvv","ccexpiry","ccexpmonth","ccexpyear","ccname","ccnumber","cctype","cell","cellphone","city","civilite","civilit\u00e9","cle","clientid","clientsecret","cl\u00e9","codepostal","company","consumerkey","consumersecret","contrasenya","contrase\u00f1a","courriel","cp","creditcard","creditcardnumber","cvc","cvv","datedenaissance","dateexpiration","datenaissance","dateofbirth","debitcard","departement","direcci\u00f3n","dob","domain","d\u00e9partement","ebost","email","emailaddress","emailadresse","entreprise","epos","epost","eposta","exp","expiration","familyname","firma","firstname","formlogin","fullname","gender","genre","geschlecht","gst","gstnumber","handynummer","has\u0142o","heslo","iban","ibanaccountnum","ibanaccountnumber","id","identifiant","identifier","identitenationale","indirizzo","kartakredytowa","kennwort","keyconsumerkey","keyconsumersecret","konto","kontonr","kontonummer","kredietkaart","kreditkarte","kreditkort","lastname","login","mail","mdp","mobiili","mobile","mobilne","mot_de_passe","motdepasse","nachname","name","nationalite","nickname","nom","nomcomplet","nomdefamille","nomfamille","nss","numero_fiscal","numerocarte","numerocarteidentite","numerocompte","numerodecarte","numerofiscal","numeroidentite","numeromobile","numeropasseport","numerosecuritesociale","numerotelephone","numerotva","numfiscal","numsecu","numtva","osoite","parole","pass","passeport","passord","password","passwort","pasword","paswort","paword","pays","phone","pin","plz","portable","postalcode","postcode","postleitzahl","prenom","privatekey","pr\u00e9nom","publickey","pw","pwd","pword","pwrd","questionsecrete","region","reponsesecrete","rib","rue","secret","secretcl\u00e9","secretq","secretquestion","securitesociale","sexe","shippingaddress","shippingaddress1","shippingaddress2","signature","siren","siret","socialsec","socialsecuritynumber","societe","socsec","sokak","ssn","steuernummer","strasse","street","surname","swift","tax","taxnumber","tel","telefon","telefonnr","telefonnummer","telefono","telephone","titre","token","token_auth","tokenauth","tva","t\u00e9l\u00e9phone","ulica","user","username","utilisateur","vat","vatnumber","via","ville","voie","vorname","wachtwoord","wagwoord","webhooksecret","website","zip","zipcode"]]);
      _paq.push(['trackPageView']);
      _paq.push(['enableLinkTracking']);
      (function() {
        var u="//stats.meinwi.de/";
        _paq.push(['setTrackerUrl', u+'matomo.php']);
        _paq.push(['setSiteId', window.__FJORO_MATOMO_SITE_ID__ || 'XZY']);
        var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
        g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
      })();
    </script>
    <script type="module" crossorigin src="/assets/index-DKGvYFL6.js"></script>
    <link rel="modulepreload" crossorigin href="/assets/react-vendor-CL9rY5bF.js">
    <link rel="modulepreload" crossorigin href="/assets/icons-CTvR-5Ha.js">
    <link rel="modulepreload" crossorigin href="/assets/query-DPSXZgLB.js">
    <link rel="modulepreload" crossorigin href="/assets/app-vendor-D92RZllA.js">
    <link rel="modulepreload" crossorigin href="/assets/router-BWgZd9H4.js">
    <link rel="stylesheet" crossorigin href="/assets/index-DpkP_iEV.css">
  </head>
  <body>
    <div id="root"></div>
  </body>
</html>
