{"id":39974,"date":"2022-06-16T15:14:22","date_gmt":"2022-06-16T15:14:22","guid":{"rendered":"https:\/\/spaineasy.com\/?page_id=39974"},"modified":"2026-09-08T17:35:14","modified_gmt":"2026-09-08T17:35:14","slug":"immobiliensuche","status":"publish","type":"page","link":"https:\/\/spaineasy.com\/de\/immobiliensuche\/","title":{"rendered":"Immobiliensuche"},"content":{"rendered":"<div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-1 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:0px;--awb-padding-right:0px;--awb-padding-bottom:0px;--awb-padding-left:0px;--awb-padding-top-small:0.5em;--awb-padding-right-small:0px;--awb-padding-bottom-small:0px;--awb-padding-left-small:0px;--awb-margin-top:0px;--awb-margin-bottom:0px;--awb-margin-top-small:0px;--awb-margin-bottom-small:0px;--awb-min-height:1200px;--awb-flex-wrap:wrap;\" id=\"sablewarm\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1216.8px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-0 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-spacing-right-large:0%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:0%;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"ole-form-outer\" style=\"min-height:100vh; width:100%; background:#fdfaf1; display:flex; align-items:flex-start; justify-content:center;\">\n  <div id=\"ole-form-root\"><\/div>\n<\/div>\n\n<script>\n(function(){\n\n  \"use strict\";\n\n  \/* =========================================================\n     1) HUBSPOT + OUTPUT CONFIG  (SpainEasy brand)\n     ========================================================= *\/\n  var HS = {\n    portalId: \"26258389\",\n    formGuid: \"14d59464-0052-402a-940c-17bd74709ff3\", \/\/ SpainEasy form \"Your property search (Optimized)\"\n    googleMapsKey: \"AIzaSyC-DNEU1BU8KyQPlRVDRGJEb1cwtZ3W6nk\", \/\/ restricted to spaineasy.com \u2014 enables Spanish city autocomplete (falls back to pills)\n    sendToHubSpot: true,\n    redirectUrl: \"https:\/\/spaineasy.com\/thank-you\/\", \/\/ success -> thank-you page (passes firstname & location params)\n    subscriptionTypeId: 152859509, \/\/ \"Marketing Information\" (account-level)\n    fields: {\n      timing:     \"o_en_tesvous_dans_votre_projet_\",\n      worries:    \"questce_qui_vous_inquite_le_plus_\",\n      budget:     \"budget_pour_l_achat\",\n      location:   \"ville_ou_region_recherchee\",\n      property:   \"quelles_caractristiques_recherchezvous_dans_le_bien_immobilier_\",\n      motivation: \"quelle_est_votre_principale_motivation_pour_acheter_en_espagne_\",\n      service:    \"seriezvous_intress_par_un_service_qui_gre_les_dmarches_sur_place_pour_vous_\",\n      cb_days:    \"jour_rappel_souhaite\",\n      cb_slot:    \"creneau_rappel\",\n      cb_date:    \"date_rappel_souhaitee\",\n      cb_clienttime: \"heure_chez_le_client\", \/\/ single-line text \u2014 local time at the client + their time zone\n      cb_rdv:     \"a_voulu_prendre_rendez_vous\",\n      firstname:  \"firstname\", lastname:\"lastname\", email:\"email\", phone:\"phone\"\n    }\n  };\n\n  var SHOW_HERO = true;\n  var RISKS_FORMAT = \"quiz\";\n  var CLOSE_URL = \"https:\/\/spaineasy.com\/\";\n  var RDV_URL = \"https:\/\/spaineasy.com\/meeting\/\"; \/\/ booking page, used if \"I'd rather book a call\"\n  var PRIVACY_URL = \"https:\/\/spaineasy.com\/privacy\/\";\n  var SCROLL_TOTOP = true;\n  var SCROLL_OFFSET = 24;\n\n  \/* =========================================================\n     2) STEPS  (American English)\n     ========================================================= *\/\n  var STEPS = [\n    { id:\"timing\", type:\"single\", required:true, ebIco:\"award\", heroIco:\"calendar-clock\",\n      heroCap:\"Jedes Projekt hat sein eigenes Tempo \u2013 wir richten uns nach Ihrem.\",\n      eyebrow:\"Expertise auf K\u00e4uferseite\",\n      q:\"Wann m\u00f6chten Sie mit Ihrer Suche beginnen?\",\n      options:[\n        {label:\"So bald wie m\u00f6glich\", ic:\"zap\"},\n        {label:\"Innerhalb der n\u00e4chsten 6 Monate\", ic:\"calendar-days\"},\n        {label:\"Innerhalb von 12 Monaten\", ic:\"sprout\"},\n        {label:\"Es h\u00e4ngt von etwas Laufendem ab (Hausverkauf, Sparen\u2026)\", ic:\"git-branch\"},\n        {label:\"Ich schaue mich erst einmal um\", ic:\"lightbulb\"}\n      ],\n      react:{\n        \"So bald wie m\u00f6glich\":{emoji:\"\\u2600\\uFE0F\",msg:\"Ol\u00e9! Wir k\u00f6nnen sofort loslegen.\"},\n        \"Innerhalb der n\u00e4chsten 6 Monate\":{emoji:\"\\uD83D\\uDDD3\\uFE0F\",msg:\"Der ideale Zeitraum, um sich in Ruhe vorzubereiten.\"},\n        \"Innerhalb von 12 Monaten\":{emoji:\"\\uD83C\\uDF31\",msg:\"Genug Zeit, um genau das richtige Zuhause zu finden.\"},\n        \"Es h\u00e4ngt von etwas Laufendem ab (Hausverkauf, Sparen\u2026)\":{emoji:\"\\uD83E\\uDD1D\",msg:\"Wir richten uns nach Ihrem Tempo \u2013 ohne Druck.\"},\n        \"Ich schaue mich erst einmal um\":{emoji:\"\\uD83D\\uDCA1\",msg:\"Schauen Sie sich in Ruhe um \u2013 wir sind da, sobald Sie bereit sind.\"}\n      }},\n\n    { id:\"worries\", type:\"multi\", required:true, ebIco:\"shield-check\", heroIco:\"shield-check\",\n      heroCap:\"Ihre Sorgen sind genau das, was wir Ihnen abnehmen.\",\n      eyebrow:\"Ein Kaufberater, der ausschlie\u00dflich f\u00fcr Sie arbeitet\",\n      q:\"Was beunruhigt Sie am meisten?\", sub:\"Alles Zutreffende ausw\u00e4hlen\",\n      options:[\n        {label:\"Recht & Papierkram (NIE, Notar)\", ic:\"file-text\"},\n        {label:\"Die Sprachbarriere (Spanisch)\", ic:\"languages\"},\n        {label:\"Ob die Immobilie in einwandfreiem Zustand ist\", ic:\"search-check\"},\n        {label:\"Die Entfernung (Hin- und R\u00fcckfl\u00fcge aus dem Ausland)\", ic:\"plane\"},\n        {label:\"Der spanische Beurkundungsprozess (weniger Pr\u00fcfungen als anderswo)\", ic:\"scale\"},\n        {label:\"Geldtransfer, W\u00e4hrung & Steuern\", ic:\"banknote\"},\n        {label:\"Nicht genug Zeit\", ic:\"clock\"}\n      ],\n      optMsg:{\n        \"Recht & Papierkram (NIE, Notar)\":{emoji:\"\\uD83D\\uDDC2\\uFE0F\",msg:\"Der Papierkram \u2013 NIE, Notar, Bank \u2013 wir \u00fcbernehmen alles von Anfang bis Ende, damit Sie es nicht m\u00fcssen.\"},\n        \"Die Sprachbarriere (Spanisch)\":{emoji:\"\\uD83D\\uDDE3\\uFE0F\",msg:\"Sprachbarriere? Wir \u00fcbersetzen und verhandeln auf Spanisch f\u00fcr Sie \u2013 und erkl\u00e4ren Ihnen alles auf Englisch.\"},\n        \"Ob die Immobilie in einwandfreiem Zustand ist\":{emoji:\"\\uD83D\\uDD0D\",msg:\"Wir pr\u00fcfen und begutachten alles vor Ort, bevor Sie sich \u00fcberhaupt festlegen.\"},\n        \"Die Entfernung (Hin- und R\u00fcckfl\u00fcge aus dem Ausland)\":{emoji:\"\\u2708\\uFE0F\",msg:\"Wir sind Ihre Augen und Ohren in Spanien \u2013 deutlich weniger Reisen f\u00fcr Sie.\"},\n        \"Der spanische Beurkundungsprozess (weniger Pr\u00fcfungen als anderswo)\":{emoji:\"\\u2696\\uFE0F\",msg:\"Wir f\u00fchren zus\u00e4tzlich zum Notar unsere eigene rechtliche Pr\u00fcfung durch \u2013 nichts entgeht uns.\"},\n        \"Geldtransfer, W\u00e4hrung & Steuern\":{emoji:\"\\uD83D\\uDCB1\",msg:\"Wir vermitteln Ihnen Devisen- und Steuerexperten, die sich mit internationalen \u00dcberweisungen nach Spanien bestens auskennen.\"},\n        \"Nicht genug Zeit\":{emoji:\"\\u23F3\",msg:\"Wir \u00fcbernehmen die Arbeit; Sie behalten die Entscheidung.\"}\n      },\n      multiMsg:{\n        \"2\":{emoji:\"\\uD83D\\uDEE1\\uFE0F\",msg:\"Zwei echte Anliegen \u2013 und genau die sichern wir f\u00fcr Sie, von Anfang bis Ende ab.\"},\n        \"3\":{emoji:\"\\uD83D\\uDEE1\\uFE0F\",msg:\"Drei berechtigte Sorgen. Die gute Nachricht: Genau das ist unsere Kernaufgabe.\"},\n        \"4\":{emoji:\"\\uD83D\\uDCAA\",msg:\"Viele Fragen sind normal, wenn man im Ausland kauft. Genau daf\u00fcr gibt es SpainEasy.\"},\n        \"5\":{emoji:\"\\uD83D\\uDCAA\",msg:\"Sie erkennen fast jede Falle \u2013 und das zu Recht. Wir entsch\u00e4rfen sie eine nach der anderen.\"},\n        \"6\":{emoji:\"\\uD83E\\uDD1D\",msg:\"Sie sehen das gro\u00dfe Ganze. Wir k\u00fcmmern uns um jeden einzelnen Punkt f\u00fcr Sie.\"},\n        \"7\":{emoji:\"\\uD83E\\uDD1D\",msg:\"Sie sehen das gro\u00dfe Ganze. Wir k\u00fcmmern uns um jeden einzelnen Punkt f\u00fcr Sie.\"}\n      },\n      reactAny:{emoji:\"\\uD83D\\uDEE1\\uFE0F\",msg:\"Jeder dieser Punkte geh\u00f6rt zu unserer Aufgabe \u2013 wir k\u00fcmmern uns um alles.\"}},\n\n    { id:\"location\", type:\"location\", required:true, ebIco:\"map\", heroIco:\"map-pin\",\n      heroCap:\"Ganz Spanien, von K\u00fcste zu K\u00fcste \u2013 wir suchen \u00fcberall f\u00fcr Sie.\",\n      eyebrow:\"Wir decken ganz Spanien ab\",\n      q:\"Wo in Spanien suchen Sie?\", placeholder:\"z. B. Marbella\",\n      cities:[\"Alicante\",\"Barcelona\",\"Benidorm\",\"C\u00e1diz\",\"Estepona\",\"Fuengirola\",\"Girona\",\"Granada\",\"Ibiza\",\"Madrid\",\"M\u00e1laga\",\"Marbella\",\"Mijas\",\"Nerja\",\"Palma de Mallorca\",\"Sevilla\",\"Sitges\",\"Tarragona\",\"Torrevieja\",\"Valencia\"],\n      regions:[\"Costa del Sol\",\"Costa Blanca\",\"Costa Brava\",\"Costa Dorada\",\"Andalusien\",\"Balearen\",\"Kanaren\",\"Katalonien\"]},\n\n    { id:\"budget\", type:\"budget\", required:true, ebIco:\"handshake\", heroIco:\"wallet\",\n      heroCap:\"Wir verhandeln stets in Ihrem Interesse \u2013 oft weit mehr wert als unsere Geb\u00fchr.\",\n      eyebrow:\"Wir verhandeln stets in Ihrem Interesse\",\n      q:\"Wie hoch ist Ihr Budget?\", placeholder:\"z. B. 350.000 \u20ac\", min:100000,\n      pills:[150000,200000,250000,300000,400000,500000,750000,1000000,1500000,2000000,3000000],\n      reactRanges:[\n        {max:149999,  emoji:\"\\uD83E\\uDDED\",msg:\"Unter 150.000 \u20ac wird es enger \u2013 aber wir finden auch dann noch echte Sch\u00e4tze in den richtigen Regionen.\"},\n        {max:299999,  emoji:\"\\uD83D\\uDD0D\",msg:\"In dieser Preisspanne gibt es echte Gelegenheiten zu entdecken.\"},\n        {max:499999,  emoji:\"\\u2600\\uFE0F\",msg:\"Ein idealer Bereich f\u00fcr Ihr Zuhause unter der spanischen Sonne.\"},\n        {max:999999,  emoji:\"\\uD83C\\uDFE1\",msg:\"Genug, um nach etwas wirklich Besonderem zu suchen.\"},\n        {max:999999999,emoji:\"\\u2728\",msg:\"Ol\u00e9! Das spanische Spitzensegment steht Ihnen offen.\"}\n      ]},\n\n    { id:\"property\", type:\"single\", required:true, ebIco:\"key-round\", heroIco:\"home\",\n      heroCap:\"Wir suchen das Zuhause, das zu Ihnen passt \u2013 nicht eines, das wir zuf\u00e4llig im Angebot haben.\",\n      eyebrow:\"Anders als eine Agentur, die ihre eigenen Objekte verkauft\",\n      q:\"Welche Art von Immobilie suchen Sie?\",\n      options:[\n        {label:\"Wohnung\", ic:\"building-2\"},\n        {label:\"Haus\", ic:\"home\"},\n        {label:\"Haus mit Garten oder Pool\", ic:\"trees\"},\n        {label:\"Luxusimmobilie\", ic:\"gem\"},\n        {label:\"Sonstiges\", ic:\"search\"}\n      ],\n      react:{\n        \"Wohnung\":{emoji:\"\\uD83C\\uDF07\",msg:\"Unkompliziert, hell und pflegeleicht \u2013 ein spanischer Klassiker.\"},\n        \"Haus\":{emoji:\"\\uD83C\\uDFE0\",msg:\"Platz und Sonne ganz f\u00fcr sich allein.\"},\n        \"Haus mit Garten oder Pool\":{emoji:\"\\uD83C\\uDF3F\",msg:\"Terrasse, Garten, Pool \u2013 der Traum.\"},\n        \"Luxusimmobilie\":{emoji:\"\\u2728\",msg:\"Das Spitzensegment \u2013 wir wissen genau, wo wir suchen m\u00fcssen.\"},\n        \"Sonstiges\":{emoji:\"\\uD83D\\uDD0E\",msg:\"Erz\u00e4hlen Sie uns alles \u2013 wir finden das Richtige f\u00fcr Sie.\"}\n      }},\n\n    { id:\"motivation\", type:\"single\", required:true, ebIco:\"compass\", heroIco:\"compass\",\n      heroCap:\"Zuhause, R\u00fcckzugsort, Ruhestand oder R\u00fcckkehr \u2013 Ihr Ziel bestimmt unsere Suche.\",\n      eyebrow:\"Begleitung in ganz Spanien\",\n      q:\"Was ist Ihr Hauptgrund f\u00fcr den Kauf in Spanien?\",\n      options:[\n        {label:\"Umzug \/ Hauptwohnsitz\", ic:\"sun\"},\n        {label:\"Ferien- \/ Zweitwohnsitz\", ic:\"umbrella\"},\n        {label:\"Ruhestand\", ic:\"palmtree\"},\n        {label:\"Kapitalanlage \/ Vermietung\", ic:\"trending-up\"},\n        {label:\"Sonstiges\", ic:\"handshake\"}\n      ],\n      react:{\n        \"Umzug \/ Hauptwohnsitz\":{emoji:\"\\u2600\\uFE0F\",msg:\"Ein ganz neues Leben in der Sonne beginnt.\"},\n        \"Ferien- \/ Zweitwohnsitz\":{emoji:\"\\uD83C\\uDFD6\\uFE0F\",msg:\"Ihr eigenes St\u00fcck Mittelmeer zum R\u00fcckzug.\"},\n        \"Ruhestand\":{emoji:\"\\uD83C\\uDF34\",msg:\"Sonne, ruhigere Morgen, niedrigere Lebenshaltungskosten \u2013 wohlverdient.\"},\n        \"Kapitalanlage \/ Vermietung\":{emoji:\"\\uD83D\\uDCC8\",msg:\"Der spanische Mietmarkt ist stark und w\u00e4chst weiter.\"},\n        \"Sonstiges\":{emoji:\"\\uD83E\\uDD1D\",msg:\"Was auch immer Ihr Ziel ist, wir richten die Suche danach aus.\"}\n      }},\n\n    { id:\"service\", type:\"single\", variant:\"yesno\", required:true, ebIco:\"headset\", heroIco:\"concierge-bell\",\n      heroCap:\"Wir k\u00fcmmern uns vor Ort um alles f\u00fcr Sie \u2013 Besichtigungen, Papierkram, Verhandlung.\",\n      eyebrow:\"Was K\u00e4ufer \u00fcber uns sagen\",\n      q:\"M\u00f6chten Sie, dass wir den gesamten Prozess vor Ort f\u00fcr Sie \u00fcbernehmen?\",\n      options:[\n        {label:\"Ja \u2013 das w\u00fcrde mir enorm viel Zeit sparen\", tone:\"pos\", ic:\"thumbs-up\"},\n        {label:\"Nein, ich m\u00f6chte es lieber selbst erledigen\", tone:\"neg\", ic:\"hand\"}\n      ],\n      react:{ \"Ja \u2013 das w\u00fcrde mir enorm viel Zeit sparen\":{emoji:\"\\uD83D\\uDE4C\",msg:\"Ol\u00e9! Wir k\u00fcmmern uns um alles f\u00fcr Sie.\"} }},\n\n    \/* Educational path: shown only if \"No\" to service (ids edu_*). *\/\n    { id:\"edu_couts\", type:\"teach\", skip:true, quizMix:true, ebIco:\"plane\", heroIco:\"plane\",\n      heroCap:\"Der Alleingang ist m\u00f6glich \u2013 schauen wir uns einfach an, was das wirklich bedeutet.\",\n      eyebrow:\"Punkt 1 \u2013 die versteckten Kosten\",\n      q:\"Der Alleingang kostet mehr, als Sie denken \u2013 noch bevor Sie \u00fcberhaupt unterschreiben.\",\n      quiz:{ ask:\"Wie viele Reisen nach Spanien sollte ein Paar f\u00fcr Besichtigungen und die Beurkundung einplanen?\",\n        options:[{label:\"Nur eine\"},{label:\"Zwei\"},{label:\"Mindestens drei\",correct:true}],\n        reveal:\"In der Regel 3 Reisen (2 Besichtigungsreisen + die Beurkundung), mehrere Hoteln\u00e4chte und Urlaubstage \u2013 dazu ein Anwalt zur Dokumentenpr\u00fcfung und ein \u00dcbersetzer, der beim Notar vorgeschrieben ist. Die Kosten summieren sich schnell.\" },\n      body:\"Noch vor dem eigentlichen Kaufpreis: ~3 Reisen (Besichtigungen + Beurkundung), Hoteln\u00e4chte, Urlaubstage, ein Anwalt zur Dokumentenpr\u00fcfung und ein beim Notar vorgeschriebener \u00dcbersetzer. Kosten, die man leicht vergisst zusammenzurechnen.\" },\n\n    { id:\"edu_notaire\", type:\"teach\", skip:true, quizMix:true, ebIco:\"scale\", heroIco:\"landmark\",\n      heroCap:\"Ein spanischer Notar ist nicht dasselbe wie ein Titelunternehmen oder eine Treuhandstelle im Ausland.\",\n      eyebrow:\"Punkt 2 \u2013 rechtliche Sicherheit\",\n      q:\"Der Notar pr\u00fcft nicht das, was Sie vielleicht annehmen.\",\n      quiz:{ ask:\"Wahr oder falsch: Eine einfache Verwaltungsverz\u00f6gerung (NIE nicht rechtzeitig ausgestellt) kann Sie Geld kosten.\",\n        options:[{label:\"Falsch \u2013 Sie k\u00f6nnen den Termin jederzeit verschieben\"},{label:\"Wahr, und es kann teuer werden\",correct:true}],\n        reveal:\"Wahr. Ohne rechtzeitige NIE verz\u00f6gert sich die Beurkundung \u2013 und Sie k\u00f6nnen die Anzahlung verlieren, \u00fcblicherweise 10 % des Preises. Zudem pr\u00fcft der Notar weder offene Schulden\/Belastungen noch die Legalit\u00e4t des Geb\u00e4udes.\" },\n      body:\"Der Notar beglaubigt die Urkunde, pr\u00fcft aber weder Schulden\/Belastungen noch die Rechtm\u00e4\u00dfigkeit der Immobilie. Schlimmer noch: Eine nicht rechtzeitig ausgestellte NIE kann die Beurkundung verz\u00f6gern und Sie die Anzahlung kosten \u2013 rund 10 % des Preises.\" },\n\n    { id:\"edu_objectivite\", type:\"teach\", skip:true, ebIco:\"compass\", heroIco:\"user-check\",\n      heroCap:\"Allein tragen Sie den Anwalt, den \u00dcbersetzer und die gesamte Recherche selbst.\",\n      eyebrow:\"Punkt 3 \u2013 wer arbeitet f\u00fcr Sie?\",\n      q:\"Auf sich allein gestellt, liegt alles bei Ihnen.\",\n      quiz:{ ask:\"Wer pr\u00fcft beim Alleingang die Immobilie und vertritt IHRE Interessen?\",\n        options:[{label:\"Die Agentur, die die Immobilie zeigt\"},{label:\"Der Notar\"},{label:\"Sie, zusammen mit den Experten, die Sie beauftragen\",correct:true}],\n        reveal:\"Sie. Eine Agentur vertritt die Immobilie des Verk\u00e4ufers \u2013 Pr\u00fcfungen sind nicht ihre Aufgabe, und manche dr\u00e4ngen Sie, schnell zu unterschreiben. Allein m\u00fcssen Sie einen Anwalt und einen \u00dcbersetzer engagieren und jede Recherche selbst durchf\u00fchren. SpainEasy steht an Ihrer Seite.\" },\n      body:\"Allein engagieren Sie den Anwalt, den \u00dcbersetzer und f\u00fchren jede Recherche selbst durch \u2013 w\u00e4hrend Agenturen die Immobilie des Verk\u00e4ufers vertreten (Pr\u00fcfung ist nicht ihre Aufgabe, manche dr\u00e4ngen zum schnellen Abschluss). SpainEasy steht an Ihrer Seite: Wir suchen, pr\u00fcfen, \u00fcbersetzen und verhandeln in Ihrem Interesse.\" },\n\n    { id:\"edu_valeur\", type:\"teach\", skip:true, ebIco:\"piggy-bank\", heroIco:\"piggy-bank\",\n      heroCap:\"\\\"Das ist bestimmt teuer\\\"\u2026 hier sehen Sie genau, was Sie daf\u00fcr bekommen.\",\n      eyebrow:\"Punkt 4 \u2013 die echte Rechnung\",\n      q:\"\\\"Ihr Service ist bestimmt teuer\u2026\\\"\",\n      body:\"Ganz konkret: Das spart Ihnen unsere Begleitung \u2013 und vor diesen Fallen bewahrt sie Sie.\",\n      valueRecap:{\n        saves:[\n          {ic:\"plane\", t:\"Unn\u00f6tige Reisen ersparen \u2013 wir besichtigen die Objekte f\u00fcr Sie\"},\n          {ic:\"clock\", t:\"Wochen an Suche und Papierkram\"},\n          {ic:\"languages\", t:\"Anwalt und \u00dcbersetzer f\u00fcr Sie koordiniert, auf Englisch\"},\n          {ic:\"badge-percent\", t:\"Wir k\u00e4mpfen f\u00fcr den besten Preis f\u00fcr Sie (Beispiele auf unserer Website)\"}\n        ],\n        avoids:[\n          {ic:\"scale\", t:\"Versteckte Schulden oder ein illegal errichtetes Geb\u00e4ude, das unentdeckt bleibt\"},\n          {ic:\"alarm-clock\", t:\"Eine versp\u00e4tete NIE, die Sie die 10 % Anzahlung kosten kann\"},\n          {ic:\"search-check\", t:\"Eine nicht konforme Immobilie oder ein versteckter Mangel\"},\n          {ic:\"trending-up\", t:\"Zu viel bezahlen, weil der Preis nicht verhandelt wurde\"}\n        ]\n      },\n      closing:{ t:\"Sie kaufen schneller, mit gutem Gef\u00fchl \u2013 und oft g\u00fcnstiger.\", d:\"Wir \u00fcbernehmen die Ummeldung von Wasser und Strom; der Rest (Steuererkl\u00e4rung f\u00fcr Nicht-Residenten, IBI, digitales Zertifikat, Versicherung\u2026) ist optional buchbar, mit demselben englischsprachigen Team.\" } },\n\n    { id:\"callback\", type:\"callback\", required:false, ebIco:\"phone-call\", heroIco:\"calendar-clock\",\n      heroCap:\"Wir rufen an, wann es Ihnen passt \u2013 oder buchen Sie direkt einen Termin.\",\n      eyebrow:\"Antwort innerhalb von 24 Stunden\",\n      q:\"Wann passt es Ihnen, dass wir Sie anrufen?\", sub:\"W\u00e4hlen Sie einen Tag und ein Zeitfenster in Ihrer Ortszeit \u2013 optional\",\n      days:[\n        {label:\"Mon\",dow:1},{label:\"Tue\",dow:2},{label:\"Wed\",dow:3},\n        {label:\"Thu\",dow:4},{label:\"Fri\",dow:5},{label:\"Sat\",dow:6}\n      ] },\n\n    { id:\"contact\", type:\"contact\", required:true, ebIco:\"badge-check\", heroIco:\"phone-call\",\n      heroCap:\"Letzter Schritt \u2013 wir melden uns in K\u00fcrze bei Ihnen, unverbindlich.\",\n      eyebrow:\"Letzter Schritt\",\n      q:\"Nur Ihre Angaben, damit wir uns schnell bei Ihnen melden k\u00f6nnen.\",\n      consent:\"Mit dem Absenden dieses Formulars stimmen Sie zu, dass wir Ihre Angaben nutzen, um Sie bez\u00fcglich Ihres Projekts zu kontaktieren.\"}\n  ];\n\n  var ORDER = [\"timing\",\"worries\",\"budget\",\"location\",\"property\",\"motivation\",\"service\",\"edu_couts\",\"edu_notaire\",\"edu_objectivite\",\"edu_valeur\",\"callback\",\"contact\"];\n  var RISK_IDS = [\"edu_couts\",\"edu_notaire\",\"edu_objectivite\",\"edu_valeur\"];\n  function isEdu(id){ return RISK_IDS.indexOf(id)>-1; }\n\n  \/* =========================================================\n     2b) CALLBACK \u2014 timezone-aware (US buyer)\n     ========================================================= *\/\n  var US_ZONES = [\n    {l:\"ET\", tz:\"America\/New_York\"},\n    {l:\"CT\", tz:\"America\/Chicago\"},\n    {l:\"MT\", tz:\"America\/Denver\"},\n    {l:\"PT\", tz:\"America\/Los_Angeles\"}\n  ];\n  \/\/ \"Other country\" picker \u2014 short token + IANA zone\n  var WORLD_ZONES = [\n    {l:\"US \u2014 Alaska (AKST)\", s:\"AKST\", tz:\"America\/Anchorage\"},\n    {l:\"US \u2014 Hawaii (HST)\", s:\"HST\", tz:\"Pacific\/Honolulu\"},\n    {l:\"Canada \u2014 Toronto (ET)\", s:\"ET\", tz:\"America\/Toronto\"},\n    {l:\"Canada \u2014 Vancouver (PT)\", s:\"PT\", tz:\"America\/Vancouver\"},\n    {l:\"Mexico \u2014 Mexico City\", s:\"CST\", tz:\"America\/Mexico_City\"},\n    {l:\"Brazil \u2014 S\u00e3o Paulo\", s:\"BRT\", tz:\"America\/Sao_Paulo\"},\n    {l:\"Argentina \u2014 Buenos Aires\", s:\"ART\", tz:\"America\/Argentina\/Buenos_Aires\"},\n    {l:\"UK \/ Ireland \u2014 London\", s:\"UK time\", tz:\"Europe\/London\"},\n    {l:\"Portugal \u2014 Lisbon\", s:\"WET\", tz:\"Europe\/Lisbon\"},\n    {l:\"France \/ Spain \u2014 Paris\", s:\"CET\", tz:\"Europe\/Paris\"},\n    {l:\"Central Europe \u2014 Berlin\", s:\"CET\", tz:\"Europe\/Berlin\"},\n    {l:\"Greece \/ E. Europe \u2014 Athens\", s:\"EET\", tz:\"Europe\/Athens\"},\n    {l:\"Turkey \u2014 Istanbul\", s:\"TRT\", tz:\"Europe\/Istanbul\"},\n    {l:\"Morocco \u2014 Casablanca\", s:\"local time\", tz:\"Africa\/Casablanca\"},\n    {l:\"South Africa \u2014 Johannesburg\", s:\"SAST\", tz:\"Africa\/Johannesburg\"},\n    {l:\"UAE \u2014 Dubai\", s:\"GST\", tz:\"Asia\/Dubai\"},\n    {l:\"Israel \u2014 Tel Aviv\", s:\"local time\", tz:\"Asia\/Jerusalem\"},\n    {l:\"India \u2014 Mumbai\", s:\"IST\", tz:\"Asia\/Kolkata\"},\n    {l:\"Singapore\", s:\"SGT\", tz:\"Asia\/Singapore\"},\n    {l:\"Hong Kong\", s:\"HKT\", tz:\"Asia\/Hong_Kong\"},\n    {l:\"Japan \u2014 Tokyo\", s:\"JST\", tz:\"Asia\/Tokyo\"},\n    {l:\"Australia \u2014 Perth\", s:\"AWST\", tz:\"Australia\/Perth\"},\n    {l:\"Australia \u2014 Sydney\", s:\"AEST\", tz:\"Australia\/Sydney\"},\n    {l:\"New Zealand \u2014 Auckland\", s:\"NZST\", tz:\"Pacific\/Auckland\"}\n  ];\n  \/\/ SpainEasy office: calls only happen during Spanish business hours (Europe\/Madrid, CET\/CEST).\n  var TEAM = { tz:\"Europe\/Madrid\", week:{open:9,close:19}, sat:{open:10,close:14}, localFloor:7, localCeil:21 };\n  function cbDetectIana(){ var tz=\"\"; try{ tz=Intl.DateTimeFormat().resolvedOptions().timeZone||\"\"; }catch(e){} return tz||\"America\/New_York\"; }\n  function cbUsLabelFor(tz){ for(var i=0;i<US_ZONES.length;i++) if(US_ZONES[i].tz===tz) return US_ZONES[i].l; return null; }\n  function cbWorldFor(tz){ for(var j=0;j<WORLD_ZONES.length;j++) if(WORLD_ZONES[j].tz===tz) return WORLD_ZONES[j]; return null; }\n  function cbShortFromTz(tz){ return String(tz||\"\").split(\"\/\").pop().replace(\/_\/g,\" \"); }\n  function cbInitZone(){ if(state.answers.cb_tz) return; var tz=cbDetectIana(); state.answers.cb_tz=tz; var w=cbWorldFor(tz); state.answers.cb_zone = cbUsLabelFor(tz) || (w?w.s:null) || cbShortFromTz(tz); }\n  function cbIsUsZone(){ for(var i=0;i<US_ZONES.length;i++) if(US_ZONES[i].tz===state.answers.cb_tz) return true; return false; }\n  function cbZoneIana(){ if(state.answers.cb_tz) return state.answers.cb_tz; var l=state.answers.cb_zone; for(var i=0;i<US_ZONES.length;i++) if(US_ZONES[i].l===l) return US_ZONES[i].tz; return cbDetectIana(); }\n  function cbZoneShort(){ return state.answers.cb_zone || cbShortFromTz(cbZoneIana()); }\n  var CB_DOWS = {\"Mon\":1,\"Tue\":2,\"Wed\":3,\"Thu\":4,\"Fri\":5,\"Sat\":6};\n  var CB_DAY_FULL = {\"Mon\":\"Monday\",\"Tue\":\"Tuesday\",\"Wed\":\"Wednesday\",\"Thu\":\"Thursday\",\"Fri\":\"Friday\",\"Sat\":\"Saturday\"};\n  var CB_MONTHS = [\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"];\n  function fmt12(h){ h=((h%24)+24)%24; return h+\" Uhr\"; }\n  function cbWantsRdv(){ return state.answers.cb_rdv === true; }\n  function cbIsSaturday(){ return Array.isArray(state.answers.cb_days) && state.answers.cb_days.indexOf(\"Sat\")>-1; }\n  function cbNextDateForDow(dow){ var now=new Date(), d=new Date(now.getFullYear(),now.getMonth(),now.getDate()); var diff=(dow-d.getDay()+7)%7; d.setDate(d.getDate()+diff); return d; }\n  function cbNearestDateObj(){\n    var a=state.answers;\n    if(a.cb_days_indif || !Array.isArray(a.cb_days) || !a.cb_days.length) return null;\n    var times=[];\n    a.cb_days.forEach(function(lbl){ if(CB_DOWS[lbl]!=null) times.push(cbNextDateForDow(CB_DOWS[lbl]).getTime()); });\n    if(!times.length) return null;\n    return new Date(Math.min.apply(null,times));\n  }\n  function cbDateLong(d){ return d ? (CB_DAY_FULL[Object.keys(CB_DOWS).find(function(k){return CB_DOWS[k]===d.getDay();})] || \"\")+\" \"+CB_MONTHS[d.getMonth()]+\" \"+d.getDate() : \"\"; }\n  function cbTzOffsetMin(date, tz){\n    try{\n      var dtf = new Intl.DateTimeFormat(\"en-US\",{timeZone:tz,hour12:false,year:\"numeric\",month:\"2-digit\",day:\"2-digit\",hour:\"2-digit\",minute:\"2-digit\",second:\"2-digit\"});\n      var pr = {}; dtf.formatToParts(date).forEach(function(x){ pr[x.type]=x.value; });\n      var asUTC = Date.UTC(pr.year, pr.month-1, pr.day, pr.hour, pr.minute, pr.second);\n      return Math.round((asUTC - date.getTime())\/60000);\n    }catch(e){ return null; }\n  }\n  function cbInstantForLocalHour(dateObj, H, tz){ var guess=Date.UTC(dateObj.getFullYear(),dateObj.getMonth(),dateObj.getDate(),H,0,0); var off=cbTzOffsetMin(new Date(guess),tz); return (off==null)?guess:(guess-off*60000); }\n  function cbTzPartsAt(instant, tz){ var off=cbTzOffsetMin(new Date(instant),tz); var d=new Date(instant+((off||0)*60000)); return {dow:d.getUTCDay(), hour:d.getUTCHours()}; }\n  function cbSlotStartMs(dateObj, hour24){ if(!dateObj || hour24==null) return null; return cbInstantForLocalHour(dateObj, hour24, cbZoneIana()); }\n  function cbBizForMadDow(dow){ if(dow===6) return TEAM.sat; if(dow>=1&&dow<=5) return TEAM.week; return null; }\n  function cbWindowDate(){\n    if(cbIsSaturday()) return cbNextDateForDow(6);\n    var d=cbNearestDateObj(); if(d) return d;\n    var now=new Date(), x=new Date(now.getFullYear(),now.getMonth(),now.getDate());\n    for(var i=0;i<8;i++){ var t=new Date(x); t.setDate(x.getDate()+i); var dw=t.getDay(); if(dw>=1&&dw<=5) return t; }\n    return x;\n  }\n  \/\/ Buyer-local start hours that map to inside SpainEasy's Madrid office hours\n  function cbAllowedHours(){\n    var d=cbWindowDate(); if(!d) return []; var tz=cbZoneIana(), res=[];\n    for(var H=TEAM.localFloor; H<=TEAM.localCeil; H++){\n      var inst=cbInstantForLocalHour(d,H,tz), mp=cbTzPartsAt(inst, TEAM.tz);\n      var biz=cbBizForMadDow(mp.dow); if(!biz) continue;\n      if(mp.hour>=biz.open && mp.hour<=biz.close-1) res.push(H);\n    }\n    return res;\n  }\n  function cbCurrentSlots(){ var a=cbAllowedHours(), out=[]; for(var i=0;i<a.length;i+=2){ var H=a[i]; out.push({h:H, l:fmt12(H)+\"\\u2013\"+fmt12(H+2)}); } return out; }\n  function cbHours(){ return cbAllowedHours(); }\n  function cbHasSlots(){ return cbCurrentSlots().length>0; }\n  function cbSlotLabel(h){ var s=cbCurrentSlots(); for(var i=0;i<s.length;i++) if(s[i].h===h) return s[i].l; return fmt12(h)+\"\\u2013\"+fmt12(h+2); }\n  function cbSlotsHTML(){\n    var slots=cbCurrentSlots(), html=\"\";\n    slots.forEach(function(s){\n      html += '<button type=\"button\" class=\"ole-pill'+(!state.answers.cb_precise && !state.answers.cb_any && state.answers.cb_slot===s.h?\" sel\":\"\")+'\" data-cbslot=\"'+s.h+'\">'+esc(s.l)+'<\/button>';\n    });\n    if(cbHours().length) html += '<button type=\"button\" class=\"ole-pill ole-pill-precise'+(state.answers.cb_precise?\" sel\":\"\")+'\" data-cbprecise=\"1\"><span class=\"ole-pill-ico ole-ico\"><i data-lucide=\"alarm-clock\"><\/i><\/span>Feste Uhrzeit<\/button>';\n    html += '<button type=\"button\" class=\"ole-pill'+(state.answers.cb_any?\" sel\":\"\")+'\" data-cbany=\"1\">Jederzeit passend<\/button>';\n    return html;\n  }\n  function cbHoursHTML(){\n    return cbHours().map(function(hh){\n      return '<button type=\"button\" class=\"ole-pill'+(state.answers.cb_hour===hh?\" sel\":\"\")+'\" data-cbhour=\"'+hh+'\">'+esc(fmt12(hh))+'<\/button>';\n    }).join(\"\");\n  }\n  function cbPreciseMsg(){\n    var h=state.answers.cb_hour; if(h==null) return \"\";\n    return \"Wir tun unser Bestes, um Sie gegen \"+fmt12(h)+\" \"+cbZoneShort()+\" anzurufen. Da wir in Spanien ans\u00e4ssig sind, k\u00f6nnen wir die genaue Minute nicht garantieren \u2013 f\u00fcr eine feste Uhrzeit buchen Sie bitte direkt einen Termin.\";\n  }\n  function cbReaction(){\n    var a=state.answers, z=cbZoneShort();\n    if(cbWantsRdv()) return {emoji:\"\\uD83D\\uDCC5\",msg:\"Perfekt \u2013 Sie w\u00e4hlen Ihren Gespr\u00e4chstermin direkt im Anschluss an dieses Formular.\"};\n    if(a.cb_any) return {emoji:\"\\uD83D\\uDC4D\",msg:\"Sehr gut \u2013 wir finden den besten Zeitpunkt, um Sie w\u00e4hrend unserer spanischen B\u00fcrozeiten zu erreichen.\"};\n    var dObj=cbNearestDateObj(); var dTxt=dObj?cbDateLong(dObj):\"\";\n    if(a.cb_precise && a.cb_hour!=null) return {emoji:\"\\uD83D\\uDC4D\",msg:\"Notiert \u2013 wir tun unser Bestes, um Sie anzurufen \"+(dTxt?dTxt+\" \":\"\")+\"gegen \"+fmt12(a.cb_hour)+\" \"+z+\".\"};\n    var sTxt = a.cb_slot!=null ? cbSlotLabel(a.cb_slot) : \"\";\n    if(dTxt && sTxt) return {emoji:\"\\uD83D\\uDC4D\",msg:\"Sehr gut \u2013 wir versuchen, Sie anzurufen \"+dTxt+\", \"+sTxt+\" \"+z+\".\"};\n    if(dTxt) return {emoji:\"\\uD83D\\uDC4D\",msg:\"Sehr gut \u2013 wir versuchen, Sie anzurufen \"+dTxt+\".\"};\n    if(sTxt) return {emoji:\"\\uD83D\\uDC4D\",msg:\"Sehr gut \u2013 wir versuchen, Sie anzurufen \"+sTxt+\" \"+z+\".\"};\n    if(a.cb_days_indif) return {emoji:\"\\uD83D\\uDC4D\",msg:\"Verstanden \u2013 wir rufen Sie so schnell wie m\u00f6glich an.\"};\n    return null;\n  }\n  function cbRecapText(){\n    var a=state.answers, z=cbZoneShort();\n    if(cbWantsRdv()) return \"Sie buchen direkt im Anschluss einen Termin\";\n    if(a.cb_any){ var dA=cbNearestDateObj(); var dAt=dA?cbDateLong(dA):\"\"; return dAt ? (\"Anruf \"+dAt+\" \u2014 jederzeit\") : \"Anruf jederzeit passend\"; }\n    var dObj=cbNearestDateObj(); var dTxt=dObj?cbDateLong(dObj):\"\";\n    if(a.cb_precise && a.cb_hour!=null) return \"Anruf \"+(dTxt?dTxt+\", \":\"\")+\"gegen \"+fmt12(a.cb_hour)+\" \"+z;\n    var sTxt = a.cb_slot!=null ? cbSlotLabel(a.cb_slot) : \"\";\n    if(dTxt && sTxt) return \"Anruf \"+dTxt+\", \"+sTxt+\" \"+z;\n    if(dTxt) return \"Anruf \"+dTxt;\n    if(sTxt) return \"Anruf \"+sTxt+\" \"+z;\n    if(a.cb_days_indif) return \"Anruf so schnell wie m\u00f6glich\";\n    return \"\";\n  }\n  \/\/ The requested call time expressed in the CLIENT's own local time + zone (for HubSpot \"Heure chez le client\").\n  function cbClientTimeStr(){\n    var a=state.answers, z=cbZoneShort();\n    if(cbWantsRdv()) return \"Will pick a slot on the booking page\";\n    var dObj=cbNearestDateObj(); var dTxt=dObj?cbDateLong(dObj):(a.cb_days_indif?\"Any day\":\"\");\n    var t=\"\";\n    if(a.cb_any) t=\"any time\";\n    else if(a.cb_precise && a.cb_hour!=null) t=\"around \"+fmt12(a.cb_hour);\n    else if(a.cb_slot!=null) t=cbSlotLabel(a.cb_slot);\n    if(!dTxt && !t) return \"\";\n    var s=(dTxt||\"\")+((dTxt&&t)?\", \":\"\")+(t||\"\");\n    return s+\" \"+z+\" (client local time)\";\n  }\n\n  \/* =========================================================\n     3) LOCATION FLAVOR\n     ========================================================= *\/\n  var CITY_REF = {\n    \"Alicante\":\"das Castillo de Santa B\u00e1rbara und die Str\u00e4nde\",\n    \"Barcelona\":\"Gaud\u00ed, die Sagrada Fam\u00edlia und die Ramblas\",\n    \"Benidorm\":\"seine Skyline und lebendigen Str\u00e4nde\",\n    \"C\u00e1diz\":\"eine der \u00e4ltesten St\u00e4dte Europas\",\n    \"Estepona\":\"seine blumengeschm\u00fcckte Altstadt\",\n    \"Fuengirola\":\"seine entspannte Strandpromenade\",\n    \"Girona\":\"seine mittelalterlichen Gassen\",\n    \"Granada\":\"die Alhambra und die Sierra Nevada\",\n    \"Ibiza\":\"t\u00fcrkisfarbene Buchten und Inselleben\",\n    \"Madrid\":\"den Prado, den Retiro-Park und die pulsierende Stadt\",\n    \"M\u00e1laga\":\"Picassos Heimatstadt\",\n    \"Marbella\":\"den Glamour von Puerto Ban\u00fas\",\n    \"Mijas\":\"seinen wei\u00df get\u00fcnchten Hangcharme\",\n    \"Nerja\":\"den ber\u00fchmten Balc\u00f3n de Europa\",\n    \"Palma de Mallorca\":\"seine Kathedrale und den Balearen-Stil\",\n    \"Sevilla\":\"Flamenco, die Giralda und begr\u00fcnte Patios\",\n    \"Sitges\":\"seine maritime Eleganz nahe Barcelona\",\n    \"Tarragona\":\"sein r\u00f6misches Amphitheater am Meer\",\n    \"Torrevieja\":\"seine rosa Salzlagunen und die Sonne\",\n    \"Valencia\":\"Paella und die Stadt der K\u00fcnste und Wissenschaften\",\n    \"Costa del Sol\":\"\u00fcber 300 Sonnentage im Jahr\",\n    \"Costa Blanca\":\"postkartenreife Str\u00e4nde das ganze Jahr \u00fcber\",\n    \"Costa Brava\":\"wilde Buchten und Charakter\",\n    \"Costa Dorada\":\"goldener Sand und r\u00f6misches Erbe\",\n    \"Andalusien\":\"Flamenco, Tapas und Lebensfreude\",\n    \"Balearen\":\"Licht und t\u00fcrkisfarbenes Wasser\",\n    \"Kanaren\":\"ewiger Fr\u00fchling\",\n    \"Katalonien\":\"Meer, Berge und katalanisches Flair\"\n  };\n  var CITY_NOTE = {\n    \"Alicante\":\"Juwel der Costa Blanca\",\"Barcelona\":\"die Stadt Gaud\u00eds\",\"Benidorm\":\"Spaniens kleines Manhattan\",\n    \"C\u00e1diz\":\"die \u00e4lteste Stadt Europas\",\"Estepona\":\"der Garten der Costa del Sol\",\"Fuengirola\":\"entspanntes Leben am Meer\",\n    \"Girona\":\"ein katalanisches mittelalterliches Juwel\",\"Granada\":\"die Stadt der Alhambra\",\"Ibiza\":\"t\u00fcrkisfarbenes Inselleben\",\"Madrid\":\"das Herz Spaniens\",\n    \"M\u00e1laga\":\"Picassos Geburtsstadt\",\"Marbella\":\"der Glamour der Costa del Sol\",\"Mijas\":\"eine wei\u00df get\u00fcnchte Bergstadt\",\n    \"Nerja\":\"der Balkon Europas\",\"Palma de Mallorca\":\"Juwel der Balearen\",\"Sevilla\":\"die Hauptstadt des Flamenco\",\n    \"Sitges\":\"maritime Eleganz\",\"Tarragona\":\"r\u00f6misches Erbe am Meer\",\"Torrevieja\":\"rosa Lagunen und Salzfelder\",\n    \"Valencia\":\"die Heimat der Paella\",\"Costa del Sol\":\"\u00fcber 300 Sonnentage im Jahr\",\"Costa Blanca\":\"Sonne das ganze Jahr \u00fcber\",\n    \"Costa Brava\":\"wilde Buchten\",\"Costa Dorada\":\"goldener Sand & r\u00f6mische Ruinen\",\"Andalusien\":\"Flamenco & Lebensfreude\",\n    \"Balearen\":\"t\u00fcrkisfarbenes Wasser\",\"Kanaren\":\"ewiger Fr\u00fchling\",\"Katalonien\":\"Meer und katalanischer Charakter\"\n  };\n  var REGION_NOTE = {\n    \"Andaluc\u00eda\":\"andalusische Sonne und Flamenco\",\"Comunidad Valenciana\":\"Sonne der valencianischen K\u00fcste\",\"Comunitat Valenciana\":\"Sonne der valencianischen K\u00fcste\",\n    \"Catalu\u00f1a\":\"Meer und katalanischer Charakter\",\"Catalunya\":\"Meer und katalanischer Charakter\",\"Islas Baleares\":\"t\u00fcrkisfarbenes Balearen-Wasser\",\"Illes Balears\":\"t\u00fcrkisfarbenes Balearen-Wasser\",\n    \"Canarias\":\"ewiger kanarischer Fr\u00fchling\",\"Islas Canarias\":\"ewiger kanarischer Fr\u00fchling\",\"Regi\u00f3n de Murcia\":\"die milde Costa C\u00e1lida\",\"Comunidad de Madrid\":\"das Herz Spaniens\",\n    \"Galicia\":\"Galiciens K\u00fcste und Natur\",\"Pa\u00eds Vasco\":\"baskisches Meer und baskische K\u00fcche\",\"Andalusien\":\"andalusische Sonne und Flamenco\"\n  };\n  var LOC_PILL = {\n    \"Alicante\":{emoji:\"\\uD83C\\uDF0A\",msg:\"Alicante: t\u00fcrkisfarbenes Meer und eine lebendige Altstadt.\"},\n    \"Barcelona\":{emoji:\"\\u2728\",msg:\"Barcelona: die Gro\u00dfstadt, die niemals schl\u00e4ft.\"},\n    \"Benidorm\":{emoji:\"\\uD83C\\uDFD9\\uFE0F\",msg:\"Benidorm: Skyline, Str\u00e4nde und das ganze Jahr \u00fcber Trubel.\"},\n    \"C\u00e1diz\":{emoji:\"\\uD83C\\uDF0A\",msg:\"C\u00e1diz: eine der \u00e4ltesten St\u00e4dte Europas, direkt am Atlantik.\"},\n    \"Estepona\":{emoji:\"\\uD83C\\uDF3A\",msg:\"Estepona: das blumengeschm\u00fcckte Juwel der Costa del Sol.\"},\n    \"Fuengirola\":{emoji:\"\\uD83C\\uDFD6\\uFE0F\",msg:\"Fuengirola: entspannt, sonnig, mit den F\u00fc\u00dfen im Wasser.\"},\n    \"Girona\":{emoji:\"\\uD83C\\uDFF0\",msg:\"Girona: mittelalterliche Gassen und katalanische Ruhe.\"},\n    \"Granada\":{emoji:\"\\uD83C\\uDFD4\\uFE0F\",msg:\"Granada: die Alhambra mit der Sierra Nevada im Hintergrund.\"},\n    \"Ibiza\":{emoji:\"\\uD83C\\uDFDD\\uFE0F\",msg:\"Ibiza: t\u00fcrkisfarbene Buchten und Inselleben.\"},\n    \"Madrid\":{emoji:\"\\u2728\",msg:\"Madrid: das pulsierende Herz Spaniens.\"},\n    \"M\u00e1laga\":{emoji:\"\\u2600\\uFE0F\",msg:\"M\u00e1laga: Picassos Geburtsstadt, sonnig und lebendig.\"},\n    \"Marbella\":{emoji:\"\\uD83C\\uDF34\",msg:\"Marbella: der ganze Glamour der Costa del Sol.\"},\n    \"Mijas\":{emoji:\"\\uD83E\\uDD0D\",msg:\"Mijas: wei\u00df get\u00fcnchter Charme \u00fcber der K\u00fcste.\"},\n    \"Nerja\":{emoji:\"\\uD83C\\uDF05\",msg:\"Nerja: der Balkon Europas \u00fcber dem Mittelmeer.\"},\n    \"Palma de Mallorca\":{emoji:\"\\uD83C\\uDFDD\\uFE0F\",msg:\"Palma de Mallorca: Insel-Eleganz auf den Balearen.\"},\n    \"Sevilla\":{emoji:\"\\uD83D\\uDC83\",msg:\"Sevilla: Flamenco, Patios und andalusisches Lebensgef\u00fchl.\"},\n    \"Sitges\":{emoji:\"\\uD83C\\uDF0A\",msg:\"Sitges: maritime Eleganz s\u00fcdlich von Barcelona.\"},\n    \"Tarragona\":{emoji:\"\\uD83C\\uDFDB\\uFE0F\",msg:\"Tarragona: r\u00f6misches Erbe direkt am Mittelmeer.\"},\n    \"Torrevieja\":{emoji:\"\\uD83C\\uDF38\",msg:\"Torrevieja: rosa Lagunen und fast best\u00e4ndiger Sonnenschein.\"},\n    \"Valencia\":{emoji:\"\\uD83E\\uDD58\",msg:\"Valencia: Paella, Str\u00e4nde und modernes Flair.\"},\n    \"Costa del Sol\":{emoji:\"\\u2600\\uFE0F\",msg:\"Die Costa del Sol: \u00fcber 300 Sonnentage im Jahr.\"},\n    \"Costa Blanca\":{emoji:\"\\uD83C\\uDFD6\\uFE0F\",msg:\"Die Costa Blanca: postkartenreife Str\u00e4nde das ganze Jahr \u00fcber.\"},\n    \"Costa Brava\":{emoji:\"\\uD83C\\uDF0A\",msg:\"Die Costa Brava: wilde Buchten und Charakter.\"},\n    \"Costa Dorada\":{emoji:\"\\uD83C\\uDFDB\\uFE0F\",msg:\"Die Costa Dorada: goldener Sand und r\u00f6misches Erbe.\"},\n    \"Andalusien\":{emoji:\"\\uD83D\\uDC83\",msg:\"Andalusien: Sonne, Meer und Lebenskunst.\"},\n    \"Balearen\":{emoji:\"\\uD83C\\uDFDD\\uFE0F\",msg:\"Die Balearen: ein St\u00fcck mediterranes Paradies.\"},\n    \"Kanaren\":{emoji:\"\\uD83C\\uDF34\",msg:\"Die Kanaren: ewiger Fr\u00fchling, das ganze Jahr \u00fcber.\"},\n    \"Katalonien\":{emoji:\"\\uD83C\\uDF0A\",msg:\"Katalonien: wilde Buchten, Kultur und guter Geschmack.\"}\n  };\n  var REACTIONS = [\n    {match:[\"malaga\",\"m\u00e1laga\",\"marbella\",\"estepona\",\"fuengirola\",\"nerja\",\"mijas\",\"costa del sol\"],emoji:\"\\u2600\\uFE0F\",msg:\"Die Costa del Sol: \u00fcber 300 Sonnentage im Jahr.\"},\n    {match:[\"seville\",\"sevilla\",\"cadiz\",\"c\u00e1diz\",\"granada\",\"almeria\",\"almer\u00eda\",\"andaluc\"],emoji:\"\\uD83D\\uDC83\",msg:\"Andalusien: Sonne, Meer und Lebenskunst.\"},\n    {match:[\"alicante\",\"benidorm\",\"calpe\",\"denia\",\"javea\",\"j\u00e1vea\",\"torrevieja\",\"costa blanca\"],emoji:\"\\uD83C\\uDFD6\\uFE0F\",msg:\"Die Costa Blanca: postkartenreife Str\u00e4nde das ganze Jahr \u00fcber.\"},\n    {match:[\"valencia\",\"valence\"],emoji:\"\\uD83E\\uDD58\",msg:\"Valencia: Paella, Str\u00e4nde und entspanntes Leben.\"},\n    {match:[\"murcia\",\"costa calida\",\"costa c\u00e1lida\"],emoji:\"\\uD83C\\uDF05\",msg:\"Die Costa C\u00e1lida: das mildeste Meer Spaniens.\"},\n    {match:[\"barcelona\",\"girona\",\"sitges\",\"lloret\",\"roses\",\"tarragona\",\"costa brava\",\"costa dorada\",\"catal\"],emoji:\"\\uD83C\\uDF0A\",msg:\"Katalonien: wilde Buchten, Kultur und guter Geschmack.\"},\n    {match:[\"palma\",\"mallorca\",\"baleares\",\"balearic\",\"ibiza\",\"menorca\"],emoji:\"\\uD83C\\uDFDD\\uFE0F\",msg:\"Die Balearen: ein St\u00fcck mediterranes Paradies.\"},\n    {match:[\"canar\",\"tenerife\",\"las palmas\",\"fuerteventura\",\"lanzarote\"],emoji:\"\\uD83C\\uDF34\",msg:\"Die Kanaren: ewiger Fr\u00fchling, das ganze Jahr \u00fcber.\"},\n    {match:[\"madrid\"],emoji:\"\\u2728\",msg:\"Madrid: das pulsierende Herz Spaniens.\"}\n  ];\n\n  \/* =========================================================\n     4) UTILITIES\n     ========================================================= *\/\n  var root = document.getElementById(\"ole-form-root\");\n  if(!root) return;\n  var state = { i:0, answers:{}, history:[], locked:false, busy:false, reaction:null };\n  var startTime = Date.now();\n  var gMapsReady = false;\n  var nf = new Intl.NumberFormat(\"de-DE\");\n  function fmt(n){ return nf.format(n) + \" \u20ac\"; }\n  function getCookie(k){ var m=document.cookie.match(\"(^|;)\\\\s*\"+k+\"\\\\s*=\\\\s*([^;]+)\"); return m?m.pop():\"\"; }\n  function esc(s){ var a=String.fromCharCode(38); return String(s).replace(\/&\/g,a+\"#38;\").replace(\/<\/g,a+\"#60;\").replace(\/>\/g,a+\"#62;\").replace(\/\"\/g,a+\"#34;\"); }\n  function refreshIcons(){ if(window.lucide && lucide.createIcons){ try{ lucide.createIcons(); }catch(e){} } }\n  function stepIndexById(id){ for(var i=0;i<STEPS.length;i++) if(STEPS[i].id===id) return i; return -1; }\n  function isRisksPath(){ return \/^no\/i.test(state.answers.service||\"\"); }\n  function hasAnswers(){ for(var k in state.answers){ if(state.answers.hasOwnProperty(k)){ var v=state.answers[k]; if(Array.isArray(v)?v.length:(v!==null&&v!==undefined&&v!==\"\")) return true; } } return false; }\n\n  var LS_KEY=\"spaineasy_form_v1_\"+((location.pathname.match(\/^\\\/([a-z]{2})\\\/\/)||[])[1]||\"en\"), LS_TTL=1000*60*60*24*7;\n  var _saveT=null;\n  function saveState(){ try{ localStorage.setItem(LS_KEY, JSON.stringify({ i:state.i, answers:state.answers, history:state.history, t:Date.now() })); }catch(e){} }\n  function saveSoon(){ clearTimeout(_saveT); _saveT=setTimeout(saveState,250); }\n  function loadState(){\n    try{\n      var raw=localStorage.getItem(LS_KEY); if(!raw) return false;\n      var s=JSON.parse(raw);\n      if(!s || !s.t || (Date.now()-s.t)>LS_TTL){ localStorage.removeItem(LS_KEY); return false; }\n      if(typeof s.i===\"number\" && s.answers && typeof s.answers===\"object\"){\n        state.i=Math.min(Math.max(s.i,0), STEPS.length-1);\n        state.answers=s.answers; state.history=Array.isArray(s.history)?s.history:[];\n        return true;\n      }\n    }catch(e){}\n    return false;\n  }\n  function clearState(){ try{ localStorage.removeItem(LS_KEY); }catch(e){} }\n\n  var MAIL_DOMAINS=[\"gmail.com\",\"yahoo.com\",\"hotmail.com\",\"outlook.com\",\"icloud.com\",\"aol.com\",\"comcast.net\",\"att.net\",\"verizon.net\",\"sbcglobal.net\",\"me.com\",\"live.com\",\"msn.com\",\"ymail.com\",\"protonmail.com\"];\n  var MAIL_TLDS=[\"com\",\"net\",\"org\",\"us\",\"edu\",\"co\",\"io\",\"gov\"];\n  function lev(a,b){ var m=a.length,n=b.length; if(!m) return n; if(!n) return m; var d=[],i,j; for(i=0;i<=m;i++) d[i]=[i]; for(j=0;j<=n;j++) d[0][j]=j; for(i=1;i<=m;i++) for(j=1;j<=n;j++){ var c=a.charAt(i-1)===b.charAt(j-1)?0:1; d[i][j]=Math.min(d[i-1][j]+1,d[i][j-1]+1,d[i-1][j-1]+c); } return d[m][n]; }\n  function suggestEmail(email){\n    if(!email) return null;\n    var at=email.lastIndexOf(\"@\"); if(at<1) return null;\n    var local=email.slice(0,at), domain=email.slice(at+1).toLowerCase();\n    if(!domain || domain.indexOf(\".\")<1) return null;\n    if(MAIL_DOMAINS.indexOf(domain)>-1) return null;\n    var best=null,bd=99,i;\n    for(i=0;i<MAIL_DOMAINS.length;i++){ var dd=lev(domain,MAIL_DOMAINS[i]); if(dd<bd){ bd=dd; best=MAIL_DOMAINS[i]; } }\n    if(best && bd>0 && bd<=2) return local+\"@\"+best;\n    var dot=domain.lastIndexOf(\".\"), sld=domain.slice(0,dot), tld=domain.slice(dot+1);\n    if(MAIL_TLDS.indexOf(tld)===-1){ var bt=null,bt2=99; for(i=0;i<MAIL_TLDS.length;i++){ var td=lev(tld,MAIL_TLDS[i]); if(td<bt2){ bt2=td; bt=MAIL_TLDS[i]; } } if(bt && bt2>0 && bt2<=1) return local+\"@\"+sld+\".\"+bt; }\n    return null;\n  }\n\n  function recapHTML(){\n    var a=state.answers, rows=[];\n    function row(ic,val){ if(val) rows.push('<div class=\"ole-recap-item\"><span class=\"ole-recap-ico ole-ico\"><i data-lucide=\"'+ic+'\"><\/i><\/span><span class=\"ole-recap-val\">'+esc(val)+'<\/span><\/div>'); }\n    row(\"home\", a.property);\n    var loc = a.location ? cityName(a.location) : \"\";\n    if(loc){\n      var flavor = CITY_NOTE[loc];\n      if(!flavor){ var m=(a.location||\"\").match(\/\\(([^)]+)\\)\/); if(m) flavor=REGION_NOTE[m[1].trim()]; }\n      var noteFull = flavor ? \"(\"+flavor+\")\" : \"\";\n      var locHtml = esc(loc) + (noteFull ? ' <span class=\"ole-recap-note\" id=\"ole-recap-note\" data-note=\"'+esc(noteFull)+'\"><\/span>' : '');\n      rows.push('<div class=\"ole-recap-item\"><span class=\"ole-recap-ico ole-ico\"><i data-lucide=\"map-pin\"><\/i><\/span><span class=\"ole-recap-val\">'+locHtml+'<\/span><\/div>');\n    }\n    row(\"wallet\", a.budget?fmt(a.budget):\"\");\n    row(\"calendar-clock\", a.timing);\n    row(\"compass\", a.motivation);\n    var cbTxt = cbRecapText();\n    if(cbTxt){ rows.push('<div class=\"ole-recap-item ole-recap-cb\" id=\"ole-recap-cb-edit\" role=\"button\" tabindex=\"0\" aria-label=\"Edit callback time\"><span class=\"ole-recap-ico ole-ico\"><i data-lucide=\"'+(cbWantsRdv()?\"calendar-check\":\"phone-call\")+'\"><\/i><\/span><span class=\"ole-recap-val\">'+esc(cbTxt)+'<\/span><span class=\"ole-recap-edit\"><i data-lucide=\"pencil\"><\/i>Edit<\/span><\/div>'); }\n    if(!rows.length) return \"\";\n    return '<div class=\"ole-recap\"><div class=\"ole-recap-title\"><span class=\"ole-ico\"><i data-lucide=\"clipboard-check\"><\/i><\/span>Ihr Projekt<\/div>'+rows.join(\"\")+'<\/div>';\n  }\n\n  function cityReaction(v){ if(!v) return null; var s=String(v).toLowerCase(); for(var i=0;i<REACTIONS.length;i++) for(var j=0;j<REACTIONS[i].match.length;j++) if(s.indexOf(REACTIONS[i].match[j].toLowerCase())>-1) return REACTIONS[i]; return null; }\n  function reactionFor(step, value){\n    if(step.type===\"location\"){ return LOC_PILL[value] || cityReaction(value); }\n    if(step.type===\"single\" && step.react){\n      var rb = step.react[value] || null;\n      if(step.id===\"property\" && rb && value!==\"Sonstiges\" && state.answers.location){\n        var pcity = cityName(state.answers.location); var ref = CITY_REF[pcity];\n        return { emoji:\"\\uD83D\\uDCCD\", msg: value+\" \"+locWithPrep(pcity)+(ref ? \" \u2014 \"+ref : \"\")+\". Sch\u00f6nes Projekt!\" };\n      }\n      return rb;\n    }\n    if(step.type===\"multi\"){\n      if(!Array.isArray(value) || !value.length) return null;\n      if(value.length===1 && step.optMsg) return step.optMsg[value[0]] || step.reactAny || null;\n      if(step.multiMsg && step.multiMsg[String(value.length)]) return step.multiMsg[String(value.length)];\n      return step.reactAny || null;\n    }\n    if(step.type===\"budget\" && value){ return budgetReaction(value); }\n    return null;\n  }\n  function posHTML(){\n    return '<div class=\"ole-pos\" id=\"ole-pos\">'+\n      '<div class=\"ole-pos-head\"><span class=\"ole-pos-ico ole-ico\"><i data-lucide=\"compass\"><\/i><\/span>'+\n        '<div><strong>Ol\u00e9 ist ein Immobilienj\u00e4ger f\u00fcr K\u00e4ufer, keine Agentur.<\/strong>'+\n        '<span>Wir suchen, pr\u00fcfen und verhandeln f\u00fcr Sie \u2013 ausschlie\u00dflich in Ihrem Interesse.<\/span><\/div>'+\n      '<\/div>'+\n      '<button type=\"button\" class=\"ole-pos-toggle\" id=\"ole-pos-toggle\" aria-expanded=\"false\">Wie funktioniert das? <i data-lucide=\"chevron-down\"><\/i><\/button>'+\n      '<div class=\"ole-pos-steps\">'+\n        '<div class=\"ole-pos-step\"><span class=\"ole-pos-step-ico ole-ico\"><i data-lucide=\"search\"><\/i><\/span><div><div class=\"ole-pos-step-t\">Wir suchen<\/div><div class=\"ole-pos-step-d\">Wir sp\u00fcren die Immobilie auf, die zu Ihnen passt \u2013 \u00fcberall in Spanien.<\/div><\/div><\/div>'+\n        '<div class=\"ole-pos-step\"><span class=\"ole-pos-step-ico ole-ico\"><i data-lucide=\"shield-check\"><\/i><\/span><div><div class=\"ole-pos-step-t\">Wir pr\u00fcfen<\/div><div class=\"ole-pos-step-d\">Rechtsstatus, Schulden, tats\u00e4chlicher Zustand: Wir pr\u00fcfen alles, bevor Sie sich binden.<\/div><\/div><\/div>'+\n        '<div class=\"ole-pos-step\"><span class=\"ole-pos-step-ico ole-ico\"><i data-lucide=\"badge-percent\"><\/i><\/span><div><div class=\"ole-pos-step-t\">Wir verhandeln<\/div><div class=\"ole-pos-step-d\">Wir verteidigen Ihr Budget, um den besten Preis zu erzielen \u2013 ausschlie\u00dflich in Ihrem Interesse.<\/div><\/div><\/div>'+\n      '<\/div>'+\n    '<\/div>';\n  }\n\n  var CITY_MIN = {\n    \"Alicante\":150000, \"Torrevieja\":150000, \"M\u00e1laga\":200000, \"Fuengirola\":200000,\n    \"Marbella\":250000, \"Estepona\":250000, \"Madrid\":250000, \"Valencia\":170000,\n    \"Sevilla\":150000, \"Barcelona\":250000,\n    \"Benidorm\":150000, \"C\u00e1diz\":120000, \"Girona\":130000, \"Nerja\":160000,\n    \"Palma de Mallorca\":200000, \"Tarragona\":120000\n  };\n  var REGION_MIN = {\n    \"Andaluc\u00eda\":70000, \"Comunidad Valenciana\":90000, \"Comunitat Valenciana\":90000,\n    \"Catalu\u00f1a\":120000, \"Catalunya\":120000, \"Islas Baleares\":200000, \"Illes Balears\":200000,\n    \"Canarias\":130000, \"Islas Canarias\":130000, \"Regi\u00f3n de Murcia\":70000,\n    \"Comunidad de Madrid\":180000, \"Galicia\":80000, \"Pa\u00eds Vasco\":150000, \"Euskadi\":150000,\n    \"Cantabria\":110000, \"Asturias\":90000, \"Principado de Asturias\":90000, \"Arag\u00f3n\":90000,\n    \"Castilla y Le\u00f3n\":80000, \"Castilla-La Mancha\":70000, \"Extremadura\":60000,\n    \"Navarra\":110000, \"Comunidad Foral de Navarra\":110000, \"La Rioja\":90000\n  };\n  function locMinBudget(){\n    var loc = state.answers.location;\n    if(!loc) return null;\n    var city = cityName(loc);\n    if(CITY_MIN[city] != null) return CITY_MIN[city];\n    var m = String(loc).match(\/\\(([^)]+)\\)\/);\n    if(m && REGION_MIN[m[1].trim()] != null) return REGION_MIN[m[1].trim()];\n    return null;\n  }\n  function budgetReaction(v){\n    if(!v) return null;\n    var hasCity = !!state.answers.location;\n    var place = hasCity ? locWithPrep(cityName(state.answers.location)) : \"\";\n    var min = locMinBudget();\n    if(min != null){\n      if(v < min){\n        var msg = \"Immobilien \"+place+\" um \"+fmt(v)+\" sind selten (rechnen Sie mit mindestens \"+fmt(min)+\"). Die Suche auf umliegende Orte auszuweiten ist oft m\u00f6glich \u2013 wir suchen die beste Gelegenheit f\u00fcr Sie.\";\n        return { emoji:\"\ud83e\udded\", warn:true, msg:msg };\n      }\n      if(v < min*1.4)  return { emoji:\"\ud83d\udc4d\", msg:\"Ein realistisches Budget \"+place+\": Es gibt echte Chancen, etwas Gro\u00dfartiges zu finden.\" };\n      if(v < min*2.5)  return { emoji:\"\u2600\ufe0f\", msg:\"Guter Spielraum \"+place+\" \u2014 wir k\u00f6nnen auf etwas wirklich Besonderes zielen.\" };\n      return { emoji:\"\u2728\", msg:\"Ol\u00e9! Mit diesem Budget \"+place+\" steht Ihnen das obere Segment offen.\" };\n    }\n    var step = STEPS[stepIndexById(\"budget\")];\n    if(step && step.reactRanges){\n      for(var i=0;i<step.reactRanges.length;i++) if(v<=step.reactRanges[i].max) return step.reactRanges[i];\n    }\n    return null;\n  }\n\n  function cityName(v){ return String(v||\"\").split(\"(\")[0].trim(); }\n  function locWithPrep(place){\n    var p=String(place||\"\").trim(); if(!p) return \"\";\n    if(p===\"Balearen\"||p===\"Kanaren\") return \"auf den \"+p;\n    if(p.indexOf(\"Costa \")===0) return \"an der \"+p;\n    if(p===\"Andalusien\"||p===\"Katalonien\") return \"in \"+p;\n    return \"in \"+p;\n  }\n  function prefersReducedMotion(){ return !!(window.matchMedia && window.matchMedia(\"(prefers-reduced-motion:reduce)\").matches); }\n  function setReaction(step, value){ state.reaction = reactionFor(step, value) || null; }\n  var QUIZ_OK = [\"Genau richtig.\",\"Richtig, gut gemacht!\",\"Richtig \u2013 Sie haben ein gutes Gesp\u00fcr daf\u00fcr.\",\"Genau \u2013 gut gemacht.\",\"Ja! Sie kennen sich schon gut aus.\"];\n  var QUIZ_KO = [\"Das ist die h\u00e4ufigste Falle \u2013 zum Gl\u00fcck sichern wir genau das f\u00fcr Sie ab.\",\"Fast! Und genau da kommen wir ins Spiel.\",\"Nicht ganz \u2013 keine Sorge, das \u00fcbernehmen wir f\u00fcr Sie.\",\"Ein h\u00e4ufiger Fehler: Genau daf\u00fcr gibt es uns.\",\"Nah dran, aber genau solche Details nehmen wir Ihnen ab.\"];\n  function pickVaried(pool, key){ if(pool.length<=1) return pool[0]; var last=state[key], i; do{ i=Math.floor(Math.random()*pool.length); } while(i===last); state[key]=i; return pool[i]; }\n  function showReaction(step, value, instant){ setReaction(step, value); renderBadge(true, instant); }\n  function heroCapFor(step){\n    if(step.id===\"contact\"){\n      if(isRisksPath()) return \"Ol\u00e9! Sie erkennen es klar \u2014 genau deshalb gibt es uns.\";\n      if(state.answers.location) return \"Letzter Schritt \u2014 wir melden uns bald zu Ihrem Projekt \"+locWithPrep(cityName(state.answers.location))+\".\";\n    }\n    return step.heroCap||\"\";\n  }\n  function twChars(msg){ var out=\"\"; for(var i=0;i<msg.length;i++){ var ch=msg.charAt(i); out += '<span class=\"ole-tw\">'+(ch===\" \"?\" \":esc(ch))+'<\/span>'; } return out; }\n  function startTyping(b, r){\n    var q = String.fromCharCode(8220);\n    var emoji = r.emoji ? '<span class=\"ole-emoji ole-emoji-live\">'+ r.emoji +'<\/span>' : '';\n    b.className = \"ole-hero-msg reacted typing\";\n    b.innerHTML = '<span class=\"ole-q-mark\">'+q+'<\/span><span class=\"ole-hero-cap\">'+ twChars(r.msg) +'<\/span>'+ emoji + '<span class=\"ole-typing\"><span><\/span><span><\/span><span><\/span><\/span>';\n    b._typingT = setTimeout(function(){\n      b._typingT=null; b.classList.remove(\"typing\"); b.classList.add(\"writing\");\n      var spans=b.querySelectorAll(\".ole-tw\"), emo=b.querySelector(\".ole-emoji-live\"), i=0;\n      (function tick(){ if(i<spans.length){ spans[i].style.opacity=\"1\"; i++; b._twT=setTimeout(tick,15); } else { b._twT=null; if(emo) emo.style.opacity=\"1\"; b.classList.add(\"done\"); } })();\n    }, 520);\n  }\n  function renderBadge(animate, instant){\n    var b=document.getElementById(\"ole-badge\"); if(!b) return;\n    if(b._typingT){ clearTimeout(b._typingT); b._typingT=null; }\n    if(b._twT){ clearTimeout(b._twT); b._twT=null; }\n    b.style.minHeight=\"\";\n    var step=STEPS[state.i], r=state.reaction;\n    if(!r){ b.className=\"ole-hero-msg\"; b.innerHTML='<span class=\"ole-hero-cap\">'+esc(heroCapFor(step))+'<\/span>'; return; }\n    if(animate && !instant && !prefersReducedMotion()){ startTyping(b, r); }\n    else {\n      b.className=\"ole-hero-msg reacted\";\n      b.innerHTML='<span class=\"ole-q-mark\">'+String.fromCharCode(8220)+'<\/span><span class=\"ole-hero-cap\">'+esc(r.msg)+'<\/span>'+(r.emoji?'<span class=\"ole-emoji\">'+r.emoji+'<\/span>':'');\n      if(animate){ void b.offsetWidth; b.classList.add(\"bump\"); setTimeout(function(){ b.classList.remove(\"bump\"); },420); }\n    }\n  }\n\n  \/* =========================================================\n     5) STRUCTURE\n     ========================================================= *\/\n  root.innerHTML =\n    '<div class=\"ole-card\">'+\n      '<div class=\"ole-head\">'+\n        '<div class=\"ole-head-top\">'+\n          '<span class=\"ole-eyebrow\" id=\"ole-eyebrow\"><\/span>'+\n          '<button type=\"button\" class=\"ole-close\" id=\"ole-close\" aria-label=\"Formular schlie\u00dfen\"><i data-lucide=\"x\"><\/i><\/button>'+\n        '<\/div>'+\n        '<div class=\"ole-progress-wrap\">'+\n          '<div class=\"ole-track\"><div class=\"ole-bar\" id=\"ole-bar\"><span class=\"ole-bar-shine\"><\/span><span class=\"ole-sun\"><\/span><\/div><\/div>'+\n          '<span class=\"ole-count\" id=\"ole-count\"><\/span>'+\n        '<\/div>'+\n      '<\/div>'+\n      '<div class=\"ole-body\" id=\"ole-body\"><\/div>'+\n      '<div class=\"ole-foot\" id=\"ole-foot\"><\/div>'+\n      '<div class=\"ole-confirm\" id=\"ole-confirm\">'+\n        '<div class=\"ole-confirm-sheet\">'+\n          '<div class=\"ole-confirm-ico\"><i data-lucide=\"log-out\"><\/i><\/div>'+\n          '<h4>Formular verlassen?<\/h4>'+\n          '<p>Ihre Angaben werden nicht gespeichert. Sie sind nur noch wenige Schritte von Ihrem Platz unter der spanischen Sonne entfernt.<\/p>'+\n          '<div class=\"ole-confirm-actions\">'+\n            '<button type=\"button\" class=\"ole-confirm-stay\" id=\"ole-stay\">Weiter ausf\u00fcllen<\/button>'+\n            '<button type=\"button\" class=\"ole-confirm-quit\" id=\"ole-quit\">Trotzdem verlassen<\/button>'+\n          '<\/div>'+\n        '<\/div>'+\n      '<\/div>'+\n      '<input class=\"ole-hp\" type=\"text\" name=\"Hypot_field\" id=\"ole-hp\" tabindex=\"-1\" autocomplete=\"off\" aria-hidden=\"true\">'+\n    '<\/div>';\n\n  var bodyEl=document.getElementById(\"ole-body\"), barEl=document.getElementById(\"ole-bar\"),\n      countEl=document.getElementById(\"ole-count\"), eyebrowEl=document.getElementById(\"ole-eyebrow\"),\n      footEl=document.getElementById(\"ole-foot\");\n  bodyEl.addEventListener(\"input\", saveSoon);\n  bodyEl.addEventListener(\"change\", saveSoon);\n  bodyEl.addEventListener(\"click\", saveSoon);\n\n  var confirmEl=document.getElementById(\"ole-confirm\");\n  document.getElementById(\"ole-close\").onclick=function(){ if(hasAnswers()){ confirmEl.classList.add(\"show\"); } else { quit(); } };\n  document.getElementById(\"ole-stay\").onclick=function(){ confirmEl.classList.remove(\"show\"); };\n  document.getElementById(\"ole-quit\").onclick=quit;\n  confirmEl.addEventListener(\"click\",function(e){ if(e.target===confirmEl) confirmEl.classList.remove(\"show\"); });\n  function quit(){ clearState(); if(CLOSE_URL){ window.location.href=CLOSE_URL; } else if(window.history && window.history.length>1){ window.history.back(); } else { confirmEl.classList.remove(\"show\"); } }\n\n  \/* =========================================================\n     6) RENDER\n     ========================================================= *\/\n  function stepNumber(){ var seq=ORDER.filter(function(id){ return !isEdu(id) || isRisksPath(); }); return { pos: seq.indexOf(STEPS[state.i].id)+1, total: seq.length }; }\n\n  function render(animClass){\n    var step=STEPS[state.i], n=stepNumber();\n    if(step.type===\"teach\" || step.type===\"callback\") state.reaction=null;\n    var rem=n.total-n.pos;\n    if(step.type===\"contact\") countEl.textContent=\"Letzter Schritt\";\n    else if(rem===1) countEl.textContent=\"Noch ein Schritt!\";\n    else if(rem===2) countEl.textContent=\"Noch 2 Fragen!\";\n    else countEl.textContent=\"Schritt \"+n.pos+\" \/ \"+n.total;\n    barEl.style.width=Math.round((n.pos\/n.total)*100)+\"%\";\n    eyebrowEl.className=\"ole-eyebrow ebIn\";\n    eyebrowEl.innerHTML=(step.ebIco?'<span class=\"ole-ico ole-eb-ico\"><i data-lucide=\"'+step.ebIco+'\"><\/i><\/span>':'')+esc(step.eyebrow||\"\");\n\n    var wrap=document.createElement(\"div\");\n    wrap.className=\"ole-step \"+(animClass||\"in-right\");\n    wrap.innerHTML=stepHTML(step);\n    bodyEl.innerHTML=\"\"; bodyEl.appendChild(wrap);\n\n    renderFoot(step); wireStep(step, wrap); wireFoot(step); applyCascade(wrap);\n    bodyEl.scrollTop=0; renderBadge(true); refreshIcons(); clearFx(wrap); lockInput(); saveState();\n  }\n\n  function lockNow(){ bodyEl.style.pointerEvents=\"none\"; footEl.style.pointerEvents=\"none\"; }\n  function lockInput(){ lockNow(); setTimeout(function(){ bodyEl.style.pointerEvents=\"\"; footEl.style.pointerEvents=\"\"; state.busy=false; }, 450); }\n  function applyCascade(wrap){\n    if(prefersReducedMotion()) return;\n    var sel=\".ole-q, .ole-teach-body, .ole-quiz-ask, .ole-quiz-opt, .ole-opt, .ole-value-card, .ole-closing, .ole-field, .ole-recap, .ole-info-bonus, .ole-cb-label, .ole-cb-rdv\";\n    var els=[].slice.call(wrap.querySelectorAll(sel));\n    for(var i=0;i<els.length;i++){ els[i].classList.add(\"ole-rise\"); els[i].style.animationDelay=(0.03+Math.min(i,8)*0.05)+\"s\"; }\n  }\n  function clearFx(wrap){\n    setTimeout(function(){\n      wrap.classList.remove(\"in-right\",\"in-left\"); eyebrowEl.classList.remove(\"ebIn\");\n      var fx=wrap.querySelectorAll(\".fx\"); for(var i=0;i<fx.length;i++) fx[i].classList.remove(\"fx\");\n      var rs=wrap.querySelectorAll(\".ole-rise\"); for(var j=0;j<rs.length;j++){ rs[j].classList.remove(\"ole-rise\"); rs[j].style.animationDelay=\"\"; }\n    }, 1000);\n  }\n  function heroHTML(step){ if(!SHOW_HERO) return \"\"; return '<div class=\"ole-hero\"><div class=\"ole-hero-ico ole-ico fx\"><i data-lucide=\"'+(step.heroIco||\"sun\")+'\"><\/i><\/div><div class=\"ole-hero-msg\" id=\"ole-badge\"><\/div><\/div>'; }\n\n  function stepHTML(step){\n    var h=(step.id===\"timing\")?posHTML():\"\";\n    h+=heroHTML(step);\n    h += '<div class=\"ole-q\">'+esc(step.q)+(step.required?' <span class=\"req\">*<\/span>':'')+'<\/div>';\n    if(step.sub) h += '<div class=\"ole-sub\">'+esc(step.sub)+'<\/div>';\n\n    if(step.type===\"single\" || step.type===\"multi\"){\n      h += '<div class=\"ole-options\">';\n      step.options.forEach(function(opt){\n        var label=(typeof opt===\"object\")?opt.label:opt;\n        var icon=(typeof opt===\"object\"&&opt.ic)?opt.ic:\"circle\";\n        var tone=(typeof opt===\"object\"&&opt.tone)?(\" tone-\"+opt.tone):\"\";\n        var sel=isSelected(step,label)?\" sel\":\"\";\n        h += '<button type=\"button\" class=\"ole-opt'+tone+sel+'\" data-type=\"'+step.type+'\" data-val=\"'+esc(label)+'\"><span class=\"ole-opt-ico ole-ico\"><i data-lucide=\"'+icon+'\"><\/i><\/span><span class=\"ole-opt-label\">'+esc(label)+'<\/span><span class=\"ole-mark\"><\/span><\/button>';\n      });\n      h += '<\/div>';\n    }\n    else if(step.type===\"budget\"){\n      var bv=state.answers.budget?nf.format(state.answers.budget):\"\";\n      h += '<div class=\"ole-field has-ico\"><span class=\"ole-field-ico ole-ico\"><i data-lucide=\"dollar-sign\"><\/i><\/span><input class=\"ole-input\" id=\"ole-budget\" inputmode=\"numeric\" autocomplete=\"off\" placeholder=\"'+esc(step.placeholder)+'\" value=\"'+esc(bv)+'\"><\/div>';\n      h += '<div class=\"ole-errmsg\" id=\"err-budget\"><\/div>';\n      h += '<div class=\"ole-pills\">';\n      step.pills.forEach(function(v){ h += '<button type=\"button\" class=\"ole-pill'+(state.answers.budget===v?\" sel\":\"\")+'\" data-budget=\"'+v+'\">'+fmt(v)+'<\/button>'; });\n      h += '<\/div>';\n    }\n    else if(step.type===\"location\"){\n      var lv=state.answers.location||\"\";\n      h += '<div class=\"ole-field has-ico\"><span class=\"ole-field-ico ole-ico\"><i data-lucide=\"search\"><\/i><\/span><input class=\"ole-input\" id=\"ole-loc\" autocomplete=\"off\" placeholder=\"'+esc(step.placeholder)+'\" value=\"'+esc(lv)+'\"><\/div>';\n      h += '<div class=\"ole-pills loc-pills\">';\n      step.cities.forEach(function(c){ h += '<button type=\"button\" class=\"ole-pill'+(state.answers.location===c?\" sel\":\"\")+'\" data-loc=\"'+esc(c)+'\">'+esc(c)+'<\/button>'; });\n      h += '<\/div><div class=\"ole-pills sep loc-pills\">';\n      step.regions.forEach(function(r){ h += '<button type=\"button\" class=\"ole-pill region'+(state.answers.location===r?\" sel\":\"\")+'\" data-loc=\"'+esc(r)+'\"><span class=\"ole-pill-ico ole-ico\"><i data-lucide=\"waves\"><\/i><\/span>'+esc(r)+'<\/button>'; });\n      h += '<\/div>';\n    }\n    else if(step.type===\"teach\"){\n      var showQuiz = step.quiz && (RISKS_FORMAT===\"quiz\" || (RISKS_FORMAT===\"mix\" && step.quizMix));\n      if(showQuiz){\n        h += '<div class=\"ole-quiz\"><div class=\"ole-quiz-ask\">'+esc(step.quiz.ask)+'<\/div><div class=\"ole-quiz-opts\">';\n        step.quiz.options.forEach(function(o,idx){ h += '<button type=\"button\" class=\"ole-quiz-opt\" data-correct=\"'+(o.correct?\"1\":\"0\")+'\" data-idx=\"'+idx+'\"><span class=\"ole-quiz-mark\"><\/span><span class=\"ole-quiz-lbl\">'+esc(o.label)+'<\/span><\/button>'; });\n        h += '<\/div><div class=\"ole-quiz-reveal\" id=\"ole-quiz-reveal\"><div class=\"ole-quiz-reveal-ico ole-ico\"><i data-lucide=\"lightbulb\"><\/i><\/div><div class=\"ole-quiz-reveal-txt\">'+esc(step.quiz.reveal)+'<\/div><\/div><\/div>';\n      } else if(step.body){ h += '<div class=\"ole-teach-body\">'+esc(step.body)+'<\/div>'; }\n      if(step.valueRecap){\n        var vr=step.valueRecap; h += '<div class=\"ole-value\">';\n        if(vr.saves && vr.saves.length){ h += '<div class=\"ole-value-card gain\"><div class=\"ole-value-title\"><span class=\"ole-ico\"><i data-lucide=\"piggy-bank\"><\/i><\/span>Was wir Ihnen ersparen<\/div>'; vr.saves.forEach(function(it){ h += '<div class=\"ole-value-item\"><span class=\"ole-value-ico ole-ico\"><i data-lucide=\"'+it.ic+'\"><\/i><\/span><span>'+esc(it.t)+'<\/span><\/div>'; }); h += '<\/div>'; }\n        if(vr.avoids && vr.avoids.length){ h += '<div class=\"ole-value-card avoid\"><div class=\"ole-value-title\"><span class=\"ole-ico\"><i data-lucide=\"shield-check\"><\/i><\/span>Die Fallen, vor denen wir Sie bewahren<\/div>'; vr.avoids.forEach(function(it){ h += '<div class=\"ole-value-item\"><span class=\"ole-value-ico ole-ico\"><i data-lucide=\"'+it.ic+'\"><\/i><\/span><span>'+esc(it.t)+'<\/span><\/div>'; }); h += '<\/div>'; }\n        h += '<\/div>';\n      }\n      if(step.closing) h += '<div class=\"ole-closing\"><div class=\"ole-closing-ico ole-ico\"><i data-lucide=\"badge-check\"><\/i><\/div><div><div class=\"ole-closing-t\">'+esc(step.closing.t)+'<\/div><div class=\"ole-closing-d\">'+esc(step.closing.d)+'<\/div><\/div><\/div>';\n    }\n    else if(step.type===\"callback\"){\n      cbInitZone();\n      var zNow=cbZoneShort(); var isOther=!cbIsUsZone();\n      h += '<div class=\"ole-cb-fields'+(state.answers.cb_rdv?\" hidden\":\"\")+'\" id=\"ole-cb-fields\">';\n      h += '<div class=\"ole-cb-label\"><span class=\"ole-ico\"><i data-lucide=\"globe\"><\/i><\/span>Ihre Zeitzone<\/div>';\n      h += '<div class=\"ole-pills ole-cb-zones\" id=\"ole-cb-zones\">';\n      US_ZONES.forEach(function(z){ h += '<button type=\"button\" class=\"ole-pill'+(!isOther && state.answers.cb_tz===z.tz?\" sel\":\"\")+'\" data-cbzone=\"'+z.l+'\" data-cbtz=\"'+z.tz+'\">'+esc(z.l)+'<\/button>'; });\n      h += '<button type=\"button\" class=\"ole-pill'+(isOther?\" sel\":\"\")+'\" data-cbother=\"1\"><span class=\"ole-pill-ico ole-ico\"><i data-lucide=\"globe-2\"><\/i><\/span>Anderes Land<\/button>';\n      h += '<\/div>';\n      h += '<select class=\"ole-cb-select'+(isOther?\" show\":\"\")+'\" id=\"ole-cb-select\" aria-label=\"Zeitzone ausw\u00e4hlen\"><option value=\"\">Land \/ Zeitzone ausw\u00e4hlen\u2026<\/option>';\n      WORLD_ZONES.forEach(function(z){ h += '<option value=\"'+esc(z.tz)+'\" data-s=\"'+esc(z.s)+'\"'+(isOther && state.answers.cb_tz===z.tz?\" selected\":\"\")+'>'+esc(z.l)+'<\/option>'; });\n      h += '<\/select>';\n      h += '<div class=\"ole-cb-label sep\"><span class=\"ole-ico\"><i data-lucide=\"calendar\"><\/i><\/span>Tag<\/div>';\n      h += '<div class=\"ole-pills ole-cb-days\" id=\"ole-cb-days\">';\n      step.days.forEach(function(d){ var sel=(Array.isArray(state.answers.cb_days)&&state.answers.cb_days.indexOf(d.label)>-1)?\" sel\":\"\"; h += '<button type=\"button\" class=\"ole-pill'+sel+'\" data-cbday=\"'+esc(d.label)+'\" data-dow=\"'+d.dow+'\">'+esc(d.label)+'<\/button>'; });\n      h += '<button type=\"button\" class=\"ole-pill'+(state.answers.cb_days_indif?\" sel\":\"\")+'\" data-cbday-indif=\"1\">Jeden Tag<\/button>';\n      h += '<\/div>';\n      h += '<div class=\"ole-cb-label sep\"><span class=\"ole-ico\"><i data-lucide=\"clock\"><\/i><\/span>Zeitfenster<\/div>';\n      h += '<div class=\"ole-cb-hint\" id=\"ole-cb-hint\">Angezeigt in Ihrer Ortszeit ('+esc(zNow)+'). Wir rufen nur w\u00e4hrend unserer spanischen B\u00fcrozeiten an, sodass diese Zeitfenster bereits passend f\u00fcr Sie sind.<\/div>';\n      h += '<div class=\"ole-pills ole-cb-slots\" id=\"ole-cb-slots\">'+cbSlotsHTML()+'<\/div>';\n      h += '<div class=\"ole-cb-empty\" id=\"ole-cb-empty\" style=\"'+(cbHasSlots()?\"display:none\":\"\")+'\">Aufgrund der Zeitverschiebung zwischen Spanien und Ihrer Region sind die Anrufzeiten f\u00fcr diesen Tag sehr begrenzt. W\u00e4hlen Sie <strong>\\u201CJederzeit passend\\u201D<\/strong> und wir finden den besten Zeitpunkt \\u2014 oder buchen Sie direkt einen Termin.<\/div>';\n      h += '<div class=\"ole-cb-precise'+(state.answers.cb_precise?\" show\":\"\")+'\" id=\"ole-cb-precise\"><div class=\"ole-cb-precise-inner\"><div class=\"ole-cb-mini\">Welche Uhrzeit passt Ihnen am besten?<\/div><div class=\"ole-pills ole-cb-hours\" id=\"ole-cb-hours\">'+cbHoursHTML()+'<\/div><div class=\"ole-cb-precise-note'+(state.answers.cb_precise&&state.answers.cb_hour!=null?\" show\":\"\")+'\" id=\"ole-cb-precise-note\"><span class=\"ole-cb-precise-note-ico ole-ico\"><i data-lucide=\"info\"><\/i><\/span><div class=\"ole-cb-precise-note-body\"><span id=\"ole-cb-precise-note-txt\">'+esc(cbPreciseMsg())+'<\/span><button type=\"button\" class=\"ole-cb-precise-rdv\" id=\"ole-cb-precise-rdv\"><span class=\"ole-ico\"><i data-lucide=\"calendar-check\"><\/i><\/span>Termin buchen<\/button><\/div><\/div><\/div><\/div>';\n      h += '<div class=\"ole-cb-office\"><span class=\"ole-ico\"><i data-lucide=\"info\"><\/i><\/span><span>Wir sind in Spanien ans\u00e4ssig und rufen w\u00e4hrend unserer \u00fcblichen Gesch\u00e4ftszeiten an (9\\u201319 Uhr MEZ, Mo\\u2013Fr). Wir tun unser Bestes, um Sie in Ihrem gew\u00fcnschten Zeitfenster zu erreichen.<\/span><\/div>';\n      h += '<\/div>';\n      h += '<button type=\"button\" class=\"ole-cb-rdv'+(state.answers.cb_rdv?\" on\":\"\")+'\" id=\"ole-cb-rdv\" aria-pressed=\"'+(state.answers.cb_rdv?\"true\":\"false\")+'\"><span class=\"ole-cb-rdv-mark\"><\/span><span class=\"ole-cb-rdv-ico ole-ico\"><i data-lucide=\"calendar-check\"><\/i><\/span><span class=\"ole-cb-rdv-txt\">Ich buche lieber selbst einen Termin<\/span><\/button>';\n      h += '<div class=\"ole-cb-rdv-note'+(state.answers.cb_rdv?\" show\":\"\")+'\" id=\"ole-cb-rdv-note\"><span class=\"ole-cb-rdv-note-ico ole-ico\"><i data-lucide=\"info\"><\/i><\/span><span>Am Ende des Formulars gelangen Sie zu unserer Buchungsseite, um direkt einen Termin mit einem Berater zu w\u00e4hlen.<\/span><\/div>';\n    }\n    else if(step.type===\"contact\"){\n      var a=state.answers;\n      h += recapHTML();\n      h += proofHTML();\n      h += '<form class=\"ole-cform\" autocomplete=\"on\" onsubmit=\"return false;\">'+\n           '<div class=\"ole-grid2\">'+ field(\"firstname\",\"Vorname\",\"text\",a.firstname,\"Max\",\"given-name\")+ field(\"lastname\",\"Nachname\",\"text\",a.lastname,\"Mustermann\",\"family-name\")+ '<\/div>'+\n           field(\"email\",\"E-Mail\",\"email\",a.email,\"max.mustermann@email.com\",\"email\")+\n           '<div class=\"ole-suggest\" id=\"sugg-email\" aria-live=\"polite\"><\/div>'+\n           '<div class=\"ole-phone-msg\" id=\"ole-phone-msg\"><\/div>'+\n           field(\"phone\",\"Telefon\",\"tel\",a.phone,\"+49 151 23456789\",\"tel\")+\n           '<div class=\"ole-consent\"><span class=\"ole-ico\"><i data-lucide=\"shield-check\"><\/i><\/span><span>'+esc(step.consent)+' <a class=\"ole-consent-link\" href=\"'+esc(PRIVACY_URL)+'\" target=\"_blank\" rel=\"noopener noreferrer\">Privacy policy<\/a>. <span style=\"color:var(--blue)\">*<\/span><\/span><\/div>'+\n           '<\/form>';\n    }\n    return h;\n  }\n\n  var PROOF_LINES = [\n    'Sie arbeiten mit einem pers\u00f6nlichen, <strong>englischsprachigen Berater<\/strong> zusammen \u2013 von der Suche bis zur Unterschrift.',\n    'Wir sind Ihre <strong>Augen und Ohren<\/strong> vor Ort in Spanien.',\n    'Wir \u00fcbernehmen den Papierkram \u2014 <strong>NIE, Notar, Bank<\/strong> \u2014 damit Sie es nicht m\u00fcssen.',\n    'Der beste Zeitpunkt zu starten war gestern. Der zweitbeste ist <strong>jetzt<\/strong>.',\n    'Ihr Platz unter der spanischen Sonne k\u00f6nnte <strong>n\u00e4her sein, als Sie denken<\/strong>.'\n  ];\n  function proofHTML(){ return '<div class=\"ole-proof\"><span class=\"ole-proof-ico ole-ico\"><i data-lucide=\"sparkles\"><\/i><\/span><span class=\"ole-proof-rot\" id=\"ole-proof-rot\"><\/span><\/div>'; }\n  function initProof(wrap){\n    var el=wrap.querySelector(\"#ole-proof-rot\"); if(!el) return; var i=0;\n    if(state._proofIv){ clearInterval(state._proofIv); }\n    el.innerHTML='<span class=\"ole-proof-line\">'+PROOF_LINES[0]+'<\/span>';\n    state._proofIv=setInterval(function(){ el.classList.add(\"out\"); setTimeout(function(){ i=(i+1)%PROOF_LINES.length; el.innerHTML='<span class=\"ole-proof-line\">'+PROOF_LINES[i]+'<\/span>'; el.classList.remove(\"out\"); },450); },5200);\n  }\n\n  function field(id,label,type,val,ph,ac){\n    var im=(type===\"email\")?'inputmode=\"email\" ':(type===\"tel\")?'inputmode=\"tel\" ':'';\n    var extra=(type===\"email\")?'autocapitalize=\"off\" autocorrect=\"off\" spellcheck=\"false\" ':(type===\"text\")?'autocapitalize=\"words\" ':'';\n    return '<div class=\"ole-field\"><label class=\"ole-label\" for=\"ole-'+id+'\">'+esc(label)+' <span class=\"req\">*<\/span><\/label><input class=\"ole-input\" id=\"ole-'+id+'\" name=\"'+id+'\" type=\"'+type+'\" autocomplete=\"'+(ac||\"on\")+'\" '+im+extra+'value=\"'+esc(val||\"\")+'\" placeholder=\"'+esc(ph)+'\"><div class=\"ole-errmsg\" id=\"err-'+id+'\"><\/div><\/div>';\n  }\n\n  function renderFoot(step){\n    var html=\"\", primary=\"\";\n    if(step.type===\"contact\"){\n      var ctaCity=state.answers.location?cityName(state.answers.location):\"\";\n      var ctaLabel=ctaCity?(\"Meine Suche starten \"+locWithPrep(ctaCity)):\"Anfrage absenden\";\n      primary='<button type=\"button\" class=\"ole-next sun\" id=\"ole-next\"><span class=\"ole-spin\" id=\"ole-spin\"><\/span><span id=\"ole-next-label\">'+esc(ctaLabel)+'<\/span> <i data-lucide=\"check\"><\/i><\/button>';\n    } else if(step.type===\"teach\"){ primary='<button type=\"button\" class=\"ole-next\" id=\"ole-next\">'+esc(step.cta||\"Weiter\")+' <i data-lucide=\"arrow-right\"><\/i><\/button>'; }\n    else if(step.type===\"multi\" || step.type===\"budget\" || step.type===\"location\" || step.type===\"callback\"){ primary='<button type=\"button\" class=\"ole-next\" id=\"ole-next\">Weiter <i data-lucide=\"arrow-right\"><\/i><\/button>'; }\n    if(primary) html += primary;\n    if(step.type===\"contact\") html += '<div class=\"ole-trust\"><span><i data-lucide=\"lock\"><\/i> Unverbindlich<\/span><span><i data-lucide=\"clock\"><\/i> Antwort innerhalb von 24 Std.<\/span><span><i data-lucide=\"message-circle\"><\/i> Englischsprachiges Team<\/span><\/div>';\n    if(step.type===\"teach\" && step.skip) html += '<button type=\"button\" class=\"ole-skip\" id=\"ole-skip\">Diesen Schritt \u00fcberspringen<\/button>';\n    if(state.history.length>0) html += '<button type=\"button\" class=\"ole-back\" id=\"ole-back\"><i data-lucide=\"chevron-left\"><\/i> Zur\u00fcck<\/button>';\n    footEl.innerHTML=html;\n  }\n\n  function isSelected(step,label){ var v=state.answers[step.id]; if(step.type===\"multi\") return Array.isArray(v)&&v.indexOf(label)>-1; return v===label; }\n\n  \/* =========================================================\n     7) INTERACTIONS\n     ========================================================= *\/\n  function wireFoot(step){\n    var back=footEl.querySelector(\"#ole-back\"); if(back) back.onclick=prev;\n    var next=footEl.querySelector(\"#ole-next\"); if(!next) return;\n    if(step.type===\"contact\") next.onclick=submit;\n    else if(step.type===\"teach\"){ next.onclick=function(){ nextStep(); }; var sk=footEl.querySelector(\"#ole-skip\"); if(sk) sk.onclick=skipToContact; }\n    else next.onclick=function(){ if(validate(step)) nextStep(); };\n  }\n\n  function wireStep(step, wrap){\n    var posT = wrap.querySelector(\"#ole-pos-toggle\");\n    if(posT) posT.onclick=function(){ var p=wrap.querySelector(\"#ole-pos\"); if(p){ var open=p.classList.toggle(\"open\"); posT.setAttribute(\"aria-expanded\", open?\"true\":\"false\"); } refreshIcons(); };\n    if(step.type===\"single\" || step.type===\"multi\"){\n      wrap.querySelectorAll(\".ole-opt\").forEach(function(btn){\n        btn.onclick=function(){\n          var val=btn.getAttribute(\"data-val\");\n          if(step.type===\"multi\"){\n            var arr=state.answers[step.id]||[]; var k=arr.indexOf(val);\n            if(k>-1) arr.splice(k,1); else arr.push(val);\n            state.answers[step.id]=arr; btn.classList.toggle(\"sel\"); btn.classList.add(\"pulse\");\n            setTimeout(function(){btn.classList.remove(\"pulse\");},350); showReaction(step, arr);\n          } else {\n            wrap.querySelectorAll(\".ole-opt\").forEach(function(b){b.classList.remove(\"sel\");});\n            btn.classList.add(\"sel\",\"pulse\"); state.answers[step.id]=val; setReaction(step, val); lockAdvance();\n          }\n        };\n      });\n    }\n    else if(step.type===\"budget\"){\n      var inp=wrap.querySelector(\"#ole-budget\");\n      function applyBudget(el){\n        var raw=el.value, caret=el.selectionStart==null?raw.length:el.selectionStart;\n        var before=raw.slice(0,caret).replace(\/\\D\/g,\"\").length;\n        var d=raw.replace(\/[^\\d]\/g,\"\"); state.answers.budget=d?parseInt(d,10):null;\n        var f=d?nf.format(parseInt(d,10)):\"\"; el.value=f;\n        var pos=0,seen=0; while(pos<f.length && seen<before){ var c=f.charCodeAt(pos); if(c>=48&&c<=57) seen++; pos++; }\n        try{ el.setSelectionRange(pos,pos); }catch(e){}\n        wrap.querySelectorAll(\".ole-pill\").forEach(function(p){ p.classList.toggle(\"sel\", parseInt(p.dataset.budget,10)===state.answers.budget); });\n        showReaction(step, state.answers.budget, true); setErr(\"budget\",\"\");\n      }\n      inp.addEventListener(\"input\",function(){ applyBudget(inp); });\n      wrap.querySelectorAll(\".ole-pill\").forEach(function(p){ p.onclick=function(){ var v=parseInt(p.dataset.budget,10); state.answers.budget=v; inp.value=nf.format(v); wrap.querySelectorAll(\".ole-pill\").forEach(function(x){x.classList.toggle(\"sel\",x===p);}); setReaction(step, v); lockAdvance(); }; });\n    }\n    else if(step.type===\"location\"){\n      var loc=wrap.querySelector(\"#ole-loc\");\n      var pills=[].slice.call(wrap.querySelectorAll(\".ole-pill\"));\n      pills.forEach(function(p){ p.onclick=function(){ var v=p.getAttribute(\"data-loc\"); state.answers.location=v; loc.value=v; pills.forEach(function(x){x.classList.toggle(\"sel\",x===p);}); setReaction(step, v); lockAdvance(); }; });\n      loc.addEventListener(\"input\",function(){ state.answers.location=loc.value; showReaction(step, loc.value, true); var t=loc.value.toLowerCase().trim(); pills.forEach(function(p){ p.classList.toggle(\"sel\", p.getAttribute(\"data-loc\")===loc.value); p.classList.toggle(\"hidden\", t.length>0 && p.getAttribute(\"data-loc\").toLowerCase().indexOf(t)===-1); }); });\n      if(HS.googleMapsKey) loadGoogleMaps(HS.googleMapsKey, function(){ gMapsReady=true; initLocationAutocomplete(loc, pills, step); });\n    }\n    else if(step.type===\"contact\"){\n      [\"firstname\",\"lastname\",\"email\"].forEach(function(id){ var el=wrap.querySelector(\"#ole-\"+id); if(el) el.addEventListener(\"input\", function(){ if(id===\"email\"){ var lo=el.value.toLowerCase(); if(lo!==el.value){ var p=el.selectionStart; el.value=lo; try{ el.setSelectionRange(p,p); }catch(e){} } } state.answers[id]=el.value; }); });\n      var phEl=wrap.querySelector(\"#ole-phone\"); if(phEl) phEl.addEventListener(\"input\", function(){ state.answers.phone=phEl.value; });\n      var em=wrap.querySelector(\"#ole-email\"), sug=wrap.querySelector(\"#sugg-email\");\n      function clearSug(){ if(sug){ sug.innerHTML=\"\"; sug.classList.remove(\"show\"); } }\n      function checkSug(){ if(!em||!sug) return; var s=suggestEmail(em.value.trim()); if(s){ sug.innerHTML='Meinten Sie <button type=\"button\" class=\"ole-suggest-link\" data-email=\"'+esc(s)+'\">'+esc(s)+'<\/button>?'; sug.classList.add(\"show\"); } else clearSug(); }\n      if(em){ em.addEventListener(\"blur\", checkSug); em.addEventListener(\"input\", clearSug); }\n      if(sug){ sug.addEventListener(\"click\", function(e){ var t=e.target; if(t&&t.classList&&t.classList.contains(\"ole-suggest-link\")){ em.value=t.getAttribute(\"data-email\"); state.answers.email=em.value; clearSug(); setErr(\"email\",\"\"); em.focus(); } }); }\n      initPhone(wrap); initProof(wrap);\n      var cbEdit=wrap.querySelector(\"#ole-recap-cb-edit\");\n      if(cbEdit){ var goEditCb=function(){ if(state.busy) return; var t=stepIndexById(\"callback\"); if(t<0||t===state.i) return; if(state.history.length && state.history[state.history.length-1]===t) transitionTo(state.history.pop(),-1); else transitionTo(t,-1); }; cbEdit.addEventListener(\"click\", goEditCb); cbEdit.addEventListener(\"keydown\", function(e){ if(e.key===\"Enter\"||e.key===\" \"){ e.preventDefault(); goEditCb(); } }); }\n      var cform=wrap.querySelector(\".ole-cform\"); if(cform) cform.addEventListener(\"keydown\", function(e){ if(e.key===\"Enter\"){ e.preventDefault(); submit(); } });\n      var noteEl=wrap.querySelector(\"#ole-recap-note\");\n      if(noteEl){ var noteTxt=noteEl.getAttribute(\"data-note\")||\"\"; if(noteTxt){ if(state._noteT) clearTimeout(state._noteT); if(state._noteTw) clearTimeout(state._noteTw); state._noteT=setTimeout(function(){ noteEl.classList.add(\"writing\"); var i=0; (function tick(){ noteEl.textContent=noteTxt.slice(0,i); if(i<noteTxt.length){ i++; state._noteTw=setTimeout(tick,30); } else { state._noteTw=null; noteEl.classList.remove(\"writing\"); } })(); },2000); } }\n    }\n    else if(step.type===\"callback\"){\n      var fieldsEl=wrap.querySelector(\"#ole-cb-fields\"), slotsEl=wrap.querySelector(\"#ole-cb-slots\"), noteEl=wrap.querySelector(\"#ole-cb-rdv-note\");\n      var rdvBtn=wrap.querySelector(\"#ole-cb-rdv\"), preciseEl=wrap.querySelector(\"#ole-cb-precise\"), hoursEl=wrap.querySelector(\"#ole-cb-hours\");\n      var pNoteEl=wrap.querySelector(\"#ole-cb-precise-note\"), pNoteTxt=wrap.querySelector(\"#ole-cb-precise-note-txt\"), pRdvBtn=wrap.querySelector(\"#ole-cb-precise-rdv\");\n      var hintEl=wrap.querySelector(\".ole-cb-hint\");\n      var selEl=wrap.querySelector(\"#ole-cb-select\");\n      var emptyEl=wrap.querySelector(\"#ole-cb-empty\");\n      cbInitZone();\n      function cbSyncEmpty(){ if(emptyEl) emptyEl.style.display = cbHasSlots()?\"none\":\"\"; }\n      function cbHint(){ if(hintEl) hintEl.textContent=\"Shown in your local time (\"+cbZoneShort()+\"). We only call during our Spanish office hours, so these windows already match when we can reach you.\"; }\n      function cbUpdate(){ state.reaction=cbReaction(); renderBadge(true); saveSoon(); }\n      function cbSetRdv(on){ state.answers.cb_rdv=on; if(rdvBtn){ rdvBtn.classList.toggle(\"on\",on); rdvBtn.setAttribute(\"aria-pressed\",on?\"true\":\"false\"); } if(fieldsEl) fieldsEl.classList.toggle(\"hidden\",on); if(noteEl) noteEl.classList.toggle(\"show\",on); cbUpdate(); }\n      function cbSyncPrecise(){ if(preciseEl) preciseEl.classList.toggle(\"show\", !!state.answers.cb_precise); if(pNoteEl) pNoteEl.classList.toggle(\"show\", !!(state.answers.cb_precise&&state.answers.cb_hour!=null)); if(pNoteTxt) pNoteTxt.textContent=cbPreciseMsg(); }\n      function cbWireHours(){ if(!hoursEl) return; hoursEl.querySelectorAll(\"[data-cbhour]\").forEach(function(btn){ btn.onclick=function(){ var v=parseInt(btn.getAttribute(\"data-cbhour\"),10), was=btn.classList.contains(\"sel\"); hoursEl.querySelectorAll(\"[data-cbhour]\").forEach(function(b){b.classList.remove(\"sel\");}); if(!was){ btn.classList.add(\"sel\"); state.answers.cb_hour=v; } else state.answers.cb_hour=null; cbSyncPrecise(); cbUpdate(); }; }); }\n      function cbRefreshHours(){ if(!hoursEl) return; var allowed=cbHours(); if(state.answers.cb_hour!=null && allowed.indexOf(state.answers.cb_hour)===-1) state.answers.cb_hour=null; hoursEl.innerHTML=cbHoursHTML(); cbWireHours(); refreshIcons(); }\n      function cbClearAny(){ state.answers.cb_any=false; var ab=slotsEl.querySelector(\"[data-cbany]\"); if(ab) ab.classList.remove(\"sel\"); }\n      function cbWireSlots(){\n        slotsEl.querySelectorAll(\"[data-cbslot]\").forEach(function(btn){ btn.onclick=function(){ var v=parseInt(btn.getAttribute(\"data-cbslot\"),10), was=btn.classList.contains(\"sel\"); slotsEl.querySelectorAll(\"[data-cbslot]\").forEach(function(b){b.classList.remove(\"sel\");}); state.answers.cb_precise=false; state.answers.cb_hour=null; cbClearAny(); var pp=slotsEl.querySelector(\"[data-cbprecise]\"); if(pp) pp.classList.remove(\"sel\"); if(!was){ btn.classList.add(\"sel\"); state.answers.cb_slot=v; } else state.answers.cb_slot=null; cbSyncPrecise(); cbUpdate(); }; });\n        var pBtn=slotsEl.querySelector(\"[data-cbprecise]\");\n        if(pBtn) pBtn.onclick=function(){ var on=!state.answers.cb_precise; state.answers.cb_precise=on; cbClearAny(); if(on){ state.answers.cb_slot=null; slotsEl.querySelectorAll(\"[data-cbslot]\").forEach(function(b){b.classList.remove(\"sel\");}); } else { state.answers.cb_hour=null; } pBtn.classList.toggle(\"sel\",on); cbRefreshHours(); cbSyncPrecise(); cbUpdate(); };\n        var anyBtn=slotsEl.querySelector(\"[data-cbany]\");\n        if(anyBtn) anyBtn.onclick=function(){ var on=!state.answers.cb_any; state.answers.cb_any=on; if(on){ state.answers.cb_slot=null; state.answers.cb_precise=false; state.answers.cb_hour=null; slotsEl.querySelectorAll(\"[data-cbslot]\").forEach(function(b){b.classList.remove(\"sel\");}); var pp=slotsEl.querySelector(\"[data-cbprecise]\"); if(pp) pp.classList.remove(\"sel\"); } anyBtn.classList.toggle(\"sel\",on); cbRefreshHours(); cbSyncPrecise(); cbUpdate(); };\n      }\n      function cbRefreshSlots(){ if(state.answers.cb_slot!=null){ var ok=cbCurrentSlots().some(function(s){return s.h===state.answers.cb_slot;}); if(!ok) state.answers.cb_slot=null; } slotsEl.innerHTML=cbSlotsHTML(); cbWireSlots(); cbRefreshHours(); cbSyncPrecise(); cbSyncEmpty(); refreshIcons(); }\n      function cbSetZone(tz, label){ state.answers.cb_tz=tz; state.answers.cb_zone=label||cbShortFromTz(tz); cbHint(); cbRefreshSlots(); cbUpdate(); }\n      \/\/ US zone pills\n      wrap.querySelectorAll(\"[data-cbzone]\").forEach(function(btn){ btn.onclick=function(){ wrap.querySelectorAll(\"[data-cbzone]\").forEach(function(b){ b.classList.remove(\"sel\"); }); btn.classList.add(\"sel\"); var ob=wrap.querySelector(\"[data-cbother]\"); if(ob) ob.classList.remove(\"sel\"); if(selEl){ selEl.classList.remove(\"show\"); selEl.value=\"\"; } cbSetZone(btn.getAttribute(\"data-cbtz\"), btn.getAttribute(\"data-cbzone\")); }; });\n      \/\/ \"Other country\" pill -> reveal world-zone select\n      var otherBtn=wrap.querySelector(\"[data-cbother]\");\n      if(otherBtn) otherBtn.onclick=function(){ wrap.querySelectorAll(\"[data-cbzone]\").forEach(function(b){ b.classList.remove(\"sel\"); }); otherBtn.classList.add(\"sel\"); if(selEl){ selEl.classList.add(\"show\"); try{ selEl.focus(); }catch(e){} } };\n      if(selEl) selEl.addEventListener(\"change\", function(){ var tz=selEl.value; if(!tz) return; var opt=selEl.options[selEl.selectedIndex]; var s=opt?opt.getAttribute(\"data-s\"):null; wrap.querySelectorAll(\"[data-cbzone]\").forEach(function(b){ b.classList.remove(\"sel\"); }); if(otherBtn) otherBtn.classList.add(\"sel\"); cbSetZone(tz, s); });\n      \/\/ Day pills (Saturday exclusive)\n      wrap.querySelectorAll(\"[data-cbday]\").forEach(function(btn){ btn.onclick=function(){ var label=btn.getAttribute(\"data-cbday\"); state.answers.cb_days_indif=false; var di=wrap.querySelector(\"[data-cbday-indif]\"); if(di) di.classList.remove(\"sel\"); var arr=state.answers.cb_days||[]; var wasSel=arr.indexOf(label)>-1; if(label===\"Sat\"){ arr=wasSel?[]:[\"Sat\"]; } else { arr=arr.filter(function(x){return x!==\"Sat\";}); var k=arr.indexOf(label); if(k>-1) arr.splice(k,1); else arr.push(label); } state.answers.cb_days=arr; wrap.querySelectorAll(\"[data-cbday]\").forEach(function(b){ b.classList.toggle(\"sel\", arr.indexOf(b.getAttribute(\"data-cbday\"))>-1); }); btn.classList.add(\"pulse\"); setTimeout(function(){btn.classList.remove(\"pulse\");},350); cbRefreshSlots(); cbUpdate(); }; });\n      var dind=wrap.querySelector(\"[data-cbday-indif]\");\n      if(dind) dind.onclick=function(){ var on=!dind.classList.contains(\"sel\"); state.answers.cb_days_indif=on; state.answers.cb_days=[]; wrap.querySelectorAll(\"[data-cbday]\").forEach(function(b){b.classList.remove(\"sel\");}); dind.classList.toggle(\"sel\",on); cbRefreshSlots(); cbUpdate(); };\n      cbWireSlots(); cbWireHours(); cbSyncPrecise(); cbSyncEmpty();\n      if(pRdvBtn) pRdvBtn.onclick=function(){ cbSetRdv(true); };\n      if(rdvBtn) rdvBtn.onclick=function(){ cbSetRdv(!state.answers.cb_rdv); };\n    }\n    if(step.type===\"teach\"){\n      var quiz=wrap.querySelector(\".ole-quiz\");\n      if(quiz){\n        var opts=[].slice.call(quiz.querySelectorAll(\".ole-quiz-opt\")); var reveal=quiz.querySelector(\"#ole-quiz-reveal\");\n        opts.forEach(function(b){ b.onclick=function(){ if(quiz.classList.contains(\"answered\")) return; quiz.classList.add(\"answered\"); var correct=b.getAttribute(\"data-correct\")===\"1\"; opts.forEach(function(x){ var isC=x.getAttribute(\"data-correct\")===\"1\"; if(isC){ x.classList.add(\"correct\"); } if(x===b && !correct){ x.classList.add(\"wrong\"); } x.classList.add(\"locked\"); }); if(reveal) reveal.classList.add(\"show\"); state.reaction=correct?{emoji:\"\\uD83D\\uDC4F\",msg:pickVaried(QUIZ_OK,\"_qok\")}:{emoji:\"\\uD83D\\uDE2C\",msg:pickVaried(QUIZ_KO,\"_qko\")}; renderBadge(true); refreshIcons(); }; });\n      }\n    }\n  }\n\n  function lockAdvance(){ if(state.locked) return; state.locked=true; setTimeout(function(){ state.locked=false; nextStep(); }, 340); }\n\n  \/* =========================================================\n     8) VALIDATION\n     ========================================================= *\/\n  function validate(step){\n    if(step.type===\"contact\") return validateContact();\n    if(!step.required) return true;\n    var v=state.answers[step.id];\n    if(step.type===\"multi\") return Array.isArray(v)&&v.length>0;\n    if(step.type===\"budget\"){ if(!v||v<=0){ setErr(\"budget\",\"Bitte geben Sie Ihr Budget ein, um fortzufahren.\"); return false; } if(step.min&&v<step.min){ setErr(\"budget\",\"Wir betreuen Projekte ab \"+fmt(step.min)+\" auf.\"); return false; } setErr(\"budget\",\"\"); return true; }\n    return !!v;\n  }\n  function validateContact(){\n    var ok=true;\n    [[\"firstname\",\"Bitte geben Sie Ihren Vornamen ein\"],[\"lastname\",\"Bitte geben Sie Ihren Nachnamen ein\"]].forEach(function(f){ var el=document.getElementById(\"ole-\"+f[0]); var v=el.value.trim(); state.answers[f[0]]=v; setErr(f[0], v?\"\":f[1]); if(!v) ok=false; });\n    var ev=document.getElementById(\"ole-email\").value.trim(); state.answers.email=ev;\n    var emOk=\/^[^\\s@]+@[^\\s@]+\\.[^\\s@]{2,}$\/.test(ev); setErr(\"email\", emOk?\"\":\"Bitte geben Sie eine g\u00fcltige E-Mail-Adresse ein\"); if(!emOk) ok=false;\n    var phoneEl=document.getElementById(\"ole-phone\");\n    if(itiPhone && window.intlTelInputUtils){ var phValid=itiPhone.isValidNumber(); state.answers.phone=phValid?itiPhone.getNumber():phoneEl.value.trim(); setErr(\"phone\", phValid?\"\":\"Ung\u00fcltige Nummer f\u00fcr das ausgew\u00e4hlte Land\"); if(!phValid) ok=false; }\n    else { var pv=phoneEl.value.trim(); state.answers.phone=pv; var phOk=\/^[+0-9][0-9 ().-]{7,}$\/.test(pv); setErr(\"phone\", phOk?\"\":\"Bitte geben Sie eine g\u00fcltige Telefonnummer ein\"); if(!phOk) ok=false; }\n    return ok;\n  }\n  function setErr(id,msg){ var inp=document.getElementById(\"ole-\"+id), err=document.getElementById(\"err-\"+id); if(!inp) return; inp.classList.toggle(\"err\",!!msg); if(err){ err.textContent=msg||\"\"; err.classList.toggle(\"show\",!!msg); } }\n\n  \/* =========================================================\n     9) NAVIGATION\n     ========================================================= *\/\n  function computeNext(){\n    var cur=STEPS[state.i];\n    if(cur.id===\"service\") return stepIndexById(isRisksPath() ? RISK_IDS[0] : \"callback\");\n    var ei=RISK_IDS.indexOf(cur.id);\n    if(ei>-1) return ei<RISK_IDS.length-1 ? stepIndexById(RISK_IDS[ei+1]) : stepIndexById(\"callback\");\n    var n=state.i+1; while(STEPS[n] && isEdu(STEPS[n].id)) n++; return n;\n  }\n  function skipToContact(){ if(state.busy) return; state.history.push(state.i); transitionTo(stepIndexById(\"callback\"),1); }\n  function nextStep(){ if(state.busy) return; var t=computeNext(); if(t>=STEPS.length) return; state.history.push(state.i); transitionTo(t,1); }\n  function prev(){ if(state.busy || !state.history.length) return; transitionTo(state.history.pop(),-1); }\n  function transitionTo(target,dir){ state.busy=true; lockNow(); scrollFormToTop(); var cur=bodyEl.querySelector(\".ole-step\"); cur.classList.remove(\"in-right\",\"in-left\"); cur.classList.add(dir>0?\"out-left\":\"out-right\"); setTimeout(function(){ state.i=target; render(dir>0?\"in-right\":\"in-left\"); }, 300); }\n  function scrollFormToTop(){ if(!SCROLL_TOTOP) return; try{ var reduce=window.matchMedia&&window.matchMedia(\"(prefers-reduced-motion:reduce)\").matches; window.scrollTo({ top:0, left:0, behavior:reduce?\"auto\":\"smooth\" }); }catch(e){ try{ window.scrollTo(0,0); }catch(_e){} } }\n\n  \/* =========================================================\n     10) HUBSPOT SUBMIT\n     ========================================================= *\/\n  function buildFields(){\n    var a=state.answers,f=HS.fields,out=[];\n    function push(name,val){ if(name&&val!=null&&val!==\"\") out.push({name:name,value:String(val)}); }\n    push(f.timing,a.timing);\n    push(f.worries, Array.isArray(a.worries)?a.worries.join(\";\"):a.worries);\n    push(f.budget,a.budget); push(f.location,a.location);\n    push(f.property,a.property); push(f.motivation,a.motivation); push(f.service,a.service);\n    push(f.cb_rdv, cbWantsRdv() ? \"Yes\" : \"\");\n    push(f.cb_clienttime, cbClientTimeStr());\n    if(!cbWantsRdv()){\n      var z=cbZoneShort();\n      var cbDays = a.cb_days_indif ? \"Any day\" : (Array.isArray(a.cb_days) && a.cb_days.length ? a.cb_days.join(\";\") : \"\");\n      push(f.cb_days, cbDays);\n      var cbd=cbNearestDateObj();\n      if(a.cb_any){\n        push(f.cb_slot, \"Jederzeit (\"+z+\")\");\n        var cbMsA = cbd ? cbSlotStartMs(cbd, cbAllowedHours()[0]!=null?cbAllowedHours()[0]:9) : null;\n        push(f.cb_date, cbMsA!=null ? String(cbMsA) : \"\");\n      } else if(a.cb_precise && a.cb_hour!=null){\n        push(f.cb_slot, fmt12(a.cb_hour)+\" \"+z+\" (exact time requested)\");\n        var cbMsP = cbd ? cbSlotStartMs(cbd, a.cb_hour) : null;\n        push(f.cb_date, cbMsP!=null ? String(cbMsP) : \"\");\n      } else if(a.cb_slot!=null){\n        push(f.cb_slot, cbSlotLabel(a.cb_slot)+\" \"+z);\n        var cbMs = cbd ? cbSlotStartMs(cbd, a.cb_slot) : null;\n        push(f.cb_date, cbMs!=null ? String(cbMs) : \"\");\n      }\n    }\n    push(f.firstname,a.firstname); push(f.lastname,a.lastname); push(f.email, a.email?String(a.email).trim().toLowerCase():a.email); push(f.phone,a.phone);\n    return out;\n  }\n  function submit(){\n    var step=STEPS[state.i];\n    if(!validateContact()) return;\n    var hp=document.getElementById(\"ole-hp\"); if(hp && hp.value){ finish(); return; }\n    if(Date.now()-startTime < 3000){ finish(); return; }\n    var btn=document.getElementById(\"ole-next\"), spin=document.getElementById(\"ole-spin\"), label=document.getElementById(\"ole-next-label\");\n    btn.disabled=true; if(spin) spin.style.display=\"inline-block\"; if(label) label.textContent=\"Sending\u2026\";\n    if(!HS.sendToHubSpot){ console.log(\"[SpainEasy] Payload ready:\", buildFields()); setTimeout(finish,800); return; }\n    var ctx={ pageUri:location.href, pageName:document.title };\n    var hutk=getCookie(\"hubspotutk\"); if(hutk) ctx.hutk=hutk;\n    var payload={ fields:buildFields(), context:ctx };\n    if(HS.subscriptionTypeId){ payload.legalConsentOptions={ legitimateInterest:{ value:true, subscriptionTypeId:HS.subscriptionTypeId, legalBasis:\"LEAD\", text:step.consent } }; }\n    fetch(\"https:\/\/api.hsforms.com\/submissions\/v3\/integration\/submit\/\"+HS.portalId+\"\/\"+HS.formGuid, { method:\"POST\", headers:{\"Content-Type\":\"application\/json\"}, body:JSON.stringify(payload) })\n      .then(function(r){ if(!r.ok) return r.json().then(function(e){throw e;}); return r.json(); })\n      .then(function(){ finish(); })\n      .catch(function(err){ console.error(\"[SpainEasy] HubSpot error:\", err); btn.disabled=false; if(spin) spin.style.display=\"none\"; if(label) label.textContent=\"Erneut versuchen\"; });\n  }\n  \/* GTM \/ Google Ads conversion \u2014 SpainEasy fires a DISTINCT event so US leads are NEVER\n     mixed with the French \"ole_lead_submit\". Rebuild the same Ads\/Meta\/TikTok\/GA4 tags in\n     the SpainEasy GTM container, triggered on Custom Event = \"spaineasy_lead_submit\". *\/\n  function pushEnhancedConversionEvent(cb){\n    window.dataLayer = window.dataLayer || [];\n    var a=state.answers;\n    var email=(a.email||\"\").trim().toLowerCase();\n    var phone=(a.phone||\"\").replace(\/\\s+\/g,\"\");\n    var first=(a.firstname||\"\").trim();\n    var last=(a.lastname||\"\").trim();\n    window.dataLayer.push({\n      event:\"spaineasy_lead_submit\",\n      brand:\"SpainEasy\",\n      lead_email:email, lead_phone:phone, first_name:first, last_name:last,\n      enhanced_conversion_data:{ email:email, phone_number:phone, first_name:first, last_name:last },\n      lead_form_name:\"spaineasy_property_search\",\n      lead_location:a.location||\"\", lead_budget:a.budget||\"\", lead_currency:\"USD\",\n      eventCallback:function(){ if(cb) cb(); }, eventTimeout:1500\n    });\n  }\n  function buildRedirectUrl(){\n    var a=state.answers;\n    if(cbWantsRdv()){\n      var ru=RDV_URL, rq=[];\n      if(a.firstname){ rq.push(\"firstname=\"+encodeURIComponent(a.firstname)); rq.push(\"firstName=\"+encodeURIComponent(a.firstname)); }\n      if(a.lastname){ rq.push(\"lastname=\"+encodeURIComponent(a.lastname)); rq.push(\"lastName=\"+encodeURIComponent(a.lastname)); }\n      if(a.email){ rq.push(\"email=\"+encodeURIComponent(String(a.email).trim().toLowerCase())); }\n      if(a.phone){ rq.push(\"phone=\"+encodeURIComponent(a.phone)); }\n      if(rq.length) ru += (ru.indexOf(\"?\")>-1?\"&\":\"?\")+rq.join(\"&\");\n      return ru;\n    }\n    var u=HS.redirectUrl, q=[];\n    if(a.firstname) q.push(\"firstname=\"+encodeURIComponent(a.firstname));\n    if(a.location)  q.push(\"location=\"+encodeURIComponent(a.location));\n    if(q.length) u += (u.indexOf(\"?\")>-1?\"&\":\"?\")+q.join(\"&\");\n    return u;\n  }\n  function finish(){\n    var done=false;\n    var redirect=(cbWantsRdv() || HS.redirectUrl) ? buildRedirectUrl() : null;\n    function go(){\n      if(done) return; done=true; clearState();\n      if(redirect){ window.location.href=redirect; return; }\n      barEl.style.width=\"100%\"; footEl.innerHTML=\"\";\n      bodyEl.innerHTML='<div class=\"ole-success\"><div class=\"ole-check\"><svg viewBox=\"0 0 40 40\"><path d=\"M11 21 L17 27 L29 13\"\/><\/svg><\/div><h3>Alles erledigt \u2014 vielen Dank!<\/h3><p>Unser Team pr\u00fcft Ihr Projekt und meldet sich in K\u00fcrze bei Ihnen.<\/p><\/div>';\n    }\n    pushEnhancedConversionEvent(go);\n    setTimeout(go, 1800);\n  }\n\n  \/* =========================================================\n     11) GOOGLE PLACES (optional)\n     ========================================================= *\/\n  function loadGoogleMaps(key, cb){\n    if(window.google && google.maps && google.maps.places){ cb&&cb(); return; }\n    if(document.getElementById(\"ole-gmaps\")){ pollMaps(cb); return; }\n    var s=document.createElement(\"script\"); s.id=\"ole-gmaps\"; s.async=true;\n    s.src=\"https:\/\/maps.googleapis.com\/maps\/api\/js?key=\"+encodeURIComponent(key)+\"&libraries=places&loading=async\";\n    s.onload=function(){ pollMaps(cb); }; s.onerror=function(){ console.warn(\"[SpainEasy] Google Maps failed.\"); };\n    document.head.appendChild(s);\n  }\n  function pollMaps(cb){ var n=0,iv=setInterval(function(){ if(window.google&&google.maps&&google.maps.places){clearInterval(iv);cb&&cb();} else if(++n>40){clearInterval(iv);} },150); }\n  function initLocationAutocomplete(input, pills, step){\n    if(!input || input.dataset.acDone) return; input.dataset.acDone=\"1\";\n    try{\n      var ac=new google.maps.places.Autocomplete(input,{ componentRestrictions:{country:\"es\"}, types:[\"(cities)\"], fields:[\"address_components\",\"name\"] });\n      ac.addListener(\"place_changed\", function(){ var place=ac.getPlace(); if(!place||!place.address_components){ state.answers.location=input.value; return; } var city=place.name, region=\"\"; place.address_components.forEach(function(c){ if(c.types.indexOf(\"administrative_area_level_1\")>-1) region=c.long_name; }); var val=region?(city+\" (\"+region+\")\"):city; setTimeout(function(){ input.value=val; state.answers.location=val; },10); if(pills) pills.forEach(function(p){ p.classList.remove(\"sel\",\"hidden\"); }); setReaction(step, val); lockAdvance(); });\n    }catch(e){ console.warn(\"[SpainEasy] Google Places not initialized:\", e); }\n  }\n\n  \/* =========================================================\n     12) LUCIDE ICONS\n     ========================================================= *\/\n  function loadLucide(){ if(window.lucide){ refreshIcons(); return; } if(document.getElementById(\"ole-lucide\")) return; var s=document.createElement(\"script\"); s.id=\"ole-lucide\"; s.async=true; s.src=\"https:\/\/unpkg.com\/lucide@latest\/dist\/umd\/lucide.min.js\"; s.onload=refreshIcons; s.onerror=function(){ console.warn(\"[SpainEasy] Lucide failed.\"); }; document.head.appendChild(s); }\n\n  \/* =========================================================\n     12b) INTERNATIONAL PHONE (US default)\n     ========================================================= *\/\n  var itiPhone=null, lastPhoneIso=null, phoneBlurred=false;\n  function maybeBlurPhone(input){ try{ if(itiPhone && itiPhone.isValidNumber && itiPhone.isValidNumber()){ if(!phoneBlurred){ phoneBlurred=true; setTimeout(function(){ try{ input.blur(); }catch(e){} try{ var btn=document.getElementById(\"ole-next\"); if(btn){ var r=btn.getBoundingClientRect(); var vh=window.innerHeight||document.documentElement.clientHeight; var delta=r.bottom-vh+26; if(delta>4){ var reduce=window.matchMedia&&window.matchMedia(\"(prefers-reduced-motion:reduce)\").matches; window.scrollBy({top:delta,left:0,behavior:reduce?\"auto\":\"smooth\"}); } } }catch(e){} }, 160); } } else { phoneBlurred=false; } }catch(e){} }\n  var COUNTRY_MSG = {\n    us:{emoji:\"\\uD83C\\uDDFA\\uD83C\\uDDF8\",msg:\"Die meisten unserer Kunden kommen aus den USA \u2013 wir begleiten Sie auf Englisch, bei jedem Schritt.\"},\n    ca:{emoji:\"\\uD83C\\uDDE8\\uD83C\\uDDE6\",msg:\"Kaufen Sie aus Kanada? Wir sind Ihre Augen und Ohren vor Ort in Spanien.\"},\n    gb:{emoji:\"\\uD83C\\uDDEC\\uD83C\\uDDE7\",msg:\"Viele K\u00e4ufer aus dem Vereinigten K\u00f6nigreich vertrauen uns f\u00fcr einen reibungslosen, englischsprachigen Kauf in Spanien.\"},\n    es:{emoji:\"\\uD83C\\uDDEA\\uD83C\\uDDF8\",msg:\"Schon in Spanien? Wir erleichtern Ihnen jeden Schritt, auf Englisch, direkt an Ihrer Seite.\"}\n  };\n  function showPhoneReaction(){ if(!itiPhone||!itiPhone.getSelectedCountryData) return; var input=document.getElementById(\"ole-phone\"); var el=document.getElementById(\"ole-phone-msg\"); var hasDigits=input&&input.value.replace(\/\\D\/g,\"\").length>0; if(!hasDigits){ if(el){ el.className=\"ole-phone-msg\"; el.innerHTML=\"\"; } lastPhoneIso=null; return; } var iso=(itiPhone.getSelectedCountryData()||{}).iso2; if(iso===lastPhoneIso) return; lastPhoneIso=iso; renderPhoneMsg(COUNTRY_MSG[iso]||null); }\n  function renderPhoneMsg(r){ var el=document.getElementById(\"ole-phone-msg\"); if(!el) return; if(!r){ el.className=\"ole-phone-msg\"; el.innerHTML=\"\"; return; } el.innerHTML='<span class=\"ole-q-mark\">'+String.fromCharCode(8220)+'<\/span><span class=\"ole-phone-cap\">'+esc(r.msg)+'<\/span>'+(r.emoji?'<span class=\"ole-emoji\">'+r.emoji+'<\/span>':''); el.className=\"ole-phone-msg show\"; void el.offsetWidth; el.classList.add(\"bumpp\"); setTimeout(function(){ el.classList.remove(\"bumpp\"); },430); }\n  function loadIntlTel(cb){ if(window.intlTelInput){ cb&&cb(); return; } if(document.getElementById(\"ole-iti-js\")){ var n=0,iv=setInterval(function(){ if(window.intlTelInput){clearInterval(iv);cb&&cb();} else if(++n>60){clearInterval(iv);} },150); return; } var css=document.createElement(\"link\"); css.rel=\"stylesheet\"; css.href=\"https:\/\/cdn.jsdelivr.net\/npm\/intl-tel-input@18.2.1\/build\/css\/intlTelInput.css\"; document.head.appendChild(css); var s=document.createElement(\"script\"); s.id=\"ole-iti-js\"; s.async=true; s.src=\"https:\/\/cdn.jsdelivr.net\/npm\/intl-tel-input@18.2.1\/build\/js\/intlTelInput.min.js\"; s.onload=function(){ cb&&cb(); }; s.onerror=function(){ console.warn(\"[SpainEasy] intl-tel-input not loaded (simple field fallback).\"); }; document.head.appendChild(s); }\n  var PHONE_TPL_CACHE={};\n  function phoneTemplate(iso){ if(!iso) return null; if(PHONE_TPL_CACHE[iso]!==undefined) return PHONE_TPL_CACHE[iso]; var tpl=null; try{ var U=window.intlTelInputUtils; if(U){ var ex=U.getExampleNumber(iso,false,U.numberType.MOBILE); var nat=ex?U.formatNumber(ex,iso,U.numberFormat.NATIONAL):\"\"; if(nat&&\/\\d\/.test(nat)) tpl=nat.replace(\/\\d\/g,\"D\"); } }catch(e){} PHONE_TPL_CACHE[iso]=tpl; return tpl; }\n  function applyPhoneTemplate(digits, tpl){ if(!tpl) return digits; var out=\"\",di=0; for(var i=0;i<tpl.length&&di<digits.length;i++){ out += (tpl.charAt(i)===\"D\")?digits.charAt(di++):tpl.charAt(i); } if(di<digits.length) out += digits.slice(di); return out; }\n  function formatPhoneLive(el){ if(!el||!itiPhone||!itiPhone.getSelectedCountryData) return; var iso=(itiPhone.getSelectedCountryData()||{}).iso2; var tpl=phoneTemplate(iso); if(!tpl) return; var raw=el.value, caret=(el.selectionStart==null)?raw.length:el.selectionStart; var before=raw.slice(0,caret).replace(\/\\D\/g,\"\").length; var digits=raw.replace(\/\\D\/g,\"\"); var exact=null; try{ if(itiPhone.isValidNumber&&itiPhone.isValidNumber()){ exact=window.intlTelInputUtils.formatNumber(itiPhone.getNumber(),iso,window.intlTelInputUtils.numberFormat.NATIONAL); } }catch(e){} var f=exact||applyPhoneTemplate(digits,tpl); if(f===raw) return; el.value=f; var pos=0,seen=0; while(pos<f.length&&seen<before){ var c=f.charCodeAt(pos); if(c>=48&&c<=57) seen++; pos++; } try{ el.setSelectionRange(pos,pos); }catch(e){} }\n  \/\/ Adapt the phone country to the visitor: browser locale -> timezone -> IP (with fallback).\n  var TZ_COUNTRY = { \"America\/New_York\":\"us\",\"America\/Detroit\":\"us\",\"America\/Chicago\":\"us\",\"America\/Denver\":\"us\",\"America\/Phoenix\":\"us\",\"America\/Los_Angeles\":\"us\",\"America\/Anchorage\":\"us\",\"Pacific\/Honolulu\":\"us\",\"America\/Toronto\":\"ca\",\"America\/Vancouver\":\"ca\",\"America\/Edmonton\":\"ca\",\"America\/Mexico_City\":\"mx\",\"America\/Sao_Paulo\":\"br\",\"America\/Argentina\/Buenos_Aires\":\"ar\",\"Europe\/London\":\"gb\",\"Europe\/Dublin\":\"ie\",\"Europe\/Paris\":\"fr\",\"Europe\/Madrid\":\"es\",\"Europe\/Berlin\":\"de\",\"Europe\/Lisbon\":\"pt\",\"Europe\/Athens\":\"gr\",\"Europe\/Istanbul\":\"tr\",\"Asia\/Dubai\":\"ae\",\"Asia\/Kolkata\":\"in\",\"Asia\/Singapore\":\"sg\",\"Asia\/Hong_Kong\":\"hk\",\"Asia\/Tokyo\":\"jp\",\"Australia\/Sydney\":\"au\",\"Australia\/Perth\":\"au\",\"Pacific\/Auckland\":\"nz\",\"Africa\/Johannesburg\":\"za\",\"Africa\/Casablanca\":\"ma\",\"Asia\/Jerusalem\":\"il\" };\n  function guessCountryBrowser(){\n    try{ var langs=navigator.languages||[navigator.language||\"\"]; for(var i=0;i<langs.length;i++){ var m=String(langs[i]||\"\").match(\/-([A-Za-z]{2})$\/); if(m) return m[1].toLowerCase(); } }catch(e){}\n    try{ var tz=Intl.DateTimeFormat().resolvedOptions().timeZone||\"\"; if(TZ_COUNTRY[tz]) return TZ_COUNTRY[tz]; }catch(e){}\n    return \"us\";\n  }\n  function geoLookup(cb){\n    var done=false; function fin(c){ if(done) return; done=true; cb((c||\"us\").toLowerCase()); }\n    var t=setTimeout(function(){ fin(guessCountryBrowser()); }, 1300);\n    try{ fetch(\"https:\/\/ipapi.co\/json\/\").then(function(r){ return r.json(); }).then(function(d){ clearTimeout(t); fin((d&&d.country_code?String(d.country_code):\"\")||guessCountryBrowser()); }).catch(function(){ clearTimeout(t); fin(guessCountryBrowser()); }); }\n    catch(e){ clearTimeout(t); fin(guessCountryBrowser()); }\n  }\n  function initPhone(wrap){ var input=(wrap||document).querySelector(\"#ole-phone\"); if(!input||input.dataset.itiDone) return; loadIntlTel(function(){ if(!window.intlTelInput||input.dataset.itiDone) return; input.dataset.itiDone=\"1\"; try{ itiPhone=window.intlTelInput(input,{ initialCountry:\"auto\", geoIpLookup:geoLookup, preferredCountries:[\"us\",\"ca\",\"gb\",\"es\"], separateDialCode:true, autoPlaceholder:\"aggressive\", dropdownContainer:document.body, utilsScript:\"https:\/\/cdn.jsdelivr.net\/npm\/intl-tel-input@18.2.1\/build\/js\/utils.js\" }); lastPhoneIso=null; phoneBlurred=false; input.addEventListener(\"input\",function(){ setErr(\"phone\",\"\"); formatPhoneLive(input); showPhoneReaction(); maybeBlurPhone(input); }); input.addEventListener(\"countrychange\",function(){ setErr(\"phone\",\"\"); formatPhoneLive(input); showPhoneReaction(); }); }catch(e){ console.warn(\"[SpainEasy] international phone not initialized:\", e); itiPhone=null; } }); }\n\n  \/* =========================================================\n     13) BOOT\n     ========================================================= *\/\n  loadLucide(); loadIntlTel();\n  if(HS.googleMapsKey) loadGoogleMaps(HS.googleMapsKey, function(){ gMapsReady=true; });\n  loadState();\n  function oleSlug(s){ return String(s||\"\").toLowerCase().normalize(\"NFD\").replace(\/[\\u0300-\\u036f]\/g,\"\").replace(\/[^a-z0-9]+\/g,\"-\").replace(\/^-+|-+$\/g,\"\"); }\n  var LIEU_ALIAS={ \"valence\":\"Valencia\",\"barcelone\":\"Barcelona\",\"seville\":\"Sevilla\",\"sevilla\":\"Sevilla\",\"costa-del-sol\":\"Costa del Sol\",\"costa-blanca\":\"Costa Blanca\",\"costa-brava\":\"Costa Brava\",\"andalusia\":\"Andalusien\",\"andalousie\":\"Andalusien\",\"mallorca\":\"Palma de Mallorca\",\"majorca\":\"Palma de Mallorca\" };\n  (function prefillFromUrl(){ var p; try{ p=new URLSearchParams(window.location.search); }catch(e){ return; } var lieu=p.get(\"location\")||p.get(\"lieu\"); if(!lieu) return; var slug=oleSlug(lieu), loc=STEPS[stepIndexById(\"location\")], label=null; if(LIEU_ALIAS[slug]) label=LIEU_ALIAS[slug]; if(!label && loc){ var all=(loc.cities||[]).concat(loc.regions||[]); for(var i=0;i<all.length;i++){ if(oleSlug(all[i])===slug){ label=all[i]; break; } } } if(!label){ label=slug.split(\"-\").map(function(w){ return w?w.charAt(0).toUpperCase()+w.slice(1):w; }).join(\" \"); } state.answers.location=label; })();\n  render(\"in-right\");\n})();\n<\/script><\/div><\/div><\/div><\/div>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":12,"featured_media":39976,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"100-width.php","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-39974","page","type-page","status-publish","has-post-thumbnail","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Immobiliensuche - SpainEasy<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/spaineasy.com\/de\/immobiliensuche\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Immobiliensuche - SpainEasy\" \/>\n<meta property=\"og:url\" content=\"https:\/\/spaineasy.com\/de\/immobiliensuche\/\" \/>\n<meta property=\"og:site_name\" content=\"SpainEasy\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/SpainEasyEstate\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-08T17:35:14+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/spaineasy.com\/wp-content\/uploads\/2023\/08\/Maison-en-Espagne-avec-piscine-a-linterieur.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data1\" content=\"1\u00a0Minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/spaineasy.com\\\/de\\\/immobiliensuche\\\/\",\"url\":\"https:\\\/\\\/spaineasy.com\\\/de\\\/immobiliensuche\\\/\",\"name\":\"Immobiliensuche - SpainEasy\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/spaineasy.com\\\/de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/spaineasy.com\\\/de\\\/immobiliensuche\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/spaineasy.com\\\/de\\\/immobiliensuche\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/spaineasy.com\\\/wp-content\\\/uploads\\\/2023\\\/08\\\/Maison-en-Espagne-avec-piscine-a-linterieur.jpg\",\"datePublished\":\"2022-06-16T15:14:22+00:00\",\"dateModified\":\"2026-09-08T17:35:14+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/spaineasy.com\\\/de\\\/immobiliensuche\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/spaineasy.com\\\/de\\\/immobiliensuche\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/spaineasy.com\\\/de\\\/immobiliensuche\\\/#primaryimage\",\"url\":\"https:\\\/\\\/spaineasy.com\\\/wp-content\\\/uploads\\\/2023\\\/08\\\/Maison-en-Espagne-avec-piscine-a-linterieur.jpg\",\"contentUrl\":\"https:\\\/\\\/spaineasy.com\\\/wp-content\\\/uploads\\\/2023\\\/08\\\/Maison-en-Espagne-avec-piscine-a-linterieur.jpg\",\"width\":1200,\"height\":630,\"caption\":\"Maison luxueuse en Espagne avec piscine \u00e0 l'int\u00e9rieur\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/spaineasy.com\\\/de\\\/immobiliensuche\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/spaineasy.com\\\/de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Immobiliensuche\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/spaineasy.com\\\/de\\\/#website\",\"url\":\"https:\\\/\\\/spaineasy.com\\\/de\\\/\",\"name\":\"SpainEasy\",\"description\":\"Your personal English-speaking real estate agent in Spain.\",\"publisher\":{\"@id\":\"https:\\\/\\\/spaineasy.com\\\/de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/spaineasy.com\\\/de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/spaineasy.com\\\/de\\\/#organization\",\"name\":\"SpainEasy\",\"url\":\"https:\\\/\\\/spaineasy.com\\\/de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/spaineasy.com\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/spaineasy.com\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/spaineasy192.png\",\"contentUrl\":\"https:\\\/\\\/spaineasy.com\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/spaineasy192.png\",\"width\":192,\"height\":192,\"caption\":\"SpainEasy\"},\"image\":{\"@id\":\"https:\\\/\\\/spaineasy.com\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/SpainEasyEstate\",\"https:\\\/\\\/www.youtube.com\\\/watch?v=mq5f8eHO6l8\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Immobiliensuche - SpainEasy","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/spaineasy.com\/de\/immobiliensuche\/","og_locale":"de_DE","og_type":"article","og_title":"Immobiliensuche - SpainEasy","og_url":"https:\/\/spaineasy.com\/de\/immobiliensuche\/","og_site_name":"SpainEasy","article_publisher":"https:\/\/www.facebook.com\/SpainEasyEstate","article_modified_time":"2026-09-08T17:35:14+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/spaineasy.com\/wp-content\/uploads\/2023\/08\/Maison-en-Espagne-avec-piscine-a-linterieur.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Gesch\u00e4tzte Lesezeit":"1\u00a0Minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/spaineasy.com\/de\/immobiliensuche\/","url":"https:\/\/spaineasy.com\/de\/immobiliensuche\/","name":"Immobiliensuche - SpainEasy","isPartOf":{"@id":"https:\/\/spaineasy.com\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/spaineasy.com\/de\/immobiliensuche\/#primaryimage"},"image":{"@id":"https:\/\/spaineasy.com\/de\/immobiliensuche\/#primaryimage"},"thumbnailUrl":"https:\/\/spaineasy.com\/wp-content\/uploads\/2023\/08\/Maison-en-Espagne-avec-piscine-a-linterieur.jpg","datePublished":"2022-06-16T15:14:22+00:00","dateModified":"2026-09-08T17:35:14+00:00","breadcrumb":{"@id":"https:\/\/spaineasy.com\/de\/immobiliensuche\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/spaineasy.com\/de\/immobiliensuche\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/spaineasy.com\/de\/immobiliensuche\/#primaryimage","url":"https:\/\/spaineasy.com\/wp-content\/uploads\/2023\/08\/Maison-en-Espagne-avec-piscine-a-linterieur.jpg","contentUrl":"https:\/\/spaineasy.com\/wp-content\/uploads\/2023\/08\/Maison-en-Espagne-avec-piscine-a-linterieur.jpg","width":1200,"height":630,"caption":"Maison luxueuse en Espagne avec piscine \u00e0 l'int\u00e9rieur"},{"@type":"BreadcrumbList","@id":"https:\/\/spaineasy.com\/de\/immobiliensuche\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/spaineasy.com\/de\/"},{"@type":"ListItem","position":2,"name":"Immobiliensuche"}]},{"@type":"WebSite","@id":"https:\/\/spaineasy.com\/de\/#website","url":"https:\/\/spaineasy.com\/de\/","name":"SpainEasy","description":"Your personal English-speaking real estate agent in Spain.","publisher":{"@id":"https:\/\/spaineasy.com\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/spaineasy.com\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/spaineasy.com\/de\/#organization","name":"SpainEasy","url":"https:\/\/spaineasy.com\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/spaineasy.com\/de\/#\/schema\/logo\/image\/","url":"https:\/\/spaineasy.com\/wp-content\/uploads\/2024\/03\/spaineasy192.png","contentUrl":"https:\/\/spaineasy.com\/wp-content\/uploads\/2024\/03\/spaineasy192.png","width":192,"height":192,"caption":"SpainEasy"},"image":{"@id":"https:\/\/spaineasy.com\/de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/SpainEasyEstate","https:\/\/www.youtube.com\/watch?v=mq5f8eHO6l8"]}]}},"_links":{"self":[{"href":"https:\/\/spaineasy.com\/de\/wp-json\/wp\/v2\/pages\/39974","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/spaineasy.com\/de\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/spaineasy.com\/de\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/spaineasy.com\/de\/wp-json\/wp\/v2\/users\/12"}],"replies":[{"embeddable":true,"href":"https:\/\/spaineasy.com\/de\/wp-json\/wp\/v2\/comments?post=39974"}],"version-history":[{"count":14,"href":"https:\/\/spaineasy.com\/de\/wp-json\/wp\/v2\/pages\/39974\/revisions"}],"predecessor-version":[{"id":40971,"href":"https:\/\/spaineasy.com\/de\/wp-json\/wp\/v2\/pages\/39974\/revisions\/40971"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/spaineasy.com\/de\/wp-json\/wp\/v2\/media\/39976"}],"wp:attachment":[{"href":"https:\/\/spaineasy.com\/de\/wp-json\/wp\/v2\/media?parent=39974"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}