{"id":94483,"date":"2026-08-01T19:10:03","date_gmt":"2026-08-01T17:10:03","guid":{"rendered":"https:\/\/bno-travel.com\/overnatting-i-tignes-val-disere\/"},"modified":"2026-08-10T17:20:06","modified_gmt":"2026-08-10T15:20:06","slug":"overnatting-i-tignes-val-disere","status":"publish","type":"page","link":"https:\/\/bno-travel.com\/de\/overnatting-i-tignes-val-disere\/","title":{"rendered":"Tignes\u2013Val d\u2019Is\u00e8re"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"94483\" class=\"elementor elementor-94483 elementor-93223\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4bb04347 e-flex e-con-boxed e-con e-parent\" data-id=\"4bb04347\" 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-589bdb4 elementor-widget elementor-widget-html\" data-id=\"589bdb4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section class=\"bno-area-hero bno-area-hero--premium\" style=\" background-color: #0c1a38; background-image: linear-gradient( rgba(10, 18, 28, 0.42), rgba(10, 18, 28, 0.58) ), url('https:\/\/bno-travel.com\/wp-content\/uploads\/2026\/05\/valdisere.jpg'); background-position: center; background-size: cover; background-repeat: no-repeat; \">\r\n  <div class=\"bno-shell\">\r\n    <div class=\"bno-area-hero__content\">\r\n\r\n      <span class=\"bno-eyebrow\">\r\n        Tignes\u2013Val d\u2019Is\u00e8re \u00b7 Frankreich\r\n      <\/span>\r\n\r\n      <h1>\r\n        Unterk\u00fcnfte in Tignes\u2013Val d\u2019Is\u00e8re \u2013 die passende Ferienunterkunft f\u00fcr Ihre Reise finden\r\n      <\/h1>\r\n\r\n      <p class=\"bno-lead\">\r\n        Entdecken Sie handverlesene Ferienwohnungen in Val d\u2019Is\u00e8re und Tignes\u2013Val d\u2019Is\u00e8re. Finden Sie eine Ferienunterkunft, die ganzj\u00e4hrig eine komfortable Basis zum Skifahren, f\u00fcr Bergerlebnisse und aktive Aufenthalte bietet.\r\n      <\/p>\r\n\r\n      <div class=\"bno-actions\">\r\n\r\n        <a href=\"#enheter\" class=\"bno-btn bno-btn--primary\">\r\n          Ferienunterk\u00fcnfte ansehen\r\n        <\/a>\r\n\r\n        <a href=\"#kart\" class=\"bno-btn bno-btn--secondary\">\r\n          Karte ansehen\r\n        <\/a>\r\n\r\n      <\/div>\r\n\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\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-29eb97b8 e-flex e-con-boxed e-con e-parent\" data-id=\"29eb97b8\" 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-dbcbab1 elementor-widget elementor-widget-html\" data-id=\"dbcbab1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section class=\"bno-section bno-section--light bno-area-intro\">\r\n  <div class=\"bno-shell bno-narrow\">\r\n\r\n    <div class=\"bno-section-heading\">\r\n\r\n      <h2>\r\n        Unterk\u00fcnfte in Tignes\u2013Val d\u2019Is\u00e8re finden\r\n      <\/h2>\r\n\r\n      <p>\r\n        Tignes\u2013Val d\u2019Is\u00e8re eignet sich hervorragend f\u00fcr Familien, Freundesgruppen und Paare, die eine komfortable Basis f\u00fcr Skiurlaub, Wandern, Radfahren und aktive Tage in den franz\u00f6sischen Alpen suchen. Die Region verbindet Hochgebirge, Alpend\u00f6rfer und eine vielf\u00e4ltige Auswahl an Restaurants, Gesch\u00e4ften und praktischen Serviceangeboten.\r\n      <\/p>\r\n\r\n    <\/div>\r\n\r\n  <\/div>\r\n<\/section>\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-2d62caa7 e-flex e-con-boxed e-con e-parent\" data-id=\"2d62caa7\" 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-2df30e9b elementor-widget elementor-widget-html\" data-id=\"2df30e9b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section id=\"enheter\" class=\"bno-section bno-section--soft bno-direct-catalog\" data-bno-direct-catalog data-api-base=\"https:\/\/bno-api-staging.onrender.com\" data-booking-base=\"https:\/\/booking.bno-travel.com\/booking\/complete\" data-catalog-creds-key=\"EMERALD_TIGNES_VAL_D_ISERE\" data-booking-partner-key=\"EMERALD_TIGNES_VAL_D_ISERE\" data-service-id=\"e7a52fec-74b4-4f75-af18-b36800c3d81c\" data-area-key=\"tignes-val-disere\" data-destination-label=\"Tignes\u2013Val d\u2019Is\u00e8re\" data-location-label=\"Tignes\u2013Val d\u2019Is\u00e8re \u00b7 Franz\u00f6sische Alpen\" data-booking-open-until=\"2027-05-01\" data-minimum-stay-nights=\"2\" data-initial-count=\"12\" lang=\"de\" data-lang=\"de\">\r\n  <div class=\"bno-shell\">\r\n    <div class=\"bno-section-heading\">\r\n      <span class=\"bno-eyebrow\">\r\n        Ferienunterk\u00fcnfte in Tignes\u2013Val d\u2019Is\u00e8re\r\n      <\/span>\r\n\r\n      <h2>\r\n        Die passende Ferienunterkunft f\u00fcr Ihren Aufenthalt in Tignes\u2013Val d\u2019Is\u00e8re finden\r\n      <\/h2>\r\n\r\n      <p>\r\n        Entdecken Sie handverlesene Ferienunterk\u00fcnfte in Val d\u2019Is\u00e8re. Sehen Sie Fotos, Kapazit\u00e4ten und Beschreibungen an, bevor Sie Preis und Verf\u00fcgbarkeit pr\u00fcfen.\r\n      <\/p>\r\n    <\/div>\r\n\r\n    <div class=\"bno-direct-catalog__status\" data-bno-status role=\"status\" aria-live=\"polite\">\r\n      Ferienunterk\u00fcnfte werden geladen \u2026\r\n    <\/div>\r\n\r\n    <div class=\"bno-direct-catalog__grid\" data-bno-grid aria-live=\"polite\" aria-busy=\"true\"><\/div>\r\n\r\n    <div class=\"bno-direct-more-wrap\" data-bno-more-wrap hidden>\r\n      <button type=\"button\" class=\"bno-direct-more\" data-bno-more>\r\n        Weitere Ferienunterk\u00fcnfte anzeigen\r\n      <\/button>\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\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-de4b359 e-flex e-con-boxed e-con e-parent\" data-id=\"de4b359\" 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-55b52b9 elementor-widget elementor-widget-html\" data-id=\"55b52b9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\r\n.bno-direct-catalog,\r\n.bno-direct-modal {\r\n  --bno-navy: #0c1a38;\r\n  --bno-navy-hover: #162b55;\r\n  --bno-text: #3f4a5e;\r\n  --bno-muted: #536078;\r\n  --bno-border: rgba(12, 26, 56, 0.14);\r\n  --bno-soft: #eef3f8;\r\n  --bno-success-bg: #edf8f1;\r\n  --bno-success: #176b35;\r\n  --bno-error-bg: #fff1f1;\r\n  --bno-error: #8f1d1d;\r\n}\r\n\r\n.bno-direct-catalog,\r\n.bno-direct-catalog *,\r\n.bno-direct-modal,\r\n.bno-direct-modal * {\r\n  box-sizing: border-box;\r\n}\r\n\r\nhtml.bno-direct-modal-open,\r\nbody.bno-direct-modal-open {\r\n  overflow: hidden !important;\r\n}\r\n\r\n.bno-direct-catalog__status {\r\n  width: 100%;\r\n  margin: 28px 0 0;\r\n  padding: 16px 18px;\r\n  border: 1px solid var(--bno-border);\r\n  border-radius: 14px;\r\n  background: #ffffff !important;\r\n  color: var(--bno-navy) !important;\r\n  font-size: 15px;\r\n  line-height: 1.5;\r\n}\r\n\r\n.bno-direct-catalog__status.is-error {\r\n  border-color: rgba(143, 29, 29, 0.24);\r\n  background: var(--bno-error-bg) !important;\r\n  color: var(--bno-error) !important;\r\n}\r\n\r\n.bno-direct-catalog__grid {\r\n  display: grid !important;\r\n  grid-template-columns: repeat(3, minmax(0, 1fr)) !important;\r\n  gap: 24px !important;\r\n  align-items: stretch;\r\n  width: 100%;\r\n  margin-top: 28px;\r\n}\r\n\r\n.bno-direct-card {\r\n  display: flex;\r\n  min-width: 0;\r\n  max-width: 100%;\r\n  height: 100%;\r\n  overflow: hidden;\r\n  border: 1px solid var(--bno-border);\r\n  border-radius: 20px;\r\n  background: #ffffff !important;\r\n  color: var(--bno-navy) !important;\r\n  box-shadow: 0 12px 34px rgba(12, 26, 56, 0.08);\r\n  transition:\r\n    transform 0.2s ease,\r\n    box-shadow 0.2s ease;\r\n}\r\n\r\n.bno-direct-card:hover {\r\n  transform: translateY(-4px);\r\n  box-shadow: 0 18px 42px rgba(12, 26, 56, 0.14);\r\n}\r\n\r\n.bno-direct-card__button,\r\n.bno-direct-card__button:hover,\r\n.bno-direct-card__button:focus,\r\n.bno-direct-card__button:focus-visible,\r\n.bno-direct-card__button:active {\r\n  display: flex !important;\r\n  flex: 1 1 auto;\r\n  flex-direction: column !important;\r\n  width: 100% !important;\r\n  min-width: 0 !important;\r\n  max-width: 100% !important;\r\n  height: 100% !important;\r\n  margin: 0 !important;\r\n  padding: 0 !important;\r\n  overflow: hidden !important;\r\n  border: 0 !important;\r\n  border-radius: inherit !important;\r\n  background: transparent !important;\r\n  background-color: transparent !important;\r\n  background-image: none !important;\r\n  color: inherit !important;\r\n  box-shadow: none !important;\r\n  text-align: left !important;\r\n  text-decoration: none !important;\r\n  cursor: pointer;\r\n  appearance: none !important;\r\n  -webkit-appearance: none !important;\r\n}\r\n\r\n.bno-direct-card__media {\r\n  position: relative;\r\n  flex: 0 0 auto;\r\n  width: 100%;\r\n  min-width: 0;\r\n  aspect-ratio: 4 \/ 3;\r\n  overflow: hidden;\r\n  background: var(--bno-navy);\r\n}\r\n\r\n.bno-direct-card__media img {\r\n  display: block;\r\n  width: 100% !important;\r\n  height: 100% !important;\r\n  max-width: none !important;\r\n  margin: 0 !important;\r\n  padding: 0 !important;\r\n  object-fit: cover;\r\n  object-position: center;\r\n  border: 0;\r\n  border-radius: 0;\r\n  background: var(--bno-navy);\r\n  box-shadow: none;\r\n  transition: transform 0.35s ease;\r\n}\r\n\r\n.bno-direct-card:hover .bno-direct-card__media img {\r\n  transform: scale(1.035);\r\n}\r\n\r\n.bno-direct-card__count {\r\n  position: absolute;\r\n  right: 12px;\r\n  bottom: 12px;\r\n  z-index: 2;\r\n  padding: 7px 10px;\r\n  border: 1px solid rgba(255, 255, 255, 0.2);\r\n  border-radius: 999px;\r\n  background: rgba(12, 26, 56, 0.92) !important;\r\n  color: #ffffff !important;\r\n  font-size: 12px;\r\n  font-weight: 800;\r\n  line-height: 1;\r\n  white-space: nowrap;\r\n}\r\n\r\n.bno-direct-card__body {\r\n  display: flex !important;\r\n  flex: 1 1 auto;\r\n  flex-direction: column;\r\n  width: 100%;\r\n  min-width: 0;\r\n  max-width: 100%;\r\n  min-height: 238px;\r\n  padding: 20px;\r\n  overflow: hidden;\r\n  background: #ffffff !important;\r\n  color: var(--bno-navy) !important;\r\n}\r\n\r\n.bno-direct-card__body h3 {\r\n  display: -webkit-box;\r\n  width: 100%;\r\n  min-width: 0;\r\n  max-width: 100%;\r\n  margin: 0;\r\n  overflow: hidden;\r\n  color: var(--bno-navy) !important;\r\n  font-size: clamp(18px, 1.45vw, 22px);\r\n  font-weight: 800;\r\n  line-height: 1.2;\r\n  white-space: normal !important;\r\n  overflow-wrap: anywhere;\r\n  word-break: normal;\r\n  hyphens: auto;\r\n  -webkit-box-orient: vertical;\r\n  -webkit-line-clamp: 3;\r\n}\r\n\r\n.bno-direct-card__meta {\r\n  width: 100%;\r\n  margin: 8px 0 0;\r\n  color: var(--bno-muted) !important;\r\n  font-size: 13px;\r\n  font-weight: 800;\r\n  line-height: 1.4;\r\n}\r\n\r\n.bno-direct-card__description {\r\n  display: -webkit-box;\r\n  width: 100%;\r\n  min-width: 0;\r\n  max-width: 100%;\r\n  margin: 14px 0 0;\r\n  overflow: hidden;\r\n  color: var(--bno-text) !important;\r\n  font-size: 14px;\r\n  line-height: 1.6;\r\n  white-space: normal !important;\r\n  overflow-wrap: anywhere;\r\n  word-break: normal;\r\n  -webkit-box-orient: vertical;\r\n  -webkit-line-clamp: 4;\r\n}\r\n\r\n.bno-direct-card__link {\r\n  display: inline-flex;\r\n  align-items: center;\r\n  align-self: flex-start;\r\n  margin-top: auto;\r\n  padding-top: 18px;\r\n  color: var(--bno-navy) !important;\r\n  font-size: 14px;\r\n  font-weight: 800;\r\n}\r\n\r\n.bno-direct-more-wrap {\r\n  display: flex;\r\n  justify-content: center;\r\n  margin-top: 34px;\r\n}\r\n\r\n.bno-direct-more-wrap[hidden],\r\n.bno-direct-modal[hidden],\r\n.bno-direct-message[hidden],\r\n.bno-direct-price[hidden],\r\n.bno-direct-continue[hidden] {\r\n  display: none !important;\r\n}\r\n\r\n.bno-direct-more,\r\n.bno-direct-check-button,\r\n.bno-direct-book-button,\r\n.bno-direct-more:hover,\r\n.bno-direct-check-button:hover,\r\n.bno-direct-book-button:hover,\r\n.bno-direct-more:focus,\r\n.bno-direct-check-button:focus,\r\n.bno-direct-book-button:focus,\r\n.bno-direct-more:active,\r\n.bno-direct-check-button:active,\r\n.bno-direct-book-button:active {\r\n  display: inline-flex !important;\r\n  align-items: center !important;\r\n  justify-content: center !important;\r\n  min-height: 50px !important;\r\n  margin: 0 !important;\r\n  padding: 12px 20px !important;\r\n  border: 1px solid var(--bno-navy) !important;\r\n  border-radius: 11px !important;\r\n  background: var(--bno-navy) !important;\r\n  background-color: var(--bno-navy) !important;\r\n  background-image: none !important;\r\n  color: #ffffff !important;\r\n  box-shadow: none !important;\r\n  font: inherit;\r\n  font-size: 14px !important;\r\n  font-weight: 800 !important;\r\n  line-height: 1.3 !important;\r\n  text-align: center !important;\r\n  text-decoration: none !important;\r\n  white-space: normal !important;\r\n  cursor: pointer;\r\n  appearance: none !important;\r\n  -webkit-appearance: none !important;\r\n}\r\n\r\n.bno-direct-more:hover,\r\n.bno-direct-check-button:hover,\r\n.bno-direct-book-button:hover {\r\n  background: var(--bno-navy-hover) !important;\r\n}\r\n\r\n.bno-direct-check-button:disabled {\r\n  border-color: #778195 !important;\r\n  background: #778195 !important;\r\n  cursor: wait;\r\n}\r\n\r\n.bno-direct-modal {\r\n  position: fixed;\r\n  z-index: 999999;\r\n  inset: 0;\r\n  display: grid;\r\n  place-items: center;\r\n  width: 100%;\r\n  max-width: 100%;\r\n  padding: 24px;\r\n  overflow: hidden;\r\n  -webkit-text-size-adjust: 100%;\r\n  text-size-adjust: 100%;\r\n}\r\n\r\n.bno-direct-modal__backdrop,\r\n.bno-direct-modal__backdrop:hover,\r\n.bno-direct-modal__backdrop:focus,\r\n.bno-direct-modal__backdrop:active {\r\n  position: absolute;\r\n  z-index: 0;\r\n  inset: 0;\r\n  width: 100%;\r\n  height: 100%;\r\n  margin: 0 !important;\r\n  padding: 0 !important;\r\n  border: 0 !important;\r\n  border-radius: 0 !important;\r\n  background: rgba(4, 12, 28, 0.82) !important;\r\n  background-image: none !important;\r\n  box-shadow: none !important;\r\n  cursor: zoom-out;\r\n  backdrop-filter: blur(3px);\r\n  appearance: none !important;\r\n  -webkit-appearance: none !important;\r\n}\r\n\r\n.bno-direct-modal__dialog {\r\n  position: relative;\r\n  z-index: 1;\r\n  display: grid;\r\n  grid-template-columns:\r\n    minmax(0, 1.16fr)\r\n    minmax(390px, 0.84fr);\r\n  width: min(1180px, calc(100vw - 48px));\r\n  max-width: 100%;\r\n  height: min(760px, calc(100dvh - 48px));\r\n  max-height: calc(100dvh - 48px);\r\n  overflow: hidden;\r\n  border: 1px solid rgba(255, 255, 255, 0.18);\r\n  border-radius: 22px;\r\n  background: #ffffff;\r\n  box-shadow: 0 30px 90px rgba(0, 0, 0, 0.4);\r\n}\r\n\r\n.bno-direct-modal__gallery {\r\n  position: relative;\r\n  width: 100%;\r\n  height: 100%;\r\n  min-width: 0;\r\n  min-height: 0;\r\n  overflow: hidden;\r\n  background: var(--bno-navy);\r\n}\r\n\r\n.bno-direct-modal__image {\r\n  position: absolute;\r\n  inset: 0;\r\n  display: block;\r\n  width: 100% !important;\r\n  height: 100% !important;\r\n  min-width: 100% !important;\r\n  min-height: 100% !important;\r\n  max-width: none !important;\r\n  max-height: none !important;\r\n  margin: 0 !important;\r\n  padding: 0 !important;\r\n  object-fit: cover;\r\n  object-position: center;\r\n  border: 0;\r\n  border-radius: 0;\r\n  background: var(--bno-navy);\r\n}\r\n\r\n.bno-direct-modal__content {\r\n  width: 100%;\r\n  height: 100%;\r\n  min-width: 0;\r\n  min-height: 0;\r\n  padding: 40px 34px 36px;\r\n  overflow-x: hidden;\r\n  overflow-y: auto;\r\n  background: #ffffff !important;\r\n  color: var(--bno-text) !important;\r\n  scrollbar-color: rgba(12, 26, 56, 0.32) transparent;\r\n  scrollbar-width: thin;\r\n}\r\n\r\n.bno-direct-modal__content * {\r\n  min-width: 0;\r\n}\r\n\r\n.bno-direct-eyebrow {\r\n  display: inline-block;\r\n  max-width: 100%;\r\n  color: var(--bno-muted) !important;\r\n  font-size: 12px;\r\n  font-weight: 800;\r\n  letter-spacing: 0.04em;\r\n  line-height: 1.4;\r\n  text-transform: uppercase;\r\n  white-space: normal;\r\n  overflow-wrap: anywhere;\r\n}\r\n\r\n.bno-direct-modal__content h3 {\r\n  width: 100%;\r\n  max-width: 100%;\r\n  margin: 10px 0 0;\r\n  color: var(--bno-navy) !important;\r\n  font-size: clamp(28px, 3vw, 40px);\r\n  font-weight: 800;\r\n  line-height: 1.08;\r\n  white-space: normal !important;\r\n  overflow-wrap: anywhere;\r\n  hyphens: auto;\r\n}\r\n\r\n.bno-direct-modal__capacity {\r\n  width: 100%;\r\n  margin: 12px 0 0;\r\n  color: var(--bno-muted) !important;\r\n  font-size: 14px;\r\n  font-weight: 800;\r\n}\r\n\r\n.bno-direct-modal__description {\r\n  width: 100%;\r\n  max-width: 100%;\r\n  max-height: 245px;\r\n  margin-top: 20px;\r\n  padding-right: 8px;\r\n  overflow-x: hidden;\r\n  overflow-y: auto;\r\n  color: var(--bno-text) !important;\r\n  font-size: 15px;\r\n  line-height: 1.72;\r\n  white-space: pre-line;\r\n  overflow-wrap: anywhere;\r\n}\r\n\r\n.bno-direct-modal__close,\r\n.bno-direct-modal__arrow,\r\n.bno-direct-modal__close:hover,\r\n.bno-direct-modal__arrow:hover,\r\n.bno-direct-modal__close:focus,\r\n.bno-direct-modal__arrow:focus,\r\n.bno-direct-modal__close:active,\r\n.bno-direct-modal__arrow:active {\r\n  display: grid !important;\r\n  place-items: center !important;\r\n  margin: 0 !important;\r\n  padding: 0 !important;\r\n  border: 1px solid rgba(255, 255, 255, 0.25) !important;\r\n  border-radius: 999px !important;\r\n  background: rgba(12, 26, 56, 0.94) !important;\r\n  background-image: none !important;\r\n  color: #ffffff !important;\r\n  box-shadow: 0 7px 22px rgba(0, 0, 0, 0.24) !important;\r\n  font-family: Arial, sans-serif !important;\r\n  font-weight: 400 !important;\r\n  line-height: 1 !important;\r\n  cursor: pointer;\r\n  appearance: none !important;\r\n  -webkit-appearance: none !important;\r\n}\r\n\r\n.bno-direct-modal__close {\r\n  position: absolute;\r\n  z-index: 12;\r\n  top: 14px;\r\n  right: 14px;\r\n  width: 44px !important;\r\n  min-width: 44px !important;\r\n  height: 44px !important;\r\n  min-height: 44px !important;\r\n  font-size: 28px !important;\r\n}\r\n\r\n.bno-direct-modal__arrow {\r\n  position: absolute;\r\n  z-index: 8;\r\n  top: 50%;\r\n  width: 48px !important;\r\n  min-width: 48px !important;\r\n  height: 48px !important;\r\n  min-height: 48px !important;\r\n  font-size: 35px !important;\r\n  transform: translateY(-50%);\r\n}\r\n\r\n.bno-direct-modal__arrow--prev {\r\n  left: 18px;\r\n}\r\n\r\n.bno-direct-modal__arrow--next {\r\n  right: 18px;\r\n}\r\n\r\n.bno-direct-modal__arrow[hidden] {\r\n  display: none !important;\r\n}\r\n\r\n.bno-direct-modal__counter {\r\n  position: absolute;\r\n  z-index: 8;\r\n  right: 18px;\r\n  bottom: 18px;\r\n  padding: 8px 12px;\r\n  border: 1px solid rgba(255, 255, 255, 0.2);\r\n  border-radius: 999px;\r\n  background: rgba(12, 26, 56, 0.92) !important;\r\n  color: #ffffff !important;\r\n  font-size: 13px;\r\n  font-weight: 800;\r\n  line-height: 1;\r\n}\r\n\r\n.bno-direct-booking {\r\n  width: 100%;\r\n  margin-top: 30px;\r\n  padding-top: 28px;\r\n  border-top: 1px solid var(--bno-border);\r\n}\r\n\r\n.bno-direct-booking__heading h4 {\r\n  width: 100%;\r\n  margin: 6px 0 0;\r\n  color: var(--bno-navy) !important;\r\n  font-size: 22px;\r\n  font-weight: 800;\r\n  line-height: 1.25;\r\n  overflow-wrap: anywhere;\r\n}\r\n\r\n.bno-direct-form {\r\n  display: grid;\r\n  grid-template-columns: repeat(2, minmax(0, 1fr));\r\n  gap: 14px;\r\n  width: 100%;\r\n  margin-top: 20px;\r\n}\r\n\r\n.bno-direct-form label {\r\n  display: grid;\r\n  gap: 7px;\r\n  width: 100%;\r\n  min-width: 0;\r\n  color: var(--bno-navy) !important;\r\n  font-size: 13px;\r\n  font-weight: 800;\r\n}\r\n\r\n.bno-direct-form input {\r\n  display: block;\r\n  width: 100% !important;\r\n  max-width: 100% !important;\r\n  min-width: 0 !important;\r\n  min-height: 48px;\r\n  margin: 0 !important;\r\n  padding: 10px 12px !important;\r\n  border: 1px solid rgba(12, 26, 56, 0.22) !important;\r\n  border-radius: 10px !important;\r\n  background: #ffffff !important;\r\n  color: var(--bno-navy) !important;\r\n  box-shadow: none !important;\r\n  font: inherit;\r\n  font-size: 16px !important;\r\n}\r\n\r\n.bno-direct-check-button {\r\n  grid-column: 1 \/ -1;\r\n  width: 100% !important;\r\n}\r\n\r\n.bno-direct-message {\r\n  width: 100%;\r\n  max-width: 100%;\r\n  margin-top: 15px;\r\n  padding: 14px 15px;\r\n  border-radius: 11px;\r\n  background: var(--bno-soft) !important;\r\n  color: var(--bno-navy) !important;\r\n  font-size: 14px;\r\n  line-height: 1.5;\r\n  white-space: normal !important;\r\n  overflow-wrap: anywhere;\r\n}\r\n\r\n.bno-direct-message.is-success {\r\n  background: var(--bno-success-bg) !important;\r\n  color: var(--bno-success) !important;\r\n}\r\n\r\n.bno-direct-message.is-error {\r\n  background: var(--bno-error-bg) !important;\r\n  color: var(--bno-error) !important;\r\n}\r\n\r\n.bno-direct-price {\r\n  width: 100%;\r\n  max-width: 100%;\r\n  margin-top: 18px;\r\n  overflow: hidden;\r\n  border: 1px solid var(--bno-border);\r\n  border-radius: 14px;\r\n  background: #ffffff !important;\r\n}\r\n\r\n.bno-direct-price__row {\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: space-between;\r\n  gap: 20px;\r\n  width: 100%;\r\n  min-width: 0;\r\n  padding: 13px 15px;\r\n  border-top: 1px solid rgba(12, 26, 56, 0.1);\r\n  background: #ffffff !important;\r\n  color: var(--bno-navy) !important;\r\n}\r\n\r\n.bno-direct-price__row:first-child {\r\n  border-top: 0;\r\n}\r\n\r\n.bno-direct-price__row span,\r\n.bno-direct-price__row strong {\r\n  min-width: 0;\r\n  max-width: 100%;\r\n  color: inherit !important;\r\n  white-space: normal !important;\r\n  overflow-wrap: anywhere;\r\n}\r\n\r\n.bno-direct-price__row strong {\r\n  flex: 0 0 auto;\r\n  text-align: right;\r\n}\r\n\r\n.bno-direct-price__row--total {\r\n  background: var(--bno-navy) !important;\r\n  color: #ffffff !important;\r\n}\r\n\r\n.bno-direct-continue {\r\n  width: 100%;\r\n  margin-top: 18px;\r\n}\r\n\r\n.bno-direct-book-button {\r\n  width: 100% !important;\r\n  min-height: 54px !important;\r\n  font-size: 15px !important;\r\n}\r\n\r\n.bno-direct-continue p {\r\n  width: 100%;\r\n  margin: 10px 0 0;\r\n  color: var(--bno-muted) !important;\r\n  font-size: 12px;\r\n  line-height: 1.5;\r\n  text-align: center;\r\n  overflow-wrap: anywhere;\r\n}\r\n\r\n@media (max-width: 980px) {\r\n  .bno-direct-catalog__grid {\r\n    grid-template-columns:\r\n      repeat(2, minmax(0, 1fr)) !important;\r\n  }\r\n}\r\n\r\n@media (max-width: 900px) {\r\n  .bno-direct-modal {\r\n    display: block !important;\r\n    width: 100% !important;\r\n    max-width: 100% !important;\r\n    padding: 0 !important;\r\n    overflow-x: hidden !important;\r\n    overflow-y: auto !important;\r\n    background: #ffffff !important;\r\n    overscroll-behavior: contain;\r\n    -webkit-overflow-scrolling: touch;\r\n  }\r\n\r\n  .bno-direct-modal__backdrop {\r\n    position: fixed !important;\r\n  }\r\n\r\n  .bno-direct-modal__dialog {\r\n    display: block !important;\r\n    width: 100% !important;\r\n    max-width: 100% !important;\r\n    min-width: 0 !important;\r\n    height: auto !important;\r\n    min-height: 100vh !important;\r\n    min-height: 100dvh !important;\r\n    max-height: none !important;\r\n    margin: 0 !important;\r\n    padding: 0 !important;\r\n    overflow: visible !important;\r\n    border: 0 !important;\r\n    border-radius: 0 !important;\r\n    background: #ffffff !important;\r\n    box-shadow: none !important;\r\n  }\r\n\r\n  .bno-direct-modal__gallery {\r\n    width: 100% !important;\r\n    max-width: 100% !important;\r\n    height: clamp(320px, 60vw, 520px) !important;\r\n    min-height: 320px !important;\r\n  }\r\n\r\n  .bno-direct-modal__content {\r\n    width: 100% !important;\r\n    max-width: 100% !important;\r\n    min-width: 0 !important;\r\n    height: auto !important;\r\n    max-height: none !important;\r\n    margin: 0 !important;\r\n    padding:\r\n      34px\r\n      clamp(20px, 5vw, 44px)\r\n      52px !important;\r\n    overflow: visible !important;\r\n  }\r\n\r\n  .bno-direct-modal__description {\r\n    max-height: none !important;\r\n    padding-right: 0 !important;\r\n    overflow: visible !important;\r\n  }\r\n\r\n  .bno-direct-modal__close {\r\n    position: fixed !important;\r\n    top: max(12px, env(safe-area-inset-top)) !important;\r\n    right: max(12px, env(safe-area-inset-right)) !important;\r\n  }\r\n\r\n  .bno-direct-price__row {\r\n    display: grid !important;\r\n    grid-template-columns: minmax(0, 1fr) !important;\r\n    align-items: start !important;\r\n    gap: 7px !important;\r\n    padding: 17px 18px !important;\r\n  }\r\n\r\n  .bno-direct-price__row strong {\r\n    width: 100%;\r\n    text-align: left !important;\r\n    font-size: 20px;\r\n  }\r\n}\r\n\r\n@media (max-width: 620px) {\r\n  .bno-direct-catalog__grid {\r\n    grid-template-columns: 1fr !important;\r\n  }\r\n\r\n  .bno-direct-card__body {\r\n    min-height: 220px;\r\n  }\r\n\r\n  .bno-direct-modal__gallery {\r\n    height: 66vw !important;\r\n    min-height: 270px !important;\r\n    max-height: 370px !important;\r\n  }\r\n\r\n  .bno-direct-modal__content {\r\n    padding:\r\n      28px\r\n      max(18px, env(safe-area-inset-right))\r\n      calc(48px + env(safe-area-inset-bottom))\r\n      max(18px, env(safe-area-inset-left)) !important;\r\n  }\r\n\r\n  .bno-direct-modal__content h3 {\r\n    font-size: 28px !important;\r\n    line-height: 1.12 !important;\r\n  }\r\n\r\n  .bno-direct-booking__heading h4 {\r\n    font-size: 24px !important;\r\n    line-height: 1.18 !important;\r\n  }\r\n\r\n  .bno-direct-form {\r\n    grid-template-columns: minmax(0, 1fr) !important;\r\n  }\r\n\r\n  .bno-direct-check-button {\r\n    grid-column: 1 !important;\r\n  }\r\n\r\n  .bno-direct-modal__arrow {\r\n    width: 44px !important;\r\n    min-width: 44px !important;\r\n    height: 44px !important;\r\n    min-height: 44px !important;\r\n  }\r\n\r\n  .bno-direct-modal__arrow--prev {\r\n    left: 12px;\r\n  }\r\n\r\n  .bno-direct-modal__arrow--next {\r\n    right: 12px;\r\n  }\r\n\r\n  .bno-direct-modal__counter {\r\n    right: 12px;\r\n    bottom: 12px;\r\n  }\r\n}\r\n<\/style>\r\n\r\n<script>\r\n(function () {\r\n  \"use strict\";\r\n\r\n  const ROOT_SELECTOR = \"[data-bno-direct-catalog]\";\r\n\r\n  function clean(value) {\r\n    return String(value || \"\").trim();\r\n  }\r\n\r\n  function cleanBase(value) {\r\n    return clean(value).replace(\/\\\/+$\/, \"\");\r\n  }\r\n\r\n  function endpoint(base, path) {\r\n    const apiBase = cleanBase(base);\r\n    const route = String(path || \"\");\r\n\r\n    if (\r\n      apiBase.endsWith(\"\/api\") &&\r\n      route.startsWith(\"\/api\/\")\r\n    ) {\r\n      return apiBase + route.slice(4);\r\n    }\r\n\r\n    return apiBase + route;\r\n  }\r\n\r\n  function escapeHtml(value) {\r\n    return String(\r\n      value == null ? \"\" : value\r\n    )\r\n      .replace(\/&\/g, \"&amp;\")\r\n      .replace(\/<\/g, \"&lt;\")\r\n      .replace(\/>\/g, \"&gt;\")\r\n      .replace(\/\"\/g, \"&quot;\")\r\n      .replace(\/'\/g, \"&#039;\");\r\n  }\r\n\r\n  function stripHtml(value) {\r\n    const element =\r\n      document.createElement(\"div\");\r\n\r\n    element.innerHTML =\r\n      String(value || \"\");\r\n\r\n    return String(\r\n      element.textContent ||\r\n      element.innerText ||\r\n      \"\"\r\n    )\r\n      .replace(\/\\s+\/g, \" \")\r\n      .trim();\r\n  }\r\n\r\n  function firstValue(object, keys) {\r\n    for (const key of keys) {\r\n      if (\r\n        object &&\r\n        object[key] != null &&\r\n        object[key] !== \"\"\r\n      ) {\r\n        return object[key];\r\n      }\r\n    }\r\n\r\n    return \"\";\r\n  }\r\n\r\n  function parseIdSet(value) {\r\n    return new Set(\r\n      clean(value)\r\n        .split(\",\")\r\n        .map(function (item) {\r\n          return item.trim();\r\n        })\r\n        .filter(Boolean)\r\n    );\r\n  }\r\n\r\n  function currentLanguage() {\r\n    return \"de\";\r\n  }\r\n\r\n  function localDate(date) {\r\n    return (\r\n      date.getFullYear() +\r\n      \"-\" +\r\n      String(\r\n        date.getMonth() + 1\r\n      ).padStart(2, \"0\") +\r\n      \"-\" +\r\n      String(\r\n        date.getDate()\r\n      ).padStart(2, \"0\")\r\n    );\r\n  }\r\n\r\n  function addDays(date, days) {\r\n    const result =\r\n      new Date(date.getTime());\r\n\r\n    result.setDate(\r\n      result.getDate() +\r\n      Number(days || 0)\r\n    );\r\n\r\n    return result;\r\n  }\r\n\r\n  function numberOfNights(from, to) {\r\n    return Math.round(\r\n      (\r\n        new Date(\r\n          to + \"T12:00:00\"\r\n        ).getTime() -\r\n        new Date(\r\n          from + \"T12:00:00\"\r\n        ).getTime()\r\n      ) \/\r\n      86400000\r\n    );\r\n  }\r\n\r\n  function formatDate(value) {\r\n    try {\r\n      return new Intl.DateTimeFormat(\r\n        \"de-DE\",\r\n        {\r\n          day: \"numeric\",\r\n          month: \"short\",\r\n          year: \"numeric\"\r\n        }\r\n      ).format(\r\n        new Date(\r\n          value + \"T12:00:00\"\r\n        )\r\n      );\r\n    } catch (_error) {\r\n      return value;\r\n    }\r\n  }\r\n\r\n  function formatMoney(\r\n    amount,\r\n    currency\r\n  ) {\r\n    try {\r\n      return new Intl.NumberFormat(\r\n        \"de-DE\",\r\n        {\r\n          style: \"currency\",\r\n          currency: clean(\r\n            currency || \"EUR\"\r\n          ).toUpperCase(),\r\n          minimumFractionDigits: 2,\r\n          maximumFractionDigits: 2\r\n        }\r\n      ).format(\r\n        Number(amount || 0)\r\n      );\r\n    } catch (_error) {\r\n      return (\r\n        Number(amount || 0).toFixed(2) +\r\n        \" \" +\r\n        clean(currency || \"EUR\")\r\n      );\r\n    }\r\n  }\r\n\r\n  function getImages(row) {\r\n    const result = [];\r\n\r\n    function addImage(value) {\r\n      if (!value) {\r\n        return;\r\n      }\r\n\r\n      if (typeof value === \"string\") {\r\n        const url = value.trim();\r\n\r\n        if (\/^https?:\\\/\\\/\/i.test(url)) {\r\n          result.push(url);\r\n        }\r\n\r\n        return;\r\n      }\r\n\r\n      if (typeof value === \"object\") {\r\n        addImage(\r\n          value.url ||\r\n          value.Url ||\r\n          value.imageUrl ||\r\n          value.ImageUrl ||\r\n          value.source ||\r\n          value.Source ||\r\n          value.original ||\r\n          value.Original\r\n        );\r\n      }\r\n    }\r\n\r\n    [\r\n      row.images,\r\n      row.Images,\r\n      row.gallery,\r\n      row.Gallery,\r\n      row.imageUrls,\r\n      row.ImageUrls,\r\n      row.photos,\r\n      row.Photos\r\n    ].forEach(function (items) {\r\n      if (Array.isArray(items)) {\r\n        items.forEach(addImage);\r\n      }\r\n    });\r\n\r\n    [\r\n      row.image,\r\n      row.Image,\r\n      row.coverImageUrl,\r\n      row.CoverImageUrl,\r\n      row.imageUrl,\r\n      row.ImageUrl,\r\n      row.thumbnailUrl,\r\n      row.ThumbnailUrl\r\n    ].forEach(addImage);\r\n\r\n    return Array.from(\r\n      new Set(result)\r\n    );\r\n  }\r\n\r\n  function extractRows(payload) {\r\n    const candidates = [\r\n      payload &&\r\n      payload.data &&\r\n      payload.data.resourceCategories,\r\n\r\n      payload &&\r\n      payload.data &&\r\n      payload.data.categories,\r\n\r\n      payload &&\r\n      payload.data &&\r\n      payload.data.items,\r\n\r\n      payload && payload.data,\r\n      payload && payload.resourceCategories,\r\n      payload && payload.categories,\r\n      payload && payload.items\r\n    ];\r\n\r\n    for (const candidate of candidates) {\r\n      if (Array.isArray(candidate)) {\r\n        return candidate;\r\n      }\r\n    }\r\n\r\n    return [];\r\n  }\r\n\r\n  function normaliseUnit(row) {\r\n    return {\r\n      id: clean(\r\n        firstValue(row, [\r\n          \"resourceCategoryId\",\r\n          \"ResourceCategoryId\",\r\n          \"categoryId\",\r\n          \"CategoryId\",\r\n          \"id\",\r\n          \"Id\"\r\n        ])\r\n      ),\r\n\r\n      name: clean(\r\n        firstValue(row, [\r\n          \"localizedName\",\r\n          \"LocalizedName\",\r\n          \"categoryName\",\r\n          \"CategoryName\",\r\n          \"name\",\r\n          \"Name\",\r\n          \"title\",\r\n          \"Title\"\r\n        ]) ||\r\n        \"Ferienunterkunft\"\r\n      ),\r\n\r\n      description: stripHtml(\r\n        firstValue(row, [\r\n          \"localizedDescription\",\r\n          \"LocalizedDescription\",\r\n          \"description\",\r\n          \"Description\",\r\n          \"longDescription\",\r\n          \"LongDescription\",\r\n          \"shortDescription\",\r\n          \"ShortDescription\"\r\n        ])\r\n      ),\r\n\r\n      capacity:\r\n        Number(\r\n          firstValue(row, [\r\n            \"capacity\",\r\n            \"Capacity\",\r\n            \"maxOccupancy\",\r\n            \"MaxOccupancy\",\r\n            \"maximumOccupancy\",\r\n            \"MaximumOccupancy\",\r\n            \"maxPersons\",\r\n            \"MaxPersons\",\r\n            \"maxG\u00e4ste\",\r\n            \"MaxG\u00e4ste\"\r\n          ])\r\n        ) || 0,\r\n\r\n      images:\r\n        getImages(row),\r\n\r\n      published:\r\n        firstValue(row, [\r\n          \"isPublished\",\r\n          \"IsPublished\",\r\n          \"is_published\",\r\n          \"publishStatus\",\r\n          \"PublishStatus\",\r\n          \"publish_status\"\r\n        ])\r\n    };\r\n  }\r\n\r\n  function isPublished(\r\n    unit,\r\n    hasPublicationFields\r\n  ) {\r\n    if (!hasPublicationFields) {\r\n      return true;\r\n    }\r\n\r\n    if (\r\n      typeof unit.published ===\r\n      \"boolean\"\r\n    ) {\r\n      return unit.published;\r\n    }\r\n\r\n    return [\r\n      \"published\",\r\n      \"approved\",\r\n      \"reviewed\",\r\n      \"active\",\r\n      \"true\",\r\n      \"1\"\r\n    ].includes(\r\n      clean(\r\n        unit.published\r\n      ).toLowerCase()\r\n    );\r\n  }\r\n\r\n  async function fetchJson(\r\n    url,\r\n    options\r\n  ) {\r\n    const controller =\r\n      new AbortController();\r\n\r\n    const timeout =\r\n      window.setTimeout(\r\n        function () {\r\n          controller.abort();\r\n        },\r\n        60000\r\n      );\r\n\r\n    try {\r\n      const response = await fetch(\r\n        url,\r\n        Object.assign(\r\n          {\r\n            cache: \"no-store\",\r\n            signal: controller.signal,\r\n            headers: {\r\n              Accept: \"application\/json\"\r\n            }\r\n          },\r\n          options || {}\r\n        )\r\n      );\r\n\r\n      const payload =\r\n        await response\r\n          .json()\r\n          .catch(function () {\r\n            return null;\r\n          });\r\n\r\n      if (\r\n        !response.ok ||\r\n        !payload ||\r\n        payload.ok === false\r\n      ) {\r\n        const error = new Error(\r\n          payload &&\r\n          (\r\n            payload.detail ||\r\n            payload.message ||\r\n            payload.error\r\n          )\r\n            ? (\r\n                payload.detail ||\r\n                payload.message ||\r\n                payload.error\r\n              )\r\n            : \"Die Anfrage konnte nicht abgeschlossen werden.\"\r\n        );\r\n\r\n        error.code =\r\n          payload &&\r\n          payload.error\r\n            ? String(payload.error)\r\n            : \"\";\r\n\r\n        throw error;\r\n      }\r\n\r\n      return payload;\r\n    } finally {\r\n      window.clearTimeout(timeout);\r\n    }\r\n  }\r\n\r\n  function createModal(\r\n    destination,\r\n    location\r\n  ) {\r\n    const modal =\r\n      document.createElement(\"div\");\r\n\r\n    modal.className =\r\n      \"bno-direct-modal\";\r\n\r\n    modal.hidden = true;\r\n\r\n    modal.setAttribute(\r\n      \"role\",\r\n      \"dialog\"\r\n    );\r\n\r\n    modal.setAttribute(\r\n      \"aria-modal\",\r\n      \"true\"\r\n    );\r\n\r\n    modal.setAttribute(\r\n      \"aria-label\",\r\n      \"Ferienunterkunft in \" +\r\n      destination\r\n    );\r\n\r\n    modal.innerHTML = `\r\n      <button type=\"button\" class=\"bno-direct-modal__backdrop\" data-bno-close aria-label=\"Schlie\u00dfen\"><\/button>\r\n\r\n      <div class=\"bno-direct-modal__dialog\">\r\n\r\n        <button type=\"button\" class=\"bno-direct-modal__close\" data-bno-close aria-label=\"Schlie\u00dfen\">\r\n          \u00d7\r\n        <\/button>\r\n\r\n        <div class=\"bno-direct-modal__gallery\">\r\n\r\n          <button type=\"button\" class=\"bno-direct-modal__arrow bno-direct-modal__arrow--prev\" data-bno-prev aria-label=\"Vorheriges Bild\">\r\n            \u2039\r\n          <\/button>\r\n\r\n          <img decoding=\"async\" class=\"bno-direct-modal__image\" data-bno-image src=\"\" alt=\"\" \/>\r\n\r\n          <button type=\"button\" class=\"bno-direct-modal__arrow bno-direct-modal__arrow--next\" data-bno-next aria-label=\"N\u00e4chstes Bild\">\r\n            \u203a\r\n          <\/button>\r\n\r\n          <span class=\"bno-direct-modal__counter\" data-bno-counter><\/span>\r\n\r\n        <\/div>\r\n\r\n        <div class=\"bno-direct-modal__content\">\r\n\r\n          <span class=\"bno-direct-eyebrow\">\r\n            ${escapeHtml(\r\n              location ||\r\n              destination\r\n            )}\r\n          <\/span>\r\n\r\n          <h3 data-bno-title><\/h3>\r\n\r\n          <p class=\"bno-direct-modal__capacity\" data-bno-capacity><\/p>\r\n\r\n          <div class=\"bno-direct-modal__description\" data-bno-description><\/div>\r\n\r\n          <div class=\"bno-direct-booking\">\r\n\r\n            <div class=\"bno-direct-booking__heading\">\r\n              <span class=\"bno-direct-eyebrow\">\r\n                Aufenthalt pr\u00fcfen\r\n              <\/span>\r\n\r\n              <h4>\r\n                Verf\u00fcgbarkeit dieser Ferienunterkunft pr\u00fcfen\r\n              <\/h4>\r\n            <\/div>\r\n\r\n            <form\r\n              class=\"bno-direct-form\"\r\n              data-bno-form\r\n              novalidate\r\n            >\r\n              <label>\r\n                <span>Anreise<\/span>\r\n\r\n                <input\r\n                  type=\"date\"\r\n                  data-bno-checkin\r\n                  required\r\n                \/>\r\n              <\/label>\r\n\r\n              <label>\r\n                <span>Abreise<\/span>\r\n\r\n                <input\r\n                  type=\"date\"\r\n                  data-bno-checkout\r\n                  required\r\n                \/>\r\n              <\/label>\r\n\r\n              <label>\r\n                <span>G\u00e4ste<\/span>\r\n\r\n                <input\r\n                  type=\"number\"\r\n                  data-bno-guests\r\n                  min=\"1\"\r\n                  step=\"1\"\r\n                  value=\"2\"\r\n                  required\r\n                \/>\r\n              <\/label>\r\n\r\n              <button type=\"submit\" class=\"bno-direct-check-button\" data-bno-check>\r\n                Verf\u00fcgbarkeit pr\u00fcfen\r\n              <\/button>\r\n            <\/form>\r\n\r\n            <div class=\"bno-direct-message\" data-bno-message role=\"status\" aria-live=\"polite\" hidden><\/div>\r\n\r\n            <div class=\"bno-direct-price\" data-bno-price hidden>\r\n              <div class=\"bno-direct-price__row bno-direct-price__row--total\">\r\n                <span>\r\n                  Gesamtpreis f\u00fcr den Aufenthalt\r\n                <\/span>\r\n\r\n                <strong data-bno-total><\/strong>\r\n              <\/div>\r\n\r\n              <div class=\"bno-direct-price__row\">\r\n                <span>\r\n                  Jetzt an BNO Travel zu zahlen\r\n                <\/span>\r\n\r\n                <strong data-bno-now><\/strong>\r\n              <\/div>\r\n\r\n              <div class=\"bno-direct-price__row\">\r\n                <span>\r\n                  Restbetrag an den Unterkunftsanbieter\r\n                <\/span>\r\n\r\n                <strong data-bno-later><\/strong>\r\n              <\/div>\r\n            <\/div>\r\n\r\n            <div class=\"bno-direct-continue\" data-bno-continue-wrap hidden>\r\n              <button type=\"button\" class=\"bno-direct-book-button\" data-bno-continue>\r\n                Weiter zur Buchung\r\n              <\/button>\r\n\r\n              <p>\r\n                G\u00e4stedaten, Bedingungen und Zahlung werden in der sicheren Buchungsstrecke von BNO Travel abgeschlossen.\r\n              <\/p>\r\n            <\/div>\r\n\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n    `;\r\n\r\n    document.body.appendChild(modal);\r\n\r\n    return modal;\r\n  }\r\n\r\n  function initialiseCatalog(root) {\r\n    if (\r\n      !root ||\r\n      root.dataset.bnoReady === \"1\"\r\n    ) {\r\n      return;\r\n    }\r\n\r\n    root.dataset.bnoReady = \"1\";\r\n\r\n    const status =\r\n      root.querySelector(\r\n        \"[data-bno-status]\"\r\n      );\r\n\r\n    const grid =\r\n      root.querySelector(\r\n        \"[data-bno-grid]\"\r\n      );\r\n\r\n    const moreWrap =\r\n      root.querySelector(\r\n        \"[data-bno-more-wrap]\"\r\n      );\r\n\r\n    const moreButton =\r\n      root.querySelector(\r\n        \"[data-bno-more]\"\r\n      );\r\n\r\n    if (\r\n      !status ||\r\n      !grid ||\r\n      !moreWrap ||\r\n      !moreButton\r\n    ) {\r\n      return;\r\n    }\r\n\r\n    const apiBase =\r\n      cleanBase(\r\n        root.dataset.apiBase\r\n      );\r\n\r\n    const bookingBase =\r\n      clean(\r\n        root.dataset.bookingBase ||\r\n        \"https:\/\/booking.bno-travel.com\/booking\/complete\"\r\n      );\r\n\r\n    const catalogKey =\r\n      clean(\r\n        root.dataset.catalogCredsKey\r\n      );\r\n\r\n    const partnerKey =\r\n      clean(\r\n        root.dataset.bookingPartnerKey ||\r\n        catalogKey\r\n      );\r\n\r\n    const serviceId =\r\n      clean(\r\n        root.dataset.serviceId\r\n      );\r\n\r\n    const areaKey =\r\n      clean(\r\n        root.dataset.areaKey\r\n      );\r\n\r\n    const destination =\r\n      clean(\r\n        root.dataset.destinationLabel ||\r\n        \"destinasjonen\"\r\n      );\r\n\r\n    const location =\r\n      clean(\r\n        root.dataset.locationLabel ||\r\n        destination\r\n      );\r\n\r\n    const bookingOpenUntil =\r\n      clean(\r\n        root.dataset.bookingOpenUntil ||\r\n        \"2027-05-01\"\r\n      );\r\n\r\n    const minimumStay =\r\n      Math.max(\r\n        1,\r\n        Number(\r\n          root.dataset.minimumStayNights ||\r\n          1\r\n        ) || 1\r\n      );\r\n\r\n    const pageSize =\r\n      Math.max(\r\n        1,\r\n        Number(\r\n          root.dataset.initialCount ||\r\n          12\r\n        ) || 12\r\n      );\r\n\r\n    const allowedIds =\r\n      parseIdSet(\r\n        root.dataset.allowedUnitIds\r\n      );\r\n\r\n    const excludedIds =\r\n      parseIdSet(\r\n        root.dataset.excludedUnitIds\r\n      );\r\n\r\n    if (\r\n      !apiBase ||\r\n      !catalogKey ||\r\n      !serviceId ||\r\n      !areaKey\r\n    ) {\r\n      status.textContent =\r\n        \"Bulk 3 mangler n\u00f8dvendig konfigurasjon.\";\r\n\r\n      status.classList.add(\r\n        \"is-error\"\r\n      );\r\n\r\n      return;\r\n    }\r\n\r\n    const modal =\r\n      createModal(\r\n        destination,\r\n        location\r\n      );\r\n\r\n    const modalImage =\r\n      modal.querySelector(\r\n        \"[data-bno-image]\"\r\n      );\r\n\r\n    const modalTitle =\r\n      modal.querySelector(\r\n        \"[data-bno-title]\"\r\n      );\r\n\r\n    const modalCapacity =\r\n      modal.querySelector(\r\n        \"[data-bno-capacity]\"\r\n      );\r\n\r\n    const modalDescription =\r\n      modal.querySelector(\r\n        \"[data-bno-description]\"\r\n      );\r\n\r\n    const modalCounter =\r\n      modal.querySelector(\r\n        \"[data-bno-counter]\"\r\n      );\r\n\r\n    const previousButton =\r\n      modal.querySelector(\r\n        \"[data-bno-prev]\"\r\n      );\r\n\r\n    const nextButton =\r\n      modal.querySelector(\r\n        \"[data-bno-next]\"\r\n      );\r\n\r\n    const availabilityForm =\r\n      modal.querySelector(\r\n        \"[data-bno-form]\"\r\n      );\r\n\r\n    const checkinInput =\r\n      modal.querySelector(\r\n        \"[data-bno-checkin]\"\r\n      );\r\n\r\n    const checkoutInput =\r\n      modal.querySelector(\r\n        \"[data-bno-checkout]\"\r\n      );\r\n\r\n    const guestsInput =\r\n      modal.querySelector(\r\n        \"[data-bno-guests]\"\r\n      );\r\n\r\n    const checkButton =\r\n      modal.querySelector(\r\n        \"[data-bno-check]\"\r\n      );\r\n\r\n    const messageNode =\r\n      modal.querySelector(\r\n        \"[data-bno-message]\"\r\n      );\r\n\r\n    const priceBox =\r\n      modal.querySelector(\r\n        \"[data-bno-price]\"\r\n      );\r\n\r\n    const totalNode =\r\n      modal.querySelector(\r\n        \"[data-bno-total]\"\r\n      );\r\n\r\n    const payNowNode =\r\n      modal.querySelector(\r\n        \"[data-bno-now]\"\r\n      );\r\n\r\n    const payLaterNode =\r\n      modal.querySelector(\r\n        \"[data-bno-later]\"\r\n      );\r\n\r\n    const continueWrap =\r\n      modal.querySelector(\r\n        \"[data-bno-continue-wrap]\"\r\n      );\r\n\r\n    const continueButton =\r\n      modal.querySelector(\r\n        \"[data-bno-continue]\"\r\n      );\r\n\r\n    let units = [];\r\n    let visibleCount = pageSize;\r\n    let currentUnit = null;\r\n    let currentImageIndex = 0;\r\n    let currentQuote = null;\r\n\r\n    function setStatus(\r\n      text,\r\n      isError\r\n    ) {\r\n      status.textContent =\r\n        text || \"\";\r\n\r\n      status.hidden =\r\n        !text;\r\n\r\n      status.classList.toggle(\r\n        \"is-error\",\r\n        Boolean(isError)\r\n      );\r\n    }\r\n\r\n    function setMessage(\r\n      text,\r\n      type\r\n    ) {\r\n      messageNode.textContent =\r\n        text || \"\";\r\n\r\n      messageNode.hidden =\r\n        !text;\r\n\r\n      messageNode.classList.remove(\r\n        \"is-error\",\r\n        \"is-success\"\r\n      );\r\n\r\n      if (type) {\r\n        messageNode.classList.add(\r\n          \"is-\" + type\r\n        );\r\n      }\r\n    }\r\n\r\n    function resetQuote() {\r\n      currentQuote = null;\r\n      priceBox.hidden = true;\r\n      continueWrap.hidden = true;\r\n      setMessage(\"\", \"\");\r\n    }\r\n\r\n    function createCard(\r\n      unit,\r\n      index\r\n    ) {\r\n      const capacityText =\r\n        unit.capacity > 0\r\n          ? (\r\n              \"Bis zu \" +\r\n              unit.capacity +\r\n              \" G\u00e4ste\"\r\n            )\r\n          : \"Details und Fotos ansehen\";\r\n\r\n      const descriptionText =\r\n        unit.description ||\r\n        \"Fotos, Kapazit\u00e4t und Verf\u00fcgbarkeit dieser Ferienunterkunft ansehen.\";\r\n\r\n      return `\r\n        <article class=\"bno-direct-card\">\r\n          <button type=\"button\" class=\"bno-direct-card__button\" data-bno-index=\"${index}\">\r\n            <div class=\"bno-direct-card__media\">\r\n              <img decoding=\"async\" src=\"${escapeHtml(unit.images[0])}\" alt=\"${escapeHtml(unit.name)}\" loading=\"lazy\" \/>\r\n\r\n              <span class=\"bno-direct-card__count\">\r\n                ${unit.images.length} images\r\n              <\/span>\r\n            <\/div>\r\n\r\n            <div class=\"bno-direct-card__body\">\r\n              <h3>${escapeHtml(unit.name)}<\/h3>\r\n\r\n              <p class=\"bno-direct-card__meta\">\r\n                ${escapeHtml(capacityText)}\r\n              <\/p>\r\n\r\n              <p class=\"bno-direct-card__description\">\r\n                ${escapeHtml(descriptionText)}\r\n              <\/p>\r\n\r\n              <span class=\"bno-direct-card__link\">\r\n                Ferienunterkunft ansehen \u2192\r\n              <\/span>\r\n            <\/div>\r\n          <\/button>\r\n        <\/article>\r\n      `;\r\n    }\r\n\r\n    function renderUnits() {\r\n      const visibleUnits =\r\n        units.slice(\r\n          0,\r\n          visibleCount\r\n        );\r\n\r\n      grid.innerHTML =\r\n        visibleUnits\r\n          .map(createCard)\r\n          .join(\"\");\r\n\r\n      grid.setAttribute(\r\n        \"aria-busy\",\r\n        \"false\"\r\n      );\r\n\r\n      grid\r\n        .querySelectorAll(\r\n          \"[data-bno-index]\"\r\n        )\r\n        .forEach(\r\n          function (button) {\r\n            button.addEventListener(\r\n              \"click\",\r\n              function () {\r\n                openModal(\r\n                  units[\r\n                    Number(\r\n                      button.dataset.bnoIndex\r\n                    )\r\n                  ]\r\n                );\r\n              }\r\n            );\r\n          }\r\n        );\r\n\r\n      moreWrap.hidden =\r\n        visibleCount >=\r\n        units.length;\r\n\r\n      setStatus(\r\n        \"Es werden \" + visibleUnits.length + \" von \" + units.length + \" Unterk\u00fcnften in \" + destination + \" angezeigt.\",\r\n        false\r\n      );\r\n    }\r\n\r\n    function updateModalImage() {\r\n      if (\r\n        !currentUnit ||\r\n        !currentUnit.images.length\r\n      ) {\r\n        return;\r\n      }\r\n\r\n      currentImageIndex =\r\n        (\r\n          currentImageIndex +\r\n          currentUnit.images.length\r\n        ) %\r\n        currentUnit.images.length;\r\n\r\n      modalImage.src =\r\n        currentUnit.images[\r\n          currentImageIndex\r\n        ];\r\n\r\n      modalImage.alt =\r\n        currentUnit.name +\r\n        \" \u2013 Bild \" +\r\n        (\r\n          currentImageIndex +\r\n          1\r\n        );\r\n\r\n      modalCounter.textContent =\r\n        (\r\n          currentImageIndex +\r\n          1\r\n        ) +\r\n        \" \/ \" +\r\n        currentUnit.images.length;\r\n\r\n      previousButton.hidden =\r\n        currentUnit.images.length < 2;\r\n\r\n      nextButton.hidden =\r\n        currentUnit.images.length < 2;\r\n    }\r\n\r\n    function openModal(unit) {\r\n      if (!unit) {\r\n        return;\r\n      }\r\n\r\n      currentUnit = unit;\r\n      currentImageIndex = 0;\r\n\r\n      modalTitle.textContent =\r\n        unit.name;\r\n\r\n      modalCapacity.textContent =\r\n        unit.capacity > 0\r\n          ? (\r\n              \"Bis zu \" +\r\n              unit.capacity +\r\n              \" G\u00e4ste\"\r\n            )\r\n          : \"\";\r\n\r\n      modalDescription.textContent =\r\n        unit.description ||\r\n        \"Verf\u00fcgbarkeit und Preis dieser Ferienunterkunft ansehen.\";\r\n\r\n      const today =\r\n        new Date();\r\n\r\n      const defaultCheckin =\r\n        addDays(\r\n          today,\r\n          1\r\n        );\r\n\r\n      const defaultCheckout =\r\n        addDays(\r\n          defaultCheckin,\r\n          Math.max(\r\n            7,\r\n            minimumStay\r\n          )\r\n        );\r\n\r\n      checkinInput.min =\r\n        localDate(today);\r\n\r\n      checkinInput.value =\r\n        localDate(\r\n          defaultCheckin\r\n        );\r\n\r\n      checkoutInput.min =\r\n        localDate(\r\n          addDays(\r\n            defaultCheckin,\r\n            minimumStay\r\n          )\r\n        );\r\n\r\n      checkoutInput.value =\r\n        localDate(\r\n          defaultCheckout\r\n        );\r\n\r\n      if (bookingOpenUntil) {\r\n        checkinInput.max =\r\n          bookingOpenUntil;\r\n\r\n        checkoutInput.max =\r\n          bookingOpenUntil;\r\n      }\r\n\r\n      guestsInput.max =\r\n        String(\r\n          unit.capacity > 0\r\n            ? unit.capacity\r\n            : 20\r\n        );\r\n\r\n      guestsInput.value =\r\n        String(\r\n          Math.min(\r\n            2,\r\n            unit.capacity > 0\r\n              ? unit.capacity\r\n              : 2\r\n          )\r\n        );\r\n\r\n      resetQuote();\r\n      updateModalImage();\r\n\r\n      modal.hidden = false;\r\n      modal.scrollTop = 0;\r\n\r\n      document\r\n        .documentElement\r\n        .classList\r\n        .add(\r\n          \"bno-direct-modal-open\"\r\n        );\r\n\r\n      document\r\n        .body\r\n        .classList\r\n        .add(\r\n          \"bno-direct-modal-open\"\r\n        );\r\n    }\r\n\r\n    function closeModal() {\r\n      modal.hidden = true;\r\n\r\n      document\r\n        .documentElement\r\n        .classList\r\n        .remove(\r\n          \"bno-direct-modal-open\"\r\n        );\r\n\r\n      document\r\n        .body\r\n        .classList\r\n        .remove(\r\n          \"bno-direct-modal-open\"\r\n        );\r\n\r\n      currentUnit = null;\r\n      currentQuote = null;\r\n    }\r\n\r\n    async function loadCatalog() {\r\n      try {\r\n        const query =\r\n          new URLSearchParams({\r\n            serviceId:\r\n              serviceId,\r\n\r\n            credsKey:\r\n              catalogKey,\r\n\r\n            lang:\r\n              currentLanguage()\r\n          });\r\n\r\n        const payload =\r\n          await fetchJson(\r\n            endpoint(\r\n              apiBase,\r\n              \"\/api\/mews\/catalog?\"\r\n            ) +\r\n            query.toString()\r\n          );\r\n\r\n        const rows =\r\n          extractRows(payload);\r\n\r\n        const publicationKeys = [\r\n          \"isPublished\",\r\n          \"IsPublished\",\r\n          \"is_published\",\r\n          \"publishStatus\",\r\n          \"PublishStatus\",\r\n          \"publish_status\"\r\n        ];\r\n\r\n        const hasPublicationFields =\r\n          rows.some(\r\n            function (row) {\r\n              return publicationKeys\r\n                .some(\r\n                  function (key) {\r\n                    return Object\r\n                      .prototype\r\n                      .hasOwnProperty\r\n                      .call(\r\n                        row || {},\r\n                        key\r\n                      );\r\n                  }\r\n                );\r\n            }\r\n          );\r\n\r\n        const seen =\r\n          new Set();\r\n\r\n        units =\r\n          rows\r\n            .map(normaliseUnit)\r\n            .filter(\r\n              function (unit) {\r\n                if (\r\n                  !unit.id ||\r\n                  seen.has(unit.id)\r\n                ) {\r\n                  return false;\r\n                }\r\n\r\n                seen.add(unit.id);\r\n\r\n                if (\r\n                  allowedIds.size &&\r\n                  !allowedIds.has(\r\n                    unit.id\r\n                  )\r\n                ) {\r\n                  return false;\r\n                }\r\n\r\n                if (\r\n                  excludedIds.has(\r\n                    unit.id\r\n                  )\r\n                ) {\r\n                  return false;\r\n                }\r\n\r\n                if (\r\n                  !isPublished(\r\n                    unit,\r\n                    hasPublicationFields\r\n                  )\r\n                ) {\r\n                  return false;\r\n                }\r\n\r\n                return (\r\n                  unit.images.length > 0\r\n                );\r\n              }\r\n            )\r\n            .sort(\r\n              function (\r\n                first,\r\n                second\r\n              ) {\r\n                return first.name.localeCompare(\r\n                  second.name,\r\n                  currentLanguage(),\r\n                  {\r\n                    sensitivity:\r\n                      \"base\"\r\n                  }\r\n                );\r\n              }\r\n            );\r\n\r\n        if (!units.length) {\r\n          grid.innerHTML = \"\";\r\n\r\n          grid.setAttribute(\r\n            \"aria-busy\",\r\n            \"false\"\r\n          );\r\n\r\n          moreWrap.hidden = true;\r\n\r\n          setStatus(\r\n            \"Derzeit konnten keine ver\u00f6ffentlichten Unterk\u00fcnfte geladen werden.\",\r\n            true\r\n          );\r\n\r\n          return;\r\n        }\r\n\r\n        renderUnits();\r\n      } catch (error) {\r\n        console.error(\r\n          \"BNO catalog error:\",\r\n          error\r\n        );\r\n\r\n        grid.innerHTML = \"\";\r\n\r\n        grid.setAttribute(\r\n          \"aria-busy\",\r\n          \"false\"\r\n        );\r\n\r\n        moreWrap.hidden = true;\r\n\r\n        setStatus(\r\n          error &&\r\n          error.message\r\n            ? (\r\n                \"Die Ferienunterk\u00fcnfte konnten nicht geladen werden: \" +\r\n                error.message\r\n              )\r\n            : \"Die Ferienunterk\u00fcnfte konnten nicht geladen werden. Bitte aktualisieren Sie die Seite und versuchen Sie es erneut.\",\r\n          true\r\n        );\r\n      }\r\n    }\r\n\r\n    availabilityForm.addEventListener(\r\n      \"submit\",\r\n      async function (event) {\r\n        event.preventDefault();\r\n\r\n        if (!currentUnit) {\r\n          return;\r\n        }\r\n\r\n        const from =\r\n          clean(\r\n            checkinInput.value\r\n          );\r\n\r\n        const to =\r\n          clean(\r\n            checkoutInput.value\r\n          );\r\n\r\n        const adults =\r\n          Number(\r\n            guestsInput.value ||\r\n            0\r\n          );\r\n\r\n        resetQuote();\r\n\r\n        if (\r\n          !from ||\r\n          !to ||\r\n          to <= from\r\n        ) {\r\n          setMessage(\r\n            \"Bitte w\u00e4hlen Sie g\u00fcltige Daten. Die Abreise muss nach der Anreise liegen.\",\r\n            \"error\"\r\n          );\r\n\r\n          return;\r\n        }\r\n\r\n        if (\r\n          numberOfNights(\r\n            from,\r\n            to\r\n          ) <\r\n          minimumStay\r\n        ) {\r\n          setMessage(\r\n            \"Der Mindestaufenthalt betr\u00e4gt \" +\r\n              minimumStay +\r\n              (\r\n                minimumStay === 1\r\n                  ? \" Nacht.\"\r\n                  : \" N\u00e4chte.\"\r\n              ),\r\n            \"error\"\r\n          );\r\n\r\n          return;\r\n        }\r\n\r\n        if (\r\n          !Number.isInteger(adults) ||\r\n          adults < 1\r\n        ) {\r\n          setMessage(\r\n            \"Bitte geben Sie eine g\u00fcltige Anzahl von G\u00e4sten an.\",\r\n            \"error\"\r\n          );\r\n\r\n          return;\r\n        }\r\n\r\n        if (\r\n          currentUnit.capacity > 0 &&\r\n          adults >\r\n          currentUnit.capacity\r\n        ) {\r\n          setMessage(\r\n            \"Diese Ferienunterkunft bietet Platz f\u00fcr bis zu \" +\r\n              currentUnit.capacity +\r\n              \" guests.\",\r\n            \"error\"\r\n          );\r\n\r\n          return;\r\n        }\r\n\r\n        checkButton.disabled = true;\r\n\r\n        checkButton.textContent =\r\n          \"Pr\u00fcfung l\u00e4uft \u2026\";\r\n\r\n        setMessage(\r\n          \"Verf\u00fcgbarkeit und Preis werden gepr\u00fcft \u2026\",\r\n          \"\"\r\n        );\r\n\r\n        try {\r\n          const payload =\r\n            await fetchJson(\r\n              endpoint(\r\n                apiBase,\r\n                \"\/api\/bno-direct\/quote\"\r\n              ),\r\n              {\r\n                method: \"POST\",\r\n\r\n                headers: {\r\n                  Accept:\r\n                    \"application\/json\",\r\n\r\n                  \"Content-Type\":\r\n                    \"application\/json\"\r\n                },\r\n\r\n                body:\r\n                  JSON.stringify({\r\n                    partnerKey:\r\n                      partnerKey,\r\n\r\n                    areaKey:\r\n                      areaKey,\r\n\r\n                    resourceCategoryId:\r\n                      currentUnit.id,\r\n\r\n                    from:\r\n                      from,\r\n\r\n                    to:\r\n                      to,\r\n\r\n                    adults:\r\n                      adults\r\n                  })\r\n              }\r\n            );\r\n\r\n          const quoteResult =\r\n            payload.data ||\r\n            payload;\r\n\r\n          const pricing =\r\n            quoteResult.pricing ||\r\n            {};\r\n\r\n          const currency =\r\n            clean(\r\n              quoteResult.currency ||\r\n              \"EUR\"\r\n            ).toUpperCase();\r\n\r\n          const guestTotal =\r\n            Number(\r\n              pricing.guestTotalGross\r\n            );\r\n\r\n          const payNow =\r\n            Number(\r\n              pricing.bnoPrepaidGross\r\n            );\r\n\r\n          const payLater =\r\n            Number(\r\n              pricing.remainingGross\r\n            );\r\n\r\n          if (\r\n            !Number.isFinite(\r\n              guestTotal\r\n            ) ||\r\n            guestTotal <= 0\r\n          ) {\r\n            throw new Error(\r\n              \"Der Gesamtpreis konnte nicht abgerufen werden.\"\r\n            );\r\n          }\r\n\r\n          currentQuote = {\r\n            from:\r\n              from,\r\n\r\n            to:\r\n              to,\r\n\r\n            adults:\r\n              adults,\r\n\r\n            total:\r\n              guestTotal,\r\n\r\n            payNow:\r\n              Number.isFinite(\r\n                payNow\r\n              )\r\n                ? payNow\r\n                : 0,\r\n\r\n            payLater:\r\n              Number.isFinite(\r\n                payLater\r\n              )\r\n                ? payLater\r\n                : Math.max(\r\n                    0,\r\n                    guestTotal -\r\n                    (\r\n                      Number.isFinite(\r\n                        payNow\r\n                      )\r\n                        ? payNow\r\n                        : 0\r\n                    )\r\n                  )\r\n          };\r\n\r\n          totalNode.textContent =\r\n            formatMoney(\r\n              currentQuote.total,\r\n              currency\r\n            );\r\n\r\n          payNowNode.textContent =\r\n            formatMoney(\r\n              currentQuote.payNow,\r\n              currency\r\n            );\r\n\r\n          payLaterNode.textContent =\r\n            formatMoney(\r\n              currentQuote.payLater,\r\n              currency\r\n            );\r\n\r\n          priceBox.hidden = false;\r\n          continueWrap.hidden = false;\r\n\r\n          setMessage(\r\n            \"Die Ferienunterkunft ist verf\u00fcgbar vom \" +\r\n              formatDate(from) +\r\n              \" bis \" +\r\n              formatDate(to) +\r\n              \".\",\r\n            \"success\"\r\n          );\r\n        } catch (error) {\r\n          console.error(\r\n            \"BNO quote error:\",\r\n            error\r\n          );\r\n\r\n          let message =\r\n            error &&\r\n            error.message\r\n              ? error.message\r\n              : \"Die Verf\u00fcgbarkeit konnte nicht gepr\u00fcft werden. Bitte versuchen Sie es erneut.\";\r\n\r\n          if (\r\n            error &&\r\n            error.code ===\r\n            \"booking_not_open\"\r\n          ) {\r\n            message =\r\n              \"Buchungen sind f\u00fcr dieses Reiseziel noch nicht freigeschaltet.\";\r\n          }\r\n\r\n          if (\r\n            error &&\r\n            error.code ===\r\n            \"not_available\"\r\n          ) {\r\n            message =\r\n              \"Die Ferienunterkunft ist f\u00fcr die ausgew\u00e4hlten Daten nicht verf\u00fcgbar.\";\r\n          }\r\n\r\n          setMessage(\r\n            message,\r\n            \"error\"\r\n          );\r\n        } finally {\r\n          checkButton.disabled =\r\n            false;\r\n\r\n          checkButton.textContent =\r\n            \"Verf\u00fcgbarkeit pr\u00fcfen\";\r\n        }\r\n      }\r\n    );\r\n\r\n    checkinInput.addEventListener(\r\n      \"change\",\r\n      function () {\r\n        if (\r\n          checkinInput.value\r\n        ) {\r\n          const minimumCheckout =\r\n            localDate(\r\n              addDays(\r\n                new Date(\r\n                  checkinInput.value +\r\n                  \"T12:00:00\"\r\n                ),\r\n                minimumStay\r\n              )\r\n            );\r\n\r\n          checkoutInput.min =\r\n            minimumCheckout;\r\n\r\n          if (\r\n            !checkoutInput.value ||\r\n            checkoutInput.value <\r\n            minimumCheckout\r\n          ) {\r\n            checkoutInput.value =\r\n              minimumCheckout;\r\n          }\r\n        }\r\n\r\n        resetQuote();\r\n      }\r\n    );\r\n\r\n    checkoutInput.addEventListener(\r\n      \"change\",\r\n      resetQuote\r\n    );\r\n\r\n    guestsInput.addEventListener(\r\n      \"change\",\r\n      resetQuote\r\n    );\r\n\r\n    continueButton.addEventListener(\r\n      \"click\",\r\n      function () {\r\n        if (\r\n          !currentUnit ||\r\n          !currentQuote\r\n        ) {\r\n          return;\r\n        }\r\n\r\n        const bookingUrl =\r\n          new URL(\r\n            bookingBase,\r\n            window.location.origin\r\n          );\r\n\r\n        bookingUrl.searchParams.set(\r\n          \"partnerKey\",\r\n          partnerKey\r\n        );\r\n\r\n        bookingUrl.searchParams.set(\r\n          \"areaKey\",\r\n          areaKey\r\n        );\r\n\r\n        bookingUrl.searchParams.set(\r\n          \"resourceCategoryId\",\r\n          currentUnit.id\r\n        );\r\n\r\n        bookingUrl.searchParams.set(\r\n          \"from\",\r\n          currentQuote.from\r\n        );\r\n\r\n        bookingUrl.searchParams.set(\r\n          \"to\",\r\n          currentQuote.to\r\n        );\r\n\r\n        bookingUrl.searchParams.set(\r\n          \"adults\",\r\n          String(\r\n            currentQuote.adults\r\n          )\r\n        );\r\n\r\n        bookingUrl.searchParams.set(\r\n          \"propertyName\",\r\n          currentUnit.name\r\n        );\r\n\r\n        bookingUrl.searchParams.set(\r\n          \"lang\",\r\n          currentLanguage()\r\n        );\r\n\r\n        if (\r\n          currentUnit.images[0]\r\n        ) {\r\n          bookingUrl.searchParams.set(\r\n            \"imageUrl\",\r\n            currentUnit.images[0]\r\n          );\r\n        }\r\n\r\n        window.location.assign(\r\n          bookingUrl.toString()\r\n        );\r\n      }\r\n    );\r\n\r\n    previousButton.addEventListener(\r\n      \"click\",\r\n      function () {\r\n        currentImageIndex -= 1;\r\n        updateModalImage();\r\n      }\r\n    );\r\n\r\n    nextButton.addEventListener(\r\n      \"click\",\r\n      function () {\r\n        currentImageIndex += 1;\r\n        updateModalImage();\r\n      }\r\n    );\r\n\r\n    modal\r\n      .querySelectorAll(\r\n        \"[data-bno-close]\"\r\n      )\r\n      .forEach(\r\n        function (button) {\r\n          button.addEventListener(\r\n            \"click\",\r\n            closeModal\r\n          );\r\n        }\r\n      );\r\n\r\n    document.addEventListener(\r\n      \"keydown\",\r\n      function (event) {\r\n        if (modal.hidden) {\r\n          return;\r\n        }\r\n\r\n        if (\r\n          event.key ===\r\n          \"Escape\"\r\n        ) {\r\n          closeModal();\r\n        }\r\n\r\n        if (\r\n          event.key ===\r\n          \"ArrowLeft\"\r\n        ) {\r\n          currentImageIndex -= 1;\r\n          updateModalImage();\r\n        }\r\n\r\n        if (\r\n          event.key ===\r\n          \"ArrowRight\"\r\n        ) {\r\n          currentImageIndex += 1;\r\n          updateModalImage();\r\n        }\r\n      }\r\n    );\r\n\r\n    moreButton.addEventListener(\r\n      \"click\",\r\n      function () {\r\n        visibleCount =\r\n          Math.min(\r\n            visibleCount +\r\n            pageSize,\r\n            units.length\r\n          );\r\n\r\n        renderUnits();\r\n      }\r\n    );\r\n\r\n    loadCatalog();\r\n  }\r\n\r\n  function mountCatalogs(scope) {\r\n    const context =\r\n      scope &&\r\n      scope.querySelectorAll\r\n        ? scope\r\n        : document;\r\n\r\n    context\r\n      .querySelectorAll(\r\n        ROOT_SELECTOR\r\n      )\r\n      .forEach(\r\n        initialiseCatalog\r\n      );\r\n  }\r\n\r\n  function startCatalogs() {\r\n    mountCatalogs(document);\r\n\r\n    window.setTimeout(\r\n      function () {\r\n        mountCatalogs(document);\r\n      },\r\n      500\r\n    );\r\n\r\n    window.setTimeout(\r\n      function () {\r\n        mountCatalogs(document);\r\n      },\r\n      1500\r\n    );\r\n  }\r\n\r\n  if (\r\n    document.readyState ===\r\n    \"loading\"\r\n  ) {\r\n    document.addEventListener(\r\n      \"DOMContentLoaded\",\r\n      startCatalogs,\r\n      {\r\n        once: true\r\n      }\r\n    );\r\n  } else {\r\n    startCatalogs();\r\n  }\r\n\r\n  new MutationObserver(\r\n    function (mutations) {\r\n      mutations.forEach(\r\n        function (mutation) {\r\n          mutation.addedNodes.forEach(\r\n            function (node) {\r\n              if (\r\n                !node ||\r\n                node.nodeType !== 1\r\n              ) {\r\n                return;\r\n              }\r\n\r\n              if (\r\n                node.matches &&\r\n                node.matches(\r\n                  ROOT_SELECTOR\r\n                )\r\n              ) {\r\n                initialiseCatalog(node);\r\n              }\r\n\r\n              if (\r\n                node.querySelectorAll\r\n              ) {\r\n                mountCatalogs(node);\r\n              }\r\n            }\r\n          );\r\n        }\r\n      );\r\n    }\r\n  ).observe(\r\n    document.documentElement,\r\n    {\r\n      childList: true,\r\n      subtree: true\r\n    }\r\n  );\r\n})();\r\n<\/script>\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-5c8a94d e-flex e-con-boxed e-con e-parent\" data-id=\"5c8a94d\" 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-b03ec5a elementor-widget elementor-widget-html\" data-id=\"b03ec5a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section id=\"kart\" class=\"bno-section bno-section--light\">\r\n  <div class=\"bno-shell\">\r\n\r\n    <div class=\"bno-section-heading\">\r\n\r\n      <span class=\"bno-eyebrow\">\r\n        Karte\r\n      <\/span>\r\n\r\n      <h2>\r\n        Lage von Tignes\u2013Val d\u2019Is\u00e8re ansehen\r\n      <\/h2>\r\n\r\n      <p>\r\n        Die Karte bietet einen \u00dcberblick \u00fcber die Region und erleichtert die Orientierung zwischen Tignes, Val d\u2019Is\u00e8re, den Berggebieten und den Alpend\u00f6rfern, bevor Sie die Ferienunterk\u00fcnfte entdecken.\r\n      <\/p>\r\n\r\n    <\/div>\r\n\r\n    <div class=\"bno-map-card\">\r\n\r\n      <iframe\r\n        src=\"https:\/\/www.google.com\/maps?q=Tignes%20Val%20d%27Isere%2C%20France&output=embed\"\r\n        title=\"Karte von Tignes und Val d\u2019Is\u00e8re in Frankreich\"\r\n        width=\"100%\"\r\n        height=\"520\"\r\n        style=\"\r\n          display: block;\r\n          border: 0;\r\n        \"\r\n        loading=\"lazy\"\r\n        referrerpolicy=\"no-referrer-when-downgrade\"\r\n        allowfullscreen\r\n      ><\/iframe>\r\n\r\n    <\/div>\r\n\r\n  <\/div>\r\n<\/section>\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-355ce5ca e-flex e-con-boxed e-con e-parent\" data-id=\"355ce5ca\" 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-463eb0ca elementor-widget elementor-widget-html\" data-id=\"463eb0ca\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section class=\"bno-section bno-section--light\">\r\n  <div class=\"bno-shell\">\r\n\r\n    <div class=\"bno-editorial-split\">\r\n\r\n      <div class=\"bno-editorial-split__content\">\r\n\r\n        <span class=\"bno-eyebrow\">\r\n          Erlebnisse in der Region\r\n        <\/span>\r\n\r\n        <h2>\r\n          Skifahren, Hochgebirge und alpine Erlebnisse das ganze Jahr \u00fcber\r\n        <\/h2>\r\n\r\n        <p>\r\n          Tignes\u2013Val d\u2019Is\u00e8re ist ein idealer Ausgangspunkt, um einen komfortablen Aufenthalt mit Skifahren, Wandern, Radfahren und aktiven Tagen in den franz\u00f6sischen Alpen zu verbinden.\r\n        <\/p>\r\n\r\n        <p>\r\n          Im Winter stehen Skifahren, Snowboarden und weitere Schneeaktivit\u00e4ten im Mittelpunkt. In den Sommermonaten l\u00e4dt die Berglandschaft zum Wandern, Radfahren und zu Ausfl\u00fcgen in hohen Lagen ein. Die D\u00f6rfer bieten au\u00dferdem Restaurants, Gesch\u00e4fte und gem\u00fctliche Treffpunkte.\r\n        <\/p>\r\n\r\n        <div class=\"bno-actions\">\r\n\r\n          <a href=\"#fakta\" class=\"bno-btn bno-btn--primary\">\r\n            Praktische Informationen ansehen\r\n          <\/a>\r\n\r\n        <\/div>\r\n\r\n      <\/div>\r\n\r\n      <div class=\"bno-editorial-split__media\">\r\n\r\n        <img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/08\/apartment-kumo-079.jpg?w=800&#038;ssl=1\" alt=\"Bergerlebnisse und Urlaub in Tignes\u2013Val d\u2019Is\u00e8re\" loading=\"lazy\" style=\" display: block; width: 100%; height: 100%; min-height: 420px; object-fit: cover; \" \/>\r\n\r\n      <\/div>\r\n\r\n    <\/div>\r\n\r\n  <\/div>\r\n<\/section>\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-566f345b e-flex e-con-boxed e-con e-parent\" data-id=\"566f345b\" 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-3e7651d7 elementor-widget elementor-widget-html\" data-id=\"3e7651d7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section id=\"fakta\" class=\"bno-section bno-section--soft\">\r\n  <div class=\"bno-shell\">\r\n\r\n    <div class=\"bno-section-heading\">\r\n\r\n      <span class=\"bno-eyebrow\">\r\n        Praktische Informationen\r\n      <\/span>\r\n\r\n      <h2>\r\n        Aktivit\u00e4ten, Mobilit\u00e4t und n\u00fctzliche Informationen in Tignes\u2013Val d\u2019Is\u00e8re\r\n      <\/h2>\r\n\r\n      <p>\r\n        Hier finden Sie einen \u00dcberblick \u00fcber einige der Merkmale, die Tignes\u2013Val d\u2019Is\u00e8re sowohl f\u00fcr Kurzaufenthalte als auch f\u00fcr l\u00e4ngere Urlaube attraktiv machen.\r\n      <\/p>\r\n\r\n    <\/div>\r\n\r\n    <div class=\"bno-info-grid\">\r\n\r\n      <div class=\"bno-value-card\">\r\n\r\n        <h3>\r\n          Winteraktivit\u00e4ten\r\n        <\/h3>\r\n\r\n        <p>\r\n          Die Region bietet alpines Skifahren, Snowboarden und weitere Winteraktivit\u00e4ten f\u00fcr Familien, Anf\u00e4nger und erfahrene Skifahrer.\r\n        <\/p>\r\n\r\n      <\/div>\r\n\r\n      <div class=\"bno-value-card\">\r\n\r\n        <h3>\r\n          Sommeraktivit\u00e4ten\r\n        <\/h3>\r\n\r\n        <p>\r\n          Im Sommer l\u00e4sst sich die Bergregion zu Fu\u00df oder mit dem Fahrrad erkunden. Wanderm\u00f6glichkeiten und Aktivit\u00e4ten in hohen Lagen machen das Gebiet auch au\u00dferhalb der Wintersaison attraktiv.\r\n        <\/p>\r\n\r\n      <\/div>\r\n\r\n      <div class=\"bno-value-card\">\r\n\r\n        <h3>\r\n          Mobilit\u00e4t und Erreichbarkeit\r\n        <\/h3>\r\n\r\n        <p>\r\n          Die Verkehrsm\u00f6glichkeiten variieren je nach Saison und Lage der Unterkunft. Abh\u00e4ngig von Ihrem Ankunftsort und Ihrer Reiseroute k\u00f6nnen organisierte Transfers oder ein Mietwagen praktisch sein.\r\n        <\/p>\r\n\r\n      <\/div>\r\n\r\n      <div class=\"bno-value-card\">\r\n\r\n        <h3>\r\n          Einkaufen und Serviceangebote\r\n        <\/h3>\r\n\r\n        <p>\r\n          In den D\u00f6rfern finden Sie Lebensmittelgesch\u00e4fte, Sportl\u00e4den, Skiverleih und weitere praktische Angebote f\u00fcr Ihren Aufenthalt.\r\n        <\/p>\r\n\r\n      <\/div>\r\n\r\n      <div class=\"bno-value-card\">\r\n\r\n        <h3>\r\n          Restaurants und Gastronomie\r\n        <\/h3>\r\n\r\n        <p>\r\n          Die Region bietet eine vielf\u00e4ltige Auswahl an Restaurants, Caf\u00e9s und weiteren gastronomischen Adressen mit lokalen und internationalen Genusserlebnissen.\r\n        <\/p>\r\n\r\n      <\/div>\r\n\r\n      <div class=\"bno-value-card\">\r\n\r\n        <h3>\r\n          Apr\u00e8s-Ski und Dorfleben\r\n        <\/h3>\r\n\r\n        <p>\r\n          Nach aktiven Tagen in den Bergen finden Sie Restaurants, Bars und gem\u00fctliche Treffpunkte. Das Angebot variiert je nach Dorf und Saison.\r\n        <\/p>\r\n\r\n      <\/div>\r\n\r\n    <\/div>\r\n\r\n  <\/div>\r\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4b04e3e7 elementor-widget elementor-widget-html\" data-id=\"4b04e3e7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section class=\"bno-section bno-destination-cta\">\r\n  <div class=\"bno-shell\">\r\n\r\n    <div class=\"bno-cta-box\">\r\n\r\n      <div class=\"bno-cta-box__content\">\r\n\r\n        <span class=\"bno-eyebrow\">\r\n          N\u00e4chster Schritt\r\n        <\/span>\r\n\r\n        <h2>\r\n          Die passende Ferienunterkunft in Tignes\u2013Val d\u2019Is\u00e8re finden\r\n        <\/h2>\r\n\r\n        <p>\r\n          Entdecken Sie unsere Auswahl an Ferienwohnungen, sehen Sie Fotos und Beschreibungen an und finden Sie die Ferienunterkunft, die am besten zu Ihrem Aufenthalt in Tignes\u2013Val d\u2019Is\u00e8re passt.\r\n        <\/p>\r\n\r\n      <\/div>\r\n\r\n      <div class=\"bno-cta-box__action\">\r\n\r\n        <a href=\"#enheter\" class=\" bno-btn bno-btn--primary bno-cta-button \">\r\n          <span>\r\n            Ferienunterk\u00fcnfte ansehen\r\n          <\/span>\r\n\r\n          <span aria-hidden=\"true\">\r\n            \u2192\r\n          <\/span>\r\n        <\/a>\r\n\r\n      <\/div>\r\n\r\n    <\/div>\r\n\r\n  <\/div>\r\n<\/section>\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-7939c9ff e-flex e-con-boxed e-con e-parent\" data-id=\"7939c9ff\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\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>Tignes\u2013Val d\u2019Is\u00e8re \u00b7 Frankreich Unterk\u00fcnfte in Tignes\u2013Val d\u2019Is\u00e8re \u2013 die passende Ferienunterkunft f\u00fcr Ihre Reise finden Entdecken Sie handverlesene Ferienwohnungen in Val d\u2019Is\u00e8re und Tignes\u2013Val d\u2019Is\u00e8re. Finden Sie eine Ferienunterkunft, die ganzj\u00e4hrig eine komfortable Basis zum Skifahren, f\u00fcr Bergerlebnisse und aktive Aufenthalte bietet. Ferienunterk\u00fcnfte ansehen Karte ansehen Unterk\u00fcnfte in Tignes\u2013Val d\u2019Is\u00e8re finden Tignes\u2013Val d\u2019Is\u00e8re eignet [&hellip;]<\/p>\n","protected":false},"author":260013438,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_wpcom_ai_launchpad_about_page":false,"_wpcom_ai_launchpad_gallery_page":false,"_wpcom_ai_launchpad_contact_page":false,"_wpcom_ai_launchpad_events_page":false,"_wpcom_ai_launchpad_video_page":false,"_wpcom_ai_launchpad_portfolio_piece":false,"footnotes":"","_yoast_wpseo_title":"","_yoast_wpseo_metadesc":"","_yoast_wpseo_focuskw":"","rank_math_title":"Unterk\u00fcnfte in Tignes\u2013Val d\u2019Is\u00e8re \u2013 nahe den Skigebieten | BNO Travel","rank_math_description":"Finden Sie Unterk\u00fcnfte in Tignes\u2013Val d\u2019Is\u00e8re. Entdecken Sie handverlesene Chalets und Ferienwohnungen nahe Skigebieten, Bergd\u00f6rfern und ganzj\u00e4hrigen Aktivit\u00e4ten.","rank_math_focus_keyword":"Unterk\u00fcnfte in Tignes\u2013Val d\u2019Is\u00e8re","_dpc-meta-title":"","_dpc-meta-description":"","_dpc-keyword":""},"class_list":["post-94483","page","type-page","status-publish","hentry"],"jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/PgDuwj-ozV","jetpack-related-posts":[{"id":94501,"url":"https:\/\/bno-travel.com\/de\/de-franske-alper\/","url_meta":{"origin":94483,"position":0},"title":"Franz\u00f6sische Alpen","author":"Jan Terje \u00c5s","date":"28. Juli 2026","format":false,"excerpt":"Reiseziele \u00b7 Franz\u00f6sische Alpen Unterk\u00fcnfte in den franz\u00f6sischen Alpen \u2013 das passende Reiseziel f\u00fcr Ihre Reise finden Entdecken Sie einige der attraktivsten Bergreiseziele Frankreichs. W\u00e4hlen Sie unter anderem aus 3 Vall\u00e9es, Chamonix, Portes du Soleil, Paradiski, Grand Massif und Tignes\u2013Val d\u2019Is\u00e8re. Reiseziele ansehen Die franz\u00f6sischen Alpen entdecken Das passende Bergreiseziel\u2026","rel":"","context":"\u00c4hnlicher Beitrag","block_context":{"text":"\u00c4hnlicher Beitrag","link":""},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/07\/AdobeStock_1896172195.jpeg?fit=1200%2C675&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/07\/AdobeStock_1896172195.jpeg?fit=1200%2C675&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/07\/AdobeStock_1896172195.jpeg?fit=1200%2C675&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/07\/AdobeStock_1896172195.jpeg?fit=1200%2C675&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/07\/AdobeStock_1896172195.jpeg?fit=1200%2C675&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":94405,"url":"https:\/\/bno-travel.com\/en\/de-franske-alper\/","url_meta":{"origin":94483,"position":1},"title":"French Alps","author":"Jan Terje \u00c5s","date":"28. Juli 2026","format":false,"excerpt":"Destinations \u00b7 French Alps Accommodation in the French Alps \u2013 find the destination that suits your trip Explore some of the most attractive mountain destinations in France. Choose from 3 Vall\u00e9es, Chamonix, Portes du Soleil, Paradiski, Grand Massif and Tignes\u2013Val d\u2019Is\u00e8re, among others. View destinations Discover the French Alps Find\u2026","rel":"","context":"\u00c4hnlicher Beitrag","block_context":{"text":"\u00c4hnlicher Beitrag","link":""},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/07\/AdobeStock_1896172195.jpeg?fit=1200%2C675&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/07\/AdobeStock_1896172195.jpeg?fit=1200%2C675&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/07\/AdobeStock_1896172195.jpeg?fit=1200%2C675&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/07\/AdobeStock_1896172195.jpeg?fit=1200%2C675&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/07\/AdobeStock_1896172195.jpeg?fit=1200%2C675&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":94645,"url":"https:\/\/bno-travel.com\/fi\/de-franske-alper\/","url_meta":{"origin":94483,"position":2},"title":"Ranskan Alpit","author":"Jan Terje \u00c5s","date":"28. Juli 2026","format":false,"excerpt":"Kohteet \u00b7 Ranskan Alpit Majoitus Ranskan Alpeilla \u2013 l\u00f6yd\u00e4 matkallesi sopiva kohde Tutustu Ranskan houkuttelevimpiin vuoristokohteisiin. Valitse muun muassa 3 Vall\u00e9es, Chamonix, Portes du Soleil, Paradiski, Grand Massif tai Tignes\u2013Val d\u2019Is\u00e8re. N\u00e4yt\u00e4 kohteet Tutustu Ranskan Alppeihin L\u00f6yd\u00e4 sopiva vuoristokohde Majoitus Ranskan Alpeilla Ranskan Alpit koostuvat luonteeltaan, sijainniltaan ja tunnelmaltaan erilaisista\u2026","rel":"","context":"\u00c4hnlicher Beitrag","block_context":{"text":"\u00c4hnlicher Beitrag","link":""},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/07\/AdobeStock_1896172195.jpeg?fit=1200%2C675&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/07\/AdobeStock_1896172195.jpeg?fit=1200%2C675&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/07\/AdobeStock_1896172195.jpeg?fit=1200%2C675&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/07\/AdobeStock_1896172195.jpeg?fit=1200%2C675&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/07\/AdobeStock_1896172195.jpeg?fit=1200%2C675&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":94549,"url":"https:\/\/bno-travel.com\/nl\/de-franske-alper\/","url_meta":{"origin":94483,"position":3},"title":"De Franse Alpen","author":"Jan Terje \u00c5s","date":"28. Juli 2026","format":false,"excerpt":"Bestemmingen \u00b7 De Franse Alpen Accommodatie in de Franse Alpen \u2013 vind de bestemming die bij je reis past Ontdek enkele van de aantrekkelijkste bergbestemmingen in Frankrijk. Kies onder meer uit 3 Vall\u00e9es, Chamonix, Portes du Soleil, Paradiski, Grand Massif en Tignes\u2013Val d\u2019Is\u00e8re. Bekijk de bestemmingen Ontdek de Franse Alpen\u2026","rel":"","context":"\u00c4hnlicher Beitrag","block_context":{"text":"\u00c4hnlicher Beitrag","link":""},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/07\/AdobeStock_1896172195.jpeg?fit=1200%2C675&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/07\/AdobeStock_1896172195.jpeg?fit=1200%2C675&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/07\/AdobeStock_1896172195.jpeg?fit=1200%2C675&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/07\/AdobeStock_1896172195.jpeg?fit=1200%2C675&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/07\/AdobeStock_1896172195.jpeg?fit=1200%2C675&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":94453,"url":"https:\/\/bno-travel.com\/da\/de-franske-alper\/","url_meta":{"origin":94483,"position":4},"title":"De franske Alper","author":"Jan Terje \u00c5s","date":"28. Juli 2026","format":false,"excerpt":"Destinationer \u00b7 De franske Alper Overnatning i De franske Alper \u2013 find den destination, der passer til din rejse Udforsk nogle af de mest attraktive bjergdestinationer i Frankrig. V\u00e6lg mellem blandt andet 3 Vall\u00e9es, Chamonix, Portes du Soleil, Paradiski, Grand Massif og Tignes\u2013Val d\u2019Is\u00e8re. Se destinationerne Oplev De franske Alper\u2026","rel":"","context":"\u00c4hnlicher Beitrag","block_context":{"text":"\u00c4hnlicher Beitrag","link":""},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/07\/AdobeStock_1896172195.jpeg?fit=1200%2C675&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/07\/AdobeStock_1896172195.jpeg?fit=1200%2C675&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/07\/AdobeStock_1896172195.jpeg?fit=1200%2C675&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/07\/AdobeStock_1896172195.jpeg?fit=1200%2C675&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/07\/AdobeStock_1896172195.jpeg?fit=1200%2C675&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":94597,"url":"https:\/\/bno-travel.com\/sv\/de-franske-alper\/","url_meta":{"origin":94483,"position":5},"title":"De franska Alperna","author":"Jan Terje \u00c5s","date":"28. Juli 2026","format":false,"excerpt":"Destinationer \u00b7 De franska Alperna Boende i de franska Alperna \u2013 hitta destinationen som passar din resa Utforska n\u00e5gra av de mest attraktiva bergsdestinationerna i Frankrike. V\u00e4lj mellan bland annat 3 Vall\u00e9es, Chamonix, Portes du Soleil, Paradiski, Grand Massif och Tignes\u2013Val d\u2019Is\u00e8re. Se destinationerna Uppt\u00e4ck de franska Alperna Hitta r\u00e4tt\u2026","rel":"","context":"\u00c4hnlicher Beitrag","block_context":{"text":"\u00c4hnlicher Beitrag","link":""},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/07\/AdobeStock_1896172195.jpeg?fit=1200%2C675&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/07\/AdobeStock_1896172195.jpeg?fit=1200%2C675&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/07\/AdobeStock_1896172195.jpeg?fit=1200%2C675&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/07\/AdobeStock_1896172195.jpeg?fit=1200%2C675&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/07\/AdobeStock_1896172195.jpeg?fit=1200%2C675&ssl=1&resize=1050%2C600 3x"},"classes":[]}],"_links":{"self":[{"href":"https:\/\/bno-travel.com\/de\/wp-json\/wp\/v2\/pages\/94483","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bno-travel.com\/de\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/bno-travel.com\/de\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/bno-travel.com\/de\/wp-json\/wp\/v2\/users\/260013438"}],"replies":[{"embeddable":true,"href":"https:\/\/bno-travel.com\/de\/wp-json\/wp\/v2\/comments?post=94483"}],"version-history":[{"count":1,"href":"https:\/\/bno-travel.com\/de\/wp-json\/wp\/v2\/pages\/94483\/revisions"}],"predecessor-version":[{"id":94484,"href":"https:\/\/bno-travel.com\/de\/wp-json\/wp\/v2\/pages\/94483\/revisions\/94484"}],"wp:attachment":[{"href":"https:\/\/bno-travel.com\/de\/wp-json\/wp\/v2\/media?parent=94483"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}