{"id":95456,"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-11T12:21:38","modified_gmt":"2026-08-11T10:21:38","slug":"overnatting-ved-rice-lake","status":"publish","type":"page","link":"https:\/\/bno-travel.com\/pl\/overnatting-ved-rice-lake\/","title":{"rendered":"Zakwaterowanie nad Rice Lake"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"95456\" class=\"elementor elementor-95456 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        Zakwaterowanie nad Rice Lake: znajd\u017a odpowiedni domek na sw\u00f3j pobyt\r\n      <\/h1>\r\n<p class=\"bno-lead\">\r\n        Poznaj domki Elmhirst\u2019s Resort na p\u00f3\u0142nocnym brzegu Rice Lake. Znajd\u017a wygodn\u0105 baz\u0119 na rodzinny wypoczynek, aktywno\u015bci wodne, kontakt z natur\u0105, spa i spokojne dni w Ontario.\r\n      <\/p>\r\n<div class=\"bno-actions\">\r\n<a class=\"bno-btn bno-btn--primary\" href=\"#enheter\">\r\n          Zobacz domki\r\n        <\/a>\r\n<a class=\"bno-btn bno-btn--secondary\" href=\"#oppdag-elmhirst\">\r\n          Odkryj 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        Zakwaterowanie nad Rice Lake\r\n      <\/span>\r\n<h2>\r\n        Pobyt nad jeziorem w Ontario, blisko natury i aktywno\u015bci\r\n      <\/h2>\r\n<p>\r\n        Rice Lake le\u017cy w regionie Kawarthas w Ontario i oferuje spokojne otoczenie na wakacje nad wod\u0105. Pobyt we w\u0142asnym domku mo\u017cna po\u0142\u0105czy\u0107 z p\u0142ywaniem \u0142odzi\u0105, kajakarstwem, w\u0119dkarstwem, spacerami oraz odpoczynkiem nad jeziorem.\r\n      <\/p>\r\n<p>\r\n        Elmhirst\u2019s Resort znajduje si\u0119 na p\u00f3\u0142nocnym brzegu Rice Lake, niedaleko Keene i Peterborough. Resort jest dobrym wyborem dla rodzin, par i grup szukaj\u0105cych kompleksowego pobytu z zakwaterowaniem, gastronomi\u0105, wellness i atrakcjami w jednym miejscu.\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        Domki nad Rice Lake\r\n      <\/span>\r\n<h2>\r\n        Znajd\u017a odpowiedni domek na pobyt w Elmhirst\u2019s Resort\r\n      <\/h2>\r\n<p>\r\n        Poznaj domki Elmhirst\u2019s Resort na p\u00f3\u0142nocnym brzegu Rice Lake. Sprawd\u017a zdj\u0119cia, liczb\u0119 miejsc i opisy, a nast\u0119pnie zobacz cen\u0119 i dost\u0119pno\u015b\u0107.\r\n      <\/p>\r\n<\/div>\r\n<div aria-live=\"polite\" class=\"bno-direct-catalog__status\" data-bno-status=\"\" role=\"status\">\r\n      \u0141adowanie domk\u00f3w\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        Poka\u017c wi\u0119cej domk\u00f3w\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 \"pl\"; }\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(\"pl-PL\", {\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(\"pl-PL\", {\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        ]) || \"Zakwaterowanie\"\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\", \"Zakwaterowanie w \" + destinationLabel);\r\n\r\n    modal.innerHTML = `\r\n      <button type=\"button\" class=\"bno-direct-modal__backdrop\" data-bno-close aria-label=\"Zamknij\"><\/button>\r\n      <div class=\"bno-direct-modal__dialog\">\r\n        <button type=\"button\" class=\"bno-direct-modal__close\" data-bno-close aria-label=\"Zamknij\">\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=\"Poprzednie zdj\u0119cie\">\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=\"Nast\u0119pne zdj\u0119cie\">\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\">Sprawd\u017a sw\u00f3j pobyt<\/span>\r\n              <h4>Sprawd\u017a, czy obiekt jest dost\u0119pny<\/h4>\r\n            <\/div>\r\n            <form class=\"bno-direct-form\" data-bno-availability-form novalidate>\r\n              <label>\r\n                <span>Przyjazd<\/span>\r\n                <input type=\"date\" data-bno-checkin required \/>\r\n              <\/label>\r\n              <label>\r\n                <span>Wyjazd<\/span>\r\n                <input type=\"date\" data-bno-checkout required \/>\r\n              <\/label>\r\n              <label>\r\n                <span>Go\u015bcie<\/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>Sprawd\u017a dost\u0119pno\u015b\u0107<\/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>\u0141\u0105czna cena pobytu<\/span>\r\n                <strong data-bno-total><\/strong>\r\n              <\/div>\r\n              <div class=\"bno-direct-price__row\">\r\n                <span>Do zap\u0142aty teraz na rzecz 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>Pozosta\u0142a kwota do zap\u0142aty obiektowi<\/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>Przejd\u017a do rezerwacji<\/button>\r\n              <p>Dane go\u015bci, warunki i p\u0142atno\u015b\u0107 s\u0105 finalizowane w bezpiecznym systemie rezerwacyjnym 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            : \"Nie uda\u0142o si\u0119 zrealizowa\u0107 \u017c\u0105dania.\"\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 = \"Brakuje wymaganej konfiguracji dla 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        ? \"Maksymalna liczba go\u015bci: \" + unit.capacity\r\n        : \"Zobacz szczeg\u00f3\u0142y i zdj\u0119cia\";\r\n      const description = unit.description ||\r\n        \"Zobacz zdj\u0119cia, pojemno\u015b\u0107 i dost\u0119pno\u015b\u0107 tego obiektu.\";\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} ${unit.images.length === 1 ? \"zdj\u0119cie\" : ((unit.images.length % 10 >= 2 && unit.images.length % 10 <= 4 && !(unit.images.length % 100 >= 12 && unit.images.length % 100 <= 14)) ? \"zdj\u0119cia\" : \"zdj\u0119\u0107\")}<\/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\">Zobacz obiekt \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        \"Widoczne obiekty: \" + visible.length + \" z \" + units.length +\r\n        \" \u2014 \" + 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 zdj\u0119cie \" + (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        ? \"Maksymalna liczba go\u015bci: \" + unit.capacity\r\n        : \"\";\r\n      modalDescription.textContent = unit.description ||\r\n        \"Sprawd\u017a dost\u0119pno\u015b\u0107 i cen\u0119 tego obiektu.\";\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, \"pl\", { 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            \"Nie mo\u017cna teraz wczyta\u0107 opublikowanych obiekt\u00f3w.\",\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          \"Nie mo\u017cna wczyta\u0107 obiekt\u00f3w. Od\u015bwie\u017c stron\u0119.\",\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(\"Wybierz prawid\u0142owe daty. Data wyjazdu musi przypada\u0107 po dacie przyjazdu.\", \"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          \"Minimalna d\u0142ugo\u015b\u0107 pobytu to \" + minimumStayNights +\r\n          (minimumStayNights === 1 ? \" noc.\" : (((minimumStayNights % 10 >= 2 && minimumStayNights % 10 <= 4 && !(minimumStayNights % 100 >= 12 && minimumStayNights % 100 <= 14))) ? \" noce.\" : \" nocy.\")),\r\n          \"error\"\r\n        );\r\n        return;\r\n      }\r\n\r\n      if (!Number.isInteger(adults) || adults < 1) {\r\n        setMessage(\"Wybierz prawid\u0142ow\u0105 liczb\u0119 go\u015bci.\", \"error\");\r\n        return;\r\n      }\r\n\r\n      if (currentUnit.capacity > 0 && adults > currentUnit.capacity) {\r\n        setMessage(\r\n          \"Ten obiekt mo\u017ce pomie\u015bci\u0107 maksymalnie \" +\r\n          currentUnit.capacity + \" go\u015bci.\",\r\n          \"error\"\r\n        );\r\n        return;\r\n      }\r\n\r\n      checkButton.disabled = true;\r\n      checkButton.textContent = \"Sprawdzanie\u2026\";\r\n      setMessage(\"Sprawdzanie dost\u0119pno\u015bci i ceny\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(\"Nie uda\u0142o si\u0119 pobra\u0107 ceny ca\u0142kowitej.\");\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          \"Obiekt jest dost\u0119pny od \" + formatDate(from) +\r\n          \" do \" + 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          : \"Nie uda\u0142o si\u0119 sprawdzi\u0107 dost\u0119pno\u015bci. Spr\u00f3buj ponownie.\";\r\n\r\n        if (code === \"booking_not_open\") {\r\n          message = \"Rezerwacje dla tej destynacji nie s\u0105 jeszcze otwarte.\";\r\n        } else if (code === \"not_available\") {\r\n          message = \"Obiekt nie jest dost\u0119pny w wybranym terminie.\";\r\n        }\r\n\r\n        setMessage(message, \"error\");\r\n      } finally {\r\n        checkButton.disabled = false;\r\n        checkButton.textContent = \"Sprawd\u017a dost\u0119pno\u015b\u0107\";\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        Zobacz po\u0142o\u017cenie Elmhirst\u2019s Resort nad Rice Lake\r\n      <\/h2>\r\n<p>\r\n        Resort znajduje si\u0119 na p\u00f3\u0142nocnym brzegu Rice Lake, niedaleko Keene w Ontario. Mapa u\u0142atwia orientacj\u0119 w okolicy i zaplanowanie dalszej podr\u00f3\u017cy z Toronto lub innych miejsc w 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          Odkryj Elmhirst\u2019s Resort\r\n        <\/span>\r\n<h2>\r\n          Domki nad wod\u0105, udogodnienia resortu i prawdziwe kanadyjskie \u017cycie nad jeziorem\r\n        <\/h2>\r\n<p>\r\n          Elmhirst\u2019s Resort to rodzinny resort dzia\u0142aj\u0105cy przez ca\u0142y rok, z domkami po\u0142o\u017conymi nad Rice Lake. Pobyt \u0142\u0105czy swobod\u0119 prywatnego domku z dost\u0119pem do us\u0142ug i atrakcji oferowanych przez resort.\r\n        <\/p>\r\n<p>\r\n          Dni mo\u017cesz sp\u0119dza\u0107 na aktywno\u015bciach wodnych, spacerach po terenie, przy basenie i w strefie wellness albo po prostu odpoczywa\u0107 przy domku. Restauracje resortu pozwalaj\u0105 te\u017c przeplata\u0107 samodzielne gotowanie posi\u0142kami przygotowywanymi z lokalnych produkt\u00f3w.\r\n        <\/p>\r\n<div class=\"bno-actions\">\r\n<a class=\"bno-btn bno-btn--primary\" href=\"#fakta\">\r\n            Zobacz informacje praktyczne\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        Informacje praktyczne\r\n      <\/span>\r\n<h2>\r\n        Domki, aktywno\u015bci i udogodnienia w Elmhirst\u2019s Resort\r\n      <\/h2>\r\n<p>\r\n        Poni\u017cej znajdziesz podsumowanie tego, co sprawia, \u017ce resort jest elastyczn\u0105 baz\u0105 na wakacje nad Rice Lake o r\u00f3\u017cnych porach roku.\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>Domki nad wod\u0105<\/h3>\r\n<p>\r\n          Wybierz spo\u015br\u00f3d domk\u00f3w o r\u00f3\u017cnej wielko\u015bci i liczbie miejsc. Zapewniaj\u0105 prywatn\u0105 baz\u0119 na pobyt bardzo blisko 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>Aktywno\u015bci na jeziorze<\/h3>\r\n<p>\r\n          W sezonie go\u015bcie mog\u0105 odkrywa\u0107 jezioro kajakiem, canoe lub na desce SUP. Dost\u0119pny jest r\u00f3wnie\u017c wynajem \u0142odzi i inne aktywno\u015bci wodne.\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>Baseny i wellness<\/h3>\r\n<p>\r\n          Resort oferuje kryty basen, jacuzzi i saun\u0119, a latem tak\u017ce basen zewn\u0119trzny oraz spa z zabiegami.\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>Gastronomia<\/h3>\r\n<p>\r\n          Hearthside Dining Room oraz Wild Blue Yonder Pub &amp; Patio oferuj\u0105 r\u00f3\u017cne do\u015bwiadczenia kulinarne. Resort korzysta r\u00f3wnie\u017c z produkt\u00f3w pochodz\u0105cych z w\u0142asnego gospodarstwa.\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>Natura i w\u0119dr\u00f3wki piesze<\/h3>\r\n<p>\r\n          Okolica oferuje szlaki i rozleg\u0142e tereny na \u015bwie\u017cym powietrzu, dzi\u0119ki czemu aktywny wypoczynek \u0142atwo po\u0142\u0105czy\u0107 ze spokojnymi chwilami w naturze.\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>Jak dojecha\u0107 nad Rice Lake<\/h3>\r\n<p>\r\n          Wynaj\u0119ty samoch\u00f3d daje najwi\u0119ksz\u0105 swobod\u0119 podczas dalszej podr\u00f3\u017cy z Toronto lub innych punkt\u00f3w wjazdowych do Ontario oraz podczas zwiedzania okolicy w trakcie pobytu.\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          Nast\u0119pny krok\r\n        <\/span>\r\n<h2>\r\n          Znajd\u017a idealny domek nad Rice Lake\r\n        <\/h2>\r\n<p>\r\n          Poznaj domki Elmhirst\u2019s Resort, sprawd\u017a zdj\u0119cia i liczb\u0119 miejsc oraz znajd\u017a zakwaterowanie odpowiednie dla Twojej grupy i pobytu w 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>Zobacz domki<\/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 Zakwaterowanie nad Rice Lake: znajd\u017a odpowiedni domek na sw\u00f3j pobyt Poznaj domki Elmhirst\u2019s Resort na p\u00f3\u0142nocnym brzegu Rice Lake. Znajd\u017a wygodn\u0105 baz\u0119 na rodzinny wypoczynek, aktywno\u015bci wodne, kontakt z natur\u0105, spa i spokojne dni w Ontario. Zobacz domki Odkryj Elmhirst\u2019s Resort Zakwaterowanie nad Rice Lake Pobyt nad jeziorem w [&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-95456","page","type-page","status-publish","hentry"],"jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/PgDuwj-oPC","jetpack-related-posts":[{"id":95495,"url":"https:\/\/bno-travel.com\/pl\/elementor-92651\/","url_meta":{"origin":95456,"position":0},"title":"Elmhirst&#8217;s Resort","author":"Jan Terje \u00c5s","date":"2026-07-15","format":false,"excerpt":"Rice Lake, Ontario \u00b7 Resort nad jeziorem Elmhirst\u2019s Resort: pobyt w domku nad Rice Lake Ca\u0142oroczny wypoczynek w pobli\u017cu Keene w Ontario, \u0142\u0105cz\u0105cy pobyt w domku, \u017cycie nad jeziorem, restauracje i chwile relaksu. Zobacz domki Odkryj resort Zatrzymaj si\u0119 nad wod\u0105 i poznaj Ontario w spokojniejszym tempie Elmhirst\u2019s Resort oferuje\u2026","rel":"","context":"Podobny wpis","block_context":{"text":"Podobny wpis","link":""},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":95454,"url":"https:\/\/bno-travel.com\/pl\/overnatting-i-ontario-canada\/","url_meta":{"origin":95456,"position":1},"title":"Zakwaterowanie w Ontario, Kanada","author":"Jan Terje \u00c5s","date":"2026-08-04","format":false,"excerpt":"Miejsca docelowe \u00b7 Ontario, Kanada Zakwaterowanie w Ontario: po\u0142\u0105cz Rice Lake i Toronto Odkryj Ontario, \u0142\u0105cz\u0105c spokojny pobyt nad jeziorem z miejskimi atrakcjami. Wybierz Rice Lake, aby cieszy\u0107 si\u0119 przyrod\u0105, domkami i dniami nad wod\u0105, a Toronto poznaj, gdy zostanie dodane jako samodzielne miejsce docelowe. Zobacz miejsca docelowe Odkryj Ontario\u2026","rel":"","context":"Podobny wpis","block_context":{"text":"Podobny wpis","link":""},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":95700,"url":"https:\/\/bno-travel.com\/pl\/overnatting\/","url_meta":{"origin":95456,"position":2},"title":"Zakwaterowanie w Trysil i S\u00e4len","author":"Jan Terje \u00c5s","date":"2025-07-11","format":false,"excerpt":"Zakwaterowanie w krajach nordyckich, Alpach i nad Morzem \u015ar\u00f3dziemnym Znajd\u017a odpowiedni pobyt na swoj\u0105 podr\u00f3\u017c \u2013 od skandynawskich g\u00f3r po Alpy i hiszpa\u0144skie wybrze\u017ce BNO Travel gromadzi domki, apartamenty, hotele i inne obiekty noclegowe w Norwegii, Szwecji, Francji, Austrii, Szwajcarii i Hiszpanii. Odkrywaj g\u00f3rskie destynacje, alpejskie miejscowo\u015bci, krajobrazy fiord\u00f3w i\u2026","rel":"","context":"Podobny wpis","block_context":{"text":"Podobny wpis","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":95456,"position":3},"title":"Alojamento em Ont\u00e1rio, Canad\u00e1","author":"Jan Terje \u00c5s","date":"2026-08-04","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":"Podobny wpis","block_context":{"text":"Podobny wpis","link":""},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":95526,"url":"https:\/\/bno-travel.com\/pl\/fjordnaer-vinterro-og-spa\/","url_meta":{"origin":95456,"position":4},"title":"Zimowy spok\u00f3j i spa nad fiordem","author":"Jan Terje \u00c5s","date":"2026-04-12","format":false,"excerpt":"Zimowy spok\u00f3j i spa nad fiordem Cisza, ciep\u0142o i zimowa atmosfera mi\u0119dzy fiordami a g\u00f3rami Alp Sunnm\u00f8re Pobyt nastawiony na zimowy spok\u00f3j i spa nad fiordem w Alpach Sunnm\u00f8re jest idealny dla os\u00f3b, kt\u00f3re chc\u0105 do\u015bwiadczy\u0107 zimy bez podporz\u0105dkowywania ca\u0142ego dnia tempu, kolejkom do wyci\u0105g\u00f3w i intensywnemu narciarstwu. Na pierwszy\u2026","rel":"","context":"Podobny wpis","block_context":{"text":"Podobny wpis","link":""},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":92651,"url":"https:\/\/bno-travel.com\/elementor-92651\/","url_meta":{"origin":95456,"position":5},"title":"Elmhirst&#8217;s Resort","author":"Jan Terje \u00c5s","date":"2026-07-15","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":"Podobny wpis","block_context":{"text":"Podobny wpis","link":""},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/bno-travel.com\/pl\/wp-json\/wp\/v2\/pages\/95456","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bno-travel.com\/pl\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/bno-travel.com\/pl\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/bno-travel.com\/pl\/wp-json\/wp\/v2\/users\/260013438"}],"replies":[{"embeddable":true,"href":"https:\/\/bno-travel.com\/pl\/wp-json\/wp\/v2\/comments?post=95456"}],"version-history":[{"count":1,"href":"https:\/\/bno-travel.com\/pl\/wp-json\/wp\/v2\/pages\/95456\/revisions"}],"predecessor-version":[{"id":95457,"href":"https:\/\/bno-travel.com\/pl\/wp-json\/wp\/v2\/pages\/95456\/revisions\/95457"}],"wp:attachment":[{"href":"https:\/\/bno-travel.com\/pl\/wp-json\/wp\/v2\/media?parent=95456"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}