{"id":97834,"date":"2026-09-11T17:57:06","date_gmt":"2026-09-11T15:57:06","guid":{"rendered":"https:\/\/bno-travel.com\/hoteller-i-dubai\/"},"modified":"2026-09-15T14:43:27","modified_gmt":"2026-09-15T12:43:27","slug":"hoteller-i-dubai","status":"publish","type":"page","link":"https:\/\/bno-travel.com\/da\/hoteller-i-dubai\/","title":{"rendered":"Hoteller i Dubai \u2013 find hoteller og omr\u00e5der | BNO Travel"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"97834\" class=\"elementor elementor-97834 elementor-97229\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-fdce33a e-flex e-con-boxed e-con e-parent\" data-id=\"fdce33a\" 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-c61e35b elementor-widget elementor-widget-html\" data-id=\"c61e35b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\r\n  .bno-dubai-page,\r\n  .bno-dubai-page * {\r\n    box-sizing: border-box;\r\n  }\r\n\r\n  .bno-dubai-page {\r\n    --bno-navy: #0C1A38;\r\n    --bno-blue: #1769aa;\r\n    --bno-soft: #f4f7fb;\r\n    --bno-border: #dfe5ed;\r\n    --bno-text: #202938;\r\n    --bno-muted: #5c687b;\r\n    --bno-radius: 22px;\r\n  }\r\n\r\n  .bno-dubai-page .bno-shell {\r\n    width: min(1180px, calc(100% - 36px));\r\n    margin: 0 auto;\r\n  }\r\n\r\n  .bno-dubai-page .bno-section {\r\n    padding: 76px 0;\r\n  }\r\n\r\n  .bno-dubai-page .bno-section--soft {\r\n    background: #f5f7fa;\r\n  }\r\n\r\n  .bno-dubai-page .bno-section--light {\r\n    background: #fff;\r\n  }\r\n\r\n  .bno-dubai-page .bno-eyebrow {\r\n    display: inline-flex;\r\n    align-items: center;\r\n    gap: 8px;\r\n    margin-bottom: 14px;\r\n    font-size: 13px;\r\n    line-height: 1.2;\r\n    font-weight: 700;\r\n    letter-spacing: .04em;\r\n    text-transform: uppercase;\r\n    color: #1769aa;\r\n  }\r\n\r\n  .bno-dubai-page .bno-section-heading {\r\n    max-width: 760px;\r\n    margin-bottom: 38px;\r\n  }\r\n\r\n  .bno-dubai-page .bno-section-heading h2 {\r\n    margin: 0 0 15px;\r\n    font-size: clamp(30px, 4vw, 46px);\r\n    line-height: 1.08;\r\n    color: #182238;\r\n  }\r\n\r\n  .bno-dubai-page .bno-section-heading p {\r\n    margin: 0;\r\n    font-size: 17px;\r\n    line-height: 1.7;\r\n    color: var(--bno-muted);\r\n  }\r\n\r\n  .bno-dubai-page .bno-actions {\r\n    display: flex;\r\n    flex-wrap: wrap;\r\n    gap: 12px;\r\n    margin-top: 26px;\r\n  }\r\n\r\n  .bno-dubai-page .bno-btn {\r\n    display: inline-flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    min-height: 52px;\r\n    padding: 0 22px;\r\n    border-radius: 12px;\r\n    text-decoration: none;\r\n    font-weight: 700;\r\n    transition: .2s ease;\r\n  }\r\n\r\n  .bno-dubai-page .bno-btn--primary {\r\n    color: #fff;\r\n    background: var(--bno-navy);\r\n    border: 1px solid var(--bno-navy);\r\n  }\r\n\r\n  .bno-dubai-page .bno-btn--primary:hover {\r\n    transform: translateY(-1px);\r\n    opacity: .94;\r\n  }\r\n\r\n  .bno-dubai-page .bno-btn--secondary {\r\n    color: var(--bno-navy);\r\n    background: rgba(255,255,255,.96);\r\n    border: 1px solid rgba(12,26,56,.22);\r\n  }\r\n\r\n  \/* HERO *\/\r\n  .bno-dubai-hero {\r\n    position: relative;\r\n    min-height: 590px;\r\n    display: flex;\r\n    align-items: flex-end;\r\n    overflow: hidden;\r\n    color: #fff;\r\n    background:\r\n      radial-gradient(circle at 78% 25%, rgba(29,181,220,.55), transparent 34%),\r\n      radial-gradient(circle at 65% 80%, rgba(237,166,77,.25), transparent 36%),\r\n      linear-gradient(135deg, #0b2c52 0%, #0C1A38 54%, #10294d 100%);\r\n  }\r\n\r\n  \/*\r\n    N\u00e5r du har URL-en til Dubai-bildet du allerede bruker,\r\n    legg den inn som et ekstra background-image her.\r\n  *\/\r\n\r\n  .bno-dubai-hero::after {\r\n    content: \"\";\r\n    position: absolute;\r\n    inset: 0;\r\n    background:\r\n      linear-gradient(90deg, rgba(5,14,31,.70) 0%, rgba(5,14,31,.37) 55%, rgba(5,14,31,.12) 100%);\r\n    pointer-events: none;\r\n  }\r\n\r\n  .bno-dubai-hero .bno-shell {\r\n    position: relative;\r\n    z-index: 2;\r\n  }\r\n\r\n  .bno-dubai-hero__content {\r\n    max-width: 800px;\r\n    padding: 110px 0 76px;\r\n  }\r\n\r\n  .bno-dubai-hero .bno-eyebrow {\r\n    color: #fff;\r\n    background: rgba(255,255,255,.14);\r\n    border: 1px solid rgba(255,255,255,.25);\r\n    backdrop-filter: blur(8px);\r\n    padding: 9px 13px;\r\n    border-radius: 999px;\r\n  }\r\n\r\n  .bno-dubai-hero h1 {\r\n    margin: 7px 0 20px;\r\n    max-width: 830px;\r\n    font-size: clamp(42px, 6vw, 72px);\r\n    line-height: .99;\r\n    letter-spacing: -.025em;\r\n    color: #fff;\r\n  }\r\n\r\n  .bno-dubai-hero .bno-lead {\r\n    margin: 0;\r\n    max-width: 690px;\r\n    font-size: clamp(18px, 2vw, 21px);\r\n    line-height: 1.6;\r\n    color: rgba(255,255,255,.92);\r\n  }\r\n\r\n  .bno-dubai-hero .bno-btn--primary {\r\n    background: #fff;\r\n    color: var(--bno-navy);\r\n    border-color: #fff;\r\n  }\r\n\r\n  .bno-dubai-hero .bno-btn--secondary {\r\n    background: rgba(12,26,56,.35);\r\n    color: #fff;\r\n    border-color: rgba(255,255,255,.42);\r\n    backdrop-filter: blur(8px);\r\n  }\r\n\r\n  \/* INTRO *\/\r\n  .bno-dubai-intro__grid {\r\n    display: grid;\r\n    grid-template-columns: 1.35fr .65fr;\r\n    gap: 54px;\r\n    align-items: start;\r\n  }\r\n\r\n  .bno-dubai-intro__text p {\r\n    margin: 0 0 18px;\r\n    font-size: 17px;\r\n    line-height: 1.75;\r\n    color: var(--bno-muted);\r\n  }\r\n\r\n  .bno-dubai-highlights {\r\n    display: grid;\r\n    gap: 12px;\r\n  }\r\n\r\n  .bno-dubai-highlight {\r\n    padding: 20px;\r\n    background: var(--bno-soft);\r\n    border: 1px solid var(--bno-border);\r\n    border-radius: 16px;\r\n  }\r\n\r\n  .bno-dubai-highlight strong {\r\n    display: block;\r\n    color: var(--bno-navy);\r\n    margin-bottom: 5px;\r\n    font-size: 16px;\r\n  }\r\n\r\n  .bno-dubai-highlight span {\r\n    color: var(--bno-muted);\r\n    line-height: 1.5;\r\n  }\r\n\r\n  \/* GENERELLE KORT *\/\r\n  .bno-dubai-info-grid {\r\n    display: grid;\r\n    grid-template-columns: repeat(3, 1fr);\r\n    gap: 18px;\r\n  }\r\n\r\n  .bno-dubai-info-card {\r\n    padding: 26px;\r\n    border: 1px solid var(--bno-border);\r\n    border-radius: 18px;\r\n    background: #fff;\r\n  }\r\n\r\n  .bno-dubai-info-card h3 {\r\n    margin: 0 0 11px;\r\n    font-size: 20px;\r\n    color: var(--bno-navy);\r\n  }\r\n\r\n  .bno-dubai-info-card p {\r\n    margin: 0;\r\n    color: var(--bno-muted);\r\n    line-height: 1.65;\r\n  }\r\n\r\n  \/* EDITORIAL *\/\r\n  .bno-dubai-editorial {\r\n    display: grid;\r\n    grid-template-columns: 1fr 1fr;\r\n    gap: 50px;\r\n    align-items: center;\r\n  }\r\n\r\n  .bno-dubai-editorial__content p {\r\n    color: var(--bno-muted);\r\n    font-size: 17px;\r\n    line-height: 1.72;\r\n  }\r\n\r\n  .bno-dubai-editorial__media {\r\n    min-height: 460px;\r\n    border-radius: 24px;\r\n    overflow: hidden;\r\n    background:\r\n      radial-gradient(circle at 70% 25%, #33b8d8 0%, transparent 38%),\r\n      linear-gradient(145deg, #0f4774, #0C1A38);\r\n    display: flex;\r\n    align-items: flex-end;\r\n    padding: 28px;\r\n  }\r\n\r\n  .bno-dubai-editorial__media span {\r\n    color: #fff;\r\n    font-size: 28px;\r\n    font-weight: 750;\r\n  }\r\n\r\n  \/* CTA *\/\r\n  .bno-dubai-cta-box {\r\n    display: grid;\r\n    grid-template-columns: 1fr auto;\r\n    gap: 30px;\r\n    align-items: center;\r\n    padding: 40px;\r\n    background: var(--bno-navy);\r\n    border-radius: 24px;\r\n    color: #fff;\r\n  }\r\n\r\n  .bno-dubai-cta-box h2 {\r\n    margin: 4px 0 12px;\r\n    color: #fff;\r\n    font-size: clamp(28px, 4vw, 42px);\r\n  }\r\n\r\n  .bno-dubai-cta-box p {\r\n    margin: 0;\r\n    max-width: 720px;\r\n    color: rgba(255,255,255,.78);\r\n    line-height: 1.6;\r\n  }\r\n\r\n  .bno-dubai-cta-box .bno-eyebrow {\r\n    color: #8bd8ef;\r\n  }\r\n\r\n  .bno-dubai-cta-box .bno-btn--primary {\r\n    background: #fff;\r\n    color: var(--bno-navy);\r\n    border-color: #fff;\r\n    white-space: nowrap;\r\n  }\r\n\r\n  @media (max-width: 900px) {\r\n    .bno-dubai-page .bno-section {\r\n      padding: 58px 0;\r\n    }\r\n\r\n    .bno-dubai-intro__grid,\r\n    .bno-dubai-editorial,\r\n    .bno-dubai-cta-box {\r\n      grid-template-columns: 1fr;\r\n    }\r\n\r\n    .bno-dubai-info-grid {\r\n      grid-template-columns: repeat(2, 1fr);\r\n    }\r\n\r\n    .bno-dubai-hero {\r\n      min-height: 520px;\r\n    }\r\n  }\r\n\r\n  @media (max-width: 620px) {\r\n    .bno-dubai-page .bno-shell {\r\n      width: min(100% - 24px, 1180px);\r\n    }\r\n\r\n    .bno-dubai-info-grid {\r\n      grid-template-columns: 1fr;\r\n    }\r\n\r\n    .bno-dubai-hero__content {\r\n      padding: 90px 0 52px;\r\n    }\r\n\r\n    .bno-dubai-cta-box {\r\n      padding: 28px 22px;\r\n    }\r\n  }\r\n<\/style>\r\n\r\n<div class=\"bno-dubai-page\">\r\n\r\n<section class=\"bno-dubai-hero\">\r\n  <div class=\"bno-shell\">\r\n\r\n    <div class=\"bno-dubai-hero__content\">\r\n\r\n      <span class=\"bno-eyebrow\">\r\n        Dubai \u00b7 De Forenede Arabiske Emirater\r\n      <\/span>\r\n\r\n      <h1>\r\n        Hoteler i Dubai \u2013 find det ophold, der passer til din rejse\r\n      <\/h1>\r\n\r\n      <p class=\"bno-lead\">\r\n        Udforsk hoteller fra Downtown Dubai og Business Bay til Dubai Marina, Jumeirah og omr\u00e5derne omkring Dubai Creek. Se hotellerne, v\u00e6relsestyperne og beliggenheden, f\u00f8r booking \u00e5bner hos BNO Travel.\r\n      <\/p>\r\n\r\n      <div class=\"bno-actions\">\r\n        <a href=\"#hoteller\" class=\"bno-btn bno-btn--primary\">\r\n          Se hotellerne\r\n        <\/a>\r\n\r\n        <a href=\"#omrader\" class=\"bno-btn bno-btn--secondary\">\r\n          Udforsk Dubai\r\n        <\/a>\r\n      <\/div>\r\n\r\n    <\/div>\r\n\r\n  <\/div>\r\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fdf128e elementor-widget elementor-widget-html\" data-id=\"fdf128e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section class=\"bno-section bno-section--light bno-dubai-intro\">\r\n  <div class=\"bno-shell\">\r\n\r\n    <div class=\"bno-dubai-intro__grid\">\r\n\r\n      <div class=\"bno-dubai-intro__text\">\r\n\r\n        <span class=\"bno-eyebrow\">\r\n          Overnatning i Dubai\r\n        <\/span>\r\n\r\n        <div class=\"bno-section-heading\">\r\n          <h2>\r\n            Fra storby og shopping til strand og resortliv\r\n          <\/h2>\r\n        <\/div>\r\n\r\n        <p>\r\n          Dubai best\u00e5r af flere tydeligt forskellige omr\u00e5der, og hvor du v\u00e6lger at bo, har stor betydning for oplevelsen. Downtown Dubai og Business Bay passer godt til dig, der \u00f8nsker moderne storbyliv, restauranter og kendte sev\u00e6rdigheder i n\u00e6rheden, mens Dubai Marina og Jumeirah giver kortere vej til strand, promenade og livet ved kysten.\r\n        <\/p>\r\n\r\n        <p>\r\n          BNO Travel samler et bredt udvalg af hoteller og lejlighedshoteller i Dubai. Du kan udforske mulighederne, sammenligne beliggenhed og hotelinformation og se tilg\u00e6ngelige v\u00e6relsestyper, f\u00f8r den komplette bookingl\u00f8sning \u00e5bner.\r\n        <\/p>\r\n\r\n      <\/div>\r\n\r\n      <div class=\"bno-dubai-highlights\">\r\n\r\n        <div class=\"bno-dubai-highlight\">\r\n          <strong>Storby og strand<\/strong>\r\n          <span>\r\n            Kombin\u00e9r shopping, restauranter og sev\u00e6rdigheder med strandliv og afslappende dage ved kysten.\r\n          <\/span>\r\n        <\/div>\r\n\r\n        <div class=\"bno-dubai-highlight\">\r\n          <strong>Mange forskellige omr\u00e5der<\/strong>\r\n          <span>\r\n            V\u00e6lg blandt andet mellem Downtown, Business Bay, Dubai Marina, Jumeirah og Dubai Creek.\r\n          <\/span>\r\n        <\/div>\r\n\r\n        <div class=\"bno-dubai-highlight\">\r\n          <strong>Hoteler til forskellige rejser<\/strong>\r\n          <span>\r\n            Find muligheder for par, familier, forretningsrejser og l\u00e6ngere ophold.\r\n          <\/span>\r\n        <\/div>\r\n\r\n      <\/div>\r\n\r\n    <\/div>\r\n\r\n  <\/div>\r\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6d483d7 elementor-widget elementor-widget-html\" data-id=\"6d483d7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section id=\"hoteller\" class=\"bno-section bno-section--soft bno-stays-preview\" data-bno-stays-preview data-api-base=\"https:\/\/bno-api-duffel-staging.onrender.com\" data-destination=\"dubai\" data-lang=\"da\" data-initial-count=\"12\" data-page-size=\"200\">\r\n  <div class=\"bno-shell\">\r\n\r\n    <div class=\"bno-section-heading\">\r\n      <span class=\"bno-eyebrow\">\r\n        Hoteler i Dubai\r\n      <\/span>\r\n\r\n      <h2>\r\n        Find det hotel, der passer til dit ophold\r\n      <\/h2>\r\n\r\n      <p>\r\n        Udforsk hoteller i Dubai, og se billeder, beliggenhed, hotelinformation og g\u00e6steanmeldelser. Flere detaljer og booking bliver snart tilg\u00e6ngelige.\r\n      <\/p>\r\n    <\/div>\r\n\r\n\r\n    <!-- FILTERS -->\r\n\r\n    <div class=\"bno-stays-toolbar\">\r\n\r\n      <div class=\"bno-stays-count\" data-result-count aria-live=\"polite\">\r\n        Indl\u00e6ser hoteller \u2026\r\n      <\/div>\r\n\r\n\r\n      <div class=\"bno-stays-filters\">\r\n\r\n        <label class=\"bno-stays-field\">\r\n          <span>S\u00f8g efter hotel<\/span>\r\n\r\n          <input\r\n            type=\"search\"\r\n            placeholder=\"Hotelnavn eller omr\u00e5de\"\r\n            autocomplete=\"off\"\r\n            data-hotel-search\r\n          >\r\n        <\/label>\r\n\r\n\r\n        <label class=\"bno-stays-field\" data-area-field>\r\n          <span>Omr\u00e5de<\/span>\r\n\r\n          <select data-area-filter>\r\n            <option value=\"\">\r\n              Alle omr\u00e5der\r\n            <\/option>\r\n          <\/select>\r\n        <\/label>\r\n\r\n\r\n        <label class=\"bno-stays-field\">\r\n          <span>Stjerner<\/span>\r\n\r\n          <select data-star-filter>\r\n            <option value=\"\">\r\n              Alle\r\n            <\/option>\r\n\r\n            <option value=\"5\">\r\n              5 stjerner\r\n            <\/option>\r\n\r\n            <option value=\"4\">\r\n              4 stjerner eller mere\r\n            <\/option>\r\n\r\n            <option value=\"3\">\r\n              3 stjerner eller mere\r\n            <\/option>\r\n          <\/select>\r\n        <\/label>\r\n\r\n      <\/div>\r\n\r\n\r\n      <!-- MOBILE LIST \/ MAP -->\r\n\r\n      <div class=\"bno-stays-mobile-switch\">\r\n\r\n        <button type=\"button\" class=\"is-active\" data-show-list>\r\n          Liste\r\n        <\/button>\r\n\r\n        <button type=\"button\" data-show-map>\r\n          Kort\r\n        <\/button>\r\n\r\n      <\/div>\r\n\r\n    <\/div>\r\n\r\n\r\n    <!-- LIST + MAP -->\r\n\r\n    <div class=\"bno-stays-layout\">\r\n\r\n      <div class=\"bno-stays-list-column\" data-list-column>\r\n\r\n        <div class=\"bno-stays-status\" data-status role=\"status\" aria-live=\"polite\">\r\n          Indl\u00e6ser hoteller \u2026\r\n        <\/div>\r\n\r\n\r\n        <div class=\"bno-stays-list\" data-hotel-list><\/div>\r\n\r\n\r\n        <div class=\"bno-stays-more-wrap\" data-more-wrap hidden>\r\n\r\n          <button type=\"button\" class=\"bno-stays-more\" data-more>\r\n            Vis flere hoteller\r\n          <\/button>\r\n\r\n        <\/div>\r\n\r\n      <\/div>\r\n\r\n\r\n      <div class=\"bno-stays-map-column\" data-map-column>\r\n\r\n        <div class=\"bno-stays-map-card\">\r\n\r\n          <div id=\"bno-dubai-map\" class=\"bno-stays-map\"><\/div>\r\n\r\n\r\n          <div class=\"bno-stays-map-note\" data-map-note>\r\n            Indl\u00e6ser hotelplaceringer \u2026\r\n          <\/div>\r\n\r\n        <\/div>\r\n\r\n      <\/div>\r\n\r\n    <\/div>\r\n\r\n  <\/div>\r\n\r\n\r\n  <!-- HOTEL MODAL -->\r\n\r\n  <div class=\"bno-stays-modal\" data-hotel-modal hidden>\r\n\r\n    <div class=\"bno-stays-modal__backdrop\" data-modal-close><\/div>\r\n\r\n\r\n    <div class=\"bno-stays-modal__dialog\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Hotelinformation\">\r\n\r\n      <button type=\"button\" class=\"bno-stays-modal__close\" data-modal-close aria-label=\"Lukk\">\r\n        \u00d7\r\n      <\/button>\r\n\r\n\r\n      <div data-modal-content><\/div>\r\n\r\n    <\/div>\r\n\r\n  <\/div>\r\n\r\n<\/section>\r\n\r\n\r\n<style>\r\n\r\n\/* =========================================================\r\n   BNO STAYS PREVIEW\r\n   ========================================================= *\/\r\n\r\n.bno-stays-preview {\r\n  --bno-navy: #0C1A38;\r\n  --bno-blue: #1769aa;\r\n  --bno-border: #dce3ec;\r\n  --bno-muted: #627087;\r\n}\r\n\r\n.bno-stays-preview *,\r\n.bno-stays-preview *::before,\r\n.bno-stays-preview *::after {\r\n  box-sizing: border-box;\r\n}\r\n\r\n.bno-stays-preview [hidden] {\r\n  display: none !important;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   TOOLBAR\r\n   ========================================================= *\/\r\n\r\n.bno-stays-toolbar {\r\n  margin-bottom: 26px;\r\n}\r\n\r\n.bno-stays-count {\r\n  margin-bottom: 17px;\r\n\r\n  color: #172238;\r\n\r\n  font-size: 15px;\r\n  font-weight: 750;\r\n}\r\n\r\n.bno-stays-filters {\r\n  display: grid;\r\n\r\n  grid-template-columns:\r\n    1.35fr\r\n    .95fr\r\n    .75fr;\r\n\r\n  gap: 12px;\r\n}\r\n\r\n.bno-stays-field {\r\n  display: flex;\r\n  flex-direction: column;\r\n\r\n  gap: 7px;\r\n}\r\n\r\n.bno-stays-field span {\r\n  color: #59667a;\r\n\r\n  font-size: 12px;\r\n  font-weight: 750;\r\n}\r\n\r\n.bno-stays-field input,\r\n.bno-stays-field select {\r\n  width: 100%;\r\n  height: 49px;\r\n\r\n  padding: 0 14px;\r\n\r\n  border: 1px solid #d3dce7;\r\n  border-radius: 11px;\r\n\r\n  background: #fff;\r\n\r\n  color: #182238;\r\n\r\n  font: inherit;\r\n\r\n  outline: none;\r\n}\r\n\r\n.bno-stays-field input:focus,\r\n.bno-stays-field select:focus {\r\n  border-color: #587ba9;\r\n\r\n  box-shadow:\r\n    0 0 0 3px rgba(23,105,170,.08);\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   LAYOUT\r\n   ========================================================= *\/\r\n\r\n.bno-stays-layout {\r\n  display: grid;\r\n\r\n  grid-template-columns:\r\n    minmax(0,1.05fr)\r\n    minmax(400px,.95fr);\r\n\r\n  gap: 24px;\r\n\r\n  align-items: start;\r\n}\r\n\r\n.bno-stays-list {\r\n  display: grid;\r\n\r\n  gap: 15px;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   HOTEL CARD\r\n   ========================================================= *\/\r\n\r\n.bno-stays-hotel {\r\n  display: grid;\r\n\r\n  grid-template-columns:\r\n    215px\r\n    minmax(0,1fr);\r\n\r\n  min-height: 225px;\r\n\r\n  overflow: hidden;\r\n\r\n  background: #fff;\r\n\r\n  border: 1px solid #dce3ec;\r\n  border-radius: 17px;\r\n\r\n  transition:\r\n    transform .2s ease,\r\n    box-shadow .2s ease,\r\n    border-color .2s ease;\r\n}\r\n\r\n.bno-stays-hotel:hover {\r\n  transform: translateY(-2px);\r\n\r\n  box-shadow:\r\n    0 12px 30px rgba(12,26,56,.08);\r\n}\r\n\r\n.bno-stays-hotel.is-map-active {\r\n  border-color: #1769aa;\r\n\r\n  box-shadow:\r\n    0 0 0 2px rgba(23,105,170,.13);\r\n}\r\n\r\n\r\n\/* IMAGE *\/\r\n\r\n.bno-stays-hotel__image {\r\n  position: relative;\r\n\r\n  min-height: 225px;\r\n\r\n  overflow: hidden;\r\n\r\n  background:\r\n    linear-gradient(\r\n      145deg,\r\n      #d9e4ed,\r\n      #c4d2de\r\n    );\r\n}\r\n\r\n.bno-stays-hotel__image img {\r\n  position: absolute;\r\n  inset: 0;\r\n\r\n  width: 100%;\r\n  height: 100%;\r\n\r\n  object-fit: cover;\r\n}\r\n\r\n.bno-stays-image-placeholder {\r\n  position: absolute;\r\n  inset: 0;\r\n\r\n  display: flex;\r\n\r\n  align-items: center;\r\n  justify-content: center;\r\n\r\n  padding: 25px;\r\n\r\n  color: #647289;\r\n\r\n  text-align: center;\r\n\r\n  font-size: 13px;\r\n  font-weight: 700;\r\n}\r\n\r\n.bno-stays-badge {\r\n  position: absolute;\r\n\r\n  z-index: 3;\r\n\r\n  top: 12px;\r\n  left: 12px;\r\n\r\n  padding: 7px 10px;\r\n\r\n  border-radius: 999px;\r\n\r\n  background: rgba(255,255,255,.96);\r\n\r\n  color: #344158;\r\n\r\n  font-size: 11px;\r\n  font-weight: 800;\r\n\r\n  box-shadow:\r\n    0 2px 10px rgba(12,26,56,.08);\r\n}\r\n\r\n\r\n\/* BODY *\/\r\n\r\n.bno-stays-hotel__body {\r\n  display: flex;\r\n  flex-direction: column;\r\n\r\n  min-width: 0;\r\n\r\n  padding: 20px 21px;\r\n}\r\n\r\n.bno-stays-stars {\r\n  min-height: 19px;\r\n\r\n  color: #c98513;\r\n\r\n  font-size: 14px;\r\n\r\n  letter-spacing: 1px;\r\n}\r\n\r\n.bno-stays-hotel h3 {\r\n  margin: 5px 0 7px;\r\n\r\n  color: #172238;\r\n\r\n  font-size: 21px;\r\n  line-height: 1.26;\r\n}\r\n\r\n.bno-stays-location {\r\n  margin-bottom: 10px;\r\n\r\n  color: #667288;\r\n\r\n  font-size: 13px;\r\n}\r\n\r\n.bno-stays-rating {\r\n  display: flex;\r\n  flex-wrap: wrap;\r\n\r\n  align-items: center;\r\n\r\n  gap: 8px;\r\n\r\n  margin-bottom: 10px;\r\n}\r\n\r\n.bno-stays-score {\r\n  display: inline-flex;\r\n\r\n  align-items: center;\r\n  justify-content: center;\r\n\r\n  min-width: 38px;\r\n  height: 29px;\r\n\r\n  padding: 0 8px;\r\n\r\n  border-radius: 8px;\r\n\r\n  background: #0C1A38;\r\n\r\n  color: #fff;\r\n\r\n  font-size: 12px;\r\n  font-weight: 800;\r\n}\r\n\r\n.bno-stays-review-count {\r\n  color: #697589;\r\n\r\n  font-size: 12px;\r\n}\r\n\r\n.bno-stays-description {\r\n  display: -webkit-box;\r\n\r\n  overflow: hidden;\r\n\r\n  margin: 0 0 16px;\r\n\r\n  color: #58667b;\r\n\r\n  font-size: 14px;\r\n  line-height: 1.55;\r\n\r\n  -webkit-box-orient: vertical;\r\n  -webkit-line-clamp: 3;\r\n}\r\n\r\n.bno-stays-hotel__actions {\r\n  display: flex;\r\n\r\n  align-items: center;\r\n  justify-content: space-between;\r\n\r\n  gap: 14px;\r\n\r\n  margin-top: auto;\r\n}\r\n\r\n.bno-stays-small-status {\r\n  color: #687589;\r\n\r\n  font-size: 12px;\r\n}\r\n\r\n.bno-stays-open {\r\n  min-height: 43px;\r\n\r\n  padding: 0 16px;\r\n\r\n  border: 0;\r\n  border-radius: 10px;\r\n\r\n  background: #0C1A38;\r\n\r\n  color: #fff;\r\n\r\n  font: inherit;\r\n  font-size: 13px;\r\n  font-weight: 750;\r\n\r\n  cursor: pointer;\r\n}\r\n\r\n.bno-stays-open:hover {\r\n  opacity: .93;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   STATUS\r\n   ========================================================= *\/\r\n\r\n.bno-stays-status {\r\n  margin-bottom: 15px;\r\n\r\n  padding: 16px 17px;\r\n\r\n  border: 1px solid #dce3ec;\r\n  border-radius: 12px;\r\n\r\n  background: #fff;\r\n\r\n  color: #607087;\r\n\r\n  line-height: 1.55;\r\n}\r\n\r\n.bno-stays-status:empty {\r\n  display: none;\r\n}\r\n\r\n.bno-stays-status.is-error {\r\n  border-color: #efc7c7;\r\n\r\n  background: #fff7f7;\r\n\r\n  color: #933b3b;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   MAP\r\n   ========================================================= *\/\r\n\r\n.bno-stays-map-column {\r\n  position: sticky;\r\n\r\n  top: 100px;\r\n}\r\n\r\n.bno-stays-map-card {\r\n  position: relative;\r\n\r\n  height: min(72vh,720px);\r\n  min-height: 520px;\r\n\r\n  overflow: hidden;\r\n\r\n  border: 1px solid #dce3ec;\r\n  border-radius: 18px;\r\n\r\n  background: #e5ebf0;\r\n}\r\n\r\n.bno-stays-map {\r\n  position: absolute;\r\n\r\n  inset: 0;\r\n\r\n  z-index: 1;\r\n}\r\n\r\n.bno-stays-map-note {\r\n  position: absolute;\r\n\r\n  z-index: 500;\r\n\r\n  right: 14px;\r\n  bottom: 14px;\r\n  left: 14px;\r\n\r\n  padding: 11px 13px;\r\n\r\n  border-radius: 10px;\r\n\r\n  background: rgba(255,255,255,.95);\r\n\r\n  color: #526176;\r\n\r\n  font-size: 12px;\r\n\r\n  box-shadow:\r\n    0 5px 18px rgba(12,26,56,.10);\r\n}\r\n\r\n\r\n\/* NORMAL MAP MARKER *\/\r\n\r\n.bno-stays-map-marker {\r\n  display: flex;\r\n\r\n  align-items: center;\r\n  justify-content: center;\r\n\r\n  width: 34px;\r\n  height: 34px;\r\n\r\n  border: 3px solid #fff;\r\n  border-radius: 50%;\r\n\r\n  background: #0C1A38;\r\n\r\n  color: #fff;\r\n\r\n  font-size: 12px;\r\n  font-weight: 800;\r\n\r\n  box-shadow:\r\n    0 3px 13px rgba(12,26,56,.30);\r\n}\r\n\r\n\r\n\/* PRICE MARKER - READY FOR LATER *\/\r\n\r\n.bno-stays-price-marker {\r\n  display: inline-flex;\r\n\r\n  align-items: center;\r\n  justify-content: center;\r\n\r\n  min-width: 78px;\r\n  height: 34px;\r\n\r\n  padding: 0 10px;\r\n\r\n  border: 2px solid #fff;\r\n  border-radius: 999px;\r\n\r\n  background: #0C1A38;\r\n\r\n  color: #fff;\r\n\r\n  white-space: nowrap;\r\n\r\n  font-size: 11px;\r\n  font-weight: 800;\r\n\r\n  box-shadow:\r\n    0 3px 13px rgba(12,26,56,.28);\r\n}\r\n\r\n\r\n\/* POPUP *\/\r\n\r\n.bno-stays-map-popup {\r\n  min-width: 190px;\r\n}\r\n\r\n.bno-stays-map-popup strong {\r\n  display: block;\r\n\r\n  margin-bottom: 5px;\r\n\r\n  color: #172238;\r\n\r\n  font-size: 13px;\r\n  line-height: 1.35;\r\n}\r\n\r\n.bno-stays-map-popup span {\r\n  display: block;\r\n\r\n  color: #657287;\r\n\r\n  font-size: 12px;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   SHOW MORE\r\n   ========================================================= *\/\r\n\r\n.bno-stays-more-wrap {\r\n  display: flex;\r\n\r\n  justify-content: center;\r\n\r\n  padding-top: 25px;\r\n}\r\n\r\n.bno-stays-more {\r\n  min-width: 210px;\r\n  min-height: 49px;\r\n\r\n  padding: 0 20px;\r\n\r\n  border: 1px solid #0C1A38;\r\n  border-radius: 11px;\r\n\r\n  background: #fff;\r\n\r\n  color: #0C1A38;\r\n\r\n  font: inherit;\r\n  font-weight: 750;\r\n\r\n  cursor: pointer;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   MOBILE SWITCH\r\n   ========================================================= *\/\r\n\r\n.bno-stays-mobile-switch {\r\n  display: none;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   MODAL\r\n   ========================================================= *\/\r\n\r\n.bno-stays-modal {\r\n  position: fixed;\r\n\r\n  inset: 0;\r\n\r\n  z-index: 999999;\r\n}\r\n\r\n.bno-stays-modal__backdrop {\r\n  position: absolute;\r\n\r\n  inset: 0;\r\n\r\n  background: rgba(5,14,31,.64);\r\n\r\n  backdrop-filter: blur(3px);\r\n}\r\n\r\n.bno-stays-modal__dialog {\r\n  position: absolute;\r\n\r\n  z-index: 2;\r\n\r\n  top: 3vh;\r\n  bottom: 3vh;\r\n  left: 50%;\r\n\r\n  width: min(\r\n    1060px,\r\n    calc(100% - 28px)\r\n  );\r\n\r\n  overflow-y: auto;\r\n\r\n  padding: 28px;\r\n\r\n  transform: translateX(-50%);\r\n\r\n  border-radius: 22px;\r\n\r\n  background: #fff;\r\n\r\n  box-shadow:\r\n    0 30px 90px rgba(0,0,0,.25);\r\n}\r\n\r\n.bno-stays-modal__close {\r\n  position: sticky;\r\n\r\n  z-index: 20;\r\n\r\n  top: 0;\r\n\r\n  float: right;\r\n\r\n  width: 44px;\r\n  height: 44px;\r\n\r\n  margin: 0 0 -44px;\r\n\r\n  border: 0;\r\n  border-radius: 50%;\r\n\r\n  background: #0C1A38;\r\n\r\n  color: #fff;\r\n\r\n  font-size: 27px;\r\n  line-height: 1;\r\n\r\n  cursor: pointer;\r\n}\r\n\r\n\r\n\/* MODAL HEADER *\/\r\n\r\n.bno-stays-modal-title h2 {\r\n  max-width: 850px;\r\n\r\n  margin: 6px 60px 9px 0;\r\n\r\n  color: #172238;\r\n\r\n  font-size: clamp(\r\n    29px,\r\n    4vw,\r\n    43px\r\n  );\r\n\r\n  line-height: 1.12;\r\n}\r\n\r\n.bno-stays-modal-meta {\r\n  display: flex;\r\n  flex-wrap: wrap;\r\n\r\n  align-items: center;\r\n\r\n  gap: 10px;\r\n\r\n  margin-bottom: 24px;\r\n\r\n  color: #667288;\r\n}\r\n\r\n.bno-stays-modal-stars {\r\n  color: #c98513;\r\n\r\n  letter-spacing: 1px;\r\n}\r\n\r\n\r\n\/* GALLERY *\/\r\n\r\n.bno-stays-gallery {\r\n  display: grid;\r\n\r\n  grid-template-columns:\r\n    2fr\r\n    1fr\r\n    1fr;\r\n\r\n  grid-template-rows:\r\n    190px\r\n    190px;\r\n\r\n  gap: 7px;\r\n\r\n  margin-bottom: 30px;\r\n\r\n  overflow: hidden;\r\n\r\n  border-radius: 17px;\r\n\r\n  background: #e8edf2;\r\n}\r\n\r\n.bno-stays-gallery figure {\r\n  position: relative;\r\n\r\n  min-width: 0;\r\n\r\n  margin: 0;\r\n\r\n  overflow: hidden;\r\n\r\n  background: #e7ebf0;\r\n}\r\n\r\n.bno-stays-gallery figure:first-child {\r\n  grid-row:\r\n    1 \/ 3;\r\n}\r\n\r\n.bno-stays-gallery img {\r\n  width: 100%;\r\n  height: 100%;\r\n\r\n  object-fit: cover;\r\n}\r\n\r\n\r\n\/* MODAL BODY *\/\r\n\r\n.bno-stays-modal-grid {\r\n  display: grid;\r\n\r\n  grid-template-columns:\r\n    minmax(0,1fr)\r\n    285px;\r\n\r\n  gap: 38px;\r\n\r\n  align-items: start;\r\n}\r\n\r\n.bno-stays-modal-copy h3 {\r\n  margin: 0 0 12px;\r\n\r\n  color: #172238;\r\n\r\n  font-size: 23px;\r\n}\r\n\r\n.bno-stays-modal-copy p {\r\n  margin: 0;\r\n\r\n  color: #58667a;\r\n\r\n  line-height: 1.72;\r\n\r\n  white-space: pre-line;\r\n}\r\n\r\n.bno-stays-modal-side {\r\n  padding: 20px;\r\n\r\n  border-radius: 15px;\r\n\r\n  background: #f3f6f9;\r\n}\r\n\r\n.bno-stays-modal-side strong {\r\n  display: block;\r\n\r\n  margin-bottom: 8px;\r\n\r\n  color: #172238;\r\n}\r\n\r\n.bno-stays-modal-address {\r\n  color: #5d6a7d;\r\n\r\n  font-size: 13px;\r\n  line-height: 1.6;\r\n}\r\n\r\n\r\n\/* ROOMS COMING *\/\r\n\r\n.bno-stays-room-coming {\r\n  margin-top: 38px;\r\n\r\n  padding-top: 28px;\r\n\r\n  border-top:\r\n    1px solid #dfe5ec;\r\n}\r\n\r\n.bno-stays-room-coming h3 {\r\n  margin: 5px 0 12px;\r\n\r\n  color: #172238;\r\n\r\n  font-size: 23px;\r\n}\r\n\r\n.bno-stays-room-coming-box {\r\n  padding: 18px;\r\n\r\n  border-radius: 12px;\r\n\r\n  background: #f3f6f9;\r\n\r\n  color: #5e6c80;\r\n\r\n  line-height: 1.6;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   RESPONSIVE\r\n   ========================================================= *\/\r\n\r\n@media (max-width: 900px) {\r\n\r\n  .bno-stays-filters {\r\n    grid-template-columns:\r\n      1fr\r\n      1fr;\r\n  }\r\n\r\n  .bno-stays-field:first-child {\r\n    grid-column:\r\n      1 \/ 3;\r\n  }\r\n\r\n  .bno-stays-layout {\r\n    grid-template-columns:\r\n      1fr;\r\n  }\r\n\r\n  .bno-stays-map-column {\r\n    display: none;\r\n\r\n    position: static;\r\n  }\r\n\r\n  .bno-stays-map-column.is-mobile-active {\r\n    display: block;\r\n  }\r\n\r\n  .bno-stays-list-column.is-mobile-hidden {\r\n    display: none;\r\n  }\r\n\r\n  .bno-stays-mobile-switch {\r\n    display: flex;\r\n\r\n    gap: 7px;\r\n\r\n    margin-top: 15px;\r\n  }\r\n\r\n  .bno-stays-mobile-switch button {\r\n    flex: 1;\r\n\r\n    min-height: 43px;\r\n\r\n    border: 1px solid #ccd6e2;\r\n    border-radius: 9px;\r\n\r\n    background: #fff;\r\n\r\n    color: #526176;\r\n\r\n    font-weight: 700;\r\n\r\n    cursor: pointer;\r\n  }\r\n\r\n  .bno-stays-mobile-switch button.is-active {\r\n    border-color: #0C1A38;\r\n\r\n    background: #0C1A38;\r\n\r\n    color: #fff;\r\n  }\r\n\r\n  .bno-stays-map-card {\r\n    height: 65vh;\r\n\r\n    min-height: 450px;\r\n  }\r\n\r\n}\r\n\r\n\r\n@media (max-width: 650px) {\r\n\r\n  .bno-stays-filters {\r\n    grid-template-columns:\r\n      1fr;\r\n  }\r\n\r\n  .bno-stays-field:first-child {\r\n    grid-column: auto;\r\n  }\r\n\r\n  .bno-stays-hotel {\r\n    grid-template-columns:\r\n      1fr;\r\n  }\r\n\r\n  .bno-stays-hotel__image {\r\n    min-height: 240px;\r\n  }\r\n\r\n  .bno-stays-hotel__actions {\r\n    align-items: stretch;\r\n    flex-direction: column;\r\n  }\r\n\r\n  .bno-stays-open {\r\n    width: 100%;\r\n  }\r\n\r\n  .bno-stays-modal__dialog {\r\n    top: 8px;\r\n    bottom: 8px;\r\n\r\n    padding: 19px;\r\n\r\n    border-radius: 16px;\r\n  }\r\n\r\n  .bno-stays-gallery {\r\n    grid-template-columns:\r\n      1fr\r\n      1fr;\r\n\r\n    grid-template-rows:\r\n      235px\r\n      130px;\r\n  }\r\n\r\n  .bno-stays-gallery figure:first-child {\r\n    grid-column:\r\n      1 \/ 3;\r\n\r\n    grid-row: auto;\r\n  }\r\n\r\n  .bno-stays-gallery figure:nth-child(n+4) {\r\n    display: none;\r\n  }\r\n\r\n  .bno-stays-modal-grid {\r\n    grid-template-columns:\r\n      1fr;\r\n  }\r\n\r\n}\r\n\r\n<\/style>\r\n\r\n\r\n<script>\r\n(function () {\r\n\r\n  const section =\r\n    document.querySelector(\r\n      '[data-bno-stays-preview]'\r\n    );\r\n\r\n  if (\r\n    !section ||\r\n    section.dataset.initialized === '1'\r\n  ) {\r\n    return;\r\n  }\r\n\r\n  section.dataset.initialized = '1';\r\n\r\n\r\n  \/* =======================================================\r\n     CONFIG\r\n     ======================================================= *\/\r\n\r\n  const apiBase =\r\n    String(\r\n      section.dataset.apiBase || ''\r\n    ).replace(\/\\\/+$\/, '');\r\n\r\n  const destination =\r\n    String(\r\n      section.dataset.destination || 'dubai'\r\n    )\r\n      .trim()\r\n      .toLowerCase();\r\n\r\n  const lang =\r\n    String(\r\n      section.dataset.lang || 'da'\r\n    ).trim();\r\n\r\n  const initialCount =\r\n    Number(\r\n      section.dataset.initialCount || 12\r\n    );\r\n\r\n  const pageSize =\r\n    Number(\r\n      section.dataset.pageSize || 200\r\n    );\r\n\r\n\r\n  \/* =======================================================\r\n     ELEMENTS\r\n     ======================================================= *\/\r\n\r\n  const listEl =\r\n    section.querySelector(\r\n      '[data-hotel-list]'\r\n    );\r\n\r\n  const statusEl =\r\n    section.querySelector(\r\n      '[data-status]'\r\n    );\r\n\r\n  const countEl =\r\n    section.querySelector(\r\n      '[data-result-count]'\r\n    );\r\n\r\n  const searchInput =\r\n    section.querySelector(\r\n      '[data-hotel-search]'\r\n    );\r\n\r\n  const areaFilter =\r\n    section.querySelector(\r\n      '[data-area-filter]'\r\n    );\r\n\r\n  const areaField =\r\n    section.querySelector(\r\n      '[data-area-field]'\r\n    );\r\n\r\n  const starFilter =\r\n    section.querySelector(\r\n      '[data-star-filter]'\r\n    );\r\n\r\n  const moreWrap =\r\n    section.querySelector(\r\n      '[data-more-wrap]'\r\n    );\r\n\r\n  const moreButton =\r\n    section.querySelector(\r\n      '[data-more]'\r\n    );\r\n\r\n  const mapColumn =\r\n    section.querySelector(\r\n      '[data-map-column]'\r\n    );\r\n\r\n  const listColumn =\r\n    section.querySelector(\r\n      '[data-list-column]'\r\n    );\r\n\r\n  const showMapButton =\r\n    section.querySelector(\r\n      '[data-show-map]'\r\n    );\r\n\r\n  const showListButton =\r\n    section.querySelector(\r\n      '[data-show-list]'\r\n    );\r\n\r\n  const mapNote =\r\n    section.querySelector(\r\n      '[data-map-note]'\r\n    );\r\n\r\n  const modal =\r\n    section.querySelector(\r\n      '[data-hotel-modal]'\r\n    );\r\n\r\n  const modalContent =\r\n    section.querySelector(\r\n      '[data-modal-content]'\r\n    );\r\n\r\n\r\n  \/* =======================================================\r\n     STATE\r\n     ======================================================= *\/\r\n\r\n  let allHotels = [];\r\n\r\n  let visibleCount =\r\n    initialCount;\r\n\r\n  let map = null;\r\n\r\n  let markerRecords = [];\r\n\r\n  let leafletPromise = null;\r\n\r\n  let oldOverflow = '';\r\n\r\n\r\n  \/* =======================================================\r\n     HELPERS\r\n     ======================================================= *\/\r\n\r\n  function esc(value) {\r\n\r\n    return String(\r\n      value == null ? '' : value\r\n    )\r\n      .replace(\/&\/g, '&amp;')\r\n      .replace(\/<\/g, '&lt;')\r\n      .replace(\/>\/g, '&gt;')\r\n      .replace(\/\"\/g, '&quot;')\r\n      .replace(\/'\/g, '&#039;');\r\n\r\n  }\r\n\r\n\r\n  function clean(value) {\r\n\r\n    return String(\r\n      value == null ? '' : value\r\n    ).trim();\r\n\r\n  }\r\n\r\n\r\n  function numberOrNull(value) {\r\n\r\n    if (\r\n      value === null ||\r\n      value === undefined ||\r\n      value === ''\r\n    ) {\r\n      return null;\r\n    }\r\n\r\n    const parsed =\r\n      Number(value);\r\n\r\n    return Number.isFinite(parsed)\r\n      ? parsed\r\n      : null;\r\n\r\n  }\r\n\r\n\r\n  function normalizePhoto(photo) {\r\n\r\n    if (!photo) {\r\n      return '';\r\n    }\r\n\r\n    if (\r\n      typeof photo === 'string'\r\n    ) {\r\n      return clean(photo);\r\n    }\r\n\r\n    return clean(\r\n      photo.url ||\r\n      photo.src ||\r\n      photo.href ||\r\n      photo.image_url ||\r\n      photo.imageUrl ||\r\n      ''\r\n    );\r\n\r\n  }\r\n\r\n\r\n  function normalizePhotos(value) {\r\n\r\n    if (\r\n      !Array.isArray(value)\r\n    ) {\r\n      return [];\r\n    }\r\n\r\n    return value\r\n      .map(normalizePhoto)\r\n      .filter(Boolean);\r\n\r\n  }\r\n\r\n\r\n  function addressPart(\r\n    address,\r\n    keys\r\n  ) {\r\n\r\n    if (\r\n      !address ||\r\n      typeof address !== 'object'\r\n    ) {\r\n      return '';\r\n    }\r\n\r\n    for (\r\n      const key of keys\r\n    ) {\r\n\r\n      const value =\r\n        clean(\r\n          address[key]\r\n        );\r\n\r\n      if (value) {\r\n        return value;\r\n      }\r\n\r\n    }\r\n\r\n    return '';\r\n\r\n  }\r\n\r\n\r\n  function formatAddress(address) {\r\n\r\n    if (!address) {\r\n      return '';\r\n    }\r\n\r\n    if (\r\n      typeof address === 'string'\r\n    ) {\r\n      return clean(address);\r\n    }\r\n\r\n    const parts = [\r\n\r\n      addressPart(\r\n        address,\r\n        [\r\n          'line_one',\r\n          'line1',\r\n          'address_line_1'\r\n        ]\r\n      ),\r\n\r\n      addressPart(\r\n        address,\r\n        [\r\n          'line_two',\r\n          'line2',\r\n          'address_line_2'\r\n        ]\r\n      ),\r\n\r\n      addressPart(\r\n        address,\r\n        [\r\n          'postal_code',\r\n          'postalCode'\r\n        ]\r\n      ),\r\n\r\n      addressPart(\r\n        address,\r\n        [\r\n          'city_name',\r\n          'city'\r\n        ]\r\n      ),\r\n\r\n      addressPart(\r\n        address,\r\n        [\r\n          'region',\r\n          'state'\r\n        ]\r\n      )\r\n\r\n    ]\r\n      .filter(Boolean);\r\n\r\n    return Array.from(\r\n      new Set(parts)\r\n    ).join(', ');\r\n\r\n  }\r\n\r\n\r\n  function getArea(address) {\r\n\r\n    if (\r\n      !address ||\r\n      typeof address !== 'object'\r\n    ) {\r\n      return '';\r\n    }\r\n\r\n    return clean(\r\n      address.neighbourhood ||\r\n      address.neighborhood ||\r\n      address.district ||\r\n      address.area ||\r\n      address.line_two ||\r\n      address.line2 ||\r\n      ''\r\n    );\r\n\r\n  }\r\n\r\n\r\n  function normalizeHotel(raw) {\r\n\r\n    const photos =\r\n      normalizePhotos(\r\n        raw.photos\r\n      );\r\n\r\n    \/*\r\n      priceText er med allerede n\u00e5, men inventory-endepunktet\r\n      returnerer ikke pris per i dag.\r\n\r\n      N\u00e5r vi senere kobler resultatet mot et faktisk priss\u00f8k,\r\n      kan backend returnere eksempelvis:\r\n      priceText: \"1 895 kr\"\r\n\r\n      Da g\u00e5r kartet automatisk over til prisbobler ved zoom >= 12.\r\n    *\/\r\n\r\n    const priceText =\r\n      clean(\r\n        raw.priceText ||\r\n        raw.fromPriceText ||\r\n        raw.lowestPriceText ||\r\n        ''\r\n      );\r\n\r\n    return {\r\n\r\n      id:\r\n        clean(\r\n          raw.id\r\n        ),\r\n\r\n      name:\r\n        clean(\r\n          raw.name\r\n        ) || 'Hotel',\r\n\r\n      description:\r\n        clean(\r\n          raw.description\r\n        ),\r\n\r\n      rating:\r\n        numberOrNull(\r\n          raw.rating\r\n        ),\r\n\r\n      reviewScore:\r\n        numberOrNull(\r\n          raw.reviewScore\r\n        ),\r\n\r\n      reviewCount:\r\n        numberOrNull(\r\n          raw.reviewCount\r\n        ),\r\n\r\n      photos,\r\n\r\n      coverImage:\r\n        photos[0] || '',\r\n\r\n      latitude:\r\n        numberOrNull(\r\n          raw.latitude\r\n        ),\r\n\r\n      longitude:\r\n        numberOrNull(\r\n          raw.longitude\r\n        ),\r\n\r\n      addressRaw:\r\n        raw.address || null,\r\n\r\n      address:\r\n        formatAddress(\r\n          raw.address\r\n        ),\r\n\r\n      area:\r\n        getArea(\r\n          raw.address\r\n        ),\r\n\r\n      priceText\r\n\r\n    };\r\n\r\n  }\r\n\r\n\r\n  function renderStars(value) {\r\n\r\n    if (!value) {\r\n      return '';\r\n    }\r\n\r\n    const count =\r\n      Math.max(\r\n        1,\r\n        Math.min(\r\n          5,\r\n          Math.round(value)\r\n        )\r\n      );\r\n\r\n    return '\u2605'.repeat(count);\r\n\r\n  }\r\n\r\n\r\n  function setStatus(\r\n    text,\r\n    isError\r\n  ) {\r\n\r\n    statusEl.textContent =\r\n      text || '';\r\n\r\n    statusEl.classList.toggle(\r\n      'is-error',\r\n      Boolean(isError)\r\n    );\r\n\r\n  }\r\n\r\n\r\n  \/* =======================================================\r\n     API\r\n     ======================================================= *\/\r\n\r\n  async function fetchInventoryPage(\r\n    after\r\n  ) {\r\n\r\n    const url =\r\n      new URL(\r\n        apiBase +\r\n        '\/api\/stays\/inventory-page\/' +\r\n        encodeURIComponent(destination)\r\n      );\r\n\r\n\r\n    url.searchParams.set(\r\n      'limit',\r\n      String(pageSize)\r\n    );\r\n\r\n\r\n    \/*\r\n      Viktig:\r\n      send spr\u00e5k til BNO API.\r\n    *\/\r\n\r\n    url.searchParams.set(\r\n      'lang',\r\n      lang\r\n    );\r\n\r\n\r\n    if (after) {\r\n\r\n      url.searchParams.set(\r\n        'after',\r\n        after\r\n      );\r\n\r\n    }\r\n\r\n\r\n    const response =\r\n      await fetch(\r\n        url.toString(),\r\n        {\r\n          method: 'GET',\r\n\r\n          headers: {\r\n            Accept:\r\n              'application\/json'\r\n          }\r\n        }\r\n      );\r\n\r\n\r\n    let json;\r\n\r\n\r\n    try {\r\n\r\n      json =\r\n        await response.json();\r\n\r\n    } catch (error) {\r\n\r\n      throw new Error(\r\n        'Ugyldig respons fra serveren.'\r\n      );\r\n\r\n    }\r\n\r\n\r\n    if (!response.ok) {\r\n\r\n      throw new Error(\r\n        json?.detail ||\r\n        json?.error ||\r\n        (\r\n          'HTTP ' +\r\n          response.status\r\n        )\r\n      );\r\n\r\n    }\r\n\r\n\r\n    if (\r\n      !json ||\r\n      json.ok !== true ||\r\n      !Array.isArray(json.data)\r\n    ) {\r\n\r\n      throw new Error(\r\n        'Uventet respons fra serveren.'\r\n      );\r\n\r\n    }\r\n\r\n\r\n    return json;\r\n\r\n  }\r\n\r\n\r\n  async function loadInventory() {\r\n\r\n    try {\r\n\r\n      setStatus(\r\n        'Indl\u00e6ser hoteller i Dubai \u2026',\r\n        false\r\n      );\r\n\r\n\r\n      const byId =\r\n        new Map();\r\n\r\n      let after = '';\r\n\r\n      let pages = 0;\r\n\r\n\r\n      do {\r\n\r\n        pages += 1;\r\n\r\n\r\n        if (pages > 1) {\r\n\r\n          setStatus(\r\n            'Indl\u00e6ser flere hoteller \u2026',\r\n            false\r\n          );\r\n\r\n        }\r\n\r\n\r\n        const response =\r\n          await fetchInventoryPage(\r\n            after\r\n          );\r\n\r\n\r\n        response.data\r\n          .map(normalizeHotel)\r\n          .filter(\r\n            hotel =>\r\n              hotel.id &&\r\n              hotel.name\r\n          )\r\n          .forEach(\r\n            hotel => {\r\n\r\n              byId.set(\r\n                hotel.id,\r\n                hotel\r\n              );\r\n\r\n            }\r\n          );\r\n\r\n\r\n        allHotels =\r\n          Array.from(\r\n            byId.values()\r\n          );\r\n\r\n\r\n        updateAreaFilter();\r\n\r\n        render();\r\n\r\n\r\n        after =\r\n          clean(\r\n            response\r\n              ?.pagination\r\n              ?.nextAfter\r\n          );\r\n\r\n\r\n        \/*\r\n          Safety.\r\n          Dubai skal normalt ikke trenge mange sider\r\n          n\u00e5r limit=200.\r\n        *\/\r\n\r\n        if (pages >= 10) {\r\n          break;\r\n        }\r\n\r\n\r\n      } while (after);\r\n\r\n\r\n      setStatus(\r\n        '',\r\n        false\r\n      );\r\n\r\n\r\n      updateAreaFilter();\r\n\r\n      render();\r\n\r\n\r\n    } catch (error) {\r\n\r\n      console.error(\r\n        '[BNO STAYS]',\r\n        error\r\n      );\r\n\r\n\r\n      setStatus(\r\n        'Hotelerne kunne ikke indl\u00e6ses lige nu. Pr\u00f8v igen om lidt.',\r\n        true\r\n      );\r\n\r\n\r\n      countEl.textContent =\r\n        'Hoteler kunne ikke indl\u00e6ses';\r\n\r\n    }\r\n\r\n  }\r\n\r\n\r\n  \/* =======================================================\r\n     FILTERS\r\n     ======================================================= *\/\r\n\r\n  function updateAreaFilter() {\r\n\r\n    const selected =\r\n      areaFilter.value;\r\n\r\n\r\n    const areas =\r\n      Array.from(\r\n        new Set(\r\n          allHotels\r\n            .map(\r\n              hotel =>\r\n                hotel.area\r\n            )\r\n            .filter(\r\n              area =>\r\n                area &&\r\n                area.toLowerCase() !== 'dubai'\r\n            )\r\n        )\r\n      )\r\n        .sort(\r\n          (a,b) =>\r\n            a.localeCompare(\r\n              b,\r\n              'da'\r\n            )\r\n        );\r\n\r\n\r\n    areaFilter.innerHTML =\r\n      '<option value=\"\">Alle omr\u00e5der<\/option>' +\r\n\r\n      areas\r\n        .map(\r\n          area => (\r\n            '<option value=\"' +\r\n            esc(area) +\r\n            '\">' +\r\n            esc(area) +\r\n            '<\/option>'\r\n          )\r\n        )\r\n        .join('');\r\n\r\n\r\n    if (\r\n      areas.includes(selected)\r\n    ) {\r\n      areaFilter.value =\r\n        selected;\r\n    }\r\n\r\n\r\n    \/*\r\n      Hvis vi ikke f\u00e5r gode omr\u00e5defelter fra kilden,\r\n      skjuler vi omr\u00e5de-filteret fremfor \u00e5 vise\r\n      et filter som ikke gj\u00f8r noe.\r\n    *\/\r\n\r\n    areaField.hidden =\r\n      areas.length < 2;\r\n\r\n  }\r\n\r\n\r\n  function getFilteredHotels() {\r\n\r\n    const query =\r\n      clean(\r\n        searchInput.value\r\n      ).toLowerCase();\r\n\r\n\r\n    const selectedArea =\r\n      clean(\r\n        areaFilter.value\r\n      );\r\n\r\n\r\n    const minimumStars =\r\n      Number(\r\n        starFilter.value || 0\r\n      );\r\n\r\n\r\n    return allHotels.filter(\r\n      hotel => {\r\n\r\n\r\n        if (query) {\r\n\r\n          const haystack =\r\n            [\r\n              hotel.name,\r\n              hotel.description,\r\n              hotel.area,\r\n              hotel.address\r\n            ]\r\n              .join(' ')\r\n              .toLowerCase();\r\n\r\n\r\n          if (\r\n            !haystack.includes(\r\n              query\r\n            )\r\n          ) {\r\n            return false;\r\n          }\r\n\r\n        }\r\n\r\n\r\n        if (\r\n          selectedArea &&\r\n          hotel.area !== selectedArea\r\n        ) {\r\n          return false;\r\n        }\r\n\r\n\r\n        if (\r\n          minimumStars &&\r\n          (\r\n            !hotel.rating ||\r\n            hotel.rating < minimumStars\r\n          )\r\n        ) {\r\n          return false;\r\n        }\r\n\r\n\r\n        return true;\r\n\r\n      }\r\n    );\r\n\r\n  }\r\n\r\n\r\n  \/* =======================================================\r\n     HOTEL CARD\r\n     ======================================================= *\/\r\n\r\n  function hotelCard(\r\n    hotel\r\n  ) {\r\n\r\n    const stars =\r\n      renderStars(\r\n        hotel.rating\r\n      );\r\n\r\n\r\n    const imageHtml =\r\n\r\n      hotel.coverImage\r\n\r\n        ? (\r\n          '<img ' + 'src=\"' + esc(hotel.coverImage) + '\" ' + 'alt=\"' + esc(hotel.name) + '\" ' + 'loading=\"lazy\"' + '>'\r\n        )\r\n\r\n        : (\r\n          '<div class=\"bno-stays-image-placeholder\">' +\r\n            'Bilde kommer snart' +\r\n          '<\/div>'\r\n        );\r\n\r\n\r\n    const reviewHtml =\r\n\r\n      hotel.reviewScore !== null\r\n\r\n        ? (\r\n          '<div class=\"bno-stays-rating\">' +\r\n\r\n            '<span class=\"bno-stays-score\">' +\r\n              esc(\r\n                hotel.reviewScore.toFixed(1)\r\n              ) +\r\n            '<\/span>' +\r\n\r\n            (\r\n              hotel.reviewCount !== null\r\n\r\n                ? (\r\n                  '<span class=\"bno-stays-review-count\">' +\r\n                    esc(\r\n                      hotel.reviewCount\r\n                    ) +\r\n                    ' anmeldelser' +\r\n                  '<\/span>'\r\n                )\r\n\r\n                : ''\r\n            ) +\r\n\r\n          '<\/div>'\r\n        )\r\n\r\n        : '';\r\n\r\n\r\n    return (\r\n\r\n      '<article ' + 'class=\"bno-stays-hotel\" ' + 'data-hotel-id=\"' + esc(hotel.id) + '\">' +\r\n\r\n\r\n        '<div class=\"bno-stays-hotel__image\">' +\r\n\r\n          '<span class=\"bno-stays-badge\">' +\r\n            'Kommer snart' +\r\n          '<\/span>' +\r\n\r\n          imageHtml +\r\n\r\n        '<\/div>' +\r\n\r\n\r\n        '<div class=\"bno-stays-hotel__body\">' +\r\n\r\n\r\n          '<div class=\"bno-stays-stars\">' +\r\n            esc(stars) +\r\n          '<\/div>' +\r\n\r\n\r\n          '<h3>' +\r\n            esc(hotel.name) +\r\n          '<\/h3>' +\r\n\r\n\r\n          (\r\n            hotel.area ||\r\n            hotel.address\r\n\r\n              ? (\r\n                '<div class=\"bno-stays-location\">' +\r\n                  esc(\r\n                    hotel.area ||\r\n                    hotel.address\r\n                  ) +\r\n                '<\/div>'\r\n              )\r\n\r\n              : ''\r\n          ) +\r\n\r\n\r\n          reviewHtml +\r\n\r\n\r\n          (\r\n            hotel.description\r\n\r\n              ? (\r\n                '<p class=\"bno-stays-description\">' +\r\n                  esc(hotel.description) +\r\n                '<\/p>'\r\n              )\r\n\r\n              : ''\r\n          ) +\r\n\r\n\r\n          '<div class=\"bno-stays-hotel__actions\">' +\r\n\r\n            '<span class=\"bno-stays-small-status\">' +\r\n              'Hotelinformation' +\r\n            '<\/span>' +\r\n\r\n            '<button ' + 'type=\"button\" ' + 'class=\"bno-stays-open\" ' + 'data-open-hotel=\"' + esc(hotel.id) + '\">' +\r\n              'Se hotellet' +\r\n            '<\/button>' +\r\n\r\n          '<\/div>' +\r\n\r\n\r\n        '<\/div>' +\r\n\r\n\r\n      '<\/article>'\r\n\r\n    );\r\n\r\n  }\r\n\r\n\r\n  \/* =======================================================\r\n     RENDER\r\n     ======================================================= *\/\r\n\r\n  function render() {\r\n\r\n    const filtered =\r\n      getFilteredHotels();\r\n\r\n\r\n    const visible =\r\n      filtered.slice(\r\n        0,\r\n        visibleCount\r\n      );\r\n\r\n\r\n    countEl.textContent =\r\n\r\n      filtered.length === 1\r\n\r\n        ? '1 hotel'\r\n\r\n        : (\r\n          filtered.length +\r\n          ' hoteller'\r\n        );\r\n\r\n\r\n    listEl.innerHTML =\r\n\r\n      visible.length\r\n\r\n        ? visible\r\n            .map(hotelCard)\r\n            .join('')\r\n\r\n        : (\r\n          '<div class=\"bno-stays-status\">' +\r\n            'Ingen hoteller matcher s\u00f8gningen.' +\r\n          '<\/div>'\r\n        );\r\n\r\n\r\n    moreWrap.hidden =\r\n      visible.length >=\r\n      filtered.length;\r\n\r\n\r\n    updateMapMarkers(\r\n      visible\r\n    );\r\n\r\n  }\r\n\r\n\r\n  \/* =======================================================\r\n     LEAFLET\r\n     ======================================================= *\/\r\n\r\n  function ensureLeaflet() {\r\n\r\n    if (\r\n      window.L &&\r\n      window.L.map\r\n    ) {\r\n      return Promise.resolve();\r\n    }\r\n\r\n\r\n    if (leafletPromise) {\r\n      return leafletPromise;\r\n    }\r\n\r\n\r\n    leafletPromise =\r\n      new Promise(\r\n        function(\r\n          resolve,\r\n          reject\r\n        ) {\r\n\r\n\r\n          if (\r\n            !document.querySelector(\r\n              'link[data-bno-leaflet]'\r\n            )\r\n          ) {\r\n\r\n            const link =\r\n              document.createElement(\r\n                'link'\r\n              );\r\n\r\n            link.rel =\r\n              'stylesheet';\r\n\r\n            link.href =\r\n              'https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.css';\r\n\r\n            link.dataset.bnoLeaflet =\r\n              '1';\r\n\r\n            document.head.appendChild(\r\n              link\r\n            );\r\n\r\n          }\r\n\r\n\r\n          if (\r\n            window.L &&\r\n            window.L.map\r\n          ) {\r\n\r\n            resolve();\r\n\r\n            return;\r\n\r\n          }\r\n\r\n\r\n          let script =\r\n            document.querySelector(\r\n              'script[data-bno-leaflet]'\r\n            );\r\n\r\n\r\n          if (script) {\r\n\r\n            script.addEventListener(\r\n              'load',\r\n              resolve,\r\n              { once: true }\r\n            );\r\n\r\n            script.addEventListener(\r\n              'error',\r\n              reject,\r\n              { once: true }\r\n            );\r\n\r\n            return;\r\n\r\n          }\r\n\r\n\r\n          script =\r\n            document.createElement(\r\n              'script'\r\n            );\r\n\r\n          script.src =\r\n            'https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.js';\r\n\r\n          script.dataset.bnoLeaflet =\r\n            '1';\r\n\r\n          script.onload =\r\n            resolve;\r\n\r\n          script.onerror =\r\n            reject;\r\n\r\n          document.head.appendChild(\r\n            script\r\n          );\r\n\r\n        }\r\n      );\r\n\r\n\r\n    return leafletPromise;\r\n\r\n  }\r\n\r\n\r\n  async function ensureMap() {\r\n\r\n    if (map) {\r\n      return map;\r\n    }\r\n\r\n\r\n    try {\r\n\r\n      await ensureLeaflet();\r\n\r\n\r\n      map =\r\n        window.L.map(\r\n          'bno-dubai-map',\r\n          {\r\n            scrollWheelZoom:\r\n              false\r\n          }\r\n        );\r\n\r\n\r\n      map.setView(\r\n        [\r\n          25.2048,\r\n          55.2708\r\n        ],\r\n        10\r\n      );\r\n\r\n\r\n      window.L\r\n        .tileLayer(\r\n          'https:\/\/{s}.tile.openstreetmap.org\/{z}\/{x}\/{y}.png',\r\n          {\r\n            maxZoom: 19,\r\n\r\n            attribution:\r\n              '&copy; OpenStreetMap contributors'\r\n          }\r\n        )\r\n        .addTo(map);\r\n\r\n\r\n      \/*\r\n        N\u00e5r priser senere finnes p\u00e5 hotellobjektene,\r\n        oppdaterer vi mark\u00f8rene automatisk ved zoom.\r\n      *\/\r\n\r\n      map.on(\r\n        'zoomend',\r\n        refreshMarkerIcons\r\n      );\r\n\r\n\r\n      return map;\r\n\r\n\r\n    } catch (error) {\r\n\r\n      console.error(\r\n        '[BNO MAP]',\r\n        error\r\n      );\r\n\r\n\r\n      mapNote.textContent =\r\n        'Kortet kunne ikke indl\u00e6ses.';\r\n\r\n\r\n      return null;\r\n\r\n    }\r\n\r\n  }\r\n\r\n\r\n  function markerHtml(\r\n    hotel,\r\n    index\r\n  ) {\r\n\r\n    const zoom =\r\n      map\r\n        ? map.getZoom()\r\n        : 10;\r\n\r\n\r\n    if (\r\n      zoom >= 12 &&\r\n      hotel.priceText\r\n    ) {\r\n\r\n      return (\r\n        '<div class=\"bno-stays-price-marker\">' +\r\n          esc(\r\n            hotel.priceText\r\n          ) +\r\n        '<\/div>'\r\n      );\r\n\r\n    }\r\n\r\n\r\n    return (\r\n      '<div class=\"bno-stays-map-marker\">' +\r\n        (index + 1) +\r\n      '<\/div>'\r\n    );\r\n\r\n  }\r\n\r\n\r\n  function markerIcon(\r\n    hotel,\r\n    index\r\n  ) {\r\n\r\n    const usePrice =\r\n      map &&\r\n      map.getZoom() >= 12 &&\r\n      hotel.priceText;\r\n\r\n\r\n    return window.L.divIcon(\r\n      {\r\n\r\n        className: '',\r\n\r\n        html:\r\n          markerHtml(\r\n            hotel,\r\n            index\r\n          ),\r\n\r\n        iconSize:\r\n          usePrice\r\n            ? [82,34]\r\n            : [34,34],\r\n\r\n        iconAnchor:\r\n          usePrice\r\n            ? [41,17]\r\n            : [17,17],\r\n\r\n        popupAnchor:\r\n          [0,-19]\r\n\r\n      }\r\n    );\r\n\r\n  }\r\n\r\n\r\n  function refreshMarkerIcons() {\r\n\r\n    markerRecords.forEach(\r\n      function(record) {\r\n\r\n        record.marker.setIcon(\r\n          markerIcon(\r\n            record.hotel,\r\n            record.index\r\n          )\r\n        );\r\n\r\n      }\r\n    );\r\n\r\n  }\r\n\r\n\r\n  function clearMarkers() {\r\n\r\n    if (!map) {\r\n      return;\r\n    }\r\n\r\n\r\n    markerRecords.forEach(\r\n      function(record) {\r\n\r\n        map.removeLayer(\r\n          record.marker\r\n        );\r\n\r\n      }\r\n    );\r\n\r\n\r\n    markerRecords = [];\r\n\r\n  }\r\n\r\n\r\n  async function updateMapMarkers(\r\n    hotels\r\n  ) {\r\n\r\n    const hotelMap =\r\n      await ensureMap();\r\n\r\n\r\n    if (!hotelMap) {\r\n      return;\r\n    }\r\n\r\n\r\n    clearMarkers();\r\n\r\n\r\n    const withCoordinates =\r\n      hotels.filter(\r\n        hotel =>\r\n          hotel.latitude !== null &&\r\n          hotel.longitude !== null\r\n      );\r\n\r\n\r\n    if (\r\n      withCoordinates.length === 0\r\n    ) {\r\n\r\n      mapNote.style.display =\r\n        'block';\r\n\r\n      mapNote.textContent =\r\n        allHotels.length\r\n          ? 'Kortplacering er ikke tilg\u00e6ngelig for de viste hoteller.'\r\n          : 'Hotelplaceringerne vises her, n\u00e5r hotellerne er indl\u00e6st.';\r\n\r\n\r\n      hotelMap.setView(\r\n        [\r\n          25.2048,\r\n          55.2708\r\n        ],\r\n        10\r\n      );\r\n\r\n\r\n      return;\r\n\r\n    }\r\n\r\n\r\n    mapNote.style.display =\r\n      'none';\r\n\r\n\r\n    const bounds = [];\r\n\r\n\r\n    withCoordinates.forEach(\r\n      function(\r\n        hotel,\r\n        index\r\n      ) {\r\n\r\n\r\n        const marker =\r\n          window.L.marker(\r\n            [\r\n              hotel.latitude,\r\n              hotel.longitude\r\n            ],\r\n            {\r\n              icon:\r\n                markerIcon(\r\n                  hotel,\r\n                  index\r\n                )\r\n            }\r\n          );\r\n\r\n\r\n        marker.addTo(\r\n          hotelMap\r\n        );\r\n\r\n\r\n        marker.bindPopup(\r\n\r\n          '<div class=\"bno-stays-map-popup\">' +\r\n\r\n            '<strong>' +\r\n              esc(\r\n                hotel.name\r\n              ) +\r\n            '<\/strong>' +\r\n\r\n            '<span>' +\r\n              esc(\r\n                hotel.area ||\r\n                hotel.address ||\r\n                'Dubai'\r\n              ) +\r\n            '<\/span>' +\r\n\r\n            (\r\n              hotel.priceText\r\n\r\n                ? (\r\n                  '<span style=\"margin-top:6px;font-weight:800;color:#0C1A38;\">' +\r\n                    esc(\r\n                      hotel.priceText\r\n                    ) +\r\n                  '<\/span>'\r\n                )\r\n\r\n                : ''\r\n            ) +\r\n\r\n          '<\/div>'\r\n\r\n        );\r\n\r\n\r\n        marker.on(\r\n          'click',\r\n          function () {\r\n\r\n\r\n            section\r\n              .querySelectorAll(\r\n                '.bno-stays-hotel'\r\n              )\r\n              .forEach(\r\n                function(card) {\r\n\r\n                  card.classList.remove(\r\n                    'is-map-active'\r\n                  );\r\n\r\n                }\r\n              );\r\n\r\n\r\n            section\r\n              .querySelectorAll(\r\n                '.bno-stays-hotel'\r\n              )\r\n              .forEach(\r\n                function(card) {\r\n\r\n                  if (\r\n                    card.dataset.hotelId ===\r\n                    hotel.id\r\n                  ) {\r\n\r\n                    card.classList.add(\r\n                      'is-map-active'\r\n                    );\r\n\r\n                  }\r\n\r\n                }\r\n              );\r\n\r\n          }\r\n        );\r\n\r\n\r\n        markerRecords.push(\r\n          {\r\n            marker,\r\n            hotel,\r\n            index\r\n          }\r\n        );\r\n\r\n\r\n        bounds.push(\r\n          [\r\n            hotel.latitude,\r\n            hotel.longitude\r\n          ]\r\n        );\r\n\r\n      }\r\n    );\r\n\r\n\r\n    if (\r\n      bounds.length === 1\r\n    ) {\r\n\r\n      hotelMap.setView(\r\n        bounds[0],\r\n        14\r\n      );\r\n\r\n    } else {\r\n\r\n      hotelMap.fitBounds(\r\n        bounds,\r\n        {\r\n          padding:\r\n            [35,35],\r\n\r\n          maxZoom:\r\n            14\r\n        }\r\n      );\r\n\r\n    }\r\n\r\n  }\r\n\r\n\r\n  \/* =======================================================\r\n     MODAL\r\n     ======================================================= *\/\r\n\r\n  function renderGallery(\r\n    hotel\r\n  ) {\r\n\r\n    const images =\r\n      hotel.photos\r\n        .slice(\r\n          0,\r\n          5\r\n        );\r\n\r\n\r\n    if (\r\n      !images.length\r\n    ) {\r\n      return '';\r\n    }\r\n\r\n\r\n    return (\r\n\r\n      '<div class=\"bno-stays-gallery\">' +\r\n\r\n        images\r\n          .map(\r\n            function(image) {\r\n\r\n              return (\r\n\r\n                '<figure>' +\r\n\r\n                  '<img ' + 'src=\"' + esc(image) + '\" ' + 'alt=\"' + esc(hotel.name) + '\">' +\r\n\r\n                '<\/figure>'\r\n\r\n              );\r\n\r\n            }\r\n          )\r\n          .join('') +\r\n\r\n      '<\/div>'\r\n\r\n    );\r\n\r\n  }\r\n\r\n\r\n  function openHotel(\r\n    hotel\r\n  ) {\r\n\r\n    const stars =\r\n      renderStars(\r\n        hotel.rating\r\n      );\r\n\r\n\r\n    const scoreHtml =\r\n\r\n      hotel.reviewScore !== null\r\n\r\n        ? (\r\n          '<span class=\"bno-stays-score\">' +\r\n            esc(\r\n              hotel.reviewScore.toFixed(1)\r\n            ) +\r\n          '<\/span>'\r\n        )\r\n\r\n        : '';\r\n\r\n\r\n    const reviewCountHtml =\r\n\r\n      hotel.reviewCount !== null\r\n\r\n        ? (\r\n          '<span>' +\r\n            esc(\r\n              hotel.reviewCount\r\n            ) +\r\n            ' anmeldelser' +\r\n          '<\/span>'\r\n        )\r\n\r\n        : '';\r\n\r\n\r\n    const sideHtml =\r\n\r\n      hotel.address\r\n\r\n        ? (\r\n          '<aside class=\"bno-stays-modal-side\">' +\r\n\r\n            '<strong>Adresse<\/strong>' +\r\n\r\n            '<div class=\"bno-stays-modal-address\">' +\r\n              esc(\r\n                hotel.address\r\n              ) +\r\n            '<\/div>' +\r\n\r\n          '<\/aside>'\r\n        )\r\n\r\n        : '';\r\n\r\n\r\n    modalContent.innerHTML =\r\n\r\n      '<div class=\"bno-stays-modal-title\">' +\r\n\r\n        '<span class=\"bno-eyebrow\">' +\r\n          esc(\r\n            hotel.area ||\r\n            'Dubai'\r\n          ) +\r\n        '<\/span>' +\r\n\r\n        '<h2>' +\r\n          esc(\r\n            hotel.name\r\n          ) +\r\n        '<\/h2>' +\r\n\r\n        '<div class=\"bno-stays-modal-meta\">' +\r\n\r\n          (\r\n            stars\r\n\r\n              ? (\r\n                '<span class=\"bno-stays-modal-stars\">' +\r\n                  esc(stars) +\r\n                '<\/span>'\r\n              )\r\n\r\n              : ''\r\n          ) +\r\n\r\n          scoreHtml +\r\n\r\n          reviewCountHtml +\r\n\r\n        '<\/div>' +\r\n\r\n      '<\/div>' +\r\n\r\n\r\n      renderGallery(\r\n        hotel\r\n      ) +\r\n\r\n\r\n      '<div class=\"bno-stays-modal-grid\">' +\r\n\r\n        '<div class=\"bno-stays-modal-copy\">' +\r\n\r\n          '<h3>Om hotellet<\/h3>' +\r\n\r\n          '<p>' +\r\n            esc(\r\n              hotel.description ||\r\n              'Mere information om hotellet kommer snart.'\r\n            ) +\r\n          '<\/p>' +\r\n\r\n        '<\/div>' +\r\n\r\n        sideHtml +\r\n\r\n      '<\/div>' +\r\n\r\n\r\n      '<div class=\"bno-stays-room-coming\">' +\r\n\r\n        '<span class=\"bno-eyebrow\">' +\r\n          'V\u00e6relser og ophold' +\r\n        '<\/span>' +\r\n\r\n        '<h3>V\u00e6relsestyper<\/h3>' +\r\n\r\n        '<div class=\"bno-stays-room-coming-box\">' +\r\n          'V\u00e6relsestyper, priser og tilg\u00e6ngelighed bliver snart tilg\u00e6ngelige.' +\r\n        '<\/div>' +\r\n\r\n      '<\/div>';\r\n\r\n\r\n    oldOverflow =\r\n      document.documentElement.style.overflow;\r\n\r\n\r\n    document.documentElement.style.overflow =\r\n      'hidden';\r\n\r\n\r\n    modal.hidden =\r\n      false;\r\n\r\n  }\r\n\r\n\r\n  function closeModal() {\r\n\r\n    modal.hidden =\r\n      true;\r\n\r\n\r\n    document.documentElement.style.overflow =\r\n      oldOverflow;\r\n\r\n  }\r\n\r\n\r\n  \/* =======================================================\r\n     EVENTS\r\n     ======================================================= *\/\r\n\r\n  listEl.addEventListener(\r\n    'click',\r\n    function(event) {\r\n\r\n      const button =\r\n        event.target.closest(\r\n          '[data-open-hotel]'\r\n        );\r\n\r\n\r\n      if (!button) {\r\n        return;\r\n      }\r\n\r\n\r\n      const hotel =\r\n        allHotels.find(\r\n          hotel =>\r\n            hotel.id ===\r\n            button.dataset.openHotel\r\n        );\r\n\r\n\r\n      if (hotel) {\r\n\r\n        openHotel(\r\n          hotel\r\n        );\r\n\r\n      }\r\n\r\n    }\r\n  );\r\n\r\n\r\n  section\r\n    .querySelectorAll(\r\n      '[data-modal-close]'\r\n    )\r\n    .forEach(\r\n      function(element) {\r\n\r\n        element.addEventListener(\r\n          'click',\r\n          closeModal\r\n        );\r\n\r\n      }\r\n    );\r\n\r\n\r\n  document.addEventListener(\r\n    'keydown',\r\n    function(event) {\r\n\r\n      if (\r\n        event.key === 'Escape' &&\r\n        !modal.hidden\r\n      ) {\r\n\r\n        closeModal();\r\n\r\n      }\r\n\r\n    }\r\n  );\r\n\r\n\r\n  searchInput.addEventListener(\r\n    'input',\r\n    function() {\r\n\r\n      visibleCount =\r\n        initialCount;\r\n\r\n      render();\r\n\r\n    }\r\n  );\r\n\r\n\r\n  areaFilter.addEventListener(\r\n    'change',\r\n    function() {\r\n\r\n      visibleCount =\r\n        initialCount;\r\n\r\n      render();\r\n\r\n    }\r\n  );\r\n\r\n\r\n  starFilter.addEventListener(\r\n    'change',\r\n    function() {\r\n\r\n      visibleCount =\r\n        initialCount;\r\n\r\n      render();\r\n\r\n    }\r\n  );\r\n\r\n\r\n  moreButton.addEventListener(\r\n    'click',\r\n    function() {\r\n\r\n      visibleCount +=\r\n        initialCount;\r\n\r\n      render();\r\n\r\n    }\r\n  );\r\n\r\n\r\n  showListButton.addEventListener(\r\n    'click',\r\n    function() {\r\n\r\n      listColumn.classList.remove(\r\n        'is-mobile-hidden'\r\n      );\r\n\r\n      mapColumn.classList.remove(\r\n        'is-mobile-active'\r\n      );\r\n\r\n      showListButton.classList.add(\r\n        'is-active'\r\n      );\r\n\r\n      showMapButton.classList.remove(\r\n        'is-active'\r\n      );\r\n\r\n    }\r\n  );\r\n\r\n\r\n  showMapButton.addEventListener(\r\n    'click',\r\n    async function() {\r\n\r\n      listColumn.classList.add(\r\n        'is-mobile-hidden'\r\n      );\r\n\r\n      mapColumn.classList.add(\r\n        'is-mobile-active'\r\n      );\r\n\r\n      showMapButton.classList.add(\r\n        'is-active'\r\n      );\r\n\r\n      showListButton.classList.remove(\r\n        'is-active'\r\n      );\r\n\r\n\r\n      const hotelMap =\r\n        await ensureMap();\r\n\r\n\r\n      setTimeout(\r\n        function() {\r\n\r\n          if (hotelMap) {\r\n\r\n            hotelMap.invalidateSize();\r\n\r\n          }\r\n\r\n        },\r\n        120\r\n      );\r\n\r\n    }\r\n  );\r\n\r\n\r\n  \/* =======================================================\r\n     START\r\n     ======================================================= *\/\r\n\r\n  ensureMap();\r\n\r\n  loadInventory();\r\n\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-58ba70a elementor-widget elementor-widget-html\" data-id=\"58ba70a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section id=\"omrader\" class=\"bno-section bno-section--light\">\r\n  <div class=\"bno-shell\">\r\n\r\n    <div class=\"bno-section-heading\">\r\n\r\n      <span class=\"bno-eyebrow\">\r\n        Hvor skal du bo?\r\n      <\/span>\r\n\r\n      <h2>\r\n        Udforsk nogle af Dubais mest popul\u00e6re omr\u00e5der\r\n      <\/h2>\r\n\r\n      <p>\r\n        Dubai har meget forskellige bydele og ferieomr\u00e5der. V\u00e6lg omr\u00e5de alt efter, om du f\u00f8rst og fremmest \u00f8nsker storbyliv, shopping, strand, restauranter eller en roligere base.\r\n      <\/p>\r\n\r\n    <\/div>\r\n\r\n    <div class=\"bno-dubai-info-grid\">\r\n\r\n      <div class=\"bno-dubai-info-card\">\r\n        <h3>Downtown Dubai<\/h3>\r\n        <p>\r\n          Et centralt valg for dig, der \u00f8nsker at bo t\u00e6t p\u00e5 blandt andet Burj Khalifa, Dubai Mall, restauranter og moderne storbyliv.\r\n        <\/p>\r\n      <\/div>\r\n\r\n      <div class=\"bno-dubai-info-card\">\r\n        <h3>Business Bay<\/h3>\r\n        <p>\r\n          Et moderne omr\u00e5de t\u00e6t p\u00e5 Downtown med hoteller, restauranter, h\u00f8jhuse og gode forbindelser til resten af byen.\r\n        <\/p>\r\n      <\/div>\r\n\r\n      <div class=\"bno-dubai-info-card\">\r\n        <h3>Dubai Marina & JBR<\/h3>\r\n        <p>\r\n          Et godt valg for rejsende, der \u00f8nsker promenade, strand, restauranter og et livligt omr\u00e5de ogs\u00e5 om aftenen.\r\n        <\/p>\r\n      <\/div>\r\n\r\n      <div class=\"bno-dubai-info-card\">\r\n        <h3>Jumeirah<\/h3>\r\n        <p>\r\n          Kystomr\u00e5derne i Jumeirah kombinerer strand, hoteller, restauranter og nem adgang til flere af Dubais mest kendte oplevelser.\r\n        <\/p>\r\n      <\/div>\r\n\r\n      <div class=\"bno-dubai-info-card\">\r\n        <h3>Dubai Creek & Deira<\/h3>\r\n        <p>\r\n          Her m\u00f8der det moderne Dubai nogle af byens \u00e6ldre handelsomr\u00e5der, markeder og milj\u00f8erne omkring Dubai Creek.\r\n        <\/p>\r\n      <\/div>\r\n\r\n      <div class=\"bno-dubai-info-card\">\r\n        <h3>Palm Jumeirah<\/h3>\r\n        <p>\r\n          Palm Jumeirah er is\u00e6r kendt for resorts, strandhoteller og ferieophold, hvor hotellet er en vigtig del af selve rejsen.\r\n        <\/p>\r\n      <\/div>\r\n\r\n    <\/div>\r\n\r\n  <\/div>\r\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3242af7 elementor-widget elementor-widget-html\" data-id=\"3242af7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section class=\"bno-section bno-section--soft\">\r\n  <div class=\"bno-shell\">\r\n\r\n    <div class=\"bno-dubai-editorial\">\r\n\r\n      <div class=\"bno-dubai-editorial__content\">\r\n\r\n        <span class=\"bno-eyebrow\">\r\n          Oplev Dubai\r\n        <\/span>\r\n\r\n        <div class=\"bno-section-heading\">\r\n          <h2>\r\n            Mere end blot et hotelophold\r\n          <\/h2>\r\n        <\/div>\r\n\r\n        <p>\r\n          Dubai g\u00f8r det muligt at kombinere meget forskellige ferieoplevelser p\u00e5 samme rejse. Start dagen ved stranden, brug eftermiddagen p\u00e5 shopping eller sightseeing, og slut aftenen p\u00e5 en restaurant med udsigt over byen.\r\n        <\/p>\r\n\r\n        <p>\r\n          For familier findes der b\u00e5de strande, parker og aktiviteter, mens par og vennegrupper kan kombinere hotelopholdet med restauranter, shopping, strandklubber, b\u00e5dture og oplevelser i og uden for byen.\r\n        <\/p>\r\n\r\n        <div class=\"bno-actions\">\r\n          <a href=\"#praktisk\" class=\"bno-btn bno-btn--primary\">\r\n            Se praktisk information\r\n          <\/a>\r\n        <\/div>\r\n\r\n      <\/div>\r\n\r\n      <div class=\"bno-dubai-editorial__media\">\r\n        <span>\r\n          Dubai\r\n        <\/span>\r\n      <\/div>\r\n\r\n    <\/div>\r\n\r\n  <\/div>\r\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c2c24b1 elementor-widget elementor-widget-html\" data-id=\"c2c24b1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section id=\"praktisk\" class=\"bno-section bno-section--light\">\r\n  <div class=\"bno-shell\">\r\n\r\n    <div class=\"bno-section-heading\">\r\n\r\n      <span class=\"bno-eyebrow\">\r\n        Praktisk information\r\n      <\/span>\r\n\r\n      <h2>\r\n        Nyttigt at vide f\u00f8r opholdet i Dubai\r\n      <\/h2>\r\n\r\n      <p>\r\n        Valg af omr\u00e5de, transport og tidspunkt p\u00e5 \u00e5ret har stor betydning for, hvordan du oplever Dubai.\r\n      <\/p>\r\n\r\n    <\/div>\r\n\r\n    <div class=\"bno-dubai-info-grid\">\r\n\r\n      <div class=\"bno-dubai-info-card\">\r\n        <h3>Lufthavn<\/h3>\r\n        <p>\r\n          Dubai International Airport er den prim\u00e6re lufthavn for internationale rejsende. Afstanden til hotellet varierer betydeligt alt efter, hvilket omr\u00e5de du v\u00e6lger at bo i.\r\n        <\/p>\r\n      <\/div>\r\n\r\n      <div class=\"bno-dubai-info-card\">\r\n        <h3>Transport<\/h3>\r\n        <p>\r\n          Metro, taxi og lejebil g\u00f8r det muligt at komme rundt mellem omr\u00e5derne. I visse dele af Dubai ligger attraktioner og restauranter i g\u00e5afstand fra hotellet.\r\n        <\/p>\r\n      <\/div>\r\n\r\n      <div class=\"bno-dubai-info-card\">\r\n        <h3>Klima<\/h3>\r\n        <p>\r\n          Dubai har et varmt klima det meste af \u00e5ret. Sommerm\u00e5nederne kan v\u00e6re meget varme, mens andre dele af \u00e5ret egner sig bedre til udend\u00f8rsaktiviteter og strandliv.\r\n        <\/p>\r\n      <\/div>\r\n\r\n      <div class=\"bno-dubai-info-card\">\r\n        <h3>Valuta<\/h3>\r\n        <p>\r\n          Den lokale valuta er UAE-dirham (AED). Kortbetaling er udbredt p\u00e5 hoteller, restauranter, indk\u00f8bscentre og mange andre steder.\r\n        <\/p>\r\n      <\/div>\r\n\r\n      <div class=\"bno-dubai-info-card\">\r\n        <h3>By eller strand?<\/h3>\r\n        <p>\r\n          Downtown og Business Bay passer godt til storbyferie, mens Dubai Marina, JBR, Jumeirah og Palm Jumeirah giver nemmere adgang til kysten og strandlivet.\r\n        <\/p>\r\n      <\/div>\r\n\r\n      <div class=\"bno-dubai-info-card\">\r\n        <h3>Planl\u00e6g omr\u00e5det f\u00f8rst<\/h3>\r\n        <p>\r\n          Dubai er geografisk stor. Det kan derfor betale sig at overveje, hvilke oplevelser der er vigtigst, f\u00f8r du beslutter, hvilket hotel og omr\u00e5de der passer bedst til rejsen.\r\n        <\/p>\r\n      <\/div>\r\n\r\n    <\/div>\r\n\r\n  <\/div>\r\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-20e8cfe elementor-widget elementor-widget-html\" data-id=\"20e8cfe\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section class=\"bno-section bno-section--soft\">\r\n  <div class=\"bno-shell\">\r\n\r\n    <div class=\"bno-dubai-cta-box\">\r\n\r\n      <div>\r\n\r\n        <span class=\"bno-eyebrow\">\r\n          Hoteler i Dubai\r\n        <\/span>\r\n\r\n        <h2>\r\n          Find omr\u00e5det og hotellet, der passer til din rejse\r\n        <\/h2>\r\n\r\n        <p>\r\n          Udforsk hotellerne, sammenlign beliggenhed, og \u00e5bn hvert hotel for at f\u00e5 mere information. Priser og tilg\u00e6ngelighed vises, n\u00e5r booking af hoteller i Dubai \u00e5bner hos BNO Travel.\r\n        <\/p>\r\n\r\n      <\/div>\r\n\r\n      <div class=\"bno-actions\">\r\n        <a href=\"#hoteller\" class=\"bno-btn bno-btn--primary\">\r\n          Se hotellerne\r\n        <\/a>\r\n      <\/div>\r\n\r\n    <\/div>\r\n\r\n  <\/div>\r\n<\/section>\r\n\r\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Find hoteller i Dubai med billeder, kort, g\u00e6steanmeldelser og v\u00e6relsestyper. Udforsk Downtown, Marina, Jumeirah, Business Bay og flere omr\u00e5der hos BNO Travel.<\/p>\n","protected":false},"author":260013438,"featured_media":97070,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_wpcom_ai_launchpad_about_page":false,"_wpcom_ai_launchpad_gallery_page":false,"_wpcom_ai_launchpad_contact_page":false,"_wpcom_ai_launchpad_events_page":false,"_wpcom_ai_launchpad_video_page":false,"_wpcom_ai_launchpad_portfolio_piece":false,"footnotes":"","_yoast_wpseo_title":"","_yoast_wpseo_metadesc":"","_yoast_wpseo_focuskw":"","rank_math_title":"Hoteller i Dubai | Sammenlign hoteller | BNO Travel","rank_math_description":"Hoteller i Dubai: Sammenlign beliggenhed, v\u00e6relsestyper, faciliteter og hotelinformation. Udforsk overnatning og planl\u00e6g dit ophold med BNO Travel.","rank_math_focus_keyword":"Hoteller i Dubai","_dpc-meta-title":"","_dpc-meta-description":"","_dpc-keyword":""},"class_list":["post-97834","page","type-page","status-publish","has-post-thumbnail","hentry"],"jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/PgDuwj-prY","jetpack-related-posts":[{"id":97229,"url":"https:\/\/bno-travel.com\/hoteller-i-dubai\/","url_meta":{"origin":97834,"position":0},"title":"Hoteller i Dubai \u2013 finn hotell og omr\u00e5der | BNO Travel","author":"Jan Terje \u00c5s","date":"11. september 2026","format":false,"excerpt":"Finn hoteller i Dubai med bilder, kart, gjestevurderinger og romtyper. Utforsk Downtown, Marina, Jumeirah, Business Bay og flere omr\u00e5der med BNO Travel.","rel":"","context":"Similar post","block_context":{"text":"Similar post","link":""},"img":{"alt_text":"Hoteller i Dubai \u2013 Jumeirah Beach og Dubais skyline ved solnedgang","src":"https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/09\/AdobeStock_624418872.jpeg?fit=1200%2C675&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/09\/AdobeStock_624418872.jpeg?fit=1200%2C675&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/09\/AdobeStock_624418872.jpeg?fit=1200%2C675&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/09\/AdobeStock_624418872.jpeg?fit=1200%2C675&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/09\/AdobeStock_624418872.jpeg?fit=1200%2C675&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":98089,"url":"https:\/\/bno-travel.com\/nl\/hoteller-i-dubai\/","url_meta":{"origin":97834,"position":1},"title":"Hotels in Dubai \u2013 vind hotels en gebieden | BNO Travel","author":"Jan Terje \u00c5s","date":"11. september 2026","format":false,"excerpt":"Vind hotels in Dubai met foto's, kaarten, gastenbeoordelingen en kamertypes. Ontdek Downtown, Marina, Jumeirah, Business Bay en meer gebieden met BNO Travel.","rel":"","context":"Similar post","block_context":{"text":"Similar post","link":""},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/09\/AdobeStock_624418872.jpeg?fit=1200%2C675&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/09\/AdobeStock_624418872.jpeg?fit=1200%2C675&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/09\/AdobeStock_624418872.jpeg?fit=1200%2C675&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/09\/AdobeStock_624418872.jpeg?fit=1200%2C675&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/09\/AdobeStock_624418872.jpeg?fit=1200%2C675&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":98140,"url":"https:\/\/bno-travel.com\/pl\/hoteller-i-dubai\/","url_meta":{"origin":97834,"position":2},"title":"Hotele w Dubaju \u2013 znajd\u017a hotel i okolice | BNO Travel","author":"Jan Terje \u00c5s","date":"11. september 2026","format":false,"excerpt":"Znajd\u017a hotele w Dubaju ze zdj\u0119ciami, map\u0105, opiniami go\u015bci i typami pokoi. Odkryj Downtown, Marin\u0119, Jumeirah, Business Bay i Palm Jumeirah z BNO Travel.","rel":"","context":"Similar post","block_context":{"text":"Similar post","link":""},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/09\/AdobeStock_624418872.jpeg?fit=1200%2C675&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/09\/AdobeStock_624418872.jpeg?fit=1200%2C675&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/09\/AdobeStock_624418872.jpeg?fit=1200%2C675&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/09\/AdobeStock_624418872.jpeg?fit=1200%2C675&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/09\/AdobeStock_624418872.jpeg?fit=1200%2C675&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":97987,"url":"https:\/\/bno-travel.com\/is\/hotel-i-dubai\/","url_meta":{"origin":97834,"position":3},"title":"H\u00f3tel \u00ed D\u00faba\u00ed \u2013 finndu h\u00f3tel og sv\u00e6\u00f0i | BNO Travel","author":"Jan Terje \u00c5s","date":"11. september 2026","format":false,"excerpt":"Finndu h\u00f3tel \u00ed D\u00faba\u00ed me\u00f0 myndum, kortum, ums\u00f6gnum gesta og herbergistegundum. Sko\u00f0a\u00f0u Downtown, Marina, Jumeirah, Business Bay og fleiri sv\u00e6\u00f0i me\u00f0 BNO Travel.","rel":"","context":"Similar post","block_context":{"text":"Similar post","link":""},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/09\/AdobeStock_624418872.jpeg?fit=1200%2C675&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/09\/AdobeStock_624418872.jpeg?fit=1200%2C675&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/09\/AdobeStock_624418872.jpeg?fit=1200%2C675&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/09\/AdobeStock_624418872.jpeg?fit=1200%2C675&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/09\/AdobeStock_624418872.jpeg?fit=1200%2C675&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":97726,"url":"https:\/\/bno-travel.com\/en\/hotels-in-dubai\/","url_meta":{"origin":97834,"position":4},"title":"Hotels in Dubai \u2013 find hotels and areas | BNO Travel","author":"Jan Terje \u00c5s","date":"11. september 2026","format":false,"excerpt":"Find hotels in Dubai with photos, maps, guest reviews and room types. Explore Downtown, Marina, Jumeirah, Business Bay and more areas with BNO Travel.","rel":"","context":"Similar post","block_context":{"text":"Similar post","link":""},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/09\/AdobeStock_624418872.jpeg?fit=1200%2C675&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/09\/AdobeStock_624418872.jpeg?fit=1200%2C675&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/09\/AdobeStock_624418872.jpeg?fit=1200%2C675&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/09\/AdobeStock_624418872.jpeg?fit=1200%2C675&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/09\/AdobeStock_624418872.jpeg?fit=1200%2C675&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":98295,"url":"https:\/\/bno-travel.com\/sv\/hotell-i-dubai\/","url_meta":{"origin":97834,"position":5},"title":"Hotell i Dubai \u2013 hitta hotell och omr\u00e5den | BNO Travel","author":"Jan Terje \u00c5s","date":"11. september 2026","format":false,"excerpt":"Hitta hotell i Dubai med bilder, kartor, g\u00e4strecensioner och rumstyper. Utforska Downtown, Marina, Jumeirah, Business Bay och fler omr\u00e5den med BNO Travel.","rel":"","context":"Similar post","block_context":{"text":"Similar post","link":""},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/09\/AdobeStock_624418872.jpeg?fit=1200%2C675&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/09\/AdobeStock_624418872.jpeg?fit=1200%2C675&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/09\/AdobeStock_624418872.jpeg?fit=1200%2C675&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/09\/AdobeStock_624418872.jpeg?fit=1200%2C675&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/bno-travel.com\/wp-content\/uploads\/2026\/09\/AdobeStock_624418872.jpeg?fit=1200%2C675&ssl=1&resize=1050%2C600 3x"},"classes":[]}],"_links":{"self":[{"href":"https:\/\/bno-travel.com\/da\/wp-json\/wp\/v2\/pages\/97834","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bno-travel.com\/da\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/bno-travel.com\/da\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/bno-travel.com\/da\/wp-json\/wp\/v2\/users\/260013438"}],"replies":[{"embeddable":true,"href":"https:\/\/bno-travel.com\/da\/wp-json\/wp\/v2\/comments?post=97834"}],"version-history":[{"count":1,"href":"https:\/\/bno-travel.com\/da\/wp-json\/wp\/v2\/pages\/97834\/revisions"}],"predecessor-version":[{"id":97835,"href":"https:\/\/bno-travel.com\/da\/wp-json\/wp\/v2\/pages\/97834\/revisions\/97835"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/bno-travel.com\/da\/wp-json\/wp\/v2\/media\/97070"}],"wp:attachment":[{"href":"https:\/\/bno-travel.com\/da\/wp-json\/wp\/v2\/media?parent=97834"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}