{"id":98191,"date":"2026-09-11T17:57:06","date_gmt":"2026-09-11T15:57:06","guid":{"rendered":"https:\/\/bno-travel.com\/hoteis-em-dubai\/"},"modified":"2026-09-16T00:54:17","modified_gmt":"2026-09-15T22:54:17","slug":"hoteis-em-dubai","status":"publish","type":"page","link":"https:\/\/bno-travel.com\/pt-pt\/hoteis-em-dubai\/","title":{"rendered":"Hot\u00e9is no Dubai \u2013 encontra hot\u00e9is e zonas | BNO Travel"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"98191\" class=\"elementor elementor-98191 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 forente arabiske emirater\r\n      <\/span>\r\n\r\n      <h1>\r\n        Hoteller i Dubai \u2013 finn oppholdet som passer reisen din\r\n      <\/h1>\r\n\r\n      <p class=\"bno-lead\">\r\n        Utforsk hoteller fra Downtown Dubai og Business Bay til\r\n        Dubai Marina, Jumeirah og omr\u00e5dene rundt Dubai Creek.\r\n        Se hotellene, romtypene og beliggenheten f\u00f8r bestilling\r\n        \u00e5pner 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 hotellene\r\n        <\/a>\r\n\r\n        <a href=\"#omrader\" class=\"bno-btn bno-btn--secondary\">\r\n          Utforsk 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          Alojamento no Dubai\r\n        <\/span>\r\n\r\n        <div class=\"bno-section-heading\">\r\n          <h2>\r\n            Da cidade e das compras \u00e0 praia e \u00e0 vida de resort\r\n          <\/h2>\r\n        <\/div>\r\n\r\n        <p>\r\n          O Dubai \u00e9 composto por v\u00e1rias zonas bastante diferentes entre si, e o local onde escolhes ficar tem grande impacto na experi\u00eancia. Downtown Dubai e Business Bay s\u00e3o boas op\u00e7\u00f5es para quem procura vida urbana moderna, restaurantes e atra\u00e7\u00f5es conhecidas por perto, enquanto Dubai Marina e Jumeirah oferecem acesso mais f\u00e1cil \u00e0 praia, ao passeio mar\u00edtimo e \u00e0 costa.\r\n        <\/p>\r\n\r\n        <p>\r\n          A BNO Travel re\u00fane uma ampla sele\u00e7\u00e3o de hot\u00e9is e aparthot\u00e9is no Dubai. Podes explorar as op\u00e7\u00f5es, comparar a localiza\u00e7\u00e3o e as informa\u00e7\u00f5es dos hot\u00e9is e consultar os tipos de quarto dispon\u00edveis antes da abertura da solu\u00e7\u00e3o completa de reservas.\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>Cidade e praia<\/strong>\r\n          <span>\r\n            Combina compras, restaurantes e pontos de interesse com dias de praia e momentos de descanso junto \u00e0 costa.\r\n          <\/span>\r\n        <\/div>\r\n\r\n        <div class=\"bno-dubai-highlight\">\r\n          <strong>Muitas zonas diferentes<\/strong>\r\n          <span>\r\n            Escolhe entre zonas como Downtown, Business Bay, Dubai Marina, Jumeirah e Dubai Creek.\r\n          <\/span>\r\n        <\/div>\r\n\r\n        <div class=\"bno-dubai-highlight\">\r\n          <strong>Hot\u00e9is para diferentes tipos de viagem<\/strong>\r\n          <span>\r\n            Encontra op\u00e7\u00f5es para casais, fam\u00edlias, viagens de neg\u00f3cios e estadias mais longas.\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=\"pt-pt\" 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        Hot\u00e9is no Dubai\r\n      <\/span>\r\n\r\n      <h2>\r\n        Encontra o hotel ideal para a tua estadia\r\n      <\/h2>\r\n\r\n      <p>\r\n        Explora hot\u00e9is no Dubai e consulta fotografias, localiza\u00e7\u00e3o, informa\u00e7\u00f5es sobre o hotel e avalia\u00e7\u00f5es de h\u00f3spedes. Em breve estar\u00e3o dispon\u00edveis mais detalhes e as reservas.\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        A carregar hot\u00e9is \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>Pesquisar hotel<\/span>\r\n\r\n          <input\r\n            type=\"search\"\r\n            placeholder=\"Nome do hotel ou zona\"\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>Zona<\/span>\r\n\r\n          <select data-area-filter>\r\n            <option value=\"\">\r\n              Todas as zonas\r\n            <\/option>\r\n          <\/select>\r\n        <\/label>\r\n\r\n\r\n        <label class=\"bno-stays-field\">\r\n          <span>Estrelas<\/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 estrelas\r\n            <\/option>\r\n\r\n            <option value=\"4\">\r\n              4 estrelas ou mais\r\n            <\/option>\r\n\r\n            <option value=\"3\">\r\n              3 estrelas ou mais\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          Lista\r\n        <\/button>\r\n\r\n        <button type=\"button\" data-show-map>\r\n          Mapa\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          A carregar hot\u00e9is \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            Ver mais hot\u00e9is\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            A carregar localiza\u00e7\u00f5es dos hot\u00e9is \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=\"Informa\u00e7\u00f5es do hotel\">\r\n\r\n      <button type=\"button\" class=\"bno-stays-modal__close\" data-modal-close aria-label=\"Fechar\">\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 || 'pt-pt'\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        'Resposta inv\u00e1lida do servidor.'\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        'Resposta inesperada do servidor.'\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        'A carregar hot\u00e9is no 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            'A carregar mais hot\u00e9is \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        'N\u00e3o foi poss\u00edvel carregar os hot\u00e9is neste momento. Tenta novamente dentro de instantes.',\r\n        true\r\n      );\r\n\r\n\r\n      countEl.textContent =\r\n        'N\u00e3o foi poss\u00edvel carregar os hot\u00e9is';\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              'pt-pt'\r\n            )\r\n        );\r\n\r\n\r\n    areaFilter.innerHTML =\r\n      '<option value=\"\">Todas as zonas<\/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            'Imagem dispon\u00edvel em breve' +\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                    ' avalia\u00e7\u00f5es' +\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            'Em breve' +\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              'Informa\u00e7\u00f5es do hotel' +\r\n            '<\/span>' +\r\n\r\n            '<button ' + 'type=\"button\" ' + 'class=\"bno-stays-open\" ' + 'data-open-hotel=\"' + esc(hotel.id) + '\">' +\r\n              'Ver hotel' +\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          ' hot\u00e9is'\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            'Nenhum hotel corresponde \u00e0 pesquisa.' +\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.addEventListaner(\r\n              'load',\r\n              resolve,\r\n              { once: true }\r\n            );\r\n\r\n            script.addEventListaner(\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        'Mapaet kunne ikke lastes.';\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          ? 'Mapaplassering er ikke tilgjengelig for hotellene som vises.'\r\n          : 'As localiza\u00e7\u00f5es dos hot\u00e9is ser\u00e3o apresentadas aqui quando os hot\u00e9is forem carregados.';\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            ' avalia\u00e7\u00f5es' +\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>Morada<\/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>Sobre o hotel<\/h3>' +\r\n\r\n          '<p>' +\r\n            esc(\r\n              hotel.description ||\r\n              'Mais informa\u00e7\u00f5es sobre o hotel estar\u00e3o dispon\u00edveis em breve.'\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          'Quartos e estadia' +\r\n        '<\/span>' +\r\n\r\n        '<h3>Tipos de quarto<\/h3>' +\r\n\r\n        '<div class=\"bno-stays-room-coming-box\">' +\r\n          'Os tipos de quarto, pre\u00e7os e disponibilidade estar\u00e3o dispon\u00edveis em breve.' +\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.addEventListaner(\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.addEventListaner(\r\n          'click',\r\n          closeModal\r\n        );\r\n\r\n      }\r\n    );\r\n\r\n\r\n  document.addEventListaner(\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.addEventListaner(\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.addEventListaner(\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.addEventListaner(\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.addEventListaner(\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.addEventListaner(\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.addEventListaner(\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        Onde ficar?\r\n      <\/span>\r\n\r\n      <h2>\r\n        Explora algumas das zonas mais populares do Dubai\r\n      <\/h2>\r\n\r\n      <p>\r\n        O Dubai tem bairros e zonas tur\u00edsticas muito diferentes entre si. Escolhe a zona consoante procures sobretudo vida urbana, compras, praia, restaurantes ou uma base mais tranquila.\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          Uma op\u00e7\u00e3o central para quem quer ficar perto do Burj Khalifa, do Dubai Mall, de restaurantes e da vida urbana moderna.\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          Uma zona moderna perto de Downtown, com hot\u00e9is, restaurantes, arranha-c\u00e9us e boas liga\u00e7\u00f5es ao resto da cidade.\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          Uma boa op\u00e7\u00e3o para quem procura passeio mar\u00edtimo, praia, restaurantes e uma zona animada tamb\u00e9m \u00e0 noite.\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          As zonas costeiras de Jumeirah combinam praia, hot\u00e9is e restaurantes com acesso f\u00e1cil a v\u00e1rias das experi\u00eancias mais conhecidas do Dubai.\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          Aqui, o Dubai moderno encontra algumas das zonas comerciais mais antigas da cidade, mercados e a envolvente de 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 \u00e9 especialmente conhecida pelos resorts, hot\u00e9is de praia e estadias em que o pr\u00f3prio hotel \u00e9 uma parte importante da viagem.\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          Descobre o Dubai\r\n        <\/span>\r\n\r\n        <div class=\"bno-section-heading\">\r\n          <h2>\r\n            Muito mais do que uma estadia num hotel\r\n          <\/h2>\r\n        <\/div>\r\n\r\n        <p>\r\n          O Dubai permite combinar experi\u00eancias de f\u00e9rias muito diferentes na mesma viagem. Come\u00e7a o dia na praia, passa a tarde a fazer compras ou a visitar a cidade e termina a noite num restaurante com vista sobre a cidade.\r\n        <\/p>\r\n\r\n        <p>\r\n          Para as fam\u00edlias h\u00e1 praias, parques e atividades, enquanto casais e grupos de amigos podem combinar a estadia no hotel com restaurantes, compras, clubes de praia, passeios de barco e experi\u00eancias dentro e fora da cidade.\r\n        <\/p>\r\n\r\n        <div class=\"bno-actions\">\r\n          <a href=\"#praktisk\" class=\"bno-btn bno-btn--primary\">\r\n            Ver informa\u00e7\u00f5es pr\u00e1ticas\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        Informa\u00e7\u00f5es pr\u00e1ticas\r\n      <\/span>\r\n\r\n      <h2>\r\n        O que \u00e9 \u00fatil saber antes da estadia no Dubai\r\n      <\/h2>\r\n\r\n      <p>\r\n        A escolha da zona, os transportes e a \u00e9poca do ano influenciam bastante a forma como vives o 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>Aeroporto<\/h3>\r\n        <p>\r\n          O Aeroporto Internacional do Dubai \u00e9 o principal aeroporto para viajantes internacionais. A dist\u00e2ncia at\u00e9 ao hotel varia bastante consoante a zona onde escolhes ficar.\r\n        <\/p>\r\n      <\/div>\r\n\r\n      <div class=\"bno-dubai-info-card\">\r\n        <h3>Transportes<\/h3>\r\n        <p>\r\n          O metro, o t\u00e1xi e o carro de aluguer permitem deslocar-te entre as diferentes zonas. Em algumas partes do Dubai, atra\u00e7\u00f5es e restaurantes ficam a uma curta dist\u00e2ncia a p\u00e9 do hotel.\r\n        <\/p>\r\n      <\/div>\r\n\r\n      <div class=\"bno-dubai-info-card\">\r\n        <h3>Clima<\/h3>\r\n        <p>\r\n          O Dubai tem um clima quente durante grande parte do ano. Os meses de ver\u00e3o podem ser muito quentes, enquanto outras \u00e9pocas s\u00e3o mais adequadas para atividades ao ar livre e dias de praia.\r\n        <\/p>\r\n      <\/div>\r\n\r\n      <div class=\"bno-dubai-info-card\">\r\n        <h3>Moeda<\/h3>\r\n        <p>\r\n          A moeda local \u00e9 o dirham dos Emirados \u00c1rabes Unidos (AED). O pagamento com cart\u00e3o \u00e9 amplamente aceite em hot\u00e9is, restaurantes, centros comerciais e muitos outros locais.\r\n        <\/p>\r\n      <\/div>\r\n\r\n      <div class=\"bno-dubai-info-card\">\r\n        <h3>Cidade ou praia?<\/h3>\r\n        <p>\r\n          Downtown e Business Bay s\u00e3o boas op\u00e7\u00f5es para uma estadia urbana, enquanto Dubai Marina, JBR, Jumeirah e Palm Jumeirah oferecem acesso mais f\u00e1cil \u00e0 costa e \u00e0 praia.\r\n        <\/p>\r\n      <\/div>\r\n\r\n      <div class=\"bno-dubai-info-card\">\r\n        <h3>Escolhe primeiro a zona<\/h3>\r\n        <p>\r\n          O Dubai \u00e9 geograficamente extenso. Por isso, vale a pena avaliar quais as experi\u00eancias mais importantes antes de decidires qual o hotel e a zona que melhor se adequam \u00e0 tua viagem.\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          Hot\u00e9is no Dubai\r\n        <\/span>\r\n\r\n        <h2>\r\n          Encontra a zona e o hotel ideais para a tua viagem\r\n        <\/h2>\r\n\r\n        <p>\r\n          Explora os hot\u00e9is, compara a localiza\u00e7\u00e3o e abre cada hotel para obter mais informa\u00e7\u00f5es. Os pre\u00e7os e a disponibilidade ficar\u00e3o dispon\u00edveis quando as reservas dos hot\u00e9is do Dubai abrirem na 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          Ver hot\u00e9is\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>Encontra hot\u00e9is no Dubai com fotografias, mapas, avalia\u00e7\u00f5es de h\u00f3spedes e tipos de quarto. Explora Downtown, Marina, Jumeirah, Business Bay e outras zonas com a BNO Travel.<\/p>\n","protected":false},"author":260013438,"featured_media":97078,"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":"Hot\u00e9is no Dubai | Comparar hot\u00e9is | BNO Travel","rank_math_description":"Hot\u00e9is no Dubai: Compara localiza\u00e7\u00e3o, tipos de quarto, comodidades e informa\u00e7\u00f5es dos hot\u00e9is. Explora alojamentos e planeia a estadia com a BNO Travel.","rank_math_focus_keyword":"Hot\u00e9is no Dubai","_dpc-meta-title":"","_dpc-meta-description":"","_dpc-keyword":""},"class_list":["post-98191","page","type-page","status-publish","has-post-thumbnail","hentry"],"jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/PgDuwj-pxJ","jetpack-related-posts":[{"id":97987,"url":"https:\/\/bno-travel.com\/is\/hotel-i-dubai\/","url_meta":{"origin":98191,"position":0},"title":"H\u00f3tel \u00ed D\u00faba\u00ed \u2013 finndu h\u00f3tel og sv\u00e6\u00f0i | BNO Travel","author":"Jan Terje \u00c5s","date":"11 de Setembro, 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":98089,"url":"https:\/\/bno-travel.com\/nl\/hoteller-i-dubai\/","url_meta":{"origin":98191,"position":1},"title":"Hotels in Dubai \u2013 vind hotels en gebieden | BNO Travel","author":"Jan Terje \u00c5s","date":"11 de Setembro, 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":97229,"url":"https:\/\/bno-travel.com\/hoteller-i-dubai\/","url_meta":{"origin":98191,"position":2},"title":"Hoteller i Dubai \u2013 finn hotell og omr\u00e5der | BNO Travel","author":"Jan Terje \u00c5s","date":"11 de Setembro, 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":97726,"url":"https:\/\/bno-travel.com\/en\/hotels-in-dubai\/","url_meta":{"origin":98191,"position":3},"title":"Hotels in Dubai \u2013 find hotels and areas | BNO Travel","author":"Jan Terje \u00c5s","date":"11 de Setembro, 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":97834,"url":"https:\/\/bno-travel.com\/da\/hoteller-i-dubai\/","url_meta":{"origin":98191,"position":4},"title":"Hoteller i Dubai \u2013 find hoteller og omr\u00e5der | BNO Travel","author":"Jan Terje \u00c5s","date":"11 de Setembro, 2026","format":false,"excerpt":"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.","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":98191,"position":5},"title":"Hotell i Dubai \u2013 hitta hotell och omr\u00e5den | BNO Travel","author":"Jan Terje \u00c5s","date":"11 de Setembro, 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\/pt-pt\/wp-json\/wp\/v2\/pages\/98191","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bno-travel.com\/pt-pt\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/bno-travel.com\/pt-pt\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/bno-travel.com\/pt-pt\/wp-json\/wp\/v2\/users\/260013438"}],"replies":[{"embeddable":true,"href":"https:\/\/bno-travel.com\/pt-pt\/wp-json\/wp\/v2\/comments?post=98191"}],"version-history":[{"count":3,"href":"https:\/\/bno-travel.com\/pt-pt\/wp-json\/wp\/v2\/pages\/98191\/revisions"}],"predecessor-version":[{"id":98535,"href":"https:\/\/bno-travel.com\/pt-pt\/wp-json\/wp\/v2\/pages\/98191\/revisions\/98535"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/bno-travel.com\/pt-pt\/wp-json\/wp\/v2\/media\/97078"}],"wp:attachment":[{"href":"https:\/\/bno-travel.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=98191"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}