{"id":94610,"date":"2026-08-03T15:24:34","date_gmt":"2026-08-03T13:24:34","guid":{"rendered":"https:\/\/bno-travel.com\/overnatting-i-zell-am-see\/"},"modified":"2026-08-10T19:18:33","modified_gmt":"2026-08-10T17:18:33","slug":"overnatting-i-zell-am-see","status":"publish","type":"page","link":"https:\/\/bno-travel.com\/fi\/overnatting-i-zell-am-see\/","title":{"rendered":"Majoitus Zell am Seess\u00e4"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"94610\" class=\"elementor elementor-94610 elementor-93651\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-66ab43f8 e-flex e-con-boxed e-con e-parent\" data-id=\"66ab43f8\" 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-4541b581 elementor-widget elementor-widget-html\" data-id=\"4541b581\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section class=\"bno-zell bno-area-hero bno-area-hero--premium\" style=\" background-color: #0c1a38; background-image: linear-gradient( rgba(7, 17, 31, 0.48), rgba(7, 17, 31, 0.68) ), url('https:\/\/bno-travel.com\/wp-content\/uploads\/2026\/08\/AdobeStock_40023408.jpeg'); background-position: center; background-size: cover; background-repeat: no-repeat; \">\r\n  <div class=\"bno-shell\">\r\n    <div class=\"bno-area-hero__content\">\r\n\r\n      <span class=\"bno-eyebrow\">\r\n        Zell am See \u00b7 It\u00e4valta\r\n      <\/span>\r\n\r\n      <h1>\r\n        Majoitus Zell am Seess\u00e4 \u2013 tutustu nelj\u00e4\u00e4n hotelliin vuorten ja j\u00e4rven \u00e4\u00e4rell\u00e4\r\n      <\/h1>\r\n\r\n      <p class=\"bno-lead\">\r\n        L\u00f6yd\u00e4 huoneita, sviittej\u00e4 ja huoneistoja hotelleista The House Zell am See, The Gast House Zell am See, Nikolaus by AvenidA ja Elements Resort Zell am See. Vertaile huonetyyppej\u00e4 ja l\u00f6yd\u00e4 matkallesi sopiva majoitus.\r\n      <\/p>\r\n\r\n      <div class=\"bno-actions\">\r\n        <a href=\"#enheter\" class=\"bno-btn bno-btn--primary\">\r\n          N\u00e4yt\u00e4 huoneet ja huoneistot\r\n        <\/a>\r\n\r\n        <a href=\"#hotellene\" class=\"bno-btn bno-btn--secondary\">\r\n          N\u00e4yt\u00e4 hotellit\r\n        <\/a>\r\n      <\/div>\r\n\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-3a3e0def e-flex e-con-boxed e-con e-parent\" data-id=\"3a3e0def\" 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-4ac6fc4c elementor-widget elementor-widget-html\" data-id=\"4ac6fc4c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section id=\"hotellene\" class=\"bno-zell bno-section bno-section--light bno-area-intro\">\r\n  <div class=\"bno-shell\">\r\n\r\n    <div class=\"bno-section-heading bno-section-heading--center\">\r\n      <span class=\"bno-eyebrow\">\r\n        Nelj\u00e4 hotellia Zell am Seess\u00e4\r\n      <\/span>\r\n\r\n      <h2>\r\n        Valitse oleskeluusi sopiva hotelli ja huonetyyppi\r\n      <\/h2>\r\n\r\n      <p>\r\n        Zell am Seen majoitusvalikoimaan kuuluu nelj\u00e4 erilaista Alpin Family -hotellia. Tutustu hotelleihin ja siirry suoraan haluamasi hotellin huoneisiin, sviitteihin ja huoneistoihin.\r\n      <\/p>\r\n    <\/div>\r\n\r\n    <div class=\"bno-zell-hotel-grid\">\r\n\r\n      <!-- THE HOUSE -->\r\n      <article class=\"bno-zell-hotel-card\">\r\n        <a href=\"#rom-the-house\" class=\"bno-zell-hotel-card__link\">\r\n          <div class=\"bno-zell-hotel-card__media\">\r\n            <img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.the-house.at\/assets\/images\/6\/The-House-Sommer-Aussenansicht-517d17fd.jpg?w=800&#038;ssl=1\" alt=\"The House Zell am See\" loading=\"lazy\" \/>\r\n\r\n            <span class=\"bno-zell-hotel-card__number\">\r\n              01\r\n            <\/span>\r\n\r\n            <span class=\"bno-zell-hotel-card__badge\">\r\n              Huoneistohotelli\r\n            <\/span>\r\n          <\/div>\r\n\r\n          <div class=\"bno-zell-hotel-card__body\">\r\n            <div>\r\n              <h3>The House Zell am See<\/h3>\r\n\r\n              <p>\r\n                Tilavia huoneistoja ja sviittej\u00e4 Zell am Seen keskeisell\u00e4 mutta rauhallisella alueella, lyhyen matkan p\u00e4\u00e4ss\u00e4 keskustasta ja CityXpress-hissilt\u00e4.\r\n              <\/p>\r\n            <\/div>\r\n\r\n            <span class=\"bno-zell-hotel-card__action\">\r\n              N\u00e4yt\u00e4 huonetyypit\r\n              <span aria-hidden=\"true\">\u2192<\/span>\r\n            <\/span>\r\n          <\/div>\r\n        <\/a>\r\n      <\/article>\r\n\r\n\r\n      <!-- THE GAST HOUSE -->\r\n      <article class=\"bno-zell-hotel-card\">\r\n        <a href=\"#rom-the-gast-house\" class=\"bno-zell-hotel-card__link\">\r\n          <div class=\"bno-zell-hotel-card__media\">\r\n            <img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.thegasthouse.at\/assets\/images\/6\/TGHZ_aussen_Sommer-f1116479.jpg?w=800&#038;ssl=1\" alt=\"The Gast House Zell am See\" loading=\"lazy\" \/>\r\n\r\n            <span class=\"bno-zell-hotel-card__number\">\r\n              02\r\n            <\/span>\r\n\r\n            <span class=\"bno-zell-hotel-card__badge\">\r\n              Hotelli ja sviitit\r\n            <\/span>\r\n          <\/div>\r\n\r\n          <div class=\"bno-zell-hotel-card__body\">\r\n            <div>\r\n              <h3>The Gast House Zell am See<\/h3>\r\n\r\n              <p>\r\n                Moderneja huoneita, studioita ja sviittej\u00e4 keskustassa l\u00e4hell\u00e4 Zeller See -j\u00e4rve\u00e4, vuoristohissej\u00e4 ja hotellin spa-aluetta.\r\n              <\/p>\r\n            <\/div>\r\n\r\n            <span class=\"bno-zell-hotel-card__action\">\r\n              N\u00e4yt\u00e4 huonetyypit\r\n              <span aria-hidden=\"true\">\u2192<\/span>\r\n            <\/span>\r\n          <\/div>\r\n        <\/a>\r\n      <\/article>\r\n\r\n\r\n      <!-- NIKOLAUS -->\r\n      <article class=\"bno-zell-hotel-card\">\r\n        <a href=\"#rom-nikolaus\" class=\"bno-zell-hotel-card__link\">\r\n          <div class=\"bno-zell-hotel-card__media\">\r\n            <img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.nikolausbyavenida.at\/assets\/images\/d\/nikolaus-sommer-au%C3%9Fen-3d2087ab.jpg?w=800&#038;ssl=1\" alt=\"Nikolaus by AvenidA in Zell am See\" loading=\"lazy\" \/>\r\n\r\n            <span class=\"bno-zell-hotel-card__number\">\r\n              03\r\n            <\/span>\r\n\r\n            <span class=\"bno-zell-hotel-card__badge\">\r\n              Panoraamasviitit\r\n            <\/span>\r\n          <\/div>\r\n\r\n          <div class=\"bno-zell-hotel-card__body\">\r\n            <div>\r\n              <h3>Nikolaus by AvenidA<\/h3>\r\n\r\n              <p>\r\n                Huoneita ja sviittej\u00e4 korkealla Zell am Seen yl\u00e4puolella, panoraaman\u00e4kymill\u00e4 kaupunkiin, j\u00e4rvelle ja ymp\u00e4r\u00f6iville vuorille.\r\n              <\/p>\r\n            <\/div>\r\n\r\n            <span class=\"bno-zell-hotel-card__action\">\r\n              N\u00e4yt\u00e4 huonetyypit\r\n              <span aria-hidden=\"true\">\u2192<\/span>\r\n            <\/span>\r\n          <\/div>\r\n        <\/a>\r\n      <\/article>\r\n\r\n\r\n      <!-- ELEMENTS RESORT -->\r\n      <article class=\"bno-zell-hotel-card\">\r\n        <a href=\"#rom-elements-resort\" class=\"bno-zell-hotel-card__link\">\r\n          <div class=\"bno-zell-hotel-card__media\">\r\n            <img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.elementsresort.at\/assets\/images\/1\/AR-Elements-Sommer-Aussen-022-min-550b73cc.jpg?w=800&#038;ssl=1\" alt=\"Elements Resort Zell am See\" loading=\"lazy\" \/>\r\n\r\n            <span class=\"bno-zell-hotel-card__number\">\r\n              04\r\n            <\/span>\r\n\r\n            <span class=\"bno-zell-hotel-card__badge\">\r\n              Lomakeskus\r\n            <\/span>\r\n          <\/div>\r\n\r\n          <div class=\"bno-zell-hotel-card__body\">\r\n            <div>\r\n              <h3>Elements Resort Zell am See<\/h3>\r\n\r\n              <p>\r\n                Lomakeskusmajoitusta huoneissa ja sviiteiss\u00e4 sek\u00e4 ravintola, hyvinvointialue ja helppo yhteys AreitXpress-hissille.\r\n              <\/p>\r\n            <\/div>\r\n\r\n            <span class=\"bno-zell-hotel-card__action\">\r\n              N\u00e4yt\u00e4 huonetyypit\r\n              <span aria-hidden=\"true\">\u2192<\/span>\r\n            <\/span>\r\n          <\/div>\r\n        <\/a>\r\n      <\/article>\r\n\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-95d43c3 e-flex e-con-boxed e-con e-parent\" data-id=\"95d43c3\" 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-713a14fb elementor-widget elementor-widget-html\" data-id=\"713a14fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- =========================================================\r\n     ZELL AM SEE \u2013 BULK 3\r\n     Fire separate BNO Direct-kataloger i samme bulk\r\n     ========================================================= -->\r\n\r\n<div id=\"enheter\" class=\"bno-zell-catalogs\">\r\n\r\n  <!-- THE HOUSE ZELL AM SEE -->\r\n  <section id=\"rom-the-house\" class=\"bno-section bno-section--soft bno-direct-catalog bno-zell-catalog-block bno-zell-catalog-block--soft\" data-bno-direct-catalog data-api-base=\"https:\/\/bno-api-staging.onrender.com\" data-booking-base=\"https:\/\/booking.bno-travel.com\/booking\/complete\" data-catalog-creds-key=\"THE_HOUSE_ZELL_AM_SEE\" data-booking-partner-key=\"THE_HOUSE_ZELL_AM_SEE\" data-service-id=\"4c3496c1-52aa-435e-add3-afe100e77563\" data-area-key=\"zell-am-see\" data-destination-label=\"Zell am See\" data-location-label=\"The House Zell am See \u00b7 Zell am See\" data-booking-open-until=\"2027-05-01\" data-minimum-stay-nights=\"1\" data-initial-count=\"12\" lang=\"fi\" data-lang=\"fi\">\r\n    <div class=\"bno-shell\">\r\n      <div class=\"bno-zell-catalog-heading\">\r\n        <span class=\"bno-zell-catalog-heading__number\" aria-hidden=\"true\">01<\/span>\r\n        <div>\r\n          <span class=\"bno-eyebrow\">Huoneet ja huoneistot<\/span>\r\n          <h2>The House Zell am See<\/h2>\r\n          <p>\r\n            Tutustu The House Zell am Seen saatavilla oleviin huoneistoihin, sviitteihin ja penthouse-majoituksiin.\r\n          <\/p>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"bno-direct-catalog__status\" data-bno-status role=\"status\" aria-live=\"polite\">\r\n        Ladataan The House -hotellin huonetyyppej\u00e4 \u2026\r\n      <\/div>\r\n\r\n      <div class=\"bno-direct-catalog__grid\" data-bno-grid aria-live=\"polite\" aria-busy=\"true\"><\/div>\r\n\r\n      <div class=\"bno-direct-more-wrap\" data-bno-more-wrap hidden>\r\n        <button type=\"button\" class=\"bno-direct-more\" data-bno-more>\r\n          N\u00e4yt\u00e4 lis\u00e4\u00e4 huonetyyppej\u00e4\r\n        <\/button>\r\n      <\/div>\r\n    <\/div>\r\n  <\/section>\r\n\r\n\r\n  <!-- THE GAST HOUSE ZELL AM SEE -->\r\n  <section id=\"rom-the-gast-house\" class=\"bno-section bno-section--light bno-direct-catalog bno-zell-catalog-block bno-zell-catalog-block--light\" data-bno-direct-catalog data-api-base=\"https:\/\/bno-api-staging.onrender.com\" data-booking-base=\"https:\/\/booking.bno-travel.com\/booking\/complete\" data-catalog-creds-key=\"THE_GAST_HOUSE_ZELL_AM_SEE\" data-booking-partner-key=\"THE_GAST_HOUSE_ZELL_AM_SEE\" data-service-id=\"27468297-0350-40ca-9bf6-afb6008fb4e6\" data-area-key=\"zell-am-see\" data-destination-label=\"Zell am See\" data-location-label=\"The Gast House Zell am See \u00b7 Zell am See\" data-booking-open-until=\"2027-05-01\" data-minimum-stay-nights=\"1\" data-initial-count=\"12\" lang=\"fi\" data-lang=\"fi\">\r\n    <div class=\"bno-shell\">\r\n      <div class=\"bno-zell-catalog-heading\">\r\n        <span class=\"bno-zell-catalog-heading__number\" aria-hidden=\"true\">02<\/span>\r\n        <div>\r\n          <span class=\"bno-eyebrow\">Huoneet, studiot ja sviitit<\/span>\r\n          <h2>The Gast House Zell am See<\/h2>\r\n          <p>\r\n            Tutustu The Gast Housen huoneisiin, studioihin ja sviitteihin kahden hengen huoneista suurempiin perhe- ja panoraamasviitteihin.\r\n          <\/p>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"bno-direct-catalog__status\" data-bno-status role=\"status\" aria-live=\"polite\">\r\n        Ladataan The Gast House -hotellin huonetyyppej\u00e4 \u2026\r\n      <\/div>\r\n\r\n      <div class=\"bno-direct-catalog__grid\" data-bno-grid aria-live=\"polite\" aria-busy=\"true\"><\/div>\r\n\r\n      <div class=\"bno-direct-more-wrap\" data-bno-more-wrap hidden>\r\n        <button type=\"button\" class=\"bno-direct-more\" data-bno-more>\r\n          N\u00e4yt\u00e4 lis\u00e4\u00e4 huonetyyppej\u00e4\r\n        <\/button>\r\n      <\/div>\r\n    <\/div>\r\n  <\/section>\r\n\r\n\r\n  <!-- NIKOLAUS BY AVENIDA -->\r\n  <section id=\"rom-nikolaus\" class=\"bno-section bno-section--soft bno-direct-catalog bno-zell-catalog-block bno-zell-catalog-block--soft\" data-bno-direct-catalog data-api-base=\"https:\/\/bno-api-staging.onrender.com\" data-booking-base=\"https:\/\/booking.bno-travel.com\/booking\/complete\" data-catalog-creds-key=\"NIKOLAUS_BY_AVENIDA\" data-booking-partner-key=\"NIKOLAUS_BY_AVENIDA\" data-service-id=\"5b596a5a-26da-4381-a4fd-afdc00a26aa4\" data-area-key=\"zell-am-see\" data-destination-label=\"Zell am See\" data-location-label=\"Nikolaus by AvenidA \u00b7 Zell am See\" data-booking-open-until=\"2027-05-01\" data-minimum-stay-nights=\"1\" data-initial-count=\"12\" lang=\"fi\" data-lang=\"fi\">\r\n    <div class=\"bno-shell\">\r\n      <div class=\"bno-zell-catalog-heading\">\r\n        <span class=\"bno-zell-catalog-heading__number\" aria-hidden=\"true\">03<\/span>\r\n        <div>\r\n          <span class=\"bno-eyebrow\">Huoneet ja panoraamasviitit<\/span>\r\n          <h2>Nikolaus by AvenidA<\/h2>\r\n          <p>\r\n            Tutustu nykyaikaisella alppityylill\u00e4 sisustettuihin huoneisiin ja sviitteihin, joissa on panoraaman\u00e4kym\u00e4t ja yksityisi\u00e4 hyvinvointipalveluja.\r\n          <\/p>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"bno-direct-catalog__status\" data-bno-status role=\"status\" aria-live=\"polite\">\r\n        Ladataan Nikolaus by AvenidA -hotellin huonetyyppej\u00e4 \u2026\r\n      <\/div>\r\n\r\n      <div class=\"bno-direct-catalog__grid\" data-bno-grid aria-live=\"polite\" aria-busy=\"true\"><\/div>\r\n\r\n      <div class=\"bno-direct-more-wrap\" data-bno-more-wrap hidden>\r\n        <button type=\"button\" class=\"bno-direct-more\" data-bno-more>\r\n          N\u00e4yt\u00e4 lis\u00e4\u00e4 huonetyyppej\u00e4\r\n        <\/button>\r\n      <\/div>\r\n    <\/div>\r\n  <\/section>\r\n\r\n\r\n  <!-- ELEMENTS RESORT ZELL AM SEE -->\r\n  <section id=\"rom-elements-resort\" class=\"bno-section bno-section--light bno-direct-catalog bno-zell-catalog-block bno-zell-catalog-block--light\" data-bno-direct-catalog data-api-base=\"https:\/\/bno-api-staging.onrender.com\" data-booking-base=\"https:\/\/booking.bno-travel.com\/booking\/complete\" data-catalog-creds-key=\"ELEMENTS_RESORT_ZELL_AM_SEE\" data-booking-partner-key=\"ELEMENTS_RESORT_ZELL_AM_SEE\" data-service-id=\"12c44d5b-1071-4513-a70f-afdc00d11939\" data-area-key=\"zell-am-see\" data-destination-label=\"Zell am See\" data-location-label=\"Elements Resort Zell am See \u00b7 Zell am See\" data-booking-open-until=\"2027-05-01\" data-minimum-stay-nights=\"1\" data-initial-count=\"12\" lang=\"fi\" data-lang=\"fi\">\r\n    <div class=\"bno-shell\">\r\n      <div class=\"bno-zell-catalog-heading\">\r\n        <span class=\"bno-zell-catalog-heading__number\" aria-hidden=\"true\">04<\/span>\r\n        <div>\r\n          <span class=\"bno-eyebrow\">Huoneet, sviitit ja penthouset<\/span>\r\n          <h2>Elements Resort Zell am See<\/h2>\r\n          <p>\r\n            Tutustu Elements Resort Zell am Seen kahden hengen huoneisiin, sviitteihin ja suurempiin penthouse-majoituksiin.\r\n          <\/p>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"bno-direct-catalog__status\" data-bno-status role=\"status\" aria-live=\"polite\">\r\n        Ladataan Elements Resort -hotellin huonetyyppej\u00e4 \u2026\r\n      <\/div>\r\n\r\n      <div class=\"bno-direct-catalog__grid\" data-bno-grid aria-live=\"polite\" aria-busy=\"true\"><\/div>\r\n\r\n      <div class=\"bno-direct-more-wrap\" data-bno-more-wrap hidden>\r\n        <button type=\"button\" class=\"bno-direct-more\" data-bno-more>\r\n          N\u00e4yt\u00e4 lis\u00e4\u00e4 huonetyyppej\u00e4\r\n        <\/button>\r\n      <\/div>\r\n    <\/div>\r\n  <\/section>\r\n\r\n<\/div>\r\n\r\n\r\n<!-- FELLES BNO DIRECT-MOTOR \u2013 SKAL KUN FINNES EN GANG P\u00c5 SIDEN -->\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\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() {\r\n    return \"fi\";\r\n  }\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(\"fi-FI\", {\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(\"fi-FI\", {\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 kuvaa = [];\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)) kuvaa.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        ]) || \"Majoitus\"\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      kuvaa: 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\", \"Majoitus kohteessa \" + destinationLabel);\r\n\r\n    modal.innerHTML = `\r\n      <button type=\"button\" class=\"bno-direct-modal__backdrop\" data-bno-close aria-label=\"Sulje\"><\/button>\r\n      <div class=\"bno-direct-modal__dialog\">\r\n        <button type=\"button\" class=\"bno-direct-modal__close\" data-bno-close aria-label=\"Sulje\">\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=\"Edellinen kuva\">\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=\"Seuraava kuva\">\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\">Tarkista oleskelusi<\/span>\r\n              <h4>Tarkista, onko t\u00e4m\u00e4 majoitus saatavilla<\/h4>\r\n            <\/div>\r\n            <form class=\"bno-direct-form\" data-bno-availability-form novalidate>\r\n              <label>\r\n                <span>Sis\u00e4\u00e4nkirjautuminen<\/span>\r\n                <input type=\"date\" data-bno-checkin required \/>\r\n              <\/label>\r\n              <label>\r\n                <span>Uloskirjautuminen<\/span>\r\n                <input type=\"date\" data-bno-checkout required \/>\r\n              <\/label>\r\n              <label>\r\n                <span>Vieraat<\/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>Tarkista saatavuus<\/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>Oleskelun kokonaishinta<\/span>\r\n                <strong data-bno-total><\/strong>\r\n              <\/div>\r\n              <div class=\"bno-direct-price__row\">\r\n                <span>Maksetaan nyt BNO Travelille<\/span>\r\n                <strong data-bno-pay-now><\/strong>\r\n              <\/div>\r\n              <div class=\"bno-direct-price__row\">\r\n                <span>Majoituspaikalle maksettava j\u00e4ljell\u00e4 oleva summa<\/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>Jatka varaukseen<\/button>\r\n              <p>Vierastiedot, ehdot ja maksu viimeistell\u00e4\u00e4n BNO Travelin turvallisessa varausj\u00e4rjestelm\u00e4ss\u00e4.<\/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            : \"Pyynt\u00f6\u00e4 ei voitu suorittaa.\"\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 || \"destinasjonen\"\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 = \"Bulk 3 is missing required configuration.\";\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 vierastaInput = 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        ? \"Enint\u00e4\u00e4n \" + unit.capacity + \" vierasta\"\r\n        : \"Katso tiedot ja kuvat\";\r\n      const description = unit.description ||\r\n        \"Katso t\u00e4m\u00e4n majoituksen kuvat, kapasiteetti ja saatavuus.\";\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} kuvaa<\/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\">N\u00e4yt\u00e4 majoitus \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        \"N\u00e4ytet\u00e4\u00e4n \" + visible.length + \" \/ \" + units.length +\r\n        \" majoitusta kohteessa \" + 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 kuva \" + (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        ? \"Enint\u00e4\u00e4n \" + unit.capacity + \" vierasta\"\r\n        : \"\";\r\n      modalDescription.textContent = unit.description ||\r\n        \"Tarkista t\u00e4m\u00e4n majoituksen saatavuus ja hinta.\";\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      vierastaInput.max = String(unit.capacity > 0 ? unit.capacity : 20);\r\n      vierastaInput.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, \"fi\", { 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            \"Julkaistuja majoitusvaihtoehtoja ei voitu ladata juuri nyt.\",\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          \"Majoitusta ei voitu ladata. P\u00e4ivit\u00e4 sivu.\",\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(\"Valitse kelvolliset p\u00e4iv\u00e4m\u00e4\u00e4r\u00e4t. Uloskirjautumisen on oltava sis\u00e4\u00e4nkirjautumisen j\u00e4lkeen.\", \"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          \"V\u00e4himm\u00e4isoleskelu on \" + minimumStayNights +\r\n          (minimumStayNights === 1 ? \" y\u00f6.\" : \" y\u00f6t\u00e4.\"),\r\n          \"error\"\r\n        );\r\n        return;\r\n      }\r\n\r\n      if (!Number.isInteger(adults) || adults < 1) {\r\n        setMessage(\"Valitse kelvollinen vierasm\u00e4\u00e4r\u00e4.\", \"error\");\r\n        return;\r\n      }\r\n\r\n      if (currentUnit.capacity > 0 && adults > currentUnit.capacity) {\r\n        setMessage(\r\n          \"T\u00e4h\u00e4n majoitukseen mahtuu enint\u00e4\u00e4n \" +\r\n          currentUnit.capacity + \" vierasta.\",\r\n          \"error\"\r\n        );\r\n        return;\r\n      }\r\n\r\n      checkButton.disabled = true;\r\n      checkButton.textContent = \"Tarkistetaan \u2026\";\r\n      setMessage(\"Tarkistetaan saatavuutta ja hintaa \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(\"Kokonaishintaa ei voitu hakea.\");\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          \"Majoitus on saatavilla \" + formatDate(from) + \"\u2013\" + 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          : \"Saatavuutta ei voitu tarkistaa. Yrit\u00e4 uudelleen.\";\r\n\r\n        if (code === \"booking_not_open\") {\r\n          message = \"Varaaminen ei ole viel\u00e4 avoinna t\u00e4ss\u00e4 kohteessa.\";\r\n        } else if (code === \"not_available\") {\r\n          message = \"Majoitus ei ole saatavilla valitulle ajanjaksolle.\";\r\n        }\r\n\r\n        setMessage(message, \"error\");\r\n      } finally {\r\n        checkButton.disabled = false;\r\n        checkButton.textContent = \"Tarkista saatavuus\";\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    vierastaInput.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>\r\n\r\n\r\n<style>\r\n\/* =========================================================\r\n   ZELL AM SEE \u2013 BULK 3 \/ FIRE BNO DIRECT-KATALOGER\r\n   Legges etter den globale BNO Direct-CSS-en\r\n   ========================================================= *\/\r\n\r\nhtml,\r\nbody {\r\n  max-width: 100%;\r\n  overflow-x: clip;\r\n}\r\n\r\n#enheter.bno-zell-catalogs,\r\n#enheter.bno-zell-catalogs * {\r\n  box-sizing: border-box;\r\n}\r\n\r\n#enheter.bno-zell-catalogs {\r\n  width: 100%;\r\n  max-width: 100%;\r\n  overflow-x: clip;\r\n  scroll-margin-top: 90px;\r\n}\r\n\r\n#enheter .bno-zell-catalog-block {\r\n  position: relative;\r\n  width: 100%;\r\n  max-width: 100%;\r\n  margin: 0;\r\n  padding: 88px 0;\r\n  overflow-x: clip;\r\n  scroll-margin-top: 90px;\r\n}\r\n\r\n#enheter .bno-zell-catalog-block--soft {\r\n  background: linear-gradient(180deg, #f5f8fa 0%, #edf3f6 100%) !important;\r\n}\r\n\r\n#enheter .bno-zell-catalog-block--light {\r\n  background: #ffffff !important;\r\n}\r\n\r\n#enheter .bno-zell-catalog-block > .bno-shell {\r\n  width: min(1180px, calc(100% - 48px));\r\n  max-width: 1180px;\r\n  margin-right: auto;\r\n  margin-left: auto;\r\n}\r\n\r\n\/* Overskrift per hotell *\/\r\n#enheter .bno-zell-catalog-heading {\r\n  display: grid;\r\n  max-width: 900px;\r\n  grid-template-columns: 58px minmax(0, 1fr);\r\n  gap: 22px;\r\n  align-items: start;\r\n  margin: 0 0 38px;\r\n}\r\n\r\n#enheter .bno-zell-catalog-heading__number {\r\n  display: inline-flex;\r\n  width: 58px;\r\n  height: 58px;\r\n  align-items: center;\r\n  justify-content: center;\r\n  border-radius: 17px;\r\n  background: #0c1a38;\r\n  color: #ffffff;\r\n  font-size: 16px;\r\n  font-weight: 850;\r\n  line-height: 1;\r\n  box-shadow: 0 12px 28px rgba(12, 26, 56, 0.20);\r\n}\r\n\r\n#enheter .bno-zell-catalog-heading .bno-eyebrow {\r\n  display: inline-flex;\r\n  margin: 0 0 9px;\r\n  color: #123b5d;\r\n  font-size: 12px;\r\n  font-weight: 800;\r\n  line-height: 1.3;\r\n  letter-spacing: 0.085em;\r\n  text-transform: uppercase;\r\n}\r\n\r\n#enheter .bno-zell-catalog-heading h2 {\r\n  margin: 0 0 13px;\r\n  color: #0c1a38;\r\n  font-size: clamp(32px, 4vw, 48px);\r\n  font-weight: 700;\r\n  line-height: 1.1;\r\n  letter-spacing: -0.03em;\r\n}\r\n\r\n#enheter .bno-zell-catalog-heading p {\r\n  max-width: 760px;\r\n  margin: 0;\r\n  color: #586676;\r\n  font-size: 17px;\r\n  line-height: 1.7;\r\n}\r\n\r\n\/* Status *\/\r\n#enheter .bno-direct-catalog__status {\r\n  width: 100%;\r\n  max-width: 100%;\r\n  margin: 0 0 28px !important;\r\n  padding: 15px 17px !important;\r\n  border: 1px solid rgba(12, 26, 56, 0.14) !important;\r\n  border-radius: 14px !important;\r\n  background: rgba(255, 255, 255, 0.92) !important;\r\n  color: #0c1a38 !important;\r\n  font-size: 15px !important;\r\n  line-height: 1.5 !important;\r\n  overflow-wrap: anywhere;\r\n}\r\n\r\n\/* Grid \u2013 lik Chamonix *\/\r\n#enheter .bno-direct-catalog__grid {\r\n  display: grid !important;\r\n  width: 100% !important;\r\n  max-width: 100% !important;\r\n  grid-template-columns: repeat(3, minmax(0, 1fr)) !important;\r\n  gap: 24px !important;\r\n  align-items: stretch !important;\r\n  margin: 0 !important;\r\n  padding: 0 !important;\r\n}\r\n\r\n#enheter .bno-direct-card {\r\n  position: relative;\r\n  min-width: 0;\r\n}\r\n\r\n\/* Tydelig hotellmerke p\u00e5 hvert genererte romkort *\/\r\n#enheter .bno-direct-card::before {\r\n  position: absolute;\r\n  top: 14px;\r\n  left: 14px;\r\n  z-index: 8;\r\n  display: inline-flex;\r\n  max-width: calc(100% - 28px);\r\n  padding: 7px 11px;\r\n  overflow: hidden;\r\n  border-radius: 999px;\r\n  background: rgba(12, 26, 56, 0.92);\r\n  color: #ffffff;\r\n  font-size: 9.5px;\r\n  font-weight: 800;\r\n  line-height: 1.2;\r\n  letter-spacing: 0.055em;\r\n  text-overflow: ellipsis;\r\n  text-transform: uppercase;\r\n  white-space: nowrap;\r\n  pointer-events: none;\r\n  backdrop-filter: blur(7px);\r\n  -webkit-backdrop-filter: blur(7px);\r\n}\r\n\r\n#rom-the-house .bno-direct-card::before {\r\n  content: \"The House Zell am See\";\r\n}\r\n\r\n#rom-the-gast-house .bno-direct-card::before {\r\n  content: \"The Gast House Zell am See\";\r\n}\r\n\r\n#rom-nikolaus .bno-direct-card::before {\r\n  content: \"Nikolaus by AvenidA\";\r\n}\r\n\r\n#rom-elements-resort .bno-direct-card::before {\r\n  content: \"Elements Resort Zell am See\";\r\n}\r\n\r\n\/* Kortene skal ikke arve bredder eller bildepadding fra \u00f8vrig side-CSS *\/\r\n#enheter .bno-direct-card,\r\n#enheter .bno-direct-card__button,\r\n#enheter .bno-direct-card__media,\r\n#enheter .bno-direct-card__body {\r\n  max-width: 100% !important;\r\n}\r\n\r\n#enheter .bno-direct-card__media {\r\n  padding: 0 !important;\r\n}\r\n\r\n#enheter .bno-direct-card__media img {\r\n  position: static !important;\r\n  inset: auto !important;\r\n  display: block !important;\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 !important;\r\n}\r\n\r\n#enheter .bno-direct-more-wrap {\r\n  display: flex;\r\n  justify-content: center;\r\n  margin-top: 34px;\r\n}\r\n\r\n#enheter .bno-direct-more-wrap[hidden] {\r\n  display: none !important;\r\n}\r\n\r\n#enheter .bno-direct-more {\r\n  display: inline-flex;\r\n  min-height: 50px;\r\n  align-items: center;\r\n  justify-content: center;\r\n  padding: 13px 22px;\r\n  border: 1px solid #0c1a38;\r\n  border-radius: 12px;\r\n  background: #0c1a38;\r\n  color: #ffffff;\r\n  cursor: pointer;\r\n  font: inherit;\r\n  font-size: 14px;\r\n  font-weight: 800;\r\n  transition: transform 0.2s ease, background-color 0.2s ease, box-shadow 0.2s ease;\r\n}\r\n\r\n#enheter .bno-direct-more:hover,\r\n#enheter .bno-direct-more:focus {\r\n  background: #123b5d;\r\n  box-shadow: 0 12px 26px rgba(12, 26, 56, 0.20);\r\n  transform: translateY(-2px);\r\n}\r\n\r\n\/* Nettbrett *\/\r\n@media (max-width: 1024px) {\r\n  #enheter .bno-direct-catalog__grid {\r\n    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;\r\n  }\r\n}\r\n\r\n\/* Mobil *\/\r\n@media (max-width: 767px) {\r\n  #enheter .bno-zell-catalog-block {\r\n    padding: 62px 0;\r\n  }\r\n\r\n  #enheter .bno-zell-catalog-block > .bno-shell {\r\n    width: min(100% - 32px, 1180px);\r\n  }\r\n\r\n  #enheter .bno-zell-catalog-heading {\r\n    grid-template-columns: 1fr;\r\n    gap: 17px;\r\n    margin-bottom: 31px;\r\n  }\r\n\r\n  #enheter .bno-zell-catalog-heading__number {\r\n    width: 50px;\r\n    height: 50px;\r\n    border-radius: 15px;\r\n  }\r\n\r\n  #enheter .bno-zell-catalog-heading h2 {\r\n    font-size: clamp(29px, 9vw, 39px);\r\n  }\r\n\r\n  #enheter .bno-zell-catalog-heading p {\r\n    font-size: 16px;\r\n    line-height: 1.65;\r\n  }\r\n\r\n  #enheter .bno-direct-catalog__grid {\r\n    grid-template-columns: 1fr !important;\r\n    gap: 21px !important;\r\n  }\r\n\r\n  #enheter .bno-direct-card::before {\r\n    top: 12px;\r\n    left: 12px;\r\n    max-width: calc(100% - 24px);\r\n    font-size: 9px;\r\n  }\r\n}\r\n\r\n@media (prefers-reduced-motion: reduce) {\r\n  #enheter *,\r\n  .bno-direct-modal * {\r\n    animation-duration: 0.01ms !important;\r\n    animation-iteration-count: 1 !important;\r\n    transition-duration: 0.01ms !important;\r\n  }\r\n}\r\n\r\n<\/style>\r\n\r\n<script>\r\n(function () {\r\n  \"use strict\";\r\n\r\n  function remountZellCatalogs() {\r\n    if (\r\n      window.BNODirectDestinationCatalog &&\r\n      typeof window.BNODirectDestinationCatalog.mountAll === \"function\"\r\n    ) {\r\n      window.BNODirectDestinationCatalog.mountAll(document);\r\n    }\r\n  }\r\n\r\n  remountZellCatalogs();\r\n  window.setTimeout(remountZellCatalogs, 150);\r\n  window.setTimeout(remountZellCatalogs, 600);\r\n  window.setTimeout(remountZellCatalogs, 1500);\r\n\r\n  document.addEventListener(\"elementor\/frontend\/init\", function () {\r\n    window.setTimeout(remountZellCatalogs, 100);\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-e6dc9e6 e-flex e-con-boxed e-con e-parent\" data-id=\"e6dc9e6\" 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<div class=\"elementor-element elementor-element-1bdce1cb e-flex e-con-boxed e-con e-parent\" data-id=\"1bdce1cb\" 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-1c026e1c elementor-widget elementor-widget-html\" data-id=\"1c026e1c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section class=\"bno-zell bno-section bno-section--light\">\r\n  <div class=\"bno-shell\">\r\n\r\n    <div class=\"bno-editorial-split\">\r\n\r\n      <div class=\"bno-editorial-split__content\">\r\n\r\n        <span class=\"bno-eyebrow\">\r\n          El\u00e4myksi\u00e4 Zell am Seess\u00e4\r\n        <\/span>\r\n\r\n        <h2>\r\n          Vuoria, j\u00e4rvi ja aktiivista lomailua ymp\u00e4ri vuoden\r\n        <\/h2>\r\n\r\n        <p>\r\n          Zell am See yhdist\u00e4\u00e4 el\u00e4v\u00e4isen kaupunkitunnelman helppoon p\u00e4\u00e4syyn j\u00e4rvelle ja vuorille sek\u00e4 monipuoliseen aktiviteettitarjontaan. Siksi se on erinomainen tukikohta sek\u00e4 aktiiviselle lomalle ett\u00e4 rennompaan oleskeluun.\r\n        <\/p>\r\n\r\n        <p>\r\n          Talvella alueella voi lasketella ja nauttia lumiel\u00e4myksist\u00e4, kun taas kes\u00e4ll\u00e4 tarjolla on patikointia, py\u00f6r\u00e4ily\u00e4, uimista ja aktiviteetteja j\u00e4rven ymp\u00e4rill\u00e4. Ravintolat, kaupat ja palvelut tekev\u00e4t aktiivisten el\u00e4mysten yhdist\u00e4misest\u00e4 mukaviin kaupunkip\u00e4iviin helppoa.\r\n        <\/p>\r\n\r\n        <div class=\"bno-actions\">\r\n          <a href=\"#fakta\" class=\"bno-btn bno-btn--primary\">\r\n            N\u00e4yt\u00e4 k\u00e4yt\u00e4nn\u00f6n tiedot\r\n          <\/a>\r\n        <\/div>\r\n\r\n      <\/div>\r\n\r\n      <div class=\"bno-editorial-split__media\">\r\n        <img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/08\/AdobeStock_40023408.jpeg?w=800&#038;ssl=1\" alt=\"Mountains, lake and holiday experiences in Zell am See\" loading=\"lazy\" \/>\r\n      <\/div>\r\n\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7087d327 e-flex e-con-boxed e-con e-parent\" data-id=\"7087d327\" 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-72cc6985 elementor-widget elementor-widget-html\" data-id=\"72cc6985\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section id=\"fakta\" class=\"bno-zell bno-section bno-section--soft\">\r\n  <div class=\"bno-shell\">\r\n\r\n    <div class=\"bno-section-heading\">\r\n      <span class=\"bno-eyebrow\">\r\n        K\u00e4yt\u00e4nn\u00f6n tietoa\r\n      <\/span>\r\n\r\n      <h2>\r\n        Aktiviteetit, liikkuminen ja hy\u00f6dyllist\u00e4 tietoa Zell am Seest\u00e4\r\n      <\/h2>\r\n\r\n      <p>\r\n        T\u00e4ss\u00e4 on lyhyt yleiskatsaus vaihtoehtoihin, jotka tekev\u00e4t Zell am Seest\u00e4 houkuttelevan kohteen suuren osan vuodesta.\r\n      <\/p>\r\n    <\/div>\r\n\r\n    <div class=\"bno-info-grid\">\r\n\r\n      <article class=\"bno-value-card\">\r\n        <span class=\"bno-value-card__number\">01<\/span>\r\n        <h3>Talviel\u00e4mykset<\/h3>\r\n\r\n        <p>\r\n          Talvella Zell am See toimii tukikohtana laskettelulle, talviaktiviteeteille ja kaupungin ymp\u00e4rill\u00e4 olevien vuoristoalueiden el\u00e4myksille. Tarjonta ja aukioloajat vaihtelevat kauden aikana.\r\n        <\/p>\r\n      <\/article>\r\n\r\n      <article class=\"bno-value-card\">\r\n        <span class=\"bno-value-card__number\">02<\/span>\r\n        <h3>Kes\u00e4aktiviteetit<\/h3>\r\n\r\n        <p>\r\n          Kes\u00e4ll\u00e4 voit patikoida, py\u00f6r\u00e4ill\u00e4, uida, veneill\u00e4 ja viett\u00e4\u00e4 rentoja p\u00e4ivi\u00e4 j\u00e4rven rannalla tai vuorilla.\r\n        <\/p>\r\n      <\/article>\r\n\r\n      <article class=\"bno-value-card\">\r\n        <span class=\"bno-value-card__number\">03<\/span>\r\n        <h3>Liikkuminen<\/h3>\r\n\r\n        <p>\r\n          Zell am Seest\u00e4 on yhteyksi\u00e4 ymp\u00e4r\u00f6iv\u00e4lle alueelle, ja kaupungin keskusta on kompakti. Tarkista aina ajantasaiset aikataulut ja kausittaiset palvelut ennen l\u00e4ht\u00f6\u00e4.\r\n        <\/p>\r\n      <\/article>\r\n\r\n      <article class=\"bno-value-card\">\r\n        <span class=\"bno-value-card__number\">04<\/span>\r\n        <h3>Kaupat ja palvelut<\/h3>\r\n\r\n        <p>\r\n          Keskustassa ja sen ymp\u00e4rist\u00f6ss\u00e4 on ruokakauppoja, urheiluliikkeit\u00e4, apteekkeja ja muita oleskelun aikana hy\u00f6dyllisi\u00e4 palveluja.\r\n        <\/p>\r\n      <\/article>\r\n\r\n      <article class=\"bno-value-card\">\r\n        <span class=\"bno-value-card__number\">05<\/span>\r\n        <h3>Ravintolat<\/h3>\r\n\r\n        <p>\r\n          Kaupungissa on ravintoloita, kahviloita ja muita ruokapaikkoja, joten aktiiviset p\u00e4iv\u00e4t on helppo yhdist\u00e4\u00e4 hyviin aterioihin.\r\n        <\/p>\r\n      <\/article>\r\n\r\n      <article class=\"bno-value-card\">\r\n        <span class=\"bno-value-card__number\">06<\/span>\r\n        <h3>Ymp\u00e4rivuotinen majoitus<\/h3>\r\n\r\n        <p>\r\n          Vuorten, j\u00e4rven, keskustan ja erilaisten hotellikonseptien yhdistelm\u00e4 tekee Zell am Seest\u00e4 sopivan sek\u00e4 lyhyille vierailuille ett\u00e4 pidemmille lomille.\r\n        <\/p>\r\n      <\/article>\r\n\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-4af3cc1b elementor-widget elementor-widget-html\" data-id=\"4af3cc1b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section class=\"bno-zell bno-section bno-destination-cta\">\r\n  <div class=\"bno-shell\">\r\n\r\n    <div class=\"bno-cta-box\">\r\n\r\n      <div class=\"bno-cta-box__content\">\r\n        <span class=\"bno-eyebrow\">\r\n          Seuraava vaihe\r\n        <\/span>\r\n\r\n        <h2>\r\n          L\u00f6yd\u00e4 sopiva hotelli ja huonetyyppi Zell am Seess\u00e4\r\n        <\/h2>\r\n\r\n        <p>\r\n          Vertaile The Housen, The Gast Housen, Nikolaus by AvenidAn ja Elements Resort Zell am Seen huoneita, sviittej\u00e4 ja huoneistoja.\r\n        <\/p>\r\n      <\/div>\r\n\r\n      <div class=\"bno-cta-box__action\">\r\n        <a href=\"#enheter\" class=\"bno-btn bno-btn--primary bno-cta-button\">\r\n          <span>N\u00e4yt\u00e4 huoneet ja huoneistot<\/span>\r\n          <span aria-hidden=\"true\">\u2192<\/span>\r\n        <\/a>\r\n      <\/div>\r\n\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-ee08c8a e-flex e-con-boxed e-con e-parent\" data-id=\"ee08c8a\" 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>Zell am See \u00b7 It\u00e4valta Majoitus Zell am Seess\u00e4 \u2013 tutustu nelj\u00e4\u00e4n hotelliin vuorten ja j\u00e4rven \u00e4\u00e4rell\u00e4 L\u00f6yd\u00e4 huoneita, sviittej\u00e4 ja huoneistoja hotelleista The House Zell am See, The Gast House Zell am See, Nikolaus by AvenidA ja Elements Resort Zell am See. Vertaile huonetyyppej\u00e4 ja l\u00f6yd\u00e4 matkallesi sopiva majoitus. N\u00e4yt\u00e4 huoneet ja huoneistot N\u00e4yt\u00e4 [&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-94610","page","type-page","status-publish","hentry"],"jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/PgDuwj-oBY","jetpack-related-posts":[{"id":94643,"url":"https:\/\/bno-travel.com\/fi\/overnatting-i-de-osterrikske-alper\/","url_meta":{"origin":94610,"position":0},"title":"It\u00e4vallan Alpit","author":"Jan Terje \u00c5s","date":"29.7.2026","format":false,"excerpt":"Kohteet \u00b7 It\u00e4vallan Alpit Majoitus It\u00e4vallan Alpeilla \u2013 l\u00f6yd\u00e4 matkallesi sopiva kohde Majoitus It\u00e4vallan Alpeilla tuo sinut l\u00e4helle alppikyli\u00e4, laskettelualueita, j\u00e4rvi\u00e4 ja upeita vuoristoel\u00e4myksi\u00e4. Tutustu Kapruniin ja muihin kohteisiimme ja l\u00f6yd\u00e4 majoitus, joka sopii sek\u00e4 talvilomalle ett\u00e4 aktiivisiin kes\u00e4p\u00e4iviin. N\u00e4yt\u00e4 kohteet Tutustu It\u00e4vallan Alppeihin L\u00f6yd\u00e4 sopiva vuoristokohde L\u00f6yd\u00e4 majoitus It\u00e4vallan\u2026","rel":"","context":"Samankaltainen artikkeli","block_context":{"text":"Samankaltainen artikkeli","link":""},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":94639,"url":"https:\/\/bno-travel.com\/fi\/overnatting-i-kaprun\/","url_meta":{"origin":94610,"position":1},"title":"Kaprun","author":"Jan Terje \u00c5s","date":"30.7.2026","format":false,"excerpt":"Kaprun \u00b7 It\u00e4valta Majoitus Kaprunissa AvenidA Panorama Suites -hotellissa Majoitu AvenidA Panorama Suites Kaprunissa, jossa on moderneja huoneita, sviittej\u00e4 ja huoneistoja, panoraaman\u00e4kym\u00e4t vuorille sek\u00e4 erinomainen tukikohta lasketteluun, patikointiin ja ymp\u00e4rivuotisiin el\u00e4myksiin. N\u00e4yt\u00e4 huoneet ja sviitit N\u00e4yt\u00e4 kartta Kolme hotellia Kaprunissa Valitse oleskeluusi sopiva hotelli ja huonetyyppi Tutustu kolmeen erilaiseen Alpin\u2026","rel":"","context":"Samankaltainen artikkeli","block_context":{"text":"Samankaltainen artikkeli","link":""},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":94641,"url":"https:\/\/bno-travel.com\/fi\/overnatting-i-de-sveitsiske-alper\/","url_meta":{"origin":94610,"position":2},"title":"Sveitsin Alpit","author":"Jan Terje \u00c5s","date":"29.7.2026","format":false,"excerpt":"Kohteet \u00b7 Sveitsin Alpit Majoitus Sveitsin Alpeilla \u2013 l\u00f6yd\u00e4 matkallesi sopiva kohde Tutustu Verbieriin ja Sveitsin houkutteleviin vuoristoalueisiin. L\u00f6yd\u00e4 majoitus l\u00e4hell\u00e4 perinteisi\u00e4 alppikyli\u00e4, korkeita vuoria, laskettelualueita ja upeita luontoel\u00e4myksi\u00e4 ymp\u00e4ri vuoden. N\u00e4yt\u00e4 kohteet Tutustu Sveitsin Alppeihin L\u00f6yd\u00e4 sopiva vuoristokohde L\u00f6yd\u00e4 majoitus Sveitsin Alpeilta Sveitsin Alpit koostuvat luonteeltaan, sijainniltaan ja tunnelmaltaan\u2026","rel":"","context":"Samankaltainen artikkeli","block_context":{"text":"Samankaltainen artikkeli","link":""},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":94612,"url":"https:\/\/bno-travel.com\/fi\/spanske-kysten\/","url_meta":{"origin":94610,"position":3},"title":"Espanjan rannikko","author":"Jan Terje \u00c5s","date":"2.8.2026","format":false,"excerpt":"Kohteet \u00b7 Espanjan rannikko Majoitus Espanjan rannikolla \u2013 l\u00f6yd\u00e4 matkallesi sopiva kohde Tutustu k\u00e4sin valittuihin loma-asuntoihin Costa Bravalla ja Mallorcalla. Vertaile kahta omaleimaista rannikkokohdetta, joissa on huviloita, huoneistoja, rantoja, kyli\u00e4 ja el\u00e4myksi\u00e4 ymp\u00e4ri vuoden. N\u00e4yt\u00e4 kohteet Tutustu Espanjan rannikkoon L\u00f6yd\u00e4 sopiva rannikkokohde Majoitus Espanjan rannikolla Espanjan V\u00e4limeren-rannikolla on erilaisia kohteita,\u2026","rel":"","context":"Samankaltainen artikkeli","block_context":{"text":"Samankaltainen artikkeli","link":""},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":94337,"url":"https:\/\/bno-travel.com\/fi\/din-reise-til-trysil-og-salen-bno-travel\/","url_meta":{"origin":94610,"position":4},"title":"Matkasi Trysiliin ja S\u00e4leniin","author":"Jan Terje \u00c5s","date":"11.7.2025","format":false,"excerpt":"L\u00f6yd\u00e4 oma suosikkikohteesi Valitse vuoristoloma, talviseikkailu tai luontoel\u00e4mys, joka j\u00e4\u00e4 mieleen pitk\u00e4ksi aikaa matkan j\u00e4lkeenkin Haaveiletko vuoristolomasta Trysiliss\u00e4, S\u00e4leniss\u00e4 tai Strandassa? BNO Travel tarjoaa turvallisen ja joustavan tavan matkustaa Norjan ja Ruotsin suosituimpiin vuoristo- ja aktiviteettikohteisiin \u2013 laskettelua, kes\u00e4el\u00e4myksi\u00e4, perheaktiviteetteja ja ikimuistoisia p\u00e4ivi\u00e4 samassa inspiroivassa kokonaisuudessa. Tutustu kohteisiin Katso, miten\u2026","rel":"","context":"Samankaltainen artikkeli","block_context":{"text":"Samankaltainen artikkeli","link":""},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":94145,"url":"https:\/\/bno-travel.com\/fi\/leilighet-sjo-3-fjellsaetra\/","url_meta":{"origin":94610,"position":5},"title":"Leilighet Sj\u00f8 3 - Fjells\u00e6tra","author":"Jan Terje \u00c5s","date":"4.3.2026","format":false,"excerpt":"Sunnm\u00f8rsalpene \u2022 Fjells\u00e6tra Leilighet Sj\u00f8 3 \u2013 tilava huoneistom\u00f6kki n\u00e4k\u00f6alalla Nys\u00e6tervatnet-j\u00e4rvelle Leilighet Sj\u00f8 3 on viihtyis\u00e4 ja tilava 70 m\u00b2:n huoneistom\u00f6kki, jossa on 9 vuodepaikkaa nelj\u00e4ss\u00e4 makuuhuoneessa ja kaksi kylpyhuonetta. Majoitut Fjells\u00e6tra-alueella upealla n\u00e4k\u00f6alalla Nys\u00e6tervatnet-j\u00e4rvelle, l\u00e4hell\u00e4 hiihtokeskusta, murtomaahiihtolatuja ja ymp\u00e4rivuotisia retkeilymahdollisuuksia. 9 vuodepaikkaa 4 makuuhuonetta 70 m\u00b2 2 kylpyhuonetta Tarkista\u2026","rel":"","context":"Samankaltainen artikkeli","block_context":{"text":"Samankaltainen artikkeli","link":""},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/bno-travel.com\/fi\/wp-json\/wp\/v2\/pages\/94610","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bno-travel.com\/fi\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/bno-travel.com\/fi\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/bno-travel.com\/fi\/wp-json\/wp\/v2\/users\/260013438"}],"replies":[{"embeddable":true,"href":"https:\/\/bno-travel.com\/fi\/wp-json\/wp\/v2\/comments?post=94610"}],"version-history":[{"count":1,"href":"https:\/\/bno-travel.com\/fi\/wp-json\/wp\/v2\/pages\/94610\/revisions"}],"predecessor-version":[{"id":94611,"href":"https:\/\/bno-travel.com\/fi\/wp-json\/wp\/v2\/pages\/94610\/revisions\/94611"}],"wp:attachment":[{"href":"https:\/\/bno-travel.com\/fi\/wp-json\/wp\/v2\/media?parent=94610"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}