{"id":94940,"date":"2026-08-04T00:13:15","date_gmt":"2026-08-03T22:13:15","guid":{"rendered":"https:\/\/bno-travel.com\/overnatting-ved-rice-lake\/"},"modified":"2026-08-11T10:51:03","modified_gmt":"2026-08-11T08:51:03","slug":"overnatting-ved-rice-lake","status":"publish","type":"page","link":"https:\/\/bno-travel.com\/es\/overnatting-ved-rice-lake\/","title":{"rendered":"Alojamiento en Rice Lake"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"94940\" class=\"elementor elementor-94940 elementor-93694\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-436edd89 e-flex e-con-boxed e-con e-parent\" data-id=\"436edd89\" 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-451be5b7 elementor-widget elementor-widget-html\" data-id=\"451be5b7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section class=\"bno-rice bno-area-hero bno-area-hero--premium\" style=\" background-color: #0c1a38; background-image: linear-gradient( rgba(7, 17, 31, 0.42), rgba(7, 17, 31, 0.66) ), url('https:\/\/elmhirst.ca\/wp-content\/uploads\/2024\/12\/website-image-1512x1628-waterfront.jpg'); background-position: center 58%; background-size: cover; background-repeat: no-repeat; \">\r\n<div class=\"bno-shell\">\r\n<div class=\"bno-area-hero__content\">\r\n<span class=\"bno-eyebrow\">\r\n        Rice Lake \u00b7 Ontario \u00b7 Canada\r\n      <\/span>\r\n<h1>\r\n        Alojamiento en Rice Lake: encuentra la caba\u00f1a adecuada para tu estancia\r\n      <\/h1>\r\n<p class=\"bno-lead\">\r\n        Descubre las caba\u00f1as de Elmhirst\u2019s Resort, en la orilla norte de Rice Lake. Encuentra una base c\u00f3moda para disfrutar de tiempo en familia, actividades acu\u00e1ticas, experiencias en la naturaleza, spa y d\u00edas tranquilos en Ontario.\r\n      <\/p>\r\n<div class=\"bno-actions\">\r\n<a class=\"bno-btn bno-btn--primary\" href=\"#enheter\">\r\n          Ver las caba\u00f1as\r\n        <\/a>\r\n<a class=\"bno-btn bno-btn--secondary\" href=\"#oppdag-elmhirst\">\r\n          Descubrir Elmhirst\u2019s Resort\r\n        <\/a>\r\n<\/div>\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-7f4367a8 e-flex e-con-boxed e-con e-parent\" data-id=\"7f4367a8\" 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-4149143b elementor-widget elementor-widget-html\" data-id=\"4149143b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section class=\"bno-rice bno-section bno-section--light bno-area-intro\" id=\"rice-lake\">\r\n<div class=\"bno-shell bno-narrow\">\r\n<div class=\"bno-section-heading\">\r\n<span class=\"bno-eyebrow\">\r\n        Alojamiento en Rice Lake\r\n      <\/span>\r\n<h2>\r\n        Una estancia junto a un lago en Ontario, cerca de la naturaleza y las actividades\r\n      <\/h2>\r\n<p>\r\n        Rice Lake se encuentra en la regi\u00f3n de Kawarthas, en Ontario, y ofrece un entorno tranquilo para unas vacaciones junto al agua. Puedes combinar la estancia en tu propia caba\u00f1a con navegaci\u00f3n, pirag\u00fcismo, kayak, pesca, paseos y d\u00edas de descanso junto al lago.\r\n      <\/p>\r\n<p>\r\n        Elmhirst\u2019s Resort est\u00e1 situado en la orilla norte de Rice Lake, cerca de Keene y Peterborough. El resort es ideal para familias, parejas y grupos que buscan una estancia completa con alojamiento, restauraci\u00f3n, bienestar y actividades en un mismo lugar.\r\n      <\/p>\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-edfc671 e-flex e-con-boxed e-con e-parent\" data-id=\"edfc671\" 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-10884b13 elementor-widget elementor-widget-html\" data-id=\"10884b13\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- =========================================================\r\nBULK 3 \u2013 ELMHIRST'S RESORT \/ RICE LAKE\r\nSelvstendig versjon: korrekt katalogseksjon + BNO Direct-motor\r\n========================================================= -->\r\n<section class=\"bno-section bno-section--soft bno-direct-catalog\" data-api-base=\"https:\/\/bno-api-staging.onrender.com\" data-area-key=\"elmhirst-resort\" data-bno-direct-catalog=\"\" data-booking-base=\"https:\/\/booking.bno-travel.com\/booking\/complete\" data-booking-open-until=\"2027-05-01\" data-booking-partner-key=\"ELMHIRST\" data-catalog-creds-key=\"ELMHIRST\" data-destination-label=\"Rice Lake\" data-initial-count=\"12\" data-location-label=\"Elmhirst\u2019s Resort \u00b7 Rice Lake \u00b7 Ontario, Canada\" data-minimum-stay-nights=\"1\" data-service-id=\"e263f6f4-651a-4ed8-b3c2-b26700598970\" id=\"enheter\">\r\n<div class=\"bno-shell\">\r\n<div class=\"bno-section-heading\">\r\n<span class=\"bno-eyebrow\">\r\n        Caba\u00f1as en Rice Lake\r\n      <\/span>\r\n<h2>\r\n        Encuentra la caba\u00f1a adecuada para tu estancia en Elmhirst\u2019s Resort\r\n      <\/h2>\r\n<p>\r\n        Descubre las caba\u00f1as de Elmhirst\u2019s Resort, en la orilla norte de Rice Lake. Consulta fotos, capacidad y descripciones antes de comprobar el precio y la disponibilidad.\r\n      <\/p>\r\n<\/div>\r\n<div aria-live=\"polite\" class=\"bno-direct-catalog__status\" data-bno-status=\"\" role=\"status\">\r\n      Cargando caba\u00f1as\u2026\r\n    <\/div>\r\n<div aria-busy=\"true\" aria-live=\"polite\" class=\"bno-direct-catalog__grid\" data-bno-grid=\"\"><\/div>\r\n<div class=\"bno-direct-more-wrap\" data-bno-more-wrap=\"\" hidden=\"\">\r\n<button class=\"bno-direct-more\" data-bno-more=\"\" type=\"button\">\r\n        Mostrar m\u00e1s caba\u00f1as\r\n      <\/button>\r\n<\/div>\r\n<\/div>\r\n<\/section>\r\n<style>\r\n\/* =========================================================\r\n   BNO TRAVEL \u2013 FELLES BULK 3 \/ DESTINASJONSKATALOG V2\r\n   Samme kort, modal, mobilvisning og prissjekk p\u00e5 alle sider\r\n   ========================================================= *\/\r\n\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: #5b667b;\r\n  --bno-border: rgba(12, 26, 56, 0.14);\r\n  --bno-soft: #eef3f8;\r\n  --bno-white: #ffffff;\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\n.bno-direct-catalog__status {\r\n  margin: 28px 0 0;\r\n  padding: 15px 17px;\r\n  border: 1px solid var(--bno-border);\r\n  border-radius: 14px;\r\n  background: var(--bno-white) !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  margin-top: 28px;\r\n}\r\n\r\n.bno-direct-card {\r\n  display: flex;\r\n  min-width: 0;\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  box-shadow: 0 12px 34px rgba(12, 26, 56, 0.08);\r\n  transition: transform 0.2s ease, 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;\r\n  width: 100% !important;\r\n  min-width: 0 !important;\r\n  height: 100% !important;\r\n  margin: 0 !important;\r\n  padding: 0 !important;\r\n  overflow: hidden;\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  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  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  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  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  -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-more:hover,\r\n.bno-direct-more:focus,\r\n.bno-direct-more:active,\r\n.bno-direct-check-button,\r\n.bno-direct-check-button:hover,\r\n.bno-direct-check-button:focus,\r\n.bno-direct-check-button:active,\r\n.bno-direct-book-button,\r\n.bno-direct-book-button:hover,\r\n.bno-direct-book-button:focus,\r\n.bno-direct-book-button:active {\r\n  display: inline-flex !important;\r\n  align-items: center;\r\n  justify-content: center;\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-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;\r\n  text-align: center;\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-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.bno-direct-book-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  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: minmax(0, 1.16fr) 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  display: block;\r\n  width: 100% !important;\r\n  height: 100% !important;\r\n  min-width: 0 !important;\r\n  min-height: 0 !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}\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  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}\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  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-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__close:hover,\r\n.bno-direct-modal__close:focus,\r\n.bno-direct-modal__close:active {\r\n  position: absolute;\r\n  z-index: 12;\r\n  top: 14px;\r\n  right: 14px;\r\n  display: grid !important;\r\n  width: 44px !important;\r\n  min-width: 44px !important;\r\n  height: 44px !important;\r\n  min-height: 44px !important;\r\n  margin: 0 !important;\r\n  padding: 0 !important;\r\n  place-items: center !important;\r\n  border: 1px solid rgba(255, 255, 255, 0.25) !important;\r\n  border-radius: 999px !important;\r\n  background: var(--bno-navy) !important;\r\n  color: #ffffff !important;\r\n  box-shadow: 0 6px 20px rgba(0, 0, 0, 0.24) !important;\r\n  font-family: Arial, sans-serif !important;\r\n  font-size: 28px !important;\r\n  font-weight: 400 !important;\r\n  line-height: 1 !important;\r\n  cursor: pointer;\r\n}\r\n\r\n.bno-direct-modal__arrow,\r\n.bno-direct-modal__arrow:hover,\r\n.bno-direct-modal__arrow:focus,\r\n.bno-direct-modal__arrow:active {\r\n  position: absolute;\r\n  z-index: 8;\r\n  top: 50%;\r\n  display: grid !important;\r\n  width: 48px !important;\r\n  min-width: 48px !important;\r\n  height: 48px !important;\r\n  min-height: 48px !important;\r\n  margin: 0 !important;\r\n  padding: 0 !important;\r\n  place-items: center !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.92) !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-size: 35px !important;\r\n  font-weight: 400 !important;\r\n  line-height: 1 !important;\r\n  cursor: pointer;\r\n  transform: translateY(-50%);\r\n}\r\n\r\n.bno-direct-modal__arrow--prev { left: 18px; }\r\n.bno-direct-modal__arrow--next { right: 18px; }\r\n.bno-direct-modal__arrow[hidden] { display: none !important; }\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  white-space: nowrap;\r\n}\r\n\r\n.bno-direct-booking {\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  white-space: normal !important;\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-form input:focus {\r\n  border-color: var(--bno-navy) !important;\r\n  outline: 2px solid rgba(12, 26, 56, 0.14) !important;\r\n  outline-offset: 1px;\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  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  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  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 { border-top: 0; }\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  white-space: normal !important;\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: 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    overflow: visible !important;\r\n    border: 0 !important;\r\n    border-radius: 0 !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: 34px clamp(20px, 5vw, 44px) 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    gap: 7px !important;\r\n    padding: 17px 18px !important;\r\n  }\r\n\r\n  .bno-direct-price__row strong {\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 { left: 12px; }\r\n  .bno-direct-modal__arrow--next { right: 12px; }\r\n  .bno-direct-modal__counter { right: 12px; bottom: 12px; }\r\n}\r\n\r\n<\/style>\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 cleanBase(value) {\r\n    return String(value || \"\").trim().replace(\/\\\/+$\/, \"\");\r\n  }\r\n\r\n  function apiUrl(base, path) {\r\n    const clean = cleanBase(base);\r\n    const route = String(path || \"\");\r\n\r\n    if (clean.endsWith(\"\/api\") && route.startsWith(\"\/api\/\")) {\r\n      return clean + route.slice(4);\r\n    }\r\n\r\n    return clean + route;\r\n  }\r\n\r\n  function escapeHtml(value) {\r\n    return String(value == null ? \"\" : value)\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 node = document.createElement(\"div\");\r\n    node.innerHTML = String(value || \"\");\r\n    return String(node.textContent || node.innerText || \"\")\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 (object && object[key] != null && object[key] !== \"\") {\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      String(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 languageCode() { return \"es\"; }\r\n\r\n  function localYmd(date) {\r\n    const year = date.getFullYear();\r\n    const month = String(date.getMonth() + 1).padStart(2, \"0\");\r\n    const day = String(date.getDate()).padStart(2, \"0\");\r\n    return year + \"-\" + month + \"-\" + day;\r\n  }\r\n\r\n  function addDays(date, days) {\r\n    const next = new Date(date.getTime());\r\n    next.setDate(next.getDate() + Number(days || 0));\r\n    return next;\r\n  }\r\n\r\n  function nightsBetween(from, to) {\r\n    const start = new Date(from + \"T12:00:00\");\r\n    const end = new Date(to + \"T12:00:00\");\r\n    return Math.round((end.getTime() - start.getTime()) \/ 86400000);\r\n  }\r\n\r\n  function formatDate(value) {\r\n    try {\r\n      return new Intl.DateTimeFormat(\"es-ES\", {\r\n        day: \"numeric\",\r\n        month: \"short\",\r\n        year: \"numeric\"\r\n      }).format(new Date(value + \"T12:00:00\"));\r\n    } catch (_error) {\r\n      return value;\r\n    }\r\n  }\r\n\r\n  function formatMoney(amount, currency) {\r\n    try {\r\n      return new Intl.NumberFormat(\"es-ES\", {\r\n        style: \"currency\",\r\n        currency: String(currency || \"EUR\").toUpperCase(),\r\n        minimumFractionDigits: 2,\r\n        maximumFractionDigits: 2\r\n      }).format(Number(amount || 0));\r\n    } catch (_error) {\r\n      return Number(amount || 0).toFixed(2) + \" \" + String(currency || \"EUR\");\r\n    }\r\n  }\r\n\r\n  function uniqueImages(row) {\r\n    const images = [];\r\n\r\n    function add(value) {\r\n      if (!value) return;\r\n\r\n      if (typeof value === \"string\") {\r\n        const url = value.trim();\r\n        if (\/^https?:\\\/\\\/\/i.test(url)) images.push(url);\r\n        return;\r\n      }\r\n\r\n      if (typeof value === \"object\") {\r\n        add(\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)) items.forEach(add);\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(add);\r\n\r\n    return Array.from(new Set(images));\r\n  }\r\n\r\n  function extractRows(payload) {\r\n    const candidates = [\r\n      payload && payload.data && payload.data.resourceCategories,\r\n      payload && payload.data && payload.data.categories,\r\n      payload && payload.data && payload.data.items,\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)) return candidate;\r\n    }\r\n\r\n    return [];\r\n  }\r\n\r\n  function normaliseUnit(row) {\r\n    const categoryId = String(\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    ).trim();\r\n\r\n    return {\r\n      categoryId: categoryId,\r\n      name: String(\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        ]) || \"Alojamiento\"\r\n      ).trim(),\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      capacity: 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        ])\r\n      ) || 0,\r\n      images: uniqueImages(row),\r\n      published: firstValue(row, [\r\n        \"isPublished\",\r\n        \"IsPublished\",\r\n        \"is_published\",\r\n        \"publishStatus\",\r\n        \"PublishStatus\",\r\n        \"publish_status\",\r\n        \"status\",\r\n        \"Status\"\r\n      ])\r\n    };\r\n  }\r\n\r\n  function isPublished(unit, hasPublicationFields) {\r\n    if (!hasPublicationFields) return true;\r\n    if (typeof unit.published === \"boolean\") return unit.published;\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(String(unit.published || \"\").trim().toLowerCase());\r\n  }\r\n\r\n  function buildModal(destinationLabel, locationLabel) {\r\n    const modal = document.createElement(\"div\");\r\n    modal.className = \"bno-direct-modal\";\r\n    modal.hidden = true;\r\n    modal.setAttribute(\"role\", \"dialog\");\r\n    modal.setAttribute(\"aria-modal\", \"true\");\r\n    modal.setAttribute(\"aria-label\", \"Alojamiento en \" + destinationLabel);\r\n\r\n    modal.innerHTML = `\r\n      <button type=\"button\" class=\"bno-direct-modal__backdrop\" data-bno-close aria-label=\"Cerrar\"><\/button>\r\n      <div class=\"bno-direct-modal__dialog\">\r\n        <button type=\"button\" class=\"bno-direct-modal__close\" data-bno-close aria-label=\"Cerrar\">\u00d7<\/button>\r\n        <div class=\"bno-direct-modal__gallery\">\r\n          <button type=\"button\" class=\"bno-direct-modal__arrow bno-direct-modal__arrow--prev\" data-bno-prev aria-label=\"Imagen anterior\">\u2039<\/button>\r\n          <img decoding=\"async\" class=\"bno-direct-modal__image\" data-bno-modal-image src=\"\" alt=\"\" \/>\r\n          <button type=\"button\" class=\"bno-direct-modal__arrow bno-direct-modal__arrow--next\" data-bno-next aria-label=\"Imagen siguiente\">\u203a<\/button>\r\n          <span class=\"bno-direct-modal__counter\" data-bno-counter><\/span>\r\n        <\/div>\r\n        <div class=\"bno-direct-modal__content\">\r\n          <span class=\"bno-direct-eyebrow\">${escapeHtml(locationLabel || destinationLabel)}<\/span>\r\n          <h3 data-bno-modal-title><\/h3>\r\n          <p class=\"bno-direct-modal__capacity\" data-bno-modal-capacity><\/p>\r\n          <div class=\"bno-direct-modal__description\" data-bno-modal-description><\/div>\r\n          <div class=\"bno-direct-booking\">\r\n            <div class=\"bno-direct-booking__heading\">\r\n              <span class=\"bno-direct-eyebrow\">Comprueba tu estancia<\/span>\r\n              <h4>Comprueba si el alojamiento est\u00e1 disponible<\/h4>\r\n            <\/div>\r\n            <form class=\"bno-direct-form\" data-bno-availability-form novalidate>\r\n              <label>\r\n                <span>Llegada<\/span>\r\n                <input type=\"date\" data-bno-checkin required \/>\r\n              <\/label>\r\n              <label>\r\n                <span>Salida<\/span>\r\n                <input type=\"date\" data-bno-checkout required \/>\r\n              <\/label>\r\n              <label>\r\n                <span>Hu\u00e9spedes<\/span>\r\n                <input type=\"number\" data-bno-guests min=\"1\" step=\"1\" value=\"2\" required \/>\r\n              <\/label>\r\n              <button type=\"submit\" class=\"bno-direct-check-button\" data-bno-check-button>Comprobar disponibilidad<\/button>\r\n            <\/form>\r\n            <div class=\"bno-direct-message\" data-bno-message role=\"status\" aria-live=\"polite\" hidden><\/div>\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>Precio total de la estancia<\/span>\r\n                <strong data-bno-total><\/strong>\r\n              <\/div>\r\n              <div class=\"bno-direct-price__row\">\r\n                <span>A pagar ahora a BNO Travel<\/span>\r\n                <strong data-bno-pay-now><\/strong>\r\n              <\/div>\r\n              <div class=\"bno-direct-price__row\">\r\n                <span>Importe restante a pagar al alojamiento<\/span>\r\n                <strong data-bno-pay-later><\/strong>\r\n              <\/div>\r\n            <\/div>\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>Continuar con la reserva<\/button>\r\n              <p>Los datos de los hu\u00e9spedes, las condiciones y el pago se completan en el motor de reservas seguro de BNO Travel.<\/p>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n    `;\r\n\r\n    document.body.appendChild(modal);\r\n    return modal;\r\n  }\r\n\r\n  async function fetchJson(url, options) {\r\n    const controller = new AbortController();\r\n    const timeout = window.setTimeout(function () {\r\n      controller.abort();\r\n    }, 60000);\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 = await response.json().catch(function () {\r\n        return null;\r\n      });\r\n\r\n      if (!response.ok || !payload || payload.ok === false) {\r\n        const error = new Error(\r\n          payload && (payload.detail || payload.message || payload.error)\r\n            ? payload.detail || payload.message || payload.error\r\n            : \"No se ha podido completar la solicitud.\"\r\n        );\r\n        error.code = payload && payload.error ? String(payload.error) : \"\";\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 init(root) {\r\n    if (!root || root.dataset.bnoInitialised === \"1\") return;\r\n    root.dataset.bnoInitialised = \"1\";\r\n\r\n    const apiBase = cleanBase(root.dataset.apiBase);\r\n    const bookingBase = String(\r\n      root.dataset.bookingBase ||\r\n      \"https:\/\/booking.bno-travel.com\/booking\/complete\"\r\n    ).trim();\r\n    const catalogCredsKey = String(root.dataset.catalogCredsKey || \"\").trim();\r\n    const bookingPartnerKey = String(\r\n      root.dataset.bookingPartnerKey || catalogCredsKey\r\n    ).trim();\r\n    const serviceId = String(root.dataset.serviceId || \"\").trim();\r\n    const areaKey = String(root.dataset.areaKey || \"\").trim();\r\n    const destinationLabel = String(\r\n      root.dataset.destinationLabel || \"destino\"\r\n    ).trim();\r\n    const locationLabel = String(\r\n      root.dataset.locationLabel || destinationLabel\r\n    ).trim();\r\n    const bookingOpenUntil = String(\r\n      root.dataset.bookingOpenUntil || \"2027-05-01\"\r\n    ).trim();\r\n    const minimumStayNights = Math.max(\r\n      1,\r\n      Number(root.dataset.minimumStayNights || 1) || 1\r\n    );\r\n    const initialCount = Math.max(\r\n      1,\r\n      Number(root.dataset.initialCount || 12) || 12\r\n    );\r\n    const allowedIds = parseIdSet(root.dataset.allowedUnitIds);\r\n    const excludedIds = parseIdSet(root.dataset.excludedUnitIds);\r\n\r\n    const status = root.querySelector(\"[data-bno-status]\");\r\n    const grid = root.querySelector(\"[data-bno-grid]\");\r\n    const moreWrap = root.querySelector(\"[data-bno-more-wrap]\");\r\n    const moreButton = root.querySelector(\"[data-bno-more]\");\r\n\r\n    if (!apiBase || !catalogCredsKey || !serviceId || !areaKey) {\r\n      if (status) {\r\n        status.textContent = \"Falta la configuraci\u00f3n necesaria para Bulk 3.\";\r\n        status.classList.add(\"is-error\");\r\n      }\r\n      return;\r\n    }\r\n\r\n    if (!status || !grid || !moreWrap || !moreButton) return;\r\n\r\n    const modal = buildModal(destinationLabel, locationLabel);\r\n    const modalImage = modal.querySelector(\"[data-bno-modal-image]\");\r\n    const modalTitle = modal.querySelector(\"[data-bno-modal-title]\");\r\n    const modalCapacity = modal.querySelector(\"[data-bno-modal-capacity]\");\r\n    const modalDescription = modal.querySelector(\"[data-bno-modal-description]\");\r\n    const modalCounter = modal.querySelector(\"[data-bno-counter]\");\r\n    const prevButton = modal.querySelector(\"[data-bno-prev]\");\r\n    const nextButton = modal.querySelector(\"[data-bno-next]\");\r\n    const closeButtons = modal.querySelectorAll(\"[data-bno-close]\");\r\n    const availabilityForm = modal.querySelector(\"[data-bno-availability-form]\");\r\n    const checkinInput = modal.querySelector(\"[data-bno-checkin]\");\r\n    const checkoutInput = modal.querySelector(\"[data-bno-checkout]\");\r\n    const guestsInput = modal.querySelector(\"[data-bno-guests]\");\r\n    const checkButton = modal.querySelector(\"[data-bno-check-button]\");\r\n    const messageNode = modal.querySelector(\"[data-bno-message]\");\r\n    const priceBox = modal.querySelector(\"[data-bno-price]\");\r\n    const totalNode = modal.querySelector(\"[data-bno-total]\");\r\n    const payNowNode = modal.querySelector(\"[data-bno-pay-now]\");\r\n    const payLaterNode = modal.querySelector(\"[data-bno-pay-later]\");\r\n    const continueWrap = modal.querySelector(\"[data-bno-continue-wrap]\");\r\n    const continueButton = modal.querySelector(\"[data-bno-continue]\");\r\n\r\n    let units = [];\r\n    let visibleCount = initialCount;\r\n    let currentUnit = null;\r\n    let currentImageIndex = 0;\r\n    let currentQuote = null;\r\n    let previousBodyOverflow = \"\";\r\n\r\n    function setStatus(message, isError) {\r\n      status.textContent = message || \"\";\r\n      status.hidden = !message;\r\n      status.classList.toggle(\"is-error\", Boolean(isError));\r\n    }\r\n\r\n    function setMessage(message, type) {\r\n      messageNode.textContent = message || \"\";\r\n      messageNode.hidden = !message;\r\n      messageNode.classList.remove(\"is-error\", \"is-success\");\r\n      if (type) messageNode.classList.add(\"is-\" + type);\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 cardHtml(unit, index) {\r\n      const image = unit.images[0];\r\n      const capacity = unit.capacity > 0\r\n        ? \"Hasta \" + unit.capacity + \" hu\u00e9spedes\"\r\n        : \"Ver detalles y fotos\";\r\n      const description = unit.description ||\r\n        \"Consulta las fotos, la capacidad y la disponibilidad de este alojamiento.\";\r\n\r\n      return `\r\n        <article class=\"bno-direct-card\">\r\n          <button type=\"button\" class=\"bno-direct-card__button\" data-bno-unit-index=\"${index}\">\r\n            <div class=\"bno-direct-card__media\">\r\n              <img decoding=\"async\" src=\"${escapeHtml(image)}\" alt=\"${escapeHtml(unit.name)}\" loading=\"lazy\" \/>\r\n              <span class=\"bno-direct-card__count\">${unit.images.length} photos<\/span>\r\n            <\/div>\r\n            <div class=\"bno-direct-card__body\">\r\n              <h3>${escapeHtml(unit.name)}<\/h3>\r\n              <p class=\"bno-direct-card__meta\">${escapeHtml(capacity)}<\/p>\r\n              <p class=\"bno-direct-card__description\">${escapeHtml(description)}<\/p>\r\n              <span class=\"bno-direct-card__link\">Ver alojamiento \u2192<\/span>\r\n            <\/div>\r\n          <\/button>\r\n        <\/article>\r\n      `;\r\n    }\r\n\r\n    function renderUnits() {\r\n      const visible = units.slice(0, visibleCount);\r\n      grid.innerHTML = visible.map(cardHtml).join(\"\");\r\n      grid.setAttribute(\"aria-busy\", \"false\");\r\n\r\n      grid.querySelectorAll(\"[data-bno-unit-index]\").forEach(function (button) {\r\n        button.addEventListener(\"click\", function () {\r\n          openModal(units[Number(button.dataset.bnoUnitIndex)]);\r\n        });\r\n      });\r\n\r\n      moreWrap.hidden = visibleCount >= units.length;\r\n      setStatus(\r\n        \"Affichage de \" + visible.length + \" sur \" + units.length +\r\n        \" alojamientos en \" + destinationLabel + \".\",\r\n        false\r\n      );\r\n    }\r\n\r\n    function updateModalImage() {\r\n      if (!currentUnit || !currentUnit.images.length) return;\r\n\r\n      currentImageIndex =\r\n        (currentImageIndex + currentUnit.images.length) % currentUnit.images.length;\r\n\r\n      modalImage.src = currentUnit.images[currentImageIndex];\r\n      modalImage.alt = currentUnit.name + \" \u2013 foto \" + (currentImageIndex + 1);\r\n      modalCounter.textContent =\r\n        currentImageIndex + 1 + \" \/ \" + currentUnit.images.length;\r\n      prevButton.hidden = currentUnit.images.length < 2;\r\n      nextButton.hidden = currentUnit.images.length < 2;\r\n    }\r\n\r\n    function openModal(unit) {\r\n      if (!unit) return;\r\n\r\n      currentUnit = unit;\r\n      currentImageIndex = 0;\r\n      modalTitle.textContent = unit.name;\r\n      modalCapacity.textContent = unit.capacity > 0\r\n        ? \"Hasta \" + unit.capacity + \" hu\u00e9spedes\"\r\n        : \"\";\r\n      modalDescription.textContent = unit.description ||\r\n        \"Comprueba la disponibilidad y el precio de este alojamiento.\";\r\n\r\n      const today = new Date();\r\n      const checkin = addDays(today, 1);\r\n      const checkout = addDays(checkin, Math.max(7, minimumStayNights));\r\n\r\n      checkinInput.min = localYmd(today);\r\n      checkoutInput.min = localYmd(addDays(checkin, minimumStayNights));\r\n      checkinInput.value = localYmd(checkin);\r\n      checkoutInput.value = localYmd(checkout);\r\n\r\n      if (bookingOpenUntil) {\r\n        checkinInput.max = bookingOpenUntil;\r\n        checkoutInput.max = bookingOpenUntil;\r\n      }\r\n\r\n      guestsInput.max = String(unit.capacity > 0 ? unit.capacity : 20);\r\n      guestsInput.value = String(Math.min(2, unit.capacity > 0 ? unit.capacity : 2));\r\n\r\n      resetQuote();\r\n      updateModalImage();\r\n\r\n      previousBodyOverflow = document.body.style.overflow;\r\n      document.body.style.overflow = \"hidden\";\r\n      document.body.classList.add(\"bno-direct-modal-open\");\r\n      modal.hidden = false;\r\n      modal.scrollTop = 0;\r\n\r\n      const close = modal.querySelector(\".bno-direct-modal__close\");\r\n      if (close) close.focus();\r\n    }\r\n\r\n    function closeModal() {\r\n      modal.hidden = true;\r\n      document.body.style.overflow = previousBodyOverflow;\r\n      document.body.classList.remove(\"bno-direct-modal-open\");\r\n      currentUnit = null;\r\n      currentQuote = null;\r\n    }\r\n\r\n    async function loadCatalog() {\r\n      try {\r\n        const query = new URLSearchParams({\r\n          serviceId: serviceId,\r\n          credsKey: catalogCredsKey,\r\n          lang: languageCode()\r\n        });\r\n\r\n        const payload = await fetchJson(\r\n          apiUrl(apiBase, \"\/api\/mews\/catalog?\") + query.toString()\r\n        );\r\n        const rows = extractRows(payload);\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          \"status\",\r\n          \"Status\"\r\n        ];\r\n        const hasPublicationFields = rows.some(function (row) {\r\n          return publicationKeys.some(function (key) {\r\n            return Object.prototype.hasOwnProperty.call(row || {}, key);\r\n          });\r\n        });\r\n        const seen = new Set();\r\n\r\n        units = rows\r\n          .map(normaliseUnit)\r\n          .filter(function (unit) {\r\n            if (!unit.categoryId || seen.has(unit.categoryId)) return false;\r\n            seen.add(unit.categoryId);\r\n            if (allowedIds.size && !allowedIds.has(unit.categoryId)) return false;\r\n            if (excludedIds.has(unit.categoryId)) return false;\r\n            if (!isPublished(unit, hasPublicationFields)) return false;\r\n            return unit.images.length > 0;\r\n          })\r\n          .sort(function (a, b) {\r\n            return a.name.localeCompare(b.name, \"es\", { sensitivity: \"base\" });\r\n          });\r\n\r\n        if (!units.length) {\r\n          grid.innerHTML = \"\";\r\n          grid.setAttribute(\"aria-busy\", \"false\");\r\n          moreWrap.hidden = true;\r\n          setStatus(\r\n            \"No se pueden cargar los alojamientos publicados en este momento.\",\r\n            true\r\n          );\r\n          return;\r\n        }\r\n\r\n        renderUnits();\r\n      } catch (error) {\r\n        console.error(\"BNO destination catalog failed:\", error);\r\n        grid.innerHTML = \"\";\r\n        grid.setAttribute(\"aria-busy\", \"false\");\r\n        moreWrap.hidden = true;\r\n        setStatus(\r\n          \"No se pueden cargar los alojamientos. Actualiza la p\u00e1gina.\",\r\n          true\r\n        );\r\n      }\r\n    }\r\n\r\n    availabilityForm.addEventListener(\"submit\", async function (event) {\r\n      event.preventDefault();\r\n      if (!currentUnit) return;\r\n\r\n      const from = String(checkinInput.value || \"\").trim();\r\n      const to = String(checkoutInput.value || \"\").trim();\r\n      const adults = Number(guestsInput.value || 0);\r\n\r\n      resetQuote();\r\n\r\n      if (!from || !to || to <= from) {\r\n        setMessage(\"Elige fechas v\u00e1lidas. La fecha de salida debe ser posterior a la de llegada.\", \"error\");\r\n        return;\r\n      }\r\n\r\n      const nights = nightsBetween(from, to);\r\n      if (nights < minimumStayNights) {\r\n        setMessage(\r\n          \"La estancia m\u00ednima es de \" + minimumStayNights +\r\n          (minimumStayNights === 1 ? \" noche.\" : \" noches.\"),\r\n          \"error\"\r\n        );\r\n        return;\r\n      }\r\n\r\n      if (!Number.isInteger(adults) || adults < 1) {\r\n        setMessage(\"Choisissez un nombre de hu\u00e9spedes valide.\", \"error\");\r\n        return;\r\n      }\r\n\r\n      if (currentUnit.capacity > 0 && adults > currentUnit.capacity) {\r\n        setMessage(\r\n          \"Este alojamiento admite hasta \" +\r\n          currentUnit.capacity + \" hu\u00e9spedes.\",\r\n          \"error\"\r\n        );\r\n        return;\r\n      }\r\n\r\n      checkButton.disabled = true;\r\n      checkButton.textContent = \"Comprobando\u2026\";\r\n      setMessage(\"Comprobando disponibilidad y precio\u2026\", \"\");\r\n\r\n      try {\r\n        const payload = await fetchJson(\r\n          apiUrl(apiBase, \"\/api\/bno-direct\/quote\"),\r\n          {\r\n            method: \"POST\",\r\n            headers: {\r\n              Accept: \"application\/json\",\r\n              \"Content-Type\": \"application\/json\"\r\n            },\r\n            body: JSON.stringify({\r\n              partnerKey: bookingPartnerKey,\r\n              areaKey: areaKey,\r\n              resourceCategoryId: currentUnit.categoryId,\r\n              from: from,\r\n              to: to,\r\n              adults: adults\r\n            })\r\n          }\r\n        );\r\n\r\n        const quote = payload.data || payload;\r\n        const pricing = quote.pricing || {};\r\n        const currency = String(quote.currency || \"EUR\").toUpperCase();\r\n        const total = Number(pricing.guestTotalGross);\r\n        const payNow = Number(pricing.bnoPrepaidGross);\r\n        const payLater = Number(pricing.remainingGross);\r\n\r\n        if (!Number.isFinite(total) || total <= 0) {\r\n          throw new Error(\"No se ha podido obtener el precio total.\");\r\n        }\r\n\r\n        currentQuote = {\r\n          from: from,\r\n          to: to,\r\n          adults: adults,\r\n          currency: currency,\r\n          total: total,\r\n          payNow: Number.isFinite(payNow) ? payNow : 0,\r\n          payLater: Number.isFinite(payLater)\r\n            ? payLater\r\n            : Math.max(0, total - (Number.isFinite(payNow) ? payNow : 0))\r\n        };\r\n\r\n        totalNode.textContent = formatMoney(currentQuote.total, currency);\r\n        payNowNode.textContent = formatMoney(currentQuote.payNow, currency);\r\n        payLaterNode.textContent = formatMoney(currentQuote.payLater, currency);\r\n        priceBox.hidden = false;\r\n        continueWrap.hidden = false;\r\n\r\n        setMessage(\r\n          \"El alojamiento est\u00e1 disponible del \" + formatDate(from) +\r\n          \" al \" + formatDate(to) + \".\",\r\n          \"success\"\r\n        );\r\n      } catch (error) {\r\n        console.error(\"BNO destination quote failed:\", error);\r\n        const code = String(error && error.code || \"\");\r\n        let message = error && error.message\r\n          ? error.message\r\n          : \"No se ha podido comprobar la disponibilidad. Int\u00e9ntalo de nuevo.\";\r\n\r\n        if (code === \"booking_not_open\") {\r\n          message = \"Las reservas a\u00fan no est\u00e1n abiertas para este destino.\";\r\n        } else if (code === \"not_available\") {\r\n          message = \"El alojamiento no est\u00e1 disponible para el periodo seleccionado.\";\r\n        }\r\n\r\n        setMessage(message, \"error\");\r\n      } finally {\r\n        checkButton.disabled = false;\r\n        checkButton.textContent = \"Comprobar disponibilidad\";\r\n      }\r\n    });\r\n\r\n    function invalidateQuote() {\r\n      resetQuote();\r\n    }\r\n\r\n    checkinInput.addEventListener(\"change\", function () {\r\n      if (checkinInput.value) {\r\n        const minCheckout = localYmd(\r\n          addDays(new Date(checkinInput.value + \"T12:00:00\"), minimumStayNights)\r\n        );\r\n        checkoutInput.min = minCheckout;\r\n        if (!checkoutInput.value || checkoutInput.value < minCheckout) {\r\n          checkoutInput.value = minCheckout;\r\n        }\r\n      }\r\n      invalidateQuote();\r\n    });\r\n\r\n    checkoutInput.addEventListener(\"change\", invalidateQuote);\r\n    guestsInput.addEventListener(\"change\", invalidateQuote);\r\n\r\n    continueButton.addEventListener(\"click\", function () {\r\n      if (!currentUnit || !currentQuote) return;\r\n\r\n      const url = new URL(bookingBase, window.location.origin);\r\n      url.searchParams.set(\"partnerKey\", bookingPartnerKey);\r\n      url.searchParams.set(\"areaKey\", areaKey);\r\n      url.searchParams.set(\"resourceCategoryId\", currentUnit.categoryId);\r\n      url.searchParams.set(\"from\", currentQuote.from);\r\n      url.searchParams.set(\"to\", currentQuote.to);\r\n      url.searchParams.set(\"adults\", String(currentQuote.adults));\r\n      url.searchParams.set(\"propertyName\", currentUnit.name);\r\n      url.searchParams.set(\"lang\", languageCode());\r\n\r\n      if (currentUnit.images[0]) {\r\n        url.searchParams.set(\"imageUrl\", currentUnit.images[0]);\r\n      }\r\n\r\n      window.location.assign(url.toString());\r\n    });\r\n\r\n    prevButton.addEventListener(\"click\", function () {\r\n      currentImageIndex -= 1;\r\n      updateModalImage();\r\n    });\r\n\r\n    nextButton.addEventListener(\"click\", function () {\r\n      currentImageIndex += 1;\r\n      updateModalImage();\r\n    });\r\n\r\n    closeButtons.forEach(function (button) {\r\n      button.addEventListener(\"click\", closeModal);\r\n    });\r\n\r\n    modal.addEventListener(\"keydown\", function (event) {\r\n      if (event.key === \"Escape\") closeModal();\r\n      if (event.key === \"ArrowLeft\") {\r\n        currentImageIndex -= 1;\r\n        updateModalImage();\r\n      }\r\n      if (event.key === \"ArrowRight\") {\r\n        currentImageIndex += 1;\r\n        updateModalImage();\r\n      }\r\n    });\r\n\r\n    moreButton.addEventListener(\"click\", function () {\r\n      visibleCount = Math.min(visibleCount + initialCount, units.length);\r\n      renderUnits();\r\n    });\r\n\r\n    loadCatalog();\r\n  }\r\n\r\n  function mountAll(scope) {\r\n    const context = scope && scope.querySelectorAll ? scope : document;\r\n    context.querySelectorAll(ROOT_SELECTOR).forEach(init);\r\n  }\r\n\r\n  window.BNODirectDestinationCatalog = {\r\n    mountAll: mountAll\r\n  };\r\n\r\n  if (document.readyState === \"loading\") {\r\n    document.addEventListener(\"DOMContentLoaded\", function () {\r\n      mountAll(document);\r\n    }, { once: true });\r\n  } else {\r\n    mountAll(document);\r\n  }\r\n\r\n  window.addEventListener(\"load\", function () {\r\n    mountAll(document);\r\n  }, { once: true });\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-3cdd7024 e-flex e-con-boxed e-con e-parent\" data-id=\"3cdd7024\" 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-7965c99a elementor-widget elementor-widget-html\" data-id=\"7965c99a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section class=\"bno-rice bno-section bno-section--light\" id=\"kart\">\r\n<div class=\"bno-shell\">\r\n<div class=\"bno-section-heading\">\r\n<span class=\"bno-eyebrow\">\r\n        Mapa\r\n      <\/span>\r\n<h2>\r\n        Ver la ubicaci\u00f3n de Elmhirst\u2019s Resort en Rice Lake\r\n      <\/h2>\r\n<p>\r\n        El resort est\u00e1 situado en la orilla norte de Rice Lake, cerca de Keene, Ontario. El mapa te ayuda a orientarte por la zona y a planificar la continuaci\u00f3n del viaje desde Toronto u otros lugares de Ontario.\r\n      <\/p>\r\n<\/div>\r\n<div class=\"bno-map-card\">\r\n<iframe allowfullscreen=\"\" height=\"520\" loading=\"lazy\" referrerpolicy=\"no-referrer-when-downgrade\" src=\"https:\/\/www.google.com\/maps?q=Elmhirst%27s%20Resort%2C%201045%20Settlers%20Line%2C%20Keene%2C%20Ontario%2C%20Canada&amp;output=embed\" style=\"border: 0; display: block;\" title=\"Mapa que muestra Elmhirst\u2019s Resort junto a Rice Lake, Ontario\" width=\"100%\"><\/iframe>\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-7623fef5 e-flex e-con-boxed e-con e-parent\" data-id=\"7623fef5\" 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-122c1830 elementor-widget elementor-widget-html\" data-id=\"122c1830\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section class=\"bno-rice bno-section bno-section--light\" id=\"oppdag-elmhirst\">\r\n<div class=\"bno-shell\">\r\n<div class=\"bno-editorial-split\">\r\n<div class=\"bno-editorial-split__content\">\r\n<span class=\"bno-eyebrow\">\r\n          Descubrir Elmhirst\u2019s Resort\r\n        <\/span>\r\n<h2>\r\n          Caba\u00f1as junto al agua, servicios del resort y aut\u00e9ntica vida canadiense junto al lago\r\n        <\/h2>\r\n<p>\r\n          Elmhirst\u2019s Resort es un resort familiar abierto durante todo el a\u00f1o, con caba\u00f1as situadas a orillas de Rice Lake. La estancia combina la libertad de una caba\u00f1a privada con el acceso a los servicios y experiencias que ofrece el complejo.\r\n        <\/p>\r\n<p>\r\n          Puedes dedicar los d\u00edas a actividades acu\u00e1ticas, paseos por la finca, piscina y bienestar, o simplemente disfrutar de momentos tranquilos junto a la caba\u00f1a. Los restaurantes del resort tambi\u00e9n permiten alternar la cocina por cuenta propia con comidas preparadas con productos locales.\r\n        <\/p>\r\n<div class=\"bno-actions\">\r\n<a class=\"bno-btn bno-btn--primary\" href=\"#fakta\">\r\n            Ver la informaci\u00f3n pr\u00e1ctica\r\n          <\/a>\r\n<\/div>\r\n<\/div>\r\n<div class=\"bno-editorial-split__media\">\r\n<img data-recalc-dims=\"1\" decoding=\"async\" alt=\"Elmhirst\u2019s Resort y sus cottages junto a Rice Lake, Ontario\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/elmhirst.ca\/wp-content\/uploads\/2024\/12\/website-image-1512x1628-property.jpg?w=800&#038;ssl=1\"\/>\r\n<\/div>\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-55a53c6a e-flex e-con-boxed e-con e-parent\" data-id=\"55a53c6a\" 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-40258339 elementor-widget elementor-widget-html\" data-id=\"40258339\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section class=\"bno-rice bno-section bno-section--soft\" id=\"fakta\">\r\n<div class=\"bno-shell\">\r\n<div class=\"bno-section-heading\">\r\n<span class=\"bno-eyebrow\">\r\n        Informaci\u00f3n pr\u00e1ctica\r\n      <\/span>\r\n<h2>\r\n        Caba\u00f1as, actividades y servicios en Elmhirst\u2019s Resort\r\n      <\/h2>\r\n<p>\r\n        Aqu\u00ed tienes un resumen de lo que convierte al resort en una base flexible para unas vacaciones en Rice Lake en distintas \u00e9pocas del a\u00f1o.\r\n      <\/p>\r\n<\/div>\r\n<div class=\"bno-info-grid\">\r\n<article class=\"bno-value-card\">\r\n<span class=\"bno-value-card__number\">01<\/span>\r\n<h3>Caba\u00f1as junto al agua<\/h3>\r\n<p>\r\n          Elige entre caba\u00f1as de distintos tama\u00f1os y capacidades. Ofrecen una base privada para tu estancia, muy cerca de Rice Lake.\r\n        <\/p>\r\n<\/article>\r\n<article class=\"bno-value-card\">\r\n<span class=\"bno-value-card__number\">02<\/span>\r\n<h3>Actividades en el lago<\/h3>\r\n<p>\r\n          En temporada, los hu\u00e9spedes pueden explorar el lago en canoa, kayak o paddle surf, entre otras opciones. Tambi\u00e9n se ofrece alquiler de embarcaciones y otras actividades acu\u00e1ticas.\r\n        <\/p>\r\n<\/article>\r\n<article class=\"bno-value-card\">\r\n<span class=\"bno-value-card__number\">03<\/span>\r\n<h3>Piscinas y bienestar<\/h3>\r\n<p>\r\n          El resort cuenta con piscina cubierta, jacuzzi y sauna, adem\u00e1s de piscina exterior en verano y un spa con tratamientos.\r\n        <\/p>\r\n<\/article>\r\n<article class=\"bno-value-card\">\r\n<span class=\"bno-value-card__number\">04<\/span>\r\n<h3>Restauraci\u00f3n<\/h3>\r\n<p>\r\n          Hearthside Dining Room y Wild Blue Yonder Pub &amp; Patio ofrecen distintas experiencias gastron\u00f3micas. El resort tambi\u00e9n utiliza productos procedentes de su propia explotaci\u00f3n agr\u00edcola.\r\n        <\/p>\r\n<\/article>\r\n<article class=\"bno-value-card\">\r\n<span class=\"bno-value-card__number\">05<\/span>\r\n<h3>Naturaleza y senderismo<\/h3>\r\n<p>\r\n          La zona ofrece senderos y amplios espacios al aire libre, lo que permite combinar f\u00e1cilmente las actividades con momentos tranquilos en la naturaleza.\r\n        <\/p>\r\n<\/article>\r\n<article class=\"bno-value-card\">\r\n<span class=\"bno-value-card__number\">06<\/span>\r\n<h3>C\u00f3mo llegar a Rice Lake<\/h3>\r\n<p>\r\n          Un coche de alquiler ofrece la mayor flexibilidad para continuar el viaje desde Toronto u otros puntos de acceso de Ontario y explorar la zona durante tu estancia.\r\n        <\/p>\r\n<\/article>\r\n<\/div>\r\n<\/div>\r\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6f9e1ba elementor-widget elementor-widget-html\" data-id=\"6f9e1ba\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section class=\"bno-rice bno-section bno-destination-cta\">\r\n<div class=\"bno-shell\">\r\n<div class=\"bno-cta-box\">\r\n<div class=\"bno-cta-box__content\">\r\n<span class=\"bno-eyebrow\">\r\n          Siguiente paso\r\n        <\/span>\r\n<h2>\r\n          Encuentra la caba\u00f1a ideal en Rice Lake\r\n        <\/h2>\r\n<p>\r\n          Descubre las caba\u00f1as de Elmhirst\u2019s Resort, consulta las fotos y capacidades y encuentra el alojamiento adecuado para tu grupo y tu estancia en Ontario.\r\n        <\/p>\r\n<\/div>\r\n<div class=\"bno-cta-box__action\">\r\n<a class=\"bno-btn bno-btn--primary bno-cta-button\" href=\"#enheter\">\r\n<span>Ver las caba\u00f1as<\/span>\r\n<span aria-hidden=\"true\">\u2192<\/span>\r\n<\/a>\r\n<\/div>\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-cc60606 e-flex e-con-boxed e-con e-parent\" data-id=\"cc60606\" 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>Rice Lake \u00b7 Ontario \u00b7 Canada Alojamiento en Rice Lake: encuentra la caba\u00f1a adecuada para tu estancia Descubre las caba\u00f1as de Elmhirst\u2019s Resort, en la orilla norte de Rice Lake. Encuentra una base c\u00f3moda para disfrutar de tiempo en familia, actividades acu\u00e1ticas, experiencias en la naturaleza, spa y d\u00edas tranquilos en Ontario. Ver las caba\u00f1as [&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":""},"class_list":["post-94940","page","type-page","status-publish","hentry"],"jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/PgDuwj-oHi","jetpack-related-posts":[{"id":94978,"url":"https:\/\/bno-travel.com\/es\/elementor-92651\/","url_meta":{"origin":94940,"position":0},"title":"Elmhirst&#8217;s Resort","author":"Jan Terje \u00c5s","date":"15 de julio de 2026","format":false,"excerpt":"Rice Lake, Ontario \u00b7 Resort junto al lago Elmhirst\u2019s Resort: estancias en caba\u00f1a junto a Rice Lake Una escapada para las cuatro estaciones cerca de Keene, Ontario, que combina caba\u00f1as, vida junto al lago, restauraci\u00f3n y momentos de descanso. Ver las caba\u00f1as Descubrir el resort Al\u00f3jate junto al agua y\u2026","rel":"","context":"Entrada similar","block_context":{"text":"Entrada similar","link":""},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":94938,"url":"https:\/\/bno-travel.com\/es\/overnatting-i-ontario-canada\/","url_meta":{"origin":94940,"position":1},"title":"Alojamiento en Ontario, Canad\u00e1","author":"Jan Terje \u00c5s","date":"4 de agosto de 2026","format":false,"excerpt":"Destinos \u00b7 Ontario, Canad\u00e1 Alojamiento en Ontario: combina Rice Lake y Toronto Descubre Ontario combinando estancias tranquilas junto a un lago con experiencias urbanas. Elige Rice Lake para disfrutar de la naturaleza, las caba\u00f1as y los d\u00edas junto al agua, y descubre Toronto cuando se incorpore como destino independiente. Ver\u2026","rel":"","context":"Entrada similar","block_context":{"text":"Entrada similar","link":""},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":92651,"url":"https:\/\/bno-travel.com\/elementor-92651\/","url_meta":{"origin":94940,"position":2},"title":"Elmhirst&#8217;s Resort","author":"Jan Terje \u00c5s","date":"15 de julio de 2026","format":false,"excerpt":"Rice Lake, Ontario \u00b7 Lakeside resort Elmhirst\u2019s Resort \u2013 waterfront cottage stays on Rice Lake A relaxed four-season escape near Keene, Ontario, combining cottage accommodation, lakeside experiences, dining and time to unwind. View cottages Explore the resort Stay by the water and experience Ontario at a slower pace Elmhirst\u2019s Resort\u2026","rel":"","context":"Entrada similar","block_context":{"text":"Entrada similar","link":""},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":94409,"url":"https:\/\/bno-travel.com\/en\/elementor-92651\/","url_meta":{"origin":94940,"position":3},"title":"Elmhirst&#8217;s Resort","author":"Jan Terje \u00c5s","date":"15 de julio de 2026","format":false,"excerpt":"Rice Lake, Ontario \u00b7 Lakeside resort Elmhirst\u2019s Resort \u2013 waterfront cottage stays on Rice Lake A relaxed four-season escape near Keene, Ontario, combining cottage accommodation, lakeside experiences, dining and time to unwind. View cottages Explore the resort Stay by the water and experience Ontario at a slower pace Elmhirst\u2019s Resort\u2026","rel":"","context":"Entrada similar","block_context":{"text":"Entrada similar","link":""},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":94505,"url":"https:\/\/bno-travel.com\/de\/elementor-92651\/","url_meta":{"origin":94940,"position":4},"title":"Elmhirst&#8217;s Resort","author":"Jan Terje \u00c5s","date":"15 de julio de 2026","format":false,"excerpt":"Rice Lake, Ontario \u00b7 Resort am See Elmhirst\u2019s Resort \u2013 Ferienhausaufenthalte direkt am Rice Lake Ein entspannter Ganzjahresaufenthalt nahe Keene in Ontario, der Ferienhauskomfort, Erlebnisse am See, Gastronomie und Zeit zum Abschalten verbindet. Ferienh\u00e4user ansehen Resort entdecken Am Wasser wohnen und Ontario in ruhigerem Tempo erleben Elmhirst\u2019s Resort bietet Paaren,\u2026","rel":"","context":"Entrada similar","block_context":{"text":"Entrada similar","link":""},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":95729,"url":"https:\/\/bno-travel.com\/pt-pt\/overnatting-i-ontario-canada\/","url_meta":{"origin":94940,"position":5},"title":"Alojamento em Ont\u00e1rio, Canad\u00e1","author":"Jan Terje \u00c5s","date":"4 de agosto de 2026","format":false,"excerpt":"Destinos \u00b7 Ontario, Canad\u00e1 Alojamento em Ontario: combina Rice Lake e Toronto Descobre Ont\u00e1rio combinando estadias tranquilas junto a um lago com experi\u00eancias urbanas. Escolhe Rice Lake para desfrutar da natureza, dos chal\u00e9s e dos dias junto \u00e0 \u00e1gua, ou acompanha a chegada de Toronto como destino pr\u00f3prio. Ver os\u2026","rel":"","context":"Entrada similar","block_context":{"text":"Entrada similar","link":""},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/bno-travel.com\/es\/wp-json\/wp\/v2\/pages\/94940","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bno-travel.com\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/bno-travel.com\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/bno-travel.com\/es\/wp-json\/wp\/v2\/users\/260013438"}],"replies":[{"embeddable":true,"href":"https:\/\/bno-travel.com\/es\/wp-json\/wp\/v2\/comments?post=94940"}],"version-history":[{"count":5,"href":"https:\/\/bno-travel.com\/es\/wp-json\/wp\/v2\/pages\/94940\/revisions"}],"predecessor-version":[{"id":95043,"href":"https:\/\/bno-travel.com\/es\/wp-json\/wp\/v2\/pages\/94940\/revisions\/95043"}],"wp:attachment":[{"href":"https:\/\/bno-travel.com\/es\/wp-json\/wp\/v2\/media?parent=94940"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}