{"id":1866,"date":"2025-10-14T20:42:26","date_gmt":"2025-10-14T20:42:26","guid":{"rendered":"https:\/\/chaker-living.com\/?page_id=1866"},"modified":"2026-03-03T21:24:35","modified_gmt":"2026-03-03T19:24:35","slug":"booking-results-new","status":"publish","type":"page","link":"https:\/\/chaker-apartments.com\/pl\/booking-results-new\/","title":{"rendered":"Booking Anfragen"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"1866\" class=\"elementor elementor-1866\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e2b2434 e-flex e-con-boxed e-con e-parent\" data-id=\"e2b2434\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8aca62f elementor-widget elementor-widget-heading\" data-id=\"8aca62f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Ihre Anfrage<\/h2>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-c6c4c91 e-flex e-con-boxed e-con e-parent\" data-id=\"c6c4c91\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0d1e5f3 elementor-widget elementor-widget-shortcode\" data-id=\"0d1e5f3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\t<!-- Font -->\n\t<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Open+Sans:wght@400;600;700&display=swap\" rel=\"stylesheet\">\n\n\t<div class=\"booking-table-wrapper\">\n\t  <div class=\"booking-table-container\">\n\n\t\t<!-- Ergebnisse \/ Wohnungen -->\n\t\t<div class=\"bfbt-results-only\">\n\t\t  <div id=\"bfbtResultsItems\"><\/div>\n\t\t<\/div>\n\n\t\t<!-- Anfrage-Modal (Formular im Modal) -->\n\t<div id=\"bfbtInquiryModal\" class=\"bfbt-modal\" hidden>\n\t  <div class=\"bfbt-modal__backdrop\" data-bfbt-close=\"1\"><\/div>\n\t  <div class=\"bfbt-modal__dialog bfbt-modal__dialog--wide\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"bfbtInquiryTitle\">\n\t\t<div class=\"bfbt-modal__header\">\n\t\t  <h3 id=\"bfbtInquiryTitle\">Buchungs&shy;anfrage<\/h3>\n\t\t  <div id=\"bfbtInquirySubtitle\" class=\"bfbt-modal__sub\"><\/div>\n\t\t  <div id=\"bfbtInquiryAptInfo\" class=\"bfbt-modal__aptinfo\" aria-live=\"polite\"><\/div>\n\t\t<\/div>\n\n\t\t<div class=\"bfbt-modal__body\">\n\t\t  <div class=\"bfbt-contactbar\">\n            <a class=\"bfbt-contactbtn bfbt-contactbtn--tel\" href=\"tel:+4915565411826\" aria-label=\"Telefon +49 155 65411826\">\n              <i class=\"fa-solid fa-phone\"><\/i><span>+49 155 65411826<\/span>\n            <\/a>\n            <a class=\"bfbt-contactbtn bfbt-contactbtn--wa\" id=\"bfbtWhatsappBtn\" href=\"#\" target=\"_blank\" rel=\"noopener\" aria-label=\"Anfrage \u00fcber Whatsapp\">\n              <i class=\"fa-brands fa-whatsapp\"><\/i><span>Anfrage \u00fcber Whatsapp<\/span>\n            <\/a>\n          <\/div>\n\n          <div class=\"form-wrapper\">\n\t\t\t\t<div class=\"form-container\">\n\t\t\t\t  <form id=\"bfbt_form\" class=\"form\">\n\n                    <div class=\"form-row double\">\n                      <div class=\"form-input-container\">\n                        <label for=\"first_name\">Vorname <span class=\"required\">*<\/span><\/label>\n                        <input type=\"text\" id=\"first_name\" required \/>\n                      <\/div>\n                      <div class=\"form-input-container\">\n                        <label for=\"last_name\">Nachname <span class=\"required\">*<\/span><\/label>\n                        <input type=\"text\" id=\"last_name\" required \/>\n                      <\/div>\n                    <\/div>\n\n                    <div class=\"form-row double\">\n                      <div class=\"form-input-container\">\n                        <label for=\"email\">E-Mail <span class=\"required\">*<\/span><\/label>\n                        <input type=\"email\" id=\"email\" required \/>\n                      <\/div>\n                      <div class=\"form-input-container\">\n                        <label for=\"contact_number\">Telefonnummer <span class=\"required\">*<\/span><\/label>\n                        <input type=\"text\" id=\"contact_number\" required \/>\n                      <\/div>\n                    <\/div>\n\n                    <div class=\"form-row single\">\n                      <label for=\"message\">Ihre Nachricht <span class=\"required\">*<\/span><\/label>\n                      <textarea id=\"message\" required placeholder=\"Zum Beispiel: Wie viele Personen reisen an? Geplantes Budget? Zeitraum\/Wunschdaten? Zus\u00e4tzliche Infos oder besondere Anforderungen etc.\"><\/textarea>\n                    \n                    <div class=\"form-row single bfbt-privacy-row\">\n                      <label class=\"bfbt-privacy-label\" for=\"privacy_consent\" style=\"display:flex; align-items:center; gap:10px; justify-content:flex-start; text-align:left;\">\n                        <input type=\"checkbox\" id=\"privacy_consent\" required \/>\n                        <span>Ich stimme den <a href=\"https:\/\/chaker-apartments.com\/pl\/datenschutz\" target=\"_blank\" rel=\"noopener\">Datenschutzbestimmungen<\/a> zu. <span class=\"required\">*<\/span><\/span>\n                      <\/label>\n                    <\/div>\n<\/div>\n\n                    <div class=\"form-row buttons\" style=\"display:flex; justify-content:center; margin-top:18px;\">\n  <button type=\"button\" class=\"coman-btn next_btn\" id=\"bfbtModalSubmitBtn\">Anfrage abschicken<\/button>\n<\/div>\n<\/form>\n\t\t\t\t<\/div>\n\t\t\t  <\/div>\n\t\t<\/div>\n<\/div>\n\t<\/div>\n\n\n\t<!-- Bild-Lichtbox (Wohnungsbilder vergr\u00f6\u00dfern) -->\n\t<div id=\"bfbtImageLightbox\" class=\"bfbt-imglightbox\" hidden>\n\t  <div class=\"bfbt-imglightbox__backdrop\" data-bfbt-img-close=\"1\"><\/div>\n\t  <div class=\"bfbt-imglightbox__dialog\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Bild vergr\u00f6\u00dfert\">\n\t\t<button type=\"button\" class=\"bfbt-imglightbox__close\" data-bfbt-img-close=\"1\" aria-label=\"Schlie\u00dfen\">\u00d7<\/button>\n\t\t\t\t<button type=\"button\" class=\"bfbt-imglightbox__nav bfbt-imglightbox__prev\" data-bfbt-img-nav=\"-1\" aria-label=\"Vorheriges Bild\">\u2039<\/button>\n\t\t<button type=\"button\" class=\"bfbt-imglightbox__nav bfbt-imglightbox__next\" data-bfbt-img-nav=\"1\" aria-label=\"N\u00e4chstes Bild\">\u203a<\/button>\n\t\t<div class=\"bfbt-imglightbox__count\" id=\"bfbtImageLightboxCount\" aria-hidden=\"true\"><\/div>\n<img decoding=\"async\" id=\"bfbtImageLightboxImg\" src=\"\" alt=\"\" \/>\n\t  <\/div>\n\t<\/div>\n\n\n\t<!-- Danke-Modal -->\n\t<div id=\"bfbtModal\" class=\"bfbt-modal\" hidden>\n\t  <div class=\"bfbt-modal__backdrop\"><\/div>\n\t  <div class=\"bfbt-modal__dialog\">\n\t\t<div class=\"bfbt-modal__header\">\n\t\t  <h3>Vielen Dank f\u00fcr Ihre Anfrage!<\/h3>\n\t\t<\/div>\n\t\t<div class=\"bfbt-modal__body\">\n\t\t  <p>Wir haben Ihre Angaben erhalten und melden uns innerhalb von 10 Minuten bei Ihnen.<\/p>\n\t\t  <p>Sie werden in 10 Sekunden automatisch zur Startseite weitergeleitet.<\/p>\n\t\t<\/div>\n\t\t<div class=\"bfbt-modal__footer\">\n\t\t  <button id=\"bfbtCloseModal\" class=\"coman-btn next_btn\">Schlie\u00dfen<\/button>\n\t\t<\/div>\n\t  <\/div>\n\t<\/div>\n\t\n<link rel=\"stylesheet\" href=\"https:\/\/cdn.jsdelivr.net\/npm\/flatpickr@4.6.13\/dist\/flatpickr.min.css\" \/>\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/flatpickr@4.6.13\/dist\/flatpickr.min.js\"><\/script>\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/flatpickr@4.6.13\/dist\/l10n\/de.js\"><\/script>\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/flatpickr@4.6.13\/dist\/l10n\/en.js\"><\/script>\n\n\n\t<style>\n\t\/* ============= GLOBAL FONT \/ TYPOGRAPHY ============= *\/\n\n\/* ====== STEP 1 entfernen: Results startet direkt mit Step 2 ====== *\/\n.step-content[data-step=\"1\"]{ display:none !important; }\n.step-frm .step-box.step-box-1{ display:none !important; }\n#bfbtBackTo1{ display:none !important; }\n\n\/* ====== Wohnungen Cards (wie Screenshot) ====== *\/\n.bfbt-flat-card{\n  display:grid;\n  grid-template-columns: 360px 1fr 260px;\n  gap:18px;\n  align-items:stretch;\n  padding:14px;\n  border:1px solid rgba(15,23,42,.15);\n  border-radius:10px;\n  box-shadow:0 2px 10px rgba(0,0,0,.08);\n  background:#fff;\n  margin:0 0 18px 0;\n  cursor:pointer;\n}\n.bfbt-flat-card input[type=\"radio\"]{ display:none; }\n.bfbt-flat-card.is-selected{\n  outline:2px solid rgba(30,115,190,.35);\n  box-shadow:0 6px 18px rgba(30,115,190,.18);\n}\n.bfbt-flat-media{ overflow:hidden; border-radius:8px; }\n.bfbt-flat-slider{ position:relative; width:100%; height:220px; background:#f2f4f7; border-radius:8px; overflow:hidden; }\n.bfbt-flat-slider__track{ display:flex; width:100%; height:100%; transition: transform .25s ease; }\n.bfbt-flat-slider__track img{ width:100%; height:100%; object-fit:cover; flex:0 0 100%; }\n.bfbt-flat-body{ padding-top:4px; }\n.bfbt-flat-title{ font-size:22px; font-weight:700; margin-bottom:8px; color:#0F172A; text-align:left; }\n.bfbt-flat-badges{ display:flex; gap:8px; flex-wrap:wrap; margin-bottom:12px; }\n.bfbt-badge{\n  font-size:14px;\n  padding:6px 10px;\n  border-radius:999px;\n  background:rgba(15,23,42,.06);\n  color:#0F172A;\n}\n\/* Amenities-Icons: bewusst klein, aber gut erkennbar *\/\n.bfbt-flat-amenities{ display:flex; gap:10px; align-items:center; flex-wrap:nowrap; color:#0F172A; font-size:14px; margin-top:8px; }\n.bfbt-flat-amenities .bfbt-amenity-more{ opacity:.8; }\n.bfbt-flat-amenities .bfbt-amenity{\n  display:inline-flex;\n  align-items:center;\n  justify-content:center;\n  padding:6px;\n  background:#F1F5F9;\n  border:1px solid #E6EAF0;\n  border-radius:10px;\n  color:#0F172A;\n}\n.bfbt-flat-amenities .bfbt-amenity-img{ width:20px; height:20px; flex:0 0 20px; display:block; object-fit:contain; }\n\n@media (max-width: 380px){\n  .bfbt-flat-amenities{ gap:8px; }\n  .bfbt-flat-amenities .bfbt-amenity-img{ width:18px; height:18px; flex:0 0 18px; }\n}\n.bfbt-flat-price{\n  display:flex;\n  flex-direction:column;\n  justify-content:flex-end;\n  align-items:flex-end;\n  padding:8px 6px;\n  text-align:right;\n}\n.bfbt-available{\n  background:#2e9b4a;\n  color:#fff;\n  font-weight:700;\n  padding:6px 12px;\n  border-radius:999px;\n  margin-bottom:10px;\n  font-size:14px;\n  align-self:flex-end;\n}\n.bfbt-price{ font-size:34px; font-weight:800; line-height:1; color:#0F172A; }\n.bfbt-price-sub{ margin-top:6px; color:rgba(15,23,42,.65); font-size:14px; }\n\n\/* Slider Pfeile: nur blau, kein Background *\/\n.bfbt-flat-slider__btn{\n  position:absolute;\n  top:50%;\n  transform:translateY(-50%);\n  background:transparent !important;\n  background-color:transparent !important;\n  border:0 !important;\n  padding:0 !important;\n  margin:0 !important;\n  width:auto !important;\n  height:auto !important;\n  border-radius:0 !important;\n  box-shadow:none !important;\n  color:#1e73be !important;\n  font-size:28px;\n  line-height:1;\n  cursor:pointer;\n  text-shadow: 0 2px 6px rgba(0,0,0,0.18);\n  user-select:none;\n}\n.bfbt-flat-slider__btn:hover{ transform:translateY(-50%) scale(1.1); }\n.bfbt-flat-slider__btn--prev{ left:10px; }\n.bfbt-flat-slider__btn--next{ right:10px; }\n\n@media (max-width: 980px){\n  .bfbt-flat-card{ grid-template-columns: 1fr; }\n  .bfbt-flat-price{ align-items:flex-start; text-align:left; }\n  .bfbt-flat-slider{ height:240px; }\n}\n\n\t* {\n\t  font-family: 'Open Sans', sans-serif;\n\t}\n\th4,h5,label{\n\t  font-weight:600;\n\t  color:#0F172A;\n\t}\n\th4{\n\t  font-size:20px;\n\t  line-height:1.3;\n\t  margin:0 0 12px;\n\t  text-align:center;\n\t}\n\th5{\n\t  font-size:22px !important;\n\t  line-height:1.4;\n\t  margin:0 0 10px;\n\t  text-align:center;\n\t}\n\tlabel{\n\t  display:block;\n\t  margin-bottom:6px;\n\t  font-size:16px;\n\t  line-height:1.4;\n\t}\n\n\tinput, textarea {\n\t  font-size:16px;\n\t  line-height:1.4;\n\t  padding:10px 12px;\n\t  border:1px solid #CBD5E1;\n\t  border-radius:8px;\n\t  width:100%;\n\t  color:#0F172A;\n\t  background:#fff;\n\t}\n\ttextarea{\n\t  min-height:110px;\n\t  resize:vertical;\n\t}\n\t.form-row{\n\t  margin-bottom:16px;\n\t}\n\t.form-row.double{\n\t  display:flex;\n\t  gap:16px;\n\t  flex-wrap:wrap;\n\t}\n\n\t\/* ============= BUTTONS ============= *\/\n\t.coman-btn{\n\t  font-size:16px;\n\t  font-weight:700;\n\t  padding:0 22px;\n\t  height:48px;\n\t  border-radius:999px;\n\t  display:inline-flex;\n\t  align-items:center;\n\t  justify-content:center;\n\t  line-height:1;\n\t  cursor:pointer;\n\t  text-decoration:none;\n\t  border:0;\n\t}\n\t.add_new{\n\t  background:#fff;\n\t  color:#0E69BE;\n\t  border:1px solid #93C5FD;\n\t}\n\t.add_new i{\n\t  margin-left:8px;\n\t}\n\t.next_btn{\n\t  background:#0E69BE;\n\t  color:#fff;\n\t  border:none;\n\t  box-shadow:0 5px 14px rgba(14,105,190,.25);\n\t}\n\t.primary{\n\t  background:#0E69BE;\n\t  color:#fff;\n\t  border:none;\n\t  box-shadow:0 5px 14px rgba(14,105,190,.25);\n\t}\n\t.ghost{\n\t  background:#fff;\n\t  color:#0F172A;\n\t  border:1px solid #E6EAF0;\n\t}\n\n\t.steps-buttons{\n\t  display:flex;\n\t  flex-wrap:wrap;\n\t  justify-content:center;\n\t  gap:20px;\n\t  margin-top:24px;\n\t}\n\n\t\/* ============= PANELS \/ CARDS ============= *\/\n\t.bfbt-card{\n\t  background:#fff;\n\t  border:1px solid #E6EAF0;\n\t  border-radius:16px;\n\t  box-shadow:0 8px 24px rgba(15,23,42,.08);\n\t  padding:18px;\n\t}\n\t.bfbt-card.bfbt-panel{\n\t  border-radius:20px;\n\t  margin-top:24px;\n\t  overflow:hidden;\n\t}\n\t.bfbt-panel__inner{\n\t  padding:24px;\n\t}\n\n\t\/* ============= \"Hinzuf\u00fcgen\"-Leiste im Panel (Standort\/Datum\/G\u00e4ste) ============= *\/\n\t.bfbt-pill.bfbt-pill--grid{\n\t  display:grid;\n\t  grid-template-columns:1fr 1fr 1fr 1fr;\n\t  border:1px solid #E6EAF0;\n\t  border-radius:16px;\n\t  background:#fff;\n\t}\n\t.bfbt-cell{\n\t  display:flex;\n\t  align-items:center;\n\t  gap:10px;\n\t  padding:14px 16px;\n\t  min-width:0;\n\t  position:relative;\n\t  border-right:1px solid #E6EAF0;\n\t}\n\t.bfbt-cell:last-child{\n\t  border-right:none;\n\t}\n\t.bfbt-cell__icon{\n\t  color:#506176;\n\t  font-size:18px;\n\t  flex:0 0 auto;\n\t  width:18px;\n\t  height:18px;\n\t  display:inline-flex;\n\t  align-items:center;\n\t  justify-content:center;\n\t}\n\t.bfbt-input{\n\t  width:100%;\n\t  border:none;\n\t  outline:none;\n\t  background:transparent;\n\t  font:600 17px\/1.4 'Open Sans', sans-serif;\n\t  color:#0F172A;\n\t  padding:4px 0;\n\t  min-height:28px;\n\t}\n\t.bfbt-input::placeholder{\n\t  color:#9AA6B2;\n\t}\n\n\t.bfbt-cell--guests{\n\t  justify-content:space-between;\n\t}\n\t.bfbt-guests{\n\t  margin-left:auto;\n\t  display:flex;\n\t  align-items:center;\n\t  gap:10px;\n\t}\n\t.bfbt-qty{\n\t  width:38px;\n\t  height:38px;\n\t  border:1px solid #CBD5E1;\n\t  background:#fff;\n\t  color:#0F172A;\n\t  border-radius:10px;\n\t  font-weight:700;\n\t  line-height:1;\n\t  display:inline-flex;\n\t  align-items:center;\n\t  justify-content:center;\n\t  cursor:pointer;\n\t  transition: background .15s, border-color .15s;\n\t  font-size:18px;\n\t}\n\t.bfbt-qty:hover{\n\t  background:#F1F5F9;\n\t  border-color:#A8B3C2;\n\t}\n\t.bfbt-qty__value{\n\t  width:60px;\n\t  min-width:60px;\n\t  text-align:center;\n\t  border:none;\n\t  background:#F3F4F6;\n\t  color:#0F172A;\n\t  font-weight:700;\n\t  padding:8px 6px;\n\t  border-radius:10px;\n\t  font-size:16px;\n\t  line-height:1.2;\n\t}\n\n\t.bfbt-panel__actions{\n\t  display:flex;\n\t  flex-wrap:wrap;\n\t  gap:16px;\n\t  margin-top:24px;\n\t  justify-content:center;\n\t}\n\n\t\/* ============= LISTE DER ANGELEGTEN ANFRAGEN (Step 1) ============= *\/\n\t.booking-active-items-wrapper{\n\t  max-width:1200px;\n\t  margin:0 auto;\n\t}\n\t.bfbt-headline{\n\t  text-align:center;\n\t  margin-bottom:10px;\n\t}\n\t.bfbt-description{\n\t  font-size:16px;\n\t  line-height:1.6;\n\t  color:#475569;\n\t  max-width:850px;\n\t  margin:8px auto 24px;\n\t  text-align:center;\n\t  background:#f8fafc;\n\t  border:1px solid #e2e8f0;\n\t  padding:12px 18px;\n\t  border-radius:10px;\n\t}\n\t.bfbt-description strong{\n\t  color:#0E69BE;\n\t  font-weight:600;\n\t}\n\n\t.booking-active-items-list{\n\t  display:grid;\n\t  gap:14px;\n\t  max-width:1200px;\n\t  margin:0 auto;\n\t}\n\n\t\/* Jede Zeile *\/\n\t.booking-active-items-container{\n\t  background:#0B1A26;\n\t  color:#fff;\n\t  border-radius:18px;\n\t  padding:18px;\n\t  display:grid;\n\t  grid-template-columns:1.2fr 1fr 1fr auto;\n\t  align-items:center;\n\t  justify-items:stretch;\n\t  gap:0;\n\t  box-shadow:0 6px 16px rgba(2,6,23,.2);\n\t  font-size:16px;\n\t  line-height:1.4;\n\t}\n\n\t\/* Einzelne \"Zelle\" *\/\n\t.booking-active-items-container .booking-input-container{\n\t  display:flex;\n\t  align-items:center;\n\t  justify-content:center;\n\t  width:100%;\n\t  min-height:32px;\n\t  min-width:0;\n\t  color:#fff;\n\t  font-size:16px;\n\t  line-height:1.4;\n\t  text-align:center;\n\t  border-right:1px solid rgba(255,255,255,0.35);\n\t  padding:12px;\n\t  box-sizing:border-box;\n\t}\n\n\t\/* Letzte Spalte (G\u00e4ste + Papierkorb) hat keinen Border rechts *\/\n\t.booking-active-items-container .booking-input-container:last-child{\n\t  border-right:none;\n\t}\n\n\t\/* G\u00e4stezahl + Trash nebeneinander *\/\n\t.booking-input-actions{\n\t  display:flex;\n\t  align-items:center;\n\t  justify-content:center;\n\t  gap:16px;\n\t  white-space:nowrap;\n\t}\n\t.bfbt-guests-read{\n\t  font-weight:600;\n\t  font-size:16px;\n\t  line-height:1.4;\n\t  color:#fff;\n\t}\n\n\t\/* Papierkorb-Icon *\/\n\t.booking-input-actions .fa-trash{\n\t  cursor:pointer;\n\t  font-size:18px;\n\t  color:#fff;\n\t  opacity:0.85;\n\t  transition:opacity .15s;\n\t}\n\t.booking-input-actions .fa-trash:hover{\n\t  opacity:1;\n\t}\n\n\t\/* ============= REVIEW (Step 3) ============= *\/\n\t.bfbt-review__grid{\n\t  display:grid;\n\t  grid-template-columns:1.2fr 1fr;\n\t  gap:18px;\n\t  margin-top:10px;\n\t  max-width:1200px;\n\t  margin-left:auto;\n\t  margin-right:auto;\n\t}\n\t.bfbt-review__list .booking-active-items-container{\n\t  margin-bottom:12px;\n\t}\n\t.bfbt-review__form .bfbt-row{\n\t  display:flex;\n\t  justify-content:space-between;\n\t  gap:12px;\n\t  padding:10px 0;\n\t  border-bottom:1px solid #EEF2F7;\n\t  font-size:16px;\n\t  line-height:1.4;\n\t}\n\t.bfbt-review__form .bfbt-row:last-child{\n\t  border-bottom:none;\n\t}\n\t.bfbt-review__form .bfbt-key{\n\t  color:#64748B;\n\t  font-weight:400;\n\t}\n\t.bfbt-review__form .bfbt-val{\n\t  font-weight:700;\n\t  color:#0F172A;\n\t}\n\n\n\n\t\/* ============= WOHNUNGEN (STEP 2 \u2013 Ergebnis) ============= *\/\n\t.bfbt-apts{\n\t  margin-top:14px;\n\t  padding-top:14px;\n\t  border-top:1px solid #EEF2F7;\n\t}\n\t.bfbt-apt-head{\n\t  margin:0 0 6px;\n\t  font-size:16px;\n\t  font-weight:700;\n\t  text-align:left;\n\t}\n\t.bfbt-apt-sub{\n\t  color:#64748B;\n\t  font-size:14px;\n\t  margin:0 0 12px;\n\t}\n\t.bfbt-apt-hint{\n\t  color:#64748B;\n\t  font-size:13px;\n\t  margin-top:10px;\n\t}\n\t.bfbt-apt-grid{\n\t  display:grid;\n\t  grid-template-columns:1fr; \/* Desktop: untereinander *\/\n\t  gap:12px;\n\t}\n\t.bfbt-apt-card{\n\t  border:1px solid #E6EAF0;\n\t  border-radius:14px;\n\t  overflow:hidden;\n\t  background:#fff;\n\t  cursor:pointer;\n\t  box-shadow:0 8px 20px rgba(15,23,42,.06);\n\t  transition: transform .08s ease, box-shadow .08s ease, border-color .08s ease;\n\t}\n\t.bfbt-apt-card:hover{ transform: translateY(-1px); box-shadow:0 12px 26px rgba(15,23,42,.09); }\n\t.bfbt-apt-card.is-selected{ border-color:#0E69BE; box-shadow:0 0 0 2px rgba(14,105,190,.18), 0 12px 26px rgba(15,23,42,.09); }\n\t.bfbt-apt-radio{ position:absolute; left:-9999px; }\n\t.bfbt-apt-top{ display:grid; grid-template-columns: 340px 1fr; gap:12px; }\n\t.bfbt-apt-slider{ position:relative; overflow:hidden; width:100%; height:210px; background:#f1f5f9; }\n\t.bfbt-apt-slider__track{ display:flex; width:100%; height:100%; transition: transform .25s ease; }\n\t.bfbt-apt-slider__track img{ width:100%; height:210px; object-fit:cover; display:block; flex:0 0 100%; }\n\t.bfbt-apt-slider__btn{\n\t  position:absolute;\n\t  top:50%;\n\t  transform:translateY(-50%);\n\t  width:28px;\n\t  height:28px;\n\t  border-radius:999px;\n\t  border:none;\n\t  background:transparent;\n\t  color:#0E69BE;\n\t  font-size:20px;\n\t  cursor:pointer;\n\t  display:flex;\n\t  align-items:center;\n\t  justify-content:center;\n\t  text-shadow:0 2px 8px rgba(15,23,42,.28);\n\t  opacity:.95;\n\t}\n\t\/* Theme-sichere Overrides: kein blauer Hintergrund, nur Pfeil *\/\n\t.bfbt-apt-slider__btn,\n\t.bfbt-apt-slider__btn:hover,\n\t.bfbt-apt-slider__btn:focus,\n\t.bfbt-apt-slider__btn:active{\n\t  background:transparent !important;\n\t  background-color:transparent !important;\n\t  border:0 !important;\n\t  box-shadow:none !important;\n\t  outline:none !important;\n\t}\n\t\/* Optional: falls ein Theme feste Button-Dimensionen\/Radius setzt *\/\n\t.bfbt-apt-slider__btn{\n\t  border-radius:0 !important;\n\t  padding:0 !important;\n\t  min-width:0 !important;\n\t  min-height:0 !important;\n\t}\n\t.bfbt-apt-slider__btn:hover{ opacity:1; }\n\t.bfbt-apt-slider__btn--prev{ left:10px; }\n\t.bfbt-apt-slider__btn--next{ right:10px; }\n\t.bfbt-apt-slider__dots{ position:absolute; left:0; right:0; bottom:10px; display:flex; gap:6px; justify-content:center; pointer-events:none; }\n\t.bfbt-apt-slider__dot{ width:7px; height:7px; border-radius:999px; background:rgba(255,255,255,.7); border:1px solid rgba(15,23,42,.18); }\n\t.bfbt-apt-slider__dot.is-active{ background:#fff; }\n\t.bfbt-apt-meta{ padding:10px 10px 10px 0; }\n\t.bfbt-apt-title{ font-weight:700; color:#0F172A; margin-bottom:6px; }\n\t.bfbt-apt-price{ font-size:13px; color:#0E69BE; font-weight:700; margin:-2px 0 8px; }\n\t.bfbt-apt-ul{ margin:0; padding-left:16px; color:#334155; font-size:13px; }\n\t.bfbt-apt-ul li{ margin:0 0 4px; }\n\n\t@media (max-width:900px){\n\t  .bfbt-apt-top{ grid-template-columns: 260px 1fr; }\n\t  .bfbt-apt-slider{ height:180px; }\n\t  .bfbt-apt-slider__track img{ height:180px; }\n\t}\n\t@media (max-width:640px){\n\t  .bfbt-apt-top{ grid-template-columns: 1fr; }\n\t  .bfbt-apt-meta{ padding:12px 12px 14px; }\n\t}\n\n\t\/* ============= MODAL ============= *\/\n\t.bfbt-modal{\n\t  position:fixed;\n\t  inset:0;\n\t  z-index:9999;\n\t  display:block;\n\t}\n\t.bfbt-modal[hidden]{\n\t  display:none;\n\t}\n\tbody.bfbt-modal-open{ overflow:hidden; }\n\t.bfbt-modal__backdrop{\n\t  position:absolute;\n\t  inset:0;\n\t  background:rgba(2,6,23,.6);\n\t}\n\t.bfbt-modal__dialog{\n\t  position:relative;\n\t  background:#fff;\n\t  border-radius:16px;\n\t  width:min(920px,92vw);\n\t  margin:6vh auto 0;\n\t  box-shadow:0 20px 60px rgba(2,6,23,.35);\n\t  \/* Statt nur das Formular zu scrollen, soll das komplette Modal scrollen *\/\n\t  overflow:auto;\n\t  color:#0F172A;\n\t  font-size:16px;\n\t  line-height:1.5;\n\t  max-height:92vh;\n\t  display:flex;\n\t  flex-direction:column;\n\t}\n\t.bfbt-modal__header{\n\t  padding:18px 20px;\n\t  border-bottom:1px solid #EEF2F7;\n\t  text-align:center;\n\t}\n\t.bfbt-modal__header h3{\n\t  font-weight:700;\n\t  font-size:20px;\n\t  line-height:1.3;\n\t  margin:0;\n\t}\n\t.bfbt-modal__body{\n\t  padding:18px 20px;\n\t  text-align:left;\n\t  \/* Scroll-Container ist der Dialog, nicht nur der Body *\/\n\t  overflow:visible;\n\t}\n\t.bfbt-modal__footer{\n\t  padding:16px 20px;\n\t  border-top:1px solid #EEF2F7;\n\t  display:flex;\n\t  justify-content:center;\n\t  background:#fff;\n\t  position:sticky;\n\t  bottom:0;\n\t}\n\n\t\n\t.bfbt-modal__dialog--wide{\n\t  width:min(980px, calc(100vw - 24px));\n\t}\n\t.bfbt-modal__sub{\n\t  color:#334155;\n\t  font-size:14px;\n\t  margin-top:4px;\n\t}\n\n\t.bfbt-modal__aptinfo{\n\t  margin-top:10px;\n\t  padding:10px 12px;\n\t  background:#f8fafc;\n\t  border:1px solid #e2e8f0;\n\t  border-radius:12px;\n\t  color:#334155;\n\t  font-size:14px;\n\t  text-align:center;\n\t}\n\t.bfbt-modal__aptinfo .bfbt-flat-badges{ margin-top:6px; justify-content:center; }\n\t.bfbt-modal__aptinfo .bfbt-flat-amenities{ margin-top:8px; justify-content:center; }\n\t.bfbt-modal__aptinfo .bfbt-inquiry-details{ margin-top:10px; white-space:pre-wrap; color:#475569; }\n\n\t\/* Anfrage-Modal: kleine Bilder-Galerie *\/\n\t.bfbt-inquiry-gallery{\n\t  margin-top:12px;\n\t  display:flex;\n\t  align-items:center;\n\t  gap:8px;\n\t}\n\t.bfbt-inquiry-gallery__nav{\n  width:34px;\n  height:34px;\n  border:none;\n  background:transparent;\n  color:#0E69BE;\n  font-size:34px;\n  line-height:1;\n  display:inline-flex;\n  align-items:center;\n  justify-content:center;\n  cursor:pointer;\n  flex:0 0 auto;\n}\n\t\n\t.bfbt-inquiry-gallery__track{\n\t  flex:1 1 auto;\n\t  display:flex;\n\t  gap:8px;\n\t  overflow-x:auto;\n\t  overflow-y:hidden;\n\t  -webkit-overflow-scrolling:touch;\n\t  scroll-behavior:smooth;\n\t  padding:2px;\n\t  scroll-snap-type:x mandatory;\n\t}\n\t.bfbt-inquiry-gallery__track::-webkit-scrollbar{ height:6px; }\n\t.bfbt-inquiry-gallery__item{\n\t  flex:0 0 calc((100% - 32px) \/ 5);\n\t  scroll-snap-align:start;\n\t}\n\t.bfbt-inquiry-gallery__item img{\n\t  width:100%;\n\t  height:64px;\n\t  object-fit:cover;\n\t  border-radius:10px;\n\t  border:1px solid #e2e8f0;\n\t  display:block;\n\t}\n\t@media (max-width: 900px){\n\t  .bfbt-inquiry-gallery__item{ flex-basis: calc((100% - 16px) \/ 3); }\n\t}\n\t@media (max-width: 560px){\n\t  .bfbt-inquiry-gallery__nav{ width:30px; height:30px; font-size:30px; }\n\t  .bfbt-inquiry-gallery__item{ flex-basis: calc((100% - 8px) \/ 2); }\n\t  .bfbt-inquiry-gallery__item img{ height:58px; }\n\t}\n\t\n\t\/* Lightbox f\u00fcr Galerie *\/\n\t.bfbt-lightbox{\n\t  position:fixed;\n\t  inset:0;\n\t  z-index:999999;\n\t  display:flex;\n\t  align-items:center;\n\t  justify-content:center;\n\t}\n\t.bfbt-lightbox[hidden]{ display:none !important; }\n\t.bfbt-lightbox__backdrop{\n\t  position:absolute;\n\t  inset:0;\n\t  background:rgba(15,23,42,0.85);\n\t}\n\t.bfbt-lightbox__dialog{\n\t  position:relative;\n\t  max-width:min(1100px, 96vw);\n\t  width:96vw;\n\t  max-height:86vh;\n\t  display:flex;\n\t  align-items:center;\n\t  justify-content:center;\n\t}\n\t.bfbt-lightbox__a{ display:block; max-height:86vh; }\n\t.bfbt-lightbox__img{\n\t  max-width:100%;\n\t  max-height:86vh;\n\t  border-radius:14px;\n\t  box-shadow:0 20px 60px rgba(0,0,0,0.35);\n\t  background:#000;\n\t}\n\t.bfbt-lightbox__linkwrap{\n\t  position:absolute;\n\t  left:14px;\n\t  bottom:12px;\n\t  font-size:14px;\n\t}\n\t.bfbt-lightbox__link{ color:#2563EB; text-decoration:none; }\n\t.bfbt-lightbox__link:hover{ text-decoration:underline; }\n\t.bfbt-lightbox__nav{\n\t  position:absolute;\n\t  top:50%;\n\t  transform:translateY(-50%);\n\t  border:none;\n\t  background:transparent;\n\t  color:#0E69BE;\n\t  font-size:56px;\n\t  line-height:1;\n\t  cursor:pointer;\n\t  padding:10px 14px;\n\t  user-select:none;\n\t}\n\t.bfbt-lightbox__nav--prev{ left:-8px; }\n\t.bfbt-lightbox__nav--next{ right:-8px; }\n\t.bfbt-lightbox__close{\n\t  position:absolute;\n\t  top:-6px;\n\t  right:-6px;\n\t  border:none;\n\t  background:transparent;\n\t  color:#0E69BE;\n\t  font-size:42px;\n\t  line-height:1;\n\t  cursor:pointer;\n\t  padding:8px 12px;\n\t}\n\t@media (max-width:560px){\n\t  .bfbt-lightbox__nav{ font-size:44px; }\n\t  .bfbt-lightbox__close{ font-size:36px; }\n\t}\n\n.bfbt-flat-card--clickable{ cursor:pointer; }\n\t.bfbt-flat-card--clickable:focus{ outline:2px solid #2563EB; outline-offset:2px; }\n\t.bfbt-contactbar{\n\t  display:flex;\n\t  gap:10px;\n\t  flex-wrap:wrap;\n\t  justify-content:center;\n\t  margin-bottom:14px;\n\t}\n\t.bfbt-contactbtn{\n\t  display:inline-flex;\n\t  align-items:center;\n\t  gap:10px;\n\t  padding:10px 14px;\n\t  border-radius:999px;\n\t  border:1px solid rgba(148,163,184,.6);\n\t  background:rgba(255,255,255,.9);\n\t  color:#0F172A;\n\t  text-decoration:none;\n\t  font-weight:600;\n\t}\n\t.bfbt-contactbtn i{ font-size:16px; }\n\t\t.bfbt-contactbtn--tel{\n\t  background:#2563EB;\n\t  border-color:#2563EB;\n\t  color:#fff;\n\t}\n\t.bfbt-contactbtn--wa{\n\t  background:#16A34A;\n\t  border-color:#16A34A;\n\t  color:#fff;\n\t}\n\t.bfbt-contactbtn--tel:hover,\n\t.bfbt-contactbtn--wa:hover{\n\t  filter:brightness(.95);\n\t}\n\n\t.bfbt-contactbtn--tel, .bfbt-contactbtn--tel *{ color:#fff !important; }\n\t.bfbt-contactbtn--wa, .bfbt-contactbtn--wa *{ color:#fff !important; }\n\n\t\/* Form Style (nur Linie unten, kein grauer Hintergrund) *\/\n\t#bfbtInquiryModal input, #bfbtInquiryModal textarea{\n\t  background:transparent !important;\n\t  border:none !important;\n\t  border-bottom:2px solid rgba(148,163,184,.9) !important;\n\t  border-radius:0 !important;\n\t  box-shadow:none !important;\n\t  padding:14px 4px !important;\n\t}\n\t\/* Textarea: kompletter Rahmen *\/\n\t#bfbtInquiryModal textarea{\n\t  min-height:160px;\n\t  resize:vertical;\n\t  border:2px solid rgba(148,163,184,.9) !important;\n\t  border-radius:12px !important;\n\t  padding:14px 14px !important;\n  font-size:16px !important;\n  line-height:1.45 !important;\n\t}\n\t#bfbtInquiryModal textarea::placeholder{\n\t  color:#94A3B8;\n\t  opacity:1;\n\t  line-height:1.45 !important;\n\t  white-space:normal !important;\n\t}\n\t\/* weil Textarea jetzt Rahmen hat: unteren Strich entfernen *\/\n\t#bfbtInquiryModal textarea{ border-bottom:2px solid rgba(148,163,184,.9) !important; }\n\t#bfbtInquiryModal .form-input-container input:focus, #bfbtInquiryModal textarea:focus{ outline:none; border-bottom-color:#2563EB !important; }\n\n\t\/* Invalid Markierung (nach Submit) *\/\n\t#bfbtInquiryModal .bfbt-invalid{\n\t  border-color: #ef4444 !important;\n\t  border-bottom-color: #ef4444 !important;\n\t  box-shadow: none !important;\n\t}\n\t#bfbtInquiryModal .bfbt-privacy-label.bfbt-invalid-consent{\n\t  outline: 2px solid #ef4444;\n\t  border-radius: 8px;\n\t  padding: 8px;\n\t}\n\n\t\/* Bild-Lichtbox *\/\n\t.bfbt-imglightbox[hidden]{ display:none !important; }\n\t.bfbt-imglightbox{\n\t  position: fixed;\n\t  inset: 0;\n\t  z-index: 999999;\n\t}\n\t.bfbt-imglightbox__backdrop{\n\t  position:absolute;\n\t  inset:0;\n\t  background: rgba(0,0,0,.65);\n\t}\n\t.bfbt-imglightbox__dialog{\n\t  position: relative;\n\t  z-index: 1;\n\t  width: min(92vw, 1100px);\n\t  height: min(88vh, 800px);\n\t  margin: 6vh auto 0 auto;\n\t  background: rgba(15,23,42,.08);\n\t  border: 1px solid rgba(255,255,255,.25);\n\t  border-radius: 18px;\n\t  backdrop-filter: blur(10px);\n\t  -webkit-backdrop-filter: blur(10px);\n\t  box-shadow: 0 20px 60px rgba(0,0,0,.35);\n\t  display:flex;\n\t  align-items:center;\n\t  justify-content:center;\n\t  overflow:hidden;\n\t}\n\t.bfbt-imglightbox__dialog img{\n\t  width: 100%;\n\t  height: 100%;\n\t  object-fit: contain;\n\t  display:block;\n\t}\n\t.bfbt-imglightbox__close{\n\t  position:absolute;\n\t  top:10px;\n\t  right:12px;\n\t  width:42px;\n\t  height:42px;\n\t  border-radius: 999px;\n\t  border: 1px solid rgba(255,255,255,.35);\n\t  background: rgba(255,255,255,.18);\n\t  backdrop-filter: blur(10px);\n\t  -webkit-backdrop-filter: blur(10px);\n\t  cursor:pointer;\n\t  font-size: 26px;\n\t  line-height: 1;\n\t  display:flex;\n\t  align-items:center;\n\t  justify-content:center;\n\t}\n\t\/* Lightbox Navigation (Prev\/Next) *\/\n\t.bfbt-imglightbox__nav{\n\t  position:absolute;\n\t  top:50%;\n\t  transform:translateY(-50%);\n\t  width:48px;\n\t  height:48px;\n\t  border-radius:999px;\n\t  border:1px solid rgba(255,255,255,.35);\n\t  background: rgba(255,255,255,.18);\n\t  backdrop-filter: blur(10px);\n\t  -webkit-backdrop-filter: blur(10px);\n\t  cursor:pointer;\n\t  font-size: 34px;\n\t  line-height: 1;\n\t  display:flex;\n\t  align-items:center;\n\t  justify-content:center;\n\t  color:#000;\n\t  user-select:none;\n\t}\n\t.bfbt-imglightbox__prev{ left:12px; }\n\t.bfbt-imglightbox__next{ right:12px; }\n\t.bfbt-imglightbox__nav[hidden]{ display:none !important; }\n\t.bfbt-imglightbox__count{\n\t  position:absolute;\n\t  left:50%;\n\t  bottom:12px;\n\t  transform:translateX(-50%);\n\t  padding:6px 10px;\n\t  border-radius:999px;\n\t  border:1px solid rgba(255,255,255,.25);\n\t  background: rgba(15,23,42,.35);\n\t  color:#fff;\n\t  font-size:13px;\n\t  line-height:1;\n\t  letter-spacing:.2px;\n\t}\n\t@media (max-width: 520px){\n\t  .bfbt-imglightbox__nav{ width:42px; height:42px; font-size:30px; }\n\t  .bfbt-imglightbox__prev{ left:10px; }\n\t  .bfbt-imglightbox__next{ right:10px; }\n\t}\n\n\t.bfbt-flat-slider img{ cursor: zoom-in; }\n\n\n\n\n\n\t\/* Mehr Luft im Formular *\/\n\t#bfbtInquiryModal .form-row{ margin-top:10px; margin-bottom:18px; padding:0 10px; }\n\t#bfbtInquiryModal .form-row.double{ gap:26px; }\n\t#bfbtInquiryModal .form-input-container label,\n\t#bfbtInquiryModal .form-row.single > label{ display:block; margin-bottom: 4px; }\n\/* ============= LAYOUT LIMITER ============= *\/\n\t.booking-table-container{\n\t  max-width:1200px;\n\t  margin:0 auto;\n\t  padding-bottom:40px;\n\t}\n\n\t\/* Responsive *\/\n\t@media (max-width:1024px){\n\t  .bfbt-pill.bfbt-pill--grid{\n\t\tgrid-template-columns:1fr 1fr;\n\t  }\n\t  .booking-active-items-container{\n\t\tgrid-template-columns:1fr 1fr;\n\t  }\n\t  .bfbt-review__grid{\n\t\tgrid-template-columns:1fr;\n\t  }\n\t}\n\t@media (max-width:640px){\n\t  .bfbt-panel__inner{\n\t\tpadding:16px;\n\t  }\n\t  .bfbt-pill.bfbt-pill--grid{\n\t\tgrid-template-columns:1fr;\n\t  }\n\t  .bfbt-cell{\n\t\tborder-right:none;\n\t\tborder-bottom:1px solid #E6EAF0;\n\t  }\n\t  .bfbt-cell:last-child{\n\t\tborder-bottom:none;\n\t  }\n\n\t  .booking-active-items-container{\n\t\tgrid-template-columns:1fr;\n\t  }\n\t  .booking-active-items-container .booking-input-container{\n\t\tborder-right:none !important;\n\t\tborder-bottom:1px solid rgba(255,255,255,0.2);\n\t\tjustify-content:flex-start;\n\t\ttext-align:left;\n\t  }\n\t  .booking-active-items-container .booking-input-container:last-child{\n\t\tborder-bottom:none;\n\t  }\n\t  .booking-input-actions{\n\t\tjustify-content:flex-start;\n\t  }\n\t}\n\t\t\/* Steps mobil untereinander statt nebeneinander *\/\n@media (max-width: 768px) {\n  .step-frm {\n    display: flex;\n    flex-direction: column;       \/* untereinander *\/\n    gap: 10px;\n    align-items: stretch;         \/* volle Breite *\/\n    margin-bottom: 14px;\n  }\n\n  .step-frm .step-box {\n    width: 100%;\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    padding: 10px 12px;\n    border-radius: 12px;\n    background: rgba(255,255,255,0.08);   \/* dezent, transparent *\/\n    backdrop-filter: blur(2px);\n  }\n\n  \/* Titel einzeilig links, nicht abgeschnitten *\/\n  .step-frm .step-box .step-title {\n    font-size: 15px;\n    line-height: 1.2;\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n  }\n\n  \/* Verbinder-Linie zwischen den Steps mobil ausblenden *\/\n  .step-frm .step-box .line {\n    display: none !important;\n  }\n\n  \/* Aktiver Step etwas hervorheben *\/\n  .step-frm .step-box.active {\n    background: #0E69BE;\n    color: #fff;\n    box-shadow: 0 6px 14px rgba(14,105,190,.25);\n  }\n  .step-frm .step-box.active .step-title { color: #fff; }\n  .step-frm .step-box.active i,\n  .step-frm .step-box.active p { color: #fff; }\n}\n\t\n\t.bfbt-privacy-row{ margin-top:12px; }\n\t.bfbt-privacy-label{ font-size:14px; line-height:1.4; color:#334155; }\n\t.bfbt-privacy-label input[type=\"checkbox\"]{\n\t  width:18px; height:18px;\n\t  margin:0;\n\t  accent-color:#0b63c1;\n\t}\n\n<\/style>\n\n\t<script>\n\twindow.BFBT_APTS = [{\"id\":\"apt_1\",\"title\":\"Key-Base\",\"rooms\":\"10 Zimmer\",\"size\":\"150 m\\u00b2\",\"beds\":\"10x Einzelbetten, 1x Schlafsofa\",\"details\":\"\",\"price_pp\":\"20,00\",\"locations\":[],\"images\":[\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/100-300x200.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/007-2-300x200.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/004-200x300.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/021-300x200.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/005-300x200.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/011-300x200.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/025-300x200.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/032-300x200.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/041-300x200.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/030-300x200.webp\"],\"images_full\":[\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/100-scaled.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/007-2-scaled.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/004-scaled.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/021-scaled.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/005-scaled.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/011-scaled.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/025-scaled.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/032-scaled.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/041-scaled.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/030-scaled.webp\"]},{\"id\":\"apt_2\",\"title\":\"Sicher-Schlafen-Station\",\"rooms\":\"4 Zimmer\",\"size\":\"80 m\\u00b2\",\"beds\":\"1x Doppelbett, 3x Einzelbetten\",\"details\":\"\",\"price_pp\":\"15,99\",\"locations\":[],\"images\":[\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/0008-300x225.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/0104-300x225.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/0066-300x225.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/0094-300x225.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/0113-300x225.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/0105-300x225.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/0055-300x225.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/0018-300x225.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/0069-300x225.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/0060-300x225.webp\"],\"images_full\":[\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/0008-scaled.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/0104-scaled.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/0066-scaled.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/0094-scaled.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/0113-scaled.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/0105-scaled.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/0055-scaled.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/0018-scaled.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/0069-scaled.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/0060-scaled.webp\"]},{\"id\":\"apt_3\",\"title\":\"Ankerplatz f\\u00fcr Teams\",\"rooms\":\"3 Zimmer\",\"size\":\"70 m\\u00b2\",\"beds\":\"2x Doppelbett, 1x Einzelbett\",\"details\":\"\",\"price_pp\":\"16,99\",\"locations\":[],\"images\":[\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/002-1-300x240.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/055-300x225.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/012-1-300x225.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/007-3-300x225.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/043-1-300x225.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/060-1-225x300.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/058-3-300x225.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/039-1-300x225.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/025-2-300x225.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/031-1-300x225.webp\"],\"images_full\":[\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/002-1-scaled.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/055-scaled.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/012-1-scaled.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/007-3-scaled.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/043-1-scaled.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/060-1-scaled.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/058-3-scaled.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/039-1-scaled.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/025-2-scaled.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/031-1-scaled.webp\"]},{\"id\":\"apt_4\",\"title\":\"Handwerker-Zentrale\",\"rooms\":\"2,5 Zimmer\",\"size\":\"54 m\\u00b2\",\"beds\":\"2x Einzelbetten, 1x Schlafsofa, 1x Doppelbett\",\"details\":\"\",\"price_pp\":\"18,99\",\"locations\":[],\"images\":[\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/WhatsApp-Image-2025-07-07-at-21.00.06_53bffa07-300x200.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/WhatsApp-Image-2025-07-07-at-21.00.07_c5d0850b-300x200.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/WhatsApp-Image-2025-07-07-at-21.00.06_15113098-300x200.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/WhatsApp-Image-2025-07-07-at-21.00.06_62b6c96a-300x200.webp\"],\"images_full\":[\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/WhatsApp-Image-2025-07-07-at-21.00.06_53bffa07.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/WhatsApp-Image-2025-07-07-at-21.00.07_c5d0850b.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/WhatsApp-Image-2025-07-07-at-21.00.06_15113098.webp\",\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/WhatsApp-Image-2025-07-07-at-21.00.06_62b6c96a.webp\"]}];\n\twindow.BFBT_CITY_APTS = [];\n\t(function(){\n\t  \/* ==========================================\n\t\t State: gespeicherte Anfragen (Step 1)\n\t  ========================================== *\/\n\t  var items = [];\n\n\t  \/\/ Ausstattung-Icons (PNG aus dem Plugin)\n\t  \/\/ (wird im Apartment-Grid genutzt)\n\t  var bfbtAmenityIcons = {\"wash\":\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/plugins\\\/booking-form-by-tore\\\/assets\\\/icons\\\/waschmaschine.png\",\"park\":\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/plugins\\\/booking-form-by-tore\\\/assets\\\/icons\\\/parkplatz.png\",\"bath\":\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/plugins\\\/booking-form-by-tore\\\/assets\\\/icons\\\/badezimmer.png\",\"wifi\":\"https:\\\/\\\/chaker-apartments.com\\\/wp-content\\\/plugins\\\/booking-form-by-tore\\\/assets\\\/icons\\\/wlan.png\"};\n\n\t  \/* Hilfen *\/\n\t  \/\/ Sprache aus URL-Prefix ableiten: \/de\/ \/en\/ \/pl\/ \/fr\/ \/nl\/ \/cs\/; sonst fallback de\n\t  function urlLang(){\n\t\tvar p = (window.location && window.location.pathname) ? String(window.location.pathname) : '';\n\t\tp = p.replace(\/^\\\/+\/, '\/');\n\t\tvar m = p.match(\/^\\\/(de|en|pl|fr|nl|cs)(\\\/|$)\/i);\n\t\treturn (m && m[1]) ? String(m[1]).toLowerCase() : 'de';\n\t  }\n\t  function htmlLang(){\n\t\treturn (document.documentElement.getAttribute('lang') || urlLang() || 'de').split('-')[0];\n\t  }\n\t  function bfbtLang(){\n\t\t\/\/ Priorit\u00e4t: URL-Prefix -> <html lang>\n\t\tvar l = urlLang();\n\t\tif(l) return l;\n\t\treturn htmlLang();\n\t  }\n\n\t  \/\/ Mini-i18n f\u00fcr dynamische Texte (Booking Results \/ Wohnungstreffer)\n\t  var BFBT_I18N = {\n\t\tde: {\n\t\t  place: 'Ort',\n\t\t  checkin: 'Check-in',\n\t\t  checkout: 'Check-out',\n\t\t  guests: 'G\u00e4ste',\n\t\t  apartments: 'Wohnungen',\n\t\t  chooseApartment: 'Bitte w\u00e4hlen Sie eine Wohnung aus (Pflichtfeld).',\n\t\t  noRequests: 'Noch keine Anfragen vorhanden.',\n\t\t  noApartments: 'Keine Wohnungen konfiguriert.',\n\t\t  sizePrefix: 'Gr\u00f6\u00dfe: ',\n\t\t  bedsPrefix: 'Betten: ',\n\t\t  requestAccommodation: 'Unterkunft anfragen',\n\t\t  available: 'Verf\u00fcgbar',\n\t\t  avgPerNightPerson: '(Durchschnitt pro Nacht & Person)',\n\t\t  hintAvailability: '* Preise k\u00f6nnen je nach Zeitraum und Verf\u00fcgbarkeit variieren. Die Verf\u00fcgbarkeit der Unterk\u00fcnfte kann variieren. Abgebildete oder dargestellte Objekte stehen nicht in jedem Fall zur Verf\u00fcgung.',\n\t\t  amenityWash: 'Waschmaschine',\n\t\t  amenityPark: 'Parkplatz',\n\t\t  amenityBath: 'Badezimmer',\n\t\t  amenityWifi: 'WLAN'\n\t\t},\n\t\ten: {\n\t\t  place: 'Location',\n\t\t  checkin: 'Check-in',\n\t\t  checkout: 'Check-out',\n\t\t  guests: 'Guests',\n\t\t  apartments: 'Apartments',\n\t\t  chooseApartment: 'Please select an apartment (required).',\n\t\t  noRequests: 'No requests available yet.',\n\t\t  noApartments: 'No apartments configured.',\n\t\t  sizePrefix: 'Size: ',\n\t\t  bedsPrefix: 'Beds: ',\n\t\t  requestAccommodation: 'Request accommodation',\n\t\t  available: 'Available',\n\t\t  avgPerNightPerson: 'Average per night & person',\n\t\t  hintAvailability: 'Availability may vary. Shown or depicted items may not be available in every case.',\n\t\t  amenityWash: 'Washing machine',\n\t\t  amenityPark: 'Parking',\n\t\t  amenityBath: 'Bathroom',\n\t\t  amenityWifi: 'Wi\u2011Fi'\n\t\t},\n\t\tpl: {\n\t\t  place: 'Lokalizacja',\n\t\t  checkin: 'Zameldowanie',\n\t\t  checkout: 'Wymeldowanie',\n\t\t  guests: 'Go\u015bcie',\n\t\t  apartments: 'Apartamenty',\n\t\t  chooseApartment: 'Wybierz apartament (wymagane).',\n\t\t  noRequests: 'Brak zapyta\u0144.',\n\t\t  noApartments: 'Brak skonfigurowanych apartament\u00f3w.',\n\t\t  sizePrefix: 'Powierzchnia: ',\n\t\t  bedsPrefix: '\u0141\u00f3\u017cka: ',\n\t\t  requestAccommodation: 'Zapytaj o nocleg',\n\t\t  available: 'Dost\u0119pne',\n\t\t  avgPerNightPerson: '\u015arednio za noc i osob\u0119',\n\t\t  hintAvailability: 'Dost\u0119pno\u015b\u0107 obiekt\u00f3w mo\u017ce si\u0119 r\u00f3\u017cni\u0107. Przedstawione elementy nie zawsze s\u0105 dost\u0119pne.',\n\t\t  amenityWash: 'Pralka',\n\t\t  amenityPark: 'Parking',\n\t\t  amenityBath: '\u0141azienka',\n\t\t  amenityWifi: 'Wi\u2011Fi'\n\t\t},\n\t\tfr: {\n\t\t  place: 'Lieu',\n\t\t  checkin: 'Arriv\u00e9e',\n\t\t  checkout: 'D\u00e9part',\n\t\t  guests: 'Voyageurs',\n\t\t  apartments: 'Appartements',\n\t\t  chooseApartment: 'Veuillez s\u00e9lectionner un appartement (obligatoire).',\n\t\t  noRequests: 'Aucune demande pour le moment.',\n\t\t  noApartments: 'Aucun appartement configur\u00e9.',\n\t\t  sizePrefix: 'Superficie : ',\n\t\t  bedsPrefix: 'Lits : ',\n\t\t  requestAccommodation: 'Demander un h\u00e9bergement',\n\t\t  available: 'Disponible',\n\t\t  avgPerNightPerson: 'Moyenne par nuit et par personne',\n\t\t  hintAvailability: 'La disponibilit\u00e9 peut varier. Les \u00e9l\u00e9ments pr\u00e9sent\u00e9s peuvent ne pas \u00eatre disponibles dans tous les cas.',\n\t\t  amenityWash: 'Lave\u2011linge',\n\t\t  amenityPark: 'Parking',\n\t\t  amenityBath: 'Salle de bain',\n\t\t  amenityWifi: 'Wi\u2011Fi'\n\t\t},\n\t\tnl: {\n\t\t  place: 'Locatie',\n\t\t  checkin: 'Inchecken',\n\t\t  checkout: 'Uitchecken',\n\t\t  guests: 'Gasten',\n\t\t  apartments: 'Appartementen',\n\t\t  chooseApartment: 'Selecteer een appartement (verplicht).',\n\t\t  noRequests: 'Nog geen aanvragen beschikbaar.',\n\t\t  noApartments: 'Geen appartementen geconfigureerd.',\n\t\t  sizePrefix: 'Grootte: ',\n\t\t  bedsPrefix: 'Bedden: ',\n\t\t  requestAccommodation: 'Accommodatie aanvragen',\n\t\t  available: 'Beschikbaar',\n\t\t  avgPerNightPerson: 'Gemiddeld per nacht & persoon',\n\t\t  hintAvailability: 'Beschikbaarheid kan vari\u00ebren. Afgebeelde of getoonde items zijn niet in alle gevallen beschikbaar.',\n\t\t  amenityWash: 'Wasmachine',\n\t\t  amenityPark: 'Parkeren',\n\t\t  amenityBath: 'Badkamer',\n\t\t  amenityWifi: 'Wi\u2011Fi'\n\t\t},\n\t\tcs: {\n\t\t  place: 'M\u00edsto',\n\t\t  checkin: 'P\u0159\u00edjezd',\n\t\t  checkout: 'Odjezd',\n\t\t  guests: 'Host\u00e9',\n\t\t  apartments: 'Apartm\u00e1ny',\n\t\t  chooseApartment: 'Vyberte pros\u00edm apartm\u00e1n (povinn\u00e9).',\n\t\t  noRequests: 'Zat\u00edm nejsou \u017e\u00e1dn\u00e9 popt\u00e1vky.',\n\t\t  noApartments: 'Nejsou nastaven\u00e9 \u017e\u00e1dn\u00e9 apartm\u00e1ny.',\n\t\t  sizePrefix: 'Velikost: ',\n\t\t  bedsPrefix: 'Postele: ',\n\t\t  requestAccommodation: 'Poptat ubytov\u00e1n\u00ed',\n\t\t  available: 'K dispozici',\n\t\t  avgPerNightPerson: 'Pr\u016fm\u011br za noc a osobu',\n\t\t  hintAvailability: 'Dostupnost ubytov\u00e1n\u00ed se m\u016f\u017ee li\u0161it. Zobrazen\u00e9 polo\u017eky nemus\u00ed b\u00fdt v\u017edy k dispozici.',\n\t\t  amenityWash: 'Pra\u010dka',\n\t\t  amenityPark: 'Parkov\u00e1n\u00ed',\n\t\t  amenityBath: 'Koupelna',\n\t\t  amenityWifi: 'Wi\u2011Fi'\n\t\t}\n\t  };\n\t  function t(key){\n\t\tvar l = bfbtLang();\n\t\tvar pack = BFBT_I18N[l] || BFBT_I18N.de;\n\t\treturn (pack && typeof pack[key] !== 'undefined') ? String(pack[key]) : String((BFBT_I18N.de && BFBT_I18N.de[key]) || key);\n\t  }\n\t  function fpLocale(){\n\t\tvar l=htmlLang();\n\t\treturn (window.flatpickr && flatpickr.l10ns && (flatpickr.l10ns[l]||flatpickr.l10ns.default))||undefined;\n\t  }\n\t  function $(id){ return document.getElementById(id); }\n\t  function el(tag, cls, txt){\n\t\tvar e=document.createElement(tag);\n\t\tif(cls) e.className=cls;\n\t\tif(typeof txt==='string') e.textContent=txt;\n\t\treturn e;\n\t  }\n\n\t  function capitalizeLocation(str){\n\t\tstr = String(str||'').trim();\n\t\tif(!str) return '';\n\t\tvar first = str.charAt(0);\n\t\tvar rest  = str.slice(1);\n\t\ttry { first = first.toLocaleUpperCase(); } catch(e){ first = first.toUpperCase(); }\n\t\treturn first + rest;\n\t  }\n\n\t  \/* ====== Wohnungen ====== *\/\n\t  var apartments = Array.isArray(window.BFBT_APTS) ? window.BFBT_APTS.slice() : [];\n\t  var cityApartments = Array.isArray(window.BFBT_CITY_APTS) ? window.BFBT_CITY_APTS.slice() : [];\n\t  function shuffle(arr){\n\t\tfor (var i = arr.length - 1; i > 0; i--) {\n\t\t  var j = Math.floor(Math.random() * (i + 1));\n\t\t  var t = arr[i]; arr[i] = arr[j]; arr[j] = t;\n\t\t}\n\t\treturn arr;\n\t  }\n\t  function pickRandomApartment(){\n\t\tif(!apartments.length) return null;\n\t\treturn apartments[Math.floor(Math.random()*apartments.length)];\n\t  }\n\n\t  function normalizeApt(a){\n\t\tif(!a) return null;\n\t\treturn {\n\t\t  id: a.id,\n\t\t  title: a.title || '',\n\t\t  rooms: a.rooms || '',\n\t\t  size: a.size || '',\n\t\t  beds: a.beds || '',\n\t\t  details: a.details || '',\n\t\t  price_pp: a.price_pp || '',\n\t\t  locations: Array.isArray(a.locations) ? a.locations : [],\n\t\t  images: Array.isArray(a.images) ? a.images : [],\n\t\t  images_full: Array.isArray(a.images_full) ? a.images_full : []\n\t\t};\n\t  }\n\n\t  function formatPriceEUR(val){\n\t\tif(val===null || typeof val==='undefined') return '';\n\t\tvar s = String(val).trim();\n\t\tif(!s) return '';\n\t\t\/\/ erlaubt \"89,90\" oder \"89.90\" oder \"89\"\n\t\tvar num = parseFloat(s.replace(\/\\.\/g,'').replace(',', '.'));\n\t\tif(!isFinite(num)) return '';\n\t\ttry{\n\t\t  return new Intl.NumberFormat('de-DE', { minimumFractionDigits:2, maximumFractionDigits:2 }).format(num);\n\t\t}catch(e){\n\t\t  return num.toFixed(2).replace('.', ',');\n\t\t}\n\t  }\n\n\t  function normalizeLocationValue(str){\n\t\tstr = (str || '').toString().toLowerCase().replace(\/\\s+\/g, ' ').trim();\n\t\treturn str;\n\t  }\n\n\t  function getApartmentsForLocation(location){\n\t\tvar normLocation = normalizeLocationValue(location);\n\t\tif(!normLocation){\n\t\t  return apartments.slice();\n\t\t}\n\n\t\tvar filtered = cityApartments.filter(function(a){\n\t\t  var locs = Array.isArray(a.locations) ? a.locations : [];\n\t\t  if(!locs.length) return false;\n\t\t  return locs.some(function(loc){\n\t\t\tloc = normalizeLocationValue(loc);\n\t\t\treturn !!loc && (loc === normLocation || normLocation.indexOf(loc) !== -1 || loc.indexOf(normLocation) !== -1);\n\t\t  });\n\t\t});\n\n\t\treturn filtered.length ? filtered : apartments.slice();\n\t  }\n\n\t  function getRandomFour(location){\n\t\tvar copy = getApartmentsForLocation(location);\n\t\tshuffle(copy);\n\t\treturn copy.slice(0, 4);\n\t  }\n\n\t  function renderResultsAndApartmentChoices(){\n\t\tvar wrap = $('bfbtResultsItems');\n\t\tif(!wrap) return;\n\t\twrap.innerHTML = '';\n\n\t\tif(!items.length){\n\t\t  wrap.innerHTML = '<p style=\"margin:0;\">' + t('noRequests') + '<\/p>';\n\t\t  return;\n\t\t}\n\n\t\titems.forEach(function(it, idx){\n\t\t  \/\/ Karte pro Anfrage\n\t\t  var card = el('div','bfbt-card');\n\t\t  card.style.marginBottom = '14px';\n\n\t\t  var head = el('div','');\n\t\t  head.innerHTML = '<div style=\"color:#334155;font-size:14px;\">' +\n\t\t\t  '<strong>' + t('place') + ':<\/strong> ' + (capitalizeLocation(it.location)||'\u2014') + ' &nbsp; | &nbsp; ' +\n\t\t\t  '<strong>' + t('checkin') + ':<\/strong> ' + (it.checkin||'\u2014') + ' &nbsp; | &nbsp; ' +\n\t\t\t  '<strong>' + t('checkout') + ':<\/strong> ' + (it.checkout||'\u2014') + ' &nbsp; | &nbsp; ' +\n\t\t\t  '<strong>' + t('guests') + ':<\/strong> ' + (it.guests||'\u2014') +\n\t\t\t'<\/div>';\n\t\t  card.appendChild(head);\n\n\t\t  \/\/ Auswahl\n\t\t  var aptsTitle = el('div','bfbt-apt-head', t('apartments'));\n\t\t  aptsTitle.style.marginTop = '12px';\n\t\t  card.appendChild(aptsTitle);\n\n\t\t  var sub = el('div','bfbt-apt-sub', t('chooseApartment'));\n\t\t  card.appendChild(sub);\n\n\t\t  var grid = el('div','bfbt-apt-grid');\n\t\t  grid.setAttribute('data-item-idx', String(idx));\n\t\t  card.appendChild(grid);\n\n\t\t  \/\/ F\u00fcr jede Anfrage eine feste 4er-Auswahl (pro Rendering neu gemischt)\n\t\t  var four = getRandomFour(it.location || '');\n\t\t  if(four.length < 1){\n\t\t\tgrid.innerHTML = '<p style=\"margin:0;\">' + t('noApartments') + '<\/p>';\n\t\t  } else {\n\t\t\tfour.forEach(function(a, aIdx){\n  var apt = normalizeApt(a);\n\n  \/\/ Card im Screenshot-Look\n  var cardWrap = el('div','bfbt-flat-card');\n  cardWrap.style.position = 'relative';\n\n  \/\/ Media \/ Slider\n  var media = el('div','bfbt-flat-media');\n  var slider = el('div','bfbt-flat-slider');\n  var track = el('div','bfbt-flat-slider__track');\n\n  var imgs = Array.isArray(apt.images) ? apt.images.filter(function(u){ return !!u; }) : [];\n  var fulls = Array.isArray(apt.images_full) ? apt.images_full.filter(function(u){ return !!u; }) : [];\n  var placeholder = 'data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/ywAAAAAAQABAAACAUwAOw==';\n  if(!imgs.length){ imgs = [placeholder]; }\n\n  \/\/ Full-URLs: bevorzugt vom Server (images_full), sonst heuristisch.\n  var fullUrls = imgs.map(function(u, i){\n    if(!u) return u;\n    if(String(u).indexOf('data:image') === 0) return u;\n    if(fulls[i]) return fulls[i];\n    return bfbtGuessLargeImageUrl(u);\n  });\n\n  imgs.forEach(function(url, idx){\n    var im = document.createElement('img');\n    im.alt='';\n    im.loading='lazy';\n    im.src = url || placeholder;\n    im.setAttribute('data-full', fullUrls[idx] || bfbtGuessLargeImageUrl(im.src));\n\n    \/\/ Klick => Bild gro\u00df anzeigen (mit Galerie)\n    im.addEventListener('click', function(e){\n      e.preventDefault();\n      e.stopPropagation();\n      openAptImageLightbox(fullUrls, idx);\n    });\n\n    track.appendChild(im);\n  });\n\n  slider.appendChild(track);\n\n  var current = Math.floor(Math.random() * imgs.length);\n\n  function renderSlider(){\n    track.style.transform = 'translateX(' + (-current*100) + '%)';\n  }\n  function go(dir){\n    if(!imgs.length) return;\n    current = (current + dir + imgs.length) % imgs.length;\n    renderSlider();\n  }\n\n  if(imgs.length > 1){\n    var prev = el('button','bfbt-flat-slider__btn bfbt-flat-slider__btn--prev','\u2039');\n    var next = el('button','bfbt-flat-slider__btn bfbt-flat-slider__btn--next','\u203a');\n    prev.type='button'; next.type='button';\n    prev.addEventListener('click', function(e){ e.preventDefault(); e.stopPropagation(); go(-1); });\n    next.addEventListener('click', function(e){ e.preventDefault(); e.stopPropagation(); go(1); });\n    slider.appendChild(prev);\n    slider.appendChild(next);\n  }\n\n  renderSlider();\n  media.appendChild(slider);\n  cardWrap.appendChild(media);\n\n  \/\/ Body\n  var body = el('div','bfbt-flat-body');\n  body.appendChild(el('div','bfbt-flat-title', apt.title || ('Wohnung '+(aIdx+1))));\n\n  var badges = el('div','bfbt-flat-badges');\n  if(apt.rooms) badges.appendChild(el('span','bfbt-badge', String(apt.rooms)));\n  if(apt.size)  badges.appendChild(el('span','bfbt-badge', t('sizePrefix') + String(apt.size)));\n  if(apt.beds)  badges.appendChild(el('span','bfbt-badge', t('bedsPrefix') + String(apt.beds)));\n  body.appendChild(badges); \n\n  \/\/ Kleine Icons f\u00fcr Ausstattung (Waschmaschine, Parkplatz, Badezimmer, WLAN)\n  \/\/ (PNG-Icons, alle nebeneinander)\n  var amenities = el('div','bfbt-flat-amenities');\n  amenities.innerHTML = '' +\n    '<span class=\"bfbt-amenity\" title=\"'+t('amenityWash')+'\" aria-label=\"'+t('amenityWash')+'\">' +\n      '<img decoding=\"async\" class=\"bfbt-amenity-img\" src=\"'+(bfbtAmenityIcons && bfbtAmenityIcons.wash ? bfbtAmenityIcons.wash : '')+'\" alt=\"'+t('amenityWash')+'\" loading=\"lazy\" \/>' +\n    '<\/span>' +\n    '<span class=\"bfbt-amenity\" title=\"'+t('amenityPark')+'\" aria-label=\"'+t('amenityPark')+'\">' +\n      '<img decoding=\"async\" class=\"bfbt-amenity-img\" src=\"'+(bfbtAmenityIcons && bfbtAmenityIcons.park ? bfbtAmenityIcons.park : '')+'\" alt=\"'+t('amenityPark')+'\" loading=\"lazy\" \/>' +\n    '<\/span>' +\n    '<span class=\"bfbt-amenity\" title=\"'+t('amenityBath')+'\" aria-label=\"'+t('amenityBath')+'\">' +\n      '<img decoding=\"async\" class=\"bfbt-amenity-img\" src=\"'+(bfbtAmenityIcons && bfbtAmenityIcons.bath ? bfbtAmenityIcons.bath : '')+'\" alt=\"'+t('amenityBath')+'\" loading=\"lazy\" \/>' +\n    '<\/span>' +\n    '<span class=\"bfbt-amenity\" title=\"'+t('amenityWifi')+'\" aria-label=\"'+t('amenityWifi')+'\">' +\n      '<img decoding=\"async\" class=\"bfbt-amenity-img\" src=\"'+(bfbtAmenityIcons && bfbtAmenityIcons.wifi ? bfbtAmenityIcons.wifi : '')+'\" alt=\"'+t('amenityWifi')+'\" loading=\"lazy\" \/>' +\n    '<\/span>';\n  body.appendChild(amenities);\n\n  \/\/ Ganze Wohnungskarte anklickbar (\u00f6ffnet Modal + setzt Wohnung)\n  cardWrap.classList.add('bfbt-flat-card--clickable');\n  cardWrap.setAttribute('role','button');\n  cardWrap.setAttribute('tabindex','0');\n\n  function chooseAndOpen(ev){\n    if(ev){\n      ev.preventDefault();\n      ev.stopPropagation();\n    }\n    items[idx].apartment = apt;\n\n    \/\/ Selected-UI\n    try{\n      var cards = grid.querySelectorAll('.bfbt-flat-card');\n      for(var i=0;i<cards.length;i++) cards[i].classList.remove('is-selected');\n      cardWrap.classList.add('is-selected');\n    }catch(err){}\n\n    openInquiryModal(apt, items[idx]);\n  }\n\n  cardWrap.addEventListener('click', chooseAndOpen);\n  cardWrap.addEventListener('keydown', function(e){\n    if(!e) return;\n    if(e.key === 'Enter' || e.key === ' '){\n      chooseAndOpen(e);\n    }\n  });\n\n  \/\/ Anfrage-Button bleibt zus\u00e4tzlich (f\u00fcr klare CTA), nutzt aber dieselbe Aktion\n  var btn = el('button','coman-btn next_btn bfbt-open-inquiry', t('requestAccommodation'));\n  btn.type='button';\n  btn.style.marginTop = '12px';\n  btn.setAttribute('data-item-idx', String(idx));\n  btn.setAttribute('data-apt-id', String(apt.id||''));\n  btn.setAttribute('data-apt-title', String(apt.title||''));\n  btn.addEventListener('click', chooseAndOpen);\n  body.appendChild(btn);\n\n  cardWrap.appendChild(body);\n\n  \/\/ Right column\n  var priceCol = el('div','bfbt-flat-price');\n  priceCol.appendChild(el('div','bfbt-available', t('available')));\n\n  var priceNum = formatPriceEUR(apt.price_pp);\n  priceCol.appendChild(el('div','bfbt-price', priceNum ? ('ab ' + priceNum + ' \u20ac*') : '\u2014'));\n  priceCol.appendChild(el('div','bfbt-price-sub', t('avgPerNightPerson')));\n  cardWrap.appendChild(priceCol);\n\n  \/\/ Vorselektiert?\n  if(items[idx].apartment && items[idx].apartment.id === apt.id){\n    cardWrap.classList.add('is-selected');\n  }\n\n  grid.appendChild(cardWrap);\n});\n\t\t  }\n\n\t\t  var hint = el('div','bfbt-apt-hint', t('hintAvailability'));\n\t\t  card.appendChild(hint);\n\n\t\t  wrap.appendChild(card);\n\t\t});\n\t  }\n\n\t  function validateApartmentChoices(){\n\t\tfor(var i=0;i<items.length;i++){\n\t\t  if(!items[i].apartment || !items[i].apartment.id){\n\t\t\treturn false;\n\t\t  }\n\t\t}\n\t\treturn true;\n\t  }\n\n\n\t  \/* ====== RENDER LIST (Step 1) ======\n\t\t Grid hat 4 Spalten:\n\t\t [Standort] | [Check-in] | [Check-out] | [ G\u00e4ste + Papierkorb ]\n\t  *\/\n\t  function renderItemsList(){\n\t\tvar list1 = $('bfbtListStep1');\n\t\tif(!list1) return;\n\t\tlist1.innerHTML = '';\n\n\t\titems.forEach(function(it, idx){\n\t\t  var row = el('div','booking-active-items-container');\n\n\t\t  \/\/ Spalte 1: Standort\n\t\t\trow.appendChild(el('div','booking-input-container', capitalizeLocation(it.location) || ''));\n\n\t\t  \/\/ Spalte 2: Check-in\n\t\t  row.appendChild(el('div','booking-input-container', it.checkin));\n\n\t\t  \/\/ Spalte 3: Check-out\n\t\t  row.appendChild(el('div','booking-input-container', it.checkout));\n\n\t\t  \/\/ Spalte 4: G\u00e4stezahl + L\u00f6schen\n\t\t  var lastCol = el('div','booking-input-container booking-input-actions');\n\t\t  var guestsSpan = el('span','bfbt-guests-read', String(it.guests));\n\t\t  var trashIcon  = el('i','fa-solid fa-trash','');\n\n\t\t  trashIcon.addEventListener('click', function(){\n\t\t\titems.splice(idx,1);\n\t\t\trenderItemsList();\n\n\t\t\/\/ Results Seite: direkt Step 2 starten\n\t\tif(fromQuery){ currentStep = 1; }\n\t\t  });\n\n\t\t  lastCol.appendChild(guestsSpan);\n\t\t  lastCol.appendChild(trashIcon);\n\t\t  row.appendChild(lastCol);\n\n\t\t  list1.appendChild(row);\n\t\t});\n\t  }\n\n\t  \/* ====== INIT AUS URL (erste Anfrage mitnehmen) ====== *\/\n\t  function initFromQuery(){\n\t\tvar p=new URLSearchParams(window.location.search);\n\t\tvar hasParams = !!(p.get('location')||p.get('checkin')||p.get('checkout')||p.get('guests'));\n\t\tvar loc=p.get('location')||'';\n\t\tvar ci =p.get('checkin') ||'';\n\t\tvar co =p.get('checkout')||'';\n\t\tvar g  =p.get('guests')  ||'1';\n\t\tif(loc && ci && co){\n\t\t  items.push({\n\t\t\tlocation:capitalizeLocation(loc),\n\t\t\tcheckin:ci.trim(),\n\t\t\tcheckout:co.trim(),\n\t\t\tguests:g.trim(),\n\t\t\tapartment: null\n\t\t  });\n\t\treturn hasParams;\n\t\t}\n\t  }\n\n\t  \/* ====== PANEL \"Weitere hinzuf\u00fcgen\" ====== *\/\n\t  function initAddPanel(){\n\t\tvar panel     = $('bfbtAddPanel');\n\t\tvar toggle    = $('bfbtAddToggle');\n\t\tvar cancelBtn = $('bfbtAddCancel');\n\t\tvar confirmBtn= $('bfbtAddConfirm');\n\n\t\tvar locEl     = $('bfbt_location');\n\t\tvar inEl      = $('bfbt_dp1');\n\t\tvar outEl     = $('bfbt_dp2');\n\t\tvar minusBtn  = $('bfbt_guest_minus');\n\t\tvar plusBtn   = $('bfbt_guest_plus');\n\t\tvar guestVal  = $('bfbt_guest_count');\n\n\t\tfunction openPanel(){ if(panel) panel.hidden=false; }\n\t\tfunction closePanel(){ if(panel) panel.hidden=true; }\n\n\t\tif(toggle){\n\t\t  toggle.addEventListener('click', function(e){\n\t\t\te.preventDefault();\n\t\t\tif(panel.hidden){ openPanel(); } else { closePanel(); }\n\t\t  });\n\t\t}\n\t\tif(cancelBtn){\n\t\t  cancelBtn.addEventListener('click', function(e){\n\t\t\te.preventDefault();\n\t\t\tclosePanel();\n\t\t  });\n\t\t}\n\n\t\t\/* Flatpickr in Panel *\/\n\t\tvar fpOpts = {\n\t\t  altInput:true,\n\t\t  dateFormat:'Y-m-d',\n\t\t  altFormat:'d.m.Y',\n\t\t  locale:fpLocale(),\n\t\t  \/\/ Auf echten Mobilger\u00e4ten Flatpickr nicht auf \"native\" zur\u00fcckfallen lassen,\n\t\t  \/\/ sonst wird i.d.R. ein type=date Input genutzt und der Placeholder verschwindet.\n\t\t  disableMobile:true\n\t\t};\n\t\tif(window.flatpickr){\n\t\t  if(inEl)  flatpickr(inEl, fpOpts);\n\t\t  if(outEl) flatpickr(outEl, fpOpts);\n\t\t\n\t\t  \/\/ Placeholder auch auf Alt-Input setzen (wichtig, wenn Labels versteckt sind)\n\t\t  try{\n\t\t\tif(inEl){ inEl.setAttribute('placeholder','Check in'); }\n\t\t\tif(outEl){ outEl.setAttribute('placeholder','Check out'); }\n\t\t\tif(inEl && inEl._flatpickr && inEl._flatpickr.altInput){ inEl._flatpickr.altInput.setAttribute('placeholder','Check in'); }\n\t\t\tif(outEl && outEl._flatpickr && outEl._flatpickr.altInput){ outEl._flatpickr.altInput.setAttribute('placeholder','Check out'); }\n\t\t  }catch(e){}\n\t\t}\n\n\t\t\/* G\u00e4ste +\/- im Panel *\/\n\t\tfunction dec(){\n\t\t  var v=parseInt(guestVal.value||'1',10);\n\t\t  if(v>1){ guestVal.value=v-1; }\n\t\t}\n\t\tfunction inc(){\n\t\t  var v=parseInt(guestVal.value||'1',10);\n\t\t  guestVal.value=v+1;\n\t\t}\n\t\tif(minusBtn) minusBtn.addEventListener('click', dec);\n\t\tif(plusBtn)  plusBtn.addEventListener('click', inc);\n\n\t\t\/* neuen Eintrag \u00fcbernehmen *\/\n\t\tif(confirmBtn){\n\t\t  confirmBtn.addEventListener('click', function(e){\n\t\t\te.preventDefault();\n\n\t\t\t\/\/ Validierung\n\t\t\t[locEl,inEl,outEl].forEach(function(x){\n\t\t\t  if(x){ x.style.border='1px solid #CBD5E1'; }\n\t\t\t});\n\t\t\tvar ok=true;\n\t\t\tfunction fromFPDate(fpInput){\n\t\t\t  \/\/ zeigt TT.MM.JJJJ an\n\t\t\t  return (fpInput && fpInput._flatpickr && fpInput._flatpickr.selectedDates.length)\n\t\t\t\t? fpInput._flatpickr.formatDate(fpInput._flatpickr.selectedDates[0],'d.m.Y')\n\t\t\t\t: (fpInput && fpInput.value ? fpInput.value.trim() : '');\n\t\t\t}\n\n\t\t\tvar vLoc = (locEl && locEl.value.trim()) || '';\n\t\t\tvar vIn  = fromFPDate(inEl);\n\t\t\tvar vOut = fromFPDate(outEl);\n\t\t\tvar vG   = guestVal ? guestVal.value : '1';\n\n\t\t\tif(!vLoc){ if(locEl){locEl.style.border='1px solid red';} ok=false; }\n\t\t\tif(!vIn){ if(inEl){inEl.style.border='1px solid red';} ok=false; }\n\t\t\tif(!vOut){ if(outEl){outEl.style.border='1px solid red';} ok=false; }\n\t\t\tif(!ok) return;\n\n\t\t\t\/\/ push in items (Wohnung wird erst im Ergebnis\/Step 2 ausgew\u00e4hlt)\n\t\t\titems.push({\n\t\t\t  location:capitalizeLocation(vLoc),\n\t\t\t  checkin:vIn,\n\t\t\t  checkout:vOut,\n\t\t\t  guests:vG,\n\t\t\t  apartment: null\n\t\t\t});\n\n\t\t\t\/\/ UI aufr\u00e4umen\n\t\t\tif(locEl) locEl.value='';\n\t\t\tif(inEl  && inEl._flatpickr)  inEl._flatpickr.clear();\n\t\t\tif(outEl && outEl._flatpickr) outEl._flatpickr.clear();\n\t\t\tif(guestVal) guestVal.value='1';\n\n\t\t\trenderItemsList();\n\n\t\t\/\/ Results Seite: direkt Step 2 starten\n\t\tif(fromQuery){ currentStep = 1; }\n\t\t\tclosePanel();\n\t\t  });\n\t\t}\n\t  }\n\n\t  \/* ====== VALIDIERUNG FORM (Step 2) ====== *\/\n\t  function validateFormStep2(){\n\t\tvar form = document.getElementById('bfbt_form');\n\t\tif(!form) return true;\n\n\t\tvar requiredFields = form.querySelectorAll('[required], input[type=\"email\"]');\n\t\tvar ok = true;\n\n\t\t\/\/ Reset Klassen\n\t\trequiredFields.forEach(function(f){\n\t\t  if(f.classList) f.classList.remove('bfbt-invalid');\n\t\t  if(f.type === 'checkbox'){\n\t\t\tvar lbl = f.closest('label');\n\t\t\tif(lbl) lbl.classList.remove('bfbt-invalid-consent');\n\t\t  }\n\t\t});\n\n\t\trequiredFields.forEach(function(f){\n\t\t  if(f.type==='checkbox'){\n\t\t\tif(f.hasAttribute('required') && !f.checked){\n\t\t\t  var lbl2 = f.closest('label');\n\t\t\t  if(lbl2) lbl2.classList.add('bfbt-invalid-consent');\n\t\t\t  ok = false;\n\t\t\t}\n\t\t\treturn;\n\t\t  }\n\n\t\t  var val = String(f.value||'').trim();\n\n\t\t  \/\/ Pflicht leer?\n\t\t  if(f.hasAttribute('required') && !val){\n\t\t\tf.classList.add('bfbt-invalid');\n\t\t\tok = false;\n\t\t  }\n\n\t\t  \/\/ E-Mail pr\u00fcfen\n\t\t  if(f.type==='email' && val){\n\t\t\tvar re=\/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/;\n\t\t\tif(!re.test(val)){\n\t\t\t  f.classList.add('bfbt-invalid');\n\t\t\t  ok = false;\n\t\t\t}\n\t\t  }\n\t\t});\n\n\t\t\/\/ Fokus auf erstes ung\u00fcltiges Feld\n\t\tif(!ok){\n\t\t  try{\n\t\t\tvar firstBad = form.querySelector('.bfbt-invalid, .bfbt-invalid-consent input, input.bfbt-invalid, textarea.bfbt-invalid');\n\t\t\tif(firstBad && typeof firstBad.focus === 'function') firstBad.focus();\n\t\t  }catch(e){}\n\t\t}\n\n\t\treturn ok;\n\t  }\n\n\t  function collectFormData(){\n\t\treturn {\n\t\t  first_name : ($('first_name')||{}).value||'',\n\t\t  last_name  : ($('last_name')||{}).value||'',\n\t\t  email      : ($('email')||{}).value||'',\n\t\t  tel        : ($('contact_number')||{}).value||'',\n\t\t  message    : ($('message')||{}).value||''\n\t\t};\n\t  }\n\n\n\t  \/* ====== LIGHTBOX: Wohnungsbilder gro\u00df anzeigen ====== *\/\n\t  function bfbtGuessLargeImageUrl(u){\n\t\ttry{\n\t\t  if(!u) return u;\n\t\t  var url = String(u);\n\n\t\t  \/\/ WordPress Thumbnail-Suffix entfernen: -300x200.jpg \/ -150x150.webp etc.\n\t\t  \/\/ (nur wenn direkt vor der Dateiendung)\n\t\t  url = url.replace(\/-\\d+x\\d+(?=\\.(?:jpe?g|png|gif|webp)(?:\\?.*)?$)\/i, '');\n\n\t\t  \/\/ Falls Query-Parameter Gr\u00f6\u00dfen setzen (z.B. ?w=300&h=200), gr\u00f6\u00dfer machen.\n\t\t  \/\/ Wir lassen andere Parameter bestehen.\n\t\t  if(url.indexOf('?') !== -1){\n\t\t\tvar parts = url.split('?');\n\t\t\tvar base = parts[0];\n\t\t\tvar qs = parts.slice(1).join('?');\n\t\t\t\/\/ w\/h ersetzen oder erg\u00e4nzen\n\t\t\tif(\/(?:^|&)w=\\d+\/i.test(qs) || \/(?:^|&)h=\\d+\/i.test(qs)){\n\t\t\t  qs = qs\n\t\t\t\t.replace(\/(^|&)w=\\d+\/i, '$1w=1600')\n\t\t\t\t.replace(\/(^|&)h=\\d+\/i, '$1h=1200');\n\t\t\t  \/\/ falls nur w oder nur h vorhanden war, erg\u00e4nzen wir die zweite Dimension\n\t\t\t  if(!\/(?:^|&)w=\\d+\/i.test(qs)) qs += (qs ? '&' : '') + 'w=1600';\n\t\t\t  if(!\/(?:^|&)h=\\d+\/i.test(qs)) qs += (qs ? '&' : '') + 'h=1200';\n\t\t\t  url = base + '?' + qs;\n\t\t\t}\n\t\t  }\n\n\t\t  return url;\n\t\t}catch(e){\n\t\t  return u;\n\t\t}\n\t  }\n\n\n\n\t  \/\/ ====== Lightbox Gallery State ======\n\t  var bfbtLbUrls = [];\n\t  var bfbtLbIndex = 0;\n\n\t  function bfbtLbNormalizeUrls(input){\n\t\tif(!input) return [];\n\t\tif(typeof input === 'string') return [input];\n\t\tif(Array.isArray(input)) return input.slice();\n\t\treturn [];\n\t  }\n\n\t  function bfbtLbRender(){\n\t\tvar lb = document.getElementById('bfbtImageLightbox');\n\t\tvar im = document.getElementById('bfbtImageLightboxImg');\n\t\tvar c  = document.getElementById('bfbtImageLightboxCount');\n\t\tvar prevBtn = lb ? lb.querySelector('[data-bfbt-img-nav=\"-1\"]') : null;\n\t\tvar nextBtn = lb ? lb.querySelector('[data-bfbt-img-nav=\"1\"]') : null;\n\n\t\tif(!lb || !im) return;\n\t\tif(!bfbtLbUrls.length){\n\t\t  im.src = '';\n\t\t  if(c) c.textContent = '';\n\t\t  if(prevBtn) prevBtn.hidden = true;\n\t\t  if(nextBtn) nextBtn.hidden = true;\n\t\t  return;\n\t\t}\n\t\tif(bfbtLbIndex < 0) bfbtLbIndex = 0;\n\t\tif(bfbtLbIndex >= bfbtLbUrls.length) bfbtLbIndex = bfbtLbUrls.length - 1;\n\n\t\tvar url = bfbtLbUrls[bfbtLbIndex];\n\t\tim.src = bfbtGuessLargeImageUrl(url);\n\n\t\tvar multi = bfbtLbUrls.length > 1;\n\t\tif(prevBtn) prevBtn.hidden = !multi;\n\t\tif(nextBtn) nextBtn.hidden = !multi;\n\t\tif(c) c.textContent = multi ? ((bfbtLbIndex+1) + ' \/ ' + bfbtLbUrls.length) : '';\n\t  }\n\n\t  function openAptImageLightbox(urlsOrUrl, startIndex){\n\t\tvar urls = bfbtLbNormalizeUrls(urlsOrUrl).filter(function(u){ return !!u && String(u).indexOf('data:image') !== 0; });\n\t\tif(!urls.length) return;\n\n\t\tbfbtLbUrls = urls;\n\t\tbfbtLbIndex = (typeof startIndex === 'number' && isFinite(startIndex)) ? startIndex : 0;\n\n\t\tvar lb = document.getElementById('bfbtImageLightbox');\n\t\tif(!lb) return;\n\t\tlb.hidden = false;\n\t\tbfbtLbRender();\n\n\t\t\/\/ ESC + Pfeile\n\t\tdocument.addEventListener('keydown', bfbtLightboxEsc);\n\t  }\n\n\t  function closeAptImageLightbox(){\n\t\tvar lb = document.getElementById('bfbtImageLightbox');\n\t\tvar im = document.getElementById('bfbtImageLightboxImg');\n\t\tvar c  = document.getElementById('bfbtImageLightboxCount');\n\t\tbfbtLbUrls = [];\n\t\tbfbtLbIndex = 0;\n\t\tif(im) im.src = '';\n\t\tif(c) c.textContent = '';\n\t\tif(lb) lb.hidden = true;\n\t\tdocument.removeEventListener('keydown', bfbtLightboxEsc);\n\t  }\n\n\t  function bfbtLbGo(dir){\n\t\tif(!bfbtLbUrls.length) return;\n\t\tbfbtLbIndex = (bfbtLbIndex + dir + bfbtLbUrls.length) % bfbtLbUrls.length;\n\t\tbfbtLbRender();\n\t  }\n\n\t  function bfbtLightboxEsc(e){\n\t\tif(!e) return;\n\t\tif(e.key === 'Escape'){ closeAptImageLightbox(); return; }\n\t\t\/\/ Navigation nur wenn Lightbox offen\n\t\tvar lb = document.getElementById('bfbtImageLightbox');\n\t\tif(!lb || lb.hidden) return;\n\t\tif(e.key === 'ArrowLeft'){ e.preventDefault(); bfbtLbGo(-1); }\n\t\tif(e.key === 'ArrowRight'){ e.preventDefault(); bfbtLbGo(1); }\n\t  }\n\n\n\t  function wireImageLightbox(){\n\t\tvar lb = document.getElementById('bfbtImageLightbox');\n\t\tif(!lb) return;\n\n\t\tlb.addEventListener('click', function(e){\n\t\t  var t = e.target;\n\t\t  if(!t) return;\n\n\t\t  \/\/ Navigation\n\t\t  var nav = t.closest('[data-bfbt-img-nav]');\n\t\t  if(nav){\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\tvar dir = parseInt(nav.getAttribute('data-bfbt-img-nav'), 10) || 0;\n\t\t\tif(dir) bfbtLbGo(dir);\n\t\t\treturn;\n\t\t  }\n\n\t\t  \/\/ Close\n\t\t  if(t.getAttribute('data-bfbt-img-close') === '1' || t.classList.contains('bfbt-imglightbox__backdrop')){\n\t\t\tcloseAptImageLightbox();\n\t\t  }\n\t\t});\n\t  }\n\n\t  \n\n\t\t  \/\/ HTML escaper (kann in anderen Script-Bl\u00f6cken fehlen)\n\t\t  \/\/ -> defensiv global verf\u00fcgbar machen, damit openInquiryModal nie crasht\n\t\t  if (typeof window.escapeHtml !== 'function'){\n\t\t\twindow.escapeHtml = function(str){\n\t\t\t  return String(str)\n\t\t\t\t.replace(\/&\/g,'&amp;')\n\t\t\t\t.replace(\/<\/g,'&lt;')\n\t\t\t\t.replace(\/>\/g,'&gt;')\n\t\t\t\t.replace(\/\"\/g,'&quot;')\n\t\t\t\t.replace(\/\\'\/g,'&#039;');\n\t\t\t};\n\t\t  }\n\t\t  \/\/ lokale Alias-Variante, falls im Scope direkt mit escapeHtml() gearbeitet wird\n\t\t  var escapeHtml = window.escapeHtml;\n\n\t  \n\t  \/* ====== Lightbox (Galerie) ====== *\/\n\t  var bfbtLbState = { urls: [], idx: 0 };\n\n\t  function bfbtEnsureLightbox(){\n\t\tvar lb = document.getElementById('bfbtLightbox');\n\t\tif(!lb){\n\t\t\tlb = document.createElement('div');\n\t\t\tlb.id = 'bfbtLightbox';\n\t\t\tlb.className = 'bfbt-lightbox';\n\t\t\tlb.hidden = true;\n\t\t\tlb.innerHTML = ''+\n\t\t\t  '<div class=\"bfbt-lightbox__backdrop\" data-bfbt-lb-close=\"1\"><\/div>'+\n\t\t\t  '<div class=\"bfbt-lightbox__dialog\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Bildansicht\">'+\n\t\t\t\t'<button type=\"button\" class=\"bfbt-lightbox__close\" aria-label=\"Schlie\u00dfen\" data-bfbt-lb-close=\"1\">\u00d7<\/button>'+\n\t\t\t\t'<button type=\"button\" class=\"bfbt-lightbox__nav bfbt-lightbox__nav--prev\" aria-label=\"Vorheriges Bild\">\u2039<\/button>'+\n\t\t\t\t'<a class=\"bfbt-lightbox__a\" href=\"\" target=\"_blank\" rel=\"noopener\" aria-label=\"Originalbild in neuem Tab \u00f6ffnen\">'+\n\t\t\t\t  '<img decoding=\"async\" class=\"bfbt-lightbox__img\" src=\"\" alt=\"\">'+\n\t\t\t\t'<\/a>'+\n\t\t\t\t'<div class=\"bfbt-lightbox__linkwrap\"><a class=\"bfbt-lightbox__link\" href=\"\" target=\"_blank\" rel=\"noopener\">Original \u00f6ffnen<\/a><\/div>'+\n\t\t\t\t'<button type=\"button\" class=\"bfbt-lightbox__nav bfbt-lightbox__nav--next\" aria-label=\"N\u00e4chstes Bild\">\u203a<\/button>'+\n\t\t\t  '<\/div>';\n\t\t\tdocument.body.appendChild(lb);\n\t\t}\n\n\t\t\/\/ einmalige Listener\n\t\tif(lb.__bfbtInit) return lb;\n\t\tlb.__bfbtInit = true;\n\n\t\tvar img = lb.querySelector('.bfbt-lightbox__img');\n\t\tvar a   = lb.querySelector('.bfbt-lightbox__a');\n\t\tvar lnk = lb.querySelector('.bfbt-lightbox__link');\n\t\tvar prev = lb.querySelector('.bfbt-lightbox__nav--prev');\n\t\tvar next = lb.querySelector('.bfbt-lightbox__nav--next');\n\n\t\tfunction render(){\n\t\t  if(!img) return;\n\t\t  var u = (bfbtLbState.urls && bfbtLbState.urls.length) ? String(bfbtLbState.urls[bfbtLbState.idx]||'') : '';\n\t\t  \/\/ M\u00f6glichst gro\u00df anzeigen\n\t\t  var big = u ? bfbtGuessLargeImageUrl(u) : '';\n\t\t  img.src = big || '';\n\t\t  if(a) a.href = big || u || '';\n\t\t  if(lnk) lnk.href = big || u || '';\n\t\t}\n\t\tfunction close(){\n\t\t  lb.hidden = true;\n\t\t  document.body.classList.remove('bfbt-lightbox-open');\n\t\t}\n\t\tfunction go(d){\n\t\t  if(!bfbtLbState.urls || !bfbtLbState.urls.length) return;\n\t\t  bfbtLbState.idx = (bfbtLbState.idx + d + bfbtLbState.urls.length) % bfbtLbState.urls.length;\n\t\t  render();\n\t\t}\n\n\t\tlb.addEventListener('click', function(e){\n\t\t  var t = e.target;\n\t\t  if(t && t.getAttribute && t.getAttribute('data-bfbt-lb-close') === '1'){\n\t\t\te.preventDefault();\n\t\t\tclose();\n\t\t  }\n\t\t});\n\t\tif(prev) prev.addEventListener('click', function(e){ e.preventDefault(); go(-1); });\n\t\tif(next) next.addEventListener('click', function(e){ e.preventDefault(); go( 1); });\n\n\t\t\/\/ ESC\n\t\tdocument.addEventListener('keydown', function(e){\n\t\t  if(lb.hidden) return;\n\t\t  if(e.key === 'Escape'){ close(); }\n\t\t  if(e.key === 'ArrowLeft'){ go(-1); }\n\t\t  if(e.key === 'ArrowRight'){ go(1); }\n\t\t});\n\n\t\t\/\/ Swipe auf dem Bild\n\t\tvar startX = null;\n\t\tif(img){\n\t\t  img.addEventListener('touchstart', function(e){\n\t\t\tif(!e.touches || !e.touches[0]) return;\n\t\t\tstartX = e.touches[0].clientX;\n\t\t  }, {passive:true});\n\t\t  img.addEventListener('touchend', function(e){\n\t\t\tif(startX === null) return;\n\t\t\tvar endX = (e.changedTouches && e.changedTouches[0]) ? e.changedTouches[0].clientX : startX;\n\t\t\tvar dx = endX - startX;\n\t\t\tstartX = null;\n\t\t\tif(Math.abs(dx) > 40){\n\t\t\t  go(dx > 0 ? -1 : 1);\n\t\t\t}\n\t\t  }, {passive:true});\n\t\t}\n\n\t\tlb.__bfbtRender = render;\n\t\tlb.__bfbtClose = close;\n\t\tlb.__bfbtGo = go;\n\n\t\treturn lb;\n\t  }\n\n\t  function bfbtOpenLightbox(urls, startIdx){\n\t\tvar lb = bfbtEnsureLightbox();\n\t\tif(!lb) return;\n\t\tbfbtLbState.urls = Array.isArray(urls) ? urls.filter(Boolean).map(String) : [];\n\t\tbfbtLbState.idx = Math.max(0, Math.min(parseInt(startIdx||0,10) || 0, bfbtLbState.urls.length-1));\n\t\tlb.hidden = false;\n\t\tdocument.body.classList.add('bfbt-lightbox-open');\n\t\tif(typeof lb.__bfbtRender === 'function') lb.__bfbtRender();\n\t  }\n\n\n\/* ====== MODAL: Anfrageformular ====== *\/\n\t  function openInquiryModal(apt, it){\n\t\tvar modal = $('bfbtInquiryModal');\n\t\tif(!modal) return;\n\n\t\t\/\/ Subtitle\n\t\tvar sub = $('bfbtInquirySubtitle');\n\t\tvar title = (apt && apt.title) ? String(apt.title) : '';\n\t\tif(sub){\n  \/\/ Ort\/Zeitraum bevorzugt aus dem zugeh\u00f6rigen Ergebnis-Item (Step 2), fallback auf Eingabefelder\n  var loc = (it && it.location) ? String(it.location) : '';\n  var ci  = (it && it.checkin)  ? String(it.checkin)  : '';\n  var co  = (it && it.checkout) ? String(it.checkout) : '';\n  if(!loc){ try{ loc = (document.getElementById('location-input')||{}).value || ''; }catch(e){} }\n  if(!ci ){ try{ ci  = (document.getElementById('dp1')||{}).value || ''; }catch(e){} }\n  if(!co ){ try{ co  = (document.getElementById('dp2')||{}).value || ''; }catch(e){} }\n\n  \/\/ Anfrage-Datum (dd.mm.yyyy)\n  var d = new Date();\n  var dd = String(d.getDate()).padStart(2,'0');\n  var mm = String(d.getMonth()+1).padStart(2,'0');\n  var yyyy = d.getFullYear();\n  var today = dd + '.' + mm + '.' + yyyy;\n\n  var parts = [];\n  if(title) parts.push('Wohnungs Titel ' + title);\n  if(loc) parts.push(loc);\n  parts.push('Anfrage am ' + today);\n  if(ci || co){\n    var z = (ci && co) ? (ci + ' \u2013 ' + co) : (ci || co);\n    parts.push(z);\n  }\n  sub.textContent = parts.join(' - ');\n}\n\n\t\t\/\/ Apartment-Infos unter dem Titel anzeigen (Details + Werte aus Ergebnis-Karte)\n\t\tvar infoBox = $('bfbtInquiryAptInfo');\n\t\tif(infoBox){\n\t\t  var h = '';\n\n\t\t  var badges = [];\n\t\t  if(apt && apt.rooms) badges.push('<span class=\"bfbt-badge\">'+escapeHtml(String(apt.rooms))+'<\/span>');\n\t\t  if(apt && apt.size)  badges.push('<span class=\"bfbt-badge\">'+escapeHtml(t('sizePrefix') + String(apt.size))+'<\/span>');\n\t\t  if(apt && apt.beds)  badges.push('<span class=\"bfbt-badge\">'+escapeHtml(t('bedsPrefix') + String(apt.beds))+'<\/span>');\n\n\t\t  if(badges.length){\n\t\t\th += '<div class=\"bfbt-flat-badges\">' + badges.join('') + '<\/div>';\n\t\t  }\n\n\t\t  \/\/ Ausstattung-Icons wie in der Ergebnisliste\n\t\t  h += '<div class=\"bfbt-flat-amenities\">'\n\t\t\t+ '<span class=\"bfbt-amenity\" title=\"'+escapeHtml(t('amenityWash'))+'\" aria-label=\"'+escapeHtml(t('amenityWash'))+'\">'\n\t\t\t  + '<img decoding=\"async\" class=\"bfbt-amenity-img\" src=\"'+escapeHtml((bfbtAmenityIcons && bfbtAmenityIcons.wash ? bfbtAmenityIcons.wash : ''))+'\" alt=\"'+escapeHtml(t('amenityWash'))+'\" loading=\"lazy\" \/>'\n\t\t\t+ '<\/span>'\n\t\t\t+ '<span class=\"bfbt-amenity\" title=\"'+escapeHtml(t('amenityPark'))+'\" aria-label=\"'+escapeHtml(t('amenityPark'))+'\">'\n\t\t\t  + '<img decoding=\"async\" class=\"bfbt-amenity-img\" src=\"'+escapeHtml((bfbtAmenityIcons && bfbtAmenityIcons.park ? bfbtAmenityIcons.park : ''))+'\" alt=\"'+escapeHtml(t('amenityPark'))+'\" loading=\"lazy\" \/>'\n\t\t\t+ '<\/span>'\n\t\t\t+ '<span class=\"bfbt-amenity\" title=\"'+escapeHtml(t('amenityBath'))+'\" aria-label=\"'+escapeHtml(t('amenityBath'))+'\">'\n\t\t\t  + '<img decoding=\"async\" class=\"bfbt-amenity-img\" src=\"'+escapeHtml((bfbtAmenityIcons && bfbtAmenityIcons.bath ? bfbtAmenityIcons.bath : ''))+'\" alt=\"'+escapeHtml(t('amenityBath'))+'\" loading=\"lazy\" \/>'\n\t\t\t+ '<\/span>'\n\t\t\t+ '<span class=\"bfbt-amenity\" title=\"'+escapeHtml(t('amenityWifi'))+'\" aria-label=\"'+escapeHtml(t('amenityWifi'))+'\">'\n\t\t\t  + '<img decoding=\"async\" class=\"bfbt-amenity-img\" src=\"'+escapeHtml((bfbtAmenityIcons && bfbtAmenityIcons.wifi ? bfbtAmenityIcons.wifi : ''))+'\" alt=\"'+escapeHtml(t('amenityWifi'))+'\" loading=\"lazy\" \/>'\n\t\t\t+ '<\/span>'\n\t\t  + '<\/div>';\n\n\t\t  \/\/ Bilder-Galerie (alle Bilder klein, horizontal swipen\/scrollen + Pfeile)\n\t\t  \/\/ Hinweis: Reihenfolge bleibt wie im Backend.\n\t\t  \/\/ Thumbnails f\u00fcr die kleine Reihe + Full URLs f\u00fcr Lightbox\n\t\t  var imgsThumb = (apt && Array.isArray(apt.images) && apt.images.length) ? apt.images.slice() : [];\n\t\t  var imgsFull  = (apt && Array.isArray(apt.images_full) && apt.images_full.length) ? apt.images_full.slice() : imgsThumb.slice();\n\t\t  if(imgsThumb.length){\n\t\t\th += '<div class=\"bfbt-inquiry-gallery\" aria-label=\"Bilder der Wohnung\">'\n\t\t\t  + '<button type=\"button\" class=\"bfbt-inquiry-gallery__nav bfbt-inquiry-gallery__nav--prev\" aria-label=\"Vorherige Bilder\">\u2039<\/button>'\n\t\t\t  + '<div class=\"bfbt-inquiry-gallery__track\" tabindex=\"0\">'\n\t\t\t  + imgsThumb.map(function(u){\n\t\t\t\t  u = String(u||'');\n\t\t\t\t  if(!u) return '';\n\t\t\t\t  return '<div class=\"bfbt-inquiry-gallery__item\">'\n\t\t\t\t\t+ '<img decoding=\"async\" src=\"'+escapeHtml(u)+'\" alt=\"\" loading=\"lazy\" \/>'\n\t\t\t\t\t+ '<\/div>';\n\t\t\t  }).join('')\n\t\t\t  + '<\/div>'\n\t\t\t  + '<button type=\"button\" class=\"bfbt-inquiry-gallery__nav bfbt-inquiry-gallery__nav--next\" aria-label=\"N\u00e4chste Bilder\">\u203a<\/button>'\n\t\t\t  + '<\/div>';\n\t\t  }\n\n\t\t  \/\/ Preis\n\t\t  var priceNum2 = (apt && apt.price_pp) ? formatPriceEUR(apt.price_pp) : '';\n\t\t  if(priceNum2){\n\t\t\th += '<div style=\"margin-top:10px;\"><strong>'+escapeHtml(priceNum2)+' \u20ac<\/strong> <span style=\"color:#64748b;\">('+escapeHtml(t('avgPerNightPerson'))+')<\/span><\/div>';\n\t\t  }\n\n\t\t  \/\/ Details (Backend-Feld)\n\t\t  var det = (apt && apt.details) ? String(apt.details).trim() : '';\n\t\t  if(det){\n\t\t\th += '<div class=\"bfbt-inquiry-details\"><strong>Details:<\/strong><br>' + escapeHtml(det).replace(\/\\n\/g,'<br>') + '<\/div>';\n\t\t  }\n\n\t\t  infoBox.innerHTML = h || '';\n\n\t\t  \/\/ Galerie-Nav aktivieren (pro \u00d6ffnen neu, ohne globale Doppel-Listener)\n\t\t  try{\n\t\t\tvar g = infoBox.querySelector('.bfbt-inquiry-gallery');\n\t\t\tif(g){\n\t\t\t  var track = g.querySelector('.bfbt-inquiry-gallery__track');\n\t\t\t  var prev = g.querySelector('.bfbt-inquiry-gallery__nav--prev');\n\t\t\t  var next = g.querySelector('.bfbt-inquiry-gallery__nav--next');\n\t\t\t  var step = function(){\n\t\t\t\tvar item = g.querySelector('.bfbt-inquiry-gallery__item');\n\t\t\t\tif(!item) return 240;\n\t\t\t\tvar r = item.getBoundingClientRect();\n\t\t\t\t\/\/ pro Klick um 1 Bild weiterscrollen (nat\u00fcrliches \"Durchswipen\")\n\t\t\t\treturn (r.width || 160) + 8;\n\t\t\t  };\n\t\t\t  if(prev && track){\n\t\t\t\tprev.onclick = function(){\n\t\t\t\t  track.scrollBy({ left: -step(), behavior: 'smooth' });\n\t\t\t\t};\n\t\t\t  }\n\t\t\t  if(next && track){\n\t\t\t\tnext.onclick = function(){\n\t\t\t\t  track.scrollBy({ left: step(), behavior: 'smooth' });\n\t\t\t\t};\n\t\t\t  }\n\t\t\t  \/\/ Klick auf Thumbnail -> Lightbox (mit Pfeilen + Swipe)\n\t\t\t  if(track){\n\t\t\t\ttry{\n\t\t\t\t  var thumbs = track.querySelectorAll('img');\n\t\t\t\t  thumbs.forEach(function(im, idx){\n\t\t\t\t\tim.style.cursor = 'zoom-in';\n\t\t\t\t\tim.onclick = function(ev){\n\t\t\t\t\t  try{ ev.preventDefault(); ev.stopPropagation(); }catch(e){}\n\t\t\t\t  bfbtOpenLightbox(imgsFull, idx);\n\t\t\t\t\t};\n\t\t\t\t  });\n\t\t\t\t}catch(e){}\n\t\t\t  }\n\n\t\t\t}\n\t\t  }catch(e){}\n\t\t}\n\n\t\t\/\/ WhatsApp Link (mit Wohnungstitel)\n\t\tvar wa = $('bfbtWhatsappBtn');\n\t\tif(wa){\n\t\t  var phone = '4915565411826'; \/\/ international ohne +\n\t\t  var msg = 'Hallo, ich m\u00f6chte eine Buchungsanfrage stellen.';\nvar locMsg = (it && it.location) ? String(it.location) : '';\nvar ciMsg  = (it && it.checkin)  ? String(it.checkin)  : '';\nvar coMsg  = (it && it.checkout) ? String(it.checkout) : '';\nif(!locMsg){ try{ locMsg = (document.getElementById('location-input')||{}).value || ''; }catch(e){} }\nif(!ciMsg ){ try{ ciMsg  = (document.getElementById('dp1')||{}).value || ''; }catch(e){} }\nif(!coMsg ){ try{ coMsg  = (document.getElementById('dp2')||{}).value || ''; }catch(e){} }\n\/\/ Anfrage-Datum (dd.mm.yyyy)\nvar d2 = new Date();\nvar dd2 = String(d2.getDate()).padStart(2,'0');\nvar mm2 = String(d2.getMonth()+1).padStart(2,'0');\nvar yyyy2 = d2.getFullYear();\nvar today2 = dd2 + '.' + mm2 + '.' + yyyy2;\nif(title){ msg += ' Wohnung: ' + title; }\nif(locMsg){ msg += ' | Ort: ' + locMsg; }\nmsg += ' | Anfrage am: ' + today2;\nif(ciMsg || coMsg){ msg += ' | Zeitraum: ' + ((ciMsg && coMsg) ? (ciMsg + ' \u2013 ' + coMsg) : (ciMsg || coMsg)); }\n\t\t  try{\n\t\t\twa.href = 'https:\/\/wa.me\/' + phone + '?text=' + encodeURIComponent(msg);\n\t\t  }catch(e){\n\t\t\twa.href = '#';\n\t\t  }\n\t\t}\n\n\t\tmodal.hidden = false;\n\t\tdocument.body.classList.add('bfbt-modal-open');\n\n\t\t\/\/ Fokus auf erstes Feld im Formular\n\t\ttry{\n\t\t  var first = modal.querySelector('input,textarea,select,button');\n\t\t  if(first) first.focus();\n\t\t}catch(e){}\n\n\t\t\/\/ ESC zum Schlie\u00dfen\n\t\tdocument.addEventListener('keydown', bfbtModalEsc);\n\t  }\n\n\t  function closeInquiryModal(){\n\t\tvar modal = $('bfbtInquiryModal');\n\t\tif(!modal) return;\n\t\tmodal.hidden = true;\n\t\tdocument.body.classList.remove('bfbt-modal-open');\n\t\tdocument.removeEventListener('keydown', bfbtModalEsc);\n\t  }\n\n\t  function bfbtModalEsc(e){\n\t\tif(e && e.key === 'Escape'){\n\t\t  closeInquiryModal();\n\t\t}\n\t  }\n\n\t  function wireInquiryModalEvents(){\n\t\tvar inquiryClose = $('bfbtInquiryClose');\n\t\tvar inquirySubmit = $('bfbtModalSubmitBtn');\n\t\tvar inquiryModal = $('bfbtInquiryModal');\n\t\tvar btnCloseModal= $('bfbtCloseModal');\n\n\t\tif(inquiryClose){\n\t\t  inquiryClose.addEventListener('click', function(e){\n\t\t\te.preventDefault();\n\t\t\tcloseInquiryModal();\n\t\t  });\n\t\t}\n\t\tif(btnCloseModal){\n\t\t  btnCloseModal.addEventListener('click', function(e){\n\t\t\te.preventDefault();\n\t\t\tcloseInquiryModal();\n\t\t  });\n\t\t}\n\t\t\/\/ Backdrop click\n\t\tif(inquiryModal){\n\t\t  inquiryModal.addEventListener('click', function(e){\n\t\t\tvar t = e.target;\n\t\t\tif(t && (t.getAttribute('data-bfbt-close')==='1' || t.classList.contains('bfbt-modal__backdrop'))){\n\t\t\t  closeInquiryModal();\n\t\t\t}\n\t\t  });\n\t\t}\n\n\t\t\/\/ Submit\n\t\tif(inquirySubmit){\n\t\t  inquirySubmit.addEventListener('click', function(e){\n\t\t\te.preventDefault();\n\n\t\t\t\/\/ Formular-Validierung im Modal (rot markieren)\n\t\t\tif(!validateFormStep2()){\n\t\t\t  return;\n\t\t\t}\n\n\t\t\t\/\/ Abschicken (inkl. Apartment-Check + AJAX)\n\t\t\tsubmitFinal();\n\t\t  });\n\t\t}\n\n\t\t\/\/ Live: Invalid-Markierung beim Tippen entfernen\n\t\tdocument.addEventListener('input', function(ev){\n\t\t  var t = ev.target;\n\t\t  if(!t) return;\n\t\t  try{\n\t\t\tif(t.closest && t.closest('#bfbt_form')){\n\t\t\t  if(t.classList) t.classList.remove('bfbt-invalid');\n\t\t\t}\n\t\t  }catch(e){}\n\t\t});\n\t\tdocument.addEventListener('change', function(ev){\n\t\t  var t = ev.target;\n\t\t  if(!t) return;\n\t\t  try{\n\t\t\tif(t.id === 'privacy_consent'){\n\t\t\t  var lbl = t.closest('label');\n\t\t\t  if(lbl) lbl.classList.remove('bfbt-invalid-consent');\n\t\t\t}\n\t\t  }catch(e){}\n\t\t});\n\t  }\n\n\n\n\/* ====== REVIEW-F\u00fcllung (Step 3) ====== *\/\n\t  function fillReview(){\n\t\t\/\/ Anfragen-Liste in Step3\n\t\tvar listWrap = $('bfbtReviewItems');\n\t\tif(listWrap){\n\t\t  listWrap.innerHTML='';\n\t\t  items.forEach(function(it){\n\t\t\tvar row = el('div','booking-active-items-container');\n\n\t\t\tvar locTxt2 = it.location || '';\n\t\t\tif(it.apartment && it.apartment.title){ locTxt2 += ' ('+it.apartment.title+')'; }\n\t\t\trow.appendChild(el('div','booking-input-container', locTxt2));\n\t\t\trow.appendChild(el('div','booking-input-container', it.checkin));\n\t\t\trow.appendChild(el('div','booking-input-container', it.checkout));\n\n\t\t\t\/\/ letzte Spalte jetzt NUR G\u00e4ste (kein Trash in Review)\n\t\t\tvar lastCol = el('div','booking-input-container booking-input-actions');\n\t\t\tlastCol.innerHTML = '<span class=\"bfbt-guests-read\">'+it.guests+'<\/span>';\n\t\t\trow.appendChild(lastCol);\n\n\t\t\tlistWrap.appendChild(row);\n\t\t  });\n\t\t}\n\n\t\t\/\/ Formulardaten in Step3\n\t\tvar formBox = $('bfbtReviewForm');\n\t\tif(formBox){\n\t\t  formBox.innerHTML='';\n\t\t  var fd = collectFormData();\n\n\t\t  function addRow(label,val){\n\t\t\tvar r=el('div','bfbt-row');\n\t\t\tvar k=el('div','bfbt-key',label);\n\t\t\tvar v=el('div','bfbt-val',val||'\u2014');\n\t\t\tr.appendChild(k);\n\t\t\tr.appendChild(v);\n\t\t\tformBox.appendChild(r);\n\t\t  }\n\n\t\t  addRow('Firmenname',          fd.company_name);\n\t\t  addRow('E-Mail',              fd.email);\n\t\t  addRow('Ansprechpartner',     fd.contact_person);\n\t\t  addRow('Kontaktnummer',       fd.tel);\n\t\t  addRow('Projektname',         fd.project_name);\n\t\t  addRow('Einsatzort',          fd.working_location);\n\t\t  addRow('G\u00e4ste pro Zimmer',    fd.guest_per_room);\n\t\t  addRow('Budget p.P.\/Tag',     fd.budget);\n\t\t  if(fd.message && fd.message.trim()){\n\t\t\taddRow('Nachricht', fd.message.trim());\n\t\t  }\n\t\t}\n\t  }\n\n\t  \/* ====== SENDEN (Step 3 -> AJAX) ====== *\/\n\t  function scheduleRedirect(ms){\n\t\tsetTimeout(function(){\n\t\t  \/\/ Nach erfolgreicher Anfrage direkt zur Danke-Seite weiterleiten\n\t\t  var url = (typeof window.bfbtThankYouUrl !== 'undefined') ? window.bfbtThankYouUrl : (typeof bfbtThankYouUrl !== 'undefined' ? bfbtThankYouUrl : '');\n\t\t  url = (url && String(url).trim()) ? url : \"https:\/\/chaker-apartments.com\/thank-you\/\";\n\t\t  window.location.href = url;\n\t\t}, ms);\n\t  }\n\n\t  function openModal(){\n\t\tvar m=$('bfbtModal');\n\t\tif(m) m.hidden=false;\n\t  }\n\t  function closeModal(){\n\t\tvar m=$('bfbtModal');\n\t\tif(m) m.hidden=true;\n\t  }\n\n\t  function submitFinal(){\n\t\tif(!items.length){\n\t\t  alert('Bitte f\u00fcgen Sie mindestens eine Anfrage hinzu.');\n\t\t  return;\n\t\t}\n\t\tif(!validateApartmentChoices()){\n\t\t  alert('Bitte w\u00e4hlen Sie pro Anfrage eine Wohnung aus.');\n\t\t  return;\n\t\t}\n\t\tif(!validateFormStep2()){\n\t\t  \/\/ Felder werden rot markiert\n\t\t  return;\n\t\t}\n\n\t\tvar formData = collectFormData();\n\n\t\tvar nextBtn = $('bfbtModalSubmitBtn') || $('bfbtSubmitFinal');\n\t\tvar originalText = nextBtn ? nextBtn.textContent : '';\n\t\tif(nextBtn) nextBtn.textContent='Wird gesendet\u2026';\n\n\t\tvar ajaxUrl = \"https:\/\/chaker-apartments.com\/wp-admin\/admin-ajax.php\";\n\n\t\tvar payload = {\n\t\t  action: 'bfbt_process_booking',\n\t\t  booking_items: JSON.stringify(items),\n\t\t  form_data: JSON.stringify(formData),\n\t\t  \/\/ Snapshot der Wohnungen inkl. Details\/Bilder f\u00fcr die E-Mail\n\t\t  apartments_snapshot: JSON.stringify(apartments),\n\t\t  nonce: ''\n\t\t};\n\n\t\tfunction onDone(){\n\t\t  if(nextBtn) nextBtn.textContent = originalText;\n\t\t}\n\t\tfunction onSuccess(resp){\n\t\t  if(resp && resp.success){\n\t\t\t\/\/ Keine Erfolgsmeldung anzeigen, sondern direkt weiterleiten\n\t\t\tscheduleRedirect(0);\n\t\t  } else {\n\t\t\talert('Senden fehlgeschlagen. Bitte erneut versuchen.');\n\t\t  }\n\t\t}\n\t\tfunction onError(){\n\t\t  alert('Netzwerk-\/Serverfehler. Bitte sp\u00e4ter erneut versuchen.');\n\t\t}\n\n\t\tif(typeof jQuery!=='undefined'){\n\t\t  jQuery.ajax({\n\t\t\turl: ajaxUrl,\n\t\t\ttype: \"POST\",\n\t\t\tdataType: \"json\",\n\t\t\tdata: payload,\n\t\t\tsuccess:onSuccess,\n\t\t\terror:onError,\n\t\t\tcomplete:onDone\n\t\t  });\n\t\t} else {\n\t\t  fetch(ajaxUrl,{\n\t\t\tmethod:'POST',\n\t\t\theaders:{'Content-Type':'application\/x-www-form-urlencoded;charset=UTF-8'},\n\t\t\tbody: new URLSearchParams(payload)\n\t\t  })\n\t\t  .then(r=>r.json())\n\t\t  .then(onSuccess)\n\t\t  .catch(onError)\n\t\t  .finally(onDone);\n\t\t}\n\t  }\n\n\t  \/* ====== STEP NAVIGATION (2 Steps total) ======\n\t\t Step Indexes:\n\t\t   0 => Step1 (Anfrage)\n\t\t   1 => Step2 (Formular)\n\t\t   2 => Step3 (Review & Abschicken)\n\t  *\/\n\t  var currentStep = 0;\n\n\t  function updateSteps(){\n\t\tvar contents = document.querySelectorAll('.step-content');\n\t\tvar boxes    = document.querySelectorAll('.step-box');\n\t\tvar addBtn   = $('bfbtAddToggle');\n\n\t\tcontents.forEach(c => c.classList.remove('active'));\n\t\tboxes.forEach(b => b.classList.remove('active'));\n\n\t\tif(contents[currentStep]) contents[currentStep].classList.add('active');\n\t\tif(boxes[currentStep])   boxes[currentStep].classList.add('active');\n\n\t\t\/\/ \"Weitere hinzuf\u00fcgen\" Button nur in Step1 sichtbar\n\t\tif(addBtn){\n\t\t  addBtn.style.display = (currentStep===0 ? 'inline-flex' : 'none');\n\t\t}\n\n\n\t\t\/\/ Wenn wir in Step2 landen => Ergebnis + Wohnungen rendern\n\t\tif(currentStep===1){\n\t\t  renderResultsAndApartmentChoices();\n\t\t}\n\n\t\t\/\/ Wenn wir in Step3 landen => Review f\u00fcllen\n\t\tif(currentStep===2){\n\t\t  fillReview();\n\t\t}\n\t  }\n\n\t  \/* ====== EVENT HANDLER ====== *\/\n\t  window.addEventListener('load', function(){\n\t\t\/\/ Anfrage aus URL \u00fcbernehmen (location\/checkin\/checkout\/guests)\n\t\tvar hasParams = initFromQuery();\n\n\t\t\/\/ Fallback: wenn keine URL-Parameter, trotzdem eine \u201eleere\u201c Anfrage anlegen,\n\t\t\/\/ damit die Wohnungen angezeigt werden und das Modal funktioniert.\n\t\tif(!items.length){\n\t\t\titems.push({ location:'', checkin:'', checkout:'', guests:'1', apartment:null });\n\t\t}\n\n\t\t\/\/ Wohnungen direkt anzeigen (ohne Step-System)\n\t\trenderResultsAndApartmentChoices();\n\n\t\t\/\/ Bild-Lichtbox\n\t\twireImageLightbox();\n\n\t\t\/\/ Modal-Buttons\/Close\/ESC\n\t\twireInquiryModalEvents();\n\t  });\n\t})();\n\t<\/script>\n\n\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Twoje zapytanie<\/p>","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"_angie_page":false,"footnotes":""},"class_list":["post-1866","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/chaker-apartments.com\/pl\/wp-json\/wp\/v2\/pages\/1866","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/chaker-apartments.com\/pl\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/chaker-apartments.com\/pl\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/chaker-apartments.com\/pl\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/chaker-apartments.com\/pl\/wp-json\/wp\/v2\/comments?post=1866"}],"version-history":[{"count":20,"href":"https:\/\/chaker-apartments.com\/pl\/wp-json\/wp\/v2\/pages\/1866\/revisions"}],"predecessor-version":[{"id":2740,"href":"https:\/\/chaker-apartments.com\/pl\/wp-json\/wp\/v2\/pages\/1866\/revisions\/2740"}],"wp:attachment":[{"href":"https:\/\/chaker-apartments.com\/pl\/wp-json\/wp\/v2\/media?parent=1866"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}